1 /**
2  *   Copyright © 2008-2012 NetAllied Systems GmbH, Ravensburg, Germany.
3  *
4  *   Licensed under the MIT Open Source License,
5  *   for details please see LICENSE file or the website
6  *   http://www.opensource.org/licenses/mit-license.php
7 */
8 package de.netallied.xsd2cppsax.statemachine;
9 
10 import java.util.ArrayList;
11 import java.util.List;
12 import java.util.SortedMap;
13 import java.util.SortedSet;
14 import java.util.TreeMap;
15 import java.util.TreeSet;
16 
17 /**
18  * Specialized node which allows querying of nodes by name.
19  *
20  */
21 public class StateMachineRootNode extends StateMachineNode {
22 
23     /** Contains all nodes of this StateMachine. */
24     private SortedMap<String, List<StateMachineNode>> nodes = new TreeMap<String, List<StateMachineNode>>();
25 
26     /**
27      * Constructor.
28      */
StateMachineRootNode(String name)29     public StateMachineRootNode(String name) {
30         super(name);
31         registerNode(name, this);
32     }
33 
34     /**
35      * Finds nodes with given name in this state machine.
36      *
37      * @param name
38      *            Name to find nodes with.
39      * @return Nodes with given name.
40      */
findNodes(String name)41     public List<StateMachineNode> findNodes(String name) {
42         return nodes.get(name);
43     }
44 
45     /**
46      * @return All node names in this state machine.
47      */
getNodeNames()48     protected SortedSet<String> getNodeNames() {
49         SortedSet<String> sortedNames = new TreeSet<String>();
50         sortedNames.addAll(nodes.keySet());
51         return sortedNames;
52     }
53 
54     /**
55      * Registers a new node. To be called when a node is added to this state
56      * machine.
57      *
58      * @param name
59      *            Name of the node.
60      * @param node
61      *            The node itself.
62      */
registerNode(String name, StateMachineNode node)63     protected void registerNode(String name, StateMachineNode node) {
64         List<StateMachineNode> nodesList = nodes.get(name);
65         if (nodesList == null) {
66             nodes.put(name, new ArrayList<StateMachineNode>());
67             nodesList = nodes.get(name);
68         }
69         nodesList.add(node);
70     }
71 }
72