diff options
author | donald.g.dunne | 2013-11-12 18:49:57 +0000 |
---|---|---|
committer | Roberto E. Escobar | 2013-11-25 23:45:39 +0000 |
commit | 198c363b0f08e6acbc6e490a5f19d63b80f08aa8 (patch) | |
tree | 66d6418fe116bf84216bd91860b7028f77314948 /plugins/org.eclipse.osee.ats.core.client | |
parent | c6e7bdc123b1acfe1a5bf1601c2d87f376173951 (diff) | |
download | org.eclipse.osee-198c363b0f08e6acbc6e490a5f19d63b80f08aa8.tar.gz org.eclipse.osee-198c363b0f08e6acbc6e490a5f19d63b80f08aa8.tar.xz org.eclipse.osee-198c363b0f08e6acbc6e490a5f19d63b80f08aa8.zip |
feature[ats_S5JDQ]: Create StateManager reader and writer
Change-Id: I2e6c249652a8e964f9b571c1c784bb437080d7d1
Diffstat (limited to 'plugins/org.eclipse.osee.ats.core.client')
14 files changed, 159 insertions, 127 deletions
diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/action/ActionManager.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/action/ActionManager.java index 9578a3c3f17..637f71ec4c4 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/action/ActionManager.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/action/ActionManager.java @@ -79,8 +79,9 @@ public class ActionManager { TeamWorkFlowArtifact teamWf = createTeamWorkflow(actionArt, teamDef, actionableItems, leads, changes, createdDate, createdBy, newActionListener); - teamWf.getStateMgr().writeToStore(); + AtsCore.getLogFactory().writeToStore(teamWf); + changes.add(teamWf); } // Notify listener of action creation @@ -151,7 +152,7 @@ public class ActionManager { } // Initialize state machine - teamArt.initializeNewStateMachine(assignees, createdDate, createdBy); + teamArt.initializeNewStateMachine(assignees, createdDate, createdBy, changes); // Notify listener of team creation if (newActionListener != null) { diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsCacheManagerUpdateListener.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsCacheManagerUpdateListener.java index 63c7078dec5..6372a92d7b1 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsCacheManagerUpdateListener.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsCacheManagerUpdateListener.java @@ -23,6 +23,7 @@ import org.eclipse.osee.ats.core.client.task.AbstractTaskableArtifact; import org.eclipse.osee.ats.core.client.task.TaskArtifact; import org.eclipse.osee.ats.core.client.team.TeamWorkFlowArtifact; import org.eclipse.osee.ats.core.client.util.AtsTaskCache; +import org.eclipse.osee.ats.core.client.workflow.AbstractWorkflowArtifact; import org.eclipse.osee.framework.core.model.type.RelationType; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.framework.logging.OseeLog; @@ -178,6 +179,10 @@ public class AtsCacheManagerUpdateListener implements IArtifactEventListener { AtsReviewCache.decache(artifact); } } + if (artifact instanceof AbstractWorkflowArtifact) { + AbstractWorkflowArtifact awa = (AbstractWorkflowArtifact) artifact; + awa.clearCaches(); + } } private void handleCachesForDeletedPurged(EventBasicGuidArtifact guidArt) throws OseeCoreException { diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/AtsAttributeResolverServiceImpl.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/AtsAttributeResolverServiceImpl.java index 6f6900f9624..4d42c660623 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/AtsAttributeResolverServiceImpl.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/AtsAttributeResolverServiceImpl.java @@ -26,6 +26,7 @@ import org.eclipse.osee.framework.core.model.type.AttributeType; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.framework.jdk.core.util.Strings; import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; import org.eclipse.osee.framework.skynet.core.artifact.Attribute; import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager; import org.eclipse.osee.framework.skynet.core.utility.AttributeTypeToXWidgetName; @@ -121,4 +122,20 @@ public class AtsAttributeResolverServiceImpl implements IAttributeResolver { public void deleteSoleAttribute(IAtsWorkItem workItem, IAttributeType attributeType) throws OseeCoreException { AtsClientService.get().getArtifact(workItem).deleteSoleAttribute(attributeType); } + + @Override + public <T> void setValue(IAtsWorkItem workItem, IAttribute<String> attr, IAttributeType attributeType, T value) throws OseeCoreException { + @SuppressWarnings("unchecked") + Attribute<T> attribute = (Attribute<T>) attr.getData(); + attribute.setValue(value); + } + + @Override + public <T> void deleteAttribute(IAtsWorkItem workItem, IAttribute<T> attr) throws OseeCoreException { + Artifact artifact = AtsClientService.get().getArtifact(workItem); + Attribute<?> attribute = (Attribute<?>) attr.getData(); + Attribute<?> attributeById = artifact.getAttributeById(attribute.getId(), false); + attributeById.delete(); + } + } diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/AtsWorkItemServiceImpl.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/AtsWorkItemServiceImpl.java index 0d5100e4876..c9e39bc80e0 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/AtsWorkItemServiceImpl.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/AtsWorkItemServiceImpl.java @@ -227,11 +227,6 @@ public class AtsWorkItemServiceImpl implements IAtsWorkItemService { } @Override - public void setInTransition(IAtsWorkItem workItem, boolean inTransition) { - ((AbstractWorkflowArtifact) workItem).setInTransition(inTransition); - } - - @Override public Collection<ITransitionListener> getTransitionListeners() { return TransitionListeners.getListeners(); } diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/DecisionReviewDefinitionManager.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/DecisionReviewDefinitionManager.java index 34bc23e6236..88b8324882e 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/DecisionReviewDefinitionManager.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/DecisionReviewDefinitionManager.java @@ -66,7 +66,7 @@ public class DecisionReviewDefinitionManager extends TransitionAdapter { } else { decArt = DecisionReviewManager.createNewDecisionReview(teamArt, revDef.getBlockingType(), revDef.getReviewTitle(), - revDef.getRelatedToState(), revDef.getDescription(), revDef.getOptions(), users, createdDate, createdBy); + revDef.getRelatedToState(), revDef.getDescription(), revDef.getOptions(), users, createdDate, createdBy, changes); } decArt.getLog().addLog(LogType.Note, null, String.format("Review [%s] auto-generated", revDef.getName()), AtsCore.getUserService().getCurrentUser().getUserId()); diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/DecisionReviewManager.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/DecisionReviewManager.java index 89ab2f929ab..41b3156e797 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/DecisionReviewManager.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/DecisionReviewManager.java @@ -133,7 +133,7 @@ public class DecisionReviewManager { public static DecisionReviewArtifact createNewDecisionReviewAndTransitionToDecision(TeamWorkFlowArtifact teamArt, String reviewTitle, String description, String againstState, ReviewBlockType reviewBlockType, Collection<IAtsDecisionReviewOption> options, List<? extends IAtsUser> assignees, Date createdDate, IAtsUser createdBy, IAtsChangeSet changes) throws OseeCoreException { DecisionReviewArtifact decRev = createNewDecisionReview(teamArt, reviewBlockType, reviewTitle, againstState, description, options, assignees, - createdDate, createdBy); + createdDate, createdBy, changes); changes.add(decRev); // transition to decision @@ -154,11 +154,12 @@ public class DecisionReviewManager { return decRev; } - public static DecisionReviewArtifact createNewDecisionReview(TeamWorkFlowArtifact teamArt, ReviewBlockType reviewBlockType, boolean againstCurrentState, Date createdDate, IAtsUser createdBy) throws OseeCoreException { + public static DecisionReviewArtifact createNewDecisionReview(TeamWorkFlowArtifact teamArt, ReviewBlockType reviewBlockType, boolean againstCurrentState, Date createdDate, IAtsUser createdBy, IAtsChangeSet changes) throws OseeCoreException { return createNewDecisionReview(teamArt, reviewBlockType, "Should we do this? Yes will require followup, No will not", againstCurrentState ? teamArt.getStateMgr().getCurrentStateName() : null, - "Enter description of the decision, if any", getDefaultDecisionReviewOptions(), null, createdDate, createdBy); + "Enter description of the decision, if any", getDefaultDecisionReviewOptions(), null, createdDate, createdBy, + changes); } public static List<IAtsDecisionReviewOption> getDefaultDecisionReviewOptions() throws OseeCoreException { @@ -184,13 +185,13 @@ public class DecisionReviewManager { return sb.toString(); } - public static DecisionReviewArtifact createNewDecisionReview(TeamWorkFlowArtifact teamArt, ReviewBlockType reviewBlockType, String title, String relatedToState, String description, Collection<IAtsDecisionReviewOption> options, List<? extends IAtsUser> assignees, Date createdDate, IAtsUser createdBy) throws OseeCoreException { + public static DecisionReviewArtifact createNewDecisionReview(TeamWorkFlowArtifact teamArt, ReviewBlockType reviewBlockType, String title, String relatedToState, String description, Collection<IAtsDecisionReviewOption> options, List<? extends IAtsUser> assignees, Date createdDate, IAtsUser createdBy, IAtsChangeSet changes) throws OseeCoreException { DecisionReviewArtifact decRev = (DecisionReviewArtifact) ArtifactTypeManager.addArtifact(AtsArtifactTypes.DecisionReview, AtsUtilCore.getAtsBranch(), title); // Initialize state machine - decRev.initializeNewStateMachine(assignees, createdDate, createdBy); + decRev.initializeNewStateMachine(assignees, createdDate, createdBy, changes); teamArt.addRelation(AtsRelationTypes.TeamWorkflowToReview_Review, decRev); if (Strings.isValid(relatedToState)) { @@ -204,7 +205,7 @@ public class DecisionReviewManager { decRev.setSoleAttributeFromString(AtsAttributeTypes.ReviewBlocks, reviewBlockType.name()); } AtsReviewCache.decache(teamArt); - + changes.add(decRev); return decRev; } diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/PeerToPeerReviewManager.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/PeerToPeerReviewManager.java index 906c7cf2f63..5f55b409b15 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/PeerToPeerReviewManager.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/PeerToPeerReviewManager.java @@ -26,7 +26,6 @@ import org.eclipse.osee.ats.api.workdef.ReviewBlockType; import org.eclipse.osee.ats.api.workdef.StateType; import org.eclipse.osee.ats.api.workflow.transition.TransitionOption; import org.eclipse.osee.ats.api.workflow.transition.TransitionResults; -import org.eclipse.osee.ats.core.AtsCore; 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; @@ -122,7 +121,6 @@ public class PeerToPeerReviewManager { reviewArt.setSoleAttributeValue(AtsAttributeTypes.Location, reviewMaterials); reviewArt.setSoleAttributeValue(AtsAttributeTypes.ReviewFormalType, ReviewFormalType.InFormal.name()); reviewArt.getStateMgr().updateMetrics(reviewArt.getStateDefinition(), stateHoursSpent, statePercentComplete, true); - AtsCore.getLogFactory().writeToStore(reviewArt); return Result.TrueResult; } @@ -142,7 +140,6 @@ public class PeerToPeerReviewManager { defectManager.saveToArtifact(reviewArt); } reviewArt.getStateMgr().updateMetrics(reviewArt.getStateDefinition(), stateHoursSpent, statePercentComplete, true); - AtsCore.getLogFactory().writeToStore(reviewArt); return Result.TrueResult; } @@ -183,7 +180,7 @@ public class PeerToPeerReviewManager { // Initialize state machine peerToPeerRev.setSoleAttributeValue(AtsAttributeTypes.WorkflowDefinition, workDefinition.getId()); - peerToPeerRev.initializeNewStateMachine(workDefinition, null, new Date(), createdBy); + peerToPeerRev.initializeNewStateMachine(null, new Date(), createdBy, changes); if (teamArt != null && againstState != null) { peerToPeerRev.setSoleAttributeValue(AtsAttributeTypes.RelatedToState, againstState); diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/ValidateReviewManager.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/ValidateReviewManager.java index 5ed1e27431f..8062a9f9324 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/ValidateReviewManager.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/ValidateReviewManager.java @@ -77,7 +77,7 @@ public class ValidateReviewManager { DecisionReviewManager.createNewDecisionReview( teamArt, isValidateReviewBlocking(teamArt.getStateDefinition()) ? ReviewBlockType.Transition : ReviewBlockType.None, - true, createdDate, createdBy); + true, createdDate, createdBy, changes); decRev.setName(VALIDATE_REVIEW_TITLE); decRev.setSoleAttributeValue(AtsAttributeTypes.DecisionReviewOptions, "No;Followup;" + getValidateReviewFollowupUsersStr(teamArt) + "\n" + "Yes;Completed;"); diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/AbstractTaskableArtifact.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/AbstractTaskableArtifact.java index f7c27d6b0c3..4ced79e6a8a 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/AbstractTaskableArtifact.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/AbstractTaskableArtifact.java @@ -99,28 +99,28 @@ public abstract class AbstractTaskableArtifact extends AbstractWorkflowArtifact return getRelatedArtifactsCount(AtsRelationTypes.TeamWfToTask_Task) > 0; } - public TaskArtifact createNewTask(String title, Date createdDate, IAtsUser createdBy) throws OseeCoreException { + public TaskArtifact createNewTask(String title, Date createdDate, IAtsUser createdBy, IAtsChangeSet changes) throws OseeCoreException { return createNewTask(Arrays.asList(AtsClientService.get().getUserAdmin().getCurrentUser()), title, createdDate, - createdBy, null); + createdBy, null, changes); } - public TaskArtifact createNewTask(List<? extends IAtsUser> assignees, String title, Date createdDate, IAtsUser createdBy) throws OseeCoreException { - return createNewTask(assignees, title, createdDate, createdBy, null); + public TaskArtifact createNewTask(List<? extends IAtsUser> assignees, String title, Date createdDate, IAtsUser createdBy, IAtsChangeSet changes) throws OseeCoreException { + return createNewTask(assignees, title, createdDate, createdBy, null, changes); } - public TaskArtifact createNewTask(String title, Date createdDate, IAtsUser createdBy, String relatedToState) throws OseeCoreException { + public TaskArtifact createNewTask(String title, Date createdDate, IAtsUser createdBy, String relatedToState, IAtsChangeSet changes) throws OseeCoreException { return createNewTask(Arrays.asList(AtsClientService.get().getUserAdmin().getCurrentUser()), title, createdDate, - createdBy, relatedToState); + createdBy, relatedToState, changes); } - public TaskArtifact createNewTask(List<? extends IAtsUser> assignees, String title, Date createdDate, IAtsUser createdBy, String relatedToState) throws OseeCoreException { + public TaskArtifact createNewTask(List<? extends IAtsUser> assignees, String title, Date createdDate, IAtsUser createdBy, String relatedToState, IAtsChangeSet changes) throws OseeCoreException { TaskArtifact taskArt = null; taskArt = (TaskArtifact) ArtifactTypeManager.addArtifact(AtsArtifactTypes.Task, AtsUtilCore.getAtsBranch(), title); addRelation(AtsRelationTypes.TeamWfToTask_Task, taskArt); taskArt.initializeNewStateMachine(assignees, new Date(), - (createdBy == null ? AtsClientService.get().getUserAdmin().getCurrentUser() : createdBy)); + (createdBy == null ? AtsClientService.get().getUserAdmin().getCurrentUser() : createdBy), changes); // Set parent state task is related to if set if (Strings.isValid(relatedToState)) { @@ -128,6 +128,7 @@ public abstract class AbstractTaskableArtifact extends AbstractWorkflowArtifact } AtsCore.getLogFactory().writeToStore(taskArt); AtsTaskCache.decache(this); + changes.add(taskArt); return taskArt; } @@ -255,7 +256,7 @@ public abstract class AbstractTaskableArtifact extends AbstractWorkflowArtifact public Collection<TaskArtifact> createTasks(List<String> titles, List<IAtsUser> assignees, Date createdDate, IAtsUser createdBy, String relatedToState, IAtsChangeSet changes) throws OseeCoreException { List<TaskArtifact> tasks = new ArrayList<TaskArtifact>(); for (String title : titles) { - TaskArtifact taskArt = createNewTask(title, createdDate, createdBy, relatedToState); + TaskArtifact taskArt = createNewTask(title, createdDate, createdBy, relatedToState, changes); if (assignees != null && !assignees.isEmpty()) { Set<IAtsUser> users = new HashSet<IAtsUser>(); // NOPMD by b0727536 on 9/29/10 8:51 AM for (IAtsUser art : assignees) { diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/createtasks/TaskOpCreate.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/createtasks/TaskOpCreate.java index dd446bb36ae..c5944405159 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/createtasks/TaskOpCreate.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/createtasks/TaskOpCreate.java @@ -40,7 +40,7 @@ public class TaskOpCreate extends AbstractTaskOp { String taskTitle = taskTitleProvider.getTaskTitle(metadata); Date creationDate = new Date(); - TaskArtifact taskArt = parentTeamWf.createNewTask(taskTitle, creationDate, AtsCoreUsers.SYSTEM_USER); + TaskArtifact taskArt = parentTeamWf.createNewTask(taskTitle, creationDate, AtsCoreUsers.SYSTEM_USER, changes); // create for Implement state regardless of which state workflow is in taskArt.setSoleAttributeValue(AtsAttributeTypes.RelatedToState, TeamState.Implement.getName()); diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/team/TeamWorkFlowArtifact.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/team/TeamWorkFlowArtifact.java index 53ffd53108b..e27663d2201 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/team/TeamWorkFlowArtifact.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/team/TeamWorkFlowArtifact.java @@ -46,7 +46,6 @@ import org.eclipse.osee.framework.logging.OseeLevel; import org.eclipse.osee.framework.logging.OseeLog; import org.eclipse.osee.framework.skynet.core.artifact.Artifact; import org.eclipse.osee.framework.skynet.core.artifact.IATSStateMachineArtifact; -import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction; /** * @author Donald G. Dunne @@ -79,19 +78,6 @@ public class TeamWorkFlowArtifact extends AbstractTaskableArtifact implements IA } @Override - public void saveSMA(SkynetTransaction transaction) { - super.saveSMA(transaction); - try { - ActionArtifact parentAction = getParentActionArtifact(); - ActionArtifactRollup rollup = new ActionArtifactRollup(parentAction); - rollup.resetAttributesOffChildren(); - parentAction.persist(transaction); - } catch (Exception ex) { - OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, "Can't reset Action parent of children", ex); - } - } - - @Override public void saveSMA(IAtsChangeSet changes) { super.saveSMA(changes); try { diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/util/AtsChangeSet.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/util/AtsChangeSet.java index 855a7fc31e6..af906490efb 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/util/AtsChangeSet.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/util/AtsChangeSet.java @@ -12,7 +12,11 @@ package org.eclipse.osee.ats.core.client.util; import java.util.HashSet; import java.util.Set; +import java.util.concurrent.CopyOnWriteArrayList; +import org.eclipse.osee.ats.api.IAtsWorkItem; import org.eclipse.osee.ats.api.util.IAtsChangeSet; +import org.eclipse.osee.ats.api.util.IExecuteListener; +import org.eclipse.osee.ats.core.AtsCore; import org.eclipse.osee.framework.core.util.Conditions; import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; @@ -27,6 +31,8 @@ public class AtsChangeSet implements IAtsChangeSet { private String comment; private final Set<Object> objects = new HashSet<Object>(); + private final Set<Object> deleteObjects = new HashSet<Object>(); + private final Set<IExecuteListener> listeners = new HashSet<IExecuteListener>(); public AtsChangeSet(String comment) { this.comment = comment; @@ -39,21 +45,61 @@ public class AtsChangeSet implements IAtsChangeSet { } @Override + public void addAll(Object... objects) throws OseeCoreException { + Conditions.checkNotNull(objects, "objects"); + for (Object obj : objects) { + if (obj == null) { + throw new OseeArgumentException("object can't be null"); + } + this.objects.add(obj); + } + } + + @Override + public void addToDelete(Object obj) throws OseeCoreException { + Conditions.checkNotNull(obj, "object"); + deleteObjects.add(obj); + } + + @Override public void execute() throws OseeCoreException { Conditions.checkNotNull(comment, "comment"); - Conditions.checkNotNullOrEmpty(objects, "objects"); + if (objects.isEmpty() && deleteObjects.isEmpty()) { + throw new OseeArgumentException("objects/deleteObjects cannot be empty"); + } SkynetTransaction transaction = TransactionManager.createTransaction(AtsUtilCore.getAtsBranchToken(), comment); + for (Object obj : new CopyOnWriteArrayList<Object>(objects)) { + if (obj instanceof IAtsWorkItem) { + IAtsWorkItem workItem = (IAtsWorkItem) obj; + if (workItem.getStateMgr().isDirty()) { + AtsCore.getStateFactory().writeToStore(workItem, this); + } + if (workItem.getLog().isDirty()) { + AtsCore.getLogFactory().writeToStore(workItem); + } + } + } for (Object obj : objects) { if (obj instanceof Artifact) { ((Artifact) obj).persist(transaction); } else { - throw new OseeArgumentException("Unhandled object type: " + obj); + throw new OseeArgumentException("ATsChangeSet: Unhandled object type: " + obj); + } + } + for (Object obj : deleteObjects) { + if (obj instanceof Artifact) { + ((Artifact) obj).deleteAndPersist(transaction); + } else { + throw new OseeArgumentException("ATsChangeSet: Unhandled deleteObject type: " + obj); } } transaction.execute(); - objects.clear(); + for (IExecuteListener listener : listeners) { + listener.changesStored(this); + } } + @Override public Set<Object> getObjects() { return objects; } @@ -65,6 +111,8 @@ public class AtsChangeSet implements IAtsChangeSet { @Override public void clear() { objects.clear(); + deleteObjects.clear(); + listeners.clear(); } public void addTo(SkynetTransaction transaction) throws OseeCoreException { @@ -83,8 +131,23 @@ public class AtsChangeSet implements IAtsChangeSet { this.comment = comment; } + @Override public boolean isEmpty() { - return objects.isEmpty(); + return objects.isEmpty() && deleteObjects.isEmpty(); } + @Override + public void addExecuteListener(IExecuteListener listener) { + Conditions.checkNotNull(listener, "listener"); + listeners.add(listener); + } + + public static void execute(String comment, Object object, Object... objects) throws OseeCoreException { + AtsChangeSet changes = new AtsChangeSet(comment); + changes.add(object); + for (Object obj : objects) { + changes.add(obj); + } + changes.execute(); + } } diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/AbstractWorkflowArtifact.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/AbstractWorkflowArtifact.java index e73826d436c..4aa8bd723b4 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/AbstractWorkflowArtifact.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/AbstractWorkflowArtifact.java @@ -31,9 +31,7 @@ import org.eclipse.osee.ats.api.workdef.IAtsWorkDefinition; import org.eclipse.osee.ats.api.workdef.IStateToken; import org.eclipse.osee.ats.api.workdef.IWorkDefinitionMatch; import org.eclipse.osee.ats.api.workdef.RuleDefinitionOption; -import org.eclipse.osee.ats.api.workdef.StateType; import org.eclipse.osee.ats.api.workflow.IAtsWorkData; -import org.eclipse.osee.ats.api.workflow.WorkStateProvider; import org.eclipse.osee.ats.api.workflow.log.IAtsLog; import org.eclipse.osee.ats.api.workflow.log.IAtsLogItem; import org.eclipse.osee.ats.api.workflow.log.LogType; @@ -49,12 +47,12 @@ import org.eclipse.osee.ats.core.client.review.ReviewManager; import org.eclipse.osee.ats.core.client.task.AbstractTaskableArtifact; 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.log.ArtifactLog; import org.eclipse.osee.ats.core.client.workflow.note.ArtifactNote; import org.eclipse.osee.ats.core.client.workflow.note.AtsNote; import org.eclipse.osee.ats.core.users.AtsCoreUsers; import org.eclipse.osee.ats.core.util.AtsObjects; import org.eclipse.osee.ats.core.util.PercentCompleteTotalUtil; +import org.eclipse.osee.ats.core.workflow.state.StateManagerUtility; import org.eclipse.osee.ats.core.workflow.transition.TransitionManager; import org.eclipse.osee.framework.access.AccessControlManager; import org.eclipse.osee.framework.core.data.IArtifactType; @@ -63,7 +61,6 @@ import org.eclipse.osee.framework.core.enums.PermissionEnum; import org.eclipse.osee.framework.core.model.Branch; import org.eclipse.osee.framework.core.services.CmAccessControl; import org.eclipse.osee.framework.core.services.HasCmAccessControl; -import org.eclipse.osee.framework.core.util.Conditions; import org.eclipse.osee.framework.core.util.IGroupExplorerProvider; import org.eclipse.osee.framework.core.util.Result; import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException; @@ -76,7 +73,6 @@ import org.eclipse.osee.framework.skynet.core.artifact.Artifact; import org.eclipse.osee.framework.skynet.core.artifact.Attribute; import org.eclipse.osee.framework.skynet.core.relation.RelationLink; import org.eclipse.osee.framework.skynet.core.relation.RelationManager; -import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; @@ -90,36 +86,24 @@ public abstract class AbstractWorkflowArtifact extends AbstractAtsArtifact imple protected AbstractWorkflowArtifact parentAwa; protected TeamWorkFlowArtifact parentTeamArt; protected ActionArtifact parentAction; - private final IAtsStateManager stateMgr; private IAtsLog atsLog; private int atsLogTransactionNumber; - private final AtsNote atsNote; - private boolean inTransition = false; + private int stateMgrTransactionNumber; + private AtsNote atsNote; + private IAtsStateManager stateMgr; private IAtsWorkData atsWorkData; public AbstractWorkflowArtifact(String guid, Branch branch, IArtifactType artifactType) throws OseeCoreException { super(guid, branch, artifactType); - stateMgr = AtsCore.getStateFactory().getStateManager(this); - atsNote = new AtsNote(new ArtifactNote(this)); } - public void initializeNewStateMachine(List<? extends IAtsUser> assignees, Date createdDate, IAtsUser createdBy) throws OseeCoreException { - IAtsWorkDefinition workDefinition = getWorkDefinition(); - Conditions.checkNotNull(workDefinition, "WorkDefinition"); - initializeNewStateMachine(workDefinition, assignees, createdDate, createdBy); - } - - public void initializeNewStateMachine(IAtsWorkDefinition workDefinition, List<? extends IAtsUser> assignees, Date createdDate, IAtsUser createdBy) throws OseeCoreException { - IAtsStateDefinition startState = workDefinition.getStartState(); - initializeNewStateMachine(startState, assignees, createdDate, createdBy); - } - - private void initializeNewStateMachine(IStateToken state, List<? extends IAtsUser> assignees, Date createdDate, IAtsUser createdBy) throws OseeCoreException { - getStateMgr().initializeStateMachine(state, assignees, - (createdBy == null ? AtsClientService.get().getUserAdmin().getCurrentUser() : createdBy)); + public void initializeNewStateMachine(List<? extends IAtsUser> assignees, Date createdDate, IAtsUser createdBy, IAtsChangeSet changes) throws OseeCoreException { + IAtsStateDefinition startState = getWorkDefinition().getStartState(); + StateManagerUtility.initializeStateMachine(getStateMgr(), startState, assignees, + (createdBy == null ? AtsClientService.get().getUserAdmin().getCurrentUser() : createdBy), changes); IAtsUser user = createdBy == null ? AtsClientService.get().getUserAdmin().getCurrentUser() : createdBy; setCreatedBy(user, true, createdDate); - TransitionManager.logStateStartedEvent(this, state, createdDate, user); + TransitionManager.logStateStartedEvent(this, startState, createdDate, user); } public boolean isTargetedVersionable() throws OseeCoreException { @@ -191,6 +175,8 @@ public abstract class AbstractWorkflowArtifact extends AbstractAtsArtifact imple parentAction = null; parentAwa = null; parentTeamArt = null; + stateMgr = null; + atsLog = null; } public void atsDelete(Set<Artifact> deleteArts, Map<Artifact, Object> allRelated) throws OseeCoreException { @@ -315,9 +301,8 @@ public abstract class AbstractWorkflowArtifact extends AbstractAtsArtifact imple for (Artifact artifact : artifacts) { if (artifact instanceof AbstractWorkflowArtifact) { AbstractWorkflowArtifact awa = (AbstractWorkflowArtifact) artifact; - Result result = awa.getStateMgr().isDirtyResult(); - if (result.isTrue()) { - return result; + if (awa.getStateMgr().isDirty()) { + return new Result(true, "StateMgr is dirty"); } if (awa.getLog().isDirty()) { return new Result(true, "Log is dirty"); @@ -351,28 +336,12 @@ public abstract class AbstractWorkflowArtifact extends AbstractAtsArtifact imple getSmaArtifactsOneLevel(this, artifacts); for (Artifact artifact : artifacts) { if (artifact instanceof AbstractWorkflowArtifact) { - ((AbstractWorkflowArtifact) artifact).getStateMgr().writeToStore(); - } - changes.add(artifact); - } - } catch (Exception ex) { - OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, "Can't save artifact " + getAtsId(), ex); - } - } - - public void saveSMA(SkynetTransaction transaction) { - try { - Set<Artifact> artifacts = new HashSet<Artifact>(); - getSmaArtifactsOneLevel(this, artifacts); - for (Artifact artifact : artifacts) { - if (artifact instanceof AbstractWorkflowArtifact) { AbstractWorkflowArtifact awa = (AbstractWorkflowArtifact) artifact; - awa.getStateMgr().writeToStore(); + changes.add(artifact); if (awa.getLog().isDirty()) { AtsCore.getLogFactory().writeToStore(awa); } } - artifact.persist(transaction); } } catch (Exception ex) { OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, "Can't save artifact " + getAtsId(), ex); @@ -385,10 +354,8 @@ public abstract class AbstractWorkflowArtifact extends AbstractAtsArtifact imple getSmaArtifactsOneLevel(this, artifacts); for (Artifact artifact : artifacts) { artifact.reloadAttributesAndRelations(); - if (artifact instanceof AbstractWorkflowArtifact) { - AbstractWorkflowArtifact awa = (AbstractWorkflowArtifact) artifact; - awa.getStateMgr().reload(); - awa.atsLog = null; + if (artifact instanceof IAtsWorkItem) { + AtsCore.getStateFactory().load((IAtsWorkItem) artifact, getStateMgr()); } } } catch (Exception ex) { @@ -439,13 +406,16 @@ public abstract class AbstractWorkflowArtifact extends AbstractAtsArtifact imple @Override public IAtsLog getLog() { if (atsLog == null || atsLogTransactionNumber != getTransactionNumber()) { - atsLog = AtsCore.getLogFactory().getLogLoaded(new ArtifactLog(this)); + atsLog = AtsCore.getLogFactory().getLogLoaded(this); atsLogTransactionNumber = getTransactionNumber(); } return atsLog; } public AtsNote getNotes() { + if (atsNote == null) { + atsNote = new AtsNote(new ArtifactNote(this)); + } return atsNote; } @@ -661,19 +631,19 @@ public abstract class AbstractWorkflowArtifact extends AbstractAtsArtifact imple return fromState; } - public boolean isInWork() throws OseeCoreException { - return getSoleAttributeValue(AtsAttributeTypes.CurrentStateType, "").equals(StateType.Working.name()); + public boolean isInWork() { + return getStateDefinition().getStateType().isWorkingState(); } - public boolean isCompleted() throws OseeCoreException { - return getSoleAttributeValue(AtsAttributeTypes.CurrentStateType, "").equals(StateType.Completed.name()); + public boolean isCompleted() { + return getStateDefinition().getStateType().isCompletedState(); } - public boolean isCancelled() throws OseeCoreException { - return getSoleAttributeValue(AtsAttributeTypes.CurrentStateType, "").equals(StateType.Cancelled.name()); + public boolean isCancelled() { + return getStateDefinition().getStateType().isCancelledState(); } - public boolean isCompletedOrCancelled() throws OseeCoreException { + public boolean isCompletedOrCancelled() { return isCompleted() || isCancelled(); } @@ -688,7 +658,7 @@ public abstract class AbstractWorkflowArtifact extends AbstractAtsArtifact imple } public boolean isAssigneeMe() throws OseeCoreException { - return stateMgr.getAssignees().contains(AtsClientService.get().getUserAdmin().getCurrentUser()); + return getStateMgr().getAssignees().contains(AtsClientService.get().getUserAdmin().getCurrentUser()); } /* @@ -704,23 +674,23 @@ public abstract class AbstractWorkflowArtifact extends AbstractAtsArtifact imple return transitionAssignees; } } - return stateMgr.getAssignees(); + return getStateMgr().getAssignees(); } public String getTransitionAssigneesStr() throws OseeCoreException { return AtsObjects.toString(";", getTransitionAssignees()); } - public boolean isInTransition() { - return inTransition; - } - - public void setInTransition(boolean inTransition) { - this.inTransition = inTransition; - } - @Override public IAtsStateManager getStateMgr() { + if (stateMgr == null || stateMgrTransactionNumber != getTransactionNumber()) { + try { + stateMgr = AtsCore.getStateFactory().getStateManager(this, isInDb()); + stateMgrTransactionNumber = getTransactionNumber(); + } catch (OseeCoreException ex) { + OseeLog.log(Activator.class, Level.SEVERE, ex); + } + } return stateMgr; } @@ -785,11 +755,6 @@ public abstract class AbstractWorkflowArtifact extends AbstractAtsArtifact imple } @Override - public WorkStateProvider getStateData() { - return stateMgr; - } - - @Override public IAtsWorkData getWorkData() { if (atsWorkData == null) { atsWorkData = new AtsWorkData(this); diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/transition/TransitionToOperation.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/transition/TransitionToOperation.java index ee4e887ba06..6f36e1f96f5 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/transition/TransitionToOperation.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/transition/TransitionToOperation.java @@ -47,21 +47,22 @@ public class TransitionToOperation extends AbstractOperation { changes.add(awa); } } - changes.execute(); + if (!changes.isEmpty()) { + changes.execute(); + } - changes.reset(helper.getName()); TransitionManager transitionMgr = new TransitionManager(helper); - results = transitionMgr.handleAll(); + results = transitionMgr.handleAllAndPersist(); if (results.isCancelled()) { return; - } else if (results.isEmpty()) { - changes.execute(); } } catch (OseeCoreException ex) { OseeLog.log(Activator.class, Level.SEVERE, ex); - results.addResult(new TransitionResult(String.format( - "Exception [%s] transitioning to [%s]. See error log for details.", ex.getLocalizedMessage(), - helper.getToStateName()))); + if (results != null) { + results.addResult(new TransitionResult(String.format( + "Exception [%s] transitioning to [%s]. See error log for details.", ex.getLocalizedMessage(), + helper.getToStateName()))); + } } } |