blob: d0723ca4977336418b9043910a712ca7e43290cd (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
/**
*
*/
package org.eclipse.papyrus.infra.core.services.internal;
import org.eclipse.papyrus.infra.core.services.BadStateException;
import org.eclipse.papyrus.infra.core.services.ServiceDescriptor;
import org.eclipse.papyrus.infra.core.services.ServiceException;
import org.eclipse.papyrus.infra.core.services.ServiceState;
import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
/**
* Entry for a service provided as POJO.
*
*
* @author cedric dumoulin
*/
public class PojoServiceEntry extends ServiceTypeEntry {
/** Instance of the service, if started. */
private Object serviceInstance;
/**
* Constructor.
*
* @param serviceDescriptor
*/
public PojoServiceEntry(ServiceDescriptor serviceDescriptor) {
super(serviceDescriptor);
setState(ServiceState.registered);
}
/**
* Create an entry for an already created service. Constructor.
*
* @param descriptor
* Descriptor of the service. Key and priority should be set.
* @param serviceInstance
* The service Instance
*/
public PojoServiceEntry(ServiceDescriptor descriptor, Object serviceInstance) {
super(descriptor);
this.serviceInstance = serviceInstance;
setState(ServiceState.registered);
}
/**
* Get the service instance.
*
* @return
* @throws ServiceException
* If service can't be started.
*/
public Object getServiceInstance() throws ServiceException {
if(serviceInstance == null)
throw new BadStateException("Service is not created.", state, serviceDescriptor);
return serviceInstance;
}
/**
* Already created : do nothing.
*
* @throws ServiceException
*/
public void createService() throws ServiceException {
checkState(ServiceState.registered);
// Exit if already created.
if(serviceInstance != null) {
setState(ServiceState.created);
return;
}
// Create it
try {
// Create the instance
serviceInstance = instanciateService();
} catch (Exception e) {
setState(ServiceState.error);
throw new ServiceException(e);
}
setState(ServiceState.created);
}
/**
* Pojo : can't initialize the service. Do nothing.
*
* @param servicesRegistry
* The servicesRegistry containing this service.
*
* @throws ServiceException
*/
public void initService(ServicesRegistry servicesRegistry) throws ServiceException {
setState(ServiceState.initialized);
}
/**
* Already started : do nothing.
*
* @throws ServiceException
*/
public void startService() throws ServiceException {
setState(ServiceState.started);
}
/**
* Do nothing.
*/
public void disposeService() throws ServiceException {
if(serviceInstance == null)
return;
serviceInstance = null;
setState(ServiceState.disposed);
}
}
|