Package org.locationtech.udig.internal.ui

Source Code of org.locationtech.udig.internal.ui.FilterTextTransfer$SimpleFilterHandler

/* 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 java.io.StringReader;

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.filter.FilterFilter;
import org.geotools.filter.FilterHandler;
import org.geotools.filter.FilterTransformer;
import org.geotools.gml.GMLFilterDocument;
import org.geotools.gml.GMLFilterGeometry;
import org.opengis.filter.Filter;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;

/**
* To Transfer Filters in text form.
*
* @author jones
* @since 1.0.0
*/
public class FilterTextTransfer extends AbstractTextStrategizedTransfer implements UDIGTransfer{
    private static FilterTextTransfer _instance = new FilterTextTransfer();
    private FilterTextTransfer() {
    }

    /**
     * Returns the singleton instance of the TextTransfer class.
     *
     * @return the singleton instance of the TextTransfer class
     */
    public static FilterTextTransfer getInstance() {
        return _instance;
    }

  private TransferStrategy[] transferStrategies ;

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

        TransferStrategy[] copy=new TransferStrategy[transferStrategies.length];
        System.arraycopy(transferStrategies, 0, copy, 0, transferStrategies.length);
    return copy;
  }
   
    @Override
    public String[] getStrategyNames() {
        return new String[]{"GML"}; //$NON-NLS-1$
    }
 
    @Override
    public String getTransferName() {
        return "Filter"; //$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 Filter;
    }

    public static class SimpleFilterHandler extends DefaultHandler implements FilterHandler {

        private org.opengis.filter.Filter filter;

        public void filter( org.opengis.filter.Filter filter ) {
            this.filter = filter;
        }

        public org.opengis.filter.Filter getFilter() {
            return filter;
        }

    }

    private static class GMLFilterStrategy implements TransferStrategy{
        /**
         * @see Transfer#javaToNative
         */
        public void javaToNative( Object object, TransferData transferData ) {
            Filter filter = (Filter) object;
            FilterTransformer transformer = new FilterTransformer();
            transformer.setIndentation(4);
            try {
                String transform = transformer.transform(filter);
                TextTransfer.getInstance().javaToNative(transform, transferData);
            } catch (TransformerException e) {
                throw (RuntimeException) new RuntimeException().initCause(e);
            }
        }

        /**
         * @see Transfer#nativeToJava
         */
        public Object nativeToJava( TransferData transferData ) {
          String string = (String) TextTransfer.getInstance().nativeToJava(transferData);
            InputSource input = new InputSource(new StringReader(string));
            SimpleFilterHandler simpleFilterHandler = new SimpleFilterHandler();
            FilterFilter filterFilter = new FilterFilter(simpleFilterHandler, null);
            GMLFilterGeometry filterGeometry = new GMLFilterGeometry(filterFilter);
            GMLFilterDocument filterDocument = new GMLFilterDocument(filterGeometry);

            try {
                // parse xml
                XMLReader reader = XMLReaderFactory.createXMLReader();
                reader.setContentHandler(filterDocument);
                reader.parse(input);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }

            return simpleFilterHandler.getFilter();
       
    }
}
TOP

Related Classes of org.locationtech.udig.internal.ui.FilterTextTransfer$SimpleFilterHandler

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.