Package org.geomajas.gwt.client.map.feature

Source Code of org.geomajas.gwt.client.map.feature.FeatureTransaction

/*
* This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
*
* Copyright 2008-2011 Geosparc nv, http://www.geosparc.com/, Belgium.
*
* The program is available in open source according to the GNU Affero
* General Public License. All contributions in this program are covered
* by the Geomajas Contributors License Agreement. For full licensing
* details, see LICENSE.txt in the project root.
*/

package org.geomajas.gwt.client.map.feature;

import java.util.Stack;

import org.geomajas.gwt.client.gfx.Paintable;
import org.geomajas.gwt.client.gfx.PainterVisitor;
import org.geomajas.gwt.client.map.feature.operation.FeatureOperation;
import org.geomajas.gwt.client.map.layer.VectorLayer;
import org.geomajas.gwt.client.spatial.Bbox;

/**
* ???
*
* @author Pieter De Graef
*/
public class FeatureTransaction implements Paintable {

  private Stack<FeatureOperation> operationQueue;

  private Feature[] oldFeatures;

  private Feature[] newFeatures;

  private VectorLayer layer;

  private boolean geometryChanged;

  // -------------------------------------------------------------------------
  // Constructors:
  // -------------------------------------------------------------------------

  public FeatureTransaction(VectorLayer layer, Feature[] oldFeatures, Feature[] newFeatures) {
    operationQueue = new Stack<FeatureOperation>();
    this.layer = layer;
    this.oldFeatures = oldFeatures;
    this.newFeatures = newFeatures;
  }

  public FeatureTransaction(VectorLayer layer, org.geomajas.layer.feature.FeatureTransaction dto) {
    operationQueue = new Stack<FeatureOperation>();
    this.layer = layer;
    if (dto.getOldFeatures() != null) {
      oldFeatures = new Feature[dto.getOldFeatures().length];
      for (int i = 0; i < oldFeatures.length; i++) {
        oldFeatures[i] = new Feature(dto.getOldFeatures()[i], layer);
      }
    }
    if (dto.getNewFeatures() != null) {
      newFeatures = new Feature[dto.getNewFeatures().length];
      for (int i = 0; i < newFeatures.length; i++) {
        newFeatures[i] = new Feature(dto.getNewFeatures()[i], layer);
      }
    }
  }

  // -------------------------------------------------------------------------
  // Paintable implementation:
  // -------------------------------------------------------------------------

  public void accept(PainterVisitor visitor, Object group, Bbox bounds, boolean recursive) {
    visitor.visit(this, group);
  }

  public String getId() {
    return "featureTransaction";
  }

  // -------------------------------------------------------------------------
  // Class specific functions:
  // -------------------------------------------------------------------------

  /**
   * Execute an operation on each of the features from the "newFeature" array. Also store the operation on a queue, so
   * it is possible to undo all the changes afterwards.
   *
   * @param op
   *            The operation to apply on each feature.
   */
  public void execute(FeatureOperation op) {
    if (newFeatures != null && newFeatures.length > 0) {
      operationQueue.add(op);
      for (int i = 0; i < newFeatures.length; i++) {
        op.execute(newFeatures[i]);
      }
    }
  }

  public void undoLastOperation() {
    if (operationQueue.size() > 0 && newFeatures != null && newFeatures.length > 0) {
      FeatureOperation op = operationQueue.pop();
      for (int i = 0; i < newFeatures.length; i++) {
        op.undo(newFeatures[i]);
      }
    }
  }

  public Object clone() {
    // Clone only the features:
    Feature[] oldf = null;
    if (oldFeatures != null) {
      oldf = new Feature[oldFeatures.length];
      for (int i = 0; i < oldFeatures.length; i++) {
        oldf[i] = (Feature) oldFeatures[i].clone();
      }
    }
    Feature[] newf = null;
    if (newFeatures != null) {
      newf = new Feature[newFeatures.length];
      for (int i = 0; i < newFeatures.length; i++) {
        newf[i] = (Feature) newFeatures[i].clone();
      }
    }
    return new FeatureTransaction(layer, oldf, newf);
  }

  /**
   * Transform this object into a DTO feature transaction.
   *
   * @return
   */
  public org.geomajas.layer.feature.FeatureTransaction toDto() {
    org.geomajas.layer.feature.FeatureTransaction dto = new org.geomajas.layer.feature.FeatureTransaction();
    dto.setLayerId(layer.getServerLayerId());
    if (oldFeatures != null) {
      org.geomajas.layer.feature.Feature[] oldDto = new org.geomajas.layer.feature.Feature[oldFeatures.length];
      for (int i = 0; i < oldFeatures.length; i++) {
        oldDto[i] = oldFeatures[i].toDto();
      }
      dto.setOldFeatures(oldDto);
    }
    if (newFeatures != null) {
      org.geomajas.layer.feature.Feature[] newDto = new org.geomajas.layer.feature.Feature[newFeatures.length];
      for (int i = 0; i < newFeatures.length; i++) {
        newDto[i] = newFeatures[i].toDto();
      }
      dto.setNewFeatures(newDto);
    }
    return dto;
  }

  // -------------------------------------------------------------------------
  // Getters and setters:
  // -------------------------------------------------------------------------

  public Feature[] getOldFeatures() {
    return oldFeatures;
  }

  public void setOldFeatures(Feature[] oldFeatures) {
    this.oldFeatures = oldFeatures;
  }

  public Feature[] getNewFeatures() {
    return newFeatures;
  }

  public void setNewFeatures(Feature[] newFeatures) {
    this.newFeatures = newFeatures;
  }

  public VectorLayer getLayer() {
    return layer;
  }

  public void setLayer(VectorLayer layer) {
    this.layer = layer;
  }

  public boolean isGeometryChanged() {
    return geometryChanged;
  }

  public void setGeometryChanged(boolean geometryChanged) {
    this.geometryChanged = geometryChanged;
  }

  public Stack<FeatureOperation> getOperationQueue() {
    return operationQueue;
  }

  public void setOperationQueue(Stack<FeatureOperation> operationQueue) {
    this.operationQueue = operationQueue;
  }
}
TOP

Related Classes of org.geomajas.gwt.client.map.feature.FeatureTransaction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.