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 015package org.apache.hivemind.impl; 016 017import org.apache.commons.logging.Log; 018import org.apache.commons.logging.LogFactory; 019import org.apache.hivemind.ErrorLog; 020import org.apache.hivemind.internal.ExtensionPoint; 021import org.apache.hivemind.internal.Module; 022import org.apache.hivemind.internal.Visibility; 023import 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 */ 030public 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}