package org.simantics.district.network.ui.nodes; import java.awt.geom.Rectangle2D; import java.util.Collection; import java.util.Collections; import org.simantics.db.RequestProcessor; import org.simantics.db.Resource; import org.simantics.db.exception.DatabaseException; import org.simantics.maps.elevation.server.SingletonTiffTileInterface; import org.simantics.scenegraph.g2d.IG2DNode; import org.simantics.scenegraph.profile.EvaluationContext; import org.simantics.scenegraph.profile.Group; import org.simantics.scenegraph.profile.Style; import org.simantics.scenegraph.profile.common.ObserverGroupListener; import org.simantics.scenegraph.utils.NodeUtil; public class ElevationRectangleStyle implements Style { private ObserverGroupListener listener = null; private double priority; @Override public void activate(RequestProcessor backend, Resource runtimeDiagram, Resource entry, Group group, EvaluationContext observer) throws DatabaseException { if (listener != null && !listener.isDisposed()) return; listener = new ObserverGroupListener(this, group, observer); group.trackItems(backend, runtimeDiagram, listener); } @Override public void deactivate(Resource runtimeDiagram, Resource entry, Group group, EvaluationContext observer) { if (listener != null && !listener.isDisposed()) { setRectangles(observer, Collections.emptyList()); listener.dispose(); observer.update(); } } @Override public void apply(Resource entry, Group group, EvaluationContext observer) { apply2(entry, observer); } @Override public void apply2(Object item, EvaluationContext observer) { setRectangles(observer, SingletonTiffTileInterface.getBoundingBoxes()); } private void setRectangles(EvaluationContext observer, Collection rectangles) { IG2DNode node = NodeUtil.getNearestChildByClass(observer.getSceneGraph(), ElevationServerNode.class); if (node != null) { ((ElevationServerNode) node).setRectangles(rectangles); } } @Override public void setPriority(double priority) { this.priority = priority; } @Override public double getPriority() { return priority; } }