/**
* 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.dynamic.data.lists.form.web.internal.portlet.action;
import com.liferay.dynamic.data.lists.form.web.constants.DDLFormPortletKeys;
import com.liferay.dynamic.data.mapping.data.provider.DDMDataProvider;
import com.liferay.dynamic.data.mapping.data.provider.DDMDataProviderInputParametersSettings;
import com.liferay.dynamic.data.mapping.data.provider.DDMDataProviderOutputParametersSettings;
import com.liferay.dynamic.data.mapping.data.provider.DDMDataProviderParameterSettings;
import com.liferay.dynamic.data.mapping.data.provider.DDMDataProviderTracker;
import com.liferay.dynamic.data.mapping.io.DDMFormValuesJSONDeserializer;
import com.liferay.dynamic.data.mapping.model.DDMDataProviderInstance;
import com.liferay.dynamic.data.mapping.model.DDMForm;
import com.liferay.dynamic.data.mapping.service.DDMDataProviderInstanceService;
import com.liferay.dynamic.data.mapping.storage.DDMFormValues;
import com.liferay.dynamic.data.mapping.util.DDMFormFactory;
import com.liferay.dynamic.data.mapping.util.DDMFormInstanceFactory;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.json.JSONArray;
import com.liferay.portal.kernel.json.JSONFactory;
import com.liferay.portal.kernel.json.JSONObject;
import com.liferay.portal.kernel.portlet.JSONPortletResponseUtil;
import com.liferay.portal.kernel.portlet.bridges.mvc.BaseMVCResourceCommand;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCResourceCommand;
import com.liferay.portal.kernel.util.ClassUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.Validator;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* @author Rafael Praxedes
*/
@Component(
immediate = true,
property = {
"javax.portlet.name=" + DDLFormPortletKeys.DYNAMIC_DATA_LISTS_FORM_ADMIN,
"mvc.command.name=getDataProviderParametersSettings"
},
service = MVCResourceCommand.class
)
public class GetDataProviderParametersSettingsMVCResourceCommand
extends BaseMVCResourceCommand {
protected JSONObject createParametersJSONObject(
DDMDataProvider ddmDataProvider, DDMFormValues ddmFormValues)
throws Exception {
JSONObject parametersJSONObject = _jsonFactory.createJSONObject();
if (!ClassUtil.isSubclass(
ddmDataProvider.getSettings(),
DDMDataProviderParameterSettings.class)) {
return parametersJSONObject;
}
DDMDataProviderParameterSettings ddmDataProviderParameterSetting =
(DDMDataProviderParameterSettings)
DDMFormInstanceFactory.create(
ddmDataProvider.getSettings(), ddmFormValues);
parametersJSONObject.put(
"inputs",
getInputParametersJSONObject(
ddmDataProviderParameterSetting.inputParameters()));
parametersJSONObject.put(
"outputs",
getOutputParametersJSONObject(
ddmDataProviderParameterSetting.outputParameters()));
return parametersJSONObject;
}
@Override
protected void doServeResource(
ResourceRequest resourceRequest, ResourceResponse resourceResponse)
throws Exception {
DDMDataProviderInstance ddmDataProviderInstance =
getDDMDataProviderInstance(resourceRequest);
DDMDataProvider ddmDataProvider =
_ddmDataProviderTracker.getDDMDataProvider(
ddmDataProviderInstance.getType());
DDMFormValues ddmFormValues = getDataProviderFormValues(
ddmDataProvider, ddmDataProviderInstance);
JSONObject parametersJSONObject = createParametersJSONObject(
ddmDataProvider, ddmFormValues);
JSONPortletResponseUtil.writeJSON(
resourceRequest, resourceResponse, parametersJSONObject);
}
protected DDMFormValues getDataProviderFormValues(
DDMDataProvider ddmDataProvider,
DDMDataProviderInstance ddmDataProviderInstance)
throws PortalException {
DDMForm ddmForm = DDMFormFactory.create(ddmDataProvider.getSettings());
return _ddmFormValuesJSONDeserializer.deserialize(
ddmForm, ddmDataProviderInstance.getDefinition());
}
protected DDMDataProviderInstance getDDMDataProviderInstance(
ResourceRequest resourceRequest)
throws PortalException {
long ddmDataProviderInstanceId = ParamUtil.getLong(
resourceRequest, "ddmDataProviderInstanceId");
return _ddmDataProviderInstanceService.getDataProviderInstance(
ddmDataProviderInstanceId);
}
protected JSONArray getInputParametersJSONObject(
DDMDataProviderInputParametersSettings[]
ddmDataProviderInputParametersSettings)
throws Exception {
JSONArray inputsJSONArray = _jsonFactory.createJSONArray();
for (DDMDataProviderInputParametersSettings
ddmDataProviderInputParameterSetting :
ddmDataProviderInputParametersSettings) {
String label =
ddmDataProviderInputParameterSetting.inputParameterLabel();
String name =
ddmDataProviderInputParameterSetting.inputParameterName();
String type = getType(
ddmDataProviderInputParameterSetting.inputParameterType());
if (Validator.isNull(name) || Validator.isNull(type)) {
continue;
}
JSONObject inputJSONObject = _jsonFactory.createJSONObject();
if (Validator.isNotNull(label)) {
inputJSONObject.put("label", label);
}
else {
inputJSONObject.put("label", name);
}
inputJSONObject.put("name", name);
inputJSONObject.put(
"required",
ddmDataProviderInputParameterSetting.inputParameterRequired());
inputJSONObject.put("type", type);
inputsJSONArray.put(inputJSONObject);
}
return inputsJSONArray;
}
protected JSONArray getOutputParametersJSONObject(
DDMDataProviderOutputParametersSettings[]
ddmDataProviderOutputParametersSettings)
throws Exception {
JSONArray outputsJSONArray = _jsonFactory.createJSONArray();
for (DDMDataProviderOutputParametersSettings
ddmDataProviderOutputParameterSetting :
ddmDataProviderOutputParametersSettings) {
String name =
ddmDataProviderOutputParameterSetting.outputParameterName();
String path =
ddmDataProviderOutputParameterSetting.outputParameterPath();
String type = getType(
ddmDataProviderOutputParameterSetting.outputParameterType());
if (Validator.isNull(path) || Validator.isNull(type)) {
continue;
}
JSONObject outputJSONObject = _jsonFactory.createJSONObject();
if (Validator.isNotNull(name)) {
outputJSONObject.put("name", name);
}
else {
outputJSONObject.put("name", path);
}
outputJSONObject.put("type", type);
outputsJSONArray.put(outputJSONObject);
}
return outputsJSONArray;
}
protected String getType(String type) throws Exception {
JSONArray typeJSONArray = _jsonFactory.createJSONArray(type);
return typeJSONArray.getString(0);
}
@Reference
private DDMDataProviderInstanceService _ddmDataProviderInstanceService;
@Reference
private DDMDataProviderTracker _ddmDataProviderTracker;
@Reference
private DDMFormValuesJSONDeserializer _ddmFormValuesJSONDeserializer;
@Reference
private JSONFactory _jsonFactory;
}