View Javadoc
1   /*
2    * #%L
3    * EUGene :: EUGene
4    * %%
5    * Copyright (C) 2004 - 2012 CodeLutin, Chatellier Eric
6    * %%
7    * This program is free software: you can redistribute it and/or modify
8    * it under the terms of the GNU Lesser General Public License as 
9    * published by the Free Software Foundation, either version 3 of the 
10   * License, or (at your option) any later version.
11   * 
12   * This program is distributed in the hope that it will be useful,
13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   * GNU General Lesser Public License for more details.
16   * 
17   * You should have received a copy of the GNU General Lesser Public 
18   * License along with this program.  If not, see
19   * <http://www.gnu.org/licenses/lgpl-3.0.html>.
20   * #L%
21   */
22  
23  package org.nuiton.eugene.models.state.xml;
24  
25  import org.apache.commons.digester3.Digester;
26  import org.apache.commons.digester3.RuleSetBase;
27  
28  /**
29   * StateModelDigesterRuleSet
30   *
31   * Definit principalement :
32   * - la classe d'implementation a utiliser pour chaque noeud
33   * - la methode a appeler apres chaque noeud
34   *
35   * Ce jeu de regle ne cree pas l'element racine.
36   * Il doit etre cree et ajoute a la pile digester avant l'appel a
37   * {@code Digester.parse(File)}.
38   *
39   * Exemple:
40   * <code>
41   * StateModel monModel = new StateModelImpl()
42   * Digester d = new Digester();
43   * d.push(monModel);
44   * d.parse(file);
45   * </code>
46   *
47   * @author chatellier
48   */
49  public class DigesterStateModelRuleSet extends RuleSetBase {
50  
51      protected String prefix;
52  
53      public DigesterStateModelRuleSet() {
54          this("");
55      }
56  
57      public DigesterStateModelRuleSet(String prefix) {
58          super("http://www.codelutin.org/lutingenerator/stateModel");
59          this.prefix = prefix;
60      }
61  
62      public void addRuleInstances(Digester digester) {
63  
64          //digester.addObjectCreate("stateModel", StateModelImpl.class);
65          //digester.addFactoryCreate("stateModel", DigesterStateModelFactory.class);
66          // root element must be present on stask
67          digester.addSetProperties("stateModel");
68  
69          digester.addObjectCreate("stateModel/stateChart", StateModelStateChartImpl.class);
70          digester.addSetProperties("stateModel/stateChart");
71          digester.addSetNext("stateModel/stateChart", "addStateChart");
72  
73          digester.addObjectCreate("*/state", StateModelSimpleStateImpl.class);
74          digester.addSetProperties("*/state");
75          digester.addSetNext("*/state", "addState");
76  
77          digester.addObjectCreate("*/complexeState", StateModelComplexeStateImpl.class);
78          digester.addSetProperties("*/complexeState");
79          digester.addSetNext("*/complexeState", "addState");
80  
81          digester
82                  .addObjectCreate("*/transition", StateModelTransitionImpl.class);
83          digester.addSetProperties("*/transition");
84          digester.addSetNext("*/transition", "addTransition");
85      }
86  }