001/**
002 * Copyright 2005-2016 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 */
016package org.kuali.rice.ksb.api.bus.support;
017
018import org.kuali.rice.core.api.util.ClassLoaderUtils;
019import org.kuali.rice.ksb.api.KsbApiConstants;
020import org.kuali.rice.ksb.api.bus.ServiceConfiguration;
021
022import java.util.ArrayList;
023import java.util.List;
024
025/**
026 * @author Kuali Rice Team (rice.collab@kuali.org)
027 */
028public class JavaServiceDefinition extends AbstractServiceDefinition {
029        
030        private List<String> serviceInterfaces = new ArrayList<String>();
031
032        @Override
033        public String getType() {
034                return KsbApiConstants.ServiceTypes.HTTP_INVOKER;
035        }
036        
037        public List<String> getServiceInterfaces() {
038                return this.serviceInterfaces;
039        }
040        public void setServiceInterfaces(List<String> serviceInterfaces) {
041                this.serviceInterfaces = serviceInterfaces;
042        }
043        public void setServiceInterface(String serviceName) {
044            this.serviceInterfaces.add(serviceName);
045        }
046        public String getServiceInterface() {
047                return this.serviceInterfaces.get(0);
048        }
049        
050        @Override
051        public void validate() {
052                super.validate();
053                if (this.serviceInterfaces == null || this.serviceInterfaces.isEmpty()) {
054                        Class<?>[] interfaces = ClassLoaderUtils.getInterfacesToProxy(getService(), null, null);
055                        for (Class<?> serviceInterfaceClass : interfaces) {
056                            this.serviceInterfaces.add(serviceInterfaceClass.getName());
057                        }
058                }
059        }
060        
061        protected ServiceConfiguration configure() {
062                return JavaServiceConfiguration.fromServiceDefinition(this);
063        }
064        
065        /**
066     * Defines some internal constants used on this class.
067     */
068    static class Constants {
069        final static String ROOT_ELEMENT_NAME = "javaServiceDefinition";
070        final static String TYPE_NAME = "JavaServiceDefinitionType";
071    }
072
073    /**
074     * A private class which exposes constants which define the XML element names to use
075     * when this object is marshalled to XML.
076     */
077    protected static class Elements {
078        protected final static String SERVICE_INTERFACES = "serviceInterfaces";
079        protected final static String SERVICE_INTERFACE = "serviceInterface";
080    }
081        
082}