package org.osivia.site.customizer.attributes; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import javax.portlet.GenericPortlet; import javax.portlet.PortletException; import org.osivia.portal.api.customization.CustomizationContext; import org.osivia.portal.api.customization.CustomizationModuleMetadatas; import org.osivia.portal.api.customization.ICustomizationModule; import org.osivia.portal.api.customization.ICustomizationModulesRepository; import org.osivia.portal.api.theming.IAttributesBundle; /** * Attributes customizer. * * @author Cédric Krommenhoek * @see GenericPortlet * @see ICustomizationModule */ public class AttributesCustomizer extends GenericPortlet implements ICustomizationModule { /** Customizer name. */ private static final String CUSTOMIZER_NAME = "osivia.site.customizer.attributes"; /** Customization modules repository attribute name. */ private static final String ATTRIBUTE_CUSTOMIZATION_MODULES_REPOSITORY = "CustomizationModulesRepository"; /** Customization module metadatas. */ private final CustomizationModuleMetadatas metadatas; /** Customized bundles. */ private final List bundles; /** Customization modules repository. */ private ICustomizationModulesRepository repository; /** * Constructor. */ public AttributesCustomizer() { super(); this.metadatas = this.generateMetadatas(); this.bundles = new ArrayList(); this.bundles.add(CustomizedAttributesBundle.getInstance()); } /** * Generate customization module metadatas. * * @return metadatas */ private final CustomizationModuleMetadatas generateMetadatas() { CustomizationModuleMetadatas metadatas = new CustomizationModuleMetadatas(); metadatas.setName(CUSTOMIZER_NAME); metadatas.setModule(this); metadatas.setCustomizationIDs(Arrays.asList(IAttributesBundle.CUSTOMIZER_ID)); return metadatas; } /** * {@inheritDoc} */ @Override public void init() throws PortletException { super.init(); this.repository = (ICustomizationModulesRepository) this.getPortletContext().getAttribute(ATTRIBUTE_CUSTOMIZATION_MODULES_REPOSITORY); this.repository.register(this.metadatas); } /** * {@inheritDoc} */ @Override public void destroy() { super.destroy(); this.repository.unregister(this.metadatas); } /** * {@inheritDoc} */ @Override public void customize(String customizationID, CustomizationContext context) { Map attributes = context.getAttributes(); String name = (String) attributes.get(IAttributesBundle.CUSTOMIZER_ATTRIBUTE_NAME); for (IAttributesBundle bundle : this.bundles) { if (bundle.getAttributeNames().contains(name)) { attributes.put(IAttributesBundle.CUSTOMIZER_ATTRIBUTE_RESULT, bundle); break; } } } }