org.locationtech.udig.processingtoolbox.tools.ChartComposite2.java Source code

Java tutorial

Introduction

Here is the source code for org.locationtech.udig.processingtoolbox.tools.ChartComposite2.java

Source

/*
 * 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;
    }

}