001 /** 002 * Copyright 2005-2011 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.ksb.api.bus.support; 017 018 import org.kuali.rice.core.api.CoreConstants; 019 import org.kuali.rice.core.api.mo.AbstractDataTransferObject; 020 import org.kuali.rice.core.api.security.credentials.CredentialsType; 021 import org.kuali.rice.core.api.util.jaxb.EnumStringAdapter; 022 import org.kuali.rice.core.api.util.jaxb.QNameAsStringAdapter; 023 import org.kuali.rice.ksb.api.bus.ServiceConfiguration; 024 import org.kuali.rice.ksb.api.bus.ServiceDefinition; 025 import org.w3c.dom.Element; 026 027 import javax.xml.bind.annotation.XmlAccessType; 028 import javax.xml.bind.annotation.XmlAccessorType; 029 import javax.xml.bind.annotation.XmlAnyElement; 030 import javax.xml.bind.annotation.XmlElement; 031 import javax.xml.bind.annotation.XmlType; 032 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 033 import javax.xml.namespace.QName; 034 import java.io.Serializable; 035 import java.net.URL; 036 import java.util.Collection; 037 038 @XmlAccessorType(XmlAccessType.NONE) 039 @XmlType(name = AbstractServiceConfiguration.Constants.TYPE_NAME, propOrder = { 040 AbstractServiceConfiguration.Elements.SERVICE_NAME, 041 AbstractServiceConfiguration.Elements.ENDPOINT_URL, 042 AbstractServiceConfiguration.Elements.APPLICATION_ID, 043 AbstractServiceConfiguration.Elements.INSTANCE_ID, 044 AbstractServiceConfiguration.Elements.SERVICE_VERSION, 045 AbstractServiceConfiguration.Elements.TYPE, 046 AbstractServiceConfiguration.Elements.QUEUE, 047 AbstractServiceConfiguration.Elements.PRIORITY, 048 AbstractServiceConfiguration.Elements.RETRY_ATTEMPTS, 049 AbstractServiceConfiguration.Elements.MILLIS_TO_LIVE, 050 AbstractServiceConfiguration.Elements.MESSAGE_EXCEPTION_HANDLER, 051 AbstractServiceConfiguration.Elements.BUS_SECURITY, 052 AbstractServiceConfiguration.Elements.CREDENTIALS_TYPE, 053 AbstractServiceConfiguration.Elements.CACHE_MANAGER, 054 CoreConstants.CommonElements.FUTURE_ELEMENTS 055 }) 056 public abstract class AbstractServiceConfiguration extends AbstractDataTransferObject implements ServiceConfiguration { 057 058 private static final long serialVersionUID = 2681595879406587302L; 059 060 @XmlJavaTypeAdapter(QNameAsStringAdapter.class) 061 @XmlElement(name = Elements.SERVICE_NAME, required = true) 062 private final QName serviceName; 063 064 @XmlElement(name = Elements.ENDPOINT_URL, required = true) 065 private final URL endpointUrl; 066 067 @XmlElement(name = Elements.INSTANCE_ID, required = true) 068 private final String instanceId; 069 070 @XmlElement(name = Elements.APPLICATION_ID, required = true) 071 private final String applicationId; 072 073 @XmlElement(name = Elements.SERVICE_VERSION, required = true) 074 private final String serviceVersion; 075 076 @XmlElement(name = Elements.TYPE, required = true) 077 private final String type; 078 079 @XmlElement(name = Elements.QUEUE, required = false) 080 private final boolean queue; 081 082 @XmlElement(name = Elements.PRIORITY, required = false) 083 private final Integer priority; 084 085 @XmlElement(name = Elements.RETRY_ATTEMPTS, required = false) 086 private final Integer retryAttempts; 087 088 @XmlElement(name = Elements.MILLIS_TO_LIVE, required = false) 089 private final Long millisToLive; 090 091 @XmlElement(name = Elements.MESSAGE_EXCEPTION_HANDLER, required = false) 092 private final String messageExceptionHandler; 093 094 @XmlElement(name = Elements.BUS_SECURITY, required = false) 095 private final Boolean busSecurity; 096 097 @XmlJavaTypeAdapter(CredentialsTypeAdapter.class) 098 @XmlElement(name = Elements.CREDENTIALS_TYPE, required = false) 099 private final String credentialsType; 100 101 @XmlElement(name = Elements.CACHE_MANAGER, required = false) 102 private final String cacheManager; 103 104 @SuppressWarnings("unused") 105 @XmlAnyElement 106 private final Collection<Element> _futureElements = null; 107 108 /** 109 * Constructor intended for use only by JAXB. 110 */ 111 protected AbstractServiceConfiguration() { 112 this.serviceName = null; 113 this.endpointUrl = null; 114 this.instanceId = null; 115 this.applicationId = null; 116 this.serviceVersion = null; 117 this.type = null; 118 this.queue = false; 119 this.priority = null; 120 this.retryAttempts = null; 121 this.millisToLive = null; 122 this.messageExceptionHandler = null; 123 this.busSecurity = null; 124 this.credentialsType = null; 125 this.cacheManager = null; 126 } 127 128 protected AbstractServiceConfiguration(Builder<?> builder) { 129 this.serviceName = builder.getServiceName(); 130 this.endpointUrl = builder.getEndpointUrl(); 131 this.instanceId = builder.getInstanceId(); 132 this.applicationId = builder.getApplicationId(); 133 this.serviceVersion = builder.getServiceVersion(); 134 this.type = builder.getType(); 135 this.queue = builder.isQueue(); 136 this.priority = builder.getPriority(); 137 this.retryAttempts = builder.getRetryAttempts(); 138 this.millisToLive = builder.getMillisToLive(); 139 this.messageExceptionHandler = builder.getMessageExceptionHandler(); 140 this.busSecurity = builder.getBusSecurity(); 141 CredentialsType cred = builder.getCredentialsType(); 142 this.credentialsType = cred == null ? null : cred.name(); 143 this.cacheManager = builder.getCacheManager(); 144 } 145 146 public QName getServiceName() { 147 return serviceName; 148 } 149 150 public URL getEndpointUrl() { 151 return endpointUrl; 152 } 153 154 public String getInstanceId() { 155 return instanceId; 156 } 157 158 public String getApplicationId() { 159 return applicationId; 160 } 161 162 public String getServiceVersion() { 163 return serviceVersion; 164 } 165 166 public String getType() { 167 return type; 168 } 169 170 public boolean isQueue() { 171 return queue; 172 } 173 174 public Integer getPriority() { 175 return priority; 176 } 177 178 public Integer getRetryAttempts() { 179 return retryAttempts; 180 } 181 182 public Long getMillisToLive() { 183 return millisToLive; 184 } 185 186 public String getMessageExceptionHandler() { 187 return messageExceptionHandler; 188 } 189 190 public Boolean getBusSecurity() { 191 return busSecurity; 192 } 193 194 public CredentialsType getCredentialsType() { 195 if (credentialsType == null) { 196 return null; 197 } 198 return CredentialsType.valueOf(credentialsType); 199 } 200 201 public String getCacheManager() { 202 return cacheManager; 203 } 204 205 protected static abstract class Builder<T> implements Serializable { 206 207 private static final long serialVersionUID = -3002495884401672488L; 208 209 private QName serviceName; 210 private URL endpointUrl; 211 private String instanceId; 212 private String applicationId; 213 private String serviceVersion; 214 private String type; 215 private boolean queue; 216 private Integer priority; 217 private Integer retryAttempts; 218 private Long millisToLive; 219 private String messageExceptionHandler; 220 private Boolean busSecurity; 221 private CredentialsType credentialsType; 222 private String cacheManager; 223 224 public abstract T build(); 225 226 protected void copyServiceDefinitionProperties(ServiceDefinition serviceDefinition) { 227 setServiceName(serviceDefinition.getServiceName()); 228 setEndpointUrl(serviceDefinition.getEndpointUrl()); 229 setApplicationId(serviceDefinition.getApplicationId()); 230 setInstanceId(serviceDefinition.getInstanceId()); 231 setServiceVersion(serviceDefinition.getServiceVersion()); 232 setType(serviceDefinition.getType()); 233 setQueue(serviceDefinition.isQueue()); 234 setPriority(serviceDefinition.getPriority()); 235 setRetryAttempts(serviceDefinition.getRetryAttempts()); 236 setMillisToLive(serviceDefinition.getMillisToLive()); 237 setMessageExceptionHandler(serviceDefinition.getMessageExceptionHandler()); 238 setBusSecurity(serviceDefinition.getBusSecurity()); 239 setCredentialsType(serviceDefinition.getCredentialsType()); 240 setCacheManager(serviceDefinition.getCacheManager()); 241 } 242 243 public QName getServiceName() { 244 return serviceName; 245 } 246 public void setServiceName(QName serviceName) { 247 this.serviceName = serviceName; 248 } 249 public URL getEndpointUrl() { 250 return endpointUrl; 251 } 252 public void setEndpointUrl(URL endpointUrl) { 253 this.endpointUrl = endpointUrl; 254 } 255 public String getInstanceId() { 256 return instanceId; 257 } 258 public void setInstanceId(String instanceId) { 259 this.instanceId = instanceId; 260 } 261 public String getApplicationId() { 262 return applicationId; 263 } 264 public void setApplicationId(String applicationId) { 265 this.applicationId = applicationId; 266 } 267 public String getServiceVersion() { 268 return serviceVersion; 269 } 270 public void setServiceVersion(String serviceVersion) { 271 this.serviceVersion = serviceVersion; 272 } 273 public String getType() { 274 return type; 275 } 276 public void setType(String type) { 277 this.type = type; 278 } 279 public boolean isQueue() { 280 return queue; 281 } 282 public void setQueue(boolean queue) { 283 this.queue = queue; 284 } 285 public Integer getPriority() { 286 return priority; 287 } 288 public void setPriority(Integer priority) { 289 this.priority = priority; 290 } 291 public Integer getRetryAttempts() { 292 return retryAttempts; 293 } 294 public void setRetryAttempts(Integer retryAttempts) { 295 this.retryAttempts = retryAttempts; 296 } 297 public Long getMillisToLive() { 298 return millisToLive; 299 } 300 public void setMillisToLive(Long millisToLive) { 301 this.millisToLive = millisToLive; 302 } 303 public String getMessageExceptionHandler() { 304 return messageExceptionHandler; 305 } 306 public void setMessageExceptionHandler(String messageExceptionHandler) { 307 this.messageExceptionHandler = messageExceptionHandler; 308 } 309 public Boolean getBusSecurity() { 310 return busSecurity; 311 } 312 public void setBusSecurity(Boolean busSecurity) { 313 this.busSecurity = busSecurity; 314 } 315 public CredentialsType getCredentialsType() { 316 return credentialsType; 317 } 318 public void setCredentialsType(CredentialsType credentialsType) { 319 this.credentialsType = credentialsType; 320 } 321 322 public String getCacheManager() { 323 return cacheManager; 324 } 325 326 public void setCacheManager(String cacheManager) { 327 this.cacheManager = cacheManager; 328 } 329 } 330 331 /** 332 * Defines some internal constants used on this class. 333 */ 334 protected static class Constants { 335 protected final static String TYPE_NAME = "ServiceConfigurationType"; 336 } 337 338 /** 339 * A private class which exposes constants which define the XML element names to use 340 * when this object is marshalled to XML. 341 */ 342 protected static class Elements { 343 protected final static String SERVICE_NAME = "serviceName"; 344 protected final static String ENDPOINT_URL = "endpointUrl"; 345 protected final static String INSTANCE_ID = "instanceId"; 346 protected final static String APPLICATION_ID = "applicationId"; 347 protected final static String SERVICE_VERSION = "serviceVersion"; 348 protected final static String TYPE = "type"; 349 protected final static String QUEUE = "queue"; 350 protected final static String PRIORITY = "priority"; 351 protected final static String RETRY_ATTEMPTS = "retryAttempts"; 352 protected final static String MILLIS_TO_LIVE = "millisToLive"; 353 protected final static String MESSAGE_EXCEPTION_HANDLER = "messageExceptionHandler"; 354 protected final static String BUS_SECURITY = "busSecurity"; 355 protected final static String CREDENTIALS_TYPE = "credentialsType"; 356 protected final static String CACHE_MANAGER = "cacheManager"; 357 } 358 359 static final class CredentialsTypeAdapter extends EnumStringAdapter<CredentialsType> { 360 361 protected Class<CredentialsType> getEnumClass() { 362 return CredentialsType.class; 363 } 364 365 } 366 367 }