package org.onecmdb.core.utils.transform; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class DataSetSelector extends DataSet { private List<IDataSetMatcher> matchers = new ArrayList<IDataSetMatcher>(); private DataSet defaultDataSet; public void addDataSetMatcher(IDataSetMatcher matcher) { matchers.add(matcher); } public void setDataSetMatcher(List<IDataSetMatcher> list) { this.matchers.clear(); this.matchers.addAll(list); } public List<IInstance> getInstances() throws IOException { List<IInstance> instances = getInstanceSelector().getInstances(this); List<IInstance> resultInstances = new ArrayList<IInstance>(); if (matchers.size() == 0) { resultInstances = instances; } for (IInstance instance : instances) { boolean found = false; for (IDataSetMatcher m : matchers) { if (m.match(instance)) { instance.setDataSet(m.getDataSet()); instance.setTemplate(m.getDataSet().getInstanceSelector().getTemplate()); resultInstances.add(instance); found = true; break; } } if (!found) { if (defaultDataSet != null) { instance.setDataSet(defaultDataSet); resultInstances.add(instance); getReport().addWarn(getName() + ": No DataSet matched instance row", instance); continue; } // Handle not found here.... getReport().addError(getName() + ": No DataSet matched instance row", instance); } } getReport().addDebug(getName() + ": returned " + resultInstances + " rows"); return(resultInstances); } public void setDefaultDataSet(DataSet dataSet) { this.defaultDataSet = dataSet; } }