001    //$HeadURL: svn+ssh://jwilden@svn.wald.intevation.org/deegree/base/branches/2.5_testing/src/org/deegree/io/sdeapi/SDEConnection.java $
002    /*----------------    FILE HEADER  ------------------------------------------
003    
004     This file is part of deegree.
005     Copyright (C) 2006 by: M.O.S.S. Computer Grafik Systeme GmbH
006     Hohenbrunner Weg 13
007     D-82024 Taufkirchen
008     http://www.moss.de/
009    
010     This library is free software; you can redistribute it and/or
011     modify it under the terms of the GNU Lesser General Public
012     License as published by the Free Software Foundation; either
013     version 2.1 of the License, or (at your option) any later version.
014    
015     This library is distributed in the hope that it will be useful,
016     but WITHOUT ANY WARRANTY; without even the implied warranty of
017     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
018     Lesser General Public License for more details.
019    
020     You should have received a copy of the GNU Lesser General Public
021     License along with this library; if not, write to the Free Software
022     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
023    
024     ---------------------------------------------------------------------------*/
025    package org.deegree.io.sdeapi;
026    
027    import com.esri.sde.sdk.client.SeConnection;
028    import com.esri.sde.sdk.client.SeException;
029    import com.esri.sde.sdk.client.SeState;
030    import com.esri.sde.sdk.client.SeVersion;
031    
032    /**
033     * <code>SDEConnection</code>
034     * 
035     * @author <a href="mailto:schmitz@lat-lon.de">Andreas Schmitz</a>
036     * @author last edited by: $Author: aschmitz $
037     * 
038     * @version $Revision: 12146 $, $Date: 2008-06-04 12:18:44 +0200 (Mi, 04 Jun 2008) $
039     */
040    public class SDEConnection {
041    
042        private SeConnection connection;
043    
044        private SeVersion version;
045    
046        private SeState state;
047    
048        /**
049         * @param sdeServer
050         * @param sdeInstance
051         * @param sdeDatabase
052         * @param sdeVersion
053         * @param sdeUser
054         * @param sdePassword
055         */
056        public SDEConnection( final String sdeServer, final int sdeInstance, final String sdeDatabase,
057                              final String sdeVersion, final String sdeUser, final String sdePassword ) {
058    
059            try {
060                connection = new SeConnection( sdeServer, sdeInstance, sdeDatabase, sdeUser, sdePassword );
061                if ( null == sdeVersion || 0 == sdeVersion.length() ) {
062                    version = new SeVersion( connection );
063                } else {
064                    try {
065                        version = new SeVersion( connection, sdeVersion );
066                    } catch ( SeException dne ) {
067                        version = new SeVersion( connection, SeVersion.SE_QUALIFIED_DEFAULT_VERSION_NAME );
068                        version.setDescription( sdeVersion );
069                        version.setName( sdeVersion );
070                        version.setParentName( SeVersion.SE_QUALIFIED_DEFAULT_VERSION_NAME );
071                        version.create( false, version );
072                    }
073                }
074                reserve();
075            } catch ( Exception e ) {
076                e.printStackTrace();
077            }
078        }
079    
080        /**
081         * @return the connection
082         */
083        public SeConnection getConnection() {
084            return connection;
085        }
086    
087        /**
088         * @return the version
089         */
090        public SeVersion getVersion() {
091            return version;
092        }
093    
094        /**
095         * @return the state
096         */
097        public SeState getState() {
098            return state;
099        }
100    
101        /**
102         * @return if closed
103         */
104        public boolean isClosed() {
105            if ( null == connection ) {
106                return true;
107            }
108            return connection.isClosed();
109        }
110    
111        /**
112         * 
113         */
114        public void close() {
115            if ( !isClosed() ) {
116                release();
117                try {
118                    connection.close();
119                } catch ( Exception e ) {
120                    // just eat'em, it's good for the health
121                }
122                connection = null;
123            }
124        }
125    
126        private void reserve() {
127            try {
128                SeState verState = new SeState( connection, version.getStateId() );
129                state = new SeState( connection );
130                if ( verState.isOpen() ) {
131                    verState.close();
132                }
133                state.create( verState.getId() );
134            } catch ( Exception e ) {
135                e.printStackTrace();
136            }
137        }
138    
139        private void release() {
140            try {
141                version.changeState( state.getId() );
142                state.close();
143            } catch ( Exception e ) {
144                e.printStackTrace();
145            }
146        }
147    }