1 <@headerD header=header/>
2 package ${packageName};
4 <@javadocD object=javadoc/>
5 <@annotationsD object=annotations/>
6 <@typeDeclarationD object=typeDeclaration/>
9 <@moduleFieldsD moduleFields=moduleFields/>
12 private static final ${loggerType} logger = ${loggerFactoryType}.getLogger(${typeDeclaration.name}.class);
14 private final ${typeDeclaration.name} oldModule;
15 private final ${instanceType} oldInstance;
16 private ${instanceType} instance;
17 private final ${dependencyResolverType} dependencyResolver;
18 private final ${moduleNameType} identifier;
20 private ${registratorType} rootRuntimeBeanRegistratorWrapper;
23 public ${typeDeclaration.name}(${moduleNameType} identifier, ${dependencyResolverType} dependencyResolver) {
24 this.identifier = identifier;
25 this.dependencyResolver = dependencyResolver;
26 this.oldInstance = null;
27 this.oldModule = null;
30 public ${typeDeclaration.name}(${moduleNameType} identifier, ${dependencyResolverType} dependencyResolver, ${typeDeclaration.name} oldModule, ${instanceType} oldInstance) {
31 this.identifier = identifier;
32 this.dependencyResolver = dependencyResolver;
33 this.oldInstance = oldInstance;
34 this.oldModule = oldModule;
37 // getters and setters exported into MXBean
38 <@methodsD object=methods/>
41 public ${registratorType} getRootRuntimeBeanRegistratorWrapper(){
42 return rootRuntimeBeanRegistratorWrapper;
46 public void setRuntimeBeanRegistrator(${rootRuntimeRegistratorType} rootRuntimeRegistrator){
47 this.rootRuntimeBeanRegistratorWrapper = new ${registratorType}(rootRuntimeRegistrator);
52 public void validate(){
53 <#list moduleFields as field>
54 <#if field.dependent==true && field.dependency.mandatory==true>
55 dependencyResolver.validateDependency(${field.dependency.sie.fullyQualifiedName}.class, ${field.name}, ${field.name}JmxAttribute);
60 // caches of resolved dependencies
61 <#list moduleFields as field>
62 <#if field.dependent==true>
63 private ${field.dependency.sie.exportedOsgiClassName} ${field.name}Dependency;
64 protected final ${field.dependency.sie.exportedOsgiClassName} get${field.attributeName}Dependency(){
65 return ${field.name}Dependency;
72 public final ${instanceType} getInstance(){
75 <#list moduleFields as field>
76 <#if field.dependent==true>
78 <#if field.dependency.mandatory==false>
79 if(${field.name}!=null) {
82 ${field.name}Dependency = dependencyResolver.resolveInstance(${field.dependency.sie.exportedOsgiClassName}.class, ${field.name}, ${field.name}JmxAttribute);
84 <#if field.dependency.mandatory==false>
90 if(oldInstance!=null && canReuseInstance(oldModule)) {
91 instance = reuseInstance(oldInstance);
93 if(oldInstance!=null) {
96 } catch(Exception e) {
97 logger.error("An error occurred while closing old instance " + oldInstance, e);
100 instance = createInstance();
107 public ${moduleNameType} getIdentifier() {
111 public boolean canReuseInstance(${typeDeclaration.name} oldModule){
112 // allow reusing of old instance if no parameters was changed
113 return equals(oldModule);
116 public ${instanceType} reuseInstance(${instanceType} oldInstance){
117 // implement if instance reuse should be supported. Override canReuseInstance to change the criteria.
121 public abstract ${instanceType} createInstance();
124 public boolean equals(Object obj) {
129 if (getClass() != obj.getClass())
131 ${typeDeclaration.name} other = (${typeDeclaration.name}) obj;
134 <#list moduleFields as field>
135 <#if field.dependent==true>
136 if (${field.name}Dependency == null) {
137 if (other.${field.name}Dependency != null)
139 } else if (!${field.name}Dependency.equals(other.${field.name}Dependency))
142 if (${field.name} == null) {
143 if (other.${field.name} != null)
145 } else if (!${field.name}.equals(other.${field.name}))