/** * The contents of this file are subject to the OpenMRS Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://license.openmrs.org * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ package org.openmrs.module.reporting.dataset.definition; import org.openmrs.module.reporting.common.Localized; import org.openmrs.module.reporting.definition.configuration.ConfigurationProperty; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * This DataSetDefinition wraps a {@link org.openmrs.module.reporting.dataset.definition.DataSetDefinition} and allows you to run it on * a series of parameters. The {@link org.openmrs.module.reporting.dataset.DataSet} that this defines has the same columns * as the wrapped {@link org.openmrs.module.reporting.dataset.definition.DataSetDefinition}, prepended by columns for each added iteration parameter. * Each row of the DataSet is the result you'd get from evaluating the wrapped * DataSetDefinition on one supplied parameters. */ @Localized("reporting.MultiParameterDataSetDefinition") public class MultiParameterDataSetDefinition extends BaseDataSetDefinition implements DataSetDefinition { @ConfigurationProperty private DataSetDefinition baseDefinition; @ConfigurationProperty private List<Map<String, Object>> iterations; public MultiParameterDataSetDefinition() { iterations = new ArrayList<Map<String, Object>>(); } public MultiParameterDataSetDefinition(DataSetDefinition baseDefinition) { this(); this.baseDefinition = baseDefinition; } public void addIteration(Map<String, Object> iteration) { if (iterations == null) { iterations = new ArrayList<Map<String, Object>>(); } iterations.add(iteration); } public DataSetDefinition getBaseDefinition() { return baseDefinition; } public void setBaseDefinition(DataSetDefinition baseDefinition) { this.baseDefinition = baseDefinition; } public List<Map<String, Object>> getIterations() { return iterations; } public void setIterations(List<Map<String, Object>> iterations) { //since XML deserialization creates one instance of map if all keys are the same //we need to ensure each iteration gets it's own instance of map (since it's desired behaviour) List<Map<String, Object>> newIterations = new ArrayList<Map<String, Object>>(); for (Map<String, Object> iteration: iterations) { newIterations.add(new HashMap<String, Object>(iteration)); } this.iterations = newIterations; } }