001    // $HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/tools/shape/Shape2GML.java $
002    /*----------------    FILE HEADER  ------------------------------------------
003    
004     This file is part of deegree.
005     Copyright (C) 2001-2008 by:
006     EXSE, Department of Geography, University of Bonn
007     http://www.giub.uni-bonn.de/deegree/
008     lat/lon GmbH
009     http://www.lat-lon.de
010    
011     This library is free software; you can redistribute it and/or
012     modify it under the terms of the GNU Lesser General Public
013     License as published by the Free Software Foundation; either
014     version 2.1 of the License, or (at your option) any later version.
015    
016     This library is distributed in the hope that it will be useful,
017     but WITHOUT ANY WARRANTY; without even the implied warranty of
018     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
019     Lesser General Public License for more details.
020    
021     You should have received a copy of the GNU Lesser General Public
022     License along with this library; if not, write to the Free Software
023     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
024    
025     Contact:
026    
027     Andreas Poth
028     lat/lon GmbH
029     Aennchenstr. 19
030     53115 Bonn
031     Germany
032     E-Mail: poth@lat-lon.de
033    
034     Prof. Dr. Klaus Greve
035     Department of Geography
036     University of Bonn
037     Meckenheimer Allee 166
038     53115 Bonn
039     Germany
040     E-Mail: greve@giub.uni-bonn.de
041    
042     
043     ---------------------------------------------------------------------------*/
044    package org.deegree.tools.shape;
045    
046    import java.io.FileOutputStream;
047    
048    import org.deegree.framework.log.ILogger;
049    import org.deegree.framework.log.LoggerFactory;
050    import org.deegree.io.shpapi.ShapeFile;
051    import org.deegree.model.feature.Feature;
052    import org.deegree.model.feature.FeatureCollection;
053    import org.deegree.model.feature.FeatureFactory;
054    import org.deegree.model.feature.GMLFeatureAdapter;
055    
056    /**
057     * 
058     *
059     * @version $Revision: 9346 $
060     * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
061     * @author last edited by: $Author: apoth $
062     *
063     * @version 1.0. $Revision: 9346 $, $Date: 2007-12-27 17:39:07 +0100 (Do, 27 Dez 2007) $
064     *
065     * @since 1.1
066     */
067    public class Shape2GML {
068        
069        private static final ILogger LOG = LoggerFactory.getLogger( Shape2GML.class );
070        
071        private String inFile = null;
072        private String outFile = null;
073        private FeatureCollection fc = null;
074            
075            
076        /** Creates a new instance of Shape2GML */
077        public Shape2GML(String inFile, String outFile) {
078            this.inFile = inFile;
079            this.outFile = outFile;
080        }
081        
082        private FeatureCollection read() throws Exception {
083                    
084            LOG.logInfo( "reading " + inFile + " ... " );
085            
086            // open shape file
087            ShapeFile sf = new ShapeFile( inFile );
088                    
089            int count = sf.getRecordNum();
090    
091            // create (empty feature collection)
092            fc = FeatureFactory.createFeatureCollection( inFile, count );            
093            
094            // load each feature from the shape file create a deegree feature
095            // and add it to the feature collection        
096            for (int i = 0; i < count; i++) {
097                if ( i % 10 == 0) {
098                    System.out.print(".");
099                }            
100                Feature feat = sf.getFeatureByRecNo( i+1 );            
101                // add to feature collection
102                fc.add( feat );            
103            }
104            System.out.println();
105            
106            sf.close();
107            
108            return fc;
109        }
110        
111        private void write() throws Exception {
112            LOG.logInfo( "writing " + outFile + " ... " );
113            FileOutputStream fos = new FileOutputStream( outFile );
114            new GMLFeatureAdapter().export(fc, fos);
115            fos.close();
116        }
117        
118        /**
119         * @param args the command line arguments
120         */
121        public static void main(String[] args) throws Exception {
122            
123            if ( args == null || args.length < 2 ) {
124                System.out.println("Two arguments - input file and output file - are required!");
125                System.exit(1);
126            }
127            
128            Shape2GML s2g = new Shape2GML( args[0], args[1] );
129            s2g.read();
130            s2g.write();
131            
132        }
133        
134    }