001: /*
002: * This file is part of the GeOxygene project source files.
003: *
004: * GeOxygene aims at providing an open framework which implements OGC/ISO specifications for
005: * the development and deployment of geographic (GIS) applications. It is a open source
006: * contribution of the COGIT laboratory at the Institut Géographique National (the French
007: * National Mapping Agency).
008: *
009: * See: http://oxygene-project.sourceforge.net
010: *
011: * Copyright (C) 2005 Institut Géographique National
012: *
013: * This library is free software; you can redistribute it and/or modify it under the terms
014: * of the GNU Lesser General Public License as published by the Free Software Foundation;
015: * either version 2.1 of the License, or any later version.
016: *
017: * This library is distributed in the hope that it will be useful, but WITHOUT ANY
018: * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
019: * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
020: *
021: * You should have received a copy of the GNU Lesser General Public License along with
022: * this library (see file LICENSE if present); if not, write to the Free Software
023: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024: *
025: */
026:
027: package fr.ign.cogit.geoxygene.datatools;
028:
029: import java.io.File;
030: import java.sql.Connection;
031: import java.util.List;
032:
033: import org.odmg.OQLQuery;
034:
035: import fr.ign.cogit.geoxygene.feature.FT_FeatureCollection;
036: import fr.ign.cogit.geoxygene.spatial.geomroot.GM_Object;
037:
038: /// A revoir plus tard : compatiblite avec la norme JDO...
039:
040: /**
041: * Represente une connection a une base de donnees geographique.
042: * Gere la manipulation des donnees via un mappeur objet-relationnel (Castor, OJB).
043: *
044: * @author Thierry Badard & Arnaud Braun
045: * @version 1.1
046: *
047: */
048:
049: public interface Geodatabase {
050:
051: public static final int ORACLE = 1;
052: public static final int POSTGIS = 2;
053:
054: /////////////////////////////////////////////////////////////////////////////////////////
055: ///// gestion des transactions //////////////////////////////////////////////////////////
056: /////////////////////////////////////////////////////////////////////////////////////////
057: /** Ouvre une transaction. */
058: public void begin();
059:
060: /** Commit la transaction sans la fermer. */
061: public void checkpoint();
062:
063: /** Commite et ferme la transaction. */
064: public void commit();
065:
066: /** Annule et ferme la transaction. */
067: public void abort();
068:
069: /** Renvoie true si la transaction est ouverte. */
070: public boolean isOpen();
071:
072: /** Ferme la connection (libere les ressources). */
073: public void close();
074:
075: /** Vide le cache de la transaction.
076: A appeler a l'interieur d'une transaction ouverte. */
077: public void clearCache();
078:
079: /////////////////////////////////////////////////////////////////////////////////////////
080: ///// gestion de la persistance /////////////////////////////////////////////////////////
081: /////////////////////////////////////////////////////////////////////////////////////////
082: /** Rend persistant un objet.
083: A appeler a l'interieur d'une transaction ouverte.*/
084: public void makePersistent(Object obj);
085:
086: /** Detruit un objet persistant.
087: A appeler a l'interieur d'une transaction ouverte. */
088: public void deletePersistent(Object obj);
089:
090: /////////////////////////////////////////////////////////////////////////////////////////
091: ///// chargement d'objets ///////////////////////////////////////////////////////////////
092: /////////////////////////////////////////////////////////////////////////////////////////
093: /** Charge l'objet d'identifiant id.
094: A utilisser avec precaution, car ne charge pas forcement toutes les relations.
095: Passer un Integer pour id, si l'identifiant est un int.
096: Renvoie null si l'objet d'identifiant id n'existe pas.
097: A appeler a l'interieur d'une transaction ouverte. */
098: public java.lang.Object load(Class clazz, Object id);
099:
100: /** Charge tous les objets persistants de la classe theClass et les met dans une liste.
101: A appeler a l'interieur d'une transaction ouverte. */
102: public List loadAll(Class theClass);
103:
104: /** Charge tous les FT_Feature de la classe theClass dans la classe FT_FeatureCollection.
105: A appeler a l'interieur d'une transaction ouverte.
106: La classe theClass doit etre une sous-classe de FT_Feature, sinon renvoie une liste vide. */
107: public FT_FeatureCollection loadAllFeatures(Class featureClass);
108:
109: /** Charge tous les FT_Feature de la classe theClass dans la classe featureListClass.
110: A appeler a l'interieur d'une transaction ouverte.
111: La classe theClass doit etre une sous-classe de FT_Feature, sinon renvoie une liste vide.
112: La classe featureListClass doit etre un sous classe de FT_FeatureCollection.*/
113: public Object loadAllFeatures(Class featureClass,
114: Class featureListClass);
115:
116: /** Charge tous les FT_Feature de la classe theClass intersectant le GM_Object geom, dans la classe FT_FeatureCollection.
117: A appeler a l'interieur d'une transaction ouverte.
118: La classe theClass doit etre une sous-classe de FT_Feature, sinon renvoie une liste vide. */
119: public FT_FeatureCollection loadAllFeatures(Class featureClass,
120: GM_Object geom);
121:
122: /** Charge tous les FT_Feature de la classe theClass intersectant le GM_Object geom, dans la classe featureListClass.
123: A appeler a l'interieur d'une transaction ouverte.
124: La classe theClass doit etre une sous-classe de FT_Feature, sinon renvoie une liste vide.
125: La classe featureListClass doit etre un sous classe de FT_FeatureCollection.*/
126: public Object loadAllFeatures(Class featureClass,
127: Class featureListClass, GM_Object geom);
128:
129: /** Charge tous les FT_Feature de la classe theClass a une distance dist du GM_Object geom, dans la classe FT_FeatureCollection.
130: Si geom est la geometrie d'un FT_Feature de theClass, alors ce FT_Feature appartiendra au resultat.
131: A appeler a l'interieur d'une transaction ouverte.
132: La classe theClass doit etre une sous-classe de FT_Feature, sinon renvoie une liste vide.*/
133: public FT_FeatureCollection loadAllFeatures(Class featureClass,
134: GM_Object geom, double dist);
135:
136: /** Charge tous les FT_Feature de la classe theClass a une distance dist du GM_Object geom, dans la classe featureListClass.
137: Si geom est la geometrie d'un FT_Feature de theClass, alors ce FT_Feature appartiendra au resultat.
138: A appeler a l'interieur d'une transaction ouverte.
139: La classe theClass doit etre une sous-classe de FT_Feature, sinon renvoie une liste vide.
140: La classe featureListClass doit etre un sous classe de FT_FeatureCollection.*/
141: public Object loadAllFeatures(Class featureClass,
142: Class featureListClass, GM_Object geom, double dist);
143:
144: /** Execute la requete OQL query, la lie avec le parametre param, et met le resultat dans une liste.
145: A appeler a l'interieur d'une transaction ouverte.
146: On peut passer null pour param, si on ne souhaite lier la requete a aucune variable. */
147: public List loadOQL(String query, Object param);
148:
149: /////////////////////////////////////////////////////////////////////////////////////////
150: ///// OQL ///////////////////////////////////////////////////////////////////////////////
151: /////////////////////////////////////////////////////////////////////////////////////////
152: /** Cree une une nouvelle requete OQL (ODMG). */
153: public OQLQuery newOQLQuery();
154:
155: /////////////////////////////////////////////////////////////////////////////////////////
156: ///// Gestion de l'information spatiale /////////////////////////////////////////////////
157: /////////////////////////////////////////////////////////////////////////////////////////
158: /** Renvoie la liste des metadonnees. */
159: public List getMetadata();
160:
161: /** Renvoie les metadonnees de la classe theClass.
162: theClass doit etre une classe definie dans le mapping.*/
163: public Metadata getMetadata(Class theClass);
164:
165: /** Renvoie les metadonnees de la classe mappee avec la table theTable.
166: theTable doit etre une table definie dans le mapping.
167: Si theTable est mappee avec plusieurs classes, en renvoie une. */
168: public Metadata getMetadata(String theTable);
169:
170: /** Calcule DANS LE SGBD l'emprise la table mappee avec la classe (utile pour Oracle ...).
171: La classe doit heriter de FT_Feature, la table doit contenir une geometrie. */
172: public void mbr(Class clazz);
173:
174: /** Calcule DANS LE SGBD un index spatial sur la table mappee avec la classe (R-Tree).
175: La classe doit heriter de FT_Feature, la table doit contenir une geometrie. */
176: public void spatialIndex(Class clazz);
177:
178: /////////////////////////////////////////////////////////////////////////////////////////
179: ///// SQL ///////////////////////////////////////////////////////////////////////////////
180: /////////////////////////////////////////////////////////////////////////////////////////
181: /** Renvoie la connection JDBC sous-jacente. */
182: public Connection getConnection();
183:
184: /** Renvoie le type de SGBD. */
185: public int getDBMS();
186:
187: /** Execute une commande SQL.
188: Cette commande ne doit pas renvoyer de resultat : INSERT, UPDATE, DELETE, mais pas SELECT.
189: Utile uniquement pour debugger : on ne doit pas utiliser de SQL direct avec GeOxygene !*/
190: public void exeSQL(String query);
191:
192: /** Execute une requete et met les resultats dans une liste de tableau d'objets.
193: Les tableaux ont la taille du nombre d'objets demandes dans le SELECT.
194: Exemple d'utilisation du resultat :
195: <tt> List edges = db.exeSQLQuery("SELECT edgeID FROM tableName WHERE ..."). </tt>
196: Pour recuperer le premier resultat :
197: <tt> edgeId = ( (BigDecimal) ((Object[]) (edges.get(0)) )[0] ).intValue(); </tt>
198: Utile uniquement pour debugger : on ne doit pas utiliser de SQL direct avec GeOxygene !*/
199: public List exeSQLQuery(String query);
200:
201: /////////////////////////////////////////////////////////////////////////////////////////
202: ///// divers ////////////////////////////////////////////////////////////////////////////
203: /////////////////////////////////////////////////////////////////////////////////////////
204: /** Renvoie le nombre d'objets persistants de la classe theClass.
205: A appeler a l'interieur d'une transaction ouverte. */
206: public int countObjects(Class theClass);
207:
208: /** Renvoie l'identifiant maximum de la classe theClass.
209: ATTENTION : La classe passee en parametre doit avoir un champ "id" de type int (marche pour les FT_Feature).
210: A appeler a l'interieur d'une transaction ouverte. */
211: public int maxId(Class theClass);
212:
213: /** Renvoie l'identifiant minimum de la classe theClass.
214: ATTENTION : La classe passee en parametre doit avoir un champ "id" de type int (marche pour les FT_Feature).
215: A appeler a l'interieur d'une transaction ouverte. */
216: public int minId(Class theClass);
217:
218: /** Recharger un fichier de mapping qui a ete modifie. */
219: public void refreshRepository(File newRepository) throws Exception;
220:
221: }
|