/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.configuration.admin.web.internal.model; import static com.liferay.portal.configuration.metatype.annotations.ExtendedObjectClassDefinition.XML_NAMESPACE; import com.liferay.portal.configuration.metatype.annotations.ExtendedObjectClassDefinition.Scope; import com.liferay.portal.configuration.metatype.definitions.ExtendedAttributeDefinition; import com.liferay.portal.configuration.metatype.definitions.ExtendedObjectClassDefinition; import com.liferay.portal.kernel.util.GetterUtil; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.kernel.util.Validator; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Dictionary; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import org.osgi.service.cm.Configuration; import org.osgi.service.metatype.ObjectClassDefinition; /** * @author Raymond Augé */ public class ConfigurationModel implements ExtendedObjectClassDefinition { public static final String PROPERTY_KEY_COMPANY_ID = "companyId"; public static final String PROPERTY_VALUE_COMPANY_ID_DEFAULT = "0"; public ConfigurationModel( ExtendedObjectClassDefinition extendedObjectClassDefinition, Configuration configuration, String bundleSymbolicName, String bundleLocation, boolean factory) { _extendedObjectClassDefinition = extendedObjectClassDefinition; _configuration = configuration; _bundleSymbolicName = bundleSymbolicName; _bundleLocation = bundleLocation; _factory = factory; } @Override public ExtendedAttributeDefinition[] getAttributeDefinitions(int filter) { ExtendedAttributeDefinition[] extendedAttributeDefinitions = _extendedObjectClassDefinition.getAttributeDefinitions(filter); return removeFactoryInstanceLabelAttribute( extendedAttributeDefinitions); } public String getBundleLocation() { return _bundleLocation; } public String getBundleSymbolicName() { return _bundleSymbolicName; } public String getCategory() { Map<String, String> extensionAttributes = _extendedObjectClassDefinition.getExtensionAttributes( XML_NAMESPACE); return GetterUtil.get(extensionAttributes.get("category"), "other"); } public Configuration getConfiguration() { return _configuration; } @Override public String getDescription() { return _extendedObjectClassDefinition.getDescription(); } public ExtendedAttributeDefinition getExtendedAttributeDefinition( String id) { ExtendedAttributeDefinition[] extendedAttributeDefinitions = _extendedObjectClassDefinition.getAttributeDefinitions( ObjectClassDefinition.ALL); for (ExtendedAttributeDefinition extendedAttributeDefinition : extendedAttributeDefinitions) { if (id.equals(extendedAttributeDefinition.getID())) { return extendedAttributeDefinition; } } return null; } public ExtendedObjectClassDefinition getExtendedObjectClassDefinition() { return _extendedObjectClassDefinition; } @Override public Map<String, String> getExtensionAttributes(String uri) { return _extendedObjectClassDefinition.getExtensionAttributes(uri); } @Override public Set<String> getExtensionUris() { return _extendedObjectClassDefinition.getExtensionUris(); } public String getFactoryPid() { return _extendedObjectClassDefinition.getID(); } public Map<String, String> getHintAttributes() { return _extendedObjectClassDefinition.getExtensionAttributes( "http://www.liferay.com/xsd/meta-type-hints_7_0_0"); } @Override public InputStream getIcon(int size) throws IOException { return _extendedObjectClassDefinition.getIcon(size); } @Override public String getID() { if (_configuration != null) { return _configuration.getPid(); } return _extendedObjectClassDefinition.getID(); } public String getLabel() { String value = getLabelAttributeValue(); if (value == null) { return getName(); } return value; } public String getLabelAttribute() { Map<String, String> extensionAttributes = _extendedObjectClassDefinition.getExtensionAttributes( XML_NAMESPACE); return GetterUtil.get( extensionAttributes.get("factoryInstanceLabelAttribute"), StringPool.BLANK); } @Override public String getName() { return _extendedObjectClassDefinition.getName(); } public String getScope() { Map<String, String> extensionAttributes = _extendedObjectClassDefinition.getExtensionAttributes( XML_NAMESPACE); return extensionAttributes.get("scope"); } public boolean hasConfiguration() { if (getConfiguration() == null) { return false; } return true; } public boolean isCompanyFactory() { if (!isFactory()) { return false; } if (Objects.equals(getScope(), Scope.COMPANY.toString()) && Objects.equals(getLabelAttribute(), PROPERTY_KEY_COMPANY_ID)) { return true; } return false; } public boolean isFactory() { return _factory; } protected String getLabelAttributeValue() { String factoryInstanceLabelAttribute = getLabelAttribute(); String value = null; if (Validator.isNotNull(factoryInstanceLabelAttribute)) { Dictionary<String, Object> properties = _configuration.getProperties(); Object valueObj = properties.get(factoryInstanceLabelAttribute); if (valueObj instanceof Object[]) { value = StringUtil.merge( (Object[])valueObj, StringPool.COMMA_AND_SPACE); } else { value = String.valueOf(valueObj); } } return value; } protected ExtendedAttributeDefinition[] removeFactoryInstanceLabelAttribute( ExtendedAttributeDefinition[] extendedAttributeDefinitions) { if (!isCompanyFactory()) { return extendedAttributeDefinitions; } List<ExtendedAttributeDefinition> filteredExtendedAttributeDefinitionsList = new ArrayList<>(); for (ExtendedAttributeDefinition extendedAttributeDefinition : extendedAttributeDefinitions) { String attributeId = extendedAttributeDefinition.getID(); if (!attributeId.equals(getLabelAttribute())) { filteredExtendedAttributeDefinitionsList.add( extendedAttributeDefinition); } } return filteredExtendedAttributeDefinitionsList.toArray( new ExtendedAttributeDefinition[ filteredExtendedAttributeDefinitionsList.size()]); } private final String _bundleLocation; private final String _bundleSymbolicName; private final Configuration _configuration; private final ExtendedObjectClassDefinition _extendedObjectClassDefinition; private final boolean _factory; }