Révision 481

tmp/org.txm.analec.rcp/.classpath (revision 481)
1
<?xml version="1.0" encoding="UTF-8"?>
2
<classpath>
3
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
4
	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
5
		<accessrules>
6
			<accessrule kind="accessible" pattern="**"/>
7
		</accessrules>
8
	</classpathentry>
9
	<classpathentry kind="src" path="src"/>
10
	<classpathentry kind="lib" path="libs/itext-pdfa-5.5.8.jar"/>
11
	<classpathentry kind="lib" path="libs/itext-xtra-5.5.8.jar"/>
12
	<classpathentry kind="lib" path="libs/jcommon-1.0.23.jar"/>
13
	<classpathentry kind="lib" path="libs/jcommon-xml-1.0.23.jar"/>
14
	<classpathentry kind="lib" path="libs/xmlworker-5.5.8.jar"/>
15
	<classpathentry kind="lib" path="libs/itextpdf-5.5.4.jar"/>
16
	<classpathentry kind="lib" path="libs/glazedlists_java15-1.9.0.jar"/>
17
	<classpathentry exported="true" kind="con" path="GROOVY_DSL_SUPPORT"/>
18
	<classpathentry kind="output" path="bin"/>
19
</classpath>
0 20

  
tmp/org.txm.analec.rcp/META-INF/MANIFEST.MF (revision 481)
1
Manifest-Version: 1.0
2
Bundle-ManifestVersion: 2
3
Bundle-Name: %Bundle-Name
4
Bundle-SymbolicName: AnalecRCP;singleton:=true
5
Bundle-Version: 1.0.0.qualifier
6
Bundle-Activator: analecrcp.Activator
7
Require-Bundle: org.txm.concordance.core;bundle-version="1.0.0",
8
 org.txm.concordance.rcp;bundle-version="1.0.0",
9
 org.eclipse.ui,
10
 org.eclipse.core.runtime,
11
 org.eclipse.jface,
12
 org.eclipse.swt,
13
 org.eclipse.core.expressions;bundle-version="3.4.600",
14
 org.txm.libs.jfreechart;bundle-version="1.0.17",
15
 org.txm.rcp;bundle-version="0.7.8",
16
 org.txm.core;bundle-version="0.7.0",
17
 org.txm.synopticeditor.rcp;bundle-version="1.0.0",
18
 org.txm.searchengine.core;bundle-version="1.0.0",
19
 org.txm.searchengine.cqp.core;bundle-version="1.1.0",
20
 org.txm.statsengine.r.core;bundle-version="1.0.0",
21
 org.txm.statsengine.r.rcp;bundle-version="1.0.0"
22
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
23
Bundle-ActivationPolicy: lazy
24
Export-Package: JamaPlus,
25
 JamaPlus.util,
26
 analecrcp,
27
 org.txm.analec.commands,
28
 visuAnalec,
29
 visuAnalec.chaines,
30
 visuAnalec.donnees,
31
 visuAnalec.elements,
32
 visuAnalec.fichiers,
33
 visuAnalec.statistiques,
34
 visuAnalec.texte,
35
 visuAnalec.util,
36
 visuAnalec.vue
37
Bundle-Vendor: %Bundle-Vendor
0 38

  
tmp/org.txm.analec.rcp/.project (revision 481)
1
<?xml version="1.0" encoding="UTF-8"?>
2
<projectDescription>
3
	<name>org.txm.analec.rcp</name>
4
	<comment></comment>
5
	<projects>
6
	</projects>
7
	<buildSpec>
8
		<buildCommand>
9
			<name>org.eclipse.jdt.core.javabuilder</name>
10
			<arguments>
11
			</arguments>
12
		</buildCommand>
13
		<buildCommand>
14
			<name>org.eclipse.pde.ManifestBuilder</name>
15
			<arguments>
16
			</arguments>
17
		</buildCommand>
18
		<buildCommand>
19
			<name>org.eclipse.pde.SchemaBuilder</name>
20
			<arguments>
21
			</arguments>
22
		</buildCommand>
23
	</buildSpec>
24
	<natures>
25
		<nature>org.eclipse.jdt.groovy.core.groovyNature</nature>
26
		<nature>org.eclipse.pde.PluginNature</nature>
27
		<nature>org.eclipse.jdt.core.javanature</nature>
28
	</natures>
29
</projectDescription>
0 30

  
tmp/org.txm.analec.rcp/src/visuAnalec/PanneauCommandesRelations.java (revision 481)
1
/*
2
 * To change this template, choose Tools | Templates
3
 * and open the template in the editor.
4
 */
5
package visuAnalec;
6

  
7
import java.awt.*;
8
import java.awt.event.*;
9
import java.util.ArrayList;
10
import javax.swing.*;
11
import visuAnalec.Message.*;
12
import visuAnalec.PanneauEditeur.*;
13
import visuAnalec.elements.*;
14
import visuAnalec.texte.*;
15
import visuAnalec.texte.PanneauAffTexte.*;
16
import visuAnalec.texte.PanneauTexte.*;
17
import visuAnalec.util.*;
18
import visuAnalec.util.GMessages.*;
19
import visuAnalec.util.GVisu.*;
20
import visuAnalec.vue.*;
21

  
22
/**
23
 *
24
 * @author Bernard
25
 */
