/** * The contents of this file are subject to the OpenMRS Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://license.openmrs.org * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ package org.openmrs.module; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * An extension is a small snippet of code that is run at certain "extension points" throughout the * user interface * <p> * An extension is not necessarily tied to only one certain point. If all of the need return values * are defined it can be used to extend any point. A module can contain many extensions for many * different points. */ public abstract class Extension { private Log log = LogFactory.getLog(this.getClass()); // point which this extension is extending private String pointId; // id of the module implementing this point private String moduleId; // parameters given at the extension point private Map<String, String> parameterMap; /** * String separating the pointId and media type in an extension id * * @see #toExtensionId(String, MEDIA_TYPE) */ public static final String extensionIdSeparator = "|"; /** * All media types allowed by the module extension system. If an extension specifies 'html' as * its media type, it is assumed to mainly work just within html rendering environments. If an * extension has a null media type, it should work for any visual/text rendering environment */ public enum MEDIA_TYPE { html } /** * default constructor */ public Extension() { } /** * Called before being displayed each time * * @param parameterMap */ public void initialize(Map<String, String> parameterMap) { log.debug("Initializing extension for point: " + pointId); this.setPointId(pointId); this.setParameterMap(parameterMap); } /** * Get the point id * * @return the <code>String</code> Point Id */ public String getPointId() { return pointId; } /** * Set the point id * * @param pointId */ public void setPointId(String pointId) { this.pointId = pointId; } /** * Get all of the parameters given to this extension point * * @return key-value parameter map */ public Map<String, String> getParameterMap() { return parameterMap; } /** * Parameters given at the extension point This method is usually called only during extension * initialization * * @param parameterMap key-value parameter map */ public void setParameterMap(Map<String, String> parameterMap) { this.parameterMap = parameterMap; } /** * Sets the content type of this extension. If null is returned this extension should work * across all medium types * * @return type of the medium that this extension works for */ public abstract Extension.MEDIA_TYPE getMediaType(); /** * Get the extension point id * * @return the <code>String</code> Extension Id */ public String getExtensionId() { return toExtensionId(getPointId(), getMediaType()); } /** * If this method returns a non-null value then the return value will be used as the default * content for this extension at this extension point * * @return override content */ public String getOverrideContent(String bodyContent) { return null; } /** * Get this extension's module id * * @return the <code>String</code> Module Id */ public final String getModuleId() { return moduleId; } /** * Set the module id of this extension * * @param moduleId */ public final void setModuleId(String moduleId) { this.moduleId = moduleId; } /** * Get the string representation of this extension * * @see java.lang.Object#toString() */ public final String toString() { return "Extension: " + this.getExtensionId(); } /** * Convert the given pointId and mediaType to an extensionId. The extension id is usually * pointid|mediaType if mediatype is null, extension id is just point id * * @param pointId * @param mediaType * @return string extension id */ public static final String toExtensionId(String pointId, MEDIA_TYPE mediaType) { if (mediaType != null) return new StringBuffer(pointId).append(Extension.extensionIdSeparator).append(mediaType).toString(); else return pointId; } }