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 <#if field.type?starts_with("java.util.List")>
56 for(javax.management.ObjectName dep : ${field.name}) {
57 dependencyResolver.validateDependency(${field.dependency.sie.fullyQualifiedName}.class, dep, ${field.name}JmxAttribute);
60 dependencyResolver.validateDependency(${field.dependency.sie.fullyQualifiedName}.class, ${field.name}, ${field.name}JmxAttribute);
67 protected void customValidation(){
71 // caches of resolved dependencies
72 <#list moduleFields as field>
73 <#if field.dependent==true>
74 <#if field.type?starts_with("java.util.List")>
75 private java.util.List<${field.dependency.sie.exportedOsgiClassName}> ${field.name}Dependency = new java.util.ArrayList<${field.dependency.sie.exportedOsgiClassName}>();
76 protected final java.util.List<${field.dependency.sie.exportedOsgiClassName}> get${field.attributeName}Dependency(){
77 return ${field.name}Dependency;
80 private ${field.dependency.sie.exportedOsgiClassName} ${field.name}Dependency;
81 protected final ${field.dependency.sie.exportedOsgiClassName} get${field.attributeName}Dependency(){
82 return ${field.name}Dependency;
88 // caches of resolved IdentityRefs
89 <#list moduleFields as field>
90 <#if field.identityRef==true>
91 private ${field.identityClassType} ${field.identityClassName};
96 public final ${instanceType} getInstance(){
99 <#list moduleFields as field>
100 <#if field.dependent==true>
101 <#if field.dependency.mandatory==false>
102 if(${field.name}!=null) {
105 <#if field.type?starts_with("java.util.List")>
106 ${field.name}Dependency = new java.util.ArrayList<${field.dependency.sie.exportedOsgiClassName}>();
107 for(javax.management.ObjectName dep : ${field.name}) {
108 ${field.name}Dependency.add(dependencyResolver.resolveInstance(${field.dependency.sie.exportedOsgiClassName}.class, dep, ${field.name}JmxAttribute));
111 ${field.name}Dependency = dependencyResolver.resolveInstance(${field.dependency.sie.exportedOsgiClassName}.class, ${field.name}, ${field.name}JmxAttribute);
114 <#if field.dependency.mandatory==false>
119 <#if field.needsDepResolver==true>
120 if(${field.name} != null) {
121 <#if field.type?starts_with("java.util.List")>
122 for(${field.type?substring(field.type?index_of("<") + 1, field.type?index_of(">"))} candidate : ${field.name}) {
123 candidate.injectDependencyResolver(dependencyResolver);
126 ${field.name}.injectDependencyResolver(dependencyResolver);
131 <#if field.identityRef==true>
132 if(${field.name} != null) {
133 set${field.attributeName}(${field.name}.resolveIdentity(dependencyResolver, ${field.identityBaseClass}.class));
138 if(oldInstance!=null && canReuseInstance(oldModule)) {
139 instance = reuseInstance(oldInstance);
141 if(oldInstance!=null) {
144 } catch(Exception e) {
145 logger.error("An error occurred while closing old instance " + oldInstance, e);
148 instance = createInstance();
155 public ${moduleNameType} getIdentifier() {
159 public boolean canReuseInstance(${typeDeclaration.name} oldModule){
160 // allow reusing of old instance if no parameters was changed
161 return isSame(oldModule);
164 public ${instanceType} reuseInstance(${instanceType} oldInstance){
165 // implement if instance reuse should be supported. Override canReuseInstance to change the criteria.
169 public abstract ${instanceType} createInstance();
171 public boolean isSame(${typeDeclaration.name} other) {
173 throw new IllegalArgumentException("Parameter 'other' is null");
175 <#list moduleFields as field>
176 <#if field.dependent==true && field.listOfDependencies == false>
177 if (${field.name}Dependency != other.${field.name}Dependency) { // reference to dependency must be same
180 <#elseif field.listOfDependencies>
181 if (${field.name}Dependency.equals(other.${field.name}Dependency) == false) {
184 for (int idx = 0; idx < ${field.name}Dependency.size(); idx++) {
185 if (${field.name}Dependency.get(idx) != other.${field.name}Dependency.get(idx)) {
190 if (${field.name} == null) {
191 if (other.${field.name} != null) {
195 <#if field.array == false>
196 (${field.name}.equals(other.${field.name}) == false)
198 (java.util.Arrays.equals(${field.name},other.${field.name}) == false)
210 public boolean equals(Object o) {
211 if (this == o) return true;
212 if (o == null || getClass() != o.getClass()) return false;
214 ${typeDeclaration.name} that = (${typeDeclaration.name}) o;
216 return identifier.equals(that.identifier);
220 public int hashCode() {
221 return identifier.hashCode();