26
public class PanneauCommandesRelations extends PanneauCommandes implements ActionListener {
27
  private PanneauChamps panneauChamps;
28
  private TypeComboBox saisieTypeRelations;
29
  private ElementComboBox saisieRelation;
30
  private TypeComboBox saisieTypeElt1;
31
  private ElementComboBox saisieElt1;
32
  private TypeComboBox saisieTypeElt2;
33
  private ElementComboBox saisieElt2;
34
  private JButton creeRelation;
35
  private JButton supprimeRelation;
36
  private JButton creeUniteElt1;
37
  private JButton creeUniteElt2;
38
  private boolean uniteCreeElt1 = true; // pour la création d'unités en cours de route
39
  private int[] bornesSelectTexte;
40
  /*
41
  
42
   * CREATION PAR LE PANNEAU EDITEUR
43
   */
44
  PanneauCommandesRelations(Vue vue, PanneauAffTexte pTexte, PanneauChamps pChamps) {
45
    super(vue, pTexte);
46
    JToolBar barre1 = new JToolBar();
47
    barre1.setPreferredSize(new Dimension(0, 22));
48
    barre1.setAlignmentX(0.0f);
49
    //    barre1.setFloatable(false);
50
    add(barre1);
51
    JToolBar barre2 = new JToolBar();
52
//    barre2.setBackground(PanneauTexte.getCouleurFond2());
53
    barre2.setPreferredSize(new Dimension(0, 22));
54
    barre2.setAlignmentX(0.0f);
55
//     barre2.setFloatable(false);
56
    add(barre2);
57
    JToolBar barre3 = new JToolBar();
58
    barre3.setPreferredSize(new Dimension(0, 22));
59
    barre3.setAlignmentX(0.0f);
60
//    barre3.setBackground(PanneauTexte.getCouleurFond2());
61
//     barre3.setFloatable(false);
62
    add(barre3);
63

  
64
    panneauChamps = pChamps;
65
    saisieTypeRelations = new TypeComboBox(Relation.class);
66
    saisieTypeRelations.addActionListener(this);
67
    saisieRelation = new ElementComboBox();
68
    saisieRelation.addActionListener(this);
69
    saisieTypeElt1 = new TypeComboBox(Element.class);
70
    saisieTypeElt1.addActionListener(this);
71
    saisieElt1 = new ElementComboBox();
72
    saisieElt1.addActionListener(this);
73
    saisieTypeElt2 = new TypeComboBox(Element.class);
74
    saisieTypeElt2.addActionListener(this);
75
    saisieElt2 = new ElementComboBox();
76
    saisieElt2.addActionListener(this);
77
    creeRelation = new JButton(new GAction("Créer") {
78
      public void executer() {
79
        creerRelation();
80
      }
81
    });
82
    supprimeRelation = new JButton(new GAction("Supprimer") {
83
      public void executer() {
84
        supprimerRelation();
85
      }
86
    });
87
    creeUniteElt1 = new JButton(new GAction("Créer") {
88
      public void executer() {
89
        creerUniteElt1();
90
      }
91
    });
92
    creeUniteElt2 = new JButton(new GAction("Créer") {
93
      public void executer() {
94
        creerUniteElt2();
95
      }
96
    });
97
    barre1.addSeparator();
98
    barre1.add(new TitreBarre("  Relation :  ", PanneauTexte.getCouleurFond1()));
99
    barre1.addSeparator();
100
    barre1.add(saisieTypeRelations);
101
    barre1.add(saisieRelation);
102
    barre1.addSeparator();
103
    barre1.add(creeRelation);
104
    barre1.addSeparator();
105
    barre1.add(supprimeRelation);
106
    barre2.addSeparator();
107
    barre2.add(new TitreBarre("Elément 1 : ", PanneauTexte.getCouleurFond2()));
108
    barre2.addSeparator();
109
    barre2.add(saisieTypeElt1);
110
    barre2.add(saisieElt1);
111
    barre2.addSeparator();
112
    barre2.add(creeUniteElt1);
113
    barre3.addSeparator();
114
    barre3.add(new TitreBarre("Elément 2 : ", PanneauTexte.getCouleurFond3()));
115
    barre3.addSeparator();
116
    barre3.add(saisieTypeElt2);
117
    barre3.add(saisieElt2);
118
    barre3.addSeparator();
119
    barre3.add(creeUniteElt2);
120
  }
121

  
122
  /*
123
   * COMMANDES UTILISEES PAR LE PANNEAU EDITEUR
124
   */
125
  public void reinitialiser() {
126
    // typiquement, appelé par le panneau éditeur à la suite d'une modif de vue ou de structure
127
    saisieTypeRelations.removeActionListener(this);
128
    saisieTypeRelations.setModele(vue.getTypesRelationsAVoir());
129
    saisieTypeRelations.effSelection();
130
    saisieTypeRelations.addActionListener(this);
131
    saisieTypeElt1.removeActionListener(this);
132
    saisieTypeElt1.setModele(vue.getTypes(Unite.class), vue.getTypes(Relation.class), vue.getTypes(Schema.class));
133
    saisieTypeElt1.effSelection();
134
    saisieTypeElt1.addActionListener(this);
135
    saisieTypeElt2.removeActionListener(this);
136
    saisieTypeElt2.setModele(vue.getTypes(Unite.class), vue.getTypes(Relation.class), vue.getTypes(Schema.class));
137
    saisieTypeElt2.effSelection();
138
    saisieTypeElt2.addActionListener(this);
139
    initSaisieRelation();
140
    initSaisieElt1();
141
    initSaisieElt2();
142
    etatSelectRien();
143
    revalidate();
144
    repaint();
145
  }
146
  public void reafficher() {
147
    // potentiellement appelé par le panneau éditeur ?
148
    // appelé aussi par  traiterElementEvent
149
    if (saisieRelation.pasdeSelection()) {
150
      initSaisieRelation();
151
      if (saisieElt1.pasdeSelection()) {
152
        initSaisieElt1();
153
        if (saisieElt2.pasdeSelection()) {
154
          initSaisieElt2();
155
          etatSelectRien();
156
        } else {
157
          Element elt2Courant = saisieElt2.getSelection();
158
          initSaisieElt2(elt2Courant);
159
          etatSelectElt2(elt2Courant);
160
        }
161
      } else {
162
        Element elt1Courant = saisieElt1.getSelection();
163
        initSaisieElt1(elt1Courant);
164
        if (saisieElt2.pasdeSelection()) {
165
          initSaisieElt2();
166
          etatSelectElt1(elt1Courant);
167

  
168
        } else {
169
          Element elt2Courant = saisieElt2.getSelection();
170
          initSaisieElt2(elt2Courant);
171
          etatSelectElts(elt1Courant, elt2Courant);
172
        }
173
      }
174
    } else {
175
      Relation relCourant = (Relation) saisieRelation.getSelection();
176
      initSaisieRelation(relCourant);
177
      initSaisieElt1(relCourant.getElt1());
178
      initSaisieElt2(relCourant.getElt2());
179
      etatSelectRel(relCourant);
180
    }
181
  }
182
  public void elementSuivant(int sens) {
183
    if (sens>0) saisieRelation.gotoSuivant();
184
    else saisieRelation.gotoPrecedent();
185
  }
186
 public Element elementSelectionne() {
187
    if (saisieRelation.pasdeSelection()) return null;
188
    return saisieRelation.getSelection();
189
  }
190
  public void editerElement(Element elt) {
191
    // appelé par le panneauEditeur : elt est forcément une relation
192
    if (elt.getClass()!=Relation.class)
193
      throw new UnsupportedOperationException("Erreur : classe incorrecte");
194
    editerRelation((Relation) elt);
195
  }
196
  public void traiterElementEvent(ElementEvent evt) {
197
    switch (evt.getModif()) {
198
      case AJOUT_RELATION:
199
        Relation rel = (Relation) evt.getElement();
200
        editerRelation(rel);
201
        return;
202
      case SUP_RELATION:
203
        if (evt.getElement()==saisieRelation.getSelection()) {
204
          initSaisieRelation();
205
          initSaisieElt1();
206
          initSaisieElt2();
207
          etatSelectRien();
208
        } else {
209
          reafficher();
210
        }
211
        return;
212
      case AJOUT_UNITE:
213
        Unite unit = (Unite) evt.getElement();
214
        boolean chgEtat = false;
215
        if (!saisieTypeElt1.pasdeSelection()&&saisieTypeElt1.getClasseSelection()==Unite.class
216
                &&saisieTypeElt1.getTypeSelection().equals(unit.getType())) {
217
          initSaisieElt1(uniteCreeElt1 ? unit : null);
218
          chgEtat = true;
219
        }
220
        if (!saisieTypeElt2.pasdeSelection()&&saisieTypeElt2.getClasseSelection()==Unite.class
221
                &&saisieTypeElt2.getTypeSelection().equals(unit.getType())) {
222
          initSaisieElt2(uniteCreeElt1 ? null : unit);
223
          chgEtat = true;
224
        }
225
        if (chgEtat) {
226
          if (uniteCreeElt1) etatSelectElt1(unit);
227
          else etatSelectElt2(unit);
228
          uniteCreeElt1 = true;
229
        }
230
        return;
231
      case SUP_UNITE:
232
      case BORNES_UNITE:
233
      case AJOUT_SCHEMA:
234
      case MODIF_SCHEMA:
235
      case SUP_SCHEMA:
236
      case MODIF_VALEUR:
237
        reafficher();
238
        return;
239
      default:
240
        throw new UnsupportedOperationException("Cas "+evt.getModif()+" oublié dans un switch");
241
    }
242
  }
243
  public void editerRelation(Relation rel) {
244
    // appelé  par traiterElementEvent, 
245
    // et aussi directement par le panneau éditeur quand il est sollicité par d'autres fenêtres
246
    if (!rel.getType().equals(saisieTypeRelations.getTypeSelection())) {
247
      saisieTypeRelations.removeActionListener(this);
248
      saisieTypeRelations.setSelection(rel.getType());
249
      saisieTypeRelations.addActionListener(this);
250
    }
251
    initSaisieRelation(rel);
252
    saisieRelation.setSelection(rel);
253
  }
254
  public ArrayList<ElementMarque> trouverElementsVises(Unite uniteVisee, TypeMarquage marqueUniteVisee,
255
          boolean avecId) {
256
    ArrayList<ElementMarque> eltsMarques = new ArrayList<ElementMarque>();
257
    ArrayList<Element> eltsVises;
258
    Element eltVise;
259
    switch (marqueUniteVisee) {
260
      case FOND1:
261
        eltsVises = Element.trouverElementsParUniteSousjacente(saisieRelation.getElements(), uniteVisee);
262
        for (Element elt : eltsVises)
263
          eltsMarques.add(new ElementMarque(
264
                  elt, marqueUniteVisee, avecId ? saisieRelation.getIdElement(elt) : null));
265
        return eltsMarques;
266
      case FOND2:
267
        eltsVises = Element.trouverElementsParUniteSousjacente(saisieElt1.getElements(), uniteVisee);
268
        for (Element elt : eltsVises)
269
          eltsMarques.add(new ElementMarque(
270
                  elt, marqueUniteVisee, avecId ? saisieElt1.getIdElement(elt) : null));
271
        return eltsMarques;
272
      case FOND3:
273
        eltsVises = Element.trouverElementsParUniteSousjacente(saisieElt2.getElements(), uniteVisee);
274
        for (Element elt : eltsVises)
275
          eltsMarques.add(new ElementMarque(
276
                  elt, marqueUniteVisee, avecId ? saisieElt2.getIdElement(elt) : null));
277
        return eltsMarques;
278
      case SELECT2:
279
      case SELECT1_2:
280
        eltVise = saisieElt1.getSelection();
281
        eltsMarques.add(new ElementMarque(
282
                eltVise, marqueUniteVisee, avecId ? saisieElt1.getIdElement(eltVise) : null));
283
        return eltsMarques;
284
      case SELECT3:
285
      case SELECT1_3:
286
        eltVise = saisieElt2.getSelection();
287
        eltsMarques.add(new ElementMarque(
288
                eltVise, marqueUniteVisee, avecId ? saisieElt2.getIdElement(eltVise) : null));
289
        return eltsMarques;
290
      default:
291
        throw new UnsupportedOperationException("Marquage non prévu : "+marqueUniteVisee);
292

  
293
    }
294
  }
295

  
296
  /*
297
   * ACTIONS DE L'UTILISATEUR : CHANGEMENTS D'ETAT
298
   */
299
  public void actionPerformed(ActionEvent evt) {
300
    try {
301
      if (evt.getSource()==saisieTypeRelations) {
302
        initSaisieRelation();
303
        if (saisieElt1.pasdeSelection()) {
304
          if (saisieElt2.pasdeSelection()) etatSelectRien();
305
          else etatSelectElt2(saisieElt2.getSelection());
306
        } else {
307
          if (saisieElt2.pasdeSelection())
308
            etatSelectElt1(saisieElt1.getSelection());
309
          else
310
            checkEtatSelectElts(saisieElt1.getSelection(), saisieElt2.getSelection());
311
        }
312
        return;
313
      }
314
      if (evt.getSource()==saisieTypeElt1) {
315
        forceEffSelectRel();
316
        initSaisieElt1();
317
        if (saisieElt2.pasdeSelection()) etatSelectRien();
318
        else etatSelectElt2(saisieElt2.getSelection());
319
        return;
320
      }
321
      if (evt.getSource()==saisieTypeElt2) {
322
        forceEffSelectRel();
323
        initSaisieElt2();
324
        if (saisieElt1.pasdeSelection()) etatSelectRien();
325
        else etatSelectElt1(saisieElt1.getSelection());
326
        return;
327
      }
328
      if (evt.getSource()==saisieRelation) {
329
        if (saisieRelation.pasdeSelection()) {
330
          if (saisieElt1.pasdeSelection()) {
331
            if (saisieElt2.pasdeSelection()) etatSelectRien();
332
            else etatSelectElt2(saisieElt2.getSelection());
333
          } else {
334
            if (saisieElt2.pasdeSelection())
335
              etatSelectElt1(saisieElt1.getSelection());
336
            else
337
              etatSelectElts(saisieElt1.getSelection(), saisieElt2.getSelection());
338
          }
339
        } else {
340
          forceEtatSelectRel((Relation) saisieRelation.getSelection());
341
        }
342
        return;
343
      }
344
      if (evt.getSource()==saisieElt1) {
345
        if (!saisieRelation.pasdeSelection()) {
346
          saisieRelation.removeActionListener(this);
347
          saisieRelation.effSelection();
348
          saisieRelation.addActionListener(this);
349
          saisieElt2.removeActionListener(this);
350
          saisieElt2.effSelection();
351
          saisieElt2.addActionListener(this);
352
        }
353
        if (saisieElt1.pasdeSelection()) {
354
          if (saisieElt2.pasdeSelection()) etatSelectRien();
355
          else etatSelectElt2(saisieElt2.getSelection());
356
        } else {
357
          if (saisieElt2.pasdeSelection())
358
            etatSelectElt1(saisieElt1.getSelection());
359
          else
360
            checkEtatSelectElts(saisieElt1.getSelection(), saisieElt2.getSelection());
361
        }
362
        return;
363
      }
364
      if (evt.getSource()==saisieElt2) {
365
        if (!saisieRelation.pasdeSelection()) {
366
          saisieRelation.removeActionListener(this);
367
          saisieRelation.effSelection();
368
          saisieRelation.addActionListener(this);
369
          saisieElt1.removeActionListener(this);
370
          saisieElt1.effSelection();
371
          saisieElt1.addActionListener(this);
372
        }
373
        if (saisieElt2.pasdeSelection()) {
374
          if (saisieElt1.pasdeSelection()) etatSelectRien();
375
          else etatSelectElt1(saisieElt1.getSelection());
376
        } else {
377
          if (saisieElt1.pasdeSelection())
378
            etatSelectElt2(saisieElt2.getSelection());
379
          else
380
            checkEtatSelectElts(saisieElt1.getSelection(), saisieElt2.getSelection());
381
        }
382
        return;
383
      }
384
      throw new UnsupportedOperationException("Evénement non prévu : "+evt.paramString());
385
    } catch (Throwable ex) {
386
      GMessages.erreurFatale(ex);
387
    }
388
  }
389
  @Override
390
  public void traiterSourisEvent(SourisEvent evt) {
391
    switch (evt.getTypeEvent()) {
392
      case SELECT_RIEN:
393
        saisieElt1.removeActionListener(this);
394
        saisieElt1.effSelection();
395
        saisieElt1.addActionListener(this);
396
        saisieElt2.removeActionListener(this);
397
        saisieElt2.effSelection();
398
        saisieElt2.addActionListener(this);
399
        saisieRelation.removeActionListener(this);
400
        saisieRelation.effSelection();
401
        saisieRelation.addActionListener(this);
402
        etatSelectRien();
403
        return;
404
      case SELECT_ELEMENT:
405
        switch (evt.getMarquageElementVise()) {
406
          case FOND1:
407
            saisieRelation.setSelection(evt.getElementVise());
408
            return;
409
          case FOND2:
410
            saisieElt1.setSelection(evt.getElementVise());
411
            return;
412
          case FOND3:
413
            saisieElt2.setSelection(evt.getElementVise());
414
            return;
415
          case SELECT2:
416
          case SELECT1_2:
417
            forceEffSelectElt2();
418
            return;
419
          case SELECT3:
420
          case SELECT1_3:
421
            forceEffSelectElt1();
422
            return;
423
        }
424
        return;
425
      case SELECT_TEXTE:
426
        if (!saisieElt1.pasdeSelection()&&!saisieElt2.pasdeSelection()) {
427
          saisieElt1.removeActionListener(this);
428
          saisieElt1.effSelection();
429
          saisieElt1.addActionListener(this);
430
          saisieElt2.removeActionListener(this);
431
          saisieElt2.effSelection();
432
          saisieElt2.addActionListener(this);
433
          saisieRelation.removeActionListener(this);
434
          saisieRelation.effSelection();
435
          saisieRelation.addActionListener(this);
436
        }
437
        bornesSelectTexte = evt.getBornesSelectionTexte();
438
        etatSelectTexte();
439
        return;
440
    }
441
    throw new UnsupportedOperationException("Evénement non prévu : "+evt.getTypeEvent());
442
  }
443
  /*
444
   * ACTIONS DE L'UTILISATEUR : BOUTONS
445
   */
446
  private void creerRelation() {
447
    vue.getCorpus().addRelationSaisie((String) saisieTypeRelations.getTypeSelection(),
448
            saisieElt1.getSelection(), saisieElt2.getSelection());
449
  }
450
  private void supprimerRelation() {
451
    if (!GMessages.confirmationAction("Supprimer la relation sélectionnée ?"))
452
      return;
453
    vue.getCorpus().supRelation((Relation) saisieRelation.getSelection());
454
  }
455
  private void creerUniteElt1() {
456
    if (vue.getCorpus().checkPresenceUnite(saisieTypeElt1.getTypeSelection(), bornesSelectTexte[0], bornesSelectTexte[1])
457
            &&!GMessages.confirmationAction("Dupliquer cette unité  ?")) return;
458
    uniteCreeElt1 = true;
459
    vue.getCorpus().addUniteSaisie(saisieTypeElt1.getTypeSelection(), bornesSelectTexte[0], bornesSelectTexte[1]);
460
  }
461
  private void creerUniteElt2() {
462
    if (vue.getCorpus().checkPresenceUnite(saisieTypeElt2.getTypeSelection(), bornesSelectTexte[0], bornesSelectTexte[1])
463
            &&!GMessages.confirmationAction("Dupliquer cette unité  ?")) return;
464
    uniteCreeElt1 = false;
465
    vue.getCorpus().addUniteSaisie(saisieTypeElt2.getTypeSelection(), bornesSelectTexte[0], bornesSelectTexte[1]);
466
  }
467

  
468
  /* 
469
   * GESTION INTERNE
470
   */
471
  private void etatSelectRien() {   // rien n'est sélectionné
472
    if (saisieTypeRelations.pasdeSelection()) {
473
      if (saisieTypeElt1.pasdeSelection()) {
474
        if (saisieTypeElt2.pasdeSelection()) panneauTexte.pasDeMarquage();
475
        else
476
          panneauTexte.saisir(null,
477
                  Element.getUnitesSousjacentes(saisieElt2.getElements()), TypeMarquage.FOND3);
478
      } else {
479
        if (saisieTypeElt2.pasdeSelection())
480
          panneauTexte.saisir(null,
481
                  Element.getUnitesSousjacentes(saisieElt1.getElements()), TypeMarquage.FOND2);
482
        else
483
          panneauTexte.saisir(null,
484
                  Element.getUnitesSousjacentes(saisieElt1.getElements()), TypeMarquage.FOND2,
485
                  Element.getUnitesSousjacentes(saisieElt2.getElements()), TypeMarquage.FOND3);
486
      }
487
    } else {
488
      if (saisieTypeElt1.pasdeSelection()) {
489
        if (saisieTypeElt2.pasdeSelection())
490
          panneauTexte.saisir(null,
491
                  Element.getUnitesSousjacentes(saisieRelation.getElements()), TypeMarquage.FOND1);
492
        else
493
          panneauTexte.saisir(null,
494
                  Element.getUnitesSousjacentes(filtreElt2((Relation[]) saisieRelation.getElements())), TypeMarquage.FOND1,
495
                  Element.getUnitesSousjacentes(saisieElt2.getElements()), TypeMarquage.FOND3);
496
      } else {
497
        if (saisieTypeElt2.pasdeSelection())
498
          panneauTexte.saisir(null,
499
                  Element.getUnitesSousjacentes(filtreElt1((Relation[]) saisieRelation.getElements())), TypeMarquage.FOND1,
500
                  Element.getUnitesSousjacentes(saisieElt1.getElements()), TypeMarquage.FOND2);
501
        else
502
          panneauTexte.saisir(null,
503
                  Element.getUnitesSousjacentes(filtreElts((Relation[]) saisieRelation.getElements())), TypeMarquage.FOND1,
504
                  Element.getUnitesSousjacentes(saisieElt1.getElements()), TypeMarquage.FOND2,
505
                  Element.getUnitesSousjacentes(saisieElt2.getElements()), TypeMarquage.FOND3);
506
      }
507
    }
508
    panneauChamps.effacer();
509
    creeRelation.setEnabled(false);
510
    supprimeRelation.setEnabled(false);
511
    creeUniteElt1.setEnabled(false);
512
    creeUniteElt2.setEnabled(false);
513
  }
514
  private void etatSelectTexte() {   // du texte est sélectionné
515
    if (saisieElt1.pasdeSelection()) {
516
      if (saisieElt2.pasdeSelection()) panneauTexte.pasDeMarquage();
517
      else
518
        panneauTexte.saisir(null,
519
                saisieElt2.getSelection().getUnitesSousjacentes(), TypeMarquage.SELECT3);
520
    } else {
521
      if (saisieElt2.pasdeSelection())
522
        panneauTexte.saisir(null,
523
                saisieElt1.getSelection().getUnitesSousjacentes(), TypeMarquage.SELECT2);
524
      else // au moins un des 2 elt n'est pas sélectionné
525
        throw new UnsupportedOperationException("Cas non prévu");
526
    }
527
    panneauChamps.effacer();
528
    creeRelation.setEnabled(false);
529
    supprimeRelation.setEnabled(false);
530
    if (!saisieTypeElt1.pasdeSelection()&&saisieTypeElt1.getClasseSelection()==Unite.class
531
            &&saisieElt1.pasdeSelection())
532
      creeUniteElt1.setEnabled(true);
533
    if (!saisieTypeElt2.pasdeSelection()&&saisieTypeElt2.getClasseSelection()==Unite.class
534
            &&saisieElt2.pasdeSelection())
535
      creeUniteElt2.setEnabled(true);
536
  }
537
  private void etatSelectElt1(Element elt1) { // seul Elt1 a été choisi
538
    if (saisieTypeElt2.pasdeSelection()) {
539
      if (saisieTypeRelations.pasdeSelection())
540
        panneauTexte.saisir(elt1.getUnite0(), elt1.getUnitesSousjacentes(), TypeMarquage.SELECT2);
541
      else
542
        panneauTexte.saisir(elt1.getUnite0(), elt1.getUnitesSousjacentes(), TypeMarquage.SELECT2,
543
                Element.getUnitesSousjacentes(filtreElt1((Relation[]) saisieRelation.getElements(), elt1)),
544
                TypeMarquage.FOND1);
545
    } else {
546
      if (saisieTypeRelations.pasdeSelection())
547
        panneauTexte.saisir(elt1.getUnite0(), elt1.getUnitesSousjacentes(), TypeMarquage.SELECT2,
548
                Element.getUnitesSousjacentes(saisieElt2.getElements()), TypeMarquage.FOND3);
549
      else
550
        panneauTexte.saisir(elt1.getUnite0(), elt1.getUnitesSousjacentes(), TypeMarquage.SELECT2,
551
                Element.getUnitesSousjacentes(filtreElt1(filtreElt2((Relation[]) saisieRelation.getElements()), elt1)),
552
                TypeMarquage.FOND1,
553
                Element.getUnitesSousjacentes(saisieElt2.getElements()), TypeMarquage.FOND3);
554
    }
555
    panneauChamps.afficher(elt1);
556
    creeRelation.setEnabled(false);
557
    supprimeRelation.setEnabled(false);
558
    creeUniteElt1.setEnabled(false);
559
    creeUniteElt2.setEnabled(false);
560
  }
561
  private void etatSelectElt2(Element elt2) {  // seul Elt2 a été choisi
562
    if (saisieTypeElt1.pasdeSelection()) {
563
      if (saisieTypeRelations.pasdeSelection())
564
        panneauTexte.saisir(elt2.getUnite0(), elt2.getUnitesSousjacentes(), TypeMarquage.SELECT3);
565
      else
566
        panneauTexte.saisir(elt2.getUnite0(), elt2.getUnitesSousjacentes(), TypeMarquage.SELECT3,
567
                Element.getUnitesSousjacentes(filtreElt2((Relation[]) saisieRelation.getElements(), elt2)),
568
                TypeMarquage.FOND1);
569
    } else {
570
      if (saisieTypeRelations.pasdeSelection())
571
        panneauTexte.saisir(elt2.getUnite0(), elt2.getUnitesSousjacentes(), TypeMarquage.SELECT3,
572
                Element.getUnitesSousjacentes(saisieElt1.getElements()), TypeMarquage.FOND2);
573
      else
574
        panneauTexte.saisir(elt2.getUnite0(), elt2.getUnitesSousjacentes(), TypeMarquage.SELECT3,
575
                Element.getUnitesSousjacentes(filtreElt2(filtreElt1((Relation[]) saisieRelation.getElements()), elt2)),
576
                TypeMarquage.FOND1,
577
                Element.getUnitesSousjacentes(saisieElt1.getElements()), TypeMarquage.FOND2);
578
    }
579
    panneauChamps.afficher(elt2);
580
    creeRelation.setEnabled(false);
581
    supprimeRelation.setEnabled(false);
582
    creeUniteElt1.setEnabled(false);
583
    creeUniteElt2.setEnabled(false);
584
  }
585
  private void etatSelectElts(Element elt1, Element elt2) { // Elt1 et Elt2 ont été choisis et ils ne forment pas encore de relation
586
    panneauTexte.saisir(elt1.getUnite0(), elt1.getUnitesSousjacentes(), TypeMarquage.SELECT2,
587
            elt2.getUnitesSousjacentes(), TypeMarquage.SELECT3);
588
    panneauChamps.effacer();
589
    if (!saisieTypeRelations.pasdeSelection()) {
590
      creeRelation.setEnabled(true);
591
//      Boutons.setDefaut(creeRelation, true);
592
    }
593
    supprimeRelation.setEnabled(false);
594
    creeUniteElt1.setEnabled(false);
595
    creeUniteElt2.setEnabled(false);
596
  }
597
  private void etatSelectRel(Relation rel) {  // une relation est sélectionnée
598
    panneauTexte.saisir(rel.getElt1().getUnite0(),
599
            rel.getElt1().getUnitesSousjacentes(), TypeMarquage.SELECT1_2,
600
            rel.getElt2().getUnitesSousjacentes(), TypeMarquage.SELECT1_3);
601
//            Element.getUnitesSousjacentes(saisieElt1.getElements()), TypeMarquage.FOND2,
602
//            Element.getUnitesSousjacentes(saisieElt2.getElements()), TypeMarquage.FOND3);
603
    panneauChamps.afficher(rel);
604
    creeRelation.setEnabled(false);
605
    supprimeRelation.setEnabled(true);
606
    creeUniteElt1.setEnabled(false);
607
    creeUniteElt2.setEnabled(false);
608
  }
609
  private Relation[] filtreElt1(Relation[] relations) {
610
    Class classe = saisieTypeElt1.getClasseSelection();
611
    String type = saisieTypeElt1.getTypeSelection();
612
    ArrayList<Integer> indsAOter = new ArrayList<Integer>();
613
    for (int i = 0; i<relations.length; i++) {
614
      Element elt1 = relations[i].getElt1();
615
      if (elt1.getClass()!=classe||!elt1.getType().equals(type))
616
        indsAOter.add(i);
617
    }
618
    return Tableaux.oterRelations(relations, indsAOter);
619
  }
620
  private Relation[] filtreElt1(Relation[] relations, Element elt1) {
621
    ArrayList<Relation> rels = new ArrayList<Relation>();
622
    for (Relation rel : relations) if (elt1==rel.getElt1()) rels.add(rel);
623
    return rels.toArray(new Relation[0]);
624
  }
625
  private Relation[] filtreElt2(Relation[] relations) {
626
    Class classe = saisieTypeElt2.getClasseSelection();
627
    String type = saisieTypeElt2.getTypeSelection();
628
    ArrayList<Integer> indsAOter = new ArrayList<Integer>();
629
    for (int i = 0; i<relations.length; i++) {
630
      Element elt2 = relations[i].getElt2();
631
      if (elt2.getClass()!=classe||!elt2.getType().equals(type))
632
        indsAOter.add(i);
633
    }
634
    return Tableaux.oterRelations(relations, indsAOter);
635
  }
636
  private Relation[] filtreElt2(Relation[] relations, Element elt2) {
637
    ArrayList<Relation> rels = new ArrayList<Relation>();
638
    for (Relation rel : relations) if (elt2==rel.getElt2()) rels.add(rel);
639
    return rels.toArray(new Relation[0]);
640
  }
641
  private Relation[] filtreElts(Relation[] relations) {
642
    Class classe1 = saisieTypeElt1.getClasseSelection();
643
    String type1 = saisieTypeElt1.getTypeSelection();
644
    Class classe2 = saisieTypeElt2.getClasseSelection();
645
    String type2 = saisieTypeElt2.getTypeSelection();
646
    ArrayList<Integer> indsAOter = new ArrayList<Integer>();
647
    for (int i = 0; i<relations.length; i++) {
648
      Element elt1 = relations[i].getElt1();
649
      Element elt2 = relations[i].getElt2();
650
      if (elt1.getClass()!=classe1||!elt1.getType().equals(type1)
651
              ||elt2.getClass()!=classe2||!elt2.getType().equals(type2))
652
        indsAOter.add(i);
653
    }
654
    return Tableaux.oterRelations(relations, indsAOter);
655
  }
656
  private void checkEtatSelectElts(Element elt1, Element elt2) {
657
    if (!saisieTypeRelations.pasdeSelection())
658
      for (Relation rel : (Relation[]) saisieRelation.getElements()) {
659
        if (rel.getElt1()==elt1&&rel.getElt2()==elt2) {
660
          saisieRelation.setSelection(rel);
661
          return;
662
        }
663
      }
664
    etatSelectElts(elt1, elt2);
665
  }
666
  private void forceEtatSelectRel(Relation rel) {
667
    if (saisieTypeElt1.pasdeSelection()||saisieTypeElt1.getClasseSelection()!=rel.getElt1().getClass()
668
            ||!saisieTypeElt1.getTypeSelection().equals(rel.getElt1().getType())) {
669
      saisieTypeElt1.removeActionListener(this);
670
      saisieTypeElt1.setSelection(rel.getElt1().getClass(), rel.getElt1().getType());
671
      saisieTypeElt1.addActionListener(this);
672
    }
673
    initSaisieElt1(rel.getElt1());
674
    if (saisieTypeElt2.pasdeSelection()||saisieTypeElt2.getClasseSelection()!=rel.getElt2().getClass()
675
            ||!saisieTypeElt2.getTypeSelection().equals(rel.getElt2().getType())) {
676
      saisieTypeElt2.removeActionListener(this);
677
      saisieTypeElt2.setSelection(rel.getElt2().getClass(), rel.getElt2().getType());
678
      saisieTypeElt2.addActionListener(this);
679
    }
680
    initSaisieElt2(rel.getElt2());
681
    etatSelectRel(rel);
682
  }
683
  private void forceEffSelectElt1() {
684
    if (saisieElt1.pasdeSelection()) return;
685
    if (!saisieRelation.pasdeSelection()) {
686
      saisieRelation.removeActionListener(this);
687
      saisieRelation.effSelection();
688
      saisieRelation.addActionListener(this);
689
    }
690
    saisieElt1.effSelection();
691
  }
692
  private void forceEffSelectElt2() {
693
    if (saisieElt2.pasdeSelection()) return;
694
    if (!saisieRelation.pasdeSelection()) {
695
      saisieRelation.removeActionListener(this);
696
      saisieRelation.effSelection();
697
      saisieRelation.addActionListener(this);
698
    }
699
    saisieElt2.effSelection();
700
  }
701
  private void forceEffSelectRel() {
702
    if (saisieRelation.pasdeSelection()) return;
703
    saisieRelation.removeActionListener(this);
704
    saisieRelation.effSelection();
705
    saisieRelation.addActionListener(this);
706
  }
707
  private void initSaisieRelation(Relation rel) {
708
    saisieRelation.removeActionListener(this);
709
    if (saisieTypeRelations.pasdeSelection()) saisieRelation.setModeleVide();
710
    else {
711
      String type0 = saisieTypeRelations.getTypeSelection();
712
      Relation[] relations = vue.getRelationsAVoir(type0);
713
      saisieRelation.setModele(relations, vue.getIdRelations(type0, relations));
714
    }
715
    if (rel==null) saisieRelation.effSelection();
716
    else saisieRelation.setSelection(rel);
717
    saisieRelation.addActionListener(this);
718
    saisieRelation.revalidate();
719
  }
720
  private void initSaisieRelation() {
721
    initSaisieRelation(null);
722
  }
723
  private void initSaisieElt1(Element elt1) {
724
    saisieElt1.removeActionListener(this);
725
    if (saisieTypeElt1.pasdeSelection()) saisieElt1.setModeleVide();
726
    else {
727
      Class<? extends Element> classe = saisieTypeElt1.getClasseSelection();
728
      String type = saisieTypeElt1.getTypeSelection();
729
      saisieElt1.setModele(vue.getElements(classe, type), vue.getIdElements(classe, type));
730
    }
731
    if (elt1==null) saisieElt1.effSelection();
732
    else saisieElt1.setSelection(elt1);
733
    saisieElt1.addActionListener(this);
734
    saisieElt1.revalidate();
735
  }
736
  private void initSaisieElt1() {
737
    initSaisieElt1(null);
738
  }
739
  private void initSaisieElt2(Element elt2) {
740
    saisieElt2.removeActionListener(this);
741
    if (saisieTypeElt2.pasdeSelection()) saisieElt2.setModeleVide();
742
    else {
743
      Class<? extends Element> classe = saisieTypeElt2.getClasseSelection();
744
      String type = saisieTypeElt2.getTypeSelection();
745
      saisieElt2.setModele(vue.getElements(classe, type), vue.getIdElements(classe, type));
746
    }
747

  
748
    if (elt2==null) saisieElt2.effSelection();
749
    else saisieElt2.setSelection(elt2);
750
    saisieElt2.addActionListener(this);
751
    saisieElt2.revalidate();
752
  }
753
  private void initSaisieElt2() {
754
    initSaisieElt2(null);
755
  }
756
}
0 757

  
tmp/org.txm.analec.rcp/src/visuAnalec/vue/Vue.java (revision 481)
1
/*
2
 * To change this template, choose Tools | Templates
3
 * and open the template in the editor.
4
 */
5
package visuAnalec.vue;
6

  
7
import JamaPlus.*;
8
import java.io.*;
9
import java.util.*;
10
import java.util.ArrayList;
11
import javax.swing.text.SimpleAttributeSet;
12
import visuAnalec.*;
13
import visuAnalec.util.*;
14
import visuAnalec.Message.*;
15
import visuAnalec.elements.*;
16
import visuAnalec.donnees.*;
17
import visuAnalec.donnees.Corpus.*;
18
import visuAnalec.texte.PanneauTexte;
19
import visuAnalec.texte.PanneauTexte.*;
20

  
21
/**
22
 *
23
 * @author Bernard
24
 */
25
public class Vue implements CorpusListener {
26
  public static interface VueListener extends EventListener {
27
    void traiterEvent(Message e);     // relaie les messages de Corpus + envoie ses propres messages (VueEvent)
28
  }
29

  
30
  public static class Adresse implements Serializable {
31
    ArrayList<Jalon> chemin;
32
    String prop;
33
    Adresse(Adresse adresse, String prop) {
34
      this.prop = prop;
35
      this.chemin = new ArrayList<Jalon>(adresse.chemin);
36
    }
37
    Adresse(Adresse adresse, Jalon jalon) {
38
      this.prop = null;
39
      ArrayList<Jalon> chemin1 = new ArrayList<Jalon>(adresse.chemin);
40
      chemin1.add(jalon);
41
      this.chemin = chemin1;
42
    }
43
    Adresse(Adresse adresse) {
44
      this.prop = adresse.prop;
45
      this.chemin = new ArrayList<Jalon>();
46
      for (Jalon jalon : adresse.chemin) this.chemin.add(new Jalon(jalon));
47
    }
48
    Adresse(Jalon jalon, String prop) {
49
      this.prop = prop;
50
      chemin = new ArrayList<Jalon>(Arrays.asList(jalon));
51
    }
52
    Adresse(Jalon jalon) {
53
      this.prop = null;
54
      chemin = new ArrayList<Jalon>(Arrays.asList(jalon));
55
    }
56
    int getLongueur() {
57
      return chemin.size();
58
    }
59
    Jalon getLastJalon() {
60
      return chemin.get(chemin.size()-1);
61
    }
62
    void renommer(Class<? extends Element> classe, String oldType, String newType) {
63
      for (Jalon jalon : chemin)
64
        if (jalon.classe==classe&&jalon.type.equals(oldType))
65
          jalon.type = newType;
66
    }
67
    boolean contient(Class<? extends Element> classe, String type) {
68
      for (Jalon jalon : chemin) {
69
        if (jalon.classe==classe&&jalon.type.equals(type)) return true;
70
      }
71
      return false;
72
    }
73
    @Override
74
    public String toString() {
75
      String nom = "";
76
      for (Jalon jalon : chemin) {
77
        nom += jalon;
78
      }
79
      nom += ": "+prop;
80
      return nom;
81
    }
82
  }
83

  
84
  public static class Jalon implements Serializable {
85
    public enum Origine {
86
      ELT_0, ELT_1, ELT_2, REL_SORTANTE, REL_ENTRANTE, SCH_CONTENANT
87
    }
88
    /**
89
     * L'origine d'un jalon indique d'où ce jalon provient :
90
     * ELT_0 est  un jalon de classe quelconque qui est toujours le premier jalon d'une adresse complète. 
91
     * ELT_1 et ELT_2 sont des jalons de classe quelconque qui proviennent d'un jalon précédent de classe Relation  
92
     * REL_S et REL_E sont des jalons de classe Relation qui proviennent d'un jalon précédent de classe quelconque
93
     * SCH_C est un jalon de classe Schema qui provient d'un jalon précédent de classe quelconque
94
     */
95
    public Origine origine;
96
    public Class<? extends Element> classe;
97
    public String type;
98
    Jalon(Origine origine, Class<? extends Element> classe, String type) {
99
      this.classe = classe;
100
      this.origine = origine;
101
      this.type = type;
102
    }
103
    Jalon(Jalon jalon) {
104
      this.classe = jalon.classe;
105
      this.origine = jalon.origine;
106
      this.type = jalon.type;
107
    }
108
    @Override
109
    public String toString() {
110
      switch (origine) {
111
        case SCH_CONTENANT:
112
          return "{"+type;
113
        case REL_ENTRANTE:
114
          return "<"+type+"<";
115
        case REL_SORTANTE:
116
          return ">"+type+">";
117
        case ELT_0:
118
          return type;
119
        case ELT_1:
120
          return type;
121
        case ELT_2:
122
          return type;
123
        default:
124
          return "ERREUR!!";
125
      }
126
    }
127
  }
128
  /** 
129
   * Champs de la classe Vue :
130
   * Données spécifiant la vue: 
131
   *   - typesA voir, champs, adresses, modifiables
132
   *   - champsId
133
   * (ce sont les seuls champs à sauvegarder et à recharger) 
134
   * Le champ unitesAVoir est un raccourci pour éviter de retrier chaque fois les données correspondantes de Corpus
135
   */
136
  private ArrayList<VueListener> listeCorrespondants = new ArrayList<VueListener>();
137
  private Corpus corpus;
138
  private boolean modifiee = false;
139
  ;
140
  // types d'éléments à voir pour chaque classe
141
  private HashMap<Class<? extends Element>, String[]> typesAVoir =
142
          new HashMap<Class<? extends Element>, String[]>();
143
  // champs en ordre (niveau et position) pour chaque type d'éléments à voir pour chaque classe 
144
  private HashMap<Class<? extends Element>, HashMap<String, String[][]>> champspos =
145
          new HashMap<Class<? extends Element>, HashMap<String, String[][]>>();
146
  // adresse pour chaque champ pour chaque  type d'élément à voir pour chaque classe
147
  private HashMap<Class<? extends Element>, HashMap<String, HashMap<String, Adresse>>> adresses =
148
          new HashMap<Class<? extends Element>, HashMap<String, HashMap<String, Adresse>>>();
149
  // modifiabilité pour chaque champ pour chaque  type d'élément à voir pour chaque classe
150
  private HashMap<Class<? extends Element>, HashMap<String, HashMap<String, Boolean>>> modifiables =
151
          new HashMap<Class<? extends Element>, HashMap<String, HashMap<String, Boolean>>>();
152
  // champ choisi comme identifiant (s'il existe) pour chaque type de chaque classe
153
  private HashMap<Class<? extends Element>, HashMap<String, String>> champsId =
154
          new HashMap<Class<? extends Element>, HashMap<String, String>>();
155
// style pour tout le texte
156
  private SimpleAttributeSet styleTexte;
157
  // style (s'il existe) pour chaque type de chaque classe
158
  private HashMap<Class<? extends Element>, HashMap<String, SimpleAttributeSet>> stylesElements =
159
          new HashMap<Class<? extends Element>, HashMap<String, SimpleAttributeSet>>();
160
  // style (s'il existe) pour chaque valeur de chaque champ de chaque type de chaque classe
161
  private HashMap<Class<? extends Element>, HashMap<String, HashMap<String, HashMap<String, SimpleAttributeSet>>>> stylesValeursElements =
162
          new HashMap<Class<? extends Element>, HashMap<String, HashMap<String, HashMap<String, SimpleAttributeSet>>>>();
163
  // unites par type d'unites à voir
164
  private HashMap<String, Unite[]> unitesAVoir = new HashMap<String, Unite[]>();
165
  /* Constructeur de la classe Vue */
166
  @SuppressWarnings("unchecked")
167
  public Vue(Corpus corpus) {
168
    this.corpus = corpus;
169
    corpus.addEventListener(this);
170
    for (Class<? extends Element> classe : new Class[]{Unite.class, Relation.class, Schema.class}) {
171
      typesAVoir.put(classe, new String[0]);
172
      champspos.put(classe, new HashMap<String, String[][]>());
173
      adresses.put(classe, new HashMap<String, HashMap<String, Adresse>>());
174
      modifiables.put(classe, new HashMap<String, HashMap<String, Boolean>>());
175
      champsId.put(classe, new HashMap<String, String>());
176
      stylesElements.put(classe, new HashMap<String, SimpleAttributeSet>());
177
      stylesValeursElements.put(classe, new HashMap<String, HashMap<String, HashMap<String, SimpleAttributeSet>>>());
178
    }
179
    this.styleTexte = new SimpleAttributeSet(PanneauTexte.STANDARD_DEFAUT);
180
  }
181
  public void addEventListener(VueListener correspondant) {
182
    listeCorrespondants.add(correspondant);
183
  }
184
  public void removeEventListener(VueListener correspondant) {
185
    listeCorrespondants.remove(correspondant);
186
  }
187
  private void fireMessage(Message evt) {
188
    for (Object corresp : listeCorrespondants.toArray()) {
189
      ((VueListener) corresp).traiterEvent(evt);
190
    }
191
  }
192
  public boolean isModifiee() {
193
    return modifiee;
194
  }
195
  public void ecrireJava(ObjectOutputStream oos) throws IOException {
196
    oos.writeObject(typesAVoir);
197
    oos.writeObject(champspos);
198
    oos.writeObject(adresses);
199
    oos.writeObject(modifiables);
200
    oos.writeObject(champsId);
201
    oos.writeObject(styleTexte);
202
    oos.writeObject(stylesElements);
203
    oos.writeObject(stylesValeursElements);
204
    modifiee = false;
205
  }
206
  @SuppressWarnings("unchecked")
207
  public boolean lireJava(ObjectInputStream ois) throws IOException, ClassNotFoundException, ClassCastException {
208
    HashMap<Class<? extends Element>, String[]> typesAVoirLus =
209
            (HashMap<Class<? extends Element>, String[]>) ois.readObject();
210
    HashMap<Class<? extends Element>, HashMap<String, String[][]>> champsposLus =
211
            (HashMap<Class<? extends Element>, HashMap<String, String[][]>>) ois.readObject();
212
    HashMap<Class<? extends Element>, HashMap<String, HashMap<String, Adresse>>> adressesLues =
213
            (HashMap<Class<? extends Element>, HashMap<String, HashMap<String, Adresse>>>) ois.readObject();
214
    HashMap<Class<? extends Element>, HashMap<String, HashMap<String, Boolean>>> modifablesLus =
215
            (HashMap<Class<? extends Element>, HashMap<String, HashMap<String, Boolean>>>) ois.readObject();
216
    HashMap<Class<? extends Element>, HashMap<String, String>> champsIdLus =
217
            (HashMap<Class<? extends Element>, HashMap<String, String>>) ois.readObject();
218
    SimpleAttributeSet styleTexteLu = (SimpleAttributeSet) ois.readObject();
219
    HashMap<Class<? extends Element>, HashMap<String, SimpleAttributeSet>> stylesElementsLus =
220
            (HashMap<Class<? extends Element>, HashMap<String, SimpleAttributeSet>>) ois.readObject();
221
    HashMap<Class<? extends Element>, HashMap<String, HashMap<String, HashMap<String, SimpleAttributeSet>>>> stylesValeursElementsLus =
222
            (HashMap<Class<? extends Element>, HashMap<String, HashMap<String, HashMap<String, SimpleAttributeSet>>>>) ois.readObject();
223
    for (Class<? extends Element> classe : new Class[]{Unite.class, Relation.class, Schema.class}) {
224
      for (String type : typesAVoirLus.get(classe)) {
225
        if (!corpus.getStructure().getTypes(classe).contains(type))
226
          return false;
227
      }
228
    }
229
    // En prévision d'une compatibilité ascendante
230
    boolean suite = false;
231
    try {
232
      suite = ois.readBoolean();
233
    } catch (EOFException eOFException) {
234
    }
235
    if (suite) {
236
      System.out.println("Il y a d'autres objets dans le .ecv");
237
    }
238
    typesAVoir = typesAVoirLus;
239
    champspos = champsposLus;
240
    adresses = adressesLues;
241
    modifiables = modifablesLus;
242
    champsId = champsIdLus;
243
    styleTexte = styleTexteLu;
244
    stylesElements = stylesElementsLus;
245
    stylesValeursElements = stylesValeursElementsLus;
246
    unitesAVoir.clear();
247
    modifiee = false;
248
    for (String type : typesAVoir.get(Unite.class)) majUnitesAVoir(type);
249
    fireMessage(new VueEvent(this, TypeModifVue.NEW_VUE));
250
    return true;
251
  }
252
  public void traiterEvent(Message evt) { // Messages de corpus
253
    switch (evt.getType()) {
254
      case CLEAR_CORPUS:
255
        initVueParDefaut();
256
        fireMessage(evt);
257
        return;
258
      case CORPUS_SAVED:
259
    	  fireMessage(evt);
260
          return;
261
      case NEW_CORPUS:
262
        initVueParDefaut();
263
        fireMessage(evt);
264
        return;
265
      case MODIF_TEXTE:
266
        fireMessage(evt);
267
        return;
268
      case MODIF_ELEMENT:
269
        ElementEvent evtE = (ElementEvent) evt;
270
        switch (evtE.getModif()) {
271
          case AJOUT_UNITE:
272
            if (!unitesAVoir.containsKey(evtE.getElement().getType())) return;
273
            majUnitesAVoir(evtE.getElement().getType());
274
            fireMessage(evt);
275
            return;
276
          case SUP_UNITE:
277
            if (!unitesAVoir.containsKey(evtE.getElement().getType())) return;
278
            majUnitesAVoir(evtE.getElement().getType());
279
            fireMessage(evt);
280
            return;
281
          case BORNES_UNITE:
282
        	  if (!unitesAVoir.containsKey(evtE.getElement().getType())) return;
283
              majUnitesAVoir(evtE.getElement().getType());
284
              fireMessage(evt);
285
              return;
286
          case AJOUT_RELATION:
287
          case AJOUT_SCHEMA:
288
          case SUP_RELATION:
289
          case SUP_SCHEMA:
290
          case MODIF_SCHEMA:
291
          case MODIF_VALEUR:
292
            fireMessage(evt);
293
            return;
294
          default:
295
            throw new UnsupportedOperationException("Cas "+evtE.getModif()+" oublié dans un switch");
296
        }
297
      case MODIF_STRUCTURE:
298
        StructureEvent evtS = (StructureEvent) evt;
299
        switch (evtS.getModif()) {
300
          case FUSION_TYPE:
301
            fusionnerType(evtS.getClasse(), evtS.getArg(0), evtS.getArg(1));
302
            fireMessage(evt);
303
            return;
304
          case RENOM_TYPE:
305
            renommerType(evtS.getClasse(), evtS.getArg(0), evtS.getArg(1));
306
            fireMessage(evt);
307
            return;
308
          case AJOUT_TYPE:
309
            ajouterType(evtS.getClasse(), evtS.getArg());
310
            fireMessage(evt);
311
            return;
312
          case AJOUT_TYPE_ET_ELEMENTS:
313
            ajouterType(evtS.getClasse(), evtS.getArg());
314
            if (evtS.getClasse()==Unite.class&&unitesAVoir.containsKey(evtS.getArg()))
315
              majUnitesAVoir(evtS.getArg());
316
            fireMessage(evt);
317
            return;
318
          case SUPPR_TYPE:
319
            supprimerType(evtS.getClasse(), evtS.getArg());
320
            fireMessage(evt);
321
            return;
322
          case AJOUT_PROP:
323
            ajouterProp(evtS.getClasse(), evtS.getArg(0), evtS.getArg(1));
324
            fireMessage(evt);
325
            return;
326
          case AJOUT_FORME_UNITE:
327
            ajouterFormeUnite(evtS.getArg(0));
328
            fireMessage(evt);
329
            return;
330
           case FUSION_PROP:
331
            fusionnerProp(evtS.getClasse(), evtS.getArg(0), evtS.getArg(1), evtS.getArg(2));
332
            fireMessage(evt);
333
            return;
334
          case RENOM_PROP:
335
            renommerProp(evtS.getClasse(), evtS.getArg(0), evtS.getArg(1), evtS.getArg(2));
336
            fireMessage(evt);
337
            return;
338
          case SUPPR_PROP:
339
            supprimerProp(evtS.getClasse(), evtS.getArg(0), evtS.getArg(1));
340
            fireMessage(evt);
341
            return;
342
          case RENOM_VALEUR:
343
          case FUSION_VALEUR:
344
          case SUPPR_VALEUR:
345
          case AJOUT_VALEUR:
346
            fireMessage(evt);
347
            return;
348
          case VALEUR_PAR_DEFAUT:
349
            fireMessage(evt);
350
            return;
351
          default:
352
            throw new UnsupportedOperationException("Cas "+evtS.getModif()+" oublié dans un switch");
353
        }
354
      default:
355
        throw new UnsupportedOperationException("Cas "+evt.getType()+" oublié dans un switch");
356
    }
357
  }
358
  @SuppressWarnings("unchecked")
359
  private void initVueParDefaut() {
360
    unitesAVoir.clear();
361
    for (Class<? extends Element> classe : new Class[]{Unite.class, Relation.class, Schema.class}) {
362
      String[] types = getTypes(classe);
363
      Arrays.sort(types);
364
      typesAVoir.put(classe, types);
365
      champspos.get(classe).clear();
366
      adresses.get(classe).clear();
367
      champsId.get(classe).clear();
368
      styleTexte = new SimpleAttributeSet(PanneauTexte.STANDARD_DEFAUT);
369
      stylesElements.get(classe).clear();
370
      stylesValeursElements.get(classe).clear();
371
      for (String type : typesAVoir.get(classe)) {
372
        Jalon jalon0 = new Jalon(Jalon.Origine.ELT_0, classe, type);
373
        String[] chps = getNomsProps(new Adresse(jalon0));
374
        champspos.get(classe).put(type, new String[1][]);
375
        champspos.get(classe).get(type)[0] = chps;
376
        adresses.get(classe).put(type, new HashMap<String, Adresse>());
377
        modifiables.get(classe).put(type, new HashMap<String, Boolean>());
378
        for (String chp : chps) {
379
          adresses.get(classe).get(type).put(chp, new Adresse(jalon0, chp));
380
          modifiables.get(classe).get(type).put(chp, true);
381
        }
382
        if (classe==Unite.class) majUnitesAVoir(type);
383
      }
384
    }
385
    modifiee = false;
386
    fireMessage(new VueEvent(this, TypeModifVue.VUE_DEFAUT));
387

  
388
  }
389
  private void majUnitesAVoir(String typeUnite) {
390
    Unite[] unts = corpus.getUnites(typeUnite).toArray(new Unite[0]);
391
    Arrays.sort(unts);
392
    unitesAVoir.put(typeUnite, unts);
393
  }
394
  public void retablirVueParDefaut() {
395
    initVueParDefaut();
396
  }
397
  public void setStyleTexte(SimpleAttributeSet att) {
398
    styleTexte = att;
399
  }
400
  public SimpleAttributeSet getStyleTexte() {
401
    return styleTexte;
402
  }
403
  public void modifierVueParSaisie(
404
          HashMap<Class<? extends Element>, HashMap<String, Boolean>> newIsTypesAVoir,
405
          HashMap<Class<? extends Element>, HashMap<String, ArrayList<Adresse>>> newAdressesAVoir,
406
          HashMap<Class<? extends Element>, HashMap<String, ArrayList<String>>> newChampsAVoir,
407
          HashMap<Class<? extends Element>, HashMap<String, String>> newChampsId,
408
          HashMap<Class<? extends Element>, HashMap<String, HashMap<String, Boolean>>> newModifables,
409
          HashMap<Class<? extends Element>, HashMap<String, HashMap<String, Integer>>> newPositionsChamps,
410
          HashMap<Class<? extends Element>, HashMap<String, HashMap<String, Integer>>> newNiveauxChamps,
411
          HashMap<Class<? extends Element>, HashMap<String, SimpleAttributeSet>> newStylesElements,
412
          HashMap<Class<? extends Element>, HashMap<String, HashMap<String, HashMap<String, SimpleAttributeSet>>>> newStylesValeursElements) {
413
    setTypesAVoir(newIsTypesAVoir);
414
    setChampsAdresses(newChampsAVoir, newAdressesAVoir, newPositionsChamps, newNiveauxChamps);
415
    setChampsModifiables(newChampsAVoir, newModifables);
416
    setChampsId(newChampsId);
417
    setStylesElements(newStylesElements);
418
    setStylesValeursElements(newStylesValeursElements);
419
    unitesAVoir.clear();
420
    for (String typeUnite : typesAVoir.get(Unite.class))
421
      majUnitesAVoir(typeUnite);
422
    modifiee = true;
423
    fireMessage(new VueEvent(this, TypeModifVue.EXTRACTION));
424
  }
425
  @SuppressWarnings("unchecked")
426
  private void setTypesAVoir(HashMap<Class<? extends Element>, HashMap<String, Boolean>> isAVoir) {
427
    for (Class<? extends Element> classe : new Class[]{Unite.class, Relation.class, Schema.class}) {
428
      ArrayList<String> types = new ArrayList<String>();
429
      for (String type : getTypes(classe)) if (isAVoir.get(classe).get(type))
430
          types.add(type);
431
      typesAVoir.put(classe, types.toArray(new String[0]));
432
    }
433
  }
434
  @SuppressWarnings("unchecked")
435
  private void setChampsAdresses(
436
          HashMap<Class<? extends Element>, HashMap<String, ArrayList<String>>> champsAVoir,
437
          HashMap<Class<? extends Element>, HashMap<String, ArrayList<Adresse>>> adressesAVoir,
438
          HashMap<Class<? extends Element>, HashMap<String, HashMap<String, Integer>>> positionsChamps,
439
          HashMap<Class<? extends Element>, HashMap<String, HashMap<String, Integer>>> niveauxChamps) {
440
    for (Class<? extends Element> classe : new Class[]{Unite.class, Relation.class, Schema.class}) {
441
      adresses.get(classe).clear();
442
      for (int i = 0; i<typesAVoir.get(classe).length; i++) {
443
        String type = typesAVoir.get(classe)[i];
444
        ArrayList<String> chps = champsAVoir.get(classe).get(type);
445
        adresses.get(classe).put(type, new HashMap<String, Adresse>());
446
        for (int j = 0; j<chps.size(); j++)
447
          adresses.get(classe).get(type).put(chps.get(j), adressesAVoir.get(classe).get(type).get(j));
448
        champspos.get(classe).put(type, ordonnerChamps(chps, niveauxChamps.get(classe).get(type),
449
                positionsChamps.get(classe).get(type)));
450
      }
451
    }
452
  }
453
  private String[][] insererChamp(String[][] chpsenordre, String newchp) {
454
    if (chpsenordre.length==0) {
455
      String[][] chps = new String[1][1];
456
      chps[0][0] = newchp;
457
      return chps;
458
    }
459
    String[] chs1 = new String[chpsenordre[0].length+1];
460
    chs1[0] = newchp;
461
    System.arraycopy(chpsenordre[0], 0, chs1, 1, chpsenordre[0].length);
462
    chpsenordre[0] = chs1;
463
    return chpsenordre;
464
  }
465
  private String[][] ordonnerChamps(ArrayList<String> chps, HashMap<String, Integer> nivx, HashMap<String, Integer> poss) {
466
    HashMap<Integer, HashMap<Integer, ArrayList<String>>> chpstries =
467
            new HashMap<Integer, HashMap<Integer, ArrayList<String>>>();
468
    for (String ch : chps) {
469
      int niv = nivx.get(ch);
470
      if (!chpstries.containsKey(niv))
471
        chpstries.put(niv, new HashMap<Integer, ArrayList<String>>());
472
      int pos = poss.get(ch);
473
      if (!chpstries.get(niv).containsKey(pos))
474
        chpstries.get(niv).put(pos, new ArrayList<String>());
475
      chpstries.get(niv).get(pos).add(ch);
476
    }
477
    Integer[] niveaux = chpstries.keySet().toArray(new Integer[0]);
478
    Arrays.sort(niveaux);
479
    String[][] chpsenordre = new String[niveaux.length][];
480
    int niveauenordre = 0;
481
    for (int niv : niveaux) {
482
      Integer[] positions = chpstries.get(niv).keySet().toArray(new Integer[0]);
483
      Arrays.sort(positions);
484
      int nbch = 0;
485
      for (int pos : positions) nbch += chpstries.get(niv).get(pos).size();
486
      chpsenordre[niveauenordre] = new String[nbch];
487
      int positionenordre = 0;
488
      for (int pos : positions) {
489
        String[] chs = chpstries.get(niv).get(pos).toArray(new String[0]);
490
        Arrays.sort(chs);
491
        for (String ch : chs)
492
          chpsenordre[niveauenordre][positionenordre++] = ch;
493
      }
494
      niveauenordre++;
495
    }
496
    return chpsenordre;
497
  }
498
  @SuppressWarnings("unchecked")
499
  private void setChampsModifiables(HashMap<Class<? extends Element>, HashMap<String, ArrayList<String>>> newChampsAVoir,
500
          HashMap<Class<? extends Element>, HashMap<String, HashMap<String, Boolean>>> newModifables) {
501
    for (Class<? extends Element> classe : new Class[]{Unite.class, Relation.class, Schema.class}) {
502
      modifiables.get(classe).clear();
503
      for (int i = 0; i<typesAVoir.get(classe).length; i++) {
504
        String type = typesAVoir.get(classe)[i];
505
        modifiables.get(classe).put(type, new HashMap<String, Boolean>());
506
        for (String chp : newChampsAVoir.get(classe).get(type))
507
          modifiables.get(classe).get(type).put(chp, newModifables.get(classe).get(type).get(chp));
508
      }
509
    }
510
  }
511
  @SuppressWarnings("unchecked")
512
  private void setChampsId(HashMap<Class<? extends Element>, HashMap<String, String>> newChampsId) {
513
    for (Class<? extends Element> classe : new Class[]{Unite.class, Relation.class, Schema.class}) {
514
      champsId.get(classe).clear();
515
      champsId.get(classe).putAll(newChampsId.get(classe));
516
    }
517
  }
518
  @SuppressWarnings("unchecked")
519
  private void setStylesElements(HashMap<Class<? extends Element>, HashMap<String, SimpleAttributeSet>> newStylesElements) {
520
    for (Class<? extends Element> classe : new Class[]{Unite.class, Relation.class, Schema.class}) {
521
      stylesElements.get(classe).clear();
522
      stylesElements.get(classe).putAll(newStylesElements.get(classe));
523
    }
524
  }
525
  @SuppressWarnings("unchecked")
526
  private void setStylesValeursElements(HashMap<Class<? extends Element>, HashMap<String, HashMap<String, HashMap<String, SimpleAttributeSet>>>> newStylesValeursElements) {
527
    for (Class<? extends Element> classe : new Class[]{Unite.class, Relation.class, Schema.class}) {
528
      stylesValeursElements.get(classe).clear();
529
      stylesValeursElements.get(classe).putAll(newStylesValeursElements.get(classe));
530
    }
531
  }
532
  public Corpus getCorpus() {
533
    return corpus;
534
  }
535
  public String[] getTypes(Class<? extends Element> classe) {
536
    String[] types = corpus.getStructure().getTypes(classe).toArray(new String[0]);
537
    Arrays.sort(types);
538
    return types;
539
  }
540
  @SuppressWarnings("unchecked")
541
  public HashMap<Class<? extends Element>, HashMap<String, Boolean>> isTypesAVoir() {
542
    HashMap<Class<? extends Element>, HashMap<String, Boolean>> isAVoir =
543
            new HashMap<Class<? extends Element>, HashMap<String, Boolean>>();
544
    for (Class<? extends Element> classe : new Class[]{Unite.class, Relation.class, Schema.class}) {
545
      isAVoir.put(classe, new HashMap<String, Boolean>());
546
      for (String type : getTypes(classe)) isAVoir.get(classe).put(type, false);
547
      for (String type : typesAVoir.get(classe))
548
        isAVoir.get(classe).put(type, true);
549
    }
550
    return isAVoir;
551
  }
552
  String[] getTypesAVoir(Class<? extends Element> classe) {
553
    return typesAVoir.get(classe);
554
  }
555
  public String[] getTypesUnitesAVoir() {
556
    return getTypesAVoir(Unite.class);
557
  }
558
  public String[] getTypesRelationsAVoir() {
559
    return getTypesAVoir(Relation.class);
560
  }
561
  public String[] getTypesSchemasAVoir() {
562
    return getTypesAVoir(Schema.class);
563
  }
564
  public String getChampId(Class<? extends Element> classe, String type) {
565
    return champsId.get(classe).get(type);
566
  }
567
  public SimpleAttributeSet getStyleElements(Class<? extends Element> classe, String type) {
568
    return stylesElements.get(classe).get(type);
569
  }
570
  public HashMap<String, HashMap<String, SimpleAttributeSet>> getStyleValeursElements(
571
          Class<? extends Element> classe, String type) {
572
    return stylesValeursElements.get(classe).get(type);
573
  }
574
  public String[][] getChamps(Class<? extends Element> classe, String type) {
575
    if (champspos.get(classe).containsKey(type)) {
576
      return champspos.get(classe).get(type);
577
    } else {
578
      return new String[0][];
579
    }
580
  }
581
  public String[] getNomsChamps(Class<? extends Element> classe, String type) {
582
    return getListeChamps(classe, type).toArray(new String[0]);
583
  }
584
  //la méthode suivante publique pour pouvoir l'utiliser dans une autre classe
585
  public ArrayList<String> getListeChamps(Class<? extends Element> classe, String type) {
586
    // utilisé aussi par VisuVue
587
    ArrayList<String> lchps = new ArrayList<String>();
588
    if (champspos.get(classe).containsKey(type))
589
      for (String[] champsniveau : champspos.get(classe).get(type))
590
        lchps.addAll(Arrays.asList(champsniveau));
591
    return lchps;
592
  }
593
  static String trouveNomChampParDefaut(Adresse ad, ArrayList<String> chps) {
594
    String nom;
595
    if (ad.chemin.size()==1) {
596
      nom = ad.prop;
597
      while (chps.contains(nom)) nom += "-0";
598
      return nom;
599
    }
600
    for (int i = 1; true; i++) {
601
      nom = ad.prop+"-"+i;
602
      if (!chps.contains(nom)) {
603
        return nom;
604
      }
605
    }
606
  }
607
  String[] getNomsProps(Adresse adresse) {
608
    String[] props;
609
    Jalon jalon = adresse.getLastJalon();
610
    props = corpus.getStructure().getNomsProps(jalon.classe, jalon.type).toArray(new String[0]);
... Ce différentiel a été tronqué car il excède la taille maximale pouvant être affichée.

Formats disponibles : Unified diff