##### Coverage Report - org.apache.commons.scxml.env.SimpleContext

Classes in this File | Line Coverage | Branch Coverage | Complexity
SimpleContext |
90% |
100% |
| 1.8571428571428572;1.857

1 |  |
     /*
2 |  |
      *
3 |  |
      *   Copyright 2005-2006 The Apache Software Foundation.
4 |  |
      *
5 |  |
      *  Licensed under the Apache License, Version 2.0 (the "License");
6 |  |
      *  you may not use this file except in compliance with the License.
7 |  |
      *  You may obtain a copy of the License at
8 |  |
      *
9 |  |
      *      http://www.apache.org/licenses/LICENSE-2.0
10 |  |
      *
11 |  |
      *  Unless required by applicable law or agreed to in writing, software
12 |  |
      *  distributed under the License is distributed on an "AS IS" BASIS,
13 |  |
      *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 |  |
      *  See the License for the specific language governing permissions and
15 |  |
      *  limitations under the License.
16 |  |
      *
17 |  |
      */
18 |  |
     package org.apache.commons.scxml.env;
19 |  |
20 |  |
     import java.util.HashMap;
21 |  |
     import java.util.Map;
22 |  |
23 |  |
     import org.apache.commons.logging.Log;
24 |  |
     import org.apache.commons.logging.LogFactory;
25 |  |
     import org.apache.commons.scxml.Context;
26 |  |
27 |  |
     /**
28 |  |
      * Simple Context wrapping a map of variables.
29 |  |
      *
30 |  |
      */
31 |  |
     public class SimpleContext implements Context {
32 |  |
33 |  |
         /** Implementation independent log category. */
34 | 308 |
         private Log log = LogFactory.getLog(Context.class);
35 |  |
         /** The parent Context to this Context. */
36 |  |
         private Context parent;
37 |  |
         /** The Map of variables and their values in this Context. */
38 |  |
         private Map vars;
39 |  |
40 |  |
         /**
41 |  |
          * Constructor.
42 |  |
          *
43 |  |
          */
44 |  |
         public SimpleContext() {
45 | 54 |
             this(null, null);
46 | 54 |
         }
47 |  |
48 |  |
         /**
49 |  |
          * Constructor.
50 |  |
          *
51 |  |
          * @param parent A parent Context, can be null
52 |  |
          */
53 |  |
         public SimpleContext(final Context parent) {
54 | 152 |
             this(parent, null);
55 | 152 |
         }
56 |  |
         /**
57 |  |
          * Constructor.
58 |  |
          *
59 |  |
          * @param initialVars A pre-populated initial variables map
60 |  |
          */
61 |  |
         public SimpleContext(final Map initialVars) {
62 | 90 |
             this(null, initialVars);
63 | 90 |
         }
64 |  |
65 |  |
         /**
66 |  |
          * Constructor.
67 |  |
          *
68 |  |
          * @param parent A parent Context, can be null
69 |  |
          * @param initialVars A pre-populated initial variables map
70 |  |
          */
71 | 301 |
         public SimpleContext(final Context parent, final Map initialVars) {
72 | 301 |
             this.parent = parent;
73 | 301 |
             if (initialVars == null) {
74 | 206 |
                 this.vars = new HashMap();
75 |  |
             } else {
76 | 95 |
                 this.vars = initialVars;
77 |  |
             }
78 | 301 |
         }
79 |  |
80 |  |
         /**
81 |  |
          * Assigns a new value to an existing variable or creates a new one.
82 |  |
          * The method searches the chain of parent Contexts for variable
83 |  |
          * existence.
84 |  |
          *
85 |  |
          * @param name The variable name
86 |  |
          * @param value The variable value
87 |  |
          * @see org.apache.commons.scxml.Context#set(String, Object)
88 |  |
          */
89 |  |
         public void set(final String name, final Object value) {
90 | 46 |
             if (vars.containsKey(name)) { //first try to override local
91 | 21 |
                 setLocal(name, value);
92 | 25 |
             } else if (parent != null && parent.has(name)) { //then check for global
93 | 19 |
                 parent.set(name, value);
94 |  |
             } else { //otherwise create a new local variable
95 | 6 |
                 setLocal(name, value);
96 |  |
             }
97 | 46 |
         }
98 |  |
99 |  |
         /**
100 |  |
          * Get the value of this variable; delegating to parent.
101 |  |
          *
102 |  |
          * @param name The variable name
103 |  |
          * @return Object The variable value
104 |  |
          * @see org.apache.commons.scxml.Context#get(java.lang.String)
105 |  |
          */
106 |  |
         public Object get(final String name) {
107 | 366 |
             if (vars.containsKey(name)) {
108 | 225 |
                 return vars.get(name);
109 | 141 |
             } else if (parent != null) {
110 | 59 |
                 return parent.get(name);
111 |  |
             } else {
112 | 82 |
                 return null;
113 |  |
             }
114 |  |
         }
115 |  |
116 |  |
         /**
117 |  |
          * Check if this variable exists, delegating to parent.
118 |  |
          *
119 |  |
          * @param name The variable name
120 |  |
          * @return boolean true if this variable exists
121 |  |
          * @see org.apache.commons.scxml.Context#has(java.lang.String)
122 |  |
          */
123 |  |
         public boolean has(final String name) {
124 | 63 |
             if (vars.containsKey(name)) {
125 | 39 |
                 return true;
126 | 24 |
             } else if (parent != null && parent.has(name)) {
127 | 19 |
                 return true;
128 |  |
             }
129 | 5 |
             return false;
130 |  |
         }
131 |  |
132 |  |
         /**
133 |  |
          * Clear this Context.
134 |  |
          *
135 |  |
          * @see org.apache.commons.scxml.Context#reset()
136 |  |
          */
137 |  |
         public void reset() {
138 | 11 |
             vars.clear();
139 | 11 |
         }
140 |  |
141 |  |
         /**
142 |  |
          * Get the parent Context, may be null.
143 |  |
          *
144 |  |
          * @return Context The parent Context
145 |  |
          * @see org.apache.commons.scxml.Context#getParent()
146 |  |
          */
147 |  |
         public Context getParent() {
148 | 233 |
             return parent;
149 |  |
         }
150 |  |
151 |  |
         /**
152 |  |
          * Assigns a new value to an existing variable or creates a new one.
153 |  |
          * The method allows to shaddow a variable of the same name up the
154 |  |
          * Context chain.
155 |  |
          *
156 |  |
          * @param name The variable name
157 |  |
          * @param value The variable value
158 |  |
          * @see org.apache.commons.scxml.Context#setLocal(String, Object)
159 |  |
          */
160 |  |
         public void setLocal(final String name, final Object value) {
161 | 779 |
             vars.put(name, value);
162 | 779 |
             if (log.isDebugEnabled() && !name.equals("_ALL_STATES")) {
163 | 0 |
                 log.debug(name + " = " + String.valueOf(value));
164 |  |
             }
165 | 779 |
         }
166 |  |
167 |  |
         /**
168 |  |
          * Set the variables map.
169 |  |
          *
170 |  |
          * @param vars The new Map of variables.
171 |  |
          */
172 |  |
         protected void setVars(final Map vars) {
173 | 12 |
             this.vars = vars;
174 | 12 |
         }
175 |  |
176 |  |
         /**
177 |  |
          * Get the Map of all local variables in this Context.
178 |  |
          *
179 |  |
          * @return Returns the vars.
180 |  |
          */
181 |  |
         public Map getVars() {
182 | 547 |
             return vars;
183 |  |
         }
184 |  |
185 |  |
         /**
186 |  |
          * Set the log used by this <code>Context</code> instance.
187 |  |
          *
188 |  |
          * @param log The new log.
189 |  |
          */
190 |  |
         protected void setLog(final Log log) {
191 | 0 |
             this.log = log;
192 | 0 |
         }
193 |  |
194 |  |
         /**
195 |  |
          * Get the log used by this <code>Context</code> instance.
196 |  |
          *
197 |  |
          * @return Log The log being used.
198 |  |
          */
199 |  |
         protected Log getLog() {
200 | 0 |
             return log;
201 |  |
         }
202 |  |
203 |  |
     }
204 |  |