package com.c2c.data; import java.io.IOException; import java.util.ArrayList; import java.util.List; import com.c2c.query.DataQueryResults; import com.c2c.query.FeatureSourceBuilder; import org.geotools.data.FeatureSource; import org.geotools.data.simple.SimpleFeatureSource; import org.geotools.geometry.jts.ReferencedEnvelope; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; public class DataQueryFeatureSource { private String mdx; private List<DataQueryDimension> rows; private List<DataQueryDimension> columns; private SimpleFeatureSource featureSource; private final FeatureSourceBuilder featureSourceBuilder = new FeatureSourceBuilder(); public DataQueryFeatureSource(String mdx) { this.mdx = mdx; this.rows = new ArrayList<DataQueryDimension>(); this.columns = new ArrayList<DataQueryDimension>(); } public Double[] getBoundingBox() { Double[] ret = new Double[4]; ret[0] = -175.0; ret[1] = -88.0; ret[2] = 175.0; ret[3] = 88.0; try { ReferencedEnvelope ref =featureSource.getBounds(); ret[0] = ref.getMinX(); ret[1] = ref.getMinY(); ret[2] = ref.getMaxX(); ret[3] = ref.getMaxY(); } catch (IOException e) { e.printStackTrace(); return ret; } return ret; } public void addMember(String type, String dimensionUniqueName, String levelUniqueName, String memberName, String memberUniqueName) { List<DataQueryDimension> dimensionsList = null; if (type.equalsIgnoreCase("rows")) { dimensionsList = rows; } else { dimensionsList = columns; } for (DataQueryDimension d : dimensionsList) { if (d.getUniqueName().equals(dimensionUniqueName)) { d.addMember(levelUniqueName, memberName, memberUniqueName); return; } } // Not found, new dimension DataQueryDimension newDimension = new DataQueryDimension(dimensionUniqueName); newDimension.addMember(levelUniqueName, memberName, memberUniqueName); dimensionsList.add(newDimension); } public void buildFeatureSource(DataQueryResults results) throws IOException { featureSource = featureSourceBuilder.createFeatureStore(results); } public List<DataQueryDimension> getRows() { return rows; } public List<DataQueryDimension> getColumns() { return columns; } public SimpleFeatureSource getFeatureSource() { return featureSource; } public String getMdx() { return mdx; } }