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.example.relations;
028:
029: import java.util.ArrayList;
030: import java.util.Iterator;
031: import java.util.List;
032:
033: import fr.ign.cogit.geoxygene.datatools.Geodatabase;
034: import fr.ign.cogit.geoxygene.datatools.ojb.GeodatabaseOjbFactory;
035:
036: /**
037: * Test des relations BIDIRECTIONNELLES entre les classes AAA et BBB.
038: * Ce test teste aussi la persistance.
039: * C'est le meme que "TestRelationsBiNonPersistantes",
040: * avec en plus les fonctions d'ecriture dans le SGBD.
041: * On peut controler a tout moment l'etat de la base en activant des commit et en quittant l'application.
042: * Pensez a activer le fichier de mapping "repository_AAA_BBB.xml" .
043: * La base s'initialise avec le script "init_relations_AAA_BBB.sql" .
044: *
045: * @author Thierry Badard, Arnaud Braun & Sébastien Mustière
046: * @version 1.0
047: *
048: */
049:
050: public class TestRelationsBiPersistantes {
051:
052: static Geodatabase db = GeodatabaseOjbFactory.newInstance();
053:
054: public static void main(String args[]) {
055: System.out.println("DEBUT DES TESTS");
056: test_bi11();
057: test_bi1n();
058: test_binn();
059: charge();
060: }
061:
062: /** Teste la relation 1-1 bi-directionnelle */
063: public static void test_bi11() {
064:
065: db.begin();
066:
067: System.out.println("Creation des objets AAA, BBB");
068: AAA a1 = new AAA();
069: a1.setNom("a1");
070: AAA a2 = new AAA();
071: a2.setNom("a2");
072: AAA a3 = new AAA();
073: a3.setNom("a3");
074: BBB b1 = new BBB();
075: b1.setNom("b1");
076: BBB b2 = new BBB();
077: b2.setNom("b2");
078: BBB b3 = new BBB();
079: b3.setNom("b3");
080:
081: db.makePersistent(a1);
082: db.makePersistent(a2);
083: db.makePersistent(a3);
084: db.makePersistent(b1);
085: db.makePersistent(b2);
086: db.makePersistent(b3);
087:
088: System.out.println("");
089: System.out.println("TEST RELATION 1-1 BIDIRECTIONNELLE");
090: System.out.println("objet BBB en relation avec a1 (null) : "
091: + a1.getObjetBBB_bi11());
092: System.out.println("objet BBB en relation avec a2 (null) : "
093: + a2.getObjetBBB_bi11());
094: System.out.println("objet AAA en relation avec b1 (null) : "
095: + b1.getObjetAAA_bi11());
096: System.out.println("objet AAA en relation avec b2 (null) : "
097: + b2.getObjetAAA_bi11());
098: System.out.println("--");
099: System.out.println("instanciation sur a1 de a1 R b1 ");
100: a1.setObjetBBB_bi11(b1);
101: System.out.println("objet BBB en relation avec a1 (b1) : "
102: + a1.getObjetBBB_bi11().getNom());
103: System.out.println("objet BBB en relation avec a2 (null) : "
104: + a2.getObjetBBB_bi11());
105: System.out.println("objet AAA en relation avec b1 (a1) : "
106: + b1.getObjetAAA_bi11().getNom());
107: System.out.println("objet AAA en relation avec b2 (null) : "
108: + b2.getObjetAAA_bi11());
109: /* decommenter si on veut consulter l'etat de la base ici */
110: // db.commit();
111: // System.exit(0);
112: System.out.println("--");
113: System.out.println("instanciation sur a1 de a1 R b2 ");
114: a1.setObjetBBB_bi11(b2);
115: System.out.println("objet BBB en relation avec a1 (b2) : "
116: + a1.getObjetBBB_bi11().getNom());
117: System.out.println("objet BBB en relation avec a2 (null) : "
118: + a2.getObjetBBB_bi11());
119: System.out.println("objet AAA en relation avec b1 (null) : "
120: + b1.getObjetAAA_bi11());
121: System.out.println("objet AAA en relation avec b2 (a1) : "
122: + b2.getObjetAAA_bi11().getNom());
123: /* decommenter si on veut consulter l'etat de la base ici */
124: // db.commit();
125: // System.exit(0);
126: System.out.println("--");
127: System.out
128: .println("instanciation sur a1 de a1 R b2 (2eme fois)");
129: a1.setObjetBBB_bi11(b2);
130: System.out.println("objet BBB en relation avec a1 (b2) : "
131: + a1.getObjetBBB_bi11().getNom());
132: System.out.println("objet BBB en relation avec a2 (null) : "
133: + a2.getObjetBBB_bi11());
134: System.out.println("objet AAA en relation avec b1 (null) : "
135: + b1.getObjetAAA_bi11());
136: System.out.println("objet AAA en relation avec b2 (a1) : "
137: + b2.getObjetAAA_bi11().getNom());
138: /* decommenter si on veut consulter l'etat de la base ici */
139: // db.commit();
140: // System.exit(0);
141: System.out.println("--");
142: System.out.println("instanciation sur b2 de a2 R b2");
143: b2.setObjetAAA_bi11(a2);
144: System.out.println("objet BBB en relation avec a1 (null) : "
145: + a1.getObjetBBB_bi11());
146: System.out.println("objet BBB en relation avec a2 (b2) : "
147: + a2.getObjetBBB_bi11().getNom());
148: System.out.println("objet AAA en relation avec b1 (null) : "
149: + b1.getObjetAAA_bi11());
150: System.out.println("objet AAA en relation avec b2 (a2) : "
151: + b2.getObjetAAA_bi11().getNom());
152: /* decommenter si on veut consulter l'etat de la base ici */
153: // db.commit();
154: // System.exit(0);
155: System.out.println("--");
156: System.out.println("instanciation sur b1 de a2 R b1");
157: b1.setObjetAAA_bi11(a2);
158: System.out.println("objet BBB en relation avec a1 (null) : "
159: + a1.getObjetBBB_bi11());
160: System.out.println("objet BBB en relation avec a2 (b1) : "
161: + a2.getObjetBBB_bi11().getNom());
162: System.out.println("objet AAA en relation avec b1 (a2) : "
163: + b1.getObjetAAA_bi11().getNom());
164: System.out.println("objet AAA en relation avec b2 (null) : "
165: + b2.getObjetAAA_bi11());
166: /* decommenter si on veut consulter l'etat de la base ici */
167: // db.commit();
168: // System.exit(0);
169: /*System.out.println("--");
170: System.out.println("vidage des relations sur b1");
171: b1.setObjetAAA_bi11(null);
172: System.out.println("objet BBB en relation avec a1 (null) : "+a1.getObjetBBB_bi11());
173: System.out.println("objet BBB en relation avec a2 (null) : "+a2.getObjetBBB_bi11());
174: System.out.println("objet AAA en relation avec b1 (null) : "+b1.getObjetAAA_bi11());
175: System.out.println("objet AAA en relation avec b2 (null) : "+b2.getObjetAAA_bi11());*/
176: /* decommenter si on veut consulter l'etat de la base ici */
177: db.commit();
178:
179: }
180:
181: /** Teste la relation 1-n bi-directionnelle */
182: public static void test_bi1n() {
183:
184: db.begin();
185:
186: System.out.println("Creation des objets AAA, BBB");
187: AAA a1 = new AAA();
188: a1.setNom("a1");
189: AAA a2 = new AAA();
190: a2.setNom("a2");
191: AAA a3 = new AAA();
192: a3.setNom("a3");
193: BBB b1 = new BBB();
194: b1.setNom("b1");
195: BBB b2 = new BBB();
196: b2.setNom("b2");
197: BBB b3 = new BBB();
198: b3.setNom("b3");
199: List L;
200:
201: db.makePersistent(a1);
202: db.makePersistent(a2);
203: db.makePersistent(a3);
204: db.makePersistent(b1);
205: db.makePersistent(b2);
206: db.makePersistent(b3);
207:
208: System.out.println("");
209: System.out.println("TEST RELATION 1-N BIDIRECTIONNELLE");
210: System.out.println("objet BBB en relation avec a1 (vide) : ");
211: affiche(a1.getListe_objetsBBB_bi1N());
212: System.out.println("objet BBB en relation avec a2 (vide) : ");
213: affiche(a2.getListe_objetsBBB_bi1N());
214: System.out.println("objet BBB en relation avec a3 (vide) : ");
215: affiche(a3.getListe_objetsBBB_bi1N());
216: System.out.println("objet AAA en relation avec b1 (null) : "
217: + b1.getObjetAAA_bi1N());
218: System.out.println("objet AAA en relation avec b2 (null) : "
219: + b2.getObjetAAA_bi1N());
220: System.out.println("objet AAA en relation avec b3 (null) : "
221: + b3.getObjetAAA_bi1N());
222: /* decommenter si on veut consulter l'etat de la base ici */
223: // db.commit();
224: // System.exit(0);
225: System.out.println("--");
226: System.out
227: .println("ajout sur a1, de b1 aux objets en relation avec a1");
228: System.out
229: .println("set sur a2, de liste 'b2, b3' comme objets en relation avec a2");
230: a1.addObjetBBB_bi1N(b1);
231: L = new ArrayList();
232: L.add(b2);
233: L.add(b3);
234: a2.setListe_objetsBBB_bi1N(L);
235: System.out.println("objet BBB en relation avec a1 (b1) : ");
236: affiche(a1.getListe_objetsBBB_bi1N());
237: System.out.println("objet BBB en relation avec a2 (b2, b3) : ");
238: affiche(a2.getListe_objetsBBB_bi1N());
239: System.out.println("objet BBB en relation avec a3 (vide) : ");
240: affiche(a3.getListe_objetsBBB_bi1N());
241: System.out.println("objet AAA en relation avec b1 (a1) : "
242: + b1.getObjetAAA_bi1N().getNom());
243: System.out.println("objet AAA en relation avec b2 (a2) : "
244: + b2.getObjetAAA_bi1N().getNom());
245: System.out.println("objet AAA en relation avec b3 (a2) : "
246: + b3.getObjetAAA_bi1N().getNom());
247: /* decommenter si on veut consulter l'etat de la base ici */
248: // db.commit();
249: // System.exit(0);
250: System.out.println("--");
251: System.out.println("set sur b2 de b2 en relation avec a1");
252: b2.setObjetAAA_bi1N(a1);
253: System.out.println("objet BBB en relation avec a1 (b1, b2) : ");
254: affiche(a1.getListe_objetsBBB_bi1N());
255: System.out.println("objet BBB en relation avec a2 (b3) : ");
256: affiche(a2.getListe_objetsBBB_bi1N());
257: System.out.println("objet BBB en relation avec a3 (vide) : ");
258: affiche(a3.getListe_objetsBBB_bi1N());
259: System.out.println("objet AAA en relation avec b1 (a1) : "
260: + b1.getObjetAAA_bi1N().getNom());
261: System.out.println("objet AAA en relation avec b2 (a1) : "
262: + b2.getObjetAAA_bi1N().getNom());
263: System.out.println("objet AAA en relation avec b3 (a2) : "
264: + b3.getObjetAAA_bi1N().getNom());
265: /* decommenter si on veut consulter l'etat de la base ici */
266: // db.commit();
267: // System.exit(0);
268: System.out.println("--");
269: System.out.println("vidage sur a1 des objets en relation");
270: System.out.println("destruction de la relation sur b3");
271: a1.emptyListe_objetsBBB_bi1N();
272: b3.setObjetAAA_bi1N(null);
273: System.out.println("objet BBB en relation avec a1 (vide) : ");
274: affiche(a1.getListe_objetsBBB_bi1N());
275: System.out.println("objet BBB en relation avec a2 (vide) : ");
276: affiche(a2.getListe_objetsBBB_bi1N());
277: System.out.println("objet BBB en relation avec a3 (vide) : ");
278: affiche(a3.getListe_objetsBBB_bi1N());
279: System.out.println("objet AAA en relation avec b1 (null) : "
280: + b1.getObjetAAA_bi1N());
281: System.out.println("objet AAA en relation avec b2 (null) : "
282: + b2.getObjetAAA_bi1N());
283: System.out.println("objet AAA en relation avec b3 (null) : "
284: + b3.getObjetAAA_bi1N());
285: /* decommenter si on veut consulter l'etat de la base ici */
286: // db.commit();
287: // System.exit(0);
288: System.out.println("--");
289: System.out
290: .println("set sur a2, de liste 'b2, b3' comme objets en relation avec a2");
291: System.out
292: .println("set sur b2 de la relation avec a2 (redondant)");
293: b2.setObjetAAA_bi1N(a2);
294: L = new ArrayList();
295: L.add(b2);
296: L.add(b3);
297: a2.setListe_objetsBBB_bi1N(L);
298: System.out.println("objet BBB en relation avec a1 (vide) : ");
299: affiche(a1.getListe_objetsBBB_bi1N());
300: System.out.println("objet BBB en relation avec a2 (b2, b3) : ");
301: affiche(a2.getListe_objetsBBB_bi1N());
302: System.out.println("objet BBB en relation avec a3 (vide) : ");
303: affiche(a3.getListe_objetsBBB_bi1N());
304: System.out.println("objet AAA en relation avec b1 (null) : "
305: + b1.getObjetAAA_bi1N());
306: System.out.println("objet AAA en relation avec b2 (a2) : "
307: + b2.getObjetAAA_bi1N().getNom());
308: System.out.println("objet AAA en relation avec b3 (a2) : "
309: + b3.getObjetAAA_bi1N().getNom());
310: /* decommenter si on veut consulter l'etat de la base ici */
311: // db.commit();
312: // System.exit(0);
313: System.out.println("--");
314: System.out
315: .println("set sur a2, de liste 'b1, b3' comme objets en relation avec a2");
316: L = new ArrayList();
317: L.add(b1);
318: L.add(b3);
319: a2.setListe_objetsBBB_bi1N(L);
320: System.out.println("objet BBB en relation avec a1 (vide) : ");
321: affiche(a1.getListe_objetsBBB_bi1N());
322: System.out.println("objet BBB en relation avec a2 (b1, b3) : ");
323: affiche(a2.getListe_objetsBBB_bi1N());
324: System.out.println("objet BBB en relation avec a3 (vide) : ");
325: affiche(a3.getListe_objetsBBB_bi1N());
326: System.out.println("objet AAA en relation avec b1 (a2) : "
327: + b1.getObjetAAA_bi1N().getNom());
328: System.out.println("objet AAA en relation avec b2 (null) : "
329: + b2.getObjetAAA_bi1N());
330: System.out.println("objet AAA en relation avec b3 (a2) : "
331: + b3.getObjetAAA_bi1N().getNom());
332: /* decommenter si on veut consulter l'etat de la base ici */
333: // db.commit();
334: // System.exit(0);
335: System.out.println("--");
336: System.out
337: .println("ajout sur a2, de liste b2 comme objets en relation avec a2");
338: a2.addObjetBBB_bi1N(b2);
339: System.out.println("objet BBB en relation avec a1 (vide) : ");
340: affiche(a1.getListe_objetsBBB_bi1N());
341: System.out
342: .println("objet BBB en relation avec a2 (b1, b3, b2) : ");
343: affiche(a2.getListe_objetsBBB_bi1N());
344: System.out.println("objet BBB en relation avec a3 (vide) : ");
345: affiche(a3.getListe_objetsBBB_bi1N());
346: System.out.println("objet AAA en relation avec b1 (a2) : "
347: + b1.getObjetAAA_bi1N().getNom());
348: System.out.println("objet AAA en relation avec b2 (a2) : "
349: + b2.getObjetAAA_bi1N().getNom());
350: System.out.println("objet AAA en relation avec b3 (a2) : "
351: + b3.getObjetAAA_bi1N().getNom());
352: /* decommenter si on veut consulter l'etat de la base ici */
353: db.commit();
354:
355: }
356:
357: /** Teste la relation n-n bi-directionnelle */
358: public static void test_binn() {
359:
360: db.begin();
361:
362: System.out.println("Creation des objets AAA, BBB");
363: AAA a1 = new AAA();
364: a1.setNom("a1");
365: AAA a2 = new AAA();
366: a2.setNom("a2");
367: AAA a3 = new AAA();
368: a3.setNom("a3");
369: BBB b1 = new BBB();
370: b1.setNom("b1");
371: BBB b2 = new BBB();
372: b2.setNom("b2");
373: BBB b3 = new BBB();
374: b3.setNom("b3");
375: List L;
376:
377: db.makePersistent(a1);
378: db.makePersistent(a2);
379: db.makePersistent(a3);
380: db.makePersistent(b1);
381: db.makePersistent(b2);
382: db.makePersistent(b3);
383:
384: System.out.println("TEST RELATION N-M BIDIRECTIONNELLE");
385: System.out
386: .println("set sur a1, de liste b1 b2 comme objets en relation avec a2");
387: System.out
388: .println("add sur a2, de b2 comme objets en relation avec a2");
389: System.out
390: .println("add sur a3, de b3 comme objets en relation avec a3");
391: L = new ArrayList();
392: L.add(b1);
393: L.add(b2);
394: a1.setListe_objetsBBB_biNM(L);
395: a2.addObjetBBB_biNM(b2);
396: a3.addObjetBBB_biNM(b3);
397: System.out.println("objet BBB en relation avec a1 (b1, b2) : ");
398: affiche(a1.getListe_objetsBBB_biNM());
399: System.out.println("objet BBB en relation avec a2 (b2) : ");
400: affiche(a2.getListe_objetsBBB_biNM());
401: System.out.println("objet BBB en relation avec a3 (b3) : ");
402: affiche(a3.getListe_objetsBBB_biNM());
403: System.out.println("objet AAA en relation avec b1 (a1) : ");
404: affiche(b1.getListe_objetsAAA_biNM());
405: System.out.println("objet AAA en relation avec b2 (a1, a2) : ");
406: affiche(b2.getListe_objetsAAA_biNM());
407: System.out.println("objet AAA en relation avec b3 (a3) : ");
408: affiche(b3.getListe_objetsAAA_biNM());
409: /* decommenter si on veut consulter l'etat de la base ici */
410: // db.commit();
411: // System.exit(0);
412: System.out.println("");
413: System.out.println("-- (idem avant)");
414: System.out
415: .println("set sur a1, de liste b1 b2 comme objets en relation avec a2");
416: System.out
417: .println("add sur a2, de b2 comme objets en relation avec a2");
418: System.out
419: .println("add sur a3, de b3 comme objets en relation avec a3");
420: L = new ArrayList();
421: L.add(b1);
422: L.add(b2);
423: a1.setListe_objetsBBB_biNM(L);
424: a2.addObjetBBB_biNM(b2);
425: a3.addObjetBBB_biNM(b3);
426: System.out.println("objet BBB en relation avec a1 (b1, b2) : ");
427: affiche(a1.getListe_objetsBBB_biNM());
428: System.out.println("objet BBB en relation avec a2 (b2, b2) : ");
429: affiche(a2.getListe_objetsBBB_biNM());
430: System.out.println("objet BBB en relation avec a3 (b3, b3) : ");
431: affiche(a3.getListe_objetsBBB_biNM());
432: System.out.println("objet AAA en relation avec b1 (a1) : ");
433: affiche(b1.getListe_objetsAAA_biNM());
434: System.out
435: .println("objet AAA en relation avec b2 (a1, a2, a2) : ");
436: affiche(b2.getListe_objetsAAA_biNM());
437: System.out.println("objet AAA en relation avec b3 (a3, a3) : ");
438: affiche(b3.getListe_objetsAAA_biNM());
439: /* decommenter si on veut consulter l'etat de la base ici */
440: // db.commit();
441: // System.exit(0);
442: System.out.println("");
443: System.out.println("-- ");
444: System.out.println("remove sur b1 de a1");
445: System.out.println("remove sur b2 de a2");
446: System.out.println("vidage de a3");
447: L = new ArrayList();
448: L.add(b1);
449: L.add(b2);
450: b1.removeObjetAAA_biNM(a1);
451: b2.removeObjetAAA_biNM(a2);
452: a3.emptyListe_objetsBBB_biNM();
453: System.out.println("objet BBB en relation avec a1 (b2) : ");
454: affiche(a1.getListe_objetsBBB_biNM());
455: System.out.println("objet BBB en relation avec a2 (b2) : ");
456: affiche(a2.getListe_objetsBBB_biNM());
457: System.out.println("objet BBB en relation avec a3 (vide) : ");
458: affiche(a3.getListe_objetsBBB_biNM());
459: System.out.println("objet AAA en relation avec b1 (vide) : ");
460: affiche(b1.getListe_objetsAAA_biNM());
461: System.out.println("objet AAA en relation avec b2 (a1, a2) : ");
462: affiche(b2.getListe_objetsAAA_biNM());
463: System.out.println("objet AAA en relation avec b3 (vide) : ");
464: affiche(b3.getListe_objetsAAA_biNM());
465: /* decommenter si on veut consulter l'etat de la base ici */
466: db.commit();
467: }
468:
469: /** Chargement des objets */
470: public static void charge() {
471: db.begin();
472: List allBBB = db.loadAll(BBB.class);
473: List allAAA = db.loadAll(AAA.class);
474: System.out.println("-- AAA ---");
475: Iterator itA = allAAA.iterator();
476: while (itA.hasNext()) {
477: AAA a = (AAA) itA.next();
478: System.out.println("## objet - id = " + a.getId()
479: + " - nom = " + a.getNom());
480: System.out.print(" lien 1-1 : ");
481: if (a.getObjetBBB_bi11() != null)
482: System.out.print("id = " + a.getObjetBBB_bi11().getId()
483: + " - nom = " + a.getObjetBBB_bi11().getNom());
484: System.out.println();
485: System.out.println(" lien 1-n : ");
486: affiche(a.getListe_objetsBBB_bi1N());
487: System.out.println(" lien n-m : ");
488: affiche(a.getListe_objetsBBB_biNM());
489: }
490: System.out.println();
491: System.out.println("-- BBB ---");
492: Iterator itB = allBBB.iterator();
493: while (itB.hasNext()) {
494: BBB b = (BBB) itB.next();
495: System.out.println("## objet - id = " + b.getId()
496: + " - nom = " + b.getNom());
497: System.out.print(" lien 1-1 : ");
498: if (b.getObjetAAA_bi11() != null)
499: System.out.print("id = " + b.getObjetAAA_bi11().getId()
500: + " - nom = " + b.getObjetAAA_bi11().getNom());
501: System.out.println();
502: System.out.print(" lien 1-n : ");
503: if (b.getObjetAAA_bi1N() != null)
504: System.out.print("id = " + b.getObjetAAA_bi1N().getId()
505: + " - nom = " + b.getObjetAAA_bi1N().getNom());
506: System.out.println();
507: System.out.println(" lien n-m : ");
508: affiche(b.getListe_objetsAAA_biNM());
509: }
510: }
511:
512: public static void affiche(List L) {
513: Iterator it = L.iterator();
514: while (it.hasNext()) {
515: ClasseMere o = (ClasseMere) it.next();
516: if (o == null)
517: System.out.println(" - null");
518: else
519: System.out.println(" - " + o.getNom());
520: }
521: }
522:
523: }
|