Skip to main content
summaryrefslogblamecommitdiffstats
blob: 1bc4f2eee638664a87b179d35bd662837c9b59ec (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11










                                                                                 
                                                
 
                        
                            
                      
                                                      


                                                       
                                              
                                                           


                                                        
                                                                  




                                                                          




                                                                              
                                                                   
                                                   
                                                                           
                                                                            



                                                                                                                        
   

                          
                                      
 



                                                                                                     
                                        

                            

      

                                                                                                                       
      
                                                                                   
      
                                                                                                                                                                                                                                                                 
                                                                                                        
                             


                       

                                                                                                                       
                             

                       
                                                    

                                  
 
                                                                                   
                             



                       
                                                                                            
                                                          
                             




                               
                                                                                                                                                                                                 
                               

                                                                                                                
                                                    





                                                                                   


                                                                                                                                                                                                                                                              
                                                                

                                                                   


                          

                          
                                                                  
                                      
                                                         
          
                                             
       
                                                                                   
                                                                                                                         


                               
                                                                                                                                                                                                                                                            
                          
                                                                  
                                      
                                                         
          
                                             

                            


                                                                                
          
                                                 
       
                                                                                                                         


                               
                                                                                                                                                                                                    

                                                                                      

    

                                                                                                                                                                                                                                       
                                                                              

    
                                                                                                                                                                                                                                          
                                       

                                                                                                                                        


                                                                                                                                                                                                                                               







                                                                                                                           


                                                                                                                                                                                                                                                                             


                                                                                                      


                                                                                          







                                                                                                        


                                                                                                                


                                            
                                      


                           






                                                                                     
 
/*******************************************************************************
 * Copyright (c) 2004, 2007 Boeing.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Boeing - initial API and implementation
 *******************************************************************************/

package org.eclipse.osee.ats.core.client.review;

import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import org.eclipse.osee.ats.api.ai.IAtsActionableItem;
import org.eclipse.osee.ats.api.data.AtsArtifactTypes;
import org.eclipse.osee.ats.api.data.AtsAttributeTypes;
import org.eclipse.osee.ats.api.data.AtsRelationTypes;
import org.eclipse.osee.ats.api.user.IAtsUser;
import org.eclipse.osee.ats.api.workdef.IAtsWorkDefinition;
import org.eclipse.osee.ats.api.workdef.IStateToken;
import org.eclipse.osee.ats.api.workdef.ReviewBlockType;
import org.eclipse.osee.ats.api.workdef.StateType;
import org.eclipse.osee.ats.core.client.internal.AtsClientService;
import org.eclipse.osee.ats.core.client.review.defect.ReviewDefectItem;
import org.eclipse.osee.ats.core.client.review.defect.ReviewDefectManager;
import org.eclipse.osee.ats.core.client.review.role.UserRole;
import org.eclipse.osee.ats.core.client.review.role.UserRoleManager;
import org.eclipse.osee.ats.core.client.team.TeamWorkFlowArtifact;
import org.eclipse.osee.ats.core.client.util.AtsUtilCore;
import org.eclipse.osee.ats.core.client.workflow.transition.TransitionHelper;
import org.eclipse.osee.ats.core.client.workflow.transition.TransitionManager;
import org.eclipse.osee.ats.core.client.workflow.transition.TransitionOption;
import org.eclipse.osee.ats.core.client.workflow.transition.TransitionResults;
import org.eclipse.osee.framework.core.exception.OseeCoreException;
import org.eclipse.osee.framework.core.util.Result;
import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;

/**
 * Methods in support of programatically transitioning the Peer Review Workflow through it's states. Only to be used for
 * the DefaultReviewWorkflow of Prepare->Review->Complete
 * 
 * @author Donald G. Dunne
 */
public class PeerToPeerReviewManager {

   public static String getDefaultReviewTitle(TeamWorkFlowArtifact teamArt) {
      return "Review \"" + teamArt.getArtifactTypeName() + "\" titled \"" + teamArt.getName() + "\"";
   }

   protected PeerToPeerReviewManager() {
      // private constructor
   }

   /**
    * Quickly transition to a state with minimal metrics and data entered. Should only be used for automated transition
    * for things such as developmental testing and demos.
    * 
    * @param user User to transition to OR null if should use user of current state
    */
   public static Result transitionTo(PeerToPeerReviewArtifact reviewArt, PeerToPeerReviewState toState, Collection<UserRole> roles, Collection<ReviewDefectItem> defects, IAtsUser user, boolean popup, SkynetTransaction transaction) throws OseeCoreException {
      Result result = setPrepareStateData(popup, reviewArt, roles, "DoThis.java", 100, .2, transaction);
      if (result.isFalse()) {
         return result;
      }
      result =
         transitionToState(PeerToPeerReviewState.Review.getStateType(), popup, reviewArt, PeerToPeerReviewState.Review,
            transaction);
      if (result.isFalse()) {
         return result;
      }
      if (toState == PeerToPeerReviewState.Review) {
         return Result.TrueResult;
      }

      result = setReviewStateData(reviewArt, roles, defects, 100, .2, transaction);
      if (result.isFalse()) {
         return result;
      }

      result =
         transitionToState(PeerToPeerReviewState.Completed.getStateType(), popup, reviewArt,
            PeerToPeerReviewState.Completed, transaction);
      if (result.isFalse()) {
         return result;
      }
      return Result.TrueResult;
   }

   private static Result transitionToState(StateType StateType, boolean popup, PeerToPeerReviewArtifact reviewArt, IStateToken toState, SkynetTransaction transaction) throws OseeCoreException {
      TransitionHelper helper =
         new TransitionHelper("Transition to " + toState.getName(), Arrays.asList(reviewArt), toState.getName(),
            Arrays.asList(reviewArt.getStateMgr().getAssignees().iterator().next()), null,
            TransitionOption.OverrideAssigneeCheck);
      TransitionManager transitionMgr = new TransitionManager(helper, transaction);
      TransitionResults results = transitionMgr.handleAll();
      if (results.isEmpty()) {
         return Result.TrueResult;
      }
      return new Result("Error transitioning [%s]", results);
   }

   public static Result setPrepareStateData(boolean popup, PeerToPeerReviewArtifact reviewArt, Collection<UserRole> roles, String reviewMaterials, int statePercentComplete, double stateHoursSpent, SkynetTransaction transaction) throws OseeCoreException {
      if (!reviewArt.isInState(PeerToPeerReviewState.Prepare)) {
         Result result = new Result("Action not in Prepare state");
         if (result.isFalse() && popup) {
            return result;
         }

      }
      if (roles != null) {
         UserRoleManager roleMgr = new UserRoleManager(reviewArt);
         for (UserRole role : roles) {
            roleMgr.addOrUpdateUserRole(role, reviewArt);
         }
         roleMgr.saveToArtifact(transaction);
      }
      reviewArt.setSoleAttributeValue(AtsAttributeTypes.Location, reviewMaterials);
      reviewArt.getStateMgr().updateMetrics(reviewArt.getStateDefinition(), stateHoursSpent, statePercentComplete, true);
      return Result.TrueResult;
   }

   public static Result setReviewStateData(PeerToPeerReviewArtifact reviewArt, Collection<UserRole> roles, Collection<ReviewDefectItem> defects, int statePercentComplete, double stateHoursSpent, SkynetTransaction transaction) throws OseeCoreException {
      if (roles != null) {
         UserRoleManager roleMgr = new UserRoleManager(reviewArt);
         for (UserRole role : roles) {
            roleMgr.addOrUpdateUserRole(role, reviewArt);
         }
         roleMgr.saveToArtifact(transaction);
      }
      if (defects != null) {
         ReviewDefectManager defectManager = new ReviewDefectManager(reviewArt);
         for (ReviewDefectItem defect : defects) {
            defectManager.addOrUpdateDefectItem(defect);
         }
         defectManager.saveToArtifact(reviewArt);
      }
      reviewArt.getStateMgr().updateMetrics(reviewArt.getStateDefinition(), stateHoursSpent, statePercentComplete, true);
      return Result.TrueResult;
   }

   public static PeerToPeerReviewArtifact createNewPeerToPeerReview(TeamWorkFlowArtifact teamArt, String reviewTitle, String againstState, SkynetTransaction transaction) throws OseeCoreException {
      return createNewPeerToPeerReview(teamArt, reviewTitle, againstState, new Date(),
         AtsClientService.get().getUserAdmin().getCurrentUser(), transaction);
   }

   public static PeerToPeerReviewArtifact createNewPeerToPeerReview(IAtsWorkDefinition workDefinition, TeamWorkFlowArtifact teamArt, String reviewTitle, String againstState, SkynetTransaction transaction) throws OseeCoreException {
      return createNewPeerToPeerReview(workDefinition, teamArt, reviewTitle, againstState, new Date(),
         AtsClientService.get().getUserAdmin().getCurrentUser(), transaction);
   }

   public static PeerToPeerReviewArtifact createNewPeerToPeerReview(TeamWorkFlowArtifact teamArt, String reviewTitle, String againstState, Date createdDate, IAtsUser createdBy, SkynetTransaction transaction) throws OseeCoreException {
      return createNewPeerToPeerReview(
         AtsClientService.get().getWorkDefinitionAdmin().getWorkDefinitionForPeerToPeerReviewNotYetCreated(teamArt).getWorkDefinition(),
         teamArt, reviewTitle, againstState, createdDate, createdBy, transaction);
   }

   public static PeerToPeerReviewArtifact createNewPeerToPeerReview(IAtsActionableItem actionableItem, String reviewTitle, String againstState, Date createdDate, IAtsUser createdBy, SkynetTransaction transaction) throws OseeCoreException {
      PeerToPeerReviewArtifact peerArt =
         createNewPeerToPeerReview(
            AtsClientService.get().getWorkDefinitionAdmin().getWorkDefinitionForPeerToPeerReviewNotYetCreatedAndStandalone(
               actionableItem).getWorkDefinition(), null, reviewTitle, againstState, createdDate, createdBy,
            transaction);
      peerArt.getActionableItemsDam().addActionableItem(actionableItem);
      peerArt.persist(transaction);
      return peerArt;
   }

   public static PeerToPeerReviewArtifact createNewPeerToPeerReview(IAtsWorkDefinition workDefinition, TeamWorkFlowArtifact teamArt, String reviewTitle, String againstState, Date createdDate, IAtsUser createdBy, SkynetTransaction transaction) throws OseeCoreException {
      PeerToPeerReviewArtifact peerToPeerRev =
         (PeerToPeerReviewArtifact) ArtifactTypeManager.addArtifact(AtsArtifactTypes.PeerToPeerReview,
            AtsUtilCore.getAtsBranch(), reviewTitle == null ? "Peer to Peer Review" : reviewTitle);

      if (teamArt != null) {
         teamArt.addRelation(AtsRelationTypes.TeamWorkflowToReview_Review, peerToPeerRev);
      }

      // Initialize state machine
      peerToPeerRev.setSoleAttributeValue(AtsAttributeTypes.WorkflowDefinition, workDefinition.getId());
      peerToPeerRev.initializeNewStateMachine(workDefinition, null, new Date(), createdBy);

      if (teamArt != null && againstState != null) {
         peerToPeerRev.setSoleAttributeValue(AtsAttributeTypes.RelatedToState, againstState);
      }
      peerToPeerRev.setSoleAttributeValue(AtsAttributeTypes.ReviewBlocks, ReviewBlockType.None.name());
      peerToPeerRev.setSoleAttributeValue(AtsAttributeTypes.ReviewFormalType, ReviewFormalType.InFormal.name());
      if (transaction != null) {
         peerToPeerRev.persist(transaction);
      }
      AtsReviewCache.decache(teamArt);
      return peerToPeerRev;
   }

   public static boolean isStandAlongReview(Object object) throws OseeCoreException {
      if (object instanceof PeerToPeerReviewArtifact) {
         PeerToPeerReviewArtifact peerArt = (PeerToPeerReviewArtifact) object;
         return peerArt.isStandAloneReview();
      }
      return false;
   }
}

Back to the top