ef5212d05d756cbd82b1e489b986509725ec399e
[utils] / system / general / src / test / java / org / wamblee / system / core / Environment.java
1 /*
2  * Copyright 2007 the original author or authors.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.wamblee.system.core;
17
18 import org.wamblee.system.core.AbstractComponent;
19 import org.wamblee.system.core.DefaultProvidedInterface;
20 import org.wamblee.system.core.ProvidedInterface;
21 import org.wamblee.system.core.RequiredInterface;
22
23 import org.wamblee.test.EventTracker;
24
25 import javax.sql.DataSource;
26
27
28 /**
29  * DOCUMENT ME!
30  *
31  * @author $author$
32  * @version $Revision$
33   */
34 public class Environment extends AbstractComponent<Object> {
35     /**
36      * DOCUMENT ME!
37      */
38     private static int COUNT = 0;
39
40     /**
41      * DOCUMENT ME!
42      */
43     private EventTracker<String> tracker;
44
45     /**
46      * DOCUMENT ME!
47      */
48     private double random;
49
50     /**
51      * DOCUMENT ME!
52      */
53     private int integer;
54
55     /**
56      * Creates a new Environment object.
57      */
58     public Environment() {
59         this("environment");
60     }
61
62     /**
63      * Creates a new Environment object.
64      *
65      * @param aName DOCUMENT ME!
66      */
67     public Environment(String aName) {
68         this(aName, "");
69     }
70
71     /**
72      * Creates a new Environment object.
73      *
74      * @param aName DOCUMENT ME!
75      * @param aPrefix DOCUMENT ME!
76      */
77     public Environment(String aName, String aPrefix) {
78         super(aName, provided(aPrefix), new RequiredInterface[0]);
79         random      = Math.random();
80         integer     = COUNT++;
81     }
82
83     /**
84      * Creates a new Environment object.
85      *
86      * @param aTracker DOCUMENT ME!
87      */
88     public Environment(EventTracker aTracker) {
89         this();
90         tracker = aTracker;
91     }
92
93     /**
94      * DOCUMENT ME!
95      *
96      * @param aPrefix DOCUMENT ME!
97      *
98      * @return DOCUMENT ME!
99      */
100     private static final ProvidedInterface[] provided(String aPrefix) {
101         return new ProvidedInterface[] {
102             new DefaultProvidedInterface(aPrefix + "datasource", String.class),
103             new DefaultProvidedInterface(aPrefix + "integer", Integer.class)
104         };
105     }
106
107     /**
108      * DOCUMENT ME!
109      *
110      * @return DOCUMENT ME!
111      */
112     public Integer getInteger() {
113         return integer;
114     }
115
116     /**
117      * DOCUMENT ME!
118      *
119      * @return DOCUMENT ME!
120      */
121     public String getString() {
122         return getName() + ".hello";
123     }
124
125     /**
126      * DOCUMENT ME!
127      *
128      * @param aScope DOCUMENT ME!
129      *
130      * @return DOCUMENT ME!
131      */
132     @Override
133     protected Object doStart(Scope aScope) {
134         addInterface(getProvidedInterfaces().get(0), getString(), aScope);
135         addInterface(getProvidedInterfaces().get(1), getInteger(), aScope);
136         track("start." + getName());
137
138         return random;
139     }
140
141     /**
142      * DOCUMENT ME!
143      *
144      * @param aRuntime DOCUMENT ME!
145      */
146     @Override
147     protected void doStop(Object aRuntime) {
148         track("stop." + getName());
149
150         if (random != (Double) aRuntime) {
151             throw new IllegalArgumentException("Wrong runtime: expected "
152                 + random + " but got " + aRuntime);
153         }
154     }
155
156     /**
157      * DOCUMENT ME!
158      *
159      * @param aString DOCUMENT ME!
160      */
161     private void track(String aString) {
162         if (tracker == null) {
163             return;
164         }
165
166         tracker.eventOccurred(aString);
167     }
168 }