KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > genimen > djeneric > tools > scriptengine > core > nodes > ControllerNode


1 /*
2  * Copyright (c) 2001-2005 by Genimen BV (www.genimen.com) All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, is permitted provided that the following conditions are met: -
6  * Redistributions of source code must retain the above copyright notice, this
7  * list of conditions and the following disclaimer. - Redistributions in binary
8  * form must reproduce the above copyright notice, this list of conditions and
9  * the following disclaimer in the documentation and/or other materials
10  * provided with the distribution. - All advertising materials mentioning
11  * features or use of this software must display the following acknowledgment:
12  * "This product includes Djeneric." - Products derived from this software may
13  * not be called "Djeneric" nor may "Djeneric" appear in their names without
14  * prior written permission of Genimen BV. - Redistributions of any form
15  * whatsoever must retain the following acknowledgment: "This product includes
16  * Djeneric."
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
19  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED. IN NO EVENT SHALL GENIMEN BV, DJENERIC.ORG, OR CONTRIBUTORS
22  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28  * POSSIBILITY OF SUCH DAMAGE.
29  */

30 package com.genimen.djeneric.tools.scriptengine.core.nodes;
31
32 import java.util.ArrayList JavaDoc;
33 import java.util.HashMap JavaDoc;
34
35 import com.genimen.djeneric.tools.scriptengine.core.DjScriptParserEngine;
36 import com.genimen.djeneric.tools.scriptengine.core.SimpleNode;
37
38 public class ControllerNode extends SimpleNode
39 {
40
41   public ControllerNode(int i)
42   {
43     super(i);
44   }
45
46   public ControllerNode(DjScriptParserEngine p, int i)
47   {
48     super(p, i);
49   }
50
51   public String JavaDoc getName()
52   {
53     return "controller";
54   }
55
56   public String JavaDoc getNodeTitle()
57   {
58     return "Controller";
59   }
60
61   public String JavaDoc toString()
62   {
63     return getName();
64   }
65
66   HashMap JavaDoc _mappings = null;
67
68   public String JavaDoc[] getActionsForEvent(String JavaDoc eventName)
69   {
70     if (_mappings == null)
71     {
72       _mappings = new HashMap JavaDoc();
73       ArrayList JavaDoc m = getChildren(EventMappingNode.class);
74
75       for (int i = 0; i < m.size(); i++)
76       {
77         EventMappingNode em = (EventMappingNode) m.get(i);
78         ArrayList JavaDoc actions = (ArrayList JavaDoc) _mappings.get(em.getPath());
79
80         if (actions == null)
81         {
82           actions = new ArrayList JavaDoc();
83           String JavaDoc path = em.getPath();
84           if ("*.*".equals(path)) path = "*";
85
86           _mappings.put(path, actions);
87         }
88
89         ArrayList JavaDoc allActions = em.getActions();
90
91         for (int aa = 0; aa < allActions.size(); aa++)
92         {
93           actions.add(allActions.get(aa).toString());
94         }
95       }
96     }
97
98     // Order of precedence:
99
// *
100
// *.x
101
// x.x
102

103     ArrayList JavaDoc result = new ArrayList JavaDoc();
104
105     ArrayList JavaDoc globals = (ArrayList JavaDoc) _mappings.get("*");
106     if (globals != null) result.addAll(globals);
107
108     int idx = eventName.indexOf('.');
109     if (idx != -1)
110     {
111       String JavaDoc left = eventName.substring(0, idx);
112       String JavaDoc right = eventName.substring(idx + 1);
113
114       ArrayList JavaDoc all = (ArrayList JavaDoc) _mappings.get("*." + right);
115       if (all != null) result.addAll(all);
116
117       all = (ArrayList JavaDoc) _mappings.get(left + ".*");
118       if (all != null) result.addAll(all);
119     }
120
121     ArrayList JavaDoc specific = (ArrayList JavaDoc) _mappings.get(eventName);
122     if (specific != null) result.addAll(specific);
123
124     return (String JavaDoc[]) result.toArray(new String JavaDoc[0]);
125   }
126 }
Popular Tags