001 /** 002 * Copyright 2005-2013 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 java.util.ArrayList; 019 import java.util.Collections; 020 import java.util.List; 021 022 import javax.xml.bind.annotation.XmlAccessType; 023 import javax.xml.bind.annotation.XmlAccessorType; 024 import javax.xml.bind.annotation.XmlElement; 025 import javax.xml.bind.annotation.XmlElementWrapper; 026 import javax.xml.bind.annotation.XmlRootElement; 027 import javax.xml.bind.annotation.XmlType; 028 029 @XmlRootElement(name = JavaServiceConfiguration.Constants.ROOT_ELEMENT_NAME) 030 @XmlAccessorType(XmlAccessType.NONE) 031 @XmlType(name = JavaServiceConfiguration.Constants.TYPE_NAME, propOrder = { 032 JavaServiceConfiguration.Elements.SERVICE_INTERFACES 033 }) 034 public final class JavaServiceConfiguration extends AbstractServiceConfiguration { 035 036 private static final long serialVersionUID = -4226512121638441108L; 037 038 @XmlElementWrapper(name = Elements.SERVICE_INTERFACES, required = false) 039 @XmlElement(name = Elements.SERVICE_INTERFACE, required = false) 040 private final List<String> serviceInterfaces; 041 042 /** 043 * Private constructor used only by JAXB. 044 */ 045 private JavaServiceConfiguration() { 046 super(); 047 this.serviceInterfaces = null; 048 } 049 050 051 private JavaServiceConfiguration(Builder builder) { 052 super(builder); 053 this.serviceInterfaces = builder.getServiceInterfaces() == null ? null : new ArrayList<String>(builder.getServiceInterfaces()); 054 } 055 056 public static JavaServiceConfiguration fromServiceDefinition(JavaServiceDefinition javaServiceDefinition) { 057 return Builder.create(javaServiceDefinition).build(); 058 } 059 060 public List<String> getServiceInterfaces() { 061 if (this.serviceInterfaces == null) { 062 return Collections.emptyList(); 063 } 064 return Collections.unmodifiableList(this.serviceInterfaces); 065 } 066 067 public static final class Builder extends AbstractServiceConfiguration.Builder<JavaServiceConfiguration> { 068 069 private static final long serialVersionUID = 4300659121377259098L; 070 071 private List<String> serviceInterfaces; 072 073 public List<String> getServiceInterfaces() { 074 return serviceInterfaces; 075 } 076 077 public void setServiceInterfaces(List<String> serviceInterfaces) { 078 if (serviceInterfaces == null) { 079 this.serviceInterfaces = null; 080 } else { 081 this.serviceInterfaces = new ArrayList<String>(serviceInterfaces); 082 } 083 } 084 085 private Builder() {} 086 087 public static Builder create() { 088 return new Builder(); 089 } 090 091 public static Builder create(JavaServiceDefinition javaServiceDefinition) { 092 Builder builder = create(); 093 builder.copyServiceDefinitionProperties(javaServiceDefinition); 094 builder.setServiceInterfaces(javaServiceDefinition.getServiceInterfaces()); 095 return builder; 096 } 097 098 @Override 099 public JavaServiceConfiguration build() { 100 return new JavaServiceConfiguration(this); 101 } 102 103 } 104 105 /** 106 * Defines some internal constants used on this class. 107 */ 108 static class Constants { 109 final static String ROOT_ELEMENT_NAME = "javaServiceConfiguration"; 110 final static String TYPE_NAME = "JavaServiceConfigurationType"; 111 } 112 113 /** 114 * A private class which exposes constants which define the XML element names to use 115 * when this object is marshalled to XML. 116 */ 117 static class Elements { 118 protected final static String SERVICE_INTERFACES = "serviceInterfaces"; 119 protected final static String SERVICE_INTERFACE = "serviceInterface"; 120 } 121 122 }