/**
* 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.mapping.data.provider.instance;
import com.liferay.dynamic.data.mapping.data.provider.DDMDataProvider;
import com.liferay.dynamic.data.mapping.data.provider.DDMDataProviderContext;
import com.liferay.dynamic.data.mapping.data.provider.DDMDataProviderException;
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.DDMDataProviderRequest;
import com.liferay.dynamic.data.mapping.data.provider.DDMDataProviderResponse;
import com.liferay.dynamic.data.mapping.data.provider.DDMDataProviderResponseOutput;
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.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.ClassUtil;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.KeyValuePair;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* @author Rafael Praxedes
*/
@Component(
immediate = true,
property = "ddm.data.provider.instance.id=getDataProviderInstanceOutputParameters"
)
public class DDMDataProviderInstanceOutputParametersDataProvider
implements DDMDataProvider {
@Override
public List<KeyValuePair> getData(
DDMDataProviderContext ddmDataProviderContext)
throws DDMDataProviderException {
return Collections.emptyList();
}
@Override
public DDMDataProviderResponse getData(
DDMDataProviderRequest ddmDataProviderRequest)
throws DDMDataProviderException {
long dataProviderInstanceId = GetterUtil.getLong(
ddmDataProviderRequest.getParameter("dataProviderInstanceId"));
if (dataProviderInstanceId == 0) {
return DDMDataProviderResponse.of();
}
List<KeyValuePair> data = new ArrayList<>();
try {
DDMDataProviderOutputParametersSettings[]
ddmDataProviderOutputParametersSettings =
getDDMDataProviderOutputParametersSettings(
dataProviderInstanceId);
for (DDMDataProviderOutputParametersSettings
ddmDataProviderOutputParametersSetting :
ddmDataProviderOutputParametersSettings) {
String outputParameterName =
ddmDataProviderOutputParametersSetting.
outputParameterName();
data.add(
new KeyValuePair(outputParameterName, outputParameterName));
}
}
catch (Exception e) {
_log.error(
String.format(
"Unable to get the output parameters for data provider " +
"instance with id '%d'",
dataProviderInstanceId),
e);
}
return DDMDataProviderResponse.of(
DDMDataProviderResponseOutput.of(
"outputParameterNames", "list", data));
}
@Override
public Class<?> getSettings() {
throw new UnsupportedOperationException();
}
protected DDMFormValues getDataProviderInstanceFormValues(
DDMDataProvider ddmDataProvider,
DDMDataProviderInstance ddmDataProviderInstance)
throws PortalException {
DDMForm ddmForm = DDMFormFactory.create(ddmDataProvider.getSettings());
return _ddmFormValuesJSONDeserializer.deserialize(
ddmForm, ddmDataProviderInstance.getDefinition());
}
protected DDMDataProviderOutputParametersSettings[]
getDDMDataProviderOutputParametersSettings(
long dataProviderInstanceId)
throws Exception {
DDMDataProviderInstance ddmDataProviderInstance =
_ddmDataProviderInstanceService.getDataProviderInstance(
dataProviderInstanceId);
DDMDataProvider ddmDataProvider =
_ddmDataProviderTracker.getDDMDataProvider(
ddmDataProviderInstance.getType());
if (!ClassUtil.isSubclass(
ddmDataProvider.getSettings(),
DDMDataProviderParameterSettings.class)) {
return new DDMDataProviderOutputParametersSettings[0];
}
DDMFormValues dataProviderFormValues =
getDataProviderInstanceFormValues(
ddmDataProvider, ddmDataProviderInstance);
DDMDataProviderParameterSettings ddmDataProviderParameterSetting =
DDMFormInstanceFactory.create(
DDMDataProviderParameterSettings.class, dataProviderFormValues);
return ddmDataProviderParameterSetting.outputParameters();
}
private static final Log _log = LogFactoryUtil.getLog(
DDMDataProviderInstanceOutputParametersDataProvider.class);
@Reference
private DDMDataProviderInstanceService _ddmDataProviderInstanceService;
@Reference
private DDMDataProviderTracker _ddmDataProviderTracker;
@Reference
private DDMFormValuesJSONDeserializer _ddmFormValuesJSONDeserializer;
}