/*
* uDig - User Friendly Desktop Internet GIS client
* (C) MangoSystem - www.mangosystem.com
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* (http://www.eclipse.org/legal/epl-v10.html), and the Refractions BSD
* License v1.0 (http://udig.refractions.net/files/bsd3-v10.html).
*/
package org.locationtech.udig.processingtoolbox.tools;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Composite;
import org.geotools.factory.CommonFactoryFinder;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.entity.ChartEntity;
import org.jfree.chart.entity.EntityCollection;
import org.jfree.chart.entity.XYItemEntity;
import org.jfree.data.xy.XYDataItem;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.experimental.chart.swt.ChartComposite;
import org.locationtech.udig.project.ILayer;
import org.opengis.filter.Filter;
import org.opengis.filter.FilterFactory2;
import org.opengis.filter.identity.FeatureId;
/**
* ChartComposite extends JFreeChart
*
* @author Minpa Lee, MangoSystem
*
* @source $URL$
*/
class ChartComposite2 extends ChartComposite {
private final FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(null);
private org.locationtech.udig.project.internal.Map map;
private ILayer layer;
public org.locationtech.udig.project.internal.Map getMap() {
return map;
}
public void setMap(org.locationtech.udig.project.internal.Map map) {
this.map = map;
}
public ILayer getLayer() {
return layer;
}
public void setLayer(ILayer layer) {
this.layer = layer;
}
public ChartComposite2(Composite comp, int style, JFreeChart chart, boolean useBuffer) {
super(comp, style, chart, useBuffer);
}
@SuppressWarnings("rawtypes")
@Override
public void zoom(Rectangle selection) {
if (map == null || layer == null) {
return;
}
Set<FeatureId> selected = new HashSet<FeatureId>();
try {
XYSeriesCollection ds = (XYSeriesCollection) getChart().getXYPlot().getDataset(2);
XYSeries selectionSeries = ds.getSeries(0);
selectionSeries.clear();
EntityCollection entities = this.getChartRenderingInfo().getEntityCollection();
Iterator iter = entities.iterator();
while (iter.hasNext()) {
ChartEntity entity = (ChartEntity) iter.next();
if (entity instanceof XYItemEntity) {
XYItemEntity item = (XYItemEntity) entity;
if (item.getSeriesIndex() != 0) {
continue;
}
java.awt.Rectangle bound = item.getArea().getBounds();
if (selection.intersects(bound.x, bound.y, bound.width, bound.height)) {
XYSeriesCollection dataSet = (XYSeriesCollection) item.getDataset();
XYSeries xySeries = dataSet.getSeries(item.getSeriesIndex());
XYDataItem xyDataItem = xySeries.getDataItem(item.getItem());
if (xyDataItem instanceof XYDataItem2) {
XYDataItem2 dataItem = (XYDataItem2) xyDataItem;
selectionSeries.add(dataItem);
selected.add(ff.featureId(dataItem.getFeature().getID()));
}
}
}
}
} catch (Exception e) {
// skip
} finally {
if (selected.size() > 0) {
map.select(ff.id(selected), layer);
} else {
map.select(Filter.EXCLUDE, layer);
}
this.forceRedraw();
}
}
@Override
public void restoreAutoBounds() {
return;
}
}