e6b09215299cc376812a3cf5d438ee1fb905d8ee
[utils] / system / general / src / test / java / org / wamblee / system / container / Application.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.container;
17
18 import org.wamblee.system.core.AbstractComponent;
19 import org.wamblee.system.core.DefaultRequiredInterface;
20 import org.wamblee.system.core.ProvidedInterface;
21 import org.wamblee.system.core.RequiredInterface;
22 import org.wamblee.system.core.Scope;
23 import org.wamblee.test.EventTracker;
24
25 public class Application extends AbstractComponent<Object> {
26     public static RequiredInterface[] required(boolean aOptional,
27             String aPrefix) {
28         return new RequiredInterface[] {
29                 new DefaultRequiredInterface(aPrefix + "string", String.class,
30                         aOptional),
31                 new DefaultRequiredInterface(aPrefix + "integer",
32                         Integer.class, aOptional) };
33     }
34
35     public static RequiredInterface[] required(boolean aOptional) {
36         return required(aOptional, "");
37     }
38
39     private EventTracker<String> tracker;
40     private String string;
41     private Integer integer;
42     private double random;
43
44     public Application() {
45         this("application");
46     }
47
48     public Application(String aName) {
49         this(aName, "");
50     }
51
52     public Application(String aName, String aPrefix) {
53         super(aName, new ProvidedInterface[0], required(false,
54                 aPrefix));
55         random = Math.random();
56     }
57
58     public Application(boolean aIsOptinal) {
59         super("application", new ProvidedInterface[0], required(true, ""));
60     }
61
62     public Application(EventTracker<String> aTracker) {
63         this();
64         tracker = aTracker;
65     }
66
67     @Override
68     public Object doStart(Scope aScope) {
69         track("start." + getName());
70         string = aScope.getInterfaceImplementation(getRequiredInterfaces()
71                 .get(0).getProvider(), String.class);
72         integer = aScope.getInterfaceImplementation(getRequiredInterfaces()
73                 .get(1).getProvider(), Integer.class);
74         return random;
75     }
76
77     public String getString() {
78         return string;
79     }
80
81     public Integer getInteger() {
82         return integer;
83     }
84
85     @Override
86     public void doStop(Object aRuntime) {
87         track("stop." + getName());
88         if (random != (Double) aRuntime) {
89             throw new IllegalArgumentException("Wrong runtime: expected "
90                     + random + " but got " + aRuntime);
91         }
92     }
93
94     private void track(String aString) {
95         if (tracker == null) {
96             return;
97         }
98         tracker.eventOccurred(aString);
99     }
100 }