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.kew.api.action;
017
018import javax.xml.bind.annotation.XmlAccessType;
019import javax.xml.bind.annotation.XmlAccessorType;
020import javax.xml.bind.annotation.XmlElement;
021import javax.xml.bind.annotation.XmlRootElement;
022import javax.xml.bind.annotation.XmlType;
023
024import org.apache.commons.lang.StringUtils;
025
026@XmlRootElement(name = AdHocToPrincipal.Constants.ROOT_ELEMENT_NAME)
027@XmlAccessorType(XmlAccessType.NONE)
028@XmlType(name = AdHocToPrincipal.Constants.TYPE_NAME, propOrder = {
029                AdHocToPrincipal.Elements.TARGET_PRINCIPAL_ID
030})
031public final class AdHocToPrincipal extends AdHocCommand {
032
033        private static final long serialVersionUID = -4512561589558793736L;
034
035        @XmlElement(name = Elements.TARGET_PRINCIPAL_ID, required = true)
036        private final String targetPrincipalId;
037
038        private AdHocToPrincipal() {
039                this.targetPrincipalId = null;
040        }
041        
042        private AdHocToPrincipal(Builder builder) {
043                super(builder);
044                this.targetPrincipalId = builder.getTargetPrincipalId();
045        }
046
047        public String getTargetPrincipalId() {
048                return targetPrincipalId;
049        }
050        
051        public static final class Builder extends AdHocCommand.Builder<AdHocToPrincipal> {
052                
053                private static final long serialVersionUID = 5288681963619747957L;
054
055                private String targetPrincipalId;
056                
057                private Builder(ActionRequestType actionRequested, String nodeName, String targetPrincipalId) {
058                        super(actionRequested, nodeName);
059                        setTargetPrincipalId(targetPrincipalId);
060                }
061                
062                public static Builder create(ActionRequestType actionRequested, String nodeName, String targetPrincipalId) {
063                        return new Builder(actionRequested, nodeName, targetPrincipalId);
064                }
065                
066                public String getTargetPrincipalId() {
067                        return targetPrincipalId;
068                }
069                
070                public void setTargetPrincipalId(String targetPrincipalId) {
071                        if (StringUtils.isBlank(targetPrincipalId)) {
072                                throw new IllegalArgumentException("targetPrincipalId was null or blank");
073                        }
074                        this.targetPrincipalId = targetPrincipalId;
075                }
076                
077                @Override
078                public AdHocToPrincipal build() {
079                        return new AdHocToPrincipal(this);
080                }
081
082        }
083        
084        /**
085     * Defines some internal constants used on this class.
086     */
087    static class Constants {
088        final static String ROOT_ELEMENT_NAME = "adHocPrincipal_v2_1_3";
089        final static String TYPE_NAME = "AdHocToPrincipalType_v2_1_3";
090    }
091    
092    /**
093     * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML.
094     */
095    static class Elements {
096        final static String TARGET_PRINCIPAL_ID = "targetPrincipalId";
097    }
098
099        
100}