/*
* Copyright � 2016 TIBCO Software,Inc.All rights reserved.
* http://community.jaspersoft.com/project/jaspermobile-android
*
* Unless you have purchased a commercial license agreement from TIBCO Jaspersoft,
* the following license terms apply:
*
* This program is part of TIBCO Jaspersoft Mobile for Android.
*
* TIBCO Jaspersoft Mobile 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 3of the License,or
* (at your option)any later version.
*
* TIBCO Jaspersoft Mobile 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.
*
* You should have received a copy of the GNU Lesser General Public License
* along with TIBCO Jaspersoft Mobile for Android.If not,see
* <http://www.gnu.org/licenses/lgpl>.
*/
package com.jaspersoft.android.jaspermobile.data.entity.mapper;
import android.support.annotation.Nullable;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.jaspersoft.android.sdk.client.oxm.control.InputControl;
import com.jaspersoft.android.sdk.client.oxm.control.InputControlOption;
import com.jaspersoft.android.sdk.client.oxm.control.InputControlState;
import com.jaspersoft.android.sdk.client.oxm.report.ReportParameter;
import com.jaspersoft.android.sdk.service.data.dashboard.DashboardControlComponent;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.inject.Inject;
/**
* @author Tom Koptel
* @since 2.3
*/
public class ReportParamsMapper {
private static final String EMPTY_JSON = "{}";
@Inject
public ReportParamsMapper() {
}
public List<com.jaspersoft.android.sdk.network.entity.report.ReportParameter> legacyParamsToRetrofitted(List<ReportParameter> legacyParameters) {
List<com.jaspersoft.android.sdk.network.entity.report.ReportParameter> list = new ArrayList<>(legacyParameters.size());
for (ReportParameter legacyParameter : legacyParameters) {
if (legacyParameter != null) {
com.jaspersoft.android.sdk.network.entity.report.ReportParameter parameter = legacyParamToRetrofitted(legacyParameter);
list.add(parameter);
}
}
return list;
}
public com.jaspersoft.android.sdk.network.entity.report.ReportParameter legacyParamToRetrofitted(ReportParameter legacyParameter) {
return new com.jaspersoft.android.sdk.network.entity.report.ReportParameter(legacyParameter.getName(), legacyParameter.getValues());
}
public String legacyParamsToJson(List<ReportParameter> reportParameters) {
Map<String, Set<String>> params = legacyToMap(reportParameters);
if (params.isEmpty()) {
return EMPTY_JSON;
}
Gson gson = new Gson();
Type mapType = new TypeToken<Map<String, Set<String>>>() {
}.getType();
return gson.toJson(params, mapType);
}
public Map<String, Set<String>> legacyToMap(List<ReportParameter> parameters) {
if (parameters.isEmpty()) {
return Collections.emptyMap();
}
Map<String, Set<String>> params = new HashMap<String, Set<String>>(parameters.size());
for (ReportParameter parameter : parameters) {
params.put(parameter.getName(), parameter.getValues());
}
return params;
}
public List<ReportParameter> mapToLegacyParams(Map<String, Set<String>> params) {
if (params != null && params.isEmpty() || params == null) {
return Collections.emptyList();
}
List<ReportParameter> parameters = new ArrayList<>(params.size());
for (Map.Entry<String, Set<String>> entry : params.entrySet()) {
parameters.add(new ReportParameter(entry.getKey(), entry.getValue()));
}
return parameters;
}
public List<ReportParameter> legacyControlsToParams(List<InputControl> inputControls) {
List<ReportParameter> parameters = new ArrayList<>();
for (InputControl inputControl : inputControls) {
InputControlState state = inputControl.getState();
ReportParameter reportParameter = mapStateToReportParameter(state);
if (reportParameter != null) {
parameters.add(reportParameter);
}
}
return parameters;
}
public com.jaspersoft.android.sdk.network.entity.report.ReportParameter legacyControlToRetrofittedParam(InputControl control) {
InputControlState state = control.getState();
ReportParameter reportParameter = mapStateToReportParameter(state);
com.jaspersoft.android.sdk.network.entity.report.ReportParameter parameter =
legacyParamToRetrofitted(reportParameter);
return parameter;
}
@Nullable
private ReportParameter mapStateToReportParameter(InputControlState state) {
if (state == null) {
return null;
}
ReportParameter reportParameter = new ReportParameter();
Set<String> values = new HashSet<>();
String value = state.getValue();
if (value == null) {
List<InputControlOption> options = state.getOptions();
for (InputControlOption option : options) {
if (option.isSelected()) {
values.add(option.getValue());
}
}
} else {
values.add(value);
}
reportParameter.setName(state.getId());
reportParameter.setValues(values);
return reportParameter;
}
public List<ReportParameter> adaptDashboardControlComponents(List<ReportParameter> reportParameters,
List<DashboardControlComponent> components) {
Map<String, Set<String>> map = legacyToMap(reportParameters);
List<ReportParameter> parameters = new ArrayList<>(reportParameters.size());
for (DashboardControlComponent component : components) {
if (component != null) {
Set<String> values = map.get(component.getControlId());
if (values != null) {
ReportParameter reportParameter = new ReportParameter();
reportParameter.setName(component.getComponentId());
reportParameter.setValues(values);
parameters.add(reportParameter);
}
}
}
return parameters;
}
public List<ReportParameter> mapStatesToLegacyParams(List<InputControlState> states) {
List<ReportParameter> parameters = new ArrayList<>(states.size());
for (InputControlState state : states) {
ReportParameter reportParameter = mapStateToReportParameter(state);
if (reportParameter != null) {
parameters.add(reportParameter);
}
}
return parameters;
}
}