001 // Copyright 2004, 2005 The Apache Software Foundation 002 // 003 // Licensed under the Apache License, Version 2.0 (the "License"); 004 // you may not use this file except in compliance with the License. 005 // You may obtain a copy of the License at 006 // 007 // http://www.apache.org/licenses/LICENSE-2.0 008 // 009 // Unless required by applicable law or agreed to in writing, software 010 // distributed under the License is distributed on an "AS IS" BASIS, 011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 // See the License for the specific language governing permissions and 013 // limitations under the License. 014 015 package org.apache.hivemind.impl; 016 017 import org.apache.commons.logging.Log; 018 import org.apache.commons.logging.LogFactory; 019 import org.apache.hivemind.ErrorLog; 020 import org.apache.hivemind.internal.ExtensionPoint; 021 import org.apache.hivemind.internal.Module; 022 import org.apache.hivemind.internal.Visibility; 023 import org.apache.hivemind.util.ToStringBuilder; 024 025 /** 026 * Base class for extension points; provides module, visibility and extensionPointId properties. 027 * 028 * @author Howard Lewis Ship 029 */ 030 public abstract class AbstractExtensionPoint extends BaseLocatable implements ExtensionPoint 031 { 032 private Module _module; 033 034 private String _extensionPointId; 035 036 /** @since 1.1 */ 037 private Visibility _visibility; 038 039 /** @since 1.1 */ 040 041 private ErrorLog _errorLog; 042 043 public synchronized String toString() 044 { 045 ToStringBuilder builder = new ToStringBuilder(this); 046 builder.append("extensionPointId", _extensionPointId); 047 builder.append("visibility", _visibility); 048 049 extendDescription(builder); 050 051 return builder.toString(); 052 } 053 054 /** 055 * Implemented in subclasses to provide details about subclass properties. 056 */ 057 protected abstract void extendDescription(ToStringBuilder builder); 058 059 public void setExtensionPointId(String extensionPointId) 060 { 061 _extensionPointId = extensionPointId; 062 } 063 064 public String getExtensionPointId() 065 { 066 return _extensionPointId; 067 } 068 069 public void setModule(Module module) 070 { 071 _module = module; 072 } 073 074 public Module getModule() 075 { 076 return _module; 077 } 078 079 /** 080 * @since 1.1 081 */ 082 public void setVisibility(Visibility visibility) 083 { 084 _visibility = visibility; 085 } 086 087 /** 088 * Returns true if the extension point is public, or the extgension point is visible to the 089 * module. 090 * 091 * @param module 092 * The module to validate visibility against, or null for no module ... such as when 093 * the application accesses an extension via {@link org.apache.hivemind.Registry}. 094 * @since 1.1 095 */ 096 public boolean visibleToModule(Module module) 097 { 098 if (_visibility == Visibility.PUBLIC) 099 return true; 100 101 return _module.equals(module); 102 } 103 104 /** @since 1.1 */ 105 public Log getLog() 106 { 107 return LogFactory.getLog(getExtensionPointId()); 108 } 109 110 /** @since 1.1 */ 111 public synchronized ErrorLog getErrorLog() 112 { 113 if (_errorLog == null) 114 _errorLog = new ErrorLogImpl(_module.getErrorHandler(), getLog()); 115 116 return _errorLog; 117 } 118 }