package com.jaspersoft.jasperserver.jaxrs.client.apiadapters.inputControls; import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.AbstractAdapter; import com.jaspersoft.jasperserver.jaxrs.client.core.JerseyRequest; import com.jaspersoft.jasperserver.jaxrs.client.core.SessionStorage; import com.jaspersoft.jasperserver.jaxrs.client.core.exceptions.MandatoryParameterNotFoundException; import com.jaspersoft.jasperserver.jaxrs.client.core.exceptions.handling.DefaultErrorHandler; import com.jaspersoft.jasperserver.jaxrs.client.core.operationresult.OperationResult; import com.jaspersoft.jasperserver.jaxrs.client.dto.reports.inputcontrols.InputControlStateListWrapper; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import javax.ws.rs.core.MultivaluedHashMap; import org.apache.commons.lang3.StringUtils; /** * @author Tetiana Iefimenko */ public class InputControlsValuesAdapter extends AbstractAdapter{ public static final String REPORTS_URI = "reports"; public static final String INPUT_CONTROLS_URI = "inputControls"; public static final String VALUES_URI = "values"; private String containerUri; private Boolean useFreshData = false; private Boolean includeFullStructure = false; private MultivaluedHashMap<String, String> inputControlsValues = new MultivaluedHashMap<String, String>(); private StringBuilder ids = new StringBuilder(""); private ArrayList<String> path = new ArrayList<String>(); public InputControlsValuesAdapter(SessionStorage sessionStorage, String containerUri) { super(sessionStorage); if (containerUri == null) { throw new MandatoryParameterNotFoundException("Uri of container should be specified"); } this.containerUri = containerUri; } public InputControlsValuesAdapter useCashedData(Boolean value) { useFreshData = !value; return this; } public InputControlsValuesAdapter includeFullStructure(Boolean value) { includeFullStructure = value; return this; } public InputControlsValuesAdapter parameter(String name, String value) { this.inputControlsValues.add(name, value); return this; } public InputControlsValuesAdapter parameter(String name, String... values) { this.inputControlsValues.addAll(name, values); return this; } public OperationResult<InputControlStateListWrapper> run() { if (inputControlsValues.size() == 0) { throw new MandatoryParameterNotFoundException(); } if (!includeFullStructure) { Set<String> keySet = inputControlsValues.keySet(); String[] idsArray = keySet.toArray(new String[keySet.size()]); ids.append(StringUtils.join(idsArray, ";")); } return buildRequest().post(valuesToArrays()); } public OperationResult<InputControlStateListWrapper> get(){ return buildRequest().get(); } private JerseyRequest<InputControlStateListWrapper> buildRequest(){ path.add(REPORTS_URI); path.addAll(Arrays.asList(containerUri.split("/"))); path.add(INPUT_CONTROLS_URI); path.add(ids.toString()); path.add(VALUES_URI); JerseyRequest<InputControlStateListWrapper> request = JerseyRequest.buildRequest(sessionStorage, InputControlStateListWrapper.class, path.toArray(new String[path.size()]), new DefaultErrorHandler()); if (useFreshData) { request.addParam("freshData", useFreshData.toString()); } return request; } private Map<String, String[]> valuesToArrays() { Map<String, String[]> result = new LinkedHashMap<String, String[]>(); List<String> listValues; String[] arrayValues; for (String key : inputControlsValues.keySet()) { listValues = inputControlsValues.get(key); arrayValues = new String[listValues.size()]; result.put(key, listValues.toArray(arrayValues)); } return result; } }