Package org.locationtech.udig.internal.ui

Source Code of org.locationtech.udig.internal.ui.GeometryTextTransfer$JtsWktStrategy

/* uDig - User Friendly Desktop Internet GIS client
* http://udig.refractions.net
* (C) 2004, Refractions Research Inc.
*
* 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.internal.ui;

import javax.xml.transform.TransformerException;

import org.locationtech.udig.ui.AbstractTextStrategizedTransfer;

import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.dnd.TransferData;
import org.geotools.gml.producer.GeometryTransformer;

import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKTReader;
import com.vividsolutions.jts.io.WKTWriter;

public class GeometryTextTransfer extends AbstractTextStrategizedTransfer implements
    UDIGTransfer {

  private static GeometryTextTransfer _instance = new GeometryTextTransfer();

  private GeometryTextTransfer() {
  }

  /**
   * Returns the singleton instance of the TextTransfer class.
   *
   * @return the singleton instance of the TextTransfer class
   */
  public static GeometryTextTransfer getInstance() {
    return _instance;
  }
  private TransferStrategy[] transferStrategies ;

  @Override
    public
  synchronized TransferStrategy[] getAllStrategies() {
    if( transferStrategies==null ){
      transferStrategies=new TransferStrategy[]{new JtsWktStrategy()};
    }

        TransferStrategy[] copy=new TransferStrategy[transferStrategies.length];
        System.arraycopy(transferStrategies, 0, copy, 0, transferStrategies.length);
    return copy;
  }
 
    @Override
    public String[] getStrategyNames() {
        return new String[]{"JTS WKT"}; //$NON-NLS-1$
    }
   
    @Override
    public String getTransferName() {
        return "Geometry"; //$NON-NLS-1$
    }
  @Override
    public TransferStrategy getDefaultStrategy() {
    return getAllStrategies()[0];
  }

  @Override
  public TransferData[] getSupportedTypes() {
    return TextTransfer.getInstance().getSupportedTypes();
  }

  @Override
  public boolean isSupportedType(TransferData transferData) {
    return TextTransfer.getInstance().isSupportedType(transferData);
  }

  public boolean validate(Object object) {
    return object instanceof Geometry;
  }

 
  /**
   * This strategy exports geometries as Well Known Text as generated by JTS WKTWriter.
   *
   * @author jeichar
   */
  public static class JtsWktStrategy implements TransferStrategy {

    /**
     * @see Transfer#javaToNative
     */
    public void javaToNative(Object object, TransferData transferData) {
      String stringToEncode;

      Geometry feature = (Geometry) object;

      WKTWriter writer = new WKTWriter();
      String geometry = writer.writeFormatted(feature);

      stringToEncode = geometry;
      TextTransfer.getInstance().javaToNative(stringToEncode, transferData);
    }

    /**
     * @see Transfer#nativeToJava
     */
    @SuppressWarnings("deprecation")//$NON-NLS-1$
    public Object nativeToJava(TransferData transferData) {
      String string = (String) TextTransfer.getInstance().nativeToJava(
          transferData);

      WKTReader reader = new WKTReader();
      try {
        return reader.read(string);
      } catch (ParseException e) {
        // JONES
      }
      return null;
    }

  }

  /**
   * This strategy encodes geometries as GML Geometries.
   *
   * @author jeichar
   */
  public static class GMLStrategy implements TransferStrategy {

    /**
     * @see Transfer#javaToNative
     */
    public void javaToNative(Object object, TransferData transferData) {
      Geometry geometry = (Geometry) object;
      GeometryTransformer transformer = new GeometryTransformer();

      transformer.setIndentation(2);

      try {
                TextTransfer.getInstance().javaToNative(transformer.transform(geometry), transferData);
            } catch (TransformerException e) {
                throw (RuntimeException) new RuntimeException().initCause(e);
            }
    }

    /**
     * @see Transfer#nativeToJava
     */
    @SuppressWarnings("deprecation")//$NON-NLS-1$
    public Object nativeToJava(TransferData transferData) {
      // JONES
      return null;
//            String string = (String) TextTransfer.getInstance().nativeToJava(transferData);
//            InputSource input = new InputSource(new StringReader(string));
//           
//            GMLHandlerJTS simpleGeometryHandler=new GMLHandlerJTS(){
//             
//            };
//      GMLFilterGeometry filterGeometry = new GMLFilterGeometry(simpleGeometryHandler);
//            GMLFilterDocument filterDocument = new GMLFilterDocument(filterGeometry);
//
//            try {
//                // parse xml
//                XMLReader reader = XMLReaderFactory.createXMLReader();
//                reader.setContentHandler(filterDocument);
//                reader.parse(input);
//            } catch (Exception e) {
//                return null;
//            }
//
//            return simpleGeometryHandler.geometry();
     
    }

  }

}
TOP

Related Classes of org.locationtech.udig.internal.ui.GeometryTextTransfer$JtsWktStrategy

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.