/**
* 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.util;
import com.liferay.configuration.admin.web.internal.model.ConfigurationModel;
import com.liferay.dynamic.data.mapping.model.DDMForm;
import com.liferay.dynamic.data.mapping.model.DDMFormField;
import com.liferay.dynamic.data.mapping.model.DDMFormFieldType;
import com.liferay.dynamic.data.mapping.model.LocalizedValue;
import com.liferay.dynamic.data.mapping.storage.DDMFormFieldValue;
import com.liferay.dynamic.data.mapping.storage.DDMFormValues;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.Validator;
import java.util.Dictionary;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
import org.osgi.service.cm.Configuration;
import org.osgi.service.metatype.AttributeDefinition;
/**
* @author Marcellus Tavares
*/
public class ConfigurationModelToDDMFormValuesConverter {
public ConfigurationModelToDDMFormValuesConverter(
ConfigurationModel configurationModel, DDMForm ddmForm, Locale locale,
ResourceBundle resourceBundle) {
_configurationModel = configurationModel;
_ddmForm = ddmForm;
_ddmFormFieldsMap = ddmForm.getDDMFormFieldsMap(false);
_locale = locale;
_resourceBundle = resourceBundle;
}
public DDMFormValues getDDMFormValues() {
DDMFormValues ddmFormValues = new DDMFormValues(_ddmForm);
ddmFormValues.addAvailableLocale(_locale);
ddmFormValues.setDefaultLocale(_locale);
addDDMFormFieldValues(
_configurationModel.getAttributeDefinitions(ConfigurationModel.ALL),
ddmFormValues);
return ddmFormValues;
}
protected void addDDMFormFieldValue(
String name, String value, DDMFormValues ddmFormValues) {
DDMFormFieldValue ddmFormFieldValue = createDDMFormFieldValue(name);
setDDMFormFieldValueLocalizedValue(value, ddmFormFieldValue);
ddmFormValues.addDDMFormFieldValue(ddmFormFieldValue);
}
protected void addDDMFormFieldValues(
AttributeDefinition attributeDefinition, DDMFormValues ddmFormValues) {
String[] values = null;
Configuration configuration = _configurationModel.getConfiguration();
if (hasConfigurationAttribute(configuration, attributeDefinition)) {
values = AttributeDefinitionUtil.getProperty(
attributeDefinition, configuration);
}
else {
values = AttributeDefinitionUtil.getDefaultValue(
attributeDefinition);
}
addDDMFormFieldValues(
attributeDefinition.getID(), values, ddmFormValues);
}
protected void addDDMFormFieldValues(
AttributeDefinition[] attributeDefinitions,
DDMFormValues ddmFormValues) {
if (attributeDefinitions == null) {
return;
}
for (AttributeDefinition attributeDefinition : attributeDefinitions) {
addDDMFormFieldValues(attributeDefinition, ddmFormValues);
}
}
protected void addDDMFormFieldValues(
String name, String[] values, DDMFormValues ddmFormValues) {
for (int i = 0; i < values.length; i++) {
addDDMFormFieldValue(name, values[i], ddmFormValues);
}
}
protected DDMFormFieldValue createDDMFormFieldValue(String name) {
DDMFormFieldValue ddmFormFieldValue = new DDMFormFieldValue();
ddmFormFieldValue.setName(name);
ddmFormFieldValue.setInstanceId(StringUtil.randomString());
return ddmFormFieldValue;
}
protected String getDDMFormFieldType(String ddmFormFieldName) {
DDMFormField ddmFormField = _ddmFormFieldsMap.get(ddmFormFieldName);
return ddmFormField.getType();
}
protected boolean hasConfigurationAttribute(
Configuration configuration, AttributeDefinition attributeDefinition) {
if (configuration == null) {
return false;
}
Dictionary<String, Object> properties = configuration.getProperties();
return Validator.isNotNull(properties.get(attributeDefinition.getID()));
}
protected void setDDMFormFieldValueLocalizedValue(
String value, DDMFormFieldValue ddmFormFieldValue) {
String type = getDDMFormFieldType(ddmFormFieldValue.getName());
if (type.equals(DDMFormFieldType.SELECT)) {
value = "[\"" + value + "\"]";
}
LocalizedValue localizedValue = new LocalizedValue(_locale);
localizedValue.addString(_locale, value);
ddmFormFieldValue.setValue(localizedValue);
}
private final ConfigurationModel _configurationModel;
private final DDMForm _ddmForm;
private final Map<String, DDMFormField> _ddmFormFieldsMap;
private final Locale _locale;
private final ResourceBundle _resourceBundle;
}