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.kew.engine.simulation;
017    
018    import java.io.Serializable;
019    
020    import org.apache.commons.lang.StringUtils;
021    import org.kuali.rice.kew.api.action.RoutingReportActionToTake;
022    import org.kuali.rice.kew.service.KEWServiceLocator;
023    import org.kuali.rice.kim.api.identity.Person;
024    import org.kuali.rice.kim.api.identity.principal.Principal;
025    import org.kuali.rice.kim.api.services.KimApiServiceLocator;
026    
027    /**
028     * An object represnting an action to take in the simulation engine
029     *
030     * @author Kuali Rice Team (rice.collab@kuali.org)
031     */
032    public class SimulationActionToTake implements Serializable {
033            private static final long serialVersionUID = 5212455086079117671L;
034    
035            private String actionToPerform;
036        private Person user;
037        private String nodeName;
038    
039        public SimulationActionToTake() {
040        }
041    
042            public String getActionToPerform() {
043                    return actionToPerform;
044            }
045    
046            public void setActionToPerform(String actionToPerform) {
047                    this.actionToPerform = actionToPerform;
048            }
049    
050            public String getNodeName() {
051                    return nodeName;
052            }
053    
054            public void setNodeName(String nodeName) {
055                    this.nodeName = nodeName;
056            }
057    
058            public Person getUser() {
059                    return user;
060            }
061    
062            public void setUser(Person user) {
063                    this.user = user;
064            }
065    
066        public static SimulationActionToTake from(RoutingReportActionToTake actionToTake) {
067            if (actionToTake == null) {
068                return null;
069            }
070            SimulationActionToTake simActionToTake = new SimulationActionToTake();
071            simActionToTake.setNodeName(actionToTake.getNodeName());
072            if (StringUtils.isBlank(actionToTake.getActionToPerform())) {
073                throw new IllegalArgumentException("ReportActionToTakeVO must contain an action taken code and does not");
074            }
075            simActionToTake.setActionToPerform(actionToTake.getActionToPerform());
076            if (actionToTake.getPrincipalId() == null) {
077                throw new IllegalArgumentException("ReportActionToTakeVO must contain a principalId and does not");
078            }
079            Principal kPrinc = KEWServiceLocator.getIdentityHelperService().getPrincipal(actionToTake.getPrincipalId());
080            Person user = KimApiServiceLocator.getPersonService().getPerson(kPrinc.getPrincipalId());
081            if (user == null) {
082                throw new IllegalStateException("Could not locate Person for the given id: " + actionToTake.getPrincipalId());
083            }
084            simActionToTake.setUser(user);
085            return simActionToTake;
086        }
087    
088    }