package org.opennms.netmgt.jasper.resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import net.sf.jasperreports.engine.JRDataset;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
import net.sf.jasperreports.engine.design.JRDesignField;
import com.jaspersoft.ireport.designer.FieldsProvider;
import com.jaspersoft.ireport.designer.FieldsProviderEditor;
import com.jaspersoft.ireport.designer.IReportConnection;
import com.jaspersoft.ireport.designer.data.ReportQueryDialog;
public class ResourceQueryFieldsProvider implements FieldsProvider{
public String designQuery(IReportConnection connection, String arg1, ReportQueryDialog arg2) throws JRException, UnsupportedOperationException {
return null;
}
public FieldsProviderEditor getEditorComponent(ReportQueryDialog arg0) {
return null;
}
public JRField[] getFields(IReportConnection irConn, JRDataset reportDataset, Map parameters) throws JRException, UnsupportedOperationException {
String query = "";
if(reportDataset.getQuery() == null || reportDataset.getQuery().getText() == null || reportDataset.getQuery().getText().length() == 0) {
return new JRField[0];
}
List<JRField> fields = new ArrayList<JRField>();
query = reportDataset.getQuery().getText();
addPathColumn(fields);
if(query.contains("--dsName")) {
String[] splitDsNames = query.split("--dsName");
String dsNames = splitDsNames[splitDsNames.length - 1];
String[] dsNameList = checkForCommandsAndTrim(dsNames).split(",");
for(String ds : dsNameList) {
JRDesignField field = new JRDesignField();
field.setName(ds.trim());
field.setDescription(ds.trim());
field.setValueClass(String.class);
fields.add(field);
}
}
if(query.contains("--string")) {
String[] splitStrProps = query.split("--string");
String strProp = splitStrProps[splitStrProps.length - 1];
String[] strPropList = checkForCommandsAndTrim(strProp).split(",");
for(String prop : strPropList) {
JRDesignField field = new JRDesignField();
field.setName(prop.trim());
field.setDescription(prop.trim());
field.setValueClass(String.class);
fields.add(field);
}
}
return fields.toArray(new JRField[fields.size()]);
}
private String checkForCommandsAndTrim(String str) {
if(str.contains("--")) {
String[] splitStr = str.split("--");
return splitStr[0];
}
return str;
}
private void addPathColumn(List<JRField> fields) {
JRDesignField field = new JRDesignField();
field.setName("Path");
field.setDescription("Path");
field.setValueClass(String.class);
fields.add(field);
}
public boolean hasEditorComponent() {
return false;
}
public boolean hasQueryDesigner() {
return false;
}
public boolean supportsAutomaticQueryExecution() {
return false;
}
public boolean supportsGetFieldsOperation() {
return true;
}
}