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: // Imports necessaires aux relations 1-n et n-m
030: import java.util.ArrayList;
031: import java.util.Iterator;
032: import java.util.List;
033:
034: /** Classe exemple pour les relations, mono ou bidirectionnelles, avec la classe AAA.
035: *
036: * @author Thierry Badard, Arnaud Braun & Sébastien Mustière
037: * @version 1.0
038: *
039: */
040:
041: public class BBB extends ClasseMere {
042:
043: //////////////////////////////////////////////////////////////////////////
044: //////////////////////////////////////////////////////////////////////////
045: //////////////////////////////////////////////////////////////////////////
046: /// /////
047: /// R E L A T I O N S /////
048: /// B I D I R E C T I O N N E L L E S /////
049: /// /////
050: //////////////////////////////////////////////////////////////////////////
051: //////////////////////////////////////////////////////////////////////////
052: //////////////////////////////////////////////////////////////////////////
053:
054: //////////////////////////////////////////////////////////////////////////
055: // relation BIDIRECTIONNELLE 1-1 //////////////////////
056: //////////////////////////////////////////////////////////////////////////
057:
058: /** Lien bidirectionnel 1-1 vers BBB.
059: * 1 objet AAA est en relation avec 1 objet BBB au plus.
060: * 1 objet BBB est en relation avec 1 objet AAA au plus.
061: *
062: * Les méthodes get et set sont utiles pour assurer la bidirection.
063: *
064: * NB : si il n'y a pas d'objet en relation, getObjet renvoie null.
065: * Pour casser une relation: faire setObjet(null);
066: */
067: private AAA objetAAA_bi11;
068:
069: /** Récupère l'objet en relation */
070:
071: public AAA getObjetAAA_bi11() {
072: return objetAAA_bi11;
073: }
074:
075: /** Définit l'objet en relation */
076: public void setObjetAAA_bi11(AAA O) {
077: AAA old = objetAAA_bi11;
078: objetAAA_bi11 = O;
079: if (old != null)
080: old.setObjetBBB_bi11(null);
081: if (O != null) {
082: if (O.getObjetBBB_bi11() != this )
083: O.setObjetBBB_bi11(this );
084: }
085: }
086:
087: //////////////////////////////////////////////////////////////////////////
088: // relation BIDIRECTIONNELLE 1-n //////////////////////
089: //////////////////////////////////////////////////////////////////////////
090:
091: /** Lien bidirectionnel 1-n vers BBB.
092: * 1 objet AAA est en relation avec n objets BBB (n pouvant etre nul).
093: * 1 objet BBB est en relation avec 1 objet AAA au plus.
094: *
095: * Les méthodes get et set sont utiles pour assurer la bidirection.
096: *
097: * NB : si il n'y a pas d'objet en relation, getObjet renvoie null.
098: * Pour casser une relation: faire setObjet(null);
099: */
100: private AAA objetAAA_bi1N;
101:
102: /** Récupère l'objet en relation. */
103:
104: public AAA getObjetAAA_bi1N() {
105: return objetAAA_bi1N;
106: }
107:
108: /** Définit l'objet en relation, et met à jour la relation inverse. */
109: public void setObjetAAA_bi1N(AAA O) {
110: AAA old = objetAAA_bi1N;
111: objetAAA_bi1N = O;
112: if (old != null)
113: old.getListe_objetsBBB_bi1N().remove(this );
114: if (O != null) {
115: if (!O.getListe_objetsBBB_bi1N().contains(this ))
116: O.getListe_objetsBBB_bi1N().add(this );
117: }
118: }
119:
120: //////////////////////////////////////////////////////////////////////////
121: // relation BIDIRECTIONNELLE n-m /////////////////////
122: //////////////////////////////////////////////////////////////////////////
123:
124: /** Lien bidirectionnel n-m vers BBB.
125: * 1 objet AAA est en relation avec n objets BBB (n pouvant etre nul).
126: * 1 objet BBB est en relation avec m objets AAA (m pouvant etre nul).
127: *
128: * NB: Contrairement aux relation 1-n, on autorise ici qu'un objet soit en relation
129: * plusieurs fois avec le même objet AAA
130: *
131: * Les méthodes get (sans indice) et set sont nécessaires au mapping.
132: * Les autres méthodes sont là seulement pour faciliter l'utilisation de la relation.
133: * ATTENTION: Pour assurer la bidirection, il faut modifier les listes uniquement avec ces methodes.
134: * NB: si il n'y a pas d'objet en relation, la liste est vide mais n'est pas "null".
135: * Pour casser toutes les relations, faire setListe(new ArrayList()) ou emptyListe().
136: */
137: private List liste_objetsAAA_biNM = new ArrayList();
138:
139: /** Récupère l'objet en relation */
140: public List getListe_objetsAAA_biNM() {
141: return liste_objetsAAA_biNM;
142: }
143:
144: /** Définit l'objet en relation, et met à jour la relation inverse. */
145: public void setListe_objetsAAA_biNM(List L) {
146: List old = new ArrayList(liste_objetsAAA_biNM);
147: Iterator it1 = old.iterator();
148: while (it1.hasNext()) {
149: AAA O = (AAA) it1.next();
150: liste_objetsAAA_biNM.remove(O);
151: O.getListe_objetsBBB_biNM().remove(this );
152: }
153: Iterator it2 = L.iterator();
154: while (it2.hasNext()) {
155: AAA O = (AAA) it2.next();
156: liste_objetsAAA_biNM.add(O);
157: O.getListe_objetsBBB_biNM().add(this );
158: }
159: }
160:
161: /** Récupère le ième élément de la liste des objets en relation. */
162: public AAA getObjetAAA_biNM(int i) {
163: return (AAA) liste_objetsAAA_biNM.get(i);
164: }
165:
166: /** Ajoute un objet à la liste des objets en relation, et met à jour la relation inverse. */
167: public void addObjetAAA_biNM(AAA O) {
168: if (O == null)
169: return;
170: liste_objetsAAA_biNM.add(O);
171: O.getListe_objetsBBB_biNM().add(this );
172: }
173:
174: /** Enlève un élément de la liste des objets en relation, et met à jour la relation inverse. */
175: public void removeObjetAAA_biNM(AAA O) {
176: if (O == null)
177: return;
178: liste_objetsAAA_biNM.remove(O);
179: O.getListe_objetsBBB_biNM().remove(this );
180: }
181:
182: /** Vide la liste des objets en relation, et met à jour la relation inverse. */
183: public void emptyListe_objetsAAA_biNM() {
184: Iterator it = liste_objetsAAA_biNM.iterator();
185: while (it.hasNext()) {
186: AAA O = (AAA) it.next();
187: O.getListe_objetsBBB_biNM().remove(this );
188: }
189: liste_objetsAAA_biNM.clear();
190: }
191:
192: //////////////////////////////////////////////////////////////////////////
193: //////////////////////////////////////////////////////////////////////////
194: //////////////////////////////////////////////////////////////////////////
195: /// /////
196: /// LES EXEMPLES DE RELATIONS MONODIRECTIONNELLES /////
197: /// SONT CODES SUR AAA UNIQUEMENT /////
198: /// /////
199: //////////////////////////////////////////////////////////////////////////
200: //////////////////////////////////////////////////////////////////////////
201: //////////////////////////////////////////////////////////////////////////
202:
203: }
|