001    /**
002     * Copyright 2005-2012 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.kew.impl.extension;
017    
018    import org.apache.commons.lang.StringUtils;
019    import org.kuali.rice.core.api.CoreConstants;
020    import org.kuali.rice.core.api.exception.RiceIllegalArgumentException;
021    import org.kuali.rice.kew.api.extension.ExtensionDefinition;
022    import org.kuali.rice.kew.api.extension.ExtensionRepositoryService;
023    import org.kuali.rice.kew.rule.bo.RuleAttribute;
024    import org.kuali.rice.kew.rule.service.RuleAttributeService;
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.XmlRootElement;
032    import javax.xml.bind.annotation.XmlType;
033    import java.util.Collection;
034    
035    /**
036     * Reference implementation of the {@code ExtensionRepositoryService}.  This implementation
037     * essentially sits on top of the legacy "RuleAttribute" service.
038     *
039     * @author Kuali Rice Team (rice.collab@kuali.org)
040     */
041    @XmlRootElement(name = ExtensionRepositoryServiceImpl.Constants.ROOT_ELEMENT_NAME)
042    @XmlAccessorType(XmlAccessType.NONE)
043    @XmlType(name = ExtensionRepositoryServiceImpl.Constants.TYPE_NAME, propOrder = {
044        ExtensionRepositoryServiceImpl.Elements.RULE_ATTRIBUTE_SERVICE,
045        CoreConstants.CommonElements.FUTURE_ELEMENTS
046    })
047    public class ExtensionRepositoryServiceImpl implements ExtensionRepositoryService {
048    
049        /**
050         * Private constructor used only by JAXB.
051         *
052         */
053        private ExtensionRepositoryServiceImpl() {
054            this.ruleAttributeService = null;
055        }
056    
057        @XmlElement(name = Elements.RULE_ATTRIBUTE_SERVICE, required = true)
058        private RuleAttributeService ruleAttributeService;
059    
060    
061        @Override
062        public ExtensionDefinition getExtensionById(String id) throws RiceIllegalArgumentException {
063            if (StringUtils.isBlank(id)) {
064                throw new RiceIllegalArgumentException("id was null or blank");
065            }
066            RuleAttribute ruleAttribute = ruleAttributeService.findByRuleAttributeId(id);
067            return translateFromRuleAttribute(ruleAttribute);
068        }
069    
070    
071        @Override
072        public ExtensionDefinition getExtensionByName(String name) throws RiceIllegalArgumentException {
073            if (StringUtils.isBlank(name)) {
074                throw new RiceIllegalArgumentException("name was null or blank");
075            }
076            RuleAttribute ruleAttribute = ruleAttributeService.findByName(name);
077            return translateFromRuleAttribute(ruleAttribute);
078        }
079    
080        private ExtensionDefinition translateFromRuleAttribute(RuleAttribute ruleAttribute) {
081            return RuleAttribute.to(ruleAttribute);
082        }
083    
084        /**
085             * Sets the rule attribute service.
086             * @param ruleAttributeService the rule attribute service to set.
087             */
088        public void setRuleAttributeService(RuleAttributeService ruleAttributeService) {
089            this.ruleAttributeService = ruleAttributeService;
090        }
091    
092        @SuppressWarnings("unused")
093        @XmlAnyElement
094        private final Collection<Element> _futureElements = null;
095    
096        /**
097         * Defines some internal constants used on this class.
098         *
099         */
100        static class Constants {
101            static final String ROOT_ELEMENT_NAME = "extensionRepositoryService";
102            static final String TYPE_NAME = "ExtensionRepositoryService";
103        }
104    
105        /**
106         * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML.
107         *
108         */
109        static class Elements {
110            static final String RULE_ATTRIBUTE_SERVICE = "ruleAttributeService";
111        }
112    }