diff options
author | rbrooks | 2010-08-29 08:19:34 +0000 |
---|---|---|
committer | rbrooks | 2010-08-29 08:19:34 +0000 |
commit | 59f9aeec1800ce305d6075446f99269385af9c9b (patch) | |
tree | 2f1a2b4b28561e7afc90fd9501e056a4edf43cd8 /plugins/org.eclipse.osee.ats/src | |
parent | d8dfd93647951a8fd2dfe74bf6fadb2697f08543 (diff) | |
parent | 9279bf9b85bf1ceb07098e922625e00996c085de (diff) | |
download | org.eclipse.osee-0.9.5.v201008280938.tar.gz org.eclipse.osee-0.9.5.v201008280938.tar.xz org.eclipse.osee-0.9.5.v201008280938.zip |
0.9.5 Branch Creation0.9.5.v201008280938
Diffstat (limited to 'plugins/org.eclipse.osee.ats/src')
184 files changed, 22060 insertions, 22101 deletions
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/access/AtsObjectContextId.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/access/AtsObjectContextId.java index 6359ce1a7d5..5286ed9b665 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/access/AtsObjectContextId.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/access/AtsObjectContextId.java @@ -27,7 +27,7 @@ public final class AtsObjectContextId { // @formatter:on private AtsObjectContextId() { - // + // } } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/DuplicateWorkflowAction.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/DuplicateWorkflowAction.java index f637067682a..f7da1500e7d 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/DuplicateWorkflowAction.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/DuplicateWorkflowAction.java @@ -1,49 +1,49 @@ -/*******************************************************************************
- * 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.actions;
-
-import java.util.Collection;
-import org.eclipse.jface.action.Action;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.operation.DuplicateWorkflowBlam;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
-import org.eclipse.osee.framework.ui.skynet.blam.BlamEditor;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-
-/**
- * @author Donald G. Dunne
- */
-public class DuplicateWorkflowAction extends Action {
-
- private final Collection<TeamWorkFlowArtifact> teams;
-
- public DuplicateWorkflowAction(Collection<TeamWorkFlowArtifact> teams) {
- super(
- teams.size() == 1 ? "Duplicate this \"" + teams.iterator().next().getArtifactTypeName() + "\" Workflow" : "Duplicate Workflows");
- this.teams = teams;
- setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.DUPLICATE));
- }
-
- @Override
- public void run() {
- try {
- DuplicateWorkflowBlam blamOperation = new DuplicateWorkflowBlam();
- blamOperation.setDefaultTeamWorkflows(teams);
- BlamEditor.edit(blamOperation);
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
-}
+/******************************************************************************* + * 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.actions; + +import java.util.Collection; +import org.eclipse.jface.action.Action; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.operation.DuplicateWorkflowBlam; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.skynet.FrameworkImage; +import org.eclipse.osee.framework.ui.skynet.blam.BlamEditor; +import org.eclipse.osee.framework.ui.swt.ImageManager; + +/** + * @author Donald G. Dunne + */ +public class DuplicateWorkflowAction extends Action { + + private final Collection<TeamWorkFlowArtifact> teams; + + public DuplicateWorkflowAction(Collection<TeamWorkFlowArtifact> teams) { + super( + teams.size() == 1 ? "Duplicate this \"" + teams.iterator().next().getArtifactTypeName() + "\" Workflow" : "Duplicate Workflows"); + this.teams = teams; + setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.DUPLICATE)); + } + + @Override + public void run() { + try { + DuplicateWorkflowBlam blamOperation = new DuplicateWorkflowBlam(); + blamOperation.setDefaultTeamWorkflows(teams); + BlamEditor.edit(blamOperation); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/DuplicateWorkflowViaWorldEditorAction.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/DuplicateWorkflowViaWorldEditorAction.java index 9bf9ba67c35..08e14f7bafb 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/DuplicateWorkflowViaWorldEditorAction.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/DuplicateWorkflowViaWorldEditorAction.java @@ -1,57 +1,57 @@ -/*******************************************************************************
- * 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.actions;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.operation.DuplicateWorkflowBlam;
-import org.eclipse.osee.ats.world.WorldEditor;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
-import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
-import org.eclipse.osee.framework.ui.skynet.blam.BlamEditor;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-
-/**
- * @author Donald G. Dunne
- */
-public class DuplicateWorkflowViaWorldEditorAction extends Action {
-
- private final WorldEditor worldEditor;
-
- public DuplicateWorkflowViaWorldEditorAction(WorldEditor worldEditor) {
- this.worldEditor = worldEditor;
- setText("Duplicate Team Workflow");
- }
-
- @Override
- public ImageDescriptor getImageDescriptor() {
- return ImageManager.getImageDescriptor(FrameworkImage.DUPLICATE);
- }
-
- @Override
- public void run() {
- if (worldEditor.getWorldComposite().getXViewer().getSelectedTeamWorkflowArtifacts().isEmpty()) {
- AWorkbench.popup("ERROR", "Must select one or more team workflows to duplicate");
- return;
- }
- try {
- DuplicateWorkflowBlam blamOperation = new DuplicateWorkflowBlam();
- blamOperation.setDefaultTeamWorkflows(worldEditor.getWorldComposite().getXViewer().getSelectedTeamWorkflowArtifacts());
- BlamEditor.edit(blamOperation);
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
-}
+/******************************************************************************* + * 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.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.operation.DuplicateWorkflowBlam; +import org.eclipse.osee.ats.world.WorldEditor; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.plugin.util.AWorkbench; +import org.eclipse.osee.framework.ui.skynet.FrameworkImage; +import org.eclipse.osee.framework.ui.skynet.blam.BlamEditor; +import org.eclipse.osee.framework.ui.swt.ImageManager; + +/** + * @author Donald G. Dunne + */ +public class DuplicateWorkflowViaWorldEditorAction extends Action { + + private final WorldEditor worldEditor; + + public DuplicateWorkflowViaWorldEditorAction(WorldEditor worldEditor) { + this.worldEditor = worldEditor; + setText("Duplicate Team Workflow"); + } + + @Override + public ImageDescriptor getImageDescriptor() { + return ImageManager.getImageDescriptor(FrameworkImage.DUPLICATE); + } + + @Override + public void run() { + if (worldEditor.getWorldComposite().getXViewer().getSelectedTeamWorkflowArtifacts().isEmpty()) { + AWorkbench.popup("ERROR", "Must select one or more team workflows to duplicate"); + return; + } + try { + DuplicateWorkflowBlam blamOperation = new DuplicateWorkflowBlam(); + blamOperation.setDefaultTeamWorkflows(worldEditor.getWorldComposite().getXViewer().getSelectedTeamWorkflowArtifacts()); + BlamEditor.edit(blamOperation); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/EditActionableItemsAction.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/EditActionableItemsAction.java index de4e52eafcd..8a4e9bf712a 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/EditActionableItemsAction.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/EditActionableItemsAction.java @@ -1,44 +1,44 @@ -/*******************************************************************************
- * 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.actions;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-
-/**
- * @author Donald G. Dunne
- */
-public class EditActionableItemsAction extends Action {
-
- private final TeamWorkFlowArtifact teamWf;
-
- public EditActionableItemsAction(TeamWorkFlowArtifact teamWf) {
- super("Add/Update Actionable Items/Workflows");
- this.teamWf = teamWf;
- setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.ACTIONABLE_ITEM));
- }
-
- @Override
- public void run() {
- try {
- AtsUtil.editActionableItems(teamWf.getParentActionArtifact());
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
-}
+/******************************************************************************* + * 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.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.swt.ImageManager; + +/** + * @author Donald G. Dunne + */ +public class EditActionableItemsAction extends Action { + + private final TeamWorkFlowArtifact teamWf; + + public EditActionableItemsAction(TeamWorkFlowArtifact teamWf) { + super("Add/Update Actionable Items/Workflows"); + this.teamWf = teamWf; + setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.ACTIONABLE_ITEM)); + } + + @Override + public void run() { + try { + AtsUtil.editActionableItems(teamWf.getParentActionArtifact()); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/ISelectedAtsArtifacts.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/ISelectedAtsArtifacts.java index 26c1b4fe2fe..4f4b6d33848 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/ISelectedAtsArtifacts.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/ISelectedAtsArtifacts.java @@ -1,27 +1,27 @@ -/*******************************************************************************
- * 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.actions;
-
-import java.util.List;
-import java.util.Set;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-
-/**
- * @author Donald G. Dunne
- */
-public interface ISelectedAtsArtifacts {
-
- public Set<? extends Artifact> getSelectedSMAArtifacts() throws OseeCoreException;
-
- public List<Artifact> getSelectedAtsArtifacts() throws OseeCoreException;
-
-}
+/******************************************************************************* + * 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.actions; + +import java.util.List; +import java.util.Set; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; + +/** + * @author Donald G. Dunne + */ +public interface ISelectedAtsArtifacts { + + public Set<? extends Artifact> getSelectedSMAArtifacts() throws OseeCoreException; + + public List<Artifact> getSelectedAtsArtifacts() throws OseeCoreException; + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/ImportTasksViaSimpleList.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/ImportTasksViaSimpleList.java index 4679767b179..b355162e34a 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/ImportTasksViaSimpleList.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/ImportTasksViaSimpleList.java @@ -1,52 +1,52 @@ -/*******************************************************************************
- * 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.actions;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.operation.ImportTasksFromSimpleList;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
-import org.eclipse.osee.framework.ui.skynet.blam.BlamEditor;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-import org.eclipse.swt.widgets.Listener;
-
-/**
- * @author Donald G. Dunne
- */
-public class ImportTasksViaSimpleList extends Action {
-
- private final TaskableStateMachineArtifact taskableArt;
- private final Listener listener;
-
- public ImportTasksViaSimpleList(TaskableStateMachineArtifact taskableArt, Listener listener) {
- this.taskableArt = taskableArt;
- this.listener = listener;
- setText("Import Tasks via simple list");
- setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.IMPORT));
- }
-
- @Override
- public void run() {
- try {
- ImportTasksFromSimpleList blamOperation = new ImportTasksFromSimpleList();
- blamOperation.setTaskableStateMachineArtifact(taskableArt);
- BlamEditor.edit(blamOperation);
- if (listener != null) {
- listener.notify();
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-}
+/******************************************************************************* + * 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.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.operation.ImportTasksFromSimpleList; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.skynet.FrameworkImage; +import org.eclipse.osee.framework.ui.skynet.blam.BlamEditor; +import org.eclipse.osee.framework.ui.swt.ImageManager; +import org.eclipse.swt.widgets.Listener; + +/** + * @author Donald G. Dunne + */ +public class ImportTasksViaSimpleList extends Action { + + private final TaskableStateMachineArtifact taskableArt; + private final Listener listener; + + public ImportTasksViaSimpleList(TaskableStateMachineArtifact taskableArt, Listener listener) { + this.taskableArt = taskableArt; + this.listener = listener; + setText("Import Tasks via simple list"); + setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.IMPORT)); + } + + @Override + public void run() { + try { + ImportTasksFromSimpleList blamOperation = new ImportTasksFromSimpleList(); + blamOperation.setTaskableStateMachineArtifact(taskableArt); + BlamEditor.edit(blamOperation); + if (listener != null) { + listener.notify(); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/ImportTasksViaSpreadsheet.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/ImportTasksViaSpreadsheet.java index c58a5cd1cd9..24c2862443a 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/ImportTasksViaSpreadsheet.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/ImportTasksViaSpreadsheet.java @@ -1,52 +1,52 @@ -/*******************************************************************************
- * 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.actions;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.operation.ImportTasksFromSpreadsheet;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
-import org.eclipse.osee.framework.ui.skynet.blam.BlamEditor;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-import org.eclipse.swt.widgets.Listener;
-
-/**
- * @author Donald G. Dunne
- */
-public class ImportTasksViaSpreadsheet extends Action {
-
- private final TaskableStateMachineArtifact taskableArt;
- private final Listener listener;
-
- public ImportTasksViaSpreadsheet(TaskableStateMachineArtifact taskableArt, Listener listener) {
- this.taskableArt = taskableArt;
- this.listener = listener;
- setText("Import Tasks via spreadsheet");
- setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.IMPORT));
- }
-
- @Override
- public void run() {
- try {
- ImportTasksFromSpreadsheet blamOperation = new ImportTasksFromSpreadsheet();
- blamOperation.setTaskableStateMachineArtifact(taskableArt);
- BlamEditor.edit(blamOperation);
- if (listener != null) {
- listener.notify();
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-}
+/******************************************************************************* + * 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.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.operation.ImportTasksFromSpreadsheet; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.skynet.FrameworkImage; +import org.eclipse.osee.framework.ui.skynet.blam.BlamEditor; +import org.eclipse.osee.framework.ui.swt.ImageManager; +import org.eclipse.swt.widgets.Listener; + +/** + * @author Donald G. Dunne + */ +public class ImportTasksViaSpreadsheet extends Action { + + private final TaskableStateMachineArtifact taskableArt; + private final Listener listener; + + public ImportTasksViaSpreadsheet(TaskableStateMachineArtifact taskableArt, Listener listener) { + this.taskableArt = taskableArt; + this.listener = listener; + setText("Import Tasks via spreadsheet"); + setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.IMPORT)); + } + + @Override + public void run() { + try { + ImportTasksFromSpreadsheet blamOperation = new ImportTasksFromSpreadsheet(); + blamOperation.setTaskableStateMachineArtifact(taskableArt); + BlamEditor.edit(blamOperation); + if (listener != null) { + listener.notify(); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/NewGoal.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/NewGoal.java index 4f8e006d33c..469cbbc9b81 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/NewGoal.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/NewGoal.java @@ -1,52 +1,52 @@ -/*******************************************************************************
- * 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.actions;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.ats.artifact.GoalArtifact;
-import org.eclipse.osee.ats.config.AtsBulkLoad;
-import org.eclipse.osee.ats.editor.SMAEditor;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-
-/**
- * @author Donald G. Dunne
- */
-public class NewGoal extends Action {
-
- public NewGoal() {
- super("Create New Goal");
- setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.GOAL_NEW));
- setToolTipText("Create New Goal");
- }
-
- @Override
- public void run() {
- super.run();
- AtsBulkLoad.loadConfig(true);
- try {
- EntryDialog ed = new EntryDialog("New Goal", "Enter Title");
- if (ed.open() == 0) {
- String title = ed.getEntry();
- GoalArtifact goalArt = GoalArtifact.createGoal(title);
- goalArt.persist();
- SMAEditor.editArtifact(goalArt);
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
+/******************************************************************************* + * 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.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.artifact.GoalArtifact; +import org.eclipse.osee.ats.config.AtsBulkLoad; +import org.eclipse.osee.ats.editor.SMAEditor; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog; +import org.eclipse.osee.framework.ui.swt.ImageManager; + +/** + * @author Donald G. Dunne + */ +public class NewGoal extends Action { + + public NewGoal() { + super("Create New Goal"); + setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.GOAL_NEW)); + setToolTipText("Create New Goal"); + } + + @Override + public void run() { + super.run(); + AtsBulkLoad.loadConfig(true); + try { + EntryDialog ed = new EntryDialog("New Goal", "Enter Title"); + if (ed.open() == 0) { + String title = ed.getEntry(); + GoalArtifact goalArt = GoalArtifact.createGoal(title); + goalArt.persist(); + SMAEditor.editArtifact(goalArt); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenInAtsWorkflowEditor.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenInAtsWorkflowEditor.java index d7ada1bd8fb..a1527c018a3 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenInAtsWorkflowEditor.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenInAtsWorkflowEditor.java @@ -1,70 +1,70 @@ -/*******************************************************************************
- * 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.actions;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.osee.ats.AtsOpenOption;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-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.ui.skynet.FrameworkImage;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-
-/**
- * @author Donald G. Dunne
- */
-public class OpenInAtsWorkflowEditor extends Action {
-
- private final ISelectedAtsArtifacts selectedAtsArtifacts;
-
- public OpenInAtsWorkflowEditor(String name, ISelectedAtsArtifacts selectedAtsArtifacts) {
- this.selectedAtsArtifacts = selectedAtsArtifacts;
- setText(name);
- }
-
- public OpenInAtsWorkflowEditor(ISelectedAtsArtifacts selectedAtsArtifacts) {
- this("Open in ATS Workflow Editor", selectedAtsArtifacts);
- }
-
- public void performOpen() {
- try {
- for (Artifact art : selectedAtsArtifacts.getSelectedSMAArtifacts()) {
- AtsUtil.openATSAction(art, AtsOpenOption.OpenAll);
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
- public void updateEnablement() {
- try {
- setEnabled(selectedAtsArtifacts.getSelectedSMAArtifacts().size() > 0);
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- setEnabled(false);
- }
- }
-
- @Override
- public void run() {
- performOpen();
- }
-
- @Override
- public ImageDescriptor getImageDescriptor() {
- return ImageManager.getImageDescriptor(FrameworkImage.WORKFLOW);
- }
-
-}
+/******************************************************************************* + * 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.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.osee.ats.AtsOpenOption; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +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.ui.skynet.FrameworkImage; +import org.eclipse.osee.framework.ui.swt.ImageManager; + +/** + * @author Donald G. Dunne + */ +public class OpenInAtsWorkflowEditor extends Action { + + private final ISelectedAtsArtifacts selectedAtsArtifacts; + + public OpenInAtsWorkflowEditor(String name, ISelectedAtsArtifacts selectedAtsArtifacts) { + this.selectedAtsArtifacts = selectedAtsArtifacts; + setText(name); + } + + public OpenInAtsWorkflowEditor(ISelectedAtsArtifacts selectedAtsArtifacts) { + this("Open in ATS Workflow Editor", selectedAtsArtifacts); + } + + public void performOpen() { + try { + for (Artifact art : selectedAtsArtifacts.getSelectedSMAArtifacts()) { + AtsUtil.openATSAction(art, AtsOpenOption.OpenAll); + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + + public void updateEnablement() { + try { + setEnabled(selectedAtsArtifacts.getSelectedSMAArtifacts().size() > 0); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + setEnabled(false); + } + } + + @Override + public void run() { + performOpen(); + } + + @Override + public ImageDescriptor getImageDescriptor() { + return ImageManager.getImageDescriptor(FrameworkImage.WORKFLOW); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenInAtsWorldAction.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenInAtsWorldAction.java index 0583798f23f..112c451b2f7 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenInAtsWorldAction.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenInAtsWorldAction.java @@ -1,67 +1,67 @@ -/*******************************************************************************
- * 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.actions;
-
-import java.util.Arrays;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.ats.artifact.ActionArtifact;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.world.WorldEditor;
-import org.eclipse.osee.ats.world.WorldEditorSimpleProvider;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-
-/**
- * @author Donald G. Dunne
- */
-public class OpenInAtsWorldAction extends Action {
-
- private final StateMachineArtifact sma;
-
- public OpenInAtsWorldAction(StateMachineArtifact sma) {
- this.sma = sma;
- setText("Open in ATS World Editor");
- }
-
- public void performOpen() {
- try {
- if (sma.isTeamWorkflow()) {
- ActionArtifact actionArt = ((TeamWorkFlowArtifact) sma).getParentActionArtifact();
- WorldEditor.open(new WorldEditorSimpleProvider("Action " + actionArt.getHumanReadableId(),
- Arrays.asList(actionArt)));
- return;
- } else {
- WorldEditor.open(new WorldEditorSimpleProvider(sma.getArtifactTypeName() + ": " + sma.getHumanReadableId(),
- Arrays.asList(sma)));
- return;
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
- @Override
- public void run() {
- performOpen();
- }
-
- @Override
- public ImageDescriptor getImageDescriptor() {
- return ImageManager.getImageDescriptor(AtsImage.GLOBE);
- }
-
-}
+/******************************************************************************* + * 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.actions; + +import java.util.Arrays; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.artifact.ActionArtifact; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.world.WorldEditor; +import org.eclipse.osee.ats.world.WorldEditorSimpleProvider; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.swt.ImageManager; + +/** + * @author Donald G. Dunne + */ +public class OpenInAtsWorldAction extends Action { + + private final StateMachineArtifact sma; + + public OpenInAtsWorldAction(StateMachineArtifact sma) { + this.sma = sma; + setText("Open in ATS World Editor"); + } + + public void performOpen() { + try { + if (sma.isTeamWorkflow()) { + ActionArtifact actionArt = ((TeamWorkFlowArtifact) sma).getParentActionArtifact(); + WorldEditor.open(new WorldEditorSimpleProvider("Action " + actionArt.getHumanReadableId(), + Arrays.asList(actionArt))); + return; + } else { + WorldEditor.open(new WorldEditorSimpleProvider(sma.getArtifactTypeName() + ": " + sma.getHumanReadableId(), + Arrays.asList(sma))); + return; + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + + @Override + public void run() { + performOpen(); + } + + @Override + public ImageDescriptor getImageDescriptor() { + return ImageManager.getImageDescriptor(AtsImage.GLOBE); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenNewAtsTaskEditorAction.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenNewAtsTaskEditorAction.java index 7d3c084b66a..b1278fe6305 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenNewAtsTaskEditorAction.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenNewAtsTaskEditorAction.java @@ -1,56 +1,56 @@ -/*******************************************************************************
- * 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.actions;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.nebula.widgets.xviewer.customize.CustomizeData;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.task.ITaskEditorProvider;
-import org.eclipse.osee.ats.task.TaskEditor;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-
-/**
- * @author Donald G. Dunne
- */
-public class OpenNewAtsTaskEditorAction extends Action {
-
- private final IOpenNewAtsTaskEditorHandler openNewAtsTaskEditorHandler;
-
- public OpenNewAtsTaskEditorAction(IOpenNewAtsTaskEditorHandler openNewAtsTaskEditorHandler) {
- this.openNewAtsTaskEditorHandler = openNewAtsTaskEditorHandler;
- setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.TASK));
- setToolTipText("Open New ATS Task Editor");
- }
-
- public interface IOpenNewAtsTaskEditorHandler {
- public ITaskEditorProvider getTaskEditorProviderCopy() throws OseeCoreException;
-
- public CustomizeData getCustomizeDataCopy() throws OseeCoreException;
- }
-
- @Override
- public void run() {
- try {
- ITaskEditorProvider provider = openNewAtsTaskEditorHandler.getTaskEditorProviderCopy();
- provider.setCustomizeData(openNewAtsTaskEditorHandler.getCustomizeDataCopy());
- provider.setTableLoadOptions(TableLoadOption.NoUI);
- TaskEditor.open(provider);
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
-}
+/******************************************************************************* + * 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.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.nebula.widgets.xviewer.customize.CustomizeData; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.task.ITaskEditorProvider; +import org.eclipse.osee.ats.task.TaskEditor; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption; +import org.eclipse.osee.framework.ui.swt.ImageManager; + +/** + * @author Donald G. Dunne + */ +public class OpenNewAtsTaskEditorAction extends Action { + + private final IOpenNewAtsTaskEditorHandler openNewAtsTaskEditorHandler; + + public OpenNewAtsTaskEditorAction(IOpenNewAtsTaskEditorHandler openNewAtsTaskEditorHandler) { + this.openNewAtsTaskEditorHandler = openNewAtsTaskEditorHandler; + setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.TASK)); + setToolTipText("Open New ATS Task Editor"); + } + + public interface IOpenNewAtsTaskEditorHandler { + public ITaskEditorProvider getTaskEditorProviderCopy() throws OseeCoreException; + + public CustomizeData getCustomizeDataCopy() throws OseeCoreException; + } + + @Override + public void run() { + try { + ITaskEditorProvider provider = openNewAtsTaskEditorHandler.getTaskEditorProviderCopy(); + provider.setCustomizeData(openNewAtsTaskEditorHandler.getCustomizeDataCopy()); + provider.setTableLoadOptions(TableLoadOption.NoUI); + TaskEditor.open(provider); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenNewAtsTaskEditorSelected.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenNewAtsTaskEditorSelected.java index a734518306a..a760f912ac6 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenNewAtsTaskEditorSelected.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenNewAtsTaskEditorSelected.java @@ -1,62 +1,62 @@ -/*******************************************************************************
- * 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.actions;
-
-import java.util.ArrayList;
-import org.eclipse.jface.action.Action;
-import org.eclipse.nebula.widgets.xviewer.customize.CustomizeData;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.task.TaskEditor;
-import org.eclipse.osee.ats.task.TaskEditorSimpleProvider;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-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.ui.plugin.util.AWorkbench;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-
-/**
- * @author Donald G. Dunne
- */
-public class OpenNewAtsTaskEditorSelected extends Action {
-
- private final IOpenNewAtsTaskEditorSelectedHandler openNewAtsTaskEditorSelectedHandler;
-
- public OpenNewAtsTaskEditorSelected(IOpenNewAtsTaskEditorSelectedHandler openNewAtsTaskEditorSelectedHandler) {
- this.openNewAtsTaskEditorSelectedHandler = openNewAtsTaskEditorSelectedHandler;
- setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.TASK_SELECTED));
- setToolTipText("Open Selected in ATS Task Editor");
- }
-
- public interface IOpenNewAtsTaskEditorSelectedHandler {
- public CustomizeData getCustomizeDataCopy() throws OseeCoreException;
-
- public ArrayList<? extends Artifact> getSelectedArtifacts() throws OseeCoreException;
-
- }
-
- @Override
- public void run() {
- try {
- if (openNewAtsTaskEditorSelectedHandler.getSelectedArtifacts().isEmpty()) {
- AWorkbench.popup("ERROR", "Select items to open");
- return;
- }
- TaskEditor.open(new TaskEditorSimpleProvider("Tasks",
- openNewAtsTaskEditorSelectedHandler.getSelectedArtifacts(),
- openNewAtsTaskEditorSelectedHandler.getCustomizeDataCopy()));
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
-}
+/******************************************************************************* + * 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.actions; + +import java.util.ArrayList; +import org.eclipse.jface.action.Action; +import org.eclipse.nebula.widgets.xviewer.customize.CustomizeData; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.task.TaskEditor; +import org.eclipse.osee.ats.task.TaskEditorSimpleProvider; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +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.ui.plugin.util.AWorkbench; +import org.eclipse.osee.framework.ui.swt.ImageManager; + +/** + * @author Donald G. Dunne + */ +public class OpenNewAtsTaskEditorSelected extends Action { + + private final IOpenNewAtsTaskEditorSelectedHandler openNewAtsTaskEditorSelectedHandler; + + public OpenNewAtsTaskEditorSelected(IOpenNewAtsTaskEditorSelectedHandler openNewAtsTaskEditorSelectedHandler) { + this.openNewAtsTaskEditorSelectedHandler = openNewAtsTaskEditorSelectedHandler; + setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.TASK_SELECTED)); + setToolTipText("Open Selected in ATS Task Editor"); + } + + public interface IOpenNewAtsTaskEditorSelectedHandler { + public CustomizeData getCustomizeDataCopy() throws OseeCoreException; + + public ArrayList<? extends Artifact> getSelectedArtifacts() throws OseeCoreException; + + } + + @Override + public void run() { + try { + if (openNewAtsTaskEditorSelectedHandler.getSelectedArtifacts().isEmpty()) { + AWorkbench.popup("ERROR", "Select items to open"); + return; + } + TaskEditor.open(new TaskEditorSimpleProvider("Tasks", + openNewAtsTaskEditorSelectedHandler.getSelectedArtifacts(), + openNewAtsTaskEditorSelectedHandler.getCustomizeDataCopy())); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenNewAtsWorldEditorAction.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenNewAtsWorldEditorAction.java index 3c5ddc99208..a396ed99e64 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenNewAtsWorldEditorAction.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenNewAtsWorldEditorAction.java @@ -1,56 +1,56 @@ -/*******************************************************************************
- * 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.actions;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.nebula.widgets.xviewer.customize.CustomizeData;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.world.IWorldEditorProvider;
-import org.eclipse.osee.ats.world.WorldEditor;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-
-/**
- * @author Donald G. Dunne
- */
-public class OpenNewAtsWorldEditorAction extends Action {
-
- private final IOpenNewAtsWorldEditorHandler openNewAtsWorldEditorHandler;
-
- public OpenNewAtsWorldEditorAction(IOpenNewAtsWorldEditorHandler openNewAtsWorldEditorHandler) {
- this.openNewAtsWorldEditorHandler = openNewAtsWorldEditorHandler;
- setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.GLOBE));
- setToolTipText("Open in ATS World Editor");
- }
-
- public interface IOpenNewAtsWorldEditorHandler {
- public IWorldEditorProvider getWorldEditorProviderCopy() throws OseeCoreException;
-
- public CustomizeData getCustomizeDataCopy() throws OseeCoreException;
- }
-
- @Override
- public void run() {
- try {
- IWorldEditorProvider provider = openNewAtsWorldEditorHandler.getWorldEditorProviderCopy();
- provider.setCustomizeData(openNewAtsWorldEditorHandler.getCustomizeDataCopy());
- provider.setTableLoadOptions(TableLoadOption.NoUI);
- WorldEditor.open(provider);
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
-}
+/******************************************************************************* + * 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.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.nebula.widgets.xviewer.customize.CustomizeData; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.world.IWorldEditorProvider; +import org.eclipse.osee.ats.world.WorldEditor; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption; +import org.eclipse.osee.framework.ui.swt.ImageManager; + +/** + * @author Donald G. Dunne + */ +public class OpenNewAtsWorldEditorAction extends Action { + + private final IOpenNewAtsWorldEditorHandler openNewAtsWorldEditorHandler; + + public OpenNewAtsWorldEditorAction(IOpenNewAtsWorldEditorHandler openNewAtsWorldEditorHandler) { + this.openNewAtsWorldEditorHandler = openNewAtsWorldEditorHandler; + setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.GLOBE)); + setToolTipText("Open in ATS World Editor"); + } + + public interface IOpenNewAtsWorldEditorHandler { + public IWorldEditorProvider getWorldEditorProviderCopy() throws OseeCoreException; + + public CustomizeData getCustomizeDataCopy() throws OseeCoreException; + } + + @Override + public void run() { + try { + IWorldEditorProvider provider = openNewAtsWorldEditorHandler.getWorldEditorProviderCopy(); + provider.setCustomizeData(openNewAtsWorldEditorHandler.getCustomizeDataCopy()); + provider.setTableLoadOptions(TableLoadOption.NoUI); + WorldEditor.open(provider); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenNewAtsWorldEditorSelectedAction.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenNewAtsWorldEditorSelectedAction.java index af3178133cc..3d157c9f258 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenNewAtsWorldEditorSelectedAction.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/OpenNewAtsWorldEditorSelectedAction.java @@ -1,63 +1,63 @@ -/*******************************************************************************
- * 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.actions;
-
-import java.util.ArrayList;
-import org.eclipse.jface.action.Action;
-import org.eclipse.nebula.widgets.xviewer.customize.CustomizeData;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.world.WorldEditor;
-import org.eclipse.osee.ats.world.WorldEditorSimpleProvider;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-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.ui.plugin.util.AWorkbench;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-
-/**
- * @author Donald G. Dunne
- */
-public class OpenNewAtsWorldEditorSelectedAction extends Action {
-
- private final IOpenNewAtsWorldEditorSelectedHandler openNewAtsWorldEditorSelectedHandler;
-
- public OpenNewAtsWorldEditorSelectedAction(IOpenNewAtsWorldEditorSelectedHandler openNewAtsWorldEditorSelectedHandler) {
- this.openNewAtsWorldEditorSelectedHandler = openNewAtsWorldEditorSelectedHandler;
- setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.GLOBE_SELECT));
- setToolTipText("Open Selected in ATS World Editor");
- }
-
- public interface IOpenNewAtsWorldEditorSelectedHandler {
- public CustomizeData getCustomizeDataCopy() throws OseeCoreException;
-
- public ArrayList<Artifact> getSelectedArtifacts() throws OseeCoreException;
-
- }
-
- @Override
- public void run() {
- try {
- if (openNewAtsWorldEditorSelectedHandler.getSelectedArtifacts().isEmpty()) {
- AWorkbench.popup("ERROR", "Select items to open");
- return;
- }
- WorldEditor.open(new WorldEditorSimpleProvider("ATS World",
- openNewAtsWorldEditorSelectedHandler.getSelectedArtifacts(),
- openNewAtsWorldEditorSelectedHandler.getCustomizeDataCopy(), (TableLoadOption[]) null));
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
-}
+/******************************************************************************* + * 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.actions; + +import java.util.ArrayList; +import org.eclipse.jface.action.Action; +import org.eclipse.nebula.widgets.xviewer.customize.CustomizeData; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.world.WorldEditor; +import org.eclipse.osee.ats.world.WorldEditorSimpleProvider; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +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.ui.plugin.util.AWorkbench; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption; +import org.eclipse.osee.framework.ui.swt.ImageManager; + +/** + * @author Donald G. Dunne + */ +public class OpenNewAtsWorldEditorSelectedAction extends Action { + + private final IOpenNewAtsWorldEditorSelectedHandler openNewAtsWorldEditorSelectedHandler; + + public OpenNewAtsWorldEditorSelectedAction(IOpenNewAtsWorldEditorSelectedHandler openNewAtsWorldEditorSelectedHandler) { + this.openNewAtsWorldEditorSelectedHandler = openNewAtsWorldEditorSelectedHandler; + setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.GLOBE_SELECT)); + setToolTipText("Open Selected in ATS World Editor"); + } + + public interface IOpenNewAtsWorldEditorSelectedHandler { + public CustomizeData getCustomizeDataCopy() throws OseeCoreException; + + public ArrayList<Artifact> getSelectedArtifacts() throws OseeCoreException; + + } + + @Override + public void run() { + try { + if (openNewAtsWorldEditorSelectedHandler.getSelectedArtifacts().isEmpty()) { + AWorkbench.popup("ERROR", "Select items to open"); + return; + } + WorldEditor.open(new WorldEditorSimpleProvider("ATS World", + openNewAtsWorldEditorSelectedHandler.getSelectedArtifacts(), + openNewAtsWorldEditorSelectedHandler.getCustomizeDataCopy(), (TableLoadOption[]) null)); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/ShowMergeManagerAction.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/ShowMergeManagerAction.java index 6de1eb025d2..517c16efe0b 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/ShowMergeManagerAction.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/ShowMergeManagerAction.java @@ -1,53 +1,53 @@ -/*******************************************************************************
- * 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.actions;
-
-import java.util.logging.Level;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-
-/**
- * @author Donald G. Dunne
- */
-public class ShowMergeManagerAction extends Action {
-
- private final TeamWorkFlowArtifact teamArt;
-
- // Since this service is only going to be added for the Implement state, Location.AllState will
- // work
- public ShowMergeManagerAction(TeamWorkFlowArtifact teamArt) {
- this.teamArt = teamArt;
- setText("Show Merge Manager");
- setToolTipText(getText());
- try {
- setEnabled(teamArt.getBranchMgr().isWorkingBranchInWork() || teamArt.getBranchMgr().isCommittedBranchExists());
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- @Override
- public void run() {
- teamArt.getBranchMgr().showMergeManager();
- }
-
- @Override
- public ImageDescriptor getImageDescriptor() {
- return ImageManager.getImageDescriptor(FrameworkImage.OUTGOING_MERGED);
- }
-
-}
+/******************************************************************************* + * 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.actions; + +import java.util.logging.Level; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.skynet.FrameworkImage; +import org.eclipse.osee.framework.ui.swt.ImageManager; + +/** + * @author Donald G. Dunne + */ +public class ShowMergeManagerAction extends Action { + + private final TeamWorkFlowArtifact teamArt; + + // Since this service is only going to be added for the Implement state, Location.AllState will + // work + public ShowMergeManagerAction(TeamWorkFlowArtifact teamArt) { + this.teamArt = teamArt; + setText("Show Merge Manager"); + setToolTipText(getText()); + try { + setEnabled(teamArt.getBranchMgr().isWorkingBranchInWork() || teamArt.getBranchMgr().isCommittedBranchExists()); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + @Override + public void run() { + teamArt.getBranchMgr().showMergeManager(); + } + + @Override + public ImageDescriptor getImageDescriptor() { + return ImageManager.getImageDescriptor(FrameworkImage.OUTGOING_MERGED); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/TaskAddAction.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/TaskAddAction.java index e2057e21ee5..de3cbadba5e 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/TaskAddAction.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/TaskAddAction.java @@ -1,41 +1,41 @@ -/*******************************************************************************
- * 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.actions;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-
-/**
- * @author Donald G. Dunne
- */
-public class TaskAddAction extends Action {
-
- private final ITaskAddActionHandler taskAddActionHandler;
-
- public TaskAddAction(ITaskAddActionHandler taskAddActionHandler) {
- super("Create New Task");
- this.taskAddActionHandler = taskAddActionHandler;
- setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.NEW_TASK));
- setToolTipText(getText());
- }
-
- public static interface ITaskAddActionHandler {
- public void taskAddActionHandler();
- }
-
- @Override
- public void run() {
- super.run();
- taskAddActionHandler.taskAddActionHandler();
- }
-
+/******************************************************************************* + * 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.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.framework.ui.swt.ImageManager; + +/** + * @author Donald G. Dunne + */ +public class TaskAddAction extends Action { + + private final ITaskAddActionHandler taskAddActionHandler; + + public TaskAddAction(ITaskAddActionHandler taskAddActionHandler) { + super("Create New Task"); + this.taskAddActionHandler = taskAddActionHandler; + setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.NEW_TASK)); + setToolTipText(getText()); + } + + public static interface ITaskAddActionHandler { + public void taskAddActionHandler(); + } + + @Override + public void run() { + super.run(); + taskAddActionHandler.taskAddActionHandler(); + } + }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/TaskDeleteAction.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/TaskDeleteAction.java index 7f705190235..336bb6ec143 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/TaskDeleteAction.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/TaskDeleteAction.java @@ -1,41 +1,41 @@ -/*******************************************************************************
- * 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.actions;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-
-/**
- * @author Donald G. Dunne
- */
-public class TaskDeleteAction extends Action {
-
- private final ITaskDeleteActionHandler taskDeleteActionHandler;
-
- public TaskDeleteAction(ITaskDeleteActionHandler taskDeleteActionHandler) {
- super("Delete Task");
- this.taskDeleteActionHandler = taskDeleteActionHandler;
- setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.X_RED));
- setToolTipText(getText());
- }
-
- public static interface ITaskDeleteActionHandler {
- public void taskDeleteActionHandler();
- }
-
- @Override
- public void run() {
- super.run();
- taskDeleteActionHandler.taskDeleteActionHandler();
- }
-
+/******************************************************************************* + * 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.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.osee.framework.ui.skynet.FrameworkImage; +import org.eclipse.osee.framework.ui.swt.ImageManager; + +/** + * @author Donald G. Dunne + */ +public class TaskDeleteAction extends Action { + + private final ITaskDeleteActionHandler taskDeleteActionHandler; + + public TaskDeleteAction(ITaskDeleteActionHandler taskDeleteActionHandler) { + super("Delete Task"); + this.taskDeleteActionHandler = taskDeleteActionHandler; + setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.X_RED)); + setToolTipText(getText()); + } + + public static interface ITaskDeleteActionHandler { + public void taskDeleteActionHandler(); + } + + @Override + public void run() { + super.run(); + taskDeleteActionHandler.taskDeleteActionHandler(); + } + }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/ArtifactSelectWizardPage.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/ArtifactSelectWizardPage.java index f2e6120417b..e9e3e69f336 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/ArtifactSelectWizardPage.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/ArtifactSelectWizardPage.java @@ -1,223 +1,223 @@ -/*******************************************************************************
- * 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.actions.wizard;
-
-import java.util.logging.Level;
-import org.eclipse.jface.viewers.ArrayContentProvider;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ILabelProviderListener;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerSorter;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.core.model.type.ArtifactType;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
-import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
-import org.eclipse.osee.framework.ui.swt.Displays;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-
-public class ArtifactSelectWizardPage extends WizardPage {
-
- private ListViewer artTypeList;
- private ListViewer artList;
- private Artifact selectedArtifact;
- private boolean showArtData = false;
-
- public ArtifactSelectWizardPage() {
- super("Select an Artifact");
- }
-
- @Override
- public void createControl(Composite parent) {
- setTitle("Select an Artifact");
-
- Composite composite = new Composite(parent, SWT.NONE);
- GridLayout gl = new GridLayout();
- gl.numColumns = 2;
- composite.setLayout(gl);
- GridData gd = new GridData(GridData.FILL, GridData.FILL, true, true);
- composite.setLayoutData(gd);
-
- Composite leftComp = new Composite(composite, SWT.NONE);
-
- leftComp.setLayout(new GridLayout());
- gd = new GridData(GridData.FILL, GridData.FILL, true, true);
- leftComp.setLayoutData(gd);
-
- new Label(leftComp, SWT.NONE).setText("Artifact Type");
-
- try {
- artTypeList = new ListViewer(leftComp, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL);
- artTypeList.setContentProvider(new ArrayContentProvider());
- artTypeList.setLabelProvider(new ArtTypeLabelProvider());
-
- gd = new GridData(GridData.FILL, GridData.FILL, true, true);
- gd.heightHint = 300;
- gd.widthHint = 200;
- artTypeList.getControl().setLayoutData(gd);
- artTypeList.setInput(ArtifactTypeManager.getValidArtifactTypes(AtsUtil.getAtsBranch()));
- artTypeList.addSelectionChangedListener(new ISelectionChangedListener() {
- @Override
- public void selectionChanged(SelectionChangedEvent event) {
- IStructuredSelection selection = (IStructuredSelection) event.getSelection();
- ArtifactType desc = (ArtifactType) selection.getFirstElement();
- try {
- artList.setInput(ArtifactQuery.getArtifactListFromType(desc, AtsUtil.getAtsBranch()));
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- });
- artTypeList.setSorter(new ViewerSorter() {
- @SuppressWarnings("unchecked")
- @Override
- public int compare(Viewer viewer, Object e1, Object e2) {
- return getComparator().compare(((ArtifactType) e1).getName(), ((ArtifactType) e2).getName());
- }
- });
-
- Composite rightComp = new Composite(composite, SWT.NONE);
-
- rightComp.setLayout(new GridLayout());
- gd = new GridData(GridData.FILL, GridData.FILL, true, true);
- rightComp.setLayoutData(gd);
-
- Label lab = new Label(rightComp, SWT.NONE);
- lab.setText("Artifact (click here for artifact data)");
- lab.setForeground(Displays.getSystemColor(SWT.COLOR_BLUE));
- lab.addListener(SWT.MouseUp, new Listener() {
- @Override
- public void handleEvent(Event event) {
- showArtData = !showArtData;
- artList.refresh();
- }
- });
-
- artList = new ListViewer(rightComp, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL);
- artList.setContentProvider(new ArrayContentProvider());
- artList.setLabelProvider(new ArtifactDescriptiveLabelProvider());
-
- artList.setSorter(new ViewerSorter() {
- @SuppressWarnings("unchecked")
- @Override
- public int compare(Viewer viewer, Object e1, Object e2) {
- return getComparator().compare(((Artifact) e1).getName(), ((Artifact) e2).getName());
- }
- });
- gd = new GridData(GridData.FILL, GridData.FILL, true, true);
- gd.heightHint = 300;
- gd.widthHint = 200;
- artList.getControl().setLayoutData(gd);
- artList.addSelectionChangedListener(new ISelectionChangedListener() {
- @Override
- public void selectionChanged(SelectionChangedEvent event) {
- IStructuredSelection selection = (IStructuredSelection) event.getSelection();
- selectedArtifact = (Artifact) selection.getFirstElement();
- }
- });
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
-
- setControl(composite);
- }
-
- public Artifact getSelectedArtifact() {
- return selectedArtifact;
- }
-
- public class ArtifactDescriptiveLabelProvider implements ILabelProvider {
-
- @Override
- public Image getImage(Object arg0) {
- return null;
- }
-
- @Override
- public String getText(Object arg0) {
- Artifact art = (Artifact) arg0;
- if (showArtData) {
- return String.format("%s - (%s %s %s)", art.getName(), art.getArtId(), art.getHumanReadableId(),
- art.getGuid());
- } else {
- return art.getName();
- }
- }
-
- @Override
- public boolean isLabelProperty(Object arg0, String arg1) {
- return false;
- }
-
- @Override
- public void removeListener(ILabelProviderListener arg0) {
- // do nothing
- }
-
- @Override
- public void addListener(ILabelProviderListener listener) {
- // do nothing
- }
-
- @Override
- public void dispose() {
- // do nothing
- }
- }
-
- public static class ArtTypeLabelProvider implements ILabelProvider {
-
- @Override
- public Image getImage(Object arg0) {
- return null;
- }
-
- @Override
- public String getText(Object arg0) {
- return ((ArtifactType) arg0).getName();
- }
-
- @Override
- public void addListener(ILabelProviderListener arg0) {
- // do nothing
- }
-
- @Override
- public void dispose() {
- // do nothing
- }
-
- @Override
- public boolean isLabelProperty(Object arg0, String arg1) {
- return false;
- }
-
- @Override
- public void removeListener(ILabelProviderListener arg0) {
- // do nothing
- }
- }
-
-}
+/******************************************************************************* + * 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.actions.wizard; + +import java.util.logging.Level; +import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.ILabelProviderListener; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.ListViewer; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerSorter; +import org.eclipse.jface.wizard.WizardPage; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.core.model.type.ArtifactType; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager; +import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; +import org.eclipse.osee.framework.ui.swt.Displays; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Listener; + +public class ArtifactSelectWizardPage extends WizardPage { + + private ListViewer artTypeList; + private ListViewer artList; + private Artifact selectedArtifact; + private boolean showArtData = false; + + public ArtifactSelectWizardPage() { + super("Select an Artifact"); + } + + @Override + public void createControl(Composite parent) { + setTitle("Select an Artifact"); + + Composite composite = new Composite(parent, SWT.NONE); + GridLayout gl = new GridLayout(); + gl.numColumns = 2; + composite.setLayout(gl); + GridData gd = new GridData(GridData.FILL, GridData.FILL, true, true); + composite.setLayoutData(gd); + + Composite leftComp = new Composite(composite, SWT.NONE); + + leftComp.setLayout(new GridLayout()); + gd = new GridData(GridData.FILL, GridData.FILL, true, true); + leftComp.setLayoutData(gd); + + new Label(leftComp, SWT.NONE).setText("Artifact Type"); + + try { + artTypeList = new ListViewer(leftComp, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL); + artTypeList.setContentProvider(new ArrayContentProvider()); + artTypeList.setLabelProvider(new ArtTypeLabelProvider()); + + gd = new GridData(GridData.FILL, GridData.FILL, true, true); + gd.heightHint = 300; + gd.widthHint = 200; + artTypeList.getControl().setLayoutData(gd); + artTypeList.setInput(ArtifactTypeManager.getValidArtifactTypes(AtsUtil.getAtsBranch())); + artTypeList.addSelectionChangedListener(new ISelectionChangedListener() { + @Override + public void selectionChanged(SelectionChangedEvent event) { + IStructuredSelection selection = (IStructuredSelection) event.getSelection(); + ArtifactType desc = (ArtifactType) selection.getFirstElement(); + try { + artList.setInput(ArtifactQuery.getArtifactListFromType(desc, AtsUtil.getAtsBranch())); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + }); + artTypeList.setSorter(new ViewerSorter() { + @SuppressWarnings("unchecked") + @Override + public int compare(Viewer viewer, Object e1, Object e2) { + return getComparator().compare(((ArtifactType) e1).getName(), ((ArtifactType) e2).getName()); + } + }); + + Composite rightComp = new Composite(composite, SWT.NONE); + + rightComp.setLayout(new GridLayout()); + gd = new GridData(GridData.FILL, GridData.FILL, true, true); + rightComp.setLayoutData(gd); + + Label lab = new Label(rightComp, SWT.NONE); + lab.setText("Artifact (click here for artifact data)"); + lab.setForeground(Displays.getSystemColor(SWT.COLOR_BLUE)); + lab.addListener(SWT.MouseUp, new Listener() { + @Override + public void handleEvent(Event event) { + showArtData = !showArtData; + artList.refresh(); + } + }); + + artList = new ListViewer(rightComp, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL); + artList.setContentProvider(new ArrayContentProvider()); + artList.setLabelProvider(new ArtifactDescriptiveLabelProvider()); + + artList.setSorter(new ViewerSorter() { + @SuppressWarnings("unchecked") + @Override + public int compare(Viewer viewer, Object e1, Object e2) { + return getComparator().compare(((Artifact) e1).getName(), ((Artifact) e2).getName()); + } + }); + gd = new GridData(GridData.FILL, GridData.FILL, true, true); + gd.heightHint = 300; + gd.widthHint = 200; + artList.getControl().setLayoutData(gd); + artList.addSelectionChangedListener(new ISelectionChangedListener() { + @Override + public void selectionChanged(SelectionChangedEvent event) { + IStructuredSelection selection = (IStructuredSelection) event.getSelection(); + selectedArtifact = (Artifact) selection.getFirstElement(); + } + }); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + + setControl(composite); + } + + public Artifact getSelectedArtifact() { + return selectedArtifact; + } + + public class ArtifactDescriptiveLabelProvider implements ILabelProvider { + + @Override + public Image getImage(Object arg0) { + return null; + } + + @Override + public String getText(Object arg0) { + Artifact art = (Artifact) arg0; + if (showArtData) { + return String.format("%s - (%s %s %s)", art.getName(), art.getArtId(), art.getHumanReadableId(), + art.getGuid()); + } else { + return art.getName(); + } + } + + @Override + public boolean isLabelProperty(Object arg0, String arg1) { + return false; + } + + @Override + public void removeListener(ILabelProviderListener arg0) { + // do nothing + } + + @Override + public void addListener(ILabelProviderListener listener) { + // do nothing + } + + @Override + public void dispose() { + // do nothing + } + } + + public static class ArtTypeLabelProvider implements ILabelProvider { + + @Override + public Image getImage(Object arg0) { + return null; + } + + @Override + public String getText(Object arg0) { + return ((ArtifactType) arg0).getName(); + } + + @Override + public void addListener(ILabelProviderListener arg0) { + // do nothing + } + + @Override + public void dispose() { + // do nothing + } + + @Override + public boolean isLabelProperty(Object arg0, String arg1) { + return false; + } + + @Override + public void removeListener(ILabelProviderListener arg0) { + // do nothing + } + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/IAtsTeamWorkflow.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/IAtsTeamWorkflow.java index bb5068472bf..f62ad66e9ee 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/IAtsTeamWorkflow.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/IAtsTeamWorkflow.java @@ -48,7 +48,6 @@ public interface IAtsTeamWorkflow { * Notification that a teamWorkflow is being duplicated. This allows the extension to do necessary changes to * duplicated workflow. * - * @param teamArt */ public void teamWorkflowDuplicating(TeamWorkFlowArtifact teamArt, TeamWorkFlowArtifact dupTeamArt) throws OseeCoreException; @@ -56,7 +55,6 @@ public interface IAtsTeamWorkflow { * Notification that a teamWorkflow was created. This allows the extension to do necessary initial tasks after the * team workflow artifact is created. All changes made to dupTeamArt will be persisted after this call. * - * @param teamArt */ public void teamWorkflowCreated(TeamWorkFlowArtifact teamArt); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/IAtsWizardItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/IAtsWizardItem.java index c52fbdaffbf..7939c2d1739 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/IAtsWizardItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/IAtsWizardItem.java @@ -28,14 +28,11 @@ public interface IAtsWizardItem { * determine what (if any) widgets should be added. eg. <XWidget displayName=\"Description\" height=\"80\" * required=\"true\" xwidgetType=\"XText\" fill=\"Vertically\" \"/>"); * - * @param aias - * @param sb * @throws Exception */ public void getWizardXWidgetExtensions(Collection<ActionableItemArtifact> aias, StringBuffer sb) throws Exception; /** - * @param aias * @return true if widgets will be added based on selected aias * @throws Exception */ @@ -45,7 +42,6 @@ public interface IAtsWizardItem { * Determine if Action is valid to create based on wizard data entered. hasWizardXWidgetExtenstions will be called to * determine if this method should be called. * - * @param wizard * @return result of validation. if true, action will be created; if not, error will popup and action will not be * created */ @@ -55,9 +51,6 @@ public interface IAtsWizardItem { * Callback with created action upon completion and creation of the action and it's workflows. * hasWizardXWidgetExtenstions will be called to determine if this method should be called. * - * @param actionArt - * @param wizard - * @param transaction * @throws Exception */ public void wizardCompleted(ActionArtifact actionArt, NewActionWizard wizard, SkynetTransaction transaction) throws Exception; @@ -68,7 +61,6 @@ public interface IAtsWizardItem { * be performed during isActionValidToCreate(). hasWizardXWidgetExtenstions will be called to determine if this * method should be called. * - * @param wizard * @return true if widget data entered is valid */ public Result isWizardXWidgetsComplete(NewActionWizard wizard); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/NewActionPage1.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/NewActionPage1.java index f42ea74e3f6..c521a0ae4a5 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/NewActionPage1.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/NewActionPage1.java @@ -1,206 +1,206 @@ -/*******************************************************************************
- * 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.actions.wizard;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.logging.Level;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.osee.ats.artifact.ActionableItemArtifact;
-import org.eclipse.osee.ats.artifact.AtsAttributeTypes;
-import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.widgets.dialog.AITreeContentProvider;
-import org.eclipse.osee.ats.workflow.ATSXWidgetOptionResolver;
-import org.eclipse.osee.framework.core.enums.Active;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.util.Conditions;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
-import org.eclipse.osee.framework.ui.skynet.ArtifactLabelProvider;
-import org.eclipse.osee.framework.ui.skynet.util.ArtifactNameSorter;
-import org.eclipse.osee.framework.ui.skynet.util.filteredTree.OSEECheckedFilteredTree;
-import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
-import org.eclipse.osee.framework.ui.skynet.widgets.XText;
-import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.dialogs.PatternFilter;
-
-/**
- * @author Donald G. Dunne
- */
-public class NewActionPage1 extends WizardPage {
- private final NewActionWizard wizard;
- private WorkPage page;
- private OSEECheckedFilteredTree treeViewer;
- private static PatternFilter patternFilter = new PatternFilter();
- private static Text descriptionLabel;
-
- protected NewActionPage1(NewActionWizard actionWizard) {
- super("Create new ATS Action", "Create ATS Action", null);
- setMessage("Enter title and select impacted items.");
- this.wizard = actionWizard;
- }
-
- private final XModifiedListener xModListener = new XModifiedListener() {
- @Override
- public void widgetModified(XWidget widget) {
- getContainer().updateButtons();
- }
- };
-
- @Override
- public void createControl(Composite parent) {
-
- try {
- String xWidgetXml =
+/******************************************************************************* + * 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.actions.wizard; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.logging.Level; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.wizard.WizardPage; +import org.eclipse.osee.ats.artifact.ActionableItemArtifact; +import org.eclipse.osee.ats.artifact.AtsAttributeTypes; +import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.widgets.dialog.AITreeContentProvider; +import org.eclipse.osee.ats.workflow.ATSXWidgetOptionResolver; +import org.eclipse.osee.framework.core.enums.Active; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.util.Conditions; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.plugin.util.AWorkbench; +import org.eclipse.osee.framework.ui.skynet.ArtifactLabelProvider; +import org.eclipse.osee.framework.ui.skynet.util.ArtifactNameSorter; +import org.eclipse.osee.framework.ui.skynet.util.filteredTree.OSEECheckedFilteredTree; +import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener; +import org.eclipse.osee.framework.ui.skynet.widgets.XText; +import org.eclipse.osee.framework.ui.skynet.widgets.XWidget; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPage; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.dialogs.PatternFilter; + +/** + * @author Donald G. Dunne + */ +public class NewActionPage1 extends WizardPage { + private final NewActionWizard wizard; + private WorkPage page; + private OSEECheckedFilteredTree treeViewer; + private static PatternFilter patternFilter = new PatternFilter(); + private static Text descriptionLabel; + + protected NewActionPage1(NewActionWizard actionWizard) { + super("Create new ATS Action", "Create ATS Action", null); + setMessage("Enter title and select impacted items."); + this.wizard = actionWizard; + } + + private final XModifiedListener xModListener = new XModifiedListener() { + @Override + public void widgetModified(XWidget widget) { + getContainer().updateButtons(); + } + }; + + @Override + public void createControl(Composite parent) { + + try { + String xWidgetXml = "<WorkPage><XWidget displayName=\"Title\" required=\"true\" xwidgetType=\"XText\" toolTip=\"" + AtsAttributeTypes.Title.getDescription() + "\"/></WorkPage>"; - Composite comp = new Composite(parent, SWT.NONE);
- comp.setLayout(new GridLayout(1, false));
- comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
- page = new WorkPage(xWidgetXml, ATSXWidgetOptionResolver.getInstance());
- page.createBody(null, comp, null, xModListener, true);
-
- Composite aiComp = new Composite(comp, SWT.NONE);
- aiComp.setLayout(new GridLayout(1, false));
- aiComp.setLayoutData(new GridData(GridData.FILL_BOTH));
-
- new Label(aiComp, SWT.NONE).setText("Select Actionable Items:");
- treeViewer =
- new OSEECheckedFilteredTree(aiComp,
- SWT.CHECK | SWT.MULTI | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER, patternFilter);
- treeViewer.getViewer().getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- treeViewer.getViewer().setContentProvider(new AITreeContentProvider(Active.Active));
- treeViewer.getViewer().setLabelProvider(new ArtifactLabelProvider());
- try {
- treeViewer.getViewer().setInput(ActionableItemArtifact.getTopLevelActionableItems(Active.Active));
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- treeViewer.getViewer().setSorter(new ArtifactNameSorter());
- treeViewer.getViewer().addSelectionChangedListener(new ISelectionChangedListener() {
- @Override
- public void selectionChanged(SelectionChangedEvent event) {
- getContainer().updateButtons();
- }
- });
- GridData gd = new GridData(GridData.FILL_BOTH);
- gd.heightHint = 400;
- treeViewer.setLayoutData(gd);
-
- new Label(aiComp, SWT.NONE).setText("Description of highlighted Actionable Item (if any):");
- descriptionLabel = new Text(aiComp, SWT.BORDER | SWT.WRAP);
- gd = new GridData(GridData.FILL_BOTH);
- gd.heightHint = 15;
- descriptionLabel.setLayoutData(gd);
- descriptionLabel.setEnabled(false);
-
- treeViewer.getViewer().addSelectionChangedListener(new SelectionChangedListener());
-
- Button deselectAll = new Button(aiComp, SWT.PUSH);
- deselectAll.setText("De-Select All");
- deselectAll.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- treeViewer.clearChecked();
- };
- });
-
- setControl(comp);
- setHelpContexts();
- if (wizard.getInitialAias() != null) {
- treeViewer.setInitalChecked(wizard.getInitialAias());
- }
- ((XText) getXWidget("Title")).setFocus();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
- private class SelectionChangedListener implements ISelectionChangedListener {
- @Override
- public void selectionChanged(SelectionChangedEvent event) {
- IStructuredSelection sel = (IStructuredSelection) treeViewer.getViewer().getSelection();
- if (sel.isEmpty()) {
- return;
- }
- ActionableItemArtifact aia = (ActionableItemArtifact) sel.getFirstElement();
- try {
+ Composite comp = new Composite(parent, SWT.NONE); + comp.setLayout(new GridLayout(1, false)); + comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + page = new WorkPage(xWidgetXml, ATSXWidgetOptionResolver.getInstance()); + page.createBody(null, comp, null, xModListener, true); + + Composite aiComp = new Composite(comp, SWT.NONE); + aiComp.setLayout(new GridLayout(1, false)); + aiComp.setLayoutData(new GridData(GridData.FILL_BOTH)); + + new Label(aiComp, SWT.NONE).setText("Select Actionable Items:"); + treeViewer = + new OSEECheckedFilteredTree(aiComp, + SWT.CHECK | SWT.MULTI | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER, patternFilter); + treeViewer.getViewer().getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + treeViewer.getViewer().setContentProvider(new AITreeContentProvider(Active.Active)); + treeViewer.getViewer().setLabelProvider(new ArtifactLabelProvider()); + try { + treeViewer.getViewer().setInput(ActionableItemArtifact.getTopLevelActionableItems(Active.Active)); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + treeViewer.getViewer().setSorter(new ArtifactNameSorter()); + treeViewer.getViewer().addSelectionChangedListener(new ISelectionChangedListener() { + @Override + public void selectionChanged(SelectionChangedEvent event) { + getContainer().updateButtons(); + } + }); + GridData gd = new GridData(GridData.FILL_BOTH); + gd.heightHint = 400; + treeViewer.setLayoutData(gd); + + new Label(aiComp, SWT.NONE).setText("Description of highlighted Actionable Item (if any):"); + descriptionLabel = new Text(aiComp, SWT.BORDER | SWT.WRAP); + gd = new GridData(GridData.FILL_BOTH); + gd.heightHint = 15; + descriptionLabel.setLayoutData(gd); + descriptionLabel.setEnabled(false); + + treeViewer.getViewer().addSelectionChangedListener(new SelectionChangedListener()); + + Button deselectAll = new Button(aiComp, SWT.PUSH); + deselectAll.setText("De-Select All"); + deselectAll.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent e) { + treeViewer.clearChecked(); + }; + }); + + setControl(comp); + setHelpContexts(); + if (wizard.getInitialAias() != null) { + treeViewer.setInitalChecked(wizard.getInitialAias()); + } + ((XText) getXWidget("Title")).setFocus(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + + private class SelectionChangedListener implements ISelectionChangedListener { + @Override + public void selectionChanged(SelectionChangedEvent event) { + IStructuredSelection sel = (IStructuredSelection) treeViewer.getViewer().getSelection(); + if (sel.isEmpty()) { + return; + } + ActionableItemArtifact aia = (ActionableItemArtifact) sel.getFirstElement(); + try { descriptionLabel.setText(aia.getSoleAttributeValue(AtsAttributeTypes.Description, "")); - } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- }
-
- private void setHelpContexts() {
- AtsPlugin.getInstance().setHelp(this.getControl(), "new_action_wizard_page_1", "org.eclipse.osee.ats.help.ui");
- }
-
- public Set<ActionableItemArtifact> getSelectedActionableItemArtifacts() {
- Set<ActionableItemArtifact> selected = new HashSet<ActionableItemArtifact>();
- for (Object obj : treeViewer.getChecked()) {
- selected.add((ActionableItemArtifact) obj);
- }
- return selected;
- }
-
- public XWidget getXWidget(String attrName) throws OseeCoreException {
- Conditions.checkNotNull(page, "WorkPage");
- return page.getLayoutData(attrName).getXWidget();
- }
-
- @Override
- public boolean isPageComplete() {
- if (treeViewer.getChecked().isEmpty()) {
- return false;
- }
- try {
- for (ActionableItemArtifact aia : getSelectedActionableItemArtifacts()) {
- if (!aia.isActionable()) {
- AWorkbench.popup("ERROR", ActionableItemArtifact.getNotActionableItemError(aia));
- return false;
- }
- }
- Collection<TeamDefinitionArtifact> teamDefs =
- TeamDefinitionArtifact.getImpactedTeamDefs(getSelectedActionableItemArtifacts());
- if (teamDefs.isEmpty()) {
- AWorkbench.popup("ERROR", "No Teams Associated with selected Actionable Items");
- return false;
- }
- } catch (Exception ex) {
- AWorkbench.popup("ERROR", ex.getLocalizedMessage());
- return false;
- }
- if (!page.isPageComplete().isTrue()) {
- return false;
- }
- return true;
- }
-
-}
+ } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + } + + private void setHelpContexts() { + AtsPlugin.getInstance().setHelp(this.getControl(), "new_action_wizard_page_1", "org.eclipse.osee.ats.help.ui"); + } + + public Set<ActionableItemArtifact> getSelectedActionableItemArtifacts() { + Set<ActionableItemArtifact> selected = new HashSet<ActionableItemArtifact>(); + for (Object obj : treeViewer.getChecked()) { + selected.add((ActionableItemArtifact) obj); + } + return selected; + } + + public XWidget getXWidget(String attrName) throws OseeCoreException { + Conditions.checkNotNull(page, "WorkPage"); + return page.getLayoutData(attrName).getXWidget(); + } + + @Override + public boolean isPageComplete() { + if (treeViewer.getChecked().isEmpty()) { + return false; + } + try { + for (ActionableItemArtifact aia : getSelectedActionableItemArtifacts()) { + if (!aia.isActionable()) { + AWorkbench.popup("ERROR", ActionableItemArtifact.getNotActionableItemError(aia)); + return false; + } + } + Collection<TeamDefinitionArtifact> teamDefs = + TeamDefinitionArtifact.getImpactedTeamDefs(getSelectedActionableItemArtifacts()); + if (teamDefs.isEmpty()) { + AWorkbench.popup("ERROR", "No Teams Associated with selected Actionable Items"); + return false; + } + } catch (Exception ex) { + AWorkbench.popup("ERROR", ex.getLocalizedMessage()); + return false; + } + if (!page.isPageComplete().isTrue()) { + return false; + } + return true; + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/NewActionPage2.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/NewActionPage2.java index e7e0b144404..abc4836a133 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/NewActionPage2.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/NewActionPage2.java @@ -1,139 +1,139 @@ -/*******************************************************************************
- * 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.actions.wizard;
-
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.osee.ats.artifact.AtsAttributeTypes;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.workflow.ATSXWidgetOptionResolver;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.util.Conditions;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.skynet.widgets.XCombo;
-import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
-import org.eclipse.osee.framework.ui.skynet.widgets.XText;
-import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-
-/**
- * @author Donald G. Dunne
- */
-public class NewActionPage2 extends WizardPage {
- private WorkPage page;
- private final NewActionWizard wizard;
- private boolean debugPopulated = false;
-
- protected NewActionPage2(NewActionWizard wizard) {
- super("Create new ATS Action", "Create ATS Action", null);
- this.wizard = wizard;
- setMessage("Enter description, priority, change type and select Finish.");
- }
-
- @Override
- public void setVisible(boolean visible) {
- super.setVisible(visible);
- try {
- if (wizard.getInitialDescription() != null && ((XText) getXWidget("Description")).get().equals("")) {
- ((XText) getXWidget("Description")).set(wizard.getInitialDescription());
- }
- if (wizard.isTTAction()) {
- handlePopulateWithDebugInfo();
- }
- wizard.createPage3IfNecessary();
- ((XText) getXWidget("Description")).getStyledText().setFocus();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
- private final XModifiedListener xModListener = new XModifiedListener() {
- @Override
- public void widgetModified(XWidget widget) {
- getContainer().updateButtons();
- }
- };
-
- @Override
- public void createControl(Composite parent) {
-
- try {
- StringBuffer sb = new StringBuffer("<WorkPage>");
+/******************************************************************************* + * 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.actions.wizard; + +import org.eclipse.jface.wizard.WizardPage; +import org.eclipse.osee.ats.artifact.AtsAttributeTypes; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.workflow.ATSXWidgetOptionResolver; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.util.Conditions; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.skynet.widgets.XCombo; +import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener; +import org.eclipse.osee.framework.ui.skynet.widgets.XText; +import org.eclipse.osee.framework.ui.skynet.widgets.XWidget; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPage; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; + +/** + * @author Donald G. Dunne + */ +public class NewActionPage2 extends WizardPage { + private WorkPage page; + private final NewActionWizard wizard; + private boolean debugPopulated = false; + + protected NewActionPage2(NewActionWizard wizard) { + super("Create new ATS Action", "Create ATS Action", null); + this.wizard = wizard; + setMessage("Enter description, priority, change type and select Finish."); + } + + @Override + public void setVisible(boolean visible) { + super.setVisible(visible); + try { + if (wizard.getInitialDescription() != null && ((XText) getXWidget("Description")).get().equals("")) { + ((XText) getXWidget("Description")).set(wizard.getInitialDescription()); + } + if (wizard.isTTAction()) { + handlePopulateWithDebugInfo(); + } + wizard.createPage3IfNecessary(); + ((XText) getXWidget("Description")).getStyledText().setFocus(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + + private final XModifiedListener xModListener = new XModifiedListener() { + @Override + public void widgetModified(XWidget widget) { + getContainer().updateButtons(); + } + }; + + @Override + public void createControl(Composite parent) { + + try { + StringBuffer sb = new StringBuffer("<WorkPage>"); sb.append("<XWidget displayName=\"Description\" height=\"80\" required=\"true\" xwidgetType=\"XText\" fill=\"Vertically\" toolTip=\"" + AtsAttributeTypes.Description.getDescription() + "\"/>"); sb.append("<XWidget displayName=\"Change Type\" storageName=\"ats.Change Type\" xwidgetType=\"XCombo(" + ATSXWidgetOptionResolver.OPTIONS_FROM_ATTRIBUTE_VALIDITY + ")\" required=\"true\" horizontalLabel=\"true\" toolTip=\"" + AtsAttributeTypes.ChangeType.getDescription() + "\"/>"); - sb.append("<XWidget displayName=\"Priority\" storageName=\"ats.Priority\" xwidgetType=\"XCombo(" + ATSXWidgetOptionResolver.OPTIONS_FROM_ATTRIBUTE_VALIDITY + ")\" required=\"true\" horizontalLabel=\"true\"/>");
+ sb.append("<XWidget displayName=\"Priority\" storageName=\"ats.Priority\" xwidgetType=\"XCombo(" + ATSXWidgetOptionResolver.OPTIONS_FROM_ATTRIBUTE_VALIDITY + ")\" required=\"true\" horizontalLabel=\"true\"/>"); sb.append("<XWidget displayName=\"Deadline\" xwidgetType=\"XDate\" horizontalLabel=\"true\" toolTip=\"" + AtsAttributeTypes.NeedBy.getDescription() + "\"/>"); sb.append("<XWidget displayName=\"Validation Required\" xwidgetType=\"XCheckBox\" horizontalLabel=\"true\" labelAfter=\"true\" toolTip=\"" + AtsAttributeTypes.ValidationRequired.getDescription() + "\"/>"); - sb.append("</WorkPage>");
-
- Composite comp = new Composite(parent, SWT.NONE);
- comp.setLayout(new GridLayout(2, false));
- comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
- page = new WorkPage(sb.toString(), ATSXWidgetOptionResolver.getInstance());
- page.createBody(null, comp, null, xModListener, true);
-
- ((XText) getXWidget("Description")).getLabelWidget().addListener(SWT.MouseUp, new Listener() {
- @Override
- public void handleEvent(Event event) {
- if (event.button == 3) {
- handlePopulateWithDebugInfo();
- }
- }
- });
-
- setControl(comp);
- setHelpContexts();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
- private void setHelpContexts() {
- AtsPlugin.getInstance().setHelp(this.getControl(), "new_action_wizard_page_2", "org.eclipse.osee.ats.help.ui");
- }
-
- private void handlePopulateWithDebugInfo() {
- if (debugPopulated) {
- return;
- }
- try {
- ((XText) getXWidget("Description")).set("See title");
- // Must use skynet attribute name cause these widget uses the OPTIONS_FROM_ATTRIBUTE_VALIDITY
- ((XCombo) getXWidget("ats.Priority")).set("4");
- ((XCombo) getXWidget("ats.Change Type")).set("Improvement");
- debugPopulated = true;
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
- @Override
- public boolean isPageComplete() {
- if (page == null || !page.isPageComplete().isTrue()) {
- return false;
- }
- return true;
- }
-
- protected XWidget getXWidget(String attrName) throws OseeCoreException {
- Conditions.checkNotNull(page, "WorkPage");
- return page.getLayoutData(attrName).getXWidget();
- }
-
-}
+ sb.append("</WorkPage>"); + + Composite comp = new Composite(parent, SWT.NONE); + comp.setLayout(new GridLayout(2, false)); + comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + page = new WorkPage(sb.toString(), ATSXWidgetOptionResolver.getInstance()); + page.createBody(null, comp, null, xModListener, true); + + ((XText) getXWidget("Description")).getLabelWidget().addListener(SWT.MouseUp, new Listener() { + @Override + public void handleEvent(Event event) { + if (event.button == 3) { + handlePopulateWithDebugInfo(); + } + } + }); + + setControl(comp); + setHelpContexts(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + + private void setHelpContexts() { + AtsPlugin.getInstance().setHelp(this.getControl(), "new_action_wizard_page_2", "org.eclipse.osee.ats.help.ui"); + } + + private void handlePopulateWithDebugInfo() { + if (debugPopulated) { + return; + } + try { + ((XText) getXWidget("Description")).set("See title"); + // Must use skynet attribute name cause these widget uses the OPTIONS_FROM_ATTRIBUTE_VALIDITY + ((XCombo) getXWidget("ats.Priority")).set("4"); + ((XCombo) getXWidget("ats.Change Type")).set("Improvement"); + debugPopulated = true; + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + + @Override + public boolean isPageComplete() { + if (page == null || !page.isPageComplete().isTrue()) { + return false; + } + return true; + } + + protected XWidget getXWidget(String attrName) throws OseeCoreException { + Conditions.checkNotNull(page, "WorkPage"); + return page.getLayoutData(attrName).getXWidget(); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ATSArtifact.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ATSArtifact.java index 684d3605430..0db6d955cdd 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ATSArtifact.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ATSArtifact.java @@ -1,61 +1,61 @@ -/*******************************************************************************
- * 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.artifact;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.eclipse.osee.ats.hyper.IHyperArtifact;
-import org.eclipse.osee.ats.util.Overview;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeDataStoreException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.core.model.type.ArtifactType;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
-import org.eclipse.osee.framework.skynet.core.artifact.IATSArtifact;
-import org.eclipse.osee.framework.skynet.core.relation.RelationLink;
-
-public abstract class ATSArtifact extends Artifact implements IHyperArtifact, IATSArtifact {
-
- public ATSArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException {
- super(parentFactory, guid, humanReadableId, branch, artifactType);
- }
-
- public String getHyperlinkHtml() {
- return Overview.getOpenHyperlinkHtml(this);
- }
-
- /**
- * Recursively retrieve artifacts and all its ATS related artifacts such as tasks, notes, subscriptions, etc... for
- * deletion
- */
- public void atsDelete(Set<Artifact> deleteArts, Map<Artifact, Object> allRelated) throws OseeCoreException {
- deleteArts.add(this);
- for (Artifact relative : getBSideArtifacts()) {
- allRelated.put(relative, this);
- }
- }
-
- private List<Artifact> getBSideArtifacts() throws OseeCoreException {
- List<Artifact> sideBArtifacts = new ArrayList<Artifact>();
- List<RelationLink> relatives = getRelationsAll(false);
- for (RelationLink link : relatives) {
- Artifact sideB = link.getArtifactB();
- if (!sideB.equals(this)) {
- sideBArtifacts.add(sideB);
- }
- }
-
- return sideBArtifacts;
- }
-}
+/******************************************************************************* + * 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.artifact; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.eclipse.osee.ats.hyper.IHyperArtifact; +import org.eclipse.osee.ats.util.Overview; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeDataStoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.type.ArtifactType; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory; +import org.eclipse.osee.framework.skynet.core.artifact.IATSArtifact; +import org.eclipse.osee.framework.skynet.core.relation.RelationLink; + +public abstract class ATSArtifact extends Artifact implements IHyperArtifact, IATSArtifact { + + public ATSArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException { + super(parentFactory, guid, humanReadableId, branch, artifactType); + } + + public String getHyperlinkHtml() { + return Overview.getOpenHyperlinkHtml(this); + } + + /** + * Recursively retrieve artifacts and all its ATS related artifacts such as tasks, notes, subscriptions, etc... for + * deletion + */ + public void atsDelete(Set<Artifact> deleteArts, Map<Artifact, Object> allRelated) throws OseeCoreException { + deleteArts.add(this); + for (Artifact relative : getBSideArtifacts()) { + allRelated.put(relative, this); + } + } + + private List<Artifact> getBSideArtifacts() throws OseeCoreException { + List<Artifact> sideBArtifacts = new ArrayList<Artifact>(); + List<RelationLink> relatives = getRelationsAll(false); + for (RelationLink link : relatives) { + Artifact sideB = link.getArtifactB(); + if (!sideB.equals(this)) { + sideBArtifacts.add(sideB); + } + } + + return sideBArtifacts; + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ATSAttributes.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ATSAttributes.java index d4b0a00b9fc..29d061abb3a 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ATSAttributes.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ATSAttributes.java @@ -1,77 +1,77 @@ -/*******************************************************************************
- * 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.artifact;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author Donald G. Dunne
- */
-public class ATSAttributes {
- private static final Map<String, ATSAttributes> WORK_ITEM_ID_TO_ATS_ATTRIBUTE_MAP =
- new HashMap<String, ATSAttributes>();
-
- // @formatter:off
- public static final ATSAttributes WORKING_BRANCH_WIDGET = new ATSAttributes("Working Branch");
- public static final ATSAttributes VALIDATE_REQ_CHANGES_WIDGET = new ATSAttributes("Validate Requirement Changes");
+/******************************************************************************* + * 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.artifact; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author Donald G. Dunne + */ +public class ATSAttributes { + private static final Map<String, ATSAttributes> WORK_ITEM_ID_TO_ATS_ATTRIBUTE_MAP = + new HashMap<String, ATSAttributes>(); + + // @formatter:off + public static final ATSAttributes WORKING_BRANCH_WIDGET = new ATSAttributes("Working Branch"); + public static final ATSAttributes VALIDATE_REQ_CHANGES_WIDGET = new ATSAttributes("Validate Requirement Changes"); public static final ATSAttributes CREATE_CODE_TEST_TASKS_OFF_REQUIREMENTS = new ATSAttributes("Create Code/Test Tasks"); - public static final ATSAttributes CHECK_SIGNALS_VIA_CDB_WIDGET = new ATSAttributes("Check Signals Via CDB");
- public static final ATSAttributes SHOW_CDB_DIFF_REPORT_WIDGET = new ATSAttributes("Show CDB Differences Report");
- public static final ATSAttributes ASSIGNEE_ATTRIBUTE = new ATSAttributes("Assignees", "Users currently assigned to do work.");
- public static final ATSAttributes COMMIT_MANAGER_WIDGET = new ATSAttributes("Commit Manager", "Commit branches to parent and parallel branches.");
- // @formatter:on
-
- private final String displayName;
- private final String description;
- private final String workItemId;
-
- protected ATSAttributes(String displayName, String workItemId, String description) {
- this.displayName = displayName;
- this.workItemId = workItemId;
- this.description = description;
- WORK_ITEM_ID_TO_ATS_ATTRIBUTE_MAP.put(workItemId, this);
- }
-
+ public static final ATSAttributes CHECK_SIGNALS_VIA_CDB_WIDGET = new ATSAttributes("Check Signals Via CDB"); + public static final ATSAttributes SHOW_CDB_DIFF_REPORT_WIDGET = new ATSAttributes("Show CDB Differences Report"); + public static final ATSAttributes ASSIGNEE_ATTRIBUTE = new ATSAttributes("Assignees", "Users currently assigned to do work."); + public static final ATSAttributes COMMIT_MANAGER_WIDGET = new ATSAttributes("Commit Manager", "Commit branches to parent and parallel branches."); + // @formatter:on + + private final String displayName; + private final String description; + private final String workItemId; + + protected ATSAttributes(String displayName, String workItemId, String description) { + this.displayName = displayName; + this.workItemId = workItemId; + this.description = description; + WORK_ITEM_ID_TO_ATS_ATTRIBUTE_MAP.put(workItemId, this); + } + private ATSAttributes(String displayName) { this(displayName, ""); - }
-
+ } + private ATSAttributes(String displayName, String description) { this(displayName, "ats." + displayName, description); - }
-
- public static ATSAttributes getAtsAttributeByStoreName(String workItemId) {
- return WORK_ITEM_ID_TO_ATS_ATTRIBUTE_MAP.get(workItemId);
- }
-
- @Override
- public final boolean equals(Object obj) {
- return super.equals(obj);
- }
-
- @Override
- public final int hashCode() {
- return super.hashCode();
- }
-
- public String getDisplayName() {
- return displayName;
- }
-
- public String getWorkItemId() {
- return workItemId;
- }
-
- public String getDescription() {
- return description;
- }
+ } + + public static ATSAttributes getAtsAttributeByStoreName(String workItemId) { + return WORK_ITEM_ID_TO_ATS_ATTRIBUTE_MAP.get(workItemId); + } + + @Override + public final boolean equals(Object obj) { + return super.equals(obj); + } + + @Override + public final int hashCode() { + return super.hashCode(); + } + + public String getDisplayName() { + return displayName; + } + + public String getWorkItemId() { + return workItemId; + } + + public String getDescription() { + return description; + } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ATSLog.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ATSLog.java index a8a074b6658..60062183c7f 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ATSLog.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ATSLog.java @@ -1,412 +1,412 @@ -/*******************************************************************************
- * 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.artifact;
-
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact.DefaultTeamState;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.framework.core.exception.MultipleAttributesExist;
-import org.eclipse.osee.framework.core.exception.OseeArgumentException;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeStateException;
-import org.eclipse.osee.framework.jdk.core.util.AHTML;
-import org.eclipse.osee.framework.jdk.core.util.AXml;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.jdk.core.util.xml.Jaxp;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.UserManager;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-/**
- * @author Donald G. Dunne
- */
-public class ATSLog {
-
- private final WeakReference<Artifact> artifactRef;
- private boolean enabled = true;
- private static String ATS_LOG_TAG = "AtsLog";
- private static String LOG_ITEM_TAG = "Item";
- private LogItem cancelledLogItem;
- private LogItem completedLogItem;
- public static enum LogType {
- None,
- Originated,
- StateComplete,
- StateCancelled,
- StateEntered,
- Released,
- Error,
- Assign,
- Note,
- Metrics;
-
- public static LogType getType(String type) throws OseeArgumentException {
- for (Enum<LogType> e : LogType.values()) {
- if (e.name().equals(type)) {
- return (LogType) e;
- }
- }
- throw new OseeArgumentException("Unhandled LogType: \"" + type + "\"");
- }
-
- };
-
- public ATSLog(Artifact artifact) {
- this.artifactRef = new WeakReference<Artifact>(artifact);
- }
-
- @Override
- public String toString() {
- try {
- return getLogItems().toString();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return ex.getLocalizedMessage();
- }
- }
-
- public String getHtml() throws OseeCoreException {
- return getHtml(true);
- }
-
- public String getHtml(boolean showLog) throws OseeCoreException {
- if (getLogItems().isEmpty()) {
- return "";
- }
- StringBuffer sb = new StringBuffer();
- if (showLog) {
- sb.append(AHTML.addSpace(1) + AHTML.getLabelStr(
- AHTML.LABEL_FONT,
- "History for \"" + getArtifact().getArtifactTypeName() + "\" - " + getArtifact().getHumanReadableId() + " - titled \"" + getArtifact().getName() + "\""));
- }
- sb.append(getTable());
- return sb.toString();
- }
-
- public Artifact getArtifact() throws OseeStateException {
- if (artifactRef.get() == null) {
- throw new OseeStateException("Artifact has been garbage collected");
- }
- return artifactRef.get();
- }
-
- private static Pattern LOG_ITEM_PATTERN =
- Pattern.compile("<Item date=\"(.*?)\" msg=\"(.*?)\" state=\"(.*?)\" type=\"(.*?)\" userId=\"(.*?)\"/>");
-
- private static Pattern LOG_ITEM_TAG_PATTERN = Pattern.compile("<Item ");
-
- public List<LogItem> getLogItems() throws OseeCoreException {
- // System.out.println("getLogItems " + artifact.getHumanReadableId());
- List<LogItem> logItems = new ArrayList<LogItem>();
+/******************************************************************************* + * 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.artifact; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.logging.Level; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact.DefaultTeamState; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.framework.core.exception.MultipleAttributesExist; +import org.eclipse.osee.framework.core.exception.OseeArgumentException; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeStateException; +import org.eclipse.osee.framework.jdk.core.util.AHTML; +import org.eclipse.osee.framework.jdk.core.util.AXml; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.jdk.core.util.xml.Jaxp; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.UserManager; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.ui.skynet.widgets.XDate; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +/** + * @author Donald G. Dunne + */ +public class ATSLog { + + private final WeakReference<Artifact> artifactRef; + private boolean enabled = true; + private static String ATS_LOG_TAG = "AtsLog"; + private static String LOG_ITEM_TAG = "Item"; + private LogItem cancelledLogItem; + private LogItem completedLogItem; + public static enum LogType { + None, + Originated, + StateComplete, + StateCancelled, + StateEntered, + Released, + Error, + Assign, + Note, + Metrics; + + public static LogType getType(String type) throws OseeArgumentException { + for (Enum<LogType> e : LogType.values()) { + if (e.name().equals(type)) { + return (LogType) e; + } + } + throw new OseeArgumentException("Unhandled LogType: \"" + type + "\""); + } + + }; + + public ATSLog(Artifact artifact) { + this.artifactRef = new WeakReference<Artifact>(artifact); + } + + @Override + public String toString() { + try { + return getLogItems().toString(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + return ex.getLocalizedMessage(); + } + } + + public String getHtml() throws OseeCoreException { + return getHtml(true); + } + + public String getHtml(boolean showLog) throws OseeCoreException { + if (getLogItems().isEmpty()) { + return ""; + } + StringBuffer sb = new StringBuffer(); + if (showLog) { + sb.append(AHTML.addSpace(1) + AHTML.getLabelStr( + AHTML.LABEL_FONT, + "History for \"" + getArtifact().getArtifactTypeName() + "\" - " + getArtifact().getHumanReadableId() + " - titled \"" + getArtifact().getName() + "\"")); + } + sb.append(getTable()); + return sb.toString(); + } + + public Artifact getArtifact() throws OseeStateException { + if (artifactRef.get() == null) { + throw new OseeStateException("Artifact has been garbage collected"); + } + return artifactRef.get(); + } + + private static Pattern LOG_ITEM_PATTERN = + Pattern.compile("<Item date=\"(.*?)\" msg=\"(.*?)\" state=\"(.*?)\" type=\"(.*?)\" userId=\"(.*?)\"/>"); + + private static Pattern LOG_ITEM_TAG_PATTERN = Pattern.compile("<Item "); + + public List<LogItem> getLogItems() throws OseeCoreException { + // System.out.println("getLogItems " + artifact.getHumanReadableId()); + List<LogItem> logItems = new ArrayList<LogItem>(); String xml = getArtifact().getSoleAttributeValue(AtsAttributeTypes.Log, ""); - if (!xml.equals("")) {
- Matcher m = LOG_ITEM_PATTERN.matcher(xml);
- while (m.find()) {
- LogItem item =
- new LogItem(m.group(4), m.group(1), Strings.intern(m.group(5)), Strings.intern(m.group(3)),
- AXml.xmlToText(m.group(2)), getArtifact().getHumanReadableId());
- logItems.add(item);
- }
-
- Matcher m2 = LOG_ITEM_TAG_PATTERN.matcher(xml);
- int openTagsFound = 0;
- while (m2.find()) {
- openTagsFound++;
- }
- if (logItems.size() != openTagsFound) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, String.format(
- "ATS Log: open tags found %d doesn't match log items parsed %d for %s", openTagsFound, logItems.size(),
- getArtifact().getHumanReadableId()));
- }
- }
- return logItems;
- }
-
- public Date getLastStatusedDate() throws OseeCoreException {
- LogItem logItem = getLastEvent(LogType.Metrics);
- if (logItem == null) {
- return null;
- }
- return logItem.getDate();
- }
-
- public void putLogItems(List<LogItem> items) {
- try {
- Document doc = Jaxp.newDocument();
- Element rootElement = doc.createElement(ATS_LOG_TAG);
- doc.appendChild(rootElement);
- for (LogItem item : items) {
- Element element = doc.createElement(LOG_ITEM_TAG);
- element.setAttribute("type", item.getType().name());
- element.setAttribute("date", item.getDate().getTime() + "");
- element.setAttribute("userId", item.getUser().getUserId());
- element.setAttribute("state", item.getState());
- element.setAttribute("msg", item.getMsg());
- rootElement.appendChild(element);
- }
+ if (!xml.equals("")) { + Matcher m = LOG_ITEM_PATTERN.matcher(xml); + while (m.find()) { + LogItem item = + new LogItem(m.group(4), m.group(1), Strings.intern(m.group(5)), Strings.intern(m.group(3)), + AXml.xmlToText(m.group(2)), getArtifact().getHumanReadableId()); + logItems.add(item); + } + + Matcher m2 = LOG_ITEM_TAG_PATTERN.matcher(xml); + int openTagsFound = 0; + while (m2.find()) { + openTagsFound++; + } + if (logItems.size() != openTagsFound) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, String.format( + "ATS Log: open tags found %d doesn't match log items parsed %d for %s", openTagsFound, logItems.size(), + getArtifact().getHumanReadableId())); + } + } + return logItems; + } + + public Date getLastStatusedDate() throws OseeCoreException { + LogItem logItem = getLastEvent(LogType.Metrics); + if (logItem == null) { + return null; + } + return logItem.getDate(); + } + + public void putLogItems(List<LogItem> items) { + try { + Document doc = Jaxp.newDocument(); + Element rootElement = doc.createElement(ATS_LOG_TAG); + doc.appendChild(rootElement); + for (LogItem item : items) { + Element element = doc.createElement(LOG_ITEM_TAG); + element.setAttribute("type", item.getType().name()); + element.setAttribute("date", item.getDate().getTime() + ""); + element.setAttribute("userId", item.getUser().getUserId()); + element.setAttribute("state", item.getState()); + element.setAttribute("msg", item.getMsg()); + rootElement.appendChild(element); + } getArtifact().setSoleAttributeValue(AtsAttributeTypes.Log, Jaxp.getDocumentXml(doc)); - } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Can't create ats log document", ex);
- }
- }
-
- public List<LogItem> getLogItemsReversed() throws OseeCoreException {
- List<LogItem> logItems = getLogItems();
- Collections.reverse(logItems);
- return logItems;
- }
-
- public void setOriginator(User user) throws OseeCoreException {
- List<LogItem> logItems = getLogItems();
- for (LogItem item : logItems) {
- if (item.getType() == LogType.Originated) {
- item.setUser(user);
- putLogItems(logItems);
- return;
- }
- }
- }
-
- public void setCreationDate(Date date) throws OseeCoreException {
- List<LogItem> logItems = getLogItems();
- for (LogItem item : logItems) {
- if (item.getType() == LogType.Originated) {
- item.setDate(date);
- putLogItems(logItems);
- return;
- }
- }
- }
-
- public String getCancellationReason() throws OseeCoreException {
- LogItem item = getStateEvent(LogType.StateCancelled);
- if (item == null) {
- return "";
- }
- return item.getMsg();
- }
-
- public String getCancelledFromState() throws OseeCoreException {
- LogItem item = getStateEvent(LogType.StateCancelled);
- if (item == null) {
- return "";
- }
- return item.getState();
- }
-
- public String getCompletedFromState() throws OseeCoreException {
- LogItem item = getStateEvent(LogType.StateComplete);
- if (item == null) {
- return "";
- }
- return item.getState();
- }
-
- public void setCancellationReason(String reason) throws OseeCoreException {
- List<LogItem> logItems = getLogItemsReversed();
- for (LogItem item : logItems) {
- if (item.getType() == LogType.StateCancelled) {
- item.setMsg(reason);
- putLogItems(logItems);
- return;
- }
- }
- }
-
- /**
- * Since originator can be changed, return the date of the first originated log item
- */
- public Date getCreationDate() throws OseeCoreException {
- LogItem logItem = getEvent(LogType.Originated);
- if (logItem == null) {
- return null;
- }
- return logItem.getDate();
- }
-
- /**
- * Since originator change be changed, return the last originated event's user
- */
- public User getOriginator() throws OseeCoreException {
- LogItem logItem = getLastEvent(LogType.Originated);
- if (logItem == null) {
- return null;
- }
- return logItem.getUser();
- }
-
- /**
- * Overwrite the first logItem to match type and state with newItem data
- */
- public void overrideStateItemData(LogType matchType, String matchState, LogItem newItem) throws OseeCoreException {
- List<LogItem> logItems = getLogItems();
- for (LogItem item : logItems) {
- if (item.getType() == matchType && item.getState().equals(matchState)) {
- item.setUser(newItem.getUser());
- item.setDate(newItem.getDate());
- item.setMsg(newItem.getMsg());
- putLogItems(logItems);
- return;
- }
- }
- }
-
- /**
- * Overwrite the first logItem to match matchType with newItem data
- */
- public void overrideItemData(LogType matchType, LogItem newItem) throws OseeCoreException {
- List<LogItem> logItems = getLogItems();
- for (LogItem item : logItems) {
- if (item.getType() == matchType) {
- item.setState(newItem.getState());
- item.setUser(newItem.getUser());
- item.setDate(newItem.getDate());
- item.setMsg(newItem.getMsg());
- putLogItems(logItems);
- return;
- }
- }
- }
-
- /**
- * @param state name of state or null
- * @throws OseeArgumentException
- * @throws MultipleAttributesExist
- */
- public void addLog(LogType type, String state, String msg) throws OseeCoreException {
- addLog(type, state, msg, new Date(), UserManager.getUser());
- }
-
- /**
- * @param state name of state or null
- * @throws MultipleAttributesExist
- */
- public void addLog(LogType type, String state, String msg, User user) throws OseeCoreException {
- addLog(type, state, msg, new Date(), user);
- }
-
- public void addLogItem(LogItem item) throws OseeCoreException {
- addLog(item.getType(), item.getState(), item.getMsg(), item.getDate(), item.getUser());
- }
-
- /**
- * @param state name of state or null
- * @throws MultipleAttributesExist
- */
- public void addLog(LogType type, String state, String msg, Date date, User user) throws OseeCoreException {
- if (!enabled) {
- return;
- }
- LogItem logItem = new LogItem(type, date, user, state, msg, artifactRef.get().getHumanReadableId());
- List<LogItem> logItems = getLogItems();
- logItems.add(logItem);
- putLogItems(logItems);
- }
-
- public void clearLog() {
- putLogItems(new ArrayList<LogItem>());
- }
-
- public String getTable() throws OseeCoreException {
- StringBuilder builder = new StringBuilder();
- List<LogItem> logItems = getLogItems();
- builder.append("<TABLE BORDER=\"1\" cellspacing=\"1\" cellpadding=\"3%\" width=\"100%\"><THEAD><TR><TH>Event</TH>" + "<TH>State</TH><TH>Message</TH><TH>User</TH><TH>Date</TH></THEAD></TR>");
- for (LogItem item : logItems) {
- User user = item.getUser();
- if (user != null) {
- builder.append("<TR>");
- builder.append("<TD>" + item.getType() + "</TD>");
- builder.append("<TD>" + (item.getState().equals("") ? "." : item.getState()) + "</TD>");
- builder.append("<TD>" + (item.getMsg().equals("") ? "." : item.getMsg()) + "</TD>");
- if (user.equals(UserManager.getUser())) {
- builder.append("<TD bgcolor=\"#CCCCCC\">" + user.getName() + "</TD>");
- } else {
- builder.append("<TD>" + user.getName() + "</TD>");
- }
- builder.append("<TD>" + item.getDate(XDate.MMDDYYHHMM) + "</TD>");
- builder.append("</TR>");
- }
- }
- builder.append("</TABLE>");
- return builder.toString();
- }
-
- public boolean isEnabled() {
- return enabled;
- }
-
- public void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
-
- public LogItem getEvent(LogType type) throws OseeCoreException {
- for (LogItem item : getLogItems()) {
- if (item.getType() == type) {
- return item;
- }
- }
- return null;
- }
-
- public LogItem getLastEvent(LogType type) throws OseeCoreException {
- for (LogItem item : getLogItemsReversed()) {
- if (item.getType() == type) {
- return item;
- }
- }
- return null;
- }
-
- public LogItem getStateEvent(LogType type, String stateName) throws OseeCoreException {
- for (LogItem item : getLogItemsReversed()) {
- if (item.getType() == type && item.getState().equals(stateName)) {
- return item;
- }
- }
- return null;
- }
-
- public LogItem getStateEvent(LogType type) throws OseeCoreException {
- for (LogItem item : getLogItemsReversed()) {
- if (item.getType() == type) {
- return item;
- }
- }
- return null;
- }
-
- public LogItem getCancelledLogItem() throws OseeCoreException {
- if (cancelledLogItem == null) {
- cancelledLogItem = getStateEvent(LogType.StateEntered, DefaultTeamState.Cancelled.name());
- }
- return cancelledLogItem;
- }
-
- public LogItem getCompletedLogItem() throws OseeCoreException {
- if (completedLogItem == null) {
- completedLogItem = getStateEvent(LogType.StateEntered, DefaultTeamState.Completed.name());
- }
- return completedLogItem;
- }
+ } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Can't create ats log document", ex); + } + } + + public List<LogItem> getLogItemsReversed() throws OseeCoreException { + List<LogItem> logItems = getLogItems(); + Collections.reverse(logItems); + return logItems; + } + + public void setOriginator(User user) throws OseeCoreException { + List<LogItem> logItems = getLogItems(); + for (LogItem item : logItems) { + if (item.getType() == LogType.Originated) { + item.setUser(user); + putLogItems(logItems); + return; + } + } + } + + public void setCreationDate(Date date) throws OseeCoreException { + List<LogItem> logItems = getLogItems(); + for (LogItem item : logItems) { + if (item.getType() == LogType.Originated) { + item.setDate(date); + putLogItems(logItems); + return; + } + } + } + + public String getCancellationReason() throws OseeCoreException { + LogItem item = getStateEvent(LogType.StateCancelled); + if (item == null) { + return ""; + } + return item.getMsg(); + } + + public String getCancelledFromState() throws OseeCoreException { + LogItem item = getStateEvent(LogType.StateCancelled); + if (item == null) { + return ""; + } + return item.getState(); + } + + public String getCompletedFromState() throws OseeCoreException { + LogItem item = getStateEvent(LogType.StateComplete); + if (item == null) { + return ""; + } + return item.getState(); + } + + public void setCancellationReason(String reason) throws OseeCoreException { + List<LogItem> logItems = getLogItemsReversed(); + for (LogItem item : logItems) { + if (item.getType() == LogType.StateCancelled) { + item.setMsg(reason); + putLogItems(logItems); + return; + } + } + } + + /** + * Since originator can be changed, return the date of the first originated log item + */ + public Date getCreationDate() throws OseeCoreException { + LogItem logItem = getEvent(LogType.Originated); + if (logItem == null) { + return null; + } + return logItem.getDate(); + } + + /** + * Since originator change be changed, return the last originated event's user + */ + public User getOriginator() throws OseeCoreException { + LogItem logItem = getLastEvent(LogType.Originated); + if (logItem == null) { + return null; + } + return logItem.getUser(); + } + + /** + * Overwrite the first logItem to match type and state with newItem data + */ + public void overrideStateItemData(LogType matchType, String matchState, LogItem newItem) throws OseeCoreException { + List<LogItem> logItems = getLogItems(); + for (LogItem item : logItems) { + if (item.getType() == matchType && item.getState().equals(matchState)) { + item.setUser(newItem.getUser()); + item.setDate(newItem.getDate()); + item.setMsg(newItem.getMsg()); + putLogItems(logItems); + return; + } + } + } + + /** + * Overwrite the first logItem to match matchType with newItem data + */ + public void overrideItemData(LogType matchType, LogItem newItem) throws OseeCoreException { + List<LogItem> logItems = getLogItems(); + for (LogItem item : logItems) { + if (item.getType() == matchType) { + item.setState(newItem.getState()); + item.setUser(newItem.getUser()); + item.setDate(newItem.getDate()); + item.setMsg(newItem.getMsg()); + putLogItems(logItems); + return; + } + } + } + + /** + * @param state name of state or null + * @throws OseeArgumentException + * @throws MultipleAttributesExist + */ + public void addLog(LogType type, String state, String msg) throws OseeCoreException { + addLog(type, state, msg, new Date(), UserManager.getUser()); + } + + /** + * @param state name of state or null + * @throws MultipleAttributesExist + */ + public void addLog(LogType type, String state, String msg, User user) throws OseeCoreException { + addLog(type, state, msg, new Date(), user); + } + + public void addLogItem(LogItem item) throws OseeCoreException { + addLog(item.getType(), item.getState(), item.getMsg(), item.getDate(), item.getUser()); + } + + /** + * @param state name of state or null + * @throws MultipleAttributesExist + */ + public void addLog(LogType type, String state, String msg, Date date, User user) throws OseeCoreException { + if (!enabled) { + return; + } + LogItem logItem = new LogItem(type, date, user, state, msg, artifactRef.get().getHumanReadableId()); + List<LogItem> logItems = getLogItems(); + logItems.add(logItem); + putLogItems(logItems); + } + + public void clearLog() { + putLogItems(new ArrayList<LogItem>()); + } + + public String getTable() throws OseeCoreException { + StringBuilder builder = new StringBuilder(); + List<LogItem> logItems = getLogItems(); + builder.append("<TABLE BORDER=\"1\" cellspacing=\"1\" cellpadding=\"3%\" width=\"100%\"><THEAD><TR><TH>Event</TH>" + "<TH>State</TH><TH>Message</TH><TH>User</TH><TH>Date</TH></THEAD></TR>"); + for (LogItem item : logItems) { + User user = item.getUser(); + if (user != null) { + builder.append("<TR>"); + builder.append("<TD>" + item.getType() + "</TD>"); + builder.append("<TD>" + (item.getState().equals("") ? "." : item.getState()) + "</TD>"); + builder.append("<TD>" + (item.getMsg().equals("") ? "." : item.getMsg()) + "</TD>"); + if (user.equals(UserManager.getUser())) { + builder.append("<TD bgcolor=\"#CCCCCC\">" + user.getName() + "</TD>"); + } else { + builder.append("<TD>" + user.getName() + "</TD>"); + } + builder.append("<TD>" + item.getDate(XDate.MMDDYYHHMM) + "</TD>"); + builder.append("</TR>"); + } + } + builder.append("</TABLE>"); + return builder.toString(); + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public LogItem getEvent(LogType type) throws OseeCoreException { + for (LogItem item : getLogItems()) { + if (item.getType() == type) { + return item; + } + } + return null; + } + + public LogItem getLastEvent(LogType type) throws OseeCoreException { + for (LogItem item : getLogItemsReversed()) { + if (item.getType() == type) { + return item; + } + } + return null; + } + + public LogItem getStateEvent(LogType type, String stateName) throws OseeCoreException { + for (LogItem item : getLogItemsReversed()) { + if (item.getType() == type && item.getState().equals(stateName)) { + return item; + } + } + return null; + } + + public LogItem getStateEvent(LogType type) throws OseeCoreException { + for (LogItem item : getLogItemsReversed()) { + if (item.getType() == type) { + return item; + } + } + return null; + } + + public LogItem getCancelledLogItem() throws OseeCoreException { + if (cancelledLogItem == null) { + cancelledLogItem = getStateEvent(LogType.StateEntered, DefaultTeamState.Cancelled.name()); + } + return cancelledLogItem; + } + + public LogItem getCompletedLogItem() throws OseeCoreException { + if (completedLogItem == null) { + completedLogItem = getStateEvent(LogType.StateEntered, DefaultTeamState.Completed.name()); + } + return completedLogItem; + } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ATSNote.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ATSNote.java index 6aa14dd819d..6f33e32fb15 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ATSNote.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ATSNote.java @@ -1,209 +1,207 @@ -/*******************************************************************************
- * 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.artifact;
-
-import java.lang.ref.WeakReference;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.logging.Level;
-import org.eclipse.osee.ats.NoteType;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.framework.core.data.SystemUser;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeStateException;
-import org.eclipse.osee.framework.core.exception.UserNotInDatabase;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.jdk.core.util.xml.Jaxp;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.UserManager;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-/**
- * @author Donald G. Dunne
- */
-public class ATSNote {
- private final WeakReference<Artifact> artifactRef;
- private boolean enabled = true;
- private static String ATS_NOTE_TAG = "AtsNote";
- private static String LOG_ITEM_TAG = "Item";
-
- public ATSNote(Artifact artifact) {
- this.artifactRef = new WeakReference<Artifact>(artifact);
- }
-
- public Artifact getArtifact() throws OseeStateException {
- if (artifactRef.get() == null) {
- throw new OseeStateException("Artifact has been garbage collected");
- }
- return artifactRef.get();
- }
-
- public void addNote(NoteType type, String state, String msg, User user) {
- addNote(type, state, msg, new Date(), user);
- }
-
- public void addNoteItem(NoteItem noteItem) {
- addNote(noteItem.getType(), noteItem.getState(), noteItem.getMsg(), noteItem.getDate(), noteItem.getUser());
- }
-
- public void addNote(NoteType type, String state, String msg, Date date, User user) {
- if (!enabled) {
- return;
- }
- NoteItem logItem = new NoteItem(type, state, date.getTime() + "", user, msg);
- List<NoteItem> logItems = getNoteItems();
- if (logItems.isEmpty()) {
- logItems = Arrays.asList(logItem);
- } else {
- logItems.add(logItem);
- }
- saveNoteItems(logItems);
- }
-
- public static List<NoteItem> getNoteItems(String str, String hrid) {
- List<NoteItem> logItems = new ArrayList<NoteItem>();
- try {
- if (Strings.isValid(str)) {
- NodeList nodes = Jaxp.readXmlDocument(str).getElementsByTagName(LOG_ITEM_TAG);
- for (int i = 0; i < nodes.getLength(); i++) {
- Element element = (Element) nodes.item(i);
- try {
- User user = UserManager.getUserByUserId(element.getAttribute("userId"));
- NoteItem item =
- new NoteItem(element.getAttribute("type"), element.getAttribute("state"),
- element.getAttribute("date"), user, element.getAttribute("msg"));
- logItems.add(item);
- } catch (UserNotInDatabase ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, String.format("Error parsing notes for [%s]", hrid), ex);
- NoteItem item =
- new NoteItem(element.getAttribute("type"), element.getAttribute("state"),
- element.getAttribute("date"), UserManager.getUser(SystemUser.Guest),
- element.getAttribute("msg"));
- logItems.add(item);
- }
- }
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- return logItems;
- }
-
- public List<NoteItem> getNoteItems() {
- try {
+/******************************************************************************* + * 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.artifact; + +import java.lang.ref.WeakReference; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.logging.Level; +import org.eclipse.osee.ats.NoteType; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.framework.core.data.SystemUser; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeStateException; +import org.eclipse.osee.framework.core.exception.UserNotInDatabase; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.jdk.core.util.xml.Jaxp; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.UserManager; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +/** + * @author Donald G. Dunne + */ +public class ATSNote { + private final WeakReference<Artifact> artifactRef; + private boolean enabled = true; + private static String ATS_NOTE_TAG = "AtsNote"; + private static String LOG_ITEM_TAG = "Item"; + + public ATSNote(Artifact artifact) { + this.artifactRef = new WeakReference<Artifact>(artifact); + } + + public Artifact getArtifact() throws OseeStateException { + if (artifactRef.get() == null) { + throw new OseeStateException("Artifact has been garbage collected"); + } + return artifactRef.get(); + } + + public void addNote(NoteType type, String state, String msg, User user) { + addNote(type, state, msg, new Date(), user); + } + + public void addNoteItem(NoteItem noteItem) { + addNote(noteItem.getType(), noteItem.getState(), noteItem.getMsg(), noteItem.getDate(), noteItem.getUser()); + } + + public void addNote(NoteType type, String state, String msg, Date date, User user) { + if (!enabled) { + return; + } + NoteItem logItem = new NoteItem(type, state, date.getTime() + "", user, msg); + List<NoteItem> logItems = getNoteItems(); + if (logItems.isEmpty()) { + logItems = Arrays.asList(logItem); + } else { + logItems.add(logItem); + } + saveNoteItems(logItems); + } + + public static List<NoteItem> getNoteItems(String str, String hrid) { + List<NoteItem> logItems = new ArrayList<NoteItem>(); + try { + if (Strings.isValid(str)) { + NodeList nodes = Jaxp.readXmlDocument(str).getElementsByTagName(LOG_ITEM_TAG); + for (int i = 0; i < nodes.getLength(); i++) { + Element element = (Element) nodes.item(i); + try { + User user = UserManager.getUserByUserId(element.getAttribute("userId")); + NoteItem item = + new NoteItem(element.getAttribute("type"), element.getAttribute("state"), + element.getAttribute("date"), user, element.getAttribute("msg")); + logItems.add(item); + } catch (UserNotInDatabase ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, String.format("Error parsing notes for [%s]", hrid), ex); + NoteItem item = + new NoteItem(element.getAttribute("type"), element.getAttribute("state"), + element.getAttribute("date"), UserManager.getUser(SystemUser.Guest), + element.getAttribute("msg")); + logItems.add(item); + } + } + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + return logItems; + } + + public List<NoteItem> getNoteItems() { + try { String xml = getArtifact().getSoleAttributeValue(AtsAttributeTypes.StateNotes, ""); - if (Strings.isValid(xml)) {
- return getNoteItems(xml, getArtifact().getHumanReadableId());
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- return Collections.emptyList();
- }
-
- public void saveNoteItems(List<NoteItem> items) {
- try {
- Document doc = Jaxp.newDocument();
- Element rootElement = doc.createElement(ATS_NOTE_TAG);
- doc.appendChild(rootElement);
- for (NoteItem item : items) {
- Element element = doc.createElement(LOG_ITEM_TAG);
- element.setAttribute("type", item.getType().name());
- element.setAttribute("state", item.getState());
- element.setAttribute("date", item.getDate().getTime() + "");
- element.setAttribute("userId", item.getUser().getUserId());
- element.setAttribute("msg", item.getMsg());
- rootElement.appendChild(element);
- }
- getArtifact().setSoleAttributeValue(AtsAttributeTypes.StateNotes, - Jaxp.getDocumentXml(doc));
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Can't create ats note document", ex);
- }
- }
-
- /**
- * Display Note Table; If state == null, only display non-state notes Otherwise, show only notes associated with
- * state
- *
- * @param state
- */
- public String getTable(String state) {
- ArrayList<NoteItem> showNotes = new ArrayList<NoteItem>();
- List<NoteItem> noteItems = getNoteItems();
- try {
+ if (Strings.isValid(xml)) { + return getNoteItems(xml, getArtifact().getHumanReadableId()); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + return Collections.emptyList(); + } + + public void saveNoteItems(List<NoteItem> items) { + try { + Document doc = Jaxp.newDocument(); + Element rootElement = doc.createElement(ATS_NOTE_TAG); + doc.appendChild(rootElement); + for (NoteItem item : items) { + Element element = doc.createElement(LOG_ITEM_TAG); + element.setAttribute("type", item.getType().name()); + element.setAttribute("state", item.getState()); + element.setAttribute("date", item.getDate().getTime() + ""); + element.setAttribute("userId", item.getUser().getUserId()); + element.setAttribute("msg", item.getMsg()); + rootElement.appendChild(element); + } + getArtifact().setSoleAttributeValue(AtsAttributeTypes.StateNotes, Jaxp.getDocumentXml(doc)); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Can't create ats note document", ex); + } + } + + /** + * Display Note Table; If state == null, only display non-state notes Otherwise, show only notes associated with + * state + * + */ + public String getTable(String state) { + ArrayList<NoteItem> showNotes = new ArrayList<NoteItem>(); + List<NoteItem> noteItems = getNoteItems(); + try { if (!getArtifact().isAttributeTypeValid(AtsAttributeTypes.StateNotes)) { - return "";
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return "";
- }
-
- for (NoteItem li : noteItems) {
- if (state == null) {
- if (li.getState().equals("")) {
- showNotes.add(li);
- }
- } else if (state.equals("ALL") || li.getState().equals(state)) {
- showNotes.add(li);
- }
- }
- if (showNotes.isEmpty()) {
- return "";
- }
- StringBuilder builder = new StringBuilder();
- builder.append("<TABLE BORDER=\"1\" cellspacing=\"1\" cellpadding=\"3%\" width=\"100%\"><THEAD><TR><TH>Type</TH><TH>State</TH>" + "<TH>Message</TH><TH>User</TH><TH>Date</TH></THEAD></TR>");
- for (NoteItem note : showNotes) {
- User user = note.getUser();
- String name = "";
- if (user != null) {
- name = user.getName();
- if (!Strings.isValid(name)) {
- name = user.getName();
- }
- }
- builder.append("<TR>");
- builder.append("<TD>" + note.getType() + "</TD>");
- builder.append("<TD>" + (note.getState().equals("") ? "," : note.getState()) + "</TD>");
- builder.append("<TD>" + (note.getMsg().equals("") ? "," : note.getMsg()) + "</TD>");
-
- if (user != null && user.isMe()) {
- builder.append("<TD bgcolor=\"#CCCCCC\">" + name + "</TD>");
- } else {
- builder.append("<TD>" + name + "</TD>");
- }
-
- builder.append("<TD>" + new SimpleDateFormat("MM/dd/yyyy h:mm a").format(note.getDate()) + "</TD>");
- builder.append("</TR>");
- }
- builder.append("</TABLE>");
- return builder.toString();
- }
-
- public boolean isEnabled() {
- return enabled;
- }
-
- public void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
-
+ return ""; + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + return ""; + } + + for (NoteItem li : noteItems) { + if (state == null) { + if (li.getState().equals("")) { + showNotes.add(li); + } + } else if (state.equals("ALL") || li.getState().equals(state)) { + showNotes.add(li); + } + } + if (showNotes.isEmpty()) { + return ""; + } + StringBuilder builder = new StringBuilder(); + builder.append("<TABLE BORDER=\"1\" cellspacing=\"1\" cellpadding=\"3%\" width=\"100%\"><THEAD><TR><TH>Type</TH><TH>State</TH>" + "<TH>Message</TH><TH>User</TH><TH>Date</TH></THEAD></TR>"); + for (NoteItem note : showNotes) { + User user = note.getUser(); + String name = ""; + if (user != null) { + name = user.getName(); + if (!Strings.isValid(name)) { + name = user.getName(); + } + } + builder.append("<TR>"); + builder.append("<TD>" + note.getType() + "</TD>"); + builder.append("<TD>" + (note.getState().equals("") ? "," : note.getState()) + "</TD>"); + builder.append("<TD>" + (note.getMsg().equals("") ? "," : note.getMsg()) + "</TD>"); + + if (user != null && user.isMe()) { + builder.append("<TD bgcolor=\"#CCCCCC\">" + name + "</TD>"); + } else { + builder.append("<TD>" + name + "</TD>"); + } + + builder.append("<TD>" + new SimpleDateFormat("MM/dd/yyyy h:mm a").format(note.getDate()) + "</TD>"); + builder.append("</TR>"); + } + builder.append("</TABLE>"); + return builder.toString(); + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ActionArtifact.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ActionArtifact.java index cac9fe44505..9631c3d8e5a 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ActionArtifact.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ActionArtifact.java @@ -1,1261 +1,1261 @@ -/*******************************************************************************
- * 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.artifact;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.logging.Level;
-import org.eclipse.nebula.widgets.xviewer.XViewerCells;
-import org.eclipse.osee.ats.actions.wizard.IAtsTeamWorkflow;
-import org.eclipse.osee.ats.artifact.ATSLog.LogType;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.ats.util.AtsPriority.PriorityType;
-import org.eclipse.osee.ats.util.AtsRelationTypes;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.ats.util.widgets.dialog.AICheckTreeDialog;
-import org.eclipse.osee.ats.world.IWorldViewArtifact;
-import org.eclipse.osee.framework.core.data.IArtifactType;
-import org.eclipse.osee.framework.core.enums.Active;
-import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
-import org.eclipse.osee.framework.core.exception.OseeArgumentException;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeDataStoreException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.core.model.type.ArtifactType;
-import org.eclipse.osee.framework.jdk.core.util.Collections;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.UserManager;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
-import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
-import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
-import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.skynet.util.ChangeType;
-import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
-import org.eclipse.swt.graphics.Image;
-
-/**
- * @author Donald G. Dunne
- */
-public class ActionArtifact extends ATSArtifact implements IWorldViewArtifact {
-
- public static enum CreateTeamOption {
- Duplicate_If_Exists; // If option exists, then duplication of workflow of same team definition is allowed
- };
-
- public ActionArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException {
- super(parentFactory, guid, humanReadableId, branch, artifactType);
- }
-
- public void resetAttributesOffChildren(SkynetTransaction transaction) throws OseeCoreException {
- resetChangeTypeOffChildren();
- resetPriorityOffChildren();
- resetUserCommunityOffChildren();
- resetTitleOffChildren();
- resetValidationOffChildren();
- resetDescriptionOffChildren();
- persist(transaction);
- }
-
- public boolean hasAtsWorldChildren() {
- return true;
- }
-
- public Set<ActionableItemArtifact> getActionableItems() throws OseeCoreException {
- Set<ActionableItemArtifact> aias = new HashSet<ActionableItemArtifact>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- aias.addAll(team.getActionableItemsDam().getActionableItems());
- }
- return aias;
- }
-
- /**
- * Reset Action title only if all children are titled the same
- */
- private void resetTitleOffChildren() throws OseeCoreException {
- String title = "";
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (title.equals("")) {
- title = team.getName();
- } else if (!title.equals(team.getName())) {
- return;
- }
- }
- if (!title.equals(getName())) {
- setName(title);
- }
- }
-
- // Set validation to true if any require validation
- private void resetValidationOffChildren() throws OseeCoreException {
- boolean validationRequired = false;
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
+/******************************************************************************* + * 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.artifact; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.logging.Level; +import org.eclipse.nebula.widgets.xviewer.XViewerCells; +import org.eclipse.osee.ats.actions.wizard.IAtsTeamWorkflow; +import org.eclipse.osee.ats.artifact.ATSLog.LogType; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.ats.util.AtsPriority.PriorityType; +import org.eclipse.osee.ats.util.AtsRelationTypes; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.ats.util.widgets.dialog.AICheckTreeDialog; +import org.eclipse.osee.ats.world.IWorldViewArtifact; +import org.eclipse.osee.framework.core.data.IArtifactType; +import org.eclipse.osee.framework.core.enums.Active; +import org.eclipse.osee.framework.core.enums.CoreRelationTypes; +import org.eclipse.osee.framework.core.exception.OseeArgumentException; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeDataStoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.type.ArtifactType; +import org.eclipse.osee.framework.jdk.core.util.Collections; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.UserManager; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager; +import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction; +import org.eclipse.osee.framework.skynet.core.utility.Artifacts; +import org.eclipse.osee.framework.ui.plugin.util.AWorkbench; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.skynet.util.ChangeType; +import org.eclipse.osee.framework.ui.skynet.widgets.XDate; +import org.eclipse.swt.graphics.Image; + +/** + * @author Donald G. Dunne + */ +public class ActionArtifact extends ATSArtifact implements IWorldViewArtifact { + + public static enum CreateTeamOption { + Duplicate_If_Exists; // If option exists, then duplication of workflow of same team definition is allowed + }; + + public ActionArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException { + super(parentFactory, guid, humanReadableId, branch, artifactType); + } + + public void resetAttributesOffChildren(SkynetTransaction transaction) throws OseeCoreException { + resetChangeTypeOffChildren(); + resetPriorityOffChildren(); + resetUserCommunityOffChildren(); + resetTitleOffChildren(); + resetValidationOffChildren(); + resetDescriptionOffChildren(); + persist(transaction); + } + + public boolean hasAtsWorldChildren() { + return true; + } + + public Set<ActionableItemArtifact> getActionableItems() throws OseeCoreException { + Set<ActionableItemArtifact> aias = new HashSet<ActionableItemArtifact>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + aias.addAll(team.getActionableItemsDam().getActionableItems()); + } + return aias; + } + + /** + * Reset Action title only if all children are titled the same + */ + private void resetTitleOffChildren() throws OseeCoreException { + String title = ""; + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (title.equals("")) { + title = team.getName(); + } else if (!title.equals(team.getName())) { + return; + } + } + if (!title.equals(getName())) { + setName(title); + } + } + + // Set validation to true if any require validation + private void resetValidationOffChildren() throws OseeCoreException { + boolean validationRequired = false; + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { if (team.getSoleAttributeValue(AtsAttributeTypes.ValidationRequired, false)) { - validationRequired = true;
- }
- }
+ validationRequired = true; + } + } if (validationRequired != getSoleAttributeValue(AtsAttributeTypes.ValidationRequired, false)) { setSoleAttributeValue(AtsAttributeTypes.ValidationRequired, validationRequired); - }
- }
-
- /**
- * Reset Action title only if all children are titled the same
- */
- private void resetDescriptionOffChildren() throws OseeCoreException {
- String desc = "";
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (desc.equals("")) {
+ } + } + + /** + * Reset Action title only if all children are titled the same + */ + private void resetDescriptionOffChildren() throws OseeCoreException { + String desc = ""; + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (desc.equals("")) { desc = team.getSoleAttributeValue(AtsAttributeTypes.Description, ""); } else if (!desc.equals(team.getSoleAttributeValue(AtsAttributeTypes.Description, ""))) { - return;
- }
- }
+ return; + } + } if (!desc.equals(getSoleAttributeValue(AtsAttributeTypes.Description, ""))) { setSoleAttributeValue(AtsAttributeTypes.Description, desc); - }
- if (desc.equals("")) {
+ } + if (desc.equals("")) { deleteSoleAttribute(AtsAttributeTypes.Description); - }
- }
-
- private void resetChangeTypeOffChildren() throws OseeCoreException {
- ChangeType changeType = null;
- Collection<TeamWorkFlowArtifact> teamArts = getTeamWorkFlowArtifacts();
- if (teamArts.size() == 1) {
- changeType = teamArts.iterator().next().getChangeType();
- } else {
- for (TeamWorkFlowArtifact team : teamArts) {
- if (!team.isCancelled()) {
- if (changeType == null) {
- changeType = team.getChangeType();
- } else if (changeType != team.getChangeType()) {
- return;
- }
- }
- }
- }
- if (changeType != null && getChangeType() != changeType) {
- setChangeType(changeType);
- }
- return;
- }
-
- private void resetPriorityOffChildren() throws OseeCoreException {
- PriorityType priorityType = null;
- Collection<TeamWorkFlowArtifact> teamArts = getTeamWorkFlowArtifacts();
- if (teamArts.size() == 1) {
- priorityType = teamArts.iterator().next().getPriority();
- } else {
- for (TeamWorkFlowArtifact team : teamArts) {
- if (!team.isCancelled()) {
- if (priorityType == null) {
- priorityType = team.getPriority();
- } else if (priorityType != team.getPriority()) {
- return;
- }
- }
- }
- }
- if (priorityType != null && getPriority() != priorityType) {
- setPriority(priorityType);
- }
- return;
- }
-
- private void resetUserCommunityOffChildren() throws OseeCoreException {
- Set<String> userComs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (!team.isCancelled()) {
+ } + } + + private void resetChangeTypeOffChildren() throws OseeCoreException { + ChangeType changeType = null; + Collection<TeamWorkFlowArtifact> teamArts = getTeamWorkFlowArtifacts(); + if (teamArts.size() == 1) { + changeType = teamArts.iterator().next().getChangeType(); + } else { + for (TeamWorkFlowArtifact team : teamArts) { + if (!team.isCancelled()) { + if (changeType == null) { + changeType = team.getChangeType(); + } else if (changeType != team.getChangeType()) { + return; + } + } + } + } + if (changeType != null && getChangeType() != changeType) { + setChangeType(changeType); + } + return; + } + + private void resetPriorityOffChildren() throws OseeCoreException { + PriorityType priorityType = null; + Collection<TeamWorkFlowArtifact> teamArts = getTeamWorkFlowArtifacts(); + if (teamArts.size() == 1) { + priorityType = teamArts.iterator().next().getPriority(); + } else { + for (TeamWorkFlowArtifact team : teamArts) { + if (!team.isCancelled()) { + if (priorityType == null) { + priorityType = team.getPriority(); + } else if (priorityType != team.getPriority()) { + return; + } + } + } + } + if (priorityType != null && getPriority() != priorityType) { + setPriority(priorityType); + } + return; + } + + private void resetUserCommunityOffChildren() throws OseeCoreException { + Set<String> userComs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (!team.isCancelled()) { userComs.addAll(team.getAttributesToStringList(AtsAttributeTypes.UserCommunity)); - }
- }
+ } + } setAttributeValues(AtsAttributeTypes.UserCommunity, userComs); - }
-
- public void setChangeType(ChangeType type) throws OseeCoreException {
+ } + + public void setChangeType(ChangeType type) throws OseeCoreException { setSoleAttributeValue(AtsAttributeTypes.ChangeType, type.name()); - }
-
- public ChangeType getChangeType() throws OseeCoreException {
+ } + + public ChangeType getChangeType() throws OseeCoreException { return ChangeType.getChangeType(getSoleAttributeValue(AtsAttributeTypes.ChangeType, "")); - }
-
- public PriorityType getPriority() throws OseeCoreException {
+ } + + public PriorityType getPriority() throws OseeCoreException { return PriorityType.getPriority(getSoleAttributeValue(AtsAttributeTypes.PriorityType, "")); - }
-
- public void setPriority(PriorityType type) throws OseeCoreException {
+ } + + public void setPriority(PriorityType type) throws OseeCoreException { setSoleAttributeValue(AtsAttributeTypes.PriorityType, type.getShortName()); - }
-
- public Collection<TeamWorkFlowArtifact> getTeamWorkFlowArtifacts() throws OseeCoreException {
- return getRelatedArtifactsUnSorted(AtsRelationTypes.ActionToWorkflow_WorkFlow, TeamWorkFlowArtifact.class);
- }
-
- @Override
- public String getWorldViewType() {
- return AtsArtifactTypes.Action.getName();
- }
-
- @Override
- public String getWorldViewTitle() {
- return getName();
- }
-
- @Override
- public ChangeType getWorldViewChangeType() throws OseeCoreException {
+ } + + public Collection<TeamWorkFlowArtifact> getTeamWorkFlowArtifacts() throws OseeCoreException { + return getRelatedArtifactsUnSorted(AtsRelationTypes.ActionToWorkflow_WorkFlow, TeamWorkFlowArtifact.class); + } + + @Override + public String getWorldViewType() { + return AtsArtifactTypes.Action.getName(); + } + + @Override + public String getWorldViewTitle() { + return getName(); + } + + @Override + public ChangeType getWorldViewChangeType() throws OseeCoreException { return ChangeType.getChangeType(getSoleAttributeValue(AtsAttributeTypes.ChangeType, "")); - }
-
- @Override
- public String getWorldViewBranchStatus() throws OseeCoreException {
- StringBuffer sb = new StringBuffer();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (!team.getWorldViewBranchStatus().equals("")) {
- sb.append(team.getWorldViewBranchStatus() + ", ");
- }
- }
- return sb.toString().replaceFirst(", $", "");
- }
-
- @Override
- public String getWorldViewPoint() throws OseeCoreException {
- StringBuffer sb = new StringBuffer();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (!team.getWorldViewPoint().equals("")) {
- sb.append(team.getWorldViewPoint() + ", ");
- }
- }
- return sb.toString().replaceFirst(", $", "");
- }
-
- @Override
- public String getWorldViewNumberOfTasks() throws OseeCoreException {
- StringBuffer sb = new StringBuffer();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (!team.getWorldViewNumberOfTasks().equals("")) {
- sb.append(team.getWorldViewNumberOfTasks() + ", ");
- }
- }
- return sb.toString().replaceFirst(", $", "");
- }
-
- @Override
- public String getWorldViewNumberOfTasksRemaining() throws OseeCoreException {
- StringBuffer sb = new StringBuffer();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (!team.getWorldViewNumberOfTasksRemaining().equals("")) {
- sb.append(team.getWorldViewNumberOfTasksRemaining() + ", ");
- }
- }
- return sb.toString().replaceFirst(", $", "");
- }
-
- @Override
- public String getWorldViewState() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewState());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public String getWorldViewDaysInCurrentState() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewDaysInCurrentState());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public String getWorldViewActivePoc() throws OseeCoreException {
- Set<User> pocs = new HashSet<User>();
- Set<User> implementers = new HashSet<User>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (team.isCancelledOrCompleted()) {
- implementers.addAll(team.getImplementers());
- } else {
- pocs.addAll(team.getStateMgr().getAssignees());
- }
- }
- return Artifacts.toString("; ", pocs) + (implementers.size() > 0 ? "(" + Artifacts.toString("; ", implementers) + ")" : "");
- }
-
- @Override
- public String getWorldViewCreatedDateStr() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- Date date = team.getWorldViewCreatedDate();
- if (date == null) {
- strs.add("");
- } else {
- strs.add(XDate.getDateStr(team.getWorldViewCreatedDate(), XDate.MMDDYYHHMM));
- }
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public Date getWorldViewCreatedDate() throws OseeCoreException {
- return getTeamWorkFlowArtifacts().iterator().next().getWorldViewCreatedDate();
- }
-
- @Override
- public String getWorldViewID() {
- return getHumanReadableId();
- }
-
- @Override
- public String getWorldViewPriority() throws OseeCoreException {
+ } + + @Override + public String getWorldViewBranchStatus() throws OseeCoreException { + StringBuffer sb = new StringBuffer(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (!team.getWorldViewBranchStatus().equals("")) { + sb.append(team.getWorldViewBranchStatus() + ", "); + } + } + return sb.toString().replaceFirst(", $", ""); + } + + @Override + public String getWorldViewPoint() throws OseeCoreException { + StringBuffer sb = new StringBuffer(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (!team.getWorldViewPoint().equals("")) { + sb.append(team.getWorldViewPoint() + ", "); + } + } + return sb.toString().replaceFirst(", $", ""); + } + + @Override + public String getWorldViewNumberOfTasks() throws OseeCoreException { + StringBuffer sb = new StringBuffer(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (!team.getWorldViewNumberOfTasks().equals("")) { + sb.append(team.getWorldViewNumberOfTasks() + ", "); + } + } + return sb.toString().replaceFirst(", $", ""); + } + + @Override + public String getWorldViewNumberOfTasksRemaining() throws OseeCoreException { + StringBuffer sb = new StringBuffer(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (!team.getWorldViewNumberOfTasksRemaining().equals("")) { + sb.append(team.getWorldViewNumberOfTasksRemaining() + ", "); + } + } + return sb.toString().replaceFirst(", $", ""); + } + + @Override + public String getWorldViewState() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewState()); + } + return Collections.toString(";", strs); + } + + @Override + public String getWorldViewDaysInCurrentState() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewDaysInCurrentState()); + } + return Collections.toString(";", strs); + } + + @Override + public String getWorldViewActivePoc() throws OseeCoreException { + Set<User> pocs = new HashSet<User>(); + Set<User> implementers = new HashSet<User>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (team.isCancelledOrCompleted()) { + implementers.addAll(team.getImplementers()); + } else { + pocs.addAll(team.getStateMgr().getAssignees()); + } + } + return Artifacts.toString("; ", pocs) + (implementers.size() > 0 ? "(" + Artifacts.toString("; ", implementers) + ")" : ""); + } + + @Override + public String getWorldViewCreatedDateStr() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + Date date = team.getWorldViewCreatedDate(); + if (date == null) { + strs.add(""); + } else { + strs.add(XDate.getDateStr(team.getWorldViewCreatedDate(), XDate.MMDDYYHHMM)); + } + } + return Collections.toString(";", strs); + } + + @Override + public Date getWorldViewCreatedDate() throws OseeCoreException { + return getTeamWorkFlowArtifacts().iterator().next().getWorldViewCreatedDate(); + } + + @Override + public String getWorldViewID() { + return getHumanReadableId(); + } + + @Override + public String getWorldViewPriority() throws OseeCoreException { return PriorityType.getPriority(getSoleAttributeValue(AtsAttributeTypes.PriorityType, "")).getShortName(); - }
-
- @Override
- public Image getAssigneeImage() throws OseeCoreException {
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- Image image = team.getAssigneeImage();
- if (image != null) {
- return image;
- }
- }
- return null;
- }
-
- @Override
- public String getWorldViewUserCommunity() throws OseeCoreException {
+ } + + @Override + public Image getAssigneeImage() throws OseeCoreException { + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + Image image = team.getAssigneeImage(); + if (image != null) { + return image; + } + } + return null; + } + + @Override + public String getWorldViewUserCommunity() throws OseeCoreException { return getAttributesToString(AtsAttributeTypes.UserCommunity); - }
-
- @Override
- public String getWorldViewActionableItems() throws OseeCoreException {
- Set<ActionableItemArtifact> aias = new HashSet<ActionableItemArtifact>();
- // Roll up if same for all children
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- aias.addAll(team.getActionableItemsDam().getActionableItems());
- }
- return Artifacts.commaArts(aias);
- }
-
- @Override
- public void atsDelete(Set<Artifact> deleteArts, Map<Artifact, Object> allRelated) throws OseeCoreException {
- super.atsDelete(deleteArts, allRelated);
- // Delete all products
- for (TeamWorkFlowArtifact art : getRelatedArtifacts(AtsRelationTypes.ActionToWorkflow_WorkFlow,
- TeamWorkFlowArtifact.class)) {
- art.atsDelete(deleteArts, allRelated);
- }
- }
-
- @Override
- public String getWorldViewTeam() throws OseeCoreException {
- Set<TeamDefinitionArtifact> teams = new HashSet<TeamDefinitionArtifact>();
- // Roll up if same for all children
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- teams.add(team.getTeamDefinition());
- }
- return Artifacts.commaArts(teams);
- }
-
- @Override
- public String getWorldViewOriginator() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewOriginator());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public String getWorldViewCompletedDateStr() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewCompletedDateStr());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public Date getWorldViewCompletedDate() throws OseeCoreException {
- return getTeamWorkFlowArtifacts().iterator().next().getWorldViewCompletedDate();
- }
-
- @Override
- public String getWorldViewCancelledDateStr() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewCancelledDateStr());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public Date getWorldViewCancelledDate() throws OseeCoreException {
- return getTeamWorkFlowArtifacts().iterator().next().getWorldViewCancelledDate();
- }
-
- @Override
- public String getWorldViewResolution() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewResolution());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public double getWorldViewRemainHours() throws OseeCoreException {
- double hours = 0;
- // Add up hours for all children
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- hours += team.getWorldViewRemainHours();
- }
- return hours;
- }
-
- @Override
- public double getWorldViewManDaysNeeded() throws OseeCoreException {
- double hours = 0;
- // Add up hours for all children
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- hours += team.getWorldViewManDaysNeeded();
- }
- return hours;
- }
-
- @Override
- public double getWorldViewEstimatedHours() throws OseeCoreException {
- double hours = 0;
- // Add up hours for all children
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- hours += team.getWorldViewEstimatedHours();
- }
- return hours;
- }
-
- public int getWorldViewStatePercentComplete() throws OseeCoreException {
- if (getTeamWorkFlowArtifacts().size() == 1) {
- return getTeamWorkFlowArtifacts().iterator().next().getWorldViewStatePercentComplete();
- } else {
- double percent = 0;
- int items = 0;
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (!team.isCancelled()) {
- percent += team.getWorldViewStatePercentComplete();
- items++;
- }
- }
- if (items > 0) {
- Double rollPercent = percent / items;
- return rollPercent.intValue();
- }
- }
- return 0;
- }
-
- @Override
- public String getWorldViewRelatedToState() {
- return "";
- }
-
- @Override
- public String getWorldViewNotes() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewNotes());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public String getWorldViewGroups() throws OseeCoreException {
- Set<Artifact> groups = new HashSet<Artifact>();
- groups.addAll(getRelatedArtifacts(CoreRelationTypes.Universal_Grouping__Group));
- // Roll up if same for all children
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- groups.addAll(team.getRelatedArtifacts(CoreRelationTypes.Universal_Grouping__Group));
- }
- return Artifacts.toString("; ", groups);
- }
-
- @Override
- public String getWorldViewGoals() throws OseeCoreException {
- return Artifacts.toString("; ", getRelatedArtifacts(AtsRelationTypes.Goal_Goal));
- }
-
- @Override
- public String getWorldViewNumeric1() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewNumeric1());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public String getWorldViewNumeric2() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewNumeric2());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public String getWorldViewCategory() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewCategory());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public String getWorldViewGoalOrderVote() throws OseeCoreException {
+ } + + @Override + public String getWorldViewActionableItems() throws OseeCoreException { + Set<ActionableItemArtifact> aias = new HashSet<ActionableItemArtifact>(); + // Roll up if same for all children + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + aias.addAll(team.getActionableItemsDam().getActionableItems()); + } + return Artifacts.commaArts(aias); + } + + @Override + public void atsDelete(Set<Artifact> deleteArts, Map<Artifact, Object> allRelated) throws OseeCoreException { + super.atsDelete(deleteArts, allRelated); + // Delete all products + for (TeamWorkFlowArtifact art : getRelatedArtifacts(AtsRelationTypes.ActionToWorkflow_WorkFlow, + TeamWorkFlowArtifact.class)) { + art.atsDelete(deleteArts, allRelated); + } + } + + @Override + public String getWorldViewTeam() throws OseeCoreException { + Set<TeamDefinitionArtifact> teams = new HashSet<TeamDefinitionArtifact>(); + // Roll up if same for all children + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + teams.add(team.getTeamDefinition()); + } + return Artifacts.commaArts(teams); + } + + @Override + public String getWorldViewOriginator() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewOriginator()); + } + return Collections.toString(";", strs); + } + + @Override + public String getWorldViewCompletedDateStr() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewCompletedDateStr()); + } + return Collections.toString(";", strs); + } + + @Override + public Date getWorldViewCompletedDate() throws OseeCoreException { + return getTeamWorkFlowArtifacts().iterator().next().getWorldViewCompletedDate(); + } + + @Override + public String getWorldViewCancelledDateStr() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewCancelledDateStr()); + } + return Collections.toString(";", strs); + } + + @Override + public Date getWorldViewCancelledDate() throws OseeCoreException { + return getTeamWorkFlowArtifacts().iterator().next().getWorldViewCancelledDate(); + } + + @Override + public String getWorldViewResolution() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewResolution()); + } + return Collections.toString(";", strs); + } + + @Override + public double getWorldViewRemainHours() throws OseeCoreException { + double hours = 0; + // Add up hours for all children + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + hours += team.getWorldViewRemainHours(); + } + return hours; + } + + @Override + public double getWorldViewManDaysNeeded() throws OseeCoreException { + double hours = 0; + // Add up hours for all children + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + hours += team.getWorldViewManDaysNeeded(); + } + return hours; + } + + @Override + public double getWorldViewEstimatedHours() throws OseeCoreException { + double hours = 0; + // Add up hours for all children + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + hours += team.getWorldViewEstimatedHours(); + } + return hours; + } + + public int getWorldViewStatePercentComplete() throws OseeCoreException { + if (getTeamWorkFlowArtifacts().size() == 1) { + return getTeamWorkFlowArtifacts().iterator().next().getWorldViewStatePercentComplete(); + } else { + double percent = 0; + int items = 0; + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (!team.isCancelled()) { + percent += team.getWorldViewStatePercentComplete(); + items++; + } + } + if (items > 0) { + Double rollPercent = percent / items; + return rollPercent.intValue(); + } + } + return 0; + } + + @Override + public String getWorldViewRelatedToState() { + return ""; + } + + @Override + public String getWorldViewNotes() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewNotes()); + } + return Collections.toString(";", strs); + } + + @Override + public String getWorldViewGroups() throws OseeCoreException { + Set<Artifact> groups = new HashSet<Artifact>(); + groups.addAll(getRelatedArtifacts(CoreRelationTypes.Universal_Grouping__Group)); + // Roll up if same for all children + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + groups.addAll(team.getRelatedArtifacts(CoreRelationTypes.Universal_Grouping__Group)); + } + return Artifacts.toString("; ", groups); + } + + @Override + public String getWorldViewGoals() throws OseeCoreException { + return Artifacts.toString("; ", getRelatedArtifacts(AtsRelationTypes.Goal_Goal)); + } + + @Override + public String getWorldViewNumeric1() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewNumeric1()); + } + return Collections.toString(";", strs); + } + + @Override + public String getWorldViewNumeric2() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewNumeric2()); + } + return Collections.toString(";", strs); + } + + @Override + public String getWorldViewCategory() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewCategory()); + } + return Collections.toString(";", strs); + } + + @Override + public String getWorldViewGoalOrderVote() throws OseeCoreException { return getSoleAttributeValue(AtsAttributeTypes.GoalOrderVote, ""); - }
-
- @Override
- public String getWorldViewWorkPackage() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewWorkPackage());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public String getWorldViewCategory2() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewCategory2());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public String getWorldViewCategory3() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewCategory3());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public String getWorldViewTargetedVersionStr() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewTargetedVersionStr());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public String getHyperName() {
- return getName();
- }
-
- @Override
- public String getHyperType() {
- try {
- return getArtifactTypeName();
- } catch (Exception ex) {
- return ex.getLocalizedMessage();
- }
- }
-
- @Override
- public String getHyperState() {
- try {
- if (getTeamWorkFlowArtifacts().size() == 1) {
- return getTeamWorkFlowArtifacts().iterator().next().getHyperState();
- }
- } catch (Exception ex) {
- return XViewerCells.getCellExceptionString(ex);
- }
- return "";
- }
-
- @Override
- public String getHyperTargetVersion() {
- return null;
- }
-
- @Override
- public String getHyperAssignee() {
- try {
- if (getTeamWorkFlowArtifacts().size() == 1) {
- return getTeamWorkFlowArtifacts().iterator().next().getHyperAssignee();
- }
- } catch (Exception ex) {
- return XViewerCells.getCellExceptionString(ex);
- }
- return "";
- }
-
- @Override
- public Image getHyperAssigneeImage() throws OseeCoreException {
- if (getTeamWorkFlowArtifacts().size() == 1) {
- return getTeamWorkFlowArtifacts().iterator().next().getHyperAssigneeImage();
- }
- return null;
- }
-
- @Override
- public Artifact getHyperArtifact() {
- return this;
- }
-
- public Result editActionableItems() throws OseeCoreException {
- final AICheckTreeDialog diag =
- new AICheckTreeDialog(
- "Add Impacted Actionable Items",
- "Select New Impacted Actionable Items\n\n" + "Note: Un-selecting existing items will NOT remove the impact.\n" + "Team Workflow with no impact should be transitioned to Cancelled.",
- Active.Active);
-
- diag.setInitialAias(getActionableItems());
- if (diag.open() != 0) {
- return Result.FalseResult;
- }
-
- // ensure that at least one actionable item exists for each team after aias added/removed
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- Set<ActionableItemArtifact> currentAias = team.getActionableItemsDam().getActionableItems();
- Collection<ActionableItemArtifact> checkedAias = diag.getChecked();
- for (ActionableItemArtifact aia : new CopyOnWriteArrayList<ActionableItemArtifact>(currentAias)) {
- if (!checkedAias.contains(aia)) {
- currentAias.remove(aia);
- }
- }
- if (currentAias.isEmpty()) {
- return new Result("Can not remove all actionable items for a team.\n\nActionable Items will go to 0 for [" +
- //
- team.getTeamName() + "][" + team.getHumanReadableId() + "]\n\nCancel team workflow instead.");
- }
- }
-
- final StringBuffer sb = new StringBuffer();
- SkynetTransaction transaction = new SkynetTransaction(AtsUtil.getAtsBranch(), "Edit Actionable Items");
-
- // Add new aias
- for (ActionableItemArtifact aia : diag.getChecked()) {
- Result result = addActionableItemToTeamsOrAddTeams(aia, UserManager.getUser(), transaction);
- sb.append(result.getText());
- }
- // Remove unchecked aias
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- for (ActionableItemArtifact aia : team.getActionableItemsDam().getActionableItems()) {
- if (!diag.getChecked().contains(aia)) {
- team.getActionableItemsDam().removeActionableItem(aia);
- }
- }
- team.persist(transaction);
- }
-
- transaction.execute();
- return new Result(true, sb.toString());
- }
-
- public Result addActionableItemToTeamsOrAddTeams(ActionableItemArtifact aia, User originator, SkynetTransaction transaction) throws OseeCoreException {
- StringBuffer sb = new StringBuffer();
- for (TeamDefinitionArtifact tda : TeamDefinitionArtifact.getImpactedTeamDefs(Arrays.asList(aia))) {
- boolean teamExists = false;
- // Look for team workflow that is associated with this tda
- for (TeamWorkFlowArtifact teamArt : getTeamWorkFlowArtifacts()) {
- // If found
- if (teamArt.getTeamDefinition().equals(tda)) {
- // And workflow doesn't already have this actionable item,
- // ADD it
- if (!teamArt.getActionableItemsDam().getActionableItems().contains(aia)) {
- teamArt.getActionableItemsDam().addActionableItem(aia);
- teamArt.saveSMA(transaction);
- sb.append(aia.getName() + " => added to existing team workflow \"" + tda.getName() + "\"\n");
- teamExists = true;
- } else {
- sb.append(aia.getName() + " => already exists in team workflow \"" + tda.getName() + "\"\n");
- teamExists = true;
- }
- }
- }
- if (!teamExists) {
- TeamWorkFlowArtifact teamArt = createTeamWorkflow(tda, Arrays.asList(aia), tda.getLeads(), transaction);
- if (originator != null) {
- teamArt.getLog().setOriginator(originator);
- }
- teamArt.persist(transaction);
- sb.append(aia.getName() + " => added team workflow \"" + tda.getName() + "\"\n");
- }
- }
- return new Result(true, sb.toString());
- }
-
- public TeamWorkFlowArtifact createTeamWorkflow(TeamDefinitionArtifact teamDef, Collection<ActionableItemArtifact> actionableItems, Collection<User> assignees, SkynetTransaction transaction, CreateTeamOption... createTeamOption) throws OseeCoreException {
- String teamWorkflowArtifactName = AtsArtifactTypes.TeamWorkflow.getName();
- IAtsTeamWorkflow teamExt = null;
-
- // Check if any plugins want to create the team workflow themselves
- for (IAtsTeamWorkflow teamExtension : TeamWorkflowExtensions.getInstance().getAtsTeamWorkflowExtensions()) {
- boolean isResponsible = false;
- try {
- isResponsible = teamExtension.isResponsibleForTeamWorkflowCreation(teamDef, actionableItems);
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.WARNING, ex);
- }
- if (isResponsible) {
- teamWorkflowArtifactName = teamExtension.getTeamWorkflowArtifactName(teamDef, actionableItems);
- teamExt = teamExtension;
- }
- }
-
- // NOTE: The persist of the workflow will auto-email the assignees
- TeamWorkFlowArtifact teamArt =
- createTeamWorkflow(teamDef, actionableItems, assignees, ArtifactTypeManager.getType(teamWorkflowArtifactName),
- transaction, createTeamOption);
- // Notify extension that workflow was created
- if (teamExt != null) {
- teamExt.teamWorkflowCreated(teamArt);
- }
- return teamArt;
- }
-
- public TeamWorkFlowArtifact createTeamWorkflow(TeamDefinitionArtifact teamDef, Collection<ActionableItemArtifact> actionableItems, Collection<User> assignees, IArtifactType artifactType, SkynetTransaction transaction, CreateTeamOption... createTeamOption) throws OseeCoreException {
- return createTeamWorkflow(teamDef, actionableItems, assignees, null, null, artifactType, transaction,
- createTeamOption);
- }
-
- public TeamWorkFlowArtifact createTeamWorkflow(TeamDefinitionArtifact teamDef, Collection<ActionableItemArtifact> actionableItems, Collection<User> assignees, String guid, String hrid, IArtifactType artifactType, SkynetTransaction transaction, CreateTeamOption... createTeamOption) throws OseeCoreException {
-
- if (!Collections.getAggregate(createTeamOption).contains(CreateTeamOption.Duplicate_If_Exists)) {
- // Make sure team doesn't already exist
- for (TeamWorkFlowArtifact teamArt : getTeamWorkFlowArtifacts()) {
- if (teamArt.getTeamDefinition().equals(teamDef)) {
- AWorkbench.popup("ERROR", "Team already exist");
- throw new OseeArgumentException(
- "Team \"" + teamDef + "\" already exists for Action " + getHumanReadableId());
- }
- }
- }
-
- TeamWorkFlowArtifact teamArt = null;
- if (guid == null) {
- teamArt = (TeamWorkFlowArtifact) ArtifactTypeManager.addArtifact(artifactType, AtsUtil.getAtsBranch());
- } else {
- teamArt =
- (TeamWorkFlowArtifact) ArtifactTypeManager.addArtifact(artifactType, AtsUtil.getAtsBranch(), guid, hrid);
- }
- setArtifactIdentifyData(this, teamArt);
-
- teamArt.getLog().addLog(LogType.Originated, "", "");
-
- // Relate Workflow to ActionableItems (by guid) if team is responsible
- // for that AI
- for (ActionableItemArtifact aia : actionableItems) {
- if (aia.getImpactedTeamDefs().contains(teamDef)) {
- teamArt.getActionableItemsDam().addActionableItem(aia);
- }
- }
-
- // Relate WorkFlow to Team Definition (by guid due to relation loading
- // issues)
- teamArt.setTeamDefinition(teamDef);
-
- // Initialize state machine
- String startState = teamArt.getWorkFlowDefinition().getStartPage().getPageName();
- teamArt.getStateMgr().initializeStateMachine(startState, assignees);
- teamArt.getLog().addLog(LogType.StateEntered, startState, "");
-
- // Relate Action to WorkFlow
- addRelation(AtsRelationTypes.ActionToWorkflow_WorkFlow, teamArt);
-
- teamArt.persist(transaction);
-
- return teamArt;
- }
-
- /**
- * Set Team Workflow attributes off given action artifact
- */
- public static void setArtifactIdentifyData(ActionArtifact fromAction, TeamWorkFlowArtifact toTeam) throws OseeCoreException {
+ } + + @Override + public String getWorldViewWorkPackage() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewWorkPackage()); + } + return Collections.toString(";", strs); + } + + @Override + public String getWorldViewCategory2() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewCategory2()); + } + return Collections.toString(";", strs); + } + + @Override + public String getWorldViewCategory3() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewCategory3()); + } + return Collections.toString(";", strs); + } + + @Override + public String getWorldViewTargetedVersionStr() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewTargetedVersionStr()); + } + return Collections.toString(";", strs); + } + + @Override + public String getHyperName() { + return getName(); + } + + @Override + public String getHyperType() { + try { + return getArtifactTypeName(); + } catch (Exception ex) { + return ex.getLocalizedMessage(); + } + } + + @Override + public String getHyperState() { + try { + if (getTeamWorkFlowArtifacts().size() == 1) { + return getTeamWorkFlowArtifacts().iterator().next().getHyperState(); + } + } catch (Exception ex) { + return XViewerCells.getCellExceptionString(ex); + } + return ""; + } + + @Override + public String getHyperTargetVersion() { + return null; + } + + @Override + public String getHyperAssignee() { + try { + if (getTeamWorkFlowArtifacts().size() == 1) { + return getTeamWorkFlowArtifacts().iterator().next().getHyperAssignee(); + } + } catch (Exception ex) { + return XViewerCells.getCellExceptionString(ex); + } + return ""; + } + + @Override + public Image getHyperAssigneeImage() throws OseeCoreException { + if (getTeamWorkFlowArtifacts().size() == 1) { + return getTeamWorkFlowArtifacts().iterator().next().getHyperAssigneeImage(); + } + return null; + } + + @Override + public Artifact getHyperArtifact() { + return this; + } + + public Result editActionableItems() throws OseeCoreException { + final AICheckTreeDialog diag = + new AICheckTreeDialog( + "Add Impacted Actionable Items", + "Select New Impacted Actionable Items\n\n" + "Note: Un-selecting existing items will NOT remove the impact.\n" + "Team Workflow with no impact should be transitioned to Cancelled.", + Active.Active); + + diag.setInitialAias(getActionableItems()); + if (diag.open() != 0) { + return Result.FalseResult; + } + + // ensure that at least one actionable item exists for each team after aias added/removed + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + Set<ActionableItemArtifact> currentAias = team.getActionableItemsDam().getActionableItems(); + Collection<ActionableItemArtifact> checkedAias = diag.getChecked(); + for (ActionableItemArtifact aia : new CopyOnWriteArrayList<ActionableItemArtifact>(currentAias)) { + if (!checkedAias.contains(aia)) { + currentAias.remove(aia); + } + } + if (currentAias.isEmpty()) { + return new Result("Can not remove all actionable items for a team.\n\nActionable Items will go to 0 for [" + + // + team.getTeamName() + "][" + team.getHumanReadableId() + "]\n\nCancel team workflow instead."); + } + } + + final StringBuffer sb = new StringBuffer(); + SkynetTransaction transaction = new SkynetTransaction(AtsUtil.getAtsBranch(), "Edit Actionable Items"); + + // Add new aias + for (ActionableItemArtifact aia : diag.getChecked()) { + Result result = addActionableItemToTeamsOrAddTeams(aia, UserManager.getUser(), transaction); + sb.append(result.getText()); + } + // Remove unchecked aias + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + for (ActionableItemArtifact aia : team.getActionableItemsDam().getActionableItems()) { + if (!diag.getChecked().contains(aia)) { + team.getActionableItemsDam().removeActionableItem(aia); + } + } + team.persist(transaction); + } + + transaction.execute(); + return new Result(true, sb.toString()); + } + + public Result addActionableItemToTeamsOrAddTeams(ActionableItemArtifact aia, User originator, SkynetTransaction transaction) throws OseeCoreException { + StringBuffer sb = new StringBuffer(); + for (TeamDefinitionArtifact tda : TeamDefinitionArtifact.getImpactedTeamDefs(Arrays.asList(aia))) { + boolean teamExists = false; + // Look for team workflow that is associated with this tda + for (TeamWorkFlowArtifact teamArt : getTeamWorkFlowArtifacts()) { + // If found + if (teamArt.getTeamDefinition().equals(tda)) { + // And workflow doesn't already have this actionable item, + // ADD it + if (!teamArt.getActionableItemsDam().getActionableItems().contains(aia)) { + teamArt.getActionableItemsDam().addActionableItem(aia); + teamArt.saveSMA(transaction); + sb.append(aia.getName() + " => added to existing team workflow \"" + tda.getName() + "\"\n"); + teamExists = true; + } else { + sb.append(aia.getName() + " => already exists in team workflow \"" + tda.getName() + "\"\n"); + teamExists = true; + } + } + } + if (!teamExists) { + TeamWorkFlowArtifact teamArt = createTeamWorkflow(tda, Arrays.asList(aia), tda.getLeads(), transaction); + if (originator != null) { + teamArt.getLog().setOriginator(originator); + } + teamArt.persist(transaction); + sb.append(aia.getName() + " => added team workflow \"" + tda.getName() + "\"\n"); + } + } + return new Result(true, sb.toString()); + } + + public TeamWorkFlowArtifact createTeamWorkflow(TeamDefinitionArtifact teamDef, Collection<ActionableItemArtifact> actionableItems, Collection<User> assignees, SkynetTransaction transaction, CreateTeamOption... createTeamOption) throws OseeCoreException { + String teamWorkflowArtifactName = AtsArtifactTypes.TeamWorkflow.getName(); + IAtsTeamWorkflow teamExt = null; + + // Check if any plugins want to create the team workflow themselves + for (IAtsTeamWorkflow teamExtension : TeamWorkflowExtensions.getInstance().getAtsTeamWorkflowExtensions()) { + boolean isResponsible = false; + try { + isResponsible = teamExtension.isResponsibleForTeamWorkflowCreation(teamDef, actionableItems); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.WARNING, ex); + } + if (isResponsible) { + teamWorkflowArtifactName = teamExtension.getTeamWorkflowArtifactName(teamDef, actionableItems); + teamExt = teamExtension; + } + } + + // NOTE: The persist of the workflow will auto-email the assignees + TeamWorkFlowArtifact teamArt = + createTeamWorkflow(teamDef, actionableItems, assignees, ArtifactTypeManager.getType(teamWorkflowArtifactName), + transaction, createTeamOption); + // Notify extension that workflow was created + if (teamExt != null) { + teamExt.teamWorkflowCreated(teamArt); + } + return teamArt; + } + + public TeamWorkFlowArtifact createTeamWorkflow(TeamDefinitionArtifact teamDef, Collection<ActionableItemArtifact> actionableItems, Collection<User> assignees, IArtifactType artifactType, SkynetTransaction transaction, CreateTeamOption... createTeamOption) throws OseeCoreException { + return createTeamWorkflow(teamDef, actionableItems, assignees, null, null, artifactType, transaction, + createTeamOption); + } + + public TeamWorkFlowArtifact createTeamWorkflow(TeamDefinitionArtifact teamDef, Collection<ActionableItemArtifact> actionableItems, Collection<User> assignees, String guid, String hrid, IArtifactType artifactType, SkynetTransaction transaction, CreateTeamOption... createTeamOption) throws OseeCoreException { + + if (!Collections.getAggregate(createTeamOption).contains(CreateTeamOption.Duplicate_If_Exists)) { + // Make sure team doesn't already exist + for (TeamWorkFlowArtifact teamArt : getTeamWorkFlowArtifacts()) { + if (teamArt.getTeamDefinition().equals(teamDef)) { + AWorkbench.popup("ERROR", "Team already exist"); + throw new OseeArgumentException( + "Team \"" + teamDef + "\" already exists for Action " + getHumanReadableId()); + } + } + } + + TeamWorkFlowArtifact teamArt = null; + if (guid == null) { + teamArt = (TeamWorkFlowArtifact) ArtifactTypeManager.addArtifact(artifactType, AtsUtil.getAtsBranch()); + } else { + teamArt = + (TeamWorkFlowArtifact) ArtifactTypeManager.addArtifact(artifactType, AtsUtil.getAtsBranch(), guid, hrid); + } + setArtifactIdentifyData(this, teamArt); + + teamArt.getLog().addLog(LogType.Originated, "", ""); + + // Relate Workflow to ActionableItems (by guid) if team is responsible + // for that AI + for (ActionableItemArtifact aia : actionableItems) { + if (aia.getImpactedTeamDefs().contains(teamDef)) { + teamArt.getActionableItemsDam().addActionableItem(aia); + } + } + + // Relate WorkFlow to Team Definition (by guid due to relation loading + // issues) + teamArt.setTeamDefinition(teamDef); + + // Initialize state machine + String startState = teamArt.getWorkFlowDefinition().getStartPage().getPageName(); + teamArt.getStateMgr().initializeStateMachine(startState, assignees); + teamArt.getLog().addLog(LogType.StateEntered, startState, ""); + + // Relate Action to WorkFlow + addRelation(AtsRelationTypes.ActionToWorkflow_WorkFlow, teamArt); + + teamArt.persist(transaction); + + return teamArt; + } + + /** + * Set Team Workflow attributes off given action artifact + */ + public static void setArtifactIdentifyData(ActionArtifact fromAction, TeamWorkFlowArtifact toTeam) throws OseeCoreException { String priorityStr = fromAction.getSoleAttributeValue(AtsAttributeTypes.PriorityType, ""); - PriorityType priType = null;
- if (Strings.isValid(priorityStr)) {
- priType = PriorityType.getPriority(priorityStr);
- } else {
- throw new OseeArgumentException("Invalid priority => " + priorityStr);
- }
- setArtifactIdentifyData(toTeam, fromAction.getName(),
+ PriorityType priType = null; + if (Strings.isValid(priorityStr)) { + priType = PriorityType.getPriority(priorityStr); + } else { + throw new OseeArgumentException("Invalid priority => " + priorityStr); + } + setArtifactIdentifyData(toTeam, fromAction.getName(), fromAction.getSoleAttributeValue(AtsAttributeTypes.Description, ""), ChangeType.getChangeType(fromAction.getSoleAttributeValue(AtsAttributeTypes.ChangeType, "")), priType, - // fromAction.getAttributesToStringList(AtsAttributeTypes.ATS_USER_COMMUNITY),
+ // fromAction.getAttributesToStringList(AtsAttributeTypes.ATS_USER_COMMUNITY), fromAction.getSoleAttributeValue(AtsAttributeTypes.ValidationRequired, false), fromAction.getSoleAttributeValue(AtsAttributeTypes.NeedBy, (Date) null)); - }
-
- /**
- * Since there is no shared attribute yet, action and workflow arts are all populate with identify data
- */
- public static void setArtifactIdentifyData(Artifact art, String title, String desc, ChangeType changeType, PriorityType priority, Boolean validationRequired, Date needByDate) throws OseeCoreException {
- art.setName(title);
- if (!desc.equals("")) {
+ } + + /** + * Since there is no shared attribute yet, action and workflow arts are all populate with identify data + */ + public static void setArtifactIdentifyData(Artifact art, String title, String desc, ChangeType changeType, PriorityType priority, Boolean validationRequired, Date needByDate) throws OseeCoreException { + art.setName(title); + if (!desc.equals("")) { art.setSoleAttributeValue(AtsAttributeTypes.Description, desc); - }
+ } art.setSoleAttributeValue(AtsAttributeTypes.ChangeType, changeType.name()); - // art.setAttributeValues(ATSAttributes.USER_COMMUNITY_ATTRIBUTE.getStoreName(), userComms);
- if (priority != null) {
+ // art.setAttributeValues(ATSAttributes.USER_COMMUNITY_ATTRIBUTE.getStoreName(), userComms); + if (priority != null) { art.setSoleAttributeValue(AtsAttributeTypes.PriorityType, priority.getShortName()); - }
- if (needByDate != null) {
+ } + if (needByDate != null) { art.setSoleAttributeValue(AtsAttributeTypes.NeedBy, needByDate); - }
- if (validationRequired) {
+ } + if (validationRequired) { art.setSoleAttributeValue(AtsAttributeTypes.ValidationRequired, true); - }
- }
-
- @Override
- public String getWorldViewDecision() {
- return "";
- }
-
- @Override
- public Artifact getParentAtsArtifact() {
- return null;
- }
-
- @Override
- public String getWorldViewDescription() {
- try {
+ } + } + + @Override + public String getWorldViewDecision() { + return ""; + } + + @Override + public Artifact getParentAtsArtifact() { + return null; + } + + @Override + public String getWorldViewDescription() { + try { return getSoleAttributeValue(AtsAttributeTypes.Description, ""); - } catch (Exception ex) {
- return XViewerCells.getCellExceptionString(ex);
- }
- }
-
- @Override
- public String getWorldViewValidationRequiredStr() {
- try {
+ } catch (Exception ex) { + return XViewerCells.getCellExceptionString(ex); + } + } + + @Override + public String getWorldViewValidationRequiredStr() { + try { return String.valueOf(getSoleAttributeValue(AtsAttributeTypes.ValidationRequired, false)); - } catch (Exception ex) {
- return XViewerCells.getCellExceptionString(ex);
- }
- }
-
- @Override
- public Date getWorldViewEstimatedReleaseDate() throws OseeCoreException {
- return getTeamWorkFlowArtifacts().iterator().next().getWorldViewEstimatedReleaseDate();
- }
-
- @Override
- public String getWorldViewEstimatedCompletionDateStr() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewEstimatedCompletionDateStr());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public Date getWorldViewEstimatedCompletionDate() throws OseeCoreException {
- return getTeamWorkFlowArtifacts().iterator().next().getWorldViewEstimatedCompletionDate();
- }
-
- @Override
- public String getWorldViewReleaseDateStr() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewReleaseDateStr());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public Date getWorldViewReleaseDate() throws OseeCoreException {
- return getTeamWorkFlowArtifacts().iterator().next().getWorldViewReleaseDate();
- }
-
- @Override
- public String getWorldViewEstimatedReleaseDateStr() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewEstimatedReleaseDateStr());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public Result isWorldViewRemainHoursValid() throws OseeCoreException {
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (team.isWorldViewRemainHoursValid().isFalse()) {
- return team.isWorldViewRemainHoursValid();
- }
- }
- return Result.TrueResult;
- }
-
- @Override
- public Result isWorldViewManDaysNeededValid() {
- try {
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (team.isWorldViewManDaysNeededValid().isFalse()) {
- return team.isWorldViewManDaysNeededValid();
- }
- }
- } catch (OseeCoreException ex) {
- // Do nothing
- }
- return Result.TrueResult;
- }
-
- @Override
- public String getWorldViewChangeTypeStr() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewChangeTypeStr());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public String getWorldViewImplementer() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewImplementer());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public Date getWorldViewDeadlineDate() throws OseeCoreException {
- return getTeamWorkFlowArtifacts().iterator().next().getWorldViewDeadlineDate();
- }
-
- @Override
- public String getWorldViewDeadlineDateStr() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewDeadlineDateStr());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public double getWorldViewWeeklyBenefit() throws OseeCoreException {
- double hours = 0;
- // Add up hours for all children
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (!team.isCompleted() && !team.isCancelled()) {
- hours += team.getWorldViewWeeklyBenefit();
- }
- }
- return hours;
- }
-
- @Override
- public double getWorldViewAnnualCostAvoidance() throws OseeCoreException {
- double hours = 0;
- // Add up hours for all children
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (!team.isCompleted() && !team.isCancelled()) {
- hours += team.getWorldViewAnnualCostAvoidance();
- }
- }
- return hours;
- }
-
- @Override
- public Result isWorldViewAnnualCostAvoidanceValid() throws OseeCoreException {
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- Result result = team.isWorldViewAnnualCostAvoidanceValid();
- if (result.isFalse()) {
- return result;
- }
- }
- return Result.TrueResult;
- }
-
- @Override
- public Result isWorldViewDeadlineAlerting() throws OseeCoreException {
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- Result result = team.isWorldViewDeadlineAlerting();
- if (result.isTrue()) {
- return result;
- }
- }
- return Result.FalseResult;
- }
-
- @Override
- public String getWorldViewLegacyPCR() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewLegacyPCR());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public String getWorldViewPercentReworkStr() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- strs.add(team.getWorldViewPercentReworkStr());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public int getWorldViewPercentRework() {
- return 0;
- }
-
- @Override
- public String getWorldViewReviewAuthor() {
- return "";
- }
-
- @Override
- public String getWorldViewReviewDecider() {
- return "";
- }
-
- @Override
- public String getWorldViewReviewModerator() {
- return "";
- }
-
- @Override
- public String getWorldViewReviewReviewer() {
- return "";
- }
-
- @Override
- public double getWorldViewHoursSpentState() throws OseeCoreException {
- double hours = 0;
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (!team.isCancelled()) {
- hours += team.getWorldViewHoursSpentState();
- }
- }
- return hours;
- }
-
- @Override
- public double getWorldViewHoursSpentStateReview() throws OseeCoreException {
- double hours = 0;
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (!team.isCancelled()) {
- hours += team.getWorldViewHoursSpentStateReview();
- }
- }
- return hours;
- }
-
- @Override
- public double getWorldViewHoursSpentStateTask() throws OseeCoreException {
- double hours = 0;
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (!team.isCancelled()) {
- hours += team.getWorldViewHoursSpentStateTask();
- }
- }
- return hours;
- }
-
- @Override
- public double getWorldViewHoursSpentStateTotal() throws OseeCoreException {
- double hours = 0;
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (!team.isCancelled()) {
- hours += team.getWorldViewHoursSpentStateTotal();
- }
- }
- return hours;
- }
-
- @Override
- public double getWorldViewHoursSpentTotal() throws OseeCoreException {
- double hours = 0;
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (!team.isCancelled()) {
- hours += team.getWorldViewHoursSpentTotal();
- }
- }
- return hours;
- }
-
- @Override
- public int getWorldViewPercentCompleteState() throws OseeCoreException {
- double percent = 0;
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (!team.isCancelled()) {
- percent += team.getWorldViewPercentCompleteState();
- }
- }
- if (percent == 0) {
- return 0;
- }
- Double rollPercent = percent / getTeamWorkFlowArtifacts().size();
- return rollPercent.intValue();
- }
-
- @Override
- public int getWorldViewPercentCompleteStateReview() throws OseeCoreException {
- double percent = 0;
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (!team.isCancelled()) {
- percent += team.getWorldViewPercentCompleteStateReview();
- }
- }
- if (percent == 0) {
- return 0;
- }
- Double rollPercent = percent / getTeamWorkFlowArtifacts().size();
- return rollPercent.intValue();
- }
-
- @Override
- public int getWorldViewPercentCompleteStateTask() throws OseeCoreException {
- double percent = 0;
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (!team.isCancelled()) {
- percent += team.getWorldViewPercentCompleteStateTask();
- }
- }
- if (percent == 0) {
- return 0;
- }
- Double rollPercent = percent / getTeamWorkFlowArtifacts().size();
- return rollPercent.intValue();
- }
-
- @Override
- public int getWorldViewPercentCompleteTotal() throws OseeCoreException {
- double percent = 0;
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (!team.isCancelled()) {
- percent += team.getWorldViewPercentCompleteTotal();
- }
- }
- if (percent == 0) {
- return 0;
- }
- Double rollPercent = percent / getTeamWorkFlowArtifacts().size();
- return rollPercent.intValue();
- }
-
- public String getWorldViewLastUpdated() throws OseeCoreException {
- return XDate.getDateStr(getLastModified(), XDate.MMDDYYHHMM);
- }
-
- @Override
- public String getWorldViewLastStatused() {
- return "(see children)";
- }
-
- @Override
- public VersionArtifact getWorldViewTargetedVersion() {
- return null;
- }
-
- @Override
- public String getWorldViewNumberOfReviewIssueDefects() {
- return "";
- }
-
- @Override
- public String getWorldViewNumberOfReviewMajorDefects() {
- return "";
- }
-
- @Override
- public String getWorldViewNumberOfReviewMinorDefects() {
- return "";
- }
-
- @Override
- public String getWorldViewActionsIntiatingWorkflow() throws OseeCoreException {
- Date earliestDate = null;
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (earliestDate == null || team.getLog().getCreationDate().before(earliestDate)) {
- earliestDate = team.getLog().getCreationDate();
- }
- }
- List<String> teamNames = new ArrayList<String>();
- for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) {
- if (team.getLog().getCreationDate().equals(earliestDate)) {
- teamNames.add(team.getTeamName());
- }
- }
- return Collections.toString("; ", teamNames);
- }
-
- @Override
- public String getWorldViewParentID() {
- return "";
- }
-
- @Override
- public String getWorldViewParentState() {
- return null;
- }
-
- @Override
- public String getWorldViewOriginatingWorkflowStr() throws OseeCoreException {
- Set<String> strs = new HashSet<String>();
- for (TeamWorkFlowArtifact team : getWorldViewOriginatingWorkflows()) {
- strs.add(team.getWorldViewTeam());
- }
- return Collections.toString(";", strs);
- }
-
- @Override
- public Collection<TeamWorkFlowArtifact> getWorldViewOriginatingWorkflows() throws OseeCoreException {
- if (getTeamWorkFlowArtifacts().size() == 1) {
- return getTeamWorkFlowArtifacts();
- }
- Collection<TeamWorkFlowArtifact> results = new ArrayList<TeamWorkFlowArtifact>();
- Date origDate = null;
- for (TeamWorkFlowArtifact teamArt : getTeamWorkFlowArtifacts()) {
- if (teamArt.isCancelled()) {
- continue;
- }
- if (origDate == null || teamArt.getWorldViewCreatedDate().before(origDate)) {
- results.clear();
- origDate = teamArt.getWorldViewCreatedDate();
- results.add(teamArt);
- } else if (origDate.equals(teamArt.getWorldViewCreatedDate())) {
- results.add(teamArt);
- }
- }
- return results;
- }
-
- @Override
- public String getWorldViewGoalOrder() throws OseeCoreException {
- return GoalArtifact.getGoalOrder(this);
- }
-
-}
+ } catch (Exception ex) { + return XViewerCells.getCellExceptionString(ex); + } + } + + @Override + public Date getWorldViewEstimatedReleaseDate() throws OseeCoreException { + return getTeamWorkFlowArtifacts().iterator().next().getWorldViewEstimatedReleaseDate(); + } + + @Override + public String getWorldViewEstimatedCompletionDateStr() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewEstimatedCompletionDateStr()); + } + return Collections.toString(";", strs); + } + + @Override + public Date getWorldViewEstimatedCompletionDate() throws OseeCoreException { + return getTeamWorkFlowArtifacts().iterator().next().getWorldViewEstimatedCompletionDate(); + } + + @Override + public String getWorldViewReleaseDateStr() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewReleaseDateStr()); + } + return Collections.toString(";", strs); + } + + @Override + public Date getWorldViewReleaseDate() throws OseeCoreException { + return getTeamWorkFlowArtifacts().iterator().next().getWorldViewReleaseDate(); + } + + @Override + public String getWorldViewEstimatedReleaseDateStr() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewEstimatedReleaseDateStr()); + } + return Collections.toString(";", strs); + } + + @Override + public Result isWorldViewRemainHoursValid() throws OseeCoreException { + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (team.isWorldViewRemainHoursValid().isFalse()) { + return team.isWorldViewRemainHoursValid(); + } + } + return Result.TrueResult; + } + + @Override + public Result isWorldViewManDaysNeededValid() { + try { + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (team.isWorldViewManDaysNeededValid().isFalse()) { + return team.isWorldViewManDaysNeededValid(); + } + } + } catch (OseeCoreException ex) { + // Do nothing + } + return Result.TrueResult; + } + + @Override + public String getWorldViewChangeTypeStr() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewChangeTypeStr()); + } + return Collections.toString(";", strs); + } + + @Override + public String getWorldViewImplementer() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewImplementer()); + } + return Collections.toString(";", strs); + } + + @Override + public Date getWorldViewDeadlineDate() throws OseeCoreException { + return getTeamWorkFlowArtifacts().iterator().next().getWorldViewDeadlineDate(); + } + + @Override + public String getWorldViewDeadlineDateStr() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewDeadlineDateStr()); + } + return Collections.toString(";", strs); + } + + @Override + public double getWorldViewWeeklyBenefit() throws OseeCoreException { + double hours = 0; + // Add up hours for all children + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (!team.isCompleted() && !team.isCancelled()) { + hours += team.getWorldViewWeeklyBenefit(); + } + } + return hours; + } + + @Override + public double getWorldViewAnnualCostAvoidance() throws OseeCoreException { + double hours = 0; + // Add up hours for all children + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (!team.isCompleted() && !team.isCancelled()) { + hours += team.getWorldViewAnnualCostAvoidance(); + } + } + return hours; + } + + @Override + public Result isWorldViewAnnualCostAvoidanceValid() throws OseeCoreException { + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + Result result = team.isWorldViewAnnualCostAvoidanceValid(); + if (result.isFalse()) { + return result; + } + } + return Result.TrueResult; + } + + @Override + public Result isWorldViewDeadlineAlerting() throws OseeCoreException { + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + Result result = team.isWorldViewDeadlineAlerting(); + if (result.isTrue()) { + return result; + } + } + return Result.FalseResult; + } + + @Override + public String getWorldViewLegacyPCR() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewLegacyPCR()); + } + return Collections.toString(";", strs); + } + + @Override + public String getWorldViewPercentReworkStr() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + strs.add(team.getWorldViewPercentReworkStr()); + } + return Collections.toString(";", strs); + } + + @Override + public int getWorldViewPercentRework() { + return 0; + } + + @Override + public String getWorldViewReviewAuthor() { + return ""; + } + + @Override + public String getWorldViewReviewDecider() { + return ""; + } + + @Override + public String getWorldViewReviewModerator() { + return ""; + } + + @Override + public String getWorldViewReviewReviewer() { + return ""; + } + + @Override + public double getWorldViewHoursSpentState() throws OseeCoreException { + double hours = 0; + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (!team.isCancelled()) { + hours += team.getWorldViewHoursSpentState(); + } + } + return hours; + } + + @Override + public double getWorldViewHoursSpentStateReview() throws OseeCoreException { + double hours = 0; + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (!team.isCancelled()) { + hours += team.getWorldViewHoursSpentStateReview(); + } + } + return hours; + } + + @Override + public double getWorldViewHoursSpentStateTask() throws OseeCoreException { + double hours = 0; + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (!team.isCancelled()) { + hours += team.getWorldViewHoursSpentStateTask(); + } + } + return hours; + } + + @Override + public double getWorldViewHoursSpentStateTotal() throws OseeCoreException { + double hours = 0; + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (!team.isCancelled()) { + hours += team.getWorldViewHoursSpentStateTotal(); + } + } + return hours; + } + + @Override + public double getWorldViewHoursSpentTotal() throws OseeCoreException { + double hours = 0; + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (!team.isCancelled()) { + hours += team.getWorldViewHoursSpentTotal(); + } + } + return hours; + } + + @Override + public int getWorldViewPercentCompleteState() throws OseeCoreException { + double percent = 0; + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (!team.isCancelled()) { + percent += team.getWorldViewPercentCompleteState(); + } + } + if (percent == 0) { + return 0; + } + Double rollPercent = percent / getTeamWorkFlowArtifacts().size(); + return rollPercent.intValue(); + } + + @Override + public int getWorldViewPercentCompleteStateReview() throws OseeCoreException { + double percent = 0; + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (!team.isCancelled()) { + percent += team.getWorldViewPercentCompleteStateReview(); + } + } + if (percent == 0) { + return 0; + } + Double rollPercent = percent / getTeamWorkFlowArtifacts().size(); + return rollPercent.intValue(); + } + + @Override + public int getWorldViewPercentCompleteStateTask() throws OseeCoreException { + double percent = 0; + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (!team.isCancelled()) { + percent += team.getWorldViewPercentCompleteStateTask(); + } + } + if (percent == 0) { + return 0; + } + Double rollPercent = percent / getTeamWorkFlowArtifacts().size(); + return rollPercent.intValue(); + } + + @Override + public int getWorldViewPercentCompleteTotal() throws OseeCoreException { + double percent = 0; + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (!team.isCancelled()) { + percent += team.getWorldViewPercentCompleteTotal(); + } + } + if (percent == 0) { + return 0; + } + Double rollPercent = percent / getTeamWorkFlowArtifacts().size(); + return rollPercent.intValue(); + } + + public String getWorldViewLastUpdated() throws OseeCoreException { + return XDate.getDateStr(getLastModified(), XDate.MMDDYYHHMM); + } + + @Override + public String getWorldViewLastStatused() { + return "(see children)"; + } + + @Override + public VersionArtifact getWorldViewTargetedVersion() { + return null; + } + + @Override + public String getWorldViewNumberOfReviewIssueDefects() { + return ""; + } + + @Override + public String getWorldViewNumberOfReviewMajorDefects() { + return ""; + } + + @Override + public String getWorldViewNumberOfReviewMinorDefects() { + return ""; + } + + @Override + public String getWorldViewActionsIntiatingWorkflow() throws OseeCoreException { + Date earliestDate = null; + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (earliestDate == null || team.getLog().getCreationDate().before(earliestDate)) { + earliestDate = team.getLog().getCreationDate(); + } + } + List<String> teamNames = new ArrayList<String>(); + for (TeamWorkFlowArtifact team : getTeamWorkFlowArtifacts()) { + if (team.getLog().getCreationDate().equals(earliestDate)) { + teamNames.add(team.getTeamName()); + } + } + return Collections.toString("; ", teamNames); + } + + @Override + public String getWorldViewParentID() { + return ""; + } + + @Override + public String getWorldViewParentState() { + return null; + } + + @Override + public String getWorldViewOriginatingWorkflowStr() throws OseeCoreException { + Set<String> strs = new HashSet<String>(); + for (TeamWorkFlowArtifact team : getWorldViewOriginatingWorkflows()) { + strs.add(team.getWorldViewTeam()); + } + return Collections.toString(";", strs); + } + + @Override + public Collection<TeamWorkFlowArtifact> getWorldViewOriginatingWorkflows() throws OseeCoreException { + if (getTeamWorkFlowArtifacts().size() == 1) { + return getTeamWorkFlowArtifacts(); + } + Collection<TeamWorkFlowArtifact> results = new ArrayList<TeamWorkFlowArtifact>(); + Date origDate = null; + for (TeamWorkFlowArtifact teamArt : getTeamWorkFlowArtifacts()) { + if (teamArt.isCancelled()) { + continue; + } + if (origDate == null || teamArt.getWorldViewCreatedDate().before(origDate)) { + results.clear(); + origDate = teamArt.getWorldViewCreatedDate(); + results.add(teamArt); + } else if (origDate.equals(teamArt.getWorldViewCreatedDate())) { + results.add(teamArt); + } + } + return results; + } + + @Override + public String getWorldViewGoalOrder() throws OseeCoreException { + return GoalArtifact.getGoalOrder(this); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ActionableItemArtifact.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ActionableItemArtifact.java index 1dcb1eca4e6..1d1c9403cc3 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ActionableItemArtifact.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ActionableItemArtifact.java @@ -1,124 +1,124 @@ -/*******************************************************************************
- * 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.artifact;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import org.eclipse.osee.ats.config.AtsCacheManager;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.ats.util.AtsFolderUtil;
-import org.eclipse.osee.ats.util.AtsFolderUtil.AtsFolder;
-import org.eclipse.osee.ats.util.AtsRelationTypes;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.core.enums.Active;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeDataStoreException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.core.model.type.ArtifactType;
-import org.eclipse.osee.framework.jdk.core.util.Collections;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
-import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
-
-/**
- * @author Donald G. Dunne
- */
-public class ActionableItemArtifact extends Artifact {
-
- public ActionableItemArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException {
- super(parentFactory, guid, humanReadableId, branch, artifactType);
- }
-
- public static List<ActionableItemArtifact> getActionableItems(Active active) throws OseeCoreException {
- return Collections.castAll(AtsCacheManager.getArtifactsByActive(
- ArtifactTypeManager.getType(AtsArtifactTypes.ActionableItem), active));
- }
-
- public static String getNotActionableItemError(Artifact aia) {
- return "Action can not be written against " + aia.getArtifactTypeName() + " \"" + aia + "\" (" + aia.getHumanReadableId() + ").\n\nChoose another item.";
- }
-
- public static List<ActionableItemArtifact> getTopLevelActionableItems(Active active) throws OseeCoreException {
- ActionableItemArtifact topAi = getTopActionableItem();
- if (topAi == null) {
- return java.util.Collections.emptyList();
- }
- return Collections.castAll(AtsUtil.getActive(
- Artifacts.getChildrenOfTypeSet(topAi, ActionableItemArtifact.class, false), active,
- ActionableItemArtifact.class));
- }
-
- public Collection<User> getLeads() throws OseeCoreException {
- return getRelatedArtifacts(AtsRelationTypes.TeamLead_Lead, User.class);
- }
-
- public static ActionableItemArtifact getTopActionableItem() throws OseeCoreException {
- return (ActionableItemArtifact) AtsFolderUtil.getFolder(AtsFolder.ActionableItem);
- }
-
- public static List<ActionableItemArtifact> getActionableItems() throws OseeCoreException {
- return Collections.castAll(AtsCacheManager.getArtifactsByActive(
- ArtifactTypeManager.getType(AtsArtifactTypes.ActionableItem), Active.Both));
- }
-
- public boolean isActionable() throws OseeCoreException {
+/******************************************************************************* + * 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.artifact; + +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import org.eclipse.osee.ats.config.AtsCacheManager; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.ats.util.AtsFolderUtil; +import org.eclipse.osee.ats.util.AtsFolderUtil.AtsFolder; +import org.eclipse.osee.ats.util.AtsRelationTypes; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.core.enums.Active; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeDataStoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.type.ArtifactType; +import org.eclipse.osee.framework.jdk.core.util.Collections; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager; +import org.eclipse.osee.framework.skynet.core.utility.Artifacts; + +/** + * @author Donald G. Dunne + */ +public class ActionableItemArtifact extends Artifact { + + public ActionableItemArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException { + super(parentFactory, guid, humanReadableId, branch, artifactType); + } + + public static List<ActionableItemArtifact> getActionableItems(Active active) throws OseeCoreException { + return Collections.castAll(AtsCacheManager.getArtifactsByActive( + ArtifactTypeManager.getType(AtsArtifactTypes.ActionableItem), active)); + } + + public static String getNotActionableItemError(Artifact aia) { + return "Action can not be written against " + aia.getArtifactTypeName() + " \"" + aia + "\" (" + aia.getHumanReadableId() + ").\n\nChoose another item."; + } + + public static List<ActionableItemArtifact> getTopLevelActionableItems(Active active) throws OseeCoreException { + ActionableItemArtifact topAi = getTopActionableItem(); + if (topAi == null) { + return java.util.Collections.emptyList(); + } + return Collections.castAll(AtsUtil.getActive( + Artifacts.getChildrenOfTypeSet(topAi, ActionableItemArtifact.class, false), active, + ActionableItemArtifact.class)); + } + + public Collection<User> getLeads() throws OseeCoreException { + return getRelatedArtifacts(AtsRelationTypes.TeamLead_Lead, User.class); + } + + public static ActionableItemArtifact getTopActionableItem() throws OseeCoreException { + return (ActionableItemArtifact) AtsFolderUtil.getFolder(AtsFolder.ActionableItem); + } + + public static List<ActionableItemArtifact> getActionableItems() throws OseeCoreException { + return Collections.castAll(AtsCacheManager.getArtifactsByActive( + ArtifactTypeManager.getType(AtsArtifactTypes.ActionableItem), Active.Both)); + } + + public boolean isActionable() throws OseeCoreException { return getSoleAttributeValue(AtsAttributeTypes.Actionable, false); - }
-
- public static Set<ActionableItemArtifact> getActionableItems(Collection<String> actionableItemNames) throws OseeCoreException {
- Set<ActionableItemArtifact> aias = new HashSet<ActionableItemArtifact>();
- for (String actionableItemName : actionableItemNames) {
- for (Artifact artifact : AtsCacheManager.getArtifactsByName(
- ArtifactTypeManager.getType(AtsArtifactTypes.ActionableItem), actionableItemName)) {
- aias.add((ActionableItemArtifact) artifact);
- }
- }
- return aias;
- }
-
- public static Collection<TeamDefinitionArtifact> getImpactedTeamDefs(Collection<ActionableItemArtifact> aias) throws OseeCoreException {
- return TeamDefinitionArtifact.getImpactedTeamDefs(aias);
- }
-
- public Collection<TeamDefinitionArtifact> getImpactedTeamDefs() throws OseeCoreException {
- return TeamDefinitionArtifact.getImpactedTeamDefs(Arrays.asList(this));
- }
-
- public static Set<TeamDefinitionArtifact> getTeamsFromItemAndChildren(ActionableItemArtifact aia) throws OseeCoreException {
- return TeamDefinitionArtifact.getTeamsFromItemAndChildren(aia);
- }
-
- public static Set<ActionableItemArtifact> getActionableItemsFromItemAndChildren(ActionableItemArtifact aia) throws OseeCoreException {
- Set<ActionableItemArtifact> aias = new HashSet<ActionableItemArtifact>();
- getActionableItemsFromItemAndChildren(aia, aias);
- return aias;
- }
-
- public static void getActionableItemsFromItemAndChildren(ActionableItemArtifact aia, Set<ActionableItemArtifact> aiaTeams) throws OseeCoreException {
- for (Artifact art : aia.getChildren()) {
- if (art instanceof ActionableItemArtifact) {
- aiaTeams.add((ActionableItemArtifact) art);
- for (Artifact childArt : aia.getChildren()) {
- if (childArt instanceof ActionableItemArtifact) {
- getActionableItemsFromItemAndChildren((ActionableItemArtifact) childArt, aiaTeams);
- }
- }
- }
- }
- }
-
-}
+ } + + public static Set<ActionableItemArtifact> getActionableItems(Collection<String> actionableItemNames) throws OseeCoreException { + Set<ActionableItemArtifact> aias = new HashSet<ActionableItemArtifact>(); + for (String actionableItemName : actionableItemNames) { + for (Artifact artifact : AtsCacheManager.getArtifactsByName( + ArtifactTypeManager.getType(AtsArtifactTypes.ActionableItem), actionableItemName)) { + aias.add((ActionableItemArtifact) artifact); + } + } + return aias; + } + + public static Collection<TeamDefinitionArtifact> getImpactedTeamDefs(Collection<ActionableItemArtifact> aias) throws OseeCoreException { + return TeamDefinitionArtifact.getImpactedTeamDefs(aias); + } + + public Collection<TeamDefinitionArtifact> getImpactedTeamDefs() throws OseeCoreException { + return TeamDefinitionArtifact.getImpactedTeamDefs(Arrays.asList(this)); + } + + public static Set<TeamDefinitionArtifact> getTeamsFromItemAndChildren(ActionableItemArtifact aia) throws OseeCoreException { + return TeamDefinitionArtifact.getTeamsFromItemAndChildren(aia); + } + + public static Set<ActionableItemArtifact> getActionableItemsFromItemAndChildren(ActionableItemArtifact aia) throws OseeCoreException { + Set<ActionableItemArtifact> aias = new HashSet<ActionableItemArtifact>(); + getActionableItemsFromItemAndChildren(aia, aias); + return aias; + } + + public static void getActionableItemsFromItemAndChildren(ActionableItemArtifact aia, Set<ActionableItemArtifact> aiaTeams) throws OseeCoreException { + for (Artifact art : aia.getChildren()) { + if (art instanceof ActionableItemArtifact) { + aiaTeams.add((ActionableItemArtifact) art); + for (Artifact childArt : aia.getChildren()) { + if (childArt instanceof ActionableItemArtifact) { + getActionableItemsFromItemAndChildren((ActionableItemArtifact) childArt, aiaTeams); + } + } + } + } + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/AtsAttributeTypes.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/AtsAttributeTypes.java index 50af600e117..497cefe24dc 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/AtsAttributeTypes.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/AtsAttributeTypes.java @@ -1,83 +1,83 @@ -/*******************************************************************************
- * 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.artifact;
-
-import org.eclipse.osee.framework.core.data.IAttributeType;
-import org.eclipse.osee.framework.core.data.NamedIdentity;
-import org.eclipse.osee.framework.core.enums.CoreAttributeTypes;
-
-/**
- * @author Ryan D. Brooks
- */
-public final class AtsAttributeTypes extends NamedIdentity implements IAttributeType {
-
- // @formatter:off
- public static final IAttributeType Actionable = new AtsAttributeTypes("AAMFEcvDtBiaJ3TMatAA", "Actionable", "True if item can have Action written against or assigned to.");
- public static final IAttributeType ActionableItem = new AtsAttributeTypes("AAMFEdbcR2zpGzFOLOQA", "Actionable Item", "Actionable Items that are impacted by this change.");
- public static final IAttributeType Active = new AtsAttributeTypes("AAMFEclQOVmzkIvzyWwA", "Active", "Active ATS configuration object.");
- public static final IAttributeType AllowCommitBranch = new AtsAttributeTypes("AAMFEbCZCkwgj73BsQgA", "Allow Commit Branch");
- public static final IAttributeType AllowCreateBranch = new AtsAttributeTypes("AAMFEbARuQEvi6rtY5gA", "Allow Create Branch");
- public static final IAttributeType BaselineBranchGuid = new AtsAttributeTypes("AAMFEdIjJ2za2fblEVgA", "Baseline Branch Guid", "Basline branch associated with ATS object.");
- public static final IAttributeType BlockingReview = new AtsAttributeTypes("AAMFEctKkjMRrIy1C7gA", "Blocking Review");
- public static final IAttributeType Category1 = new AtsAttributeTypes("AAMFEdrYniOQYrYUKKQA", "Category", "Open field for user to be able to enter text to use for categorizing/sorting.");
- public static final IAttributeType Category2 = new AtsAttributeTypes("AAMFEdthBkolbJKLXuAA", "Category2", Category1.getDescription());
- public static final IAttributeType Category3 = new AtsAttributeTypes("AAMFEd06oxr8LMzZxdgA", "Category3", Category1.getDescription());
- public static final IAttributeType ChangeType = new AtsAttributeTypes("AAMFEc+MwGHnPCv7HlgA", "Change Type", "Type of change.");
- public static final IAttributeType CurrentState = new AtsAttributeTypes("AAMFEdOWL3u6hmX2VbwA", "Current State", "Current state of workflow state machine.");
- public static final IAttributeType Decision = new AtsAttributeTypes("AAMFEd7uDXcmqq_FrCQA", "Decision", "Option selected during decision review.");
- public static final IAttributeType DecisionReviewOptions = new AtsAttributeTypes("AAMFEd5hRy1+SRJRqfwA", "Decision Review Options", "Options available for selection in review. Each line is a separate option. Format: <option name>;<state to transition to>;<assignee>");
- public static final IAttributeType Description = new AtsAttributeTypes("AAMFEdWJ_ChxX6+YKbwA", "Description", "Detailed explanation.");
- public static final IAttributeType EstimatedCompletionDate = new AtsAttributeTypes("AAMFEc18k3Gh+GP7zqAA", "Estimated Completion Date", "Date the changes will be completed.");
- public static final IAttributeType EstimatedHours = new AtsAttributeTypes("AAMFEdCSqBh+cPyadiwA", "Estimated Hours", "Hours estimated to implement the changes associated with this Action.\nIncludes estimated hours for workflows, tasks and reviews.");
- public static final IAttributeType EstimatedReleaseDate = new AtsAttributeTypes("AAMFEcy6VB7Ble5SP1QA", "Estimated Release Date", "Date the changes will be made available to the users.");
- public static final IAttributeType FullName = new AtsAttributeTypes("AAMFEdZI9XLT34cTonAA", "Full Name", "Expanded and descriptive name.");
- public static final IAttributeType GoalOrderVote = new AtsAttributeTypes("Aiecsz9pP1CRoQdaYRAA", "Goal Order Vote", "Vote for order item belongs to within goal.");
- public static final IAttributeType HoursPerWorkDay = new AtsAttributeTypes("AAMFEdGlqFsZp22RMdAA", "Hours Per Work Day");
- public static final IAttributeType LegacyPcrId = new AtsAttributeTypes("AAMFEd3TakphMtQX1zgA", "Legacy PCR Id", "Field to register problem change report id from legacy items imported into ATS.");
- public static final IAttributeType Location = new AtsAttributeTypes("AAMFEeAW4QBlesdfacwA", "Location", "Enter location of materials to review.");
- public static final IAttributeType Log = new AtsAttributeTypes("AAMFEdgB1DX3eJSZb0wA", "Log");
- public static final IAttributeType NeedBy = new AtsAttributeTypes("AAMFEcxAGzHAKfDNAIwA", "Need By", "Hard schedule date that workflow must be completed.");
- public static final IAttributeType NextVersion = new AtsAttributeTypes("AAMFEcpH8Xb72hsF5AwA", "Next Version", "True if version artifact is \"Next\" version to be released.");
- public static final IAttributeType Numeric1 = new AtsAttributeTypes("AABY2xxQsDm811kCViwA", "Numeric1", "Open field for user to be able to enter numbers for sorting.");
- public static final IAttributeType Numeric2 = new AtsAttributeTypes("AABiRtvZsAEkU4BS9qwA", "Numeric2", Numeric1.getDescription());
- public static final IAttributeType PercentRework = new AtsAttributeTypes("AAMFEdKfjl2TII9+tuwA", "Percent Rework");
- public static final IAttributeType Points = new AtsAttributeTypes("AY2EeqhzcDEGtXtREkAA", "Points", "Abstract value that describes risk, complexity, and size of Actions.");
- public static final IAttributeType PriorityType = new AtsAttributeTypes("AAMFEc8JzH1U6XGD59QA", "Priority", "1 = High; 5 = Low");
- public static final IAttributeType Problem = new AtsAttributeTypes("AAMFEdQUxRyevvTu+bwA", "Problem", "Problem found during analysis.");
- public static final IAttributeType ProposedResolution = new AtsAttributeTypes("AAMFEdSSRDGgBQ5tctAA", "Proposed Resolution", "Recommended resolution.");
- public static final IAttributeType RelatedToState = new AtsAttributeTypes("AAMFEdkwHULOmHbMbGgA", "Related To State", "State of parent workflow this object is related to.");
- public static final IAttributeType ReleaseDate = new AtsAttributeTypes("AAMFEc3+cGcMDOCdmdAA", "Release Date", "Date the changes were made available to the users.");
- public static final IAttributeType Released = new AtsAttributeTypes("AAMFEcnMoUZMLA2zB1AA", "Released", "True if object is in a released state.");
- public static final IAttributeType Resolution = new AtsAttributeTypes("AAMFEdUMfV1KdbQNaKwA", "Resolution", "Implementation details.");
- public static final IAttributeType ReviewBlocks = new AtsAttributeTypes("AAMFEc6G2A8jmRWJgagA", "Review Blocks", "Review Completion will block it's parent workflow in this manner.");
- public static final IAttributeType ReviewDefect = new AtsAttributeTypes("AAMFEd+MSVAb8JQ6f5gA", "Review Defect");
- public static final IAttributeType Role = new AtsAttributeTypes("AAMFEeCqMz0XCSBJ+IQA", "Role");
- public static final IAttributeType SmaNote = new AtsAttributeTypes("AAMFEdm7ywte8qayfbAA", "SMA Note", "Notes applicable to ATS object");
- public static final IAttributeType State = new AtsAttributeTypes("AAMFEdMa3wzVvp60xLQA", "State", "States of workflow state machine.");
- public static final IAttributeType StateNotes = new AtsAttributeTypes("AAMFEdiWPm7M_xV1EswA", "State Notes");
- public static final IAttributeType TeamDefinition = new AtsAttributeTypes("AAMFEdd5bFEe18bd0lQA", "Team Definition");
- public static final IAttributeType TeamUsesVersions = new AtsAttributeTypes("AAMFEcrHnzPxQ7w3ligA", "Team Uses Versions", "True if Team Workflow uses versioning/releasing option.");
- public static final IAttributeType Title = new AtsAttributeTypes(CoreAttributeTypes.Name.getGuid(), CoreAttributeTypes.Name.getName(), "Enter clear and consise title that can be generally understood.");
- public static final IAttributeType UserCommunity = new AtsAttributeTypes("AAMFEdAPtAq1IEwiCQAA", "User Community", "If working in one of these communities resulted in the creation of this Action, please select. Otherwise, select Other.");
- public static final IAttributeType ValidationRequired = new AtsAttributeTypes("AAMFEcjT0TwkD2R4w1QA", "Validation Required", "If selected, originator will be asked to validate the implementation.");
- public static final IAttributeType VersionLocked = new AtsAttributeTypes("AAzRtEJXbjzR5jySOZgA", "Version Locked", "True if version artifact is locked.");
- public static final IAttributeType WeeklyBenefit = new AtsAttributeTypes("AAMFEdEnEU9AecOHMOwA", "Weekly Benefit", "Estimated number of hours that will be saved over a single year if this change is completed.");
- public static final IAttributeType WorkPackage = new AtsAttributeTypes("AAMFEdpJqRp2wvA2qvAA", "Work Package", "Designated accounting work package for completing workflow.");
- // @formatter:on
-
- private AtsAttributeTypes(String guid, String name) {
- super(guid, "ats." + name);
- }
-
- private AtsAttributeTypes(String guid, String name, String description) {
- super(guid, "ats." + name, description);
- }
+/******************************************************************************* + * 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.artifact; + +import org.eclipse.osee.framework.core.data.IAttributeType; +import org.eclipse.osee.framework.core.data.NamedIdentity; +import org.eclipse.osee.framework.core.enums.CoreAttributeTypes; + +/** + * @author Ryan D. Brooks + */ +public final class AtsAttributeTypes extends NamedIdentity implements IAttributeType { + + // @formatter:off + public static final IAttributeType Actionable = new AtsAttributeTypes("AAMFEcvDtBiaJ3TMatAA", "Actionable", "True if item can have Action written against or assigned to."); + public static final IAttributeType ActionableItem = new AtsAttributeTypes("AAMFEdbcR2zpGzFOLOQA", "Actionable Item", "Actionable Items that are impacted by this change."); + public static final IAttributeType Active = new AtsAttributeTypes("AAMFEclQOVmzkIvzyWwA", "Active", "Active ATS configuration object."); + public static final IAttributeType AllowCommitBranch = new AtsAttributeTypes("AAMFEbCZCkwgj73BsQgA", "Allow Commit Branch"); + public static final IAttributeType AllowCreateBranch = new AtsAttributeTypes("AAMFEbARuQEvi6rtY5gA", "Allow Create Branch"); + public static final IAttributeType BaselineBranchGuid = new AtsAttributeTypes("AAMFEdIjJ2za2fblEVgA", "Baseline Branch Guid", "Basline branch associated with ATS object."); + public static final IAttributeType BlockingReview = new AtsAttributeTypes("AAMFEctKkjMRrIy1C7gA", "Blocking Review"); + public static final IAttributeType Category1 = new AtsAttributeTypes("AAMFEdrYniOQYrYUKKQA", "Category", "Open field for user to be able to enter text to use for categorizing/sorting."); + public static final IAttributeType Category2 = new AtsAttributeTypes("AAMFEdthBkolbJKLXuAA", "Category2", Category1.getDescription()); + public static final IAttributeType Category3 = new AtsAttributeTypes("AAMFEd06oxr8LMzZxdgA", "Category3", Category1.getDescription()); + public static final IAttributeType ChangeType = new AtsAttributeTypes("AAMFEc+MwGHnPCv7HlgA", "Change Type", "Type of change."); + public static final IAttributeType CurrentState = new AtsAttributeTypes("AAMFEdOWL3u6hmX2VbwA", "Current State", "Current state of workflow state machine."); + public static final IAttributeType Decision = new AtsAttributeTypes("AAMFEd7uDXcmqq_FrCQA", "Decision", "Option selected during decision review."); + public static final IAttributeType DecisionReviewOptions = new AtsAttributeTypes("AAMFEd5hRy1+SRJRqfwA", "Decision Review Options", "Options available for selection in review. Each line is a separate option. Format: <option name>;<state to transition to>;<assignee>"); + public static final IAttributeType Description = new AtsAttributeTypes("AAMFEdWJ_ChxX6+YKbwA", "Description", "Detailed explanation."); + public static final IAttributeType EstimatedCompletionDate = new AtsAttributeTypes("AAMFEc18k3Gh+GP7zqAA", "Estimated Completion Date", "Date the changes will be completed."); + public static final IAttributeType EstimatedHours = new AtsAttributeTypes("AAMFEdCSqBh+cPyadiwA", "Estimated Hours", "Hours estimated to implement the changes associated with this Action.\nIncludes estimated hours for workflows, tasks and reviews."); + public static final IAttributeType EstimatedReleaseDate = new AtsAttributeTypes("AAMFEcy6VB7Ble5SP1QA", "Estimated Release Date", "Date the changes will be made available to the users."); + public static final IAttributeType FullName = new AtsAttributeTypes("AAMFEdZI9XLT34cTonAA", "Full Name", "Expanded and descriptive name."); + public static final IAttributeType GoalOrderVote = new AtsAttributeTypes("Aiecsz9pP1CRoQdaYRAA", "Goal Order Vote", "Vote for order item belongs to within goal."); + public static final IAttributeType HoursPerWorkDay = new AtsAttributeTypes("AAMFEdGlqFsZp22RMdAA", "Hours Per Work Day"); + public static final IAttributeType LegacyPcrId = new AtsAttributeTypes("AAMFEd3TakphMtQX1zgA", "Legacy PCR Id", "Field to register problem change report id from legacy items imported into ATS."); + public static final IAttributeType Location = new AtsAttributeTypes("AAMFEeAW4QBlesdfacwA", "Location", "Enter location of materials to review."); + public static final IAttributeType Log = new AtsAttributeTypes("AAMFEdgB1DX3eJSZb0wA", "Log"); + public static final IAttributeType NeedBy = new AtsAttributeTypes("AAMFEcxAGzHAKfDNAIwA", "Need By", "Hard schedule date that workflow must be completed."); + public static final IAttributeType NextVersion = new AtsAttributeTypes("AAMFEcpH8Xb72hsF5AwA", "Next Version", "True if version artifact is \"Next\" version to be released."); + public static final IAttributeType Numeric1 = new AtsAttributeTypes("AABY2xxQsDm811kCViwA", "Numeric1", "Open field for user to be able to enter numbers for sorting."); + public static final IAttributeType Numeric2 = new AtsAttributeTypes("AABiRtvZsAEkU4BS9qwA", "Numeric2", Numeric1.getDescription()); + public static final IAttributeType PercentRework = new AtsAttributeTypes("AAMFEdKfjl2TII9+tuwA", "Percent Rework"); + public static final IAttributeType Points = new AtsAttributeTypes("AY2EeqhzcDEGtXtREkAA", "Points", "Abstract value that describes risk, complexity, and size of Actions."); + public static final IAttributeType PriorityType = new AtsAttributeTypes("AAMFEc8JzH1U6XGD59QA", "Priority", "1 = High; 5 = Low"); + public static final IAttributeType Problem = new AtsAttributeTypes("AAMFEdQUxRyevvTu+bwA", "Problem", "Problem found during analysis."); + public static final IAttributeType ProposedResolution = new AtsAttributeTypes("AAMFEdSSRDGgBQ5tctAA", "Proposed Resolution", "Recommended resolution."); + public static final IAttributeType RelatedToState = new AtsAttributeTypes("AAMFEdkwHULOmHbMbGgA", "Related To State", "State of parent workflow this object is related to."); + public static final IAttributeType ReleaseDate = new AtsAttributeTypes("AAMFEc3+cGcMDOCdmdAA", "Release Date", "Date the changes were made available to the users."); + public static final IAttributeType Released = new AtsAttributeTypes("AAMFEcnMoUZMLA2zB1AA", "Released", "True if object is in a released state."); + public static final IAttributeType Resolution = new AtsAttributeTypes("AAMFEdUMfV1KdbQNaKwA", "Resolution", "Implementation details."); + public static final IAttributeType ReviewBlocks = new AtsAttributeTypes("AAMFEc6G2A8jmRWJgagA", "Review Blocks", "Review Completion will block it's parent workflow in this manner."); + public static final IAttributeType ReviewDefect = new AtsAttributeTypes("AAMFEd+MSVAb8JQ6f5gA", "Review Defect"); + public static final IAttributeType Role = new AtsAttributeTypes("AAMFEeCqMz0XCSBJ+IQA", "Role"); + public static final IAttributeType SmaNote = new AtsAttributeTypes("AAMFEdm7ywte8qayfbAA", "SMA Note", "Notes applicable to ATS object"); + public static final IAttributeType State = new AtsAttributeTypes("AAMFEdMa3wzVvp60xLQA", "State", "States of workflow state machine."); + public static final IAttributeType StateNotes = new AtsAttributeTypes("AAMFEdiWPm7M_xV1EswA", "State Notes"); + public static final IAttributeType TeamDefinition = new AtsAttributeTypes("AAMFEdd5bFEe18bd0lQA", "Team Definition"); + public static final IAttributeType TeamUsesVersions = new AtsAttributeTypes("AAMFEcrHnzPxQ7w3ligA", "Team Uses Versions", "True if Team Workflow uses versioning/releasing option."); + public static final IAttributeType Title = new AtsAttributeTypes(CoreAttributeTypes.Name.getGuid(), CoreAttributeTypes.Name.getName(), "Enter clear and consise title that can be generally understood."); + public static final IAttributeType UserCommunity = new AtsAttributeTypes("AAMFEdAPtAq1IEwiCQAA", "User Community", "If working in one of these communities resulted in the creation of this Action, please select. Otherwise, select Other."); + public static final IAttributeType ValidationRequired = new AtsAttributeTypes("AAMFEcjT0TwkD2R4w1QA", "Validation Required", "If selected, originator will be asked to validate the implementation."); + public static final IAttributeType VersionLocked = new AtsAttributeTypes("AAzRtEJXbjzR5jySOZgA", "Version Locked", "True if version artifact is locked."); + public static final IAttributeType WeeklyBenefit = new AtsAttributeTypes("AAMFEdEnEU9AecOHMOwA", "Weekly Benefit", "Estimated number of hours that will be saved over a single year if this change is completed."); + public static final IAttributeType WorkPackage = new AtsAttributeTypes("AAMFEdpJqRp2wvA2qvAA", "Work Package", "Designated accounting work package for completing workflow."); + // @formatter:on + + private AtsAttributeTypes(String guid, String name) { + super(guid, "ats." + name); + } + + private AtsAttributeTypes(String guid, String name, String description) { + super(guid, "ats." + name, description); + } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/DecisionReviewArtifact.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/DecisionReviewArtifact.java index ec1d78f4048..9cccdcc0677 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/DecisionReviewArtifact.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/DecisionReviewArtifact.java @@ -1,80 +1,80 @@ -/*******************************************************************************
- * 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.artifact;
-
-import java.util.Collection;
-import org.eclipse.osee.ats.util.widgets.XDecisionOptions;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeDataStoreException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.core.model.type.ArtifactType;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
-import org.eclipse.osee.framework.skynet.core.artifact.IATSStateMachineArtifact;
-import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
-
-/**
- * @author Donald G. Dunne
- */
-public class DecisionReviewArtifact extends ReviewSMArtifact implements IReviewArtifact, IATSStateMachineArtifact {
-
- public XDecisionOptions decisionOptions;
- public static enum DecisionReviewState {
- Prepare,
- Decision,
- Followup,
- Completed
- };
-
- public DecisionReviewArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException {
- super(parentFactory, guid, humanReadableId, branch, artifactType);
- decisionOptions = new XDecisionOptions(this);
- }
-
- @Override
- public String getHelpContext() {
- return "decisionReview";
- }
-
- @Override
- public String getHyperName() {
- return getName();
- }
-
- @Override
- public String getWorldViewDecision() throws OseeCoreException {
+/******************************************************************************* + * 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.artifact; + +import java.util.Collection; +import org.eclipse.osee.ats.util.widgets.XDecisionOptions; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeDataStoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.type.ArtifactType; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory; +import org.eclipse.osee.framework.skynet.core.artifact.IATSStateMachineArtifact; +import org.eclipse.osee.framework.skynet.core.utility.Artifacts; + +/** + * @author Donald G. Dunne + */ +public class DecisionReviewArtifact extends ReviewSMArtifact implements IReviewArtifact, IATSStateMachineArtifact { + + public XDecisionOptions decisionOptions; + public static enum DecisionReviewState { + Prepare, + Decision, + Followup, + Completed + }; + + public DecisionReviewArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException { + super(parentFactory, guid, humanReadableId, branch, artifactType); + decisionOptions = new XDecisionOptions(this); + } + + @Override + public String getHelpContext() { + return "decisionReview"; + } + + @Override + public String getHyperName() { + return getName(); + } + + @Override + public String getWorldViewDecision() throws OseeCoreException { return getSoleAttributeValue(AtsAttributeTypes.Decision, ""); - }
-
- @Override
- public String getWorldViewDescription() throws OseeCoreException {
+ } + + @Override + public String getWorldViewDescription() throws OseeCoreException { return getSoleAttributeValue(AtsAttributeTypes.Description, ""); - }
-
- @Override
- public VersionArtifact getWorldViewTargetedVersion() throws OseeCoreException {
- if (getParentSMA() == null) {
- return null;
- }
- return getParentSMA().getWorldViewTargetedVersion();
- }
-
- @Override
- public Collection<User> getImplementers() throws OseeCoreException {
- return getImplementersByState(DecisionReviewState.Decision.name());
- }
-
- @Override
- public String getWorldViewReviewDecider() throws OseeCoreException {
- return Artifacts.toString("; ", getStateMgr().getAssignees(DecisionReviewState.Decision.name()));
- }
-
+ } + + @Override + public VersionArtifact getWorldViewTargetedVersion() throws OseeCoreException { + if (getParentSMA() == null) { + return null; + } + return getParentSMA().getWorldViewTargetedVersion(); + } + + @Override + public Collection<User> getImplementers() throws OseeCoreException { + return getImplementersByState(DecisionReviewState.Decision.name()); + } + + @Override + public String getWorldViewReviewDecider() throws OseeCoreException { + return Artifacts.toString("; ", getStateMgr().getAssignees(DecisionReviewState.Decision.name())); + } + }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/DecisionReviewWorkflowManager.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/DecisionReviewWorkflowManager.java index d328e49979e..ab3ed71c389 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/DecisionReviewWorkflowManager.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/DecisionReviewWorkflowManager.java @@ -29,9 +29,7 @@ public class DecisionReviewWorkflowManager { * Quickly transition to a state with minimal metrics and data entered. Should only be used for automated * transitioning for things such as developmental testing and demos. * - * @param toState * @param user User to transition to OR null if should use user of current state - * @param popup * @return Result * @throws Exception */ diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/GoalArtifact.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/GoalArtifact.java index f91b19973b7..633a6a14bea 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/GoalArtifact.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/GoalArtifact.java @@ -1,276 +1,276 @@ -/*******************************************************************************
- * 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.artifact;
-
-import java.text.NumberFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import org.eclipse.jface.window.Window;
-import org.eclipse.nebula.widgets.xviewer.XViewerCells;
-import org.eclipse.osee.ats.artifact.ATSLog.LogType;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.ats.util.AtsRelationTypes;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.ats.world.search.GoalSearchItem;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeDataStoreException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.core.model.type.ArtifactType;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.UserManager;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
-import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
-import org.eclipse.osee.framework.ui.skynet.widgets.dialog.ArtifactListDialog;
-import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
-import org.eclipse.osee.framework.ui.swt.Displays;
-
-/**
- * @author Donald G. Dunne
- */
-public class GoalArtifact extends StateMachineArtifact {
-
- public static enum GoalState {
- InWork,
- Completed,
- Cancelled
- };
-
- public GoalArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException {
- super(parentFactory, guid, humanReadableId, branch, artifactType);
- registerAtsWorldRelation(AtsRelationTypes.Goal_Member);
- }
-
- @Override
- public ActionArtifact getParentActionArtifact() {
- return null;
- }
-
- @Override
- public StateMachineArtifact getParentSMA() throws OseeCoreException {
- List<Artifact> parents = getRelatedArtifacts(AtsRelationTypes.Goal_Goal);
- if (parents.isEmpty()) {
- return null;
- }
- if (parents.size() == 1) {
- return (StateMachineArtifact) parents.iterator().next();
- }
- System.err.println("Two parent goals, what do here?");
- return (StateMachineArtifact) parents.iterator().next();
- }
-
- @Override
- public TeamWorkFlowArtifact getParentTeamWorkflow() {
- return null;
- }
-
- @Override
- public Set<User> getPrivilegedUsers() {
- return null;
- }
-
- @Override
- public boolean isTaskable() {
- return false;
- }
-
- @Override
- public Date getWorldViewReleaseDate() {
- return null;
- }
-
- @Override
- public VersionArtifact getWorldViewTargetedVersion() {
- return null;
- }
-
- @Override
- public String getWorldViewParentID() {
- return null;
- }
-
- @Override
- public String getHyperTargetVersion() {
- return null;
- }
-
- public static void getGoals(Artifact artifact, Set<Artifact> goals, boolean recurse) throws OseeCoreException {
- getGoals(Arrays.asList(artifact), goals, recurse);
- }
-
- public static Collection<Artifact> getGoals(Artifact artifact, boolean recurse) throws OseeCoreException {
- Set<Artifact> goals = new HashSet<Artifact>();
- getGoals(artifact, goals, recurse);
- return goals;
- }
-
- public static void getGoals(Collection<Artifact> artifacts, Set<Artifact> goals, boolean recurse) throws OseeCoreException {
- for (Artifact art : artifacts) {
- if (art instanceof GoalArtifact) {
- goals.add(art);
- }
- goals.addAll(art.getRelatedArtifacts(AtsRelationTypes.Goal_Goal, GoalArtifact.class));
- if (recurse && art instanceof StateMachineArtifact && ((StateMachineArtifact) art).getParentSMA() != null) {
- getGoals(((StateMachineArtifact) art).getParentSMA(), goals, recurse);
- }
- }
- }
-
- public static boolean isHasGoal(Artifact artifact) throws OseeCoreException {
- return artifact.getRelatedArtifactsCount(AtsRelationTypes.Goal_Goal) > 0;
- }
-
- public static String getGoalOrder(Artifact artifact) throws OseeCoreException {
- if (artifact instanceof GoalArtifact) {
- return "";
- }
- if (!isHasGoal(artifact)) {
- return "";
- }
- Collection<Artifact> goals = GoalArtifact.getGoals(artifact, false);
- if (goals.size() > 1) {
- List<Artifact> goalsSorted = new ArrayList<Artifact>(goals);
- Collections.sort(goalsSorted);
- StringBuffer sb = new StringBuffer();
- for (Artifact goal : goalsSorted) {
- sb.append(String.format("%s-[%s] ", getGoalOrder((GoalArtifact) goal, artifact), goal));
- }
- return sb.toString();
- }
- Artifact goal = goals.iterator().next();
- return getGoalOrder((GoalArtifact) goal, artifact);
- }
-
- public static String getGoalOrder(GoalArtifact goalArtifact, Artifact member) throws OseeCoreException {
- List<Artifact> members = goalArtifact.getMembers();
- if (!members.contains(member)) {
- return "";
- }
- try {
- return String.valueOf(members.indexOf(member) + 1);
- } catch (Exception ex) {
- return XViewerCells.getCellExceptionString(ex);
- }
- }
-
- public static GoalArtifact createGoal(String title) throws OseeCoreException {
- GoalArtifact goalArt =
- (GoalArtifact) ArtifactTypeManager.addArtifact(AtsArtifactTypes.Goal, AtsUtil.getAtsBranch());
- goalArt.setName(title);
- goalArt.getLog().addLog(LogType.Originated, "", "");
-
- // Initialize state machine
- goalArt.getStateMgr().initializeStateMachine(GoalState.InWork.name(),
- Collections.singleton(UserManager.getUser()));
- goalArt.getLog().addLog(LogType.StateEntered, GoalState.InWork.name(), "");
- return goalArt;
- }
-
- public List<Artifact> getMembers() throws OseeCoreException {
- return getRelatedArtifacts(AtsRelationTypes.Goal_Member, false);
- }
-
- public void addMember(Artifact artifact) throws OseeCoreException {
- if (!getMembers().contains(artifact)) {
- addRelation(AtsRelationTypes.Goal_Member, artifact);
- }
- }
-
- /**
- * change goal, prompt if member of two goals
- */
- public static GoalArtifact promptChangeGoalOrder(Artifact artifact) throws OseeCoreException {
- if (!isHasGoal(artifact)) {
- AWorkbench.popup(String.format("No Goal set for artifact [%s]", artifact));
- return null;
- }
- Collection<Artifact> goals = getGoals(artifact, false);
- GoalArtifact goal = null;
- if (goals.size() == 1) {
- goal = (GoalArtifact) goals.iterator().next();
- } else if (goals.size() > 1) {
- ArtifactListDialog dialog = new ArtifactListDialog(Displays.getActiveShell());
- dialog.setTitle("Select Goal");
- dialog.setMessage("Artifact has multiple Goals\n\nSelect Goal to change order");
- dialog.setArtifacts(goals);
- if (dialog.open() == 0) {
- goal = (GoalArtifact) dialog.getSelection();
- } else {
- return null;
- }
- }
- return promptChangeGoalOrder(goal, artifact);
- }
-
- /**
- * change goal order for artifact within given goal
- */
- public static GoalArtifact promptChangeGoalOrder(GoalArtifact goalArtifact, Artifact artifact) throws OseeCoreException {
- return promptChangeGoalOrder(goalArtifact, Arrays.asList(artifact));
- }
-
- /**
- * change goal order for artifacts within given goal
- */
- public static GoalArtifact promptChangeGoalOrder(GoalArtifact goalArtifact, List<Artifact> artifacts) throws OseeCoreException {
- String currentOrder = "Current Order: ";
- for (Artifact artifact : artifacts) {
- if (artifacts.size() == 1 && !isHasGoal(artifact) || goalArtifact == null) {
- AWorkbench.popup(String.format("No Goal set for artifact [%s]", artifact));
- return null;
- }
- String currIndexStr = getGoalOrder(goalArtifact, artifact);
- currentOrder += currIndexStr + ", ";
- }
- currentOrder = currentOrder.replaceFirst(", $", "");
-
- List<Artifact> members = goalArtifact.getMembers();
- EntryDialog ed =
- new EntryDialog(
- "Change Goal Order",
- String.format(
- "Goal: %s\n\n%s\n\nEnter New Order Number from 1..%d or %d for last\n\nNote: Goal will be placed before number entered.",
- goalArtifact, currentOrder, members.size(), members.size() + 1));
- ed.setNumberFormat(NumberFormat.getIntegerInstance());
-
- int result = ed.open();
- if (result == Window.OK) {
- String newIndexStr = ed.getEntry();
- Integer enteredIndex = new Integer(newIndexStr);
- boolean insertLast = enteredIndex == members.size() + 1;
- Integer membersIndex = insertLast ? members.size() - 1 : enteredIndex - 1;
- if (membersIndex > members.size()) {
- AWorkbench.popup(String.format("New Order Number [%s] out of range 1..%d", newIndexStr, members.size()));
- return null;
- }
- for (Artifact artifact : artifacts) {
- Artifact insertTarget = members.get(membersIndex);
- goalArtifact.setRelationOrder(AtsRelationTypes.Goal_Member, insertTarget, insertLast ? true : false,
- artifact);
- }
- goalArtifact.persist();
- return goalArtifact;
- }
- return null;
- }
-
- public Collection<GoalArtifact> getInWorkGoals() throws OseeCoreException {
- GoalSearchItem searchItem = new GoalSearchItem("", new ArrayList<TeamDefinitionArtifact>(), false, null);
- return org.eclipse.osee.framework.jdk.core.util.Collections.castAll(searchItem.performSearchGetResults());
- }
-}
+/******************************************************************************* + * 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.artifact; + +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import org.eclipse.jface.window.Window; +import org.eclipse.nebula.widgets.xviewer.XViewerCells; +import org.eclipse.osee.ats.artifact.ATSLog.LogType; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.ats.util.AtsRelationTypes; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.ats.world.search.GoalSearchItem; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeDataStoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.type.ArtifactType; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.UserManager; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager; +import org.eclipse.osee.framework.ui.plugin.util.AWorkbench; +import org.eclipse.osee.framework.ui.skynet.widgets.dialog.ArtifactListDialog; +import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog; +import org.eclipse.osee.framework.ui.swt.Displays; + +/** + * @author Donald G. Dunne + */ +public class GoalArtifact extends StateMachineArtifact { + + public static enum GoalState { + InWork, + Completed, + Cancelled + }; + + public GoalArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException { + super(parentFactory, guid, humanReadableId, branch, artifactType); + registerAtsWorldRelation(AtsRelationTypes.Goal_Member); + } + + @Override + public ActionArtifact getParentActionArtifact() { + return null; + } + + @Override + public StateMachineArtifact getParentSMA() throws OseeCoreException { + List<Artifact> parents = getRelatedArtifacts(AtsRelationTypes.Goal_Goal); + if (parents.isEmpty()) { + return null; + } + if (parents.size() == 1) { + return (StateMachineArtifact) parents.iterator().next(); + } + System.err.println("Two parent goals, what do here?"); + return (StateMachineArtifact) parents.iterator().next(); + } + + @Override + public TeamWorkFlowArtifact getParentTeamWorkflow() { + return null; + } + + @Override + public Set<User> getPrivilegedUsers() { + return null; + } + + @Override + public boolean isTaskable() { + return false; + } + + @Override + public Date getWorldViewReleaseDate() { + return null; + } + + @Override + public VersionArtifact getWorldViewTargetedVersion() { + return null; + } + + @Override + public String getWorldViewParentID() { + return null; + } + + @Override + public String getHyperTargetVersion() { + return null; + } + + public static void getGoals(Artifact artifact, Set<Artifact> goals, boolean recurse) throws OseeCoreException { + getGoals(Arrays.asList(artifact), goals, recurse); + } + + public static Collection<Artifact> getGoals(Artifact artifact, boolean recurse) throws OseeCoreException { + Set<Artifact> goals = new HashSet<Artifact>(); + getGoals(artifact, goals, recurse); + return goals; + } + + public static void getGoals(Collection<Artifact> artifacts, Set<Artifact> goals, boolean recurse) throws OseeCoreException { + for (Artifact art : artifacts) { + if (art instanceof GoalArtifact) { + goals.add(art); + } + goals.addAll(art.getRelatedArtifacts(AtsRelationTypes.Goal_Goal, GoalArtifact.class)); + if (recurse && art instanceof StateMachineArtifact && ((StateMachineArtifact) art).getParentSMA() != null) { + getGoals(((StateMachineArtifact) art).getParentSMA(), goals, recurse); + } + } + } + + public static boolean isHasGoal(Artifact artifact) throws OseeCoreException { + return artifact.getRelatedArtifactsCount(AtsRelationTypes.Goal_Goal) > 0; + } + + public static String getGoalOrder(Artifact artifact) throws OseeCoreException { + if (artifact instanceof GoalArtifact) { + return ""; + } + if (!isHasGoal(artifact)) { + return ""; + } + Collection<Artifact> goals = GoalArtifact.getGoals(artifact, false); + if (goals.size() > 1) { + List<Artifact> goalsSorted = new ArrayList<Artifact>(goals); + Collections.sort(goalsSorted); + StringBuffer sb = new StringBuffer(); + for (Artifact goal : goalsSorted) { + sb.append(String.format("%s-[%s] ", getGoalOrder((GoalArtifact) goal, artifact), goal)); + } + return sb.toString(); + } + Artifact goal = goals.iterator().next(); + return getGoalOrder((GoalArtifact) goal, artifact); + } + + public static String getGoalOrder(GoalArtifact goalArtifact, Artifact member) throws OseeCoreException { + List<Artifact> members = goalArtifact.getMembers(); + if (!members.contains(member)) { + return ""; + } + try { + return String.valueOf(members.indexOf(member) + 1); + } catch (Exception ex) { + return XViewerCells.getCellExceptionString(ex); + } + } + + public static GoalArtifact createGoal(String title) throws OseeCoreException { + GoalArtifact goalArt = + (GoalArtifact) ArtifactTypeManager.addArtifact(AtsArtifactTypes.Goal, AtsUtil.getAtsBranch()); + goalArt.setName(title); + goalArt.getLog().addLog(LogType.Originated, "", ""); + + // Initialize state machine + goalArt.getStateMgr().initializeStateMachine(GoalState.InWork.name(), + Collections.singleton(UserManager.getUser())); + goalArt.getLog().addLog(LogType.StateEntered, GoalState.InWork.name(), ""); + return goalArt; + } + + public List<Artifact> getMembers() throws OseeCoreException { + return getRelatedArtifacts(AtsRelationTypes.Goal_Member, false); + } + + public void addMember(Artifact artifact) throws OseeCoreException { + if (!getMembers().contains(artifact)) { + addRelation(AtsRelationTypes.Goal_Member, artifact); + } + } + + /** + * change goal, prompt if member of two goals + */ + public static GoalArtifact promptChangeGoalOrder(Artifact artifact) throws OseeCoreException { + if (!isHasGoal(artifact)) { + AWorkbench.popup(String.format("No Goal set for artifact [%s]", artifact)); + return null; + } + Collection<Artifact> goals = getGoals(artifact, false); + GoalArtifact goal = null; + if (goals.size() == 1) { + goal = (GoalArtifact) goals.iterator().next(); + } else if (goals.size() > 1) { + ArtifactListDialog dialog = new ArtifactListDialog(Displays.getActiveShell()); + dialog.setTitle("Select Goal"); + dialog.setMessage("Artifact has multiple Goals\n\nSelect Goal to change order"); + dialog.setArtifacts(goals); + if (dialog.open() == 0) { + goal = (GoalArtifact) dialog.getSelection(); + } else { + return null; + } + } + return promptChangeGoalOrder(goal, artifact); + } + + /** + * change goal order for artifact within given goal + */ + public static GoalArtifact promptChangeGoalOrder(GoalArtifact goalArtifact, Artifact artifact) throws OseeCoreException { + return promptChangeGoalOrder(goalArtifact, Arrays.asList(artifact)); + } + + /** + * change goal order for artifacts within given goal + */ + public static GoalArtifact promptChangeGoalOrder(GoalArtifact goalArtifact, List<Artifact> artifacts) throws OseeCoreException { + String currentOrder = "Current Order: "; + for (Artifact artifact : artifacts) { + if (artifacts.size() == 1 && !isHasGoal(artifact) || goalArtifact == null) { + AWorkbench.popup(String.format("No Goal set for artifact [%s]", artifact)); + return null; + } + String currIndexStr = getGoalOrder(goalArtifact, artifact); + currentOrder += currIndexStr + ", "; + } + currentOrder = currentOrder.replaceFirst(", $", ""); + + List<Artifact> members = goalArtifact.getMembers(); + EntryDialog ed = + new EntryDialog( + "Change Goal Order", + String.format( + "Goal: %s\n\n%s\n\nEnter New Order Number from 1..%d or %d for last\n\nNote: Goal will be placed before number entered.", + goalArtifact, currentOrder, members.size(), members.size() + 1)); + ed.setNumberFormat(NumberFormat.getIntegerInstance()); + + int result = ed.open(); + if (result == Window.OK) { + String newIndexStr = ed.getEntry(); + Integer enteredIndex = new Integer(newIndexStr); + boolean insertLast = enteredIndex == members.size() + 1; + Integer membersIndex = insertLast ? members.size() - 1 : enteredIndex - 1; + if (membersIndex > members.size()) { + AWorkbench.popup(String.format("New Order Number [%s] out of range 1..%d", newIndexStr, members.size())); + return null; + } + for (Artifact artifact : artifacts) { + Artifact insertTarget = members.get(membersIndex); + goalArtifact.setRelationOrder(AtsRelationTypes.Goal_Member, insertTarget, insertLast ? true : false, + artifact); + } + goalArtifact.persist(); + return goalArtifact; + } + return null; + } + + public Collection<GoalArtifact> getInWorkGoals() throws OseeCoreException { + GoalSearchItem searchItem = new GoalSearchItem("", new ArrayList<TeamDefinitionArtifact>(), false, null); + return org.eclipse.osee.framework.jdk.core.util.Collections.castAll(searchItem.performSearchGetResults()); + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/PeerToPeerReviewArtifact.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/PeerToPeerReviewArtifact.java index 4c896e35a48..6d7b8971f2b 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/PeerToPeerReviewArtifact.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/PeerToPeerReviewArtifact.java @@ -1,130 +1,130 @@ -/*******************************************************************************
- * 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.artifact;
-
-import java.util.Collection;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.widgets.defect.DefectManager;
-import org.eclipse.osee.ats.util.widgets.role.UserRole;
-import org.eclipse.osee.ats.util.widgets.role.UserRole.Role;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeDataStoreException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.core.model.type.ArtifactType;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
-import org.eclipse.osee.framework.skynet.core.artifact.IATSStateMachineArtifact;
-import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
-
-/**
- * @author Donald G. Dunne
- */
-public class PeerToPeerReviewArtifact extends ReviewSMArtifact implements IReviewArtifact, IATSStateMachineArtifact {
-
- public static enum PeerToPeerReviewState {
- Prepare,
- Review,
- Completed
- };
-
- public PeerToPeerReviewArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException {
- super(parentFactory, guid, humanReadableId, branch, artifactType);
- defectManager = new DefectManager(this);
- }
-
- public static String getDefaultReviewTitle(TeamWorkFlowArtifact teamArt) {
- return "Review \"" + teamArt.getArtifactTypeName() + "\" titled \"" + teamArt.getName() + "\"";
- }
-
- @Override
- public IStatus isUserRoleValid(String namespace) throws OseeCoreException {
- if (getUserRoleManager().getUserRoles(Role.Author).size() <= 0) {
- return new Status(IStatus.ERROR, namespace, "Must have at least one Author");
- }
- if (getUserRoleManager().getUserRoles(Role.Reviewer).size() <= 0) {
- return new Status(IStatus.ERROR, namespace, "Must have at least one Reviewer");
- }
- // If in review state, all roles must have hours spent entered
- if (getStateMgr().getCurrentStateName().equals(PeerToPeerReviewArtifact.PeerToPeerReviewState.Review.name())) {
- for (UserRole uRole : userRoleManager.getUserRoles()) {
- if (uRole.getHoursSpent() == null) {
- new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, "Hours spent must be entered for each role.");
- }
- }
- }
- return super.isUserRoleValid(namespace);
- }
-
- @Override
- public String getHelpContext() {
- return "peerToPeerReview";
- }
-
- @Override
- public String getHyperName() {
- return getName();
- }
-
- @Override
- public String getWorldViewDescription() throws OseeCoreException {
+/******************************************************************************* + * 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.artifact; + +import java.util.Collection; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.widgets.defect.DefectManager; +import org.eclipse.osee.ats.util.widgets.role.UserRole; +import org.eclipse.osee.ats.util.widgets.role.UserRole.Role; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeDataStoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.type.ArtifactType; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory; +import org.eclipse.osee.framework.skynet.core.artifact.IATSStateMachineArtifact; +import org.eclipse.osee.framework.skynet.core.utility.Artifacts; + +/** + * @author Donald G. Dunne + */ +public class PeerToPeerReviewArtifact extends ReviewSMArtifact implements IReviewArtifact, IATSStateMachineArtifact { + + public static enum PeerToPeerReviewState { + Prepare, + Review, + Completed + }; + + public PeerToPeerReviewArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException { + super(parentFactory, guid, humanReadableId, branch, artifactType); + defectManager = new DefectManager(this); + } + + public static String getDefaultReviewTitle(TeamWorkFlowArtifact teamArt) { + return "Review \"" + teamArt.getArtifactTypeName() + "\" titled \"" + teamArt.getName() + "\""; + } + + @Override + public IStatus isUserRoleValid(String namespace) throws OseeCoreException { + if (getUserRoleManager().getUserRoles(Role.Author).size() <= 0) { + return new Status(IStatus.ERROR, namespace, "Must have at least one Author"); + } + if (getUserRoleManager().getUserRoles(Role.Reviewer).size() <= 0) { + return new Status(IStatus.ERROR, namespace, "Must have at least one Reviewer"); + } + // If in review state, all roles must have hours spent entered + if (getStateMgr().getCurrentStateName().equals(PeerToPeerReviewArtifact.PeerToPeerReviewState.Review.name())) { + for (UserRole uRole : userRoleManager.getUserRoles()) { + if (uRole.getHoursSpent() == null) { + new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, "Hours spent must be entered for each role."); + } + } + } + return super.isUserRoleValid(namespace); + } + + @Override + public String getHelpContext() { + return "peerToPeerReview"; + } + + @Override + public String getHyperName() { + return getName(); + } + + @Override + public String getWorldViewDescription() throws OseeCoreException { return getSoleAttributeValue(AtsAttributeTypes.Description, ""); - }
-
- @Override
- public VersionArtifact getWorldViewTargetedVersion() throws OseeCoreException {
- if (getParentSMA() == null) {
- return null;
- }
- return getParentSMA().getWorldViewTargetedVersion();
- }
-
- @Override
- public Collection<User> getImplementers() throws OseeCoreException {
- Collection<User> users = getImplementersByState(PeerToPeerReviewState.Review.name());
- for (UserRole role : userRoleManager.getUserRoles()) {
- users.add(role.getUser());
- }
- return users;
- }
-
- @Override
- public String getWorldViewReviewAuthor() throws OseeCoreException {
- return Artifacts.toString("; ", getUserRoleManager().getRoleUsers(Role.Author));
- }
-
- @Override
- public String getWorldViewReviewModerator() throws OseeCoreException {
- return Artifacts.toString("; ", getUserRoleManager().getRoleUsers(Role.Moderator));
- }
-
- @Override
- public String getWorldViewReviewReviewer() throws OseeCoreException {
- return Artifacts.toString("; ", getUserRoleManager().getRoleUsers(Role.Reviewer));
- }
-
- @Override
- public String getWorldViewNumberOfReviewIssueDefects() throws OseeCoreException {
- return String.valueOf(getDefectManager().getNumIssues());
- }
-
- @Override
- public String getWorldViewNumberOfReviewMajorDefects() throws OseeCoreException {
- return String.valueOf(getDefectManager().getNumMajor());
- }
-
- @Override
- public String getWorldViewNumberOfReviewMinorDefects() throws OseeCoreException {
- return String.valueOf(getDefectManager().getNumMinor());
- }
-
-}
+ } + + @Override + public VersionArtifact getWorldViewTargetedVersion() throws OseeCoreException { + if (getParentSMA() == null) { + return null; + } + return getParentSMA().getWorldViewTargetedVersion(); + } + + @Override + public Collection<User> getImplementers() throws OseeCoreException { + Collection<User> users = getImplementersByState(PeerToPeerReviewState.Review.name()); + for (UserRole role : userRoleManager.getUserRoles()) { + users.add(role.getUser()); + } + return users; + } + + @Override + public String getWorldViewReviewAuthor() throws OseeCoreException { + return Artifacts.toString("; ", getUserRoleManager().getRoleUsers(Role.Author)); + } + + @Override + public String getWorldViewReviewModerator() throws OseeCoreException { + return Artifacts.toString("; ", getUserRoleManager().getRoleUsers(Role.Moderator)); + } + + @Override + public String getWorldViewReviewReviewer() throws OseeCoreException { + return Artifacts.toString("; ", getUserRoleManager().getRoleUsers(Role.Reviewer)); + } + + @Override + public String getWorldViewNumberOfReviewIssueDefects() throws OseeCoreException { + return String.valueOf(getDefectManager().getNumIssues()); + } + + @Override + public String getWorldViewNumberOfReviewMajorDefects() throws OseeCoreException { + return String.valueOf(getDefectManager().getNumMajor()); + } + + @Override + public String getWorldViewNumberOfReviewMinorDefects() throws OseeCoreException { + return String.valueOf(getDefectManager().getNumMinor()); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/PeerToPeerReviewWorkflowManager.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/PeerToPeerReviewWorkflowManager.java index 7e5dd4c2411..2a57dead04f 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/PeerToPeerReviewWorkflowManager.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/PeerToPeerReviewWorkflowManager.java @@ -33,10 +33,7 @@ public class PeerToPeerReviewWorkflowManager { * 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 toState * @param user User to transition to OR null if should use user of current state - * @param popup - * @param transaction * @return Result * @throws Exception */ diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ReviewSMArtifact.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ReviewSMArtifact.java index 1f2673e219c..de916b4cbd2 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ReviewSMArtifact.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/ReviewSMArtifact.java @@ -1,343 +1,343 @@ -/*******************************************************************************
- * 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.artifact;
-
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Level;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsNotifyUsers;
-import org.eclipse.osee.ats.util.AtsRelationTypes;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.ats.util.widgets.XActionableItemsDam;
-import org.eclipse.osee.ats.util.widgets.defect.DefectManager;
-import org.eclipse.osee.ats.util.widgets.role.UserRole;
-import org.eclipse.osee.ats.util.widgets.role.UserRole.Role;
-import org.eclipse.osee.ats.util.widgets.role.UserRoleManager;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeDataStoreException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.core.model.type.ArtifactType;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.UserManager;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
-import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
-
-/**
- * @author Donald G. Dunne
- */
-public abstract class ReviewSMArtifact extends TaskableStateMachineArtifact {
-
- protected DefectManager defectManager;
- protected UserRoleManager userRoleManager;
- private XActionableItemsDam actionableItemsDam;
- private Collection<UserRole> preSaveReviewRoleComplete;
- Boolean standAlone = null;
- public static enum ReviewBlockType {
- None,
- Transition,
- Commit
- };
-
- public ReviewSMArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException {
- super(parentFactory, guid, humanReadableId, branch, artifactType);
- }
-
- @Override
- public void onInitializationComplete() throws OseeCoreException {
- super.onInitializationComplete();
- initializeSMA();
- };
-
- @Override
- public Set<User> getPrivilegedUsers() throws OseeCoreException {
- Set<User> users = new HashSet<User>();
- if (getParentTeamWorkflow() != null) {
- users.addAll(getParentTeamWorkflow().getPrivilegedUsers());
- }
- for (ActionableItemArtifact aia : getActionableItemsDam().getActionableItems()) {
- for (TeamDefinitionArtifact teamDef : aia.getImpactedTeamDefs()) {
- addPriviledgedUsersUpTeamDefinitionTree(teamDef, users);
- }
- }
- if (AtsUtil.isAtsAdmin()) {
- users.add(UserManager.getUser());
- }
- return users;
- }
-
- @Override
- public void onAttributePersist(SkynetTransaction transaction) {
- super.onAttributePersist(transaction);
- // Since multiple ways exist to change the assignees, notification is performed on the persist
- if (isDeleted()) {
- return;
- }
- try {
- notifyReviewersComplete();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- @Override
- public void initalizePreSaveCache() {
- super.initalizePreSaveCache();
- try {
- preSaveReviewRoleComplete = getRoleUsersReviewComplete();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- private Collection<UserRole> getRoleUsersReviewComplete() throws OseeCoreException {
- return this.getUserRoleManager().getRoleUsersReviewComplete();
- }
-
- public void notifyReviewersComplete() throws OseeCoreException {
- UserRoleManager userRoleManager = this.getUserRoleManager();
- if (!preSaveReviewRoleComplete.equals(userRoleManager.getRoleUsersReviewComplete())) {
- //all reviewers are complete; send notification to author/moderator
- if (userRoleManager.getUserRoles(Role.Reviewer).equals(userRoleManager.getRoleUsersReviewComplete())) {
- AtsNotifyUsers.getInstance().notify(this, AtsNotifyUsers.NotifyType.Reviewed);
- }
- }
- preSaveReviewRoleComplete = userRoleManager.getRoleUsersReviewComplete();
- }
-
- /**
- * Reset managers for case where artifact is re-loaded/initialized
- *
- * @throws OseeCoreException
- * @see org.eclipse.osee.ats.artifact.StateMachineArtifact#initialize()
- */
- @Override
- protected void initializeSMA() throws OseeCoreException {
- super.initializeSMA();
- defectManager = new DefectManager(this);
- userRoleManager = new UserRoleManager(this);
- actionableItemsDam = new XActionableItemsDam(this);
- }
-
- @Override
- public String getArtifactSuperTypeName() {
- return "Review";
- }
-
- public boolean isBlocking() throws OseeCoreException {
- return getReviewBlockType() != ReviewBlockType.None;
- }
-
- public ReviewBlockType getReviewBlockType() throws OseeCoreException {
+/******************************************************************************* + * 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.artifact; + +import java.util.Collection; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.logging.Level; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsNotifyUsers; +import org.eclipse.osee.ats.util.AtsRelationTypes; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.ats.util.widgets.XActionableItemsDam; +import org.eclipse.osee.ats.util.widgets.defect.DefectManager; +import org.eclipse.osee.ats.util.widgets.role.UserRole; +import org.eclipse.osee.ats.util.widgets.role.UserRole.Role; +import org.eclipse.osee.ats.util.widgets.role.UserRoleManager; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeDataStoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.type.ArtifactType; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.UserManager; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory; +import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction; + +/** + * @author Donald G. Dunne + */ +public abstract class ReviewSMArtifact extends TaskableStateMachineArtifact { + + protected DefectManager defectManager; + protected UserRoleManager userRoleManager; + private XActionableItemsDam actionableItemsDam; + private Collection<UserRole> preSaveReviewRoleComplete; + Boolean standAlone = null; + public static enum ReviewBlockType { + None, + Transition, + Commit + }; + + public ReviewSMArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException { + super(parentFactory, guid, humanReadableId, branch, artifactType); + } + + @Override + public void onInitializationComplete() throws OseeCoreException { + super.onInitializationComplete(); + initializeSMA(); + }; + + @Override + public Set<User> getPrivilegedUsers() throws OseeCoreException { + Set<User> users = new HashSet<User>(); + if (getParentTeamWorkflow() != null) { + users.addAll(getParentTeamWorkflow().getPrivilegedUsers()); + } + for (ActionableItemArtifact aia : getActionableItemsDam().getActionableItems()) { + for (TeamDefinitionArtifact teamDef : aia.getImpactedTeamDefs()) { + addPriviledgedUsersUpTeamDefinitionTree(teamDef, users); + } + } + if (AtsUtil.isAtsAdmin()) { + users.add(UserManager.getUser()); + } + return users; + } + + @Override + public void onAttributePersist(SkynetTransaction transaction) { + super.onAttributePersist(transaction); + // Since multiple ways exist to change the assignees, notification is performed on the persist + if (isDeleted()) { + return; + } + try { + notifyReviewersComplete(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + @Override + public void initalizePreSaveCache() { + super.initalizePreSaveCache(); + try { + preSaveReviewRoleComplete = getRoleUsersReviewComplete(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + private Collection<UserRole> getRoleUsersReviewComplete() throws OseeCoreException { + return this.getUserRoleManager().getRoleUsersReviewComplete(); + } + + public void notifyReviewersComplete() throws OseeCoreException { + UserRoleManager userRoleManager = this.getUserRoleManager(); + if (!preSaveReviewRoleComplete.equals(userRoleManager.getRoleUsersReviewComplete())) { + //all reviewers are complete; send notification to author/moderator + if (userRoleManager.getUserRoles(Role.Reviewer).equals(userRoleManager.getRoleUsersReviewComplete())) { + AtsNotifyUsers.getInstance().notify(this, AtsNotifyUsers.NotifyType.Reviewed); + } + } + preSaveReviewRoleComplete = userRoleManager.getRoleUsersReviewComplete(); + } + + /** + * Reset managers for case where artifact is re-loaded/initialized + * + * @throws OseeCoreException + * @see org.eclipse.osee.ats.artifact.StateMachineArtifact#initialize() + */ + @Override + protected void initializeSMA() throws OseeCoreException { + super.initializeSMA(); + defectManager = new DefectManager(this); + userRoleManager = new UserRoleManager(this); + actionableItemsDam = new XActionableItemsDam(this); + } + + @Override + public String getArtifactSuperTypeName() { + return "Review"; + } + + public boolean isBlocking() throws OseeCoreException { + return getReviewBlockType() != ReviewBlockType.None; + } + + public ReviewBlockType getReviewBlockType() throws OseeCoreException { String typeStr = getSoleAttributeValue(AtsAttributeTypes.ReviewBlocks, null); - if (typeStr == null) {
- // Check old attribute value
+ if (typeStr == null) { + // Check old attribute value if (getSoleAttributeValue(AtsAttributeTypes.BlockingReview, false) == true) { - return ReviewBlockType.Transition;
- }
- return ReviewBlockType.None;
- }
- return ReviewBlockType.valueOf(typeStr);
- }
-
- public DefectManager getDefectManager() {
- if (defectManager == null) {
- defectManager = new DefectManager(this);
- }
- return defectManager;
- }
-
- @Override
- public String getHyperTargetVersion() {
- return null;
- }
-
- public UserRoleManager getUserRoleManager() {
- if (userRoleManager == null) {
- return userRoleManager = new UserRoleManager(this);
- }
- return userRoleManager;
- }
-
- @SuppressWarnings("unused")
- public IStatus isUserRoleValid(String namespace) throws OseeCoreException {
- // Need this cause it removes all error items of this namespace
- return new Status(IStatus.OK, namespace, "");
- }
-
- public Set<TeamDefinitionArtifact> getCorrespondingTeamDefinitionArtifact() throws OseeCoreException {
- Set<TeamDefinitionArtifact> teamDefs = new HashSet<TeamDefinitionArtifact>();
- if (getParentTeamWorkflow() != null) {
- teamDefs.add(getParentTeamWorkflow().getTeamDefinition());
- }
- if (getActionableItemsDam().getActionableItems().size() > 0) {
- teamDefs.addAll(ActionableItemArtifact.getImpactedTeamDefs(getActionableItemsDam().getActionableItems()));
- }
- return teamDefs;
- }
-
- /**
- * @return the actionableItemsDam
- */
- public XActionableItemsDam getActionableItemsDam() throws OseeCoreException {
- if (actionableItemsDam == null) {
- actionableItemsDam = new XActionableItemsDam(this);
- }
- return actionableItemsDam;
- }
-
- @Override
- public StateMachineArtifact getParentSMA() throws OseeCoreException {
- if (isStandAloneReview()) {
- return null;
- }
- if (parentSma != null) {
- return parentSma;
- }
- parentSma = getParentTeamWorkflow();
- return parentSma;
- }
-
- @Override
- public ActionArtifact getParentActionArtifact() throws OseeCoreException {
- if (isStandAloneReview()) {
- return null;
- }
- if (parentAction != null) {
- return parentAction;
- }
- parentTeamArt = getParentTeamWorkflow();
- if (parentTeamArt != null) {
- parentAction = parentTeamArt.getParentActionArtifact();
- }
- return parentAction;
- }
-
- @Override
- public TeamWorkFlowArtifact getParentTeamWorkflow() throws OseeCoreException {
- if (isStandAloneReview()) {
- return null;
- }
- if (parentTeamArt != null) {
- return parentTeamArt;
- }
- List<TeamWorkFlowArtifact> teams =
- getRelatedArtifacts(AtsRelationTypes.TeamWorkflowToReview_Team, TeamWorkFlowArtifact.class);
- if (teams.size() > 1) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE,
- getArtifactTypeName() + " " + getHumanReadableId() + " has multiple parent workflows");
- } else if (!isStandAloneReview() && teams.isEmpty()) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE,
- getArtifactTypeName() + " " + getHumanReadableId() + " has no parent workflow");
- }
- if (teams.size() > 0) {
- parentTeamArt = teams.iterator().next();
- }
- return parentTeamArt;
- }
-
- public boolean isStandAloneReview() throws OseeCoreException {
- if (standAlone == null) {
- standAlone = getActionableItemsDam().getActionableItemGuids().size() > 0;
- }
- return standAlone;
- }
-
- @Override
- public String getWorldViewParentID() throws OseeCoreException {
- return getParentTeamWorkflow().getHumanReadableId();
- }
-
- @Override
- public Date getWorldViewDeadlineDate() {
- return null;
- }
-
- @Override
- public String getWorldViewCategory() {
- return "";
- }
-
- @Override
- public Date getWorldViewReleaseDate() {
- return null;
- }
-
- @Override
- public String getWorldViewTeam() throws OseeCoreException {
- TeamWorkFlowArtifact teamDef = getParentTeamWorkflow();
- if (teamDef != null) {
- return teamDef.getWorldViewTeam();
- }
- return "";
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewReviewDecider() throws OseeCoreException {
- return "";
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewReviewModerator() throws OseeCoreException {
- return "";
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewReviewReviewer() throws OseeCoreException {
- return "";
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewReviewAuthor() throws OseeCoreException {
- return "";
- }
-
- @Override
- public double getWorldViewWeeklyBenefit() {
- return 0;
- }
-
- @Override
- public String getWorldViewWorkPackage() {
- return "";
- }
-
- public Artifact getArtifact() {
- return this;
- }
-
- @Override
- public String getWorldViewCategory2() {
- return "";
- }
-
- @Override
- public String getWorldViewCategory3() {
- return "";
- }
-
- @Override
- public String getWorldViewDeadlineDateStr() {
- return "";
- }
-
-}
+ return ReviewBlockType.Transition; + } + return ReviewBlockType.None; + } + return ReviewBlockType.valueOf(typeStr); + } + + public DefectManager getDefectManager() { + if (defectManager == null) { + defectManager = new DefectManager(this); + } + return defectManager; + } + + @Override + public String getHyperTargetVersion() { + return null; + } + + public UserRoleManager getUserRoleManager() { + if (userRoleManager == null) { + return userRoleManager = new UserRoleManager(this); + } + return userRoleManager; + } + + @SuppressWarnings("unused") + public IStatus isUserRoleValid(String namespace) throws OseeCoreException { + // Need this cause it removes all error items of this namespace + return new Status(IStatus.OK, namespace, ""); + } + + public Set<TeamDefinitionArtifact> getCorrespondingTeamDefinitionArtifact() throws OseeCoreException { + Set<TeamDefinitionArtifact> teamDefs = new HashSet<TeamDefinitionArtifact>(); + if (getParentTeamWorkflow() != null) { + teamDefs.add(getParentTeamWorkflow().getTeamDefinition()); + } + if (getActionableItemsDam().getActionableItems().size() > 0) { + teamDefs.addAll(ActionableItemArtifact.getImpactedTeamDefs(getActionableItemsDam().getActionableItems())); + } + return teamDefs; + } + + /** + * @return the actionableItemsDam + */ + public XActionableItemsDam getActionableItemsDam() throws OseeCoreException { + if (actionableItemsDam == null) { + actionableItemsDam = new XActionableItemsDam(this); + } + return actionableItemsDam; + } + + @Override + public StateMachineArtifact getParentSMA() throws OseeCoreException { + if (isStandAloneReview()) { + return null; + } + if (parentSma != null) { + return parentSma; + } + parentSma = getParentTeamWorkflow(); + return parentSma; + } + + @Override + public ActionArtifact getParentActionArtifact() throws OseeCoreException { + if (isStandAloneReview()) { + return null; + } + if (parentAction != null) { + return parentAction; + } + parentTeamArt = getParentTeamWorkflow(); + if (parentTeamArt != null) { + parentAction = parentTeamArt.getParentActionArtifact(); + } + return parentAction; + } + + @Override + public TeamWorkFlowArtifact getParentTeamWorkflow() throws OseeCoreException { + if (isStandAloneReview()) { + return null; + } + if (parentTeamArt != null) { + return parentTeamArt; + } + List<TeamWorkFlowArtifact> teams = + getRelatedArtifacts(AtsRelationTypes.TeamWorkflowToReview_Team, TeamWorkFlowArtifact.class); + if (teams.size() > 1) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, + getArtifactTypeName() + " " + getHumanReadableId() + " has multiple parent workflows"); + } else if (!isStandAloneReview() && teams.isEmpty()) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, + getArtifactTypeName() + " " + getHumanReadableId() + " has no parent workflow"); + } + if (teams.size() > 0) { + parentTeamArt = teams.iterator().next(); + } + return parentTeamArt; + } + + public boolean isStandAloneReview() throws OseeCoreException { + if (standAlone == null) { + standAlone = getActionableItemsDam().getActionableItemGuids().size() > 0; + } + return standAlone; + } + + @Override + public String getWorldViewParentID() throws OseeCoreException { + return getParentTeamWorkflow().getHumanReadableId(); + } + + @Override + public Date getWorldViewDeadlineDate() { + return null; + } + + @Override + public String getWorldViewCategory() { + return ""; + } + + @Override + public Date getWorldViewReleaseDate() { + return null; + } + + @Override + public String getWorldViewTeam() throws OseeCoreException { + TeamWorkFlowArtifact teamDef = getParentTeamWorkflow(); + if (teamDef != null) { + return teamDef.getWorldViewTeam(); + } + return ""; + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewReviewDecider() throws OseeCoreException { + return ""; + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewReviewModerator() throws OseeCoreException { + return ""; + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewReviewReviewer() throws OseeCoreException { + return ""; + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewReviewAuthor() throws OseeCoreException { + return ""; + } + + @Override + public double getWorldViewWeeklyBenefit() { + return 0; + } + + @Override + public String getWorldViewWorkPackage() { + return ""; + } + + public Artifact getArtifact() { + return this; + } + + @Override + public String getWorldViewCategory2() { + return ""; + } + + @Override + public String getWorldViewCategory3() { + return ""; + } + + @Override + public String getWorldViewDeadlineDateStr() { + return ""; + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/StateMachineArtifact.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/StateMachineArtifact.java index 40f44f41a95..46e7bf1f220 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/StateMachineArtifact.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/StateMachineArtifact.java @@ -1,1913 +1,1912 @@ -/*******************************************************************************
- * 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.artifact;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
-import org.eclipse.nebula.widgets.xviewer.XViewerCells;
-import org.eclipse.osee.ats.artifact.ATSLog.LogType;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact.DefaultTeamState;
-import org.eclipse.osee.ats.editor.SMAEditor;
-import org.eclipse.osee.ats.editor.stateItem.AtsStateItems;
-import org.eclipse.osee.ats.editor.stateItem.IAtsStateItem;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.ats.util.AtsNotifyUsers;
-import org.eclipse.osee.ats.util.AtsRelationTypes;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.ats.util.DeadlineManager;
-import org.eclipse.osee.ats.util.Overview;
-import org.eclipse.osee.ats.util.Overview.PreviewStyle;
-import org.eclipse.osee.ats.util.StateManager;
-import org.eclipse.osee.ats.util.widgets.ReviewManager;
-import org.eclipse.osee.ats.workflow.ATSXWidgetOptionResolver;
-import org.eclipse.osee.ats.workflow.AtsWorkPage;
-import org.eclipse.osee.ats.workflow.item.AtsStatePercentCompleteWeightRule;
-import org.eclipse.osee.ats.workflow.item.AtsWorkDefinitions;
-import org.eclipse.osee.ats.world.IWorldViewArtifact;
-import org.eclipse.osee.framework.access.AccessControlManager;
-import org.eclipse.osee.framework.core.data.AccessContextId;
-import org.eclipse.osee.framework.core.data.IArtifactType;
-import org.eclipse.osee.framework.core.data.SystemUser;
-import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
-import org.eclipse.osee.framework.core.enums.IRelationEnumeration;
-import org.eclipse.osee.framework.core.enums.PermissionEnum;
-import org.eclipse.osee.framework.core.exception.OseeArgumentException;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeDataStoreException;
-import org.eclipse.osee.framework.core.exception.OseeStateException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.core.model.type.ArtifactType;
-import org.eclipse.osee.framework.core.services.CmAccessControl;
-import org.eclipse.osee.framework.core.services.HasCmAccessControl;
-import org.eclipse.osee.framework.jdk.core.util.Lib;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.UserManager;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
-import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
-import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
-import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.skynet.FrameworkArtifactImageProvider;
-import org.eclipse.osee.framework.ui.skynet.group.IGroupExplorerProvider;
-import org.eclipse.osee.framework.ui.skynet.notify.OseeNotificationManager;
-import org.eclipse.osee.framework.ui.skynet.util.ChangeType;
-import org.eclipse.osee.framework.ui.skynet.util.email.EmailGroup;
-import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkFlowDefinition;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkFlowDefinitionFactory;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkItemDefinition;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinition;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkRuleDefinition;
-import org.eclipse.swt.graphics.Image;
-
-/**
- * @author Donald G. Dunne
- */
-public abstract class StateMachineArtifact extends ATSArtifact implements HasCmAccessControl, IGroupExplorerProvider, IWorldViewArtifact, ISubscribableArtifact, IFavoriteableArtifact {
-
- private final Set<IRelationEnumeration> atsWorldRelations = new HashSet<IRelationEnumeration>();
- private Collection<User> preSaveStateAssignees;
- private User preSaveOriginator;
- public static double DEFAULT_HOURS_PER_WORK_DAY = 8;
- protected WorkFlowDefinition workFlowDefinition;
- protected Artifact parent;
- protected StateMachineArtifact parentSma;
- protected TeamWorkFlowArtifact parentTeamArt;
- protected ActionArtifact parentAction;
- private Collection<User> transitionAssignees;
- private static String SEPERATOR = "; ";
- private StateManager stateMgr;
- private DeadlineManager deadlineMgr;
- private SMAEditor editor;
- private ATSLog atsLog;
- private ATSNote atsNote;
- private static final AtsStateItems stateItems = new AtsStateItems();
- private boolean inTransition = false;
- public static enum TransitionOption {
- None,
- Persist,
- // Override check whether workflow allows transition to state
- OverrideTransitionValidityCheck,
- // Allows transition to occur with UnAssigned, OseeSystem or Guest
- OverrideAssigneeCheck
- };
-
- public StateMachineArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException {
- super(parentFactory, guid, humanReadableId, branch, artifactType);
- }
-
- @Override
- public void onBirth() throws OseeCoreException {
- super.onBirth();
- setSoleAttributeValue(AtsAttributeTypes.CurrentState, "");
- }
-
- @Override
- public void onInitializationComplete() throws OseeCoreException {
- super.onInitializationComplete();
- initializeSMA();
- }
-
- @Override
- public void reloadAttributesAndRelations() throws OseeCoreException {
- super.reloadAttributesAndRelations();
- initializeSMA();
- }
-
- @SuppressWarnings("unused")
- protected void initializeSMA() throws OseeCoreException {
- initalizePreSaveCache();
- }
-
- public void initalizePreSaveCache() {
- try {
- deadlineMgr = new DeadlineManager(this);
- stateMgr = new StateManager(this);
- atsLog = new ATSLog(this);
- atsNote = new ATSNote(this);
- preSaveStateAssignees = getStateMgr().getAssignees();
- if (getOriginator() == null) {
- preSaveOriginator = UserManager.getUser();
- } else {
- preSaveOriginator = getOriginator();
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- public boolean hasAtsWorldChildren() throws OseeCoreException {
- for (IRelationEnumeration iRelationEnumeration : atsWorldRelations) {
- if (getRelatedArtifactsCount(iRelationEnumeration) > 0) {
- return true;
- }
- }
- return false;
- }
-
- public String getHelpContext() {
- return "atsWorkflowEditorWorkflowTab";
- }
-
- public String getArtifactSuperTypeName() {
- return getArtifactTypeName();
- }
-
- @SuppressWarnings("unused")
- @Override
- public Date getWorldViewDeadlineDate() throws OseeCoreException {
- return null;
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewDeadlineDateStr() throws OseeCoreException {
- return "";
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewDescription() throws OseeCoreException {
- return "";
- }
-
- @Override
- public String getWorldViewImplementer() throws OseeCoreException {
- return Artifacts.toString("; ", getImplementers());
- }
-
- public Collection<User> getImplementersByState(String stateName) throws OseeCoreException {
- if (isCancelled()) {
- return Arrays.asList(getLog().getCancelledLogItem().getUser());
- }
- Collection<User> users = new HashSet<User>(getStateMgr().getAssignees(stateName));
- LogItem item = getLog().getCompletedLogItem();
- if (item != null) {
- users.add(item.getUser());
- }
- return users;
- }
-
- @SuppressWarnings("unused")
- public Collection<User> getImplementers() throws OseeCoreException {
- return Collections.emptyList();
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewTeam() throws OseeCoreException {
- return null;
- }
-
- @Override
- public String getWorldViewGroups() throws OseeCoreException {
- return Artifacts.toString("; ", getRelatedArtifacts(CoreRelationTypes.Universal_Grouping__Group));
- }
-
- @Override
- public String getWorldViewGoals() throws OseeCoreException {
- return Artifacts.toString("; ", getRelatedArtifacts(AtsRelationTypes.Goal_Goal));
- }
-
- @SuppressWarnings("unused")
- @Override
- public double getWorldViewWeeklyBenefit() throws OseeCoreException {
- return 0;
- }
-
- @Override
- public void onAttributePersist(SkynetTransaction transaction) {
- // Since multiple ways exist to change the assignees, notification is performed on the persist
- if (isDeleted()) {
- return;
- }
- try {
- notifyNewAssigneesAndReset();
- notifyOriginatorAndReset();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- /**
- * Override to apply different algorithm to current section expansion.
- *
- * @param page
- * @return true if section should be expanded
- * @throws OseeCoreException
- */
- public boolean isCurrentSectionExpanded(String stateName) throws OseeCoreException {
- return getStateMgr().getCurrentStateName().equals(stateName);
- }
-
- public void notifyNewAssigneesAndReset() throws OseeCoreException {
- if (preSaveStateAssignees == null) {
- preSaveStateAssignees = getStateMgr().getAssignees();
- return;
- }
- Set<User> newAssignees = new HashSet<User>();
- for (User user : getStateMgr().getAssignees()) {
- if (!preSaveStateAssignees.contains(user)) {
- newAssignees.add(user);
- }
- }
- preSaveStateAssignees = getStateMgr().getAssignees();
- if (newAssignees.isEmpty()) {
- return;
- }
- try {
- // These will be processed upon save
- AtsNotifyUsers.getInstance().notify(this, newAssignees, AtsNotifyUsers.NotifyType.Assigned);
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
- public void notifyOriginatorAndReset() throws OseeCoreException {
- if (preSaveOriginator != null && getOriginator() != null && !getOriginator().equals(preSaveOriginator)) {
- AtsNotifyUsers.getInstance().notify(this, AtsNotifyUsers.NotifyType.Originator);
- }
- preSaveOriginator = getOriginator();
- }
-
- @SuppressWarnings("unused")
- public boolean isValidationRequired() throws OseeCoreException {
- return false;
- }
-
- public abstract Set<User> getPrivilegedUsers() throws OseeCoreException;
-
- @Override
- public String getDescription() {
- return "";
- }
-
- public ArrayList<EmailGroup> getEmailableGroups() throws OseeCoreException {
- ArrayList<EmailGroup> groupNames = new ArrayList<EmailGroup>();
- ArrayList<String> emails = new ArrayList<String>();
- emails.add(getOriginator().getEmail());
- groupNames.add(new EmailGroup("Originator", emails));
- if (getStateMgr().getAssignees().size() > 0) {
- emails = new ArrayList<String>();
- for (User u : getStateMgr().getAssignees()) {
- emails.add(u.getEmail());
- }
- groupNames.add(new EmailGroup("Assignees", emails));
- }
- return groupNames;
- }
-
- @SuppressWarnings("unused")
- public StateMachineArtifact getParentSMA() throws OseeCoreException {
- return parentSma;
- }
-
- @SuppressWarnings("unused")
- public ActionArtifact getParentActionArtifact() throws OseeCoreException {
- return parentAction;
- }
-
- @SuppressWarnings("unused")
- public TeamWorkFlowArtifact getParentTeamWorkflow() throws OseeCoreException {
- return parentTeamArt;
- }
-
- public String getPreviewHtml() throws OseeCoreException {
- return getPreviewHtml(PreviewStyle.NONE);
- }
-
- public String getPreviewHtml(PreviewStyle... styles) throws OseeCoreException {
- Overview o = new Overview();
- o.addHeader(this, styles);
- o.addFooter(this, styles);
- return o.getPage();
- }
-
- public boolean isUnCancellable() {
- try {
- LogItem item = getLog().getStateEvent(LogType.StateCancelled);
- if (item == null) {
- throw new OseeArgumentException("No Cancelled Event");
- }
- for (WorkPageDefinition toWorkPageDefinition : getWorkFlowDefinition().getToPages(getWorkPageDefinition())) {
- if (toWorkPageDefinition.getPageName().equals(item.getState())) {
- return true;
- }
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- return false;
- }
-
- public boolean isTaskable() throws OseeCoreException {
- if (isCompleted() || isCancelled()) {
- return false;
- }
- return true;
- }
-
- public boolean showTaskTab() throws OseeCoreException {
- return isTaskable();
- }
-
- public String getEditorTitle() throws OseeCoreException {
- return getWorldViewType() + ": " + getName();
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewActionableItems() throws OseeCoreException {
- return "";
- }
-
- /**
- * Registers relation as part of the parent/child hierarchy in ATS World
- */
- public void registerAtsWorldRelation(AtsRelationTypes side) {
- atsWorldRelations.add(side);
- }
-
- @Override
- public Image getAssigneeImage() throws OseeCoreException {
- if (isDeleted()) {
- return null;
- }
- return FrameworkArtifactImageProvider.getUserImage(getStateMgr().getAssignees());
- }
-
- public WorkFlowDefinition getWorkFlowDefinition() {
- if (workFlowDefinition == null) {
- try {
- workFlowDefinition = WorkFlowDefinitionFactory.getWorkFlowDefinition(this);
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- return workFlowDefinition;
- }
-
- @Override
- public void addSubscribed(User user, SkynetTransaction transaction) throws OseeCoreException {
- if (!getRelatedArtifacts(AtsRelationTypes.SubscribedUser_User).contains(user)) {
- addRelation(AtsRelationTypes.SubscribedUser_User, user);
- persist(transaction);
- }
-
- }
-
- @Override
- public void removeSubscribed(User user, SkynetTransaction transaction) throws OseeCoreException {
- deleteRelation(AtsRelationTypes.SubscribedUser_User, user);
- persist(transaction);
- }
-
- @Override
- public boolean isSubscribed(User user) throws OseeCoreException {
- return getRelatedArtifacts(AtsRelationTypes.SubscribedUser_User).contains(user);
- }
-
- @Override
- public ArrayList<User> getSubscribed() throws OseeCoreException {
- ArrayList<User> arts = new ArrayList<User>();
- for (Artifact art : getRelatedArtifacts(AtsRelationTypes.SubscribedUser_User)) {
- arts.add((User) art);
- }
- return arts;
- }
-
- @Override
- public void addFavorite(User user, SkynetTransaction transaction) throws OseeCoreException {
- if (!getRelatedArtifacts(AtsRelationTypes.FavoriteUser_User).contains(user)) {
- addRelation(AtsRelationTypes.FavoriteUser_User, user);
- persist(transaction);
- }
- }
-
- @Override
- public void removeFavorite(User user, SkynetTransaction transaction) throws OseeCoreException {
- deleteRelation(AtsRelationTypes.FavoriteUser_User, user);
- persist(transaction);
- }
-
- @Override
- public boolean isFavorite(User user) throws OseeCoreException {
- return getRelatedArtifacts(AtsRelationTypes.FavoriteUser_User).contains(user);
- }
-
- @Override
- public ArrayList<User> getFavorites() throws OseeCoreException {
- ArrayList<User> arts = new ArrayList<User>();
- for (Artifact art : getRelatedArtifacts(AtsRelationTypes.FavoriteUser_User)) {
- arts.add((User) art);
- }
- return arts;
- }
-
- @Override
- public boolean amISubscribed() {
- try {
- return isSubscribed(UserManager.getUser());
- } catch (OseeCoreException ex) {
- return false;
- }
- }
-
- @Override
- public boolean amIFavorite() {
- try {
- return isFavorite(UserManager.getUser());
- } catch (OseeCoreException ex) {
- return false;
- }
- }
-
- @Override
- public void atsDelete(Set<Artifact> deleteArts, Map<Artifact, Object> allRelated) throws OseeCoreException {
- SMAEditor.close(Collections.singleton(this), true);
- super.atsDelete(deleteArts, allRelated);
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewType() throws OseeCoreException {
- return getArtifactTypeName();
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewTitle() throws OseeCoreException {
- return getName();
- }
-
- @Override
- public String getWorldViewState() throws OseeCoreException {
- return getStateMgr().getCurrentStateName();
- }
-
- public String implementersStr = null;
-
- @Override
- public String getWorldViewActivePoc() throws OseeCoreException {
- if (isCancelledOrCompleted()) {
- if (implementersStr == null) {
- if (getImplementers().size() > 0) {
- implementersStr = "(" + Artifacts.toString("; ", getImplementers()) + ")";
- }
- }
- return implementersStr;
- }
- return Artifacts.toString("; ", getStateMgr().getAssignees());
- }
-
- @Override
- public String getWorldViewCreatedDateStr() throws OseeCoreException {
- if (getWorldViewCreatedDate() == null) {
- return XViewerCells.getCellExceptionString("No creation date");
- }
- return new XDate(getWorldViewCreatedDate()).getMMDDYYHHMM();
- }
-
- @Override
- public String getWorldViewCompletedDateStr() throws OseeCoreException {
- if (isCompleted()) {
- if (getWorldViewCompletedDate() == null) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Completed with no date => " + getHumanReadableId());
- return XViewerCells.getCellExceptionString("Completed with no date.");
- }
- return new XDate(getWorldViewCompletedDate()).getMMDDYYHHMM();
- }
- return "";
- }
-
- @Override
- public String getWorldViewCancelledDateStr() throws OseeCoreException {
- if (isCancelled()) {
- if (getWorldViewCancelledDate() == null) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, "Cancelled with no date => " + getHumanReadableId());
- return XViewerCells.getCellExceptionString("Cancelled with no date.");
- }
- return new XDate(getWorldViewCancelledDate()).getMMDDYYHHMM();
- }
- return "";
- }
-
- @Override
- public Date getWorldViewCreatedDate() throws OseeCoreException {
- return getLog().getCreationDate();
- }
-
- @Override
- public String getWorldViewOriginator() throws OseeCoreException {
- return getOriginator().getName();
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewID() throws OseeCoreException {
- return getHumanReadableId();
- }
-
- @Override
- public String getWorldViewLegacyPCR() throws OseeCoreException {
- if (isAttributeTypeValid(AtsAttributeTypes.LegacyPcrId)) {
- return getSoleAttributeValue(AtsAttributeTypes.LegacyPcrId, "");
- }
- return "";
- }
-
- @Override
- public Date getWorldViewCompletedDate() throws OseeCoreException {
- LogItem item = getLog().getCompletedLogItem();
- if (item != null) {
- return item.getDate();
- }
- return null;
- }
-
- @Override
- public Date getWorldViewCancelledDate() throws OseeCoreException {
- LogItem item = getLog().getCancelledLogItem();
- if (item != null) {
- return item.getDate();
- }
- return null;
- }
-
- @Override
- public abstract VersionArtifact getWorldViewTargetedVersion() throws OseeCoreException;
-
- @SuppressWarnings("unused")
- @Override
- public ChangeType getWorldViewChangeType() throws OseeCoreException {
- return ChangeType.None;
- }
-
- @Override
- public String getWorldViewChangeTypeStr() throws OseeCoreException {
- if (getWorldViewChangeType() == null || getWorldViewChangeType() == ChangeType.None) {
- return "";
- } else {
- return getWorldViewChangeType().name();
- }
- }
-
- public double getEstimatedHoursFromArtifact() throws OseeCoreException {
- if (isAttributeTypeValid(AtsAttributeTypes.EstimatedHours)) {
- return getSoleAttributeValue(AtsAttributeTypes.EstimatedHours, 0.0);
- }
- return 0;
- }
-
- public double getEstimatedHoursFromTasks(String relatedToState) throws OseeCoreException {
- if (!(this instanceof TaskableStateMachineArtifact)) {
- return 0;
- }
- return ((TaskableStateMachineArtifact) this).getEstimatedHoursFromTasks(relatedToState);
- }
-
- public double getEstimatedHoursFromTasks() throws OseeCoreException {
- if (!(this instanceof TaskableStateMachineArtifact)) {
- return 0;
- }
- return ((TaskableStateMachineArtifact) this).getEstimatedHoursFromTasks();
- }
-
- public double getEstimatedHoursFromReviews() throws OseeCoreException {
- if (isTeamWorkflow()) {
- return ReviewManager.getEstimatedHours((TeamWorkFlowArtifact) this);
- }
- return 0;
- }
-
- public double getEstimatedHoursFromReviews(String relatedToState) throws OseeCoreException {
- if (isTeamWorkflow()) {
- return ReviewManager.getEstimatedHours((TeamWorkFlowArtifact) this, relatedToState);
- }
- return 0;
- }
-
- public double getEstimatedHoursTotal(String relatedToState) throws OseeCoreException {
- return getEstimatedHoursFromArtifact() + getEstimatedHoursFromTasks(relatedToState) + getEstimatedHoursFromReviews(relatedToState);
- }
-
- public double getEstimatedHoursTotal() throws OseeCoreException {
- return getEstimatedHoursFromArtifact() + getEstimatedHoursFromTasks() + getEstimatedHoursFromReviews();
- }
-
- @Override
- public double getWorldViewEstimatedHours() throws OseeCoreException {
- return getEstimatedHoursTotal();
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewUserCommunity() throws OseeCoreException {
- return "";
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewPriority() throws OseeCoreException {
- return "";
- }
-
- @Override
- public String getWorldViewResolution() throws OseeCoreException {
- return getAttributesToString(AtsAttributeTypes.Resolution);
- }
-
- public double getRemainHoursFromArtifact() throws OseeCoreException {
- if (isCompleted() || isCancelled()) {
- return 0;
- }
- double est = getSoleAttributeValue(AtsAttributeTypes.EstimatedHours, 0.0);
- if (est == 0) {
- return getEstimatedHoursFromArtifact();
- }
- double remain = est - est * getPercentCompleteSMATotal() / 100.0;
- return remain;
- }
-
- public double getRemainHoursTotal() throws OseeCoreException {
- return getRemainHoursFromArtifact() + getRemainFromTasks() + getRemainFromReviews();
- }
-
- public double getRemainFromTasks() throws OseeCoreException {
- if (!(this instanceof TaskableStateMachineArtifact)) {
- return 0;
- }
- return ((TaskableStateMachineArtifact) this).getRemainHoursFromTasks();
- }
-
- public double getRemainFromReviews() throws OseeCoreException {
- if (isTeamWorkflow()) {
- return ReviewManager.getRemainHours((TeamWorkFlowArtifact) this);
- }
- return 0;
- }
-
- @Override
- public double getWorldViewRemainHours() throws OseeCoreException {
- return getRemainHoursTotal();
- }
-
- @Override
- public Result isWorldViewRemainHoursValid() throws OseeCoreException {
- if (!isAttributeTypeValid(AtsAttributeTypes.EstimatedHours)) {
- return Result.TrueResult;
- }
- try {
- Double value = getSoleAttributeValue(AtsAttributeTypes.EstimatedHours, null);
- if (isCancelled()) {
- return Result.TrueResult;
- }
- if (value == null) {
- return new Result("Estimated Hours not set.");
- }
- return Result.TrueResult;
- } catch (Exception ex) {
- return new Result(
- ex.getClass().getName() + ": " + ex.getLocalizedMessage() + "\n\n" + Lib.exceptionToString(ex));
- }
- }
-
- @Override
- public Result isWorldViewManDaysNeededValid() throws OseeCoreException {
- Result result = isWorldViewRemainHoursValid();
- if (result.isFalse()) {
- return result;
- }
- if (getManHrsPerDayPreference() == 0) {
- return new Result("Man Day Hours Preference is not set.");
- }
-
- return Result.TrueResult;
- }
-
- @Override
- public double getWorldViewManDaysNeeded() throws OseeCoreException {
- double hrsRemain = getWorldViewRemainHours();
- double manDaysNeeded = 0;
- if (hrsRemain != 0) {
- manDaysNeeded = hrsRemain / getManHrsPerDayPreference();
- }
- return manDaysNeeded;
- }
-
- @SuppressWarnings("unused")
- public double getManHrsPerDayPreference() throws OseeCoreException {
- return DEFAULT_HOURS_PER_WORK_DAY;
- }
-
- @SuppressWarnings("unused")
- @Override
- public double getWorldViewAnnualCostAvoidance() throws OseeCoreException {
- return 0;
- }
-
- @Override
- public Result isWorldViewAnnualCostAvoidanceValid() throws OseeCoreException {
- if (isAttributeTypeValid(AtsAttributeTypes.WeeklyBenefit)) {
- return Result.TrueResult;
- }
- Result result = isWorldViewRemainHoursValid();
- if (result.isFalse()) {
- return result;
- }
- String value = null;
- try {
- value = getSoleAttributeValue(AtsAttributeTypes.WeeklyBenefit, "");
- if (!Strings.isValid(value)) {
- return new Result("Weekly Benefit Hours not set.");
- }
- double val = new Float(value).doubleValue();
- if (val == 0) {
- return new Result("Weekly Benefit Hours not set.");
- }
- } catch (NumberFormatException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "HRID " + getHumanReadableId(), ex);
- return new Result("Weekly Benefit value is invalid double \"" + value + "\"");
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "HRID " + getHumanReadableId(), ex);
- return new Result("Exception calculating cost avoidance. See log for details.");
- }
- return Result.TrueResult;
- }
-
- @Override
- public String getWorldViewNotes() throws OseeCoreException {
- return getSoleAttributeValue(AtsAttributeTypes.SmaNote, "");
- }
-
- @Override
- public String getWorldViewWorkPackage() throws OseeCoreException {
- return getSoleAttributeValue(AtsAttributeTypes.WorkPackage, "");
- }
-
- @Override
- public String getWorldViewPoint() throws OseeCoreException {
- return getSoleAttributeValue(AtsAttributeTypes.Points, "");
- }
-
- @Override
- public String getWorldViewNumeric1() throws OseeCoreException {
- return AtsUtil.doubleToI18nString(getSoleAttributeValue(AtsAttributeTypes.Numeric1, 0.0), true);
- }
-
- @Override
- public String getWorldViewNumeric2() throws OseeCoreException {
- return AtsUtil.doubleToI18nString(getSoleAttributeValue(AtsAttributeTypes.Numeric2, 0.0), true);
- }
-
- @Override
- public String getWorldViewGoalOrderVote() throws OseeCoreException {
- return getSoleAttributeValue(AtsAttributeTypes.GoalOrderVote, "");
- }
-
- @Override
- public String getWorldViewCategory() throws OseeCoreException {
- return getSoleAttributeValue(AtsAttributeTypes.Category1, "");
- }
-
- @Override
- public String getWorldViewCategory2() throws OseeCoreException {
- return getSoleAttributeValue(AtsAttributeTypes.Category2, "");
- }
-
- @Override
- public String getWorldViewCategory3() throws OseeCoreException {
- return getSoleAttributeValue(AtsAttributeTypes.Category3, "");
- }
-
- public int getWorldViewStatePercentComplete() throws OseeCoreException {
- return getPercentCompleteSMAStateTotal(getStateMgr().getCurrentStateName());
- }
-
- @Override
- public String getWorldViewNumberOfTasks() throws OseeCoreException {
- if (!(this instanceof TaskableStateMachineArtifact)) {
- return "";
- }
- int num = ((TaskableStateMachineArtifact) this).getTaskArtifacts().size();
- if (num == 0) {
- return "";
- }
- return String.valueOf(num);
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewRelatedToState() throws OseeCoreException {
- return "";
- }
-
- @Override
- public String getWorldViewTargetedVersionStr() throws OseeCoreException {
- if (getWorldViewTargetedVersion() == null) {
- return "";
- }
- return getWorldViewTargetedVersion().toString();
- }
-
- /**
- * Return true if this artifact, it's ATS relations and any of the other side artifacts are dirty
- *
- * @return true if any object in SMA tree is dirty
- */
- public Result isSMAEditorDirty() {
- try {
- Set<Artifact> artifacts = new HashSet<Artifact>();
- getSmaArtifactsOneLevel(this, artifacts);
- for (Artifact artifact : artifacts) {
- if (artifact.isDirty()) {
- return new Result(true, String.format("Artifact [%s][%s] is dirty", artifact.getHumanReadableId(),
- artifact));
- }
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Can't save artifact " + getHumanReadableId(), ex);
- }
- return Result.FalseResult;
- }
-
- public void saveSMA(SkynetTransaction transaction) {
- try {
- Set<Artifact> artifacts = new HashSet<Artifact>();
- getSmaArtifactsOneLevel(this, artifacts);
- for (Artifact artifact : artifacts) {
- artifact.persist(transaction);
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Can't save artifact " + getHumanReadableId(), ex);
- }
- }
-
- public void revertSMA() {
- try {
- Set<Artifact> artifacts = new HashSet<Artifact>();
- getSmaArtifactsOneLevel(this, artifacts);
- for (Artifact artifact : artifacts) {
- artifact.reloadAttributesAndRelations();
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Can't revert artifact " + getHumanReadableId(), ex);
- }
- }
-
- @SuppressWarnings("unused")
- public void getSmaArtifactsOneLevel(StateMachineArtifact smaArtifact, Set<Artifact> artifacts) throws OseeCoreException {
- artifacts.add(smaArtifact);
- }
-
- @Override
- public Date getWorldViewEstimatedReleaseDate() throws OseeCoreException {
- Date date = getSoleAttributeValue(AtsAttributeTypes.EstimatedReleaseDate, null);
- Date parentDate = null;
- if (getParentSMA() != null) {
- parentDate = getParentSMA().getWorldViewEstimatedReleaseDate();
- }
- if (date == null && parentDate != null) {
- return parentDate;
- }
- return date;
- }
-
- @Override
- public Date getWorldViewEstimatedCompletionDate() throws OseeCoreException {
- Date date = getSoleAttributeValue(AtsAttributeTypes.EstimatedCompletionDate, null);
- if (date != null) {
- return date;
- }
- if (getParentSMA() != null) {
- Date parentDate = getParentSMA().getWorldViewEstimatedCompletionDate();
- if (parentDate != null) {
- return parentDate;
- }
- }
- date = getWorldViewEstimatedReleaseDate();
- if (date != null) {
- return date;
- }
- return null;
- }
-
- @Override
- public String getWorldViewEstimatedReleaseDateStr() throws OseeCoreException {
- if (getWorldViewEstimatedReleaseDate() == null) {
- return "";
- }
- return new XDate(getWorldViewEstimatedReleaseDate()).getMMDDYYHHMM();
- }
-
- @Override
- public String getWorldViewEstimatedCompletionDateStr() throws OseeCoreException {
- if (getWorldViewEstimatedCompletionDate() == null) {
- return "";
- }
- return new XDate(getWorldViewEstimatedCompletionDate()).getMMDDYYHHMM();
- }
-
- @Override
- public abstract Date getWorldViewReleaseDate() throws OseeCoreException;
-
- @Override
- public String getWorldViewReleaseDateStr() throws OseeCoreException {
- if (getWorldViewReleaseDate() == null) {
- return "";
- }
- return new XDate(getWorldViewReleaseDate()).getMMDDYYHHMM();
- }
-
- /**
- * Called at the end of a transition just before transaction manager persist. SMAs can override to perform tasks due
- * to transition.
- *
- * @throws Exception
- */
- @SuppressWarnings("unused")
- public void transitioned(WorkPageDefinition fromPage, WorkPageDefinition toPage, Collection<User> toAssignees, boolean persist, SkynetTransaction transaction) throws OseeCoreException {
- // provided for subclass implementation
- }
-
- @Override
- public String getHyperName() {
- return getName();
- }
-
- @Override
- public String getHyperType() {
- try {
- return getArtifactTypeName();
- } catch (Exception ex) {
- return ex.getLocalizedMessage();
- }
- }
-
- @Override
- public String getHyperState() {
- try {
- return getStateMgr().getCurrentStateName();
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- return "";
- }
-
- @Override
- public String getHyperAssignee() {
- try {
- return Artifacts.toString("; ", getStateMgr().getAssignees());
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- return "";
- }
-
- @Override
- public Image getHyperAssigneeImage() throws OseeCoreException {
- return getAssigneeImage();
- }
-
- @Override
- public Artifact getHyperArtifact() {
- return this;
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewDecision() throws OseeCoreException {
- return "";
- }
-
- @Override
- public Artifact getParentAtsArtifact() throws OseeCoreException {
- return getParentSMA();
- }
-
- @Override
- public String getWorldViewValidationRequiredStr() throws OseeCoreException {
- if (isAttributeTypeValid(AtsAttributeTypes.ValidationRequired)) {
- return String.valueOf(getSoleAttributeValue(AtsAttributeTypes.ValidationRequired, false));
- }
- return "";
- }
-
- @SuppressWarnings("unused")
- @Override
- public Result isWorldViewDeadlineAlerting() throws OseeCoreException {
- return Result.FalseResult;
- }
-
- @SuppressWarnings("unused")
- @Override
- public int getWorldViewPercentRework() throws OseeCoreException {
- return 0;
- }
-
- @Override
- public String getWorldViewPercentReworkStr() throws OseeCoreException {
- int reWork = getWorldViewPercentRework();
- if (reWork == 0) {
- return "";
- }
- return String.valueOf(reWork);
- }
-
- public static Set<IArtifactType> getAllSMAType() throws OseeCoreException {
- Set<IArtifactType> artTypeNames = TeamWorkflowExtensions.getInstance().getAllTeamWorkflowArtifactTypes();
- artTypeNames.add(AtsArtifactTypes.Task);
- artTypeNames.add(AtsArtifactTypes.DecisionReview);
- artTypeNames.add(AtsArtifactTypes.PeerToPeerReview);
- return artTypeNames;
- }
-
- public static List<Artifact> getAllSMATypeArtifacts() throws OseeCoreException {
- List<Artifact> result = new ArrayList<Artifact>();
- for (IArtifactType artType : getAllSMAType()) {
- result.addAll(ArtifactQuery.getArtifactListFromType(artType, AtsUtil.getAtsBranch()));
- }
- return result;
- }
-
- public static List<TeamWorkFlowArtifact> getAllTeamWorkflowArtifacts() throws OseeCoreException {
- List<TeamWorkFlowArtifact> result = new ArrayList<TeamWorkFlowArtifact>();
- for (IArtifactType artType : TeamWorkflowExtensions.getInstance().getAllTeamWorkflowArtifactTypes()) {
- List<TeamWorkFlowArtifact> teamArts =
- org.eclipse.osee.framework.jdk.core.util.Collections.castAll(ArtifactQuery.getArtifactListFromType(artType,
- AtsUtil.getAtsBranch()));
- result.addAll(teamArts);
- }
- return result;
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewBranchStatus() throws OseeCoreException {
- return "";
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewReviewAuthor() throws OseeCoreException {
- return "";
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewReviewDecider() throws OseeCoreException {
- return "";
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewReviewModerator() throws OseeCoreException {
- return "";
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewReviewReviewer() throws OseeCoreException {
- return "";
- }
-
- /**
- * Return hours spent working ONLY the SMA stateName (not children SMAs)
- */
- public double getHoursSpentSMAState(String stateName) throws OseeCoreException {
- return getStateMgr().getHoursSpent(stateName);
- }
-
- /**
- * Return hours spent working ONLY on tasks related to stateName
- */
- public double getHoursSpentSMAStateTasks(String stateName) throws OseeCoreException {
- if (!(this instanceof TaskableStateMachineArtifact)) {
- return 0;
- }
- return ((TaskableStateMachineArtifact) this).getHoursSpentFromTasks(stateName);
- }
-
- /**
- * Return hours spent working ONLY on reviews related to stateName
- */
- public double getHoursSpentSMAStateReviews(String stateName) throws OseeCoreException {
- if (isTeamWorkflow()) {
- return ReviewManager.getHoursSpent((TeamWorkFlowArtifact) this, stateName);
- }
- return 0;
- }
-
- /**
- * Return hours spent working on all things (including children SMAs) related to stateName
- */
- public double getHoursSpentSMAStateTotal(String stateName) throws OseeCoreException {
- return getHoursSpentSMAState(stateName) + getHoursSpentSMAStateTasks(stateName) + getHoursSpentSMAStateReviews(stateName);
- }
-
- @Override
- public double getWorldViewHoursSpentStateTotal() throws OseeCoreException {
- return getHoursSpentSMAStateTotal(getStateMgr().getCurrentStateName());
- }
-
- /**
- * Return hours spent working on all things (including children SMAs) for this SMA
- */
- public double getHoursSpentSMATotal() throws OseeCoreException {
- double hours = 0.0;
- for (String stateName : getStateMgr().getVisitedStateNames()) {
- hours += getHoursSpentSMAStateTotal(stateName);
- }
- return hours;
- }
-
- /**
- * Return Percent Complete working ONLY the SMA stateName (not children SMAs)
- */
- public int getPercentCompleteSMAState(String stateName) throws OseeCoreException {
- return getStateMgr().getPercentComplete(stateName);
- }
-
- /**
- * Return Percent Complete ONLY on tasks related to stateName. Total Percent / # Tasks
- */
- public int getPercentCompleteSMAStateTasks(String stateName) throws OseeCoreException {
- if (!(this instanceof TaskableStateMachineArtifact)) {
- return 0;
- }
- return ((TaskableStateMachineArtifact) this).getPercentCompleteFromTasks(stateName);
- }
-
- /**
- * Return Percent Complete ONLY on reviews related to stateName. Total Percent / # Reviews
- */
- public int getPercentCompleteSMAStateReviews(String stateName) throws OseeCoreException {
- if (isTeamWorkflow()) {
- return ReviewManager.getPercentComplete((TeamWorkFlowArtifact) this, stateName);
- }
- return 0;
- }
-
- /**
- * Return Percent Complete on all things (including children SMAs) related to stateName. Total Percent for state,
- * tasks and reviews / 1 + # Tasks + # Reviews
- */
- public int getPercentCompleteSMAStateTotal(String stateName) throws OseeCoreException {
- return getStateMetricsData(stateName).getResultingPercent();
- }
-
- /**
- * Return Percent Complete on all things (including children SMAs) for this SMA<br>
- * <br>
- * percent = all state's percents / number of states (minus completed/cancelled)
- */
- public int getPercentCompleteSMATotal() throws OseeCoreException {
- if (isCancelledOrCompleted()) {
- return 100;
- }
- Map<String, Double> stateToWeightMap = getStatePercentCompleteWeight();
- if (stateToWeightMap.size() > 0) {
- // Calculate total percent using configured weighting
- int percent = 0;
- for (String stateName : getWorkFlowDefinition().getPageNames()) {
- if (!stateName.equals(DefaultTeamState.Completed.name()) && !stateName.equals(DefaultTeamState.Cancelled.name())) {
- Double weight = stateToWeightMap.get(stateName);
- if (weight == null) {
- weight = 0.0;
- }
- percent += weight * getPercentCompleteSMAStateTotal(stateName);
- }
- }
- return percent;
- } else {
- int percent = 0;
- int numStates = 0;
- for (String stateName : getWorkFlowDefinition().getPageNames()) {
- if (!stateName.equals(DefaultTeamState.Completed.name()) && !stateName.equals(DefaultTeamState.Cancelled.name())) {
- percent += getPercentCompleteSMAStateTotal(stateName);
- numStates++;
- }
- }
- if (numStates == 0) {
- return 0;
- }
- return percent / numStates;
- }
- }
-
- // Cache stateToWeight mapping
- private Map<String, Double> stateToWeight = null;
-
- public Map<String, Double> getStatePercentCompleteWeight() throws OseeCoreException {
- if (stateToWeight == null) {
- stateToWeight = new HashMap<String, Double>();
- Collection<WorkRuleDefinition> workRuleDefs = getWorkRulesStartsWith(AtsStatePercentCompleteWeightRule.ID);
- // Log error if multiple of same rule found, but keep going
- if (workRuleDefs.size() > 1) {
- OseeLog.log(
- AtsPlugin.class,
- Level.SEVERE,
- "Team Definition has multiple rules of type " + AtsStatePercentCompleteWeightRule.ID + ". Only 1 allowed. Defaulting to first found.");
- }
- if (workRuleDefs.size() == 1) {
- stateToWeight = AtsStatePercentCompleteWeightRule.getStateWeightMap(workRuleDefs.iterator().next());
- }
- }
- return stateToWeight;
- }
-
- private StateMetricsData getStateMetricsData(String stateName) throws OseeCoreException {
- // Add percent and bump objects 1 for state percent
- int percent = getPercentCompleteSMAState(stateName);
- int numObjects = 1; // the state itself is one object
-
- // Add percent for each task and bump objects for each task
- if (this instanceof TaskableStateMachineArtifact) {
- Collection<TaskArtifact> tasks = ((TaskableStateMachineArtifact) this).getTaskArtifacts(stateName);
- for (TaskArtifact taskArt : tasks) {
- percent += taskArt.getPercentCompleteSMATotal();
- }
- numObjects += tasks.size();
- }
-
- // Add percent for each review and bump objects for each review
- if (isTeamWorkflow()) {
- Collection<ReviewSMArtifact> reviews = ReviewManager.getReviews((TeamWorkFlowArtifact) this, stateName);
- for (ReviewSMArtifact reviewArt : reviews) {
- percent += reviewArt.getPercentCompleteSMATotal();
- }
- numObjects += reviews.size();
- }
-
- return new StateMetricsData(percent, numObjects);
- }
-
- private static class StateMetricsData {
- public int numObjects = 0;
- public int percent = 0;
-
- public StateMetricsData(int percent, int numObjects) {
- this.numObjects = numObjects;
- this.percent = percent;
- }
-
- public int getResultingPercent() {
- return percent / numObjects;
- }
-
- @Override
- public String toString() {
- return "Percent: " + getResultingPercent() + " NumObjs: " + numObjects + " Total Percent: " + percent;
- }
- }
-
- @Override
- public double getWorldViewHoursSpentState() throws OseeCoreException {
- return getHoursSpentSMAState(getStateMgr().getCurrentStateName());
- }
-
- @Override
- public double getWorldViewHoursSpentStateReview() throws OseeCoreException {
- return getHoursSpentSMAStateReviews(getStateMgr().getCurrentStateName());
- }
-
- @Override
- public double getWorldViewHoursSpentStateTask() throws OseeCoreException {
- return getHoursSpentSMAStateTasks(getStateMgr().getCurrentStateName());
- }
-
- @Override
- public double getWorldViewHoursSpentTotal() throws OseeCoreException {
- return getHoursSpentSMATotal();
- }
-
- @Override
- public int getWorldViewPercentCompleteState() throws OseeCoreException {
- return getPercentCompleteSMAState(getStateMgr().getCurrentStateName());
- }
-
- @Override
- public int getWorldViewPercentCompleteStateReview() throws OseeCoreException {
- return getPercentCompleteSMAStateReviews(getStateMgr().getCurrentStateName());
- }
-
- @Override
- public int getWorldViewPercentCompleteStateTask() throws OseeCoreException {
- return getPercentCompleteSMAStateTasks(getStateMgr().getCurrentStateName());
- }
-
- @Override
- public int getWorldViewPercentCompleteTotal() throws OseeCoreException {
- return getPercentCompleteSMATotal();
- }
-
- public Set<IRelationEnumeration> getAtsWorldRelations() {
- return atsWorldRelations;
- }
-
- public String getWorldViewLastUpdated() throws OseeCoreException {
- return XDate.getDateStr(getLastModified(), XDate.MMDDYYHHMM);
- }
-
- @Override
- public String getWorldViewLastStatused() throws OseeCoreException {
- return XDate.getDateStr(getLog().getLastStatusedDate(), XDate.MMDDYYHHMM);
- }
-
- @SuppressWarnings("unused")
- public String getWorldViewSWEnhancement() throws OseeCoreException {
- return "";
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewNumberOfReviewIssueDefects() throws OseeCoreException {
- return "";
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewNumberOfReviewMajorDefects() throws OseeCoreException {
- return "";
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewNumberOfReviewMinorDefects() throws OseeCoreException {
- return "";
- }
-
- @Override
- public String getWorldViewActionsIntiatingWorkflow() throws OseeCoreException {
- return getParentActionArtifact().getWorldViewActionsIntiatingWorkflow();
- }
-
- @Override
- public String getWorldViewDaysInCurrentState() throws OseeCoreException {
- double timeInCurrState = getStateMgr().getTimeInState();
- if (timeInCurrState == 0) {
- return "0.0";
- }
- return AtsUtil.doubleToI18nString(timeInCurrState / XDate.MILLISECONDS_IN_A_DAY);
- }
-
- @Override
- public String getWorldViewParentState() throws OseeCoreException {
- if (getParentSMA() != null) {
- return getParentSMA().getStateMgr().getCurrentStateName();
- }
- return "";
- }
-
- @Override
- public String getGroupExplorerName() throws OseeCoreException {
- return String.format("[%s] %s", getStateMgr().getCurrentStateName(), getName());
- }
-
- @Override
- public String getWorldViewOriginatingWorkflowStr() throws OseeCoreException {
- return getParentActionArtifact().getWorldViewOriginatingWorkflowStr();
- }
-
- @Override
- public Collection<TeamWorkFlowArtifact> getWorldViewOriginatingWorkflows() throws OseeCoreException {
- return getParentActionArtifact().getWorldViewOriginatingWorkflows();
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewNumberOfTasksRemaining() throws OseeCoreException {
- return "";
- }
-
- public void closeEditors(boolean save) {
- SMAEditor.close(java.util.Collections.singleton(this), save);
- }
-
- public ATSLog getLog() {
- return atsLog;
- }
-
- public ATSNote getNotes() {
- return atsNote;
- }
-
- public Result getUserInputNeeded() {
- return Result.FalseResult;
- }
-
- public WorkPageDefinition getWorkPageDefinition() throws OseeCoreException {
- if (getStateMgr().getCurrentStateName() == null) {
- return null;
- }
- return getWorkFlowDefinition().getWorkPageDefinitionByName(getStateMgr().getCurrentStateName());
- }
-
- public WorkPageDefinition getWorkPageDefinitionByName(String name) throws OseeCoreException {
- return getWorkFlowDefinition().getWorkPageDefinitionByName(name);
- }
-
- public WorkPageDefinition getWorkPageDefinitionById(String id) throws OseeCoreException {
- return getWorkFlowDefinition().getWorkPageDefinitionById(id);
- }
-
- public boolean isHistoricalVersion() {
- return isHistorical();
- }
-
- public List<WorkPageDefinition> getToWorkPages() throws OseeCoreException {
- return getWorkFlowDefinition().getToPages(getWorkPageDefinition());
- }
-
- public List<WorkPageDefinition> getReturnPages() throws OseeCoreException {
- return getWorkFlowDefinition().getReturnPages(getWorkPageDefinition());
- }
-
- public boolean isReturnPage(WorkPageDefinition workPageDefinition) throws OseeCoreException {
- return getWorkFlowDefinition().isReturnPage(getWorkPageDefinition(), workPageDefinition);
- }
-
- public boolean isAccessControlWrite() throws OseeCoreException {
- return AccessControlManager.hasPermission(this, PermissionEnum.WRITE);
- }
-
- public User getOriginator() throws OseeCoreException {
- return atsLog.getOriginator();
- }
-
- public void setOriginator(User user) throws OseeCoreException {
- atsLog.addLog(LogType.Originated, "", "Changed by " + UserManager.getUser().getName(), user);
- }
-
- /**
- * @return true if this is a TeamWorkflow and it uses versions
- * @throws OseeStateException
- */
- public boolean isTeamUsesVersions() {
- if (!isTeamWorkflow()) {
- return false;
- }
- try {
- return ((TeamWorkFlowArtifact) this).getTeamDefinition().isTeamUsesVersions();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return false;
- }
- }
-
- /**
- * Return true if sma is TeamWorkflowArtifact or review of a team workflow and it's TeamDefinitionArtifact has rule
- * set
- */
- public boolean teamDefHasWorkRule(String ruleId) throws OseeCoreException {
- TeamWorkFlowArtifact teamArt = null;
- if (isTeamWorkflow()) {
- teamArt = (TeamWorkFlowArtifact) this;
- }
- if (this instanceof ReviewSMArtifact) {
- teamArt = ((ReviewSMArtifact) this).getParentTeamWorkflow();
- }
- if (teamArt == null) {
- return false;
- }
- try {
- return teamArt.getTeamDefinition().hasWorkRule(ruleId);
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- return false;
- }
- }
-
- public boolean workPageHasWorkRule(String ruleId) throws OseeCoreException {
- return getWorkPageDefinition().hasWorkRule(AtsWorkDefinitions.RuleWorkItemId.atsRequireTargetedVersion.name());
- }
-
- public Collection<WorkRuleDefinition> getWorkRulesStartsWith(String ruleId) throws OseeCoreException {
- Set<WorkRuleDefinition> workRules = new HashSet<WorkRuleDefinition>();
- if (!Strings.isValid(ruleId)) {
- return workRules;
- }
- if (isTeamWorkflow()) {
- // Get rules from team definition
- workRules.addAll(((TeamWorkFlowArtifact) this).getTeamDefinition().getWorkRulesStartsWith(ruleId));
- }
- // Get work rules from workflow
- WorkFlowDefinition workFlowDefinition = getWorkFlowDefinition();
- if (workFlowDefinition != null) {
- // Get rules from workflow definitions
- workRules.addAll(getWorkFlowDefinition().getWorkRulesStartsWith(ruleId));
- }
- // Add work rules from page
- for (WorkItemDefinition wid : getWorkPageDefinition().getWorkItems(false)) {
- if (!wid.getId().equals("") && wid.getId().startsWith(ruleId)) {
- workRules.add((WorkRuleDefinition) wid);
- }
- }
- return workRules;
- }
-
- /**
- * @return true if this is a TeamWorkflow and the version it's been targeted for has been released
- */
- public boolean isReleased() {
- try {
- VersionArtifact verArt = getTargetedForVersion();
- if (verArt != null) {
- return verArt.isReleased();
- }
- } catch (Exception ex) {
- // Do Nothing
- }
- return false;
- }
-
- public boolean isVersionLocked() {
- try {
- VersionArtifact verArt = getTargetedForVersion();
- if (verArt != null) {
- return verArt.isVersionLocked();
- }
- } catch (Exception ex) {
- // Do Nothing
- }
- return false;
- }
-
- public VersionArtifact getTargetedForVersion() throws OseeCoreException {
- return getWorldViewTargetedVersion();
- }
-
- public boolean isCompleted() throws OseeCoreException {
- return stateMgr.getCurrentStateName().equals(DefaultTeamState.Completed.name());
- }
-
- public boolean isCancelled() throws OseeCoreException {
- return stateMgr.getCurrentStateName().equals(DefaultTeamState.Cancelled.name());
- }
-
- public boolean isCancelledOrCompleted() throws OseeCoreException {
- return isCompleted() || isCancelled();
- }
-
- public boolean isCurrentState(String stateName) throws OseeCoreException {
- return stateName.equals(stateMgr.getCurrentStateName());
- }
-
- public void setTransitionAssignees(Collection<User> assignees) throws OseeCoreException {
- if (assignees.contains(UserManager.getUser(SystemUser.OseeSystem)) || assignees.contains(UserManager.getUser(SystemUser.Guest))) {
- throw new OseeArgumentException("Can not assign workflow to OseeSystem or Guest");
- }
- if (assignees.size() > 1 && assignees.contains(UserManager.getUser(SystemUser.UnAssigned))) {
- throw new OseeArgumentException("Can not assign to user and UnAssigned");
- }
- transitionAssignees = assignees;
- }
-
- public boolean isAssigneeMe() throws OseeCoreException {
- return stateMgr.getAssignees().contains(UserManager.getUser());
- }
-
- public Collection<User> getTransitionAssignees() throws OseeCoreException {
- if (transitionAssignees != null) {
- if (transitionAssignees.size() > 0 && transitionAssignees.contains(UserManager.getUser(SystemUser.UnAssigned))) {
- transitionAssignees.remove(UserManager.getUser(SystemUser.UnAssigned));
- }
- if (transitionAssignees.size() > 0) {
- return transitionAssignees;
- }
- }
- return stateMgr.getAssignees();
- }
-
- public String getTransitionAssigneesStr() throws OseeCoreException {
- StringBuffer sb = new StringBuffer();
- for (User u : getTransitionAssignees()) {
- sb.append(u.getName() + SEPERATOR);
- }
- return sb.toString().replaceFirst(SEPERATOR + "$", "");
- }
-
- public Result transitionToCancelled(String reason, SkynetTransaction transaction, TransitionOption... transitionOption) {
- Result result =
- transition(DefaultTeamState.Cancelled.name(), Arrays.asList(new User[] {}), reason, transaction,
- transitionOption);
- return result;
- }
-
- public Result transitionToCompleted(String reason, SkynetTransaction transaction, TransitionOption... transitionOption) {
- Result result =
- transition(DefaultTeamState.Completed.name(), Arrays.asList(new User[] {}), reason, transaction,
- transitionOption);
- return result;
- }
-
- public Result isTransitionValid(final String toStateName, final Collection<User> toAssignees, TransitionOption... transitionOption) throws OseeCoreException {
- boolean overrideTransitionCheck =
- org.eclipse.osee.framework.jdk.core.util.Collections.getAggregate(transitionOption).contains(
- TransitionOption.OverrideTransitionValidityCheck);
- boolean overrideAssigneeCheck =
- org.eclipse.osee.framework.jdk.core.util.Collections.getAggregate(transitionOption).contains(
- TransitionOption.OverrideAssigneeCheck);
- // Validate assignees
- if (!overrideAssigneeCheck && (getStateMgr().getAssignees().contains(UserManager.getUser(SystemUser.OseeSystem)) || getStateMgr().getAssignees().contains(
- UserManager.getUser(SystemUser.Guest)) || getStateMgr().getAssignees().contains(
- UserManager.getUser(SystemUser.UnAssigned)))) {
- return new Result("Can not transition with \"Guest\", \"UnAssigned\" or \"OseeSystem\" user as assignee.");
- }
-
- // Validate toState name
- final WorkPageDefinition fromWorkPageDefinition = getWorkPageDefinition();
- final WorkPageDefinition toWorkPageDefinition = getWorkPageDefinitionByName(toStateName);
- if (toWorkPageDefinition == null) {
- return new Result("Invalid toState \"" + toStateName + "\"");
- }
-
- // Validate transition from fromPage to toPage
- if (!overrideTransitionCheck && !getWorkFlowDefinition().getToPages(fromWorkPageDefinition).contains(
- toWorkPageDefinition)) {
- String errStr =
- "Not configured to transition to \"" + toStateName + "\" from \"" + fromWorkPageDefinition.getPageName() + "\"";
- OseeLog.log(AtsPlugin.class, Level.SEVERE, errStr);
- return new Result(errStr);
- }
- // Don't transition with existing working branch
- if (toStateName.equals(DefaultTeamState.Cancelled.name()) && isTeamWorkflow() && ((TeamWorkFlowArtifact) this).getBranchMgr().isWorkingBranchInWork()) {
- return new Result("Working Branch exists. Please delete working branch before cancelling.");
- }
-
- // Don't transition with uncommitted branch if this is a commit state
- if (AtsWorkDefinitions.isAllowCommitBranch(getWorkPageDefinition()) && isTeamWorkflow() && ((TeamWorkFlowArtifact) this).getBranchMgr().isWorkingBranchInWork()) {
- return new Result("Working Branch exists. Please commit or delete working branch before transition.");
- }
-
- // Check extension points for valid transition
- List<IAtsStateItem> atsStateItems = stateItems.getStateItems(fromWorkPageDefinition.getId());
- for (IAtsStateItem item : atsStateItems) {
- Result result = item.transitioning(this, fromWorkPageDefinition.getPageName(), toStateName, toAssignees);
- if (result.isFalse()) {
- return result;
- }
- }
- for (IAtsStateItem item : atsStateItems) {
- Result result = item.transitioning(this, fromWorkPageDefinition.getPageName(), toStateName, toAssignees);
- if (result.isFalse()) {
- return result;
- }
- }
- return Result.TrueResult;
- }
-
- public Result transition(String toStateName, User toAssignee, SkynetTransaction transaction, TransitionOption... transitionOption) {
- List<User> users = new ArrayList<User>();
- if (toAssignee != null && !toStateName.equals(DefaultTeamState.Completed.name()) && !toStateName.equals(DefaultTeamState.Cancelled.name())) {
- users.add(toAssignee);
- }
- return transition(toStateName, users, transaction, transitionOption);
- }
-
- public boolean isTargetedVersionable() throws OseeCoreException {
- if (!isTeamWorkflow()) {
- return false;
- }
- return ((TeamWorkFlowArtifact) this).getTeamDefinition().getTeamDefinitionHoldingVersions() != null && ((TeamWorkFlowArtifact) this).getTeamDefinition().getTeamDefinitionHoldingVersions().isTeamUsesVersions();
- }
-
- public Result transition(String toStateName, Collection<User> toAssignees, SkynetTransaction transaction, TransitionOption... transitionOption) {
- return transition(toStateName, toAssignees, null, transaction, transitionOption);
- }
-
- private Result transition(final String toStateName, final Collection<User> toAssignees, final String completeOrCancelReason, SkynetTransaction transaction, TransitionOption... transitionOption) {
- try {
- final boolean persist =
- org.eclipse.osee.framework.jdk.core.util.Collections.getAggregate(transitionOption).contains(
- TransitionOption.Persist);
-
- Result result = isTransitionValid(toStateName, toAssignees, transitionOption);
- if (result.isFalse()) {
- return result;
- }
-
- final WorkPageDefinition fromWorkPageDefinition = getWorkPageDefinition();
- final WorkPageDefinition toWorkPageDefinition = getWorkPageDefinitionByName(toStateName);
-
- transitionHelper(toAssignees, persist, fromWorkPageDefinition, toWorkPageDefinition, toStateName,
- completeOrCancelReason, transaction);
- if (persist) {
- OseeNotificationManager.getInstance().sendNotifications();
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- return new Result("Transaction failed " + ex.getLocalizedMessage());
- }
- return Result.TrueResult;
- }
-
- private void transitionHelper(Collection<User> toAssignees, boolean persist, WorkPageDefinition fromPage, WorkPageDefinition toPage, String toStateName, String completeOrCancelReason, SkynetTransaction transaction) throws OseeCoreException {
- // Log transition
- if (toPage.isCancelledPage()) {
- atsLog.addLog(LogType.StateCancelled, stateMgr.getCurrentStateName(), completeOrCancelReason);
- } else {
- atsLog.addLog(LogType.StateComplete, stateMgr.getCurrentStateName(),
- (completeOrCancelReason != null ? completeOrCancelReason : ""));
- }
- atsLog.addLog(LogType.StateEntered, toStateName, "");
-
- stateMgr.transitionHelper(toAssignees, persist, fromPage, toPage, toStateName, completeOrCancelReason);
-
- if (isValidationRequired() && isTeamWorkflow()) {
- ReviewManager.createValidateReview((TeamWorkFlowArtifact) this, false, transaction);
- }
-
- AtsNotifyUsers.getInstance().notify(this, AtsNotifyUsers.NotifyType.Subscribed,
- AtsNotifyUsers.NotifyType.Completed, AtsNotifyUsers.NotifyType.Completed);
-
- // Persist
- if (persist) {
- persist(transaction);
- }
-
- transitioned(fromPage, toPage, toAssignees, true, transaction);
-
- // Notify extension points of transition
- for (IAtsStateItem item : stateItems.getStateItems(fromPage.getId())) {
- item.transitioned(this, fromPage.getPageName(), toStateName, toAssignees, transaction);
- }
- for (IAtsStateItem item : stateItems.getStateItems(toPage.getId())) {
- item.transitioned(this, fromPage.getPageName(), toStateName, toAssignees, transaction);
- }
- }
-
- public SMAEditor getEditor() {
- return editor;
- }
-
- public void setEditor(SMAEditor editor) {
- this.editor = editor;
- }
-
- public AtsStateItems getStateItems() {
- return stateItems;
- }
-
- public boolean isInTransition() {
- return inTransition;
- }
-
- public void setInTransition(boolean inTransition) {
- this.inTransition = inTransition;
- }
-
- public DeadlineManager getDeadlineMgr() {
- return deadlineMgr;
- }
-
- public StateManager getStateMgr() {
- return stateMgr;
- }
-
- public boolean isTeamWorkflow() {
- return this instanceof TeamWorkFlowArtifact;
- }
-
- public boolean isTask() {
- return this instanceof TaskArtifact;
- }
-
- @Override
- public String getWorldViewGoalOrder() throws OseeCoreException {
- return GoalArtifact.getGoalOrder(this);
- }
-
- public AtsWorkPage getCurrentAtsWorkPage() throws OseeCoreException {
- for (AtsWorkPage atsWorkPage : getAtsWorkPages()) {
- if (isCurrentState(atsWorkPage.getName())) {
- return atsWorkPage;
- }
- }
- return null;
- }
-
- public List<AtsWorkPage> getAtsWorkPages() throws OseeCoreException {
- List<AtsWorkPage> atsWorkPages = new ArrayList<AtsWorkPage>();
- for (WorkPageDefinition workPageDefinition : getWorkFlowDefinition().getPagesOrdered()) {
- try {
- AtsWorkPage atsWorkPage =
- new AtsWorkPage(getWorkFlowDefinition(), workPageDefinition, null,
- ATSXWidgetOptionResolver.getInstance());
- atsWorkPages.add(atsWorkPage);
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- return atsWorkPages;
- }
-
- /**
- * Assigned or computed Id that will show at the top of the editor
- */
- @SuppressWarnings("unused")
- public String getPcrId() throws OseeCoreException {
- return "";
- }
-
- public Map<String, String> getSMADetails() throws OseeCoreException {
- Map<String, String> details = Artifacts.getDetailsKeyValues(this);
- details.put("Workflow Definition", getWorkFlowDefinition().getName());
- if (getParentActionArtifact() != null) {
- details.put("Action Id", getParentActionArtifact().getHumanReadableId());
- }
- if (!(this instanceof TeamWorkFlowArtifact) && getParentTeamWorkflow() != null) {
- details.put("Parent Team Workflow Id", getParentTeamWorkflow().getHumanReadableId());
- }
- if (this.isOfType(AtsArtifactTypes.TeamWorkflow)) {
- String message = null;
- CmAccessControl accessControl = getAccessControl();
- if (accessControl != null) {
- Collection<? extends AccessContextId> ids = accessControl.getContextId(UserManager.getUser(), this);
- message = ids.toString();
- } else {
- message = "AtsCmAccessControlService not started";
- }
- details.put("Access Context Id", message);
- }
- return details;
- }
-
- protected void addPriviledgedUsersUpTeamDefinitionTree(TeamDefinitionArtifact tda, Set<User> users) throws OseeCoreException {
- users.addAll(tda.getLeads());
- users.addAll(tda.getPrivilegedMembers());
-
- // Walk up tree to get other editors
- if (tda.getParent() != null && tda.getParent() instanceof TeamDefinitionArtifact) {
- addPriviledgedUsersUpTeamDefinitionTree((TeamDefinitionArtifact) tda.getParent(), users);
- }
- }
-
- @Override
- public CmAccessControl getAccessControl() {
- return AtsPlugin.getInstance().getCmService();
- }
-
-}
+/******************************************************************************* + * 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.artifact; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.logging.Level; +import org.eclipse.nebula.widgets.xviewer.XViewerCells; +import org.eclipse.osee.ats.artifact.ATSLog.LogType; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact.DefaultTeamState; +import org.eclipse.osee.ats.editor.SMAEditor; +import org.eclipse.osee.ats.editor.stateItem.AtsStateItems; +import org.eclipse.osee.ats.editor.stateItem.IAtsStateItem; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.ats.util.AtsNotifyUsers; +import org.eclipse.osee.ats.util.AtsRelationTypes; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.ats.util.DeadlineManager; +import org.eclipse.osee.ats.util.Overview; +import org.eclipse.osee.ats.util.Overview.PreviewStyle; +import org.eclipse.osee.ats.util.StateManager; +import org.eclipse.osee.ats.util.widgets.ReviewManager; +import org.eclipse.osee.ats.workflow.ATSXWidgetOptionResolver; +import org.eclipse.osee.ats.workflow.AtsWorkPage; +import org.eclipse.osee.ats.workflow.item.AtsStatePercentCompleteWeightRule; +import org.eclipse.osee.ats.workflow.item.AtsWorkDefinitions; +import org.eclipse.osee.ats.world.IWorldViewArtifact; +import org.eclipse.osee.framework.access.AccessControlManager; +import org.eclipse.osee.framework.core.data.AccessContextId; +import org.eclipse.osee.framework.core.data.IArtifactType; +import org.eclipse.osee.framework.core.data.SystemUser; +import org.eclipse.osee.framework.core.enums.CoreRelationTypes; +import org.eclipse.osee.framework.core.enums.IRelationEnumeration; +import org.eclipse.osee.framework.core.enums.PermissionEnum; +import org.eclipse.osee.framework.core.exception.OseeArgumentException; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeDataStoreException; +import org.eclipse.osee.framework.core.exception.OseeStateException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.type.ArtifactType; +import org.eclipse.osee.framework.core.services.CmAccessControl; +import org.eclipse.osee.framework.core.services.HasCmAccessControl; +import org.eclipse.osee.framework.jdk.core.util.Lib; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.UserManager; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory; +import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; +import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction; +import org.eclipse.osee.framework.skynet.core.utility.Artifacts; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.skynet.FrameworkArtifactImageProvider; +import org.eclipse.osee.framework.ui.skynet.group.IGroupExplorerProvider; +import org.eclipse.osee.framework.ui.skynet.notify.OseeNotificationManager; +import org.eclipse.osee.framework.ui.skynet.util.ChangeType; +import org.eclipse.osee.framework.ui.skynet.util.email.EmailGroup; +import org.eclipse.osee.framework.ui.skynet.widgets.XDate; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkFlowDefinition; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkFlowDefinitionFactory; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkItemDefinition; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinition; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkRuleDefinition; +import org.eclipse.swt.graphics.Image; + +/** + * @author Donald G. Dunne + */ +public abstract class StateMachineArtifact extends ATSArtifact implements HasCmAccessControl, IGroupExplorerProvider, IWorldViewArtifact, ISubscribableArtifact, IFavoriteableArtifact { + + private final Set<IRelationEnumeration> atsWorldRelations = new HashSet<IRelationEnumeration>(); + private Collection<User> preSaveStateAssignees; + private User preSaveOriginator; + public static double DEFAULT_HOURS_PER_WORK_DAY = 8; + protected WorkFlowDefinition workFlowDefinition; + protected Artifact parent; + protected StateMachineArtifact parentSma; + protected TeamWorkFlowArtifact parentTeamArt; + protected ActionArtifact parentAction; + private Collection<User> transitionAssignees; + private static String SEPERATOR = "; "; + private StateManager stateMgr; + private DeadlineManager deadlineMgr; + private SMAEditor editor; + private ATSLog atsLog; + private ATSNote atsNote; + private static final AtsStateItems stateItems = new AtsStateItems(); + private boolean inTransition = false; + public static enum TransitionOption { + None, + Persist, + // Override check whether workflow allows transition to state + OverrideTransitionValidityCheck, + // Allows transition to occur with UnAssigned, OseeSystem or Guest + OverrideAssigneeCheck + }; + + public StateMachineArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException { + super(parentFactory, guid, humanReadableId, branch, artifactType); + } + + @Override + public void onBirth() throws OseeCoreException { + super.onBirth(); + setSoleAttributeValue(AtsAttributeTypes.CurrentState, ""); + } + + @Override + public void onInitializationComplete() throws OseeCoreException { + super.onInitializationComplete(); + initializeSMA(); + } + + @Override + public void reloadAttributesAndRelations() throws OseeCoreException { + super.reloadAttributesAndRelations(); + initializeSMA(); + } + + @SuppressWarnings("unused") + protected void initializeSMA() throws OseeCoreException { + initalizePreSaveCache(); + } + + public void initalizePreSaveCache() { + try { + deadlineMgr = new DeadlineManager(this); + stateMgr = new StateManager(this); + atsLog = new ATSLog(this); + atsNote = new ATSNote(this); + preSaveStateAssignees = getStateMgr().getAssignees(); + if (getOriginator() == null) { + preSaveOriginator = UserManager.getUser(); + } else { + preSaveOriginator = getOriginator(); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + public boolean hasAtsWorldChildren() throws OseeCoreException { + for (IRelationEnumeration iRelationEnumeration : atsWorldRelations) { + if (getRelatedArtifactsCount(iRelationEnumeration) > 0) { + return true; + } + } + return false; + } + + public String getHelpContext() { + return "atsWorkflowEditorWorkflowTab"; + } + + public String getArtifactSuperTypeName() { + return getArtifactTypeName(); + } + + @SuppressWarnings("unused") + @Override + public Date getWorldViewDeadlineDate() throws OseeCoreException { + return null; + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewDeadlineDateStr() throws OseeCoreException { + return ""; + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewDescription() throws OseeCoreException { + return ""; + } + + @Override + public String getWorldViewImplementer() throws OseeCoreException { + return Artifacts.toString("; ", getImplementers()); + } + + public Collection<User> getImplementersByState(String stateName) throws OseeCoreException { + if (isCancelled()) { + return Arrays.asList(getLog().getCancelledLogItem().getUser()); + } + Collection<User> users = new HashSet<User>(getStateMgr().getAssignees(stateName)); + LogItem item = getLog().getCompletedLogItem(); + if (item != null) { + users.add(item.getUser()); + } + return users; + } + + @SuppressWarnings("unused") + public Collection<User> getImplementers() throws OseeCoreException { + return Collections.emptyList(); + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewTeam() throws OseeCoreException { + return null; + } + + @Override + public String getWorldViewGroups() throws OseeCoreException { + return Artifacts.toString("; ", getRelatedArtifacts(CoreRelationTypes.Universal_Grouping__Group)); + } + + @Override + public String getWorldViewGoals() throws OseeCoreException { + return Artifacts.toString("; ", getRelatedArtifacts(AtsRelationTypes.Goal_Goal)); + } + + @SuppressWarnings("unused") + @Override + public double getWorldViewWeeklyBenefit() throws OseeCoreException { + return 0; + } + + @Override + public void onAttributePersist(SkynetTransaction transaction) { + // Since multiple ways exist to change the assignees, notification is performed on the persist + if (isDeleted()) { + return; + } + try { + notifyNewAssigneesAndReset(); + notifyOriginatorAndReset(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + /** + * Override to apply different algorithm to current section expansion. + * + * @return true if section should be expanded + * @throws OseeCoreException + */ + public boolean isCurrentSectionExpanded(String stateName) throws OseeCoreException { + return getStateMgr().getCurrentStateName().equals(stateName); + } + + public void notifyNewAssigneesAndReset() throws OseeCoreException { + if (preSaveStateAssignees == null) { + preSaveStateAssignees = getStateMgr().getAssignees(); + return; + } + Set<User> newAssignees = new HashSet<User>(); + for (User user : getStateMgr().getAssignees()) { + if (!preSaveStateAssignees.contains(user)) { + newAssignees.add(user); + } + } + preSaveStateAssignees = getStateMgr().getAssignees(); + if (newAssignees.isEmpty()) { + return; + } + try { + // These will be processed upon save + AtsNotifyUsers.getInstance().notify(this, newAssignees, AtsNotifyUsers.NotifyType.Assigned); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + + public void notifyOriginatorAndReset() throws OseeCoreException { + if (preSaveOriginator != null && getOriginator() != null && !getOriginator().equals(preSaveOriginator)) { + AtsNotifyUsers.getInstance().notify(this, AtsNotifyUsers.NotifyType.Originator); + } + preSaveOriginator = getOriginator(); + } + + @SuppressWarnings("unused") + public boolean isValidationRequired() throws OseeCoreException { + return false; + } + + public abstract Set<User> getPrivilegedUsers() throws OseeCoreException; + + @Override + public String getDescription() { + return ""; + } + + public ArrayList<EmailGroup> getEmailableGroups() throws OseeCoreException { + ArrayList<EmailGroup> groupNames = new ArrayList<EmailGroup>(); + ArrayList<String> emails = new ArrayList<String>(); + emails.add(getOriginator().getEmail()); + groupNames.add(new EmailGroup("Originator", emails)); + if (getStateMgr().getAssignees().size() > 0) { + emails = new ArrayList<String>(); + for (User u : getStateMgr().getAssignees()) { + emails.add(u.getEmail()); + } + groupNames.add(new EmailGroup("Assignees", emails)); + } + return groupNames; + } + + @SuppressWarnings("unused") + public StateMachineArtifact getParentSMA() throws OseeCoreException { + return parentSma; + } + + @SuppressWarnings("unused") + public ActionArtifact getParentActionArtifact() throws OseeCoreException { + return parentAction; + } + + @SuppressWarnings("unused") + public TeamWorkFlowArtifact getParentTeamWorkflow() throws OseeCoreException { + return parentTeamArt; + } + + public String getPreviewHtml() throws OseeCoreException { + return getPreviewHtml(PreviewStyle.NONE); + } + + public String getPreviewHtml(PreviewStyle... styles) throws OseeCoreException { + Overview o = new Overview(); + o.addHeader(this, styles); + o.addFooter(this, styles); + return o.getPage(); + } + + public boolean isUnCancellable() { + try { + LogItem item = getLog().getStateEvent(LogType.StateCancelled); + if (item == null) { + throw new OseeArgumentException("No Cancelled Event"); + } + for (WorkPageDefinition toWorkPageDefinition : getWorkFlowDefinition().getToPages(getWorkPageDefinition())) { + if (toWorkPageDefinition.getPageName().equals(item.getState())) { + return true; + } + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + return false; + } + + public boolean isTaskable() throws OseeCoreException { + if (isCompleted() || isCancelled()) { + return false; + } + return true; + } + + public boolean showTaskTab() throws OseeCoreException { + return isTaskable(); + } + + public String getEditorTitle() throws OseeCoreException { + return getWorldViewType() + ": " + getName(); + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewActionableItems() throws OseeCoreException { + return ""; + } + + /** + * Registers relation as part of the parent/child hierarchy in ATS World + */ + public void registerAtsWorldRelation(AtsRelationTypes side) { + atsWorldRelations.add(side); + } + + @Override + public Image getAssigneeImage() throws OseeCoreException { + if (isDeleted()) { + return null; + } + return FrameworkArtifactImageProvider.getUserImage(getStateMgr().getAssignees()); + } + + public WorkFlowDefinition getWorkFlowDefinition() { + if (workFlowDefinition == null) { + try { + workFlowDefinition = WorkFlowDefinitionFactory.getWorkFlowDefinition(this); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + return workFlowDefinition; + } + + @Override + public void addSubscribed(User user, SkynetTransaction transaction) throws OseeCoreException { + if (!getRelatedArtifacts(AtsRelationTypes.SubscribedUser_User).contains(user)) { + addRelation(AtsRelationTypes.SubscribedUser_User, user); + persist(transaction); + } + + } + + @Override + public void removeSubscribed(User user, SkynetTransaction transaction) throws OseeCoreException { + deleteRelation(AtsRelationTypes.SubscribedUser_User, user); + persist(transaction); + } + + @Override + public boolean isSubscribed(User user) throws OseeCoreException { + return getRelatedArtifacts(AtsRelationTypes.SubscribedUser_User).contains(user); + } + + @Override + public ArrayList<User> getSubscribed() throws OseeCoreException { + ArrayList<User> arts = new ArrayList<User>(); + for (Artifact art : getRelatedArtifacts(AtsRelationTypes.SubscribedUser_User)) { + arts.add((User) art); + } + return arts; + } + + @Override + public void addFavorite(User user, SkynetTransaction transaction) throws OseeCoreException { + if (!getRelatedArtifacts(AtsRelationTypes.FavoriteUser_User).contains(user)) { + addRelation(AtsRelationTypes.FavoriteUser_User, user); + persist(transaction); + } + } + + @Override + public void removeFavorite(User user, SkynetTransaction transaction) throws OseeCoreException { + deleteRelation(AtsRelationTypes.FavoriteUser_User, user); + persist(transaction); + } + + @Override + public boolean isFavorite(User user) throws OseeCoreException { + return getRelatedArtifacts(AtsRelationTypes.FavoriteUser_User).contains(user); + } + + @Override + public ArrayList<User> getFavorites() throws OseeCoreException { + ArrayList<User> arts = new ArrayList<User>(); + for (Artifact art : getRelatedArtifacts(AtsRelationTypes.FavoriteUser_User)) { + arts.add((User) art); + } + return arts; + } + + @Override + public boolean amISubscribed() { + try { + return isSubscribed(UserManager.getUser()); + } catch (OseeCoreException ex) { + return false; + } + } + + @Override + public boolean amIFavorite() { + try { + return isFavorite(UserManager.getUser()); + } catch (OseeCoreException ex) { + return false; + } + } + + @Override + public void atsDelete(Set<Artifact> deleteArts, Map<Artifact, Object> allRelated) throws OseeCoreException { + SMAEditor.close(Collections.singleton(this), true); + super.atsDelete(deleteArts, allRelated); + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewType() throws OseeCoreException { + return getArtifactTypeName(); + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewTitle() throws OseeCoreException { + return getName(); + } + + @Override + public String getWorldViewState() throws OseeCoreException { + return getStateMgr().getCurrentStateName(); + } + + public String implementersStr = null; + + @Override + public String getWorldViewActivePoc() throws OseeCoreException { + if (isCancelledOrCompleted()) { + if (implementersStr == null) { + if (getImplementers().size() > 0) { + implementersStr = "(" + Artifacts.toString("; ", getImplementers()) + ")"; + } + } + return implementersStr; + } + return Artifacts.toString("; ", getStateMgr().getAssignees()); + } + + @Override + public String getWorldViewCreatedDateStr() throws OseeCoreException { + if (getWorldViewCreatedDate() == null) { + return XViewerCells.getCellExceptionString("No creation date"); + } + return new XDate(getWorldViewCreatedDate()).getMMDDYYHHMM(); + } + + @Override + public String getWorldViewCompletedDateStr() throws OseeCoreException { + if (isCompleted()) { + if (getWorldViewCompletedDate() == null) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Completed with no date => " + getHumanReadableId()); + return XViewerCells.getCellExceptionString("Completed with no date."); + } + return new XDate(getWorldViewCompletedDate()).getMMDDYYHHMM(); + } + return ""; + } + + @Override + public String getWorldViewCancelledDateStr() throws OseeCoreException { + if (isCancelled()) { + if (getWorldViewCancelledDate() == null) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, "Cancelled with no date => " + getHumanReadableId()); + return XViewerCells.getCellExceptionString("Cancelled with no date."); + } + return new XDate(getWorldViewCancelledDate()).getMMDDYYHHMM(); + } + return ""; + } + + @Override + public Date getWorldViewCreatedDate() throws OseeCoreException { + return getLog().getCreationDate(); + } + + @Override + public String getWorldViewOriginator() throws OseeCoreException { + return getOriginator().getName(); + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewID() throws OseeCoreException { + return getHumanReadableId(); + } + + @Override + public String getWorldViewLegacyPCR() throws OseeCoreException { + if (isAttributeTypeValid(AtsAttributeTypes.LegacyPcrId)) { + return getSoleAttributeValue(AtsAttributeTypes.LegacyPcrId, ""); + } + return ""; + } + + @Override + public Date getWorldViewCompletedDate() throws OseeCoreException { + LogItem item = getLog().getCompletedLogItem(); + if (item != null) { + return item.getDate(); + } + return null; + } + + @Override + public Date getWorldViewCancelledDate() throws OseeCoreException { + LogItem item = getLog().getCancelledLogItem(); + if (item != null) { + return item.getDate(); + } + return null; + } + + @Override + public abstract VersionArtifact getWorldViewTargetedVersion() throws OseeCoreException; + + @SuppressWarnings("unused") + @Override + public ChangeType getWorldViewChangeType() throws OseeCoreException { + return ChangeType.None; + } + + @Override + public String getWorldViewChangeTypeStr() throws OseeCoreException { + if (getWorldViewChangeType() == null || getWorldViewChangeType() == ChangeType.None) { + return ""; + } else { + return getWorldViewChangeType().name(); + } + } + + public double getEstimatedHoursFromArtifact() throws OseeCoreException { + if (isAttributeTypeValid(AtsAttributeTypes.EstimatedHours)) { + return getSoleAttributeValue(AtsAttributeTypes.EstimatedHours, 0.0); + } + return 0; + } + + public double getEstimatedHoursFromTasks(String relatedToState) throws OseeCoreException { + if (!(this instanceof TaskableStateMachineArtifact)) { + return 0; + } + return ((TaskableStateMachineArtifact) this).getEstimatedHoursFromTasks(relatedToState); + } + + public double getEstimatedHoursFromTasks() throws OseeCoreException { + if (!(this instanceof TaskableStateMachineArtifact)) { + return 0; + } + return ((TaskableStateMachineArtifact) this).getEstimatedHoursFromTasks(); + } + + public double getEstimatedHoursFromReviews() throws OseeCoreException { + if (isTeamWorkflow()) { + return ReviewManager.getEstimatedHours((TeamWorkFlowArtifact) this); + } + return 0; + } + + public double getEstimatedHoursFromReviews(String relatedToState) throws OseeCoreException { + if (isTeamWorkflow()) { + return ReviewManager.getEstimatedHours((TeamWorkFlowArtifact) this, relatedToState); + } + return 0; + } + + public double getEstimatedHoursTotal(String relatedToState) throws OseeCoreException { + return getEstimatedHoursFromArtifact() + getEstimatedHoursFromTasks(relatedToState) + getEstimatedHoursFromReviews(relatedToState); + } + + public double getEstimatedHoursTotal() throws OseeCoreException { + return getEstimatedHoursFromArtifact() + getEstimatedHoursFromTasks() + getEstimatedHoursFromReviews(); + } + + @Override + public double getWorldViewEstimatedHours() throws OseeCoreException { + return getEstimatedHoursTotal(); + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewUserCommunity() throws OseeCoreException { + return ""; + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewPriority() throws OseeCoreException { + return ""; + } + + @Override + public String getWorldViewResolution() throws OseeCoreException { + return getAttributesToString(AtsAttributeTypes.Resolution); + } + + public double getRemainHoursFromArtifact() throws OseeCoreException { + if (isCompleted() || isCancelled()) { + return 0; + } + double est = getSoleAttributeValue(AtsAttributeTypes.EstimatedHours, 0.0); + if (est == 0) { + return getEstimatedHoursFromArtifact(); + } + double remain = est - est * getPercentCompleteSMATotal() / 100.0; + return remain; + } + + public double getRemainHoursTotal() throws OseeCoreException { + return getRemainHoursFromArtifact() + getRemainFromTasks() + getRemainFromReviews(); + } + + public double getRemainFromTasks() throws OseeCoreException { + if (!(this instanceof TaskableStateMachineArtifact)) { + return 0; + } + return ((TaskableStateMachineArtifact) this).getRemainHoursFromTasks(); + } + + public double getRemainFromReviews() throws OseeCoreException { + if (isTeamWorkflow()) { + return ReviewManager.getRemainHours((TeamWorkFlowArtifact) this); + } + return 0; + } + + @Override + public double getWorldViewRemainHours() throws OseeCoreException { + return getRemainHoursTotal(); + } + + @Override + public Result isWorldViewRemainHoursValid() throws OseeCoreException { + if (!isAttributeTypeValid(AtsAttributeTypes.EstimatedHours)) { + return Result.TrueResult; + } + try { + Double value = getSoleAttributeValue(AtsAttributeTypes.EstimatedHours, null); + if (isCancelled()) { + return Result.TrueResult; + } + if (value == null) { + return new Result("Estimated Hours not set."); + } + return Result.TrueResult; + } catch (Exception ex) { + return new Result( + ex.getClass().getName() + ": " + ex.getLocalizedMessage() + "\n\n" + Lib.exceptionToString(ex)); + } + } + + @Override + public Result isWorldViewManDaysNeededValid() throws OseeCoreException { + Result result = isWorldViewRemainHoursValid(); + if (result.isFalse()) { + return result; + } + if (getManHrsPerDayPreference() == 0) { + return new Result("Man Day Hours Preference is not set."); + } + + return Result.TrueResult; + } + + @Override + public double getWorldViewManDaysNeeded() throws OseeCoreException { + double hrsRemain = getWorldViewRemainHours(); + double manDaysNeeded = 0; + if (hrsRemain != 0) { + manDaysNeeded = hrsRemain / getManHrsPerDayPreference(); + } + return manDaysNeeded; + } + + @SuppressWarnings("unused") + public double getManHrsPerDayPreference() throws OseeCoreException { + return DEFAULT_HOURS_PER_WORK_DAY; + } + + @SuppressWarnings("unused") + @Override + public double getWorldViewAnnualCostAvoidance() throws OseeCoreException { + return 0; + } + + @Override + public Result isWorldViewAnnualCostAvoidanceValid() throws OseeCoreException { + if (isAttributeTypeValid(AtsAttributeTypes.WeeklyBenefit)) { + return Result.TrueResult; + } + Result result = isWorldViewRemainHoursValid(); + if (result.isFalse()) { + return result; + } + String value = null; + try { + value = getSoleAttributeValue(AtsAttributeTypes.WeeklyBenefit, ""); + if (!Strings.isValid(value)) { + return new Result("Weekly Benefit Hours not set."); + } + double val = new Float(value).doubleValue(); + if (val == 0) { + return new Result("Weekly Benefit Hours not set."); + } + } catch (NumberFormatException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "HRID " + getHumanReadableId(), ex); + return new Result("Weekly Benefit value is invalid double \"" + value + "\""); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "HRID " + getHumanReadableId(), ex); + return new Result("Exception calculating cost avoidance. See log for details."); + } + return Result.TrueResult; + } + + @Override + public String getWorldViewNotes() throws OseeCoreException { + return getSoleAttributeValue(AtsAttributeTypes.SmaNote, ""); + } + + @Override + public String getWorldViewWorkPackage() throws OseeCoreException { + return getSoleAttributeValue(AtsAttributeTypes.WorkPackage, ""); + } + + @Override + public String getWorldViewPoint() throws OseeCoreException { + return getSoleAttributeValue(AtsAttributeTypes.Points, ""); + } + + @Override + public String getWorldViewNumeric1() throws OseeCoreException { + return AtsUtil.doubleToI18nString(getSoleAttributeValue(AtsAttributeTypes.Numeric1, 0.0), true); + } + + @Override + public String getWorldViewNumeric2() throws OseeCoreException { + return AtsUtil.doubleToI18nString(getSoleAttributeValue(AtsAttributeTypes.Numeric2, 0.0), true); + } + + @Override + public String getWorldViewGoalOrderVote() throws OseeCoreException { + return getSoleAttributeValue(AtsAttributeTypes.GoalOrderVote, ""); + } + + @Override + public String getWorldViewCategory() throws OseeCoreException { + return getSoleAttributeValue(AtsAttributeTypes.Category1, ""); + } + + @Override + public String getWorldViewCategory2() throws OseeCoreException { + return getSoleAttributeValue(AtsAttributeTypes.Category2, ""); + } + + @Override + public String getWorldViewCategory3() throws OseeCoreException { + return getSoleAttributeValue(AtsAttributeTypes.Category3, ""); + } + + public int getWorldViewStatePercentComplete() throws OseeCoreException { + return getPercentCompleteSMAStateTotal(getStateMgr().getCurrentStateName()); + } + + @Override + public String getWorldViewNumberOfTasks() throws OseeCoreException { + if (!(this instanceof TaskableStateMachineArtifact)) { + return ""; + } + int num = ((TaskableStateMachineArtifact) this).getTaskArtifacts().size(); + if (num == 0) { + return ""; + } + return String.valueOf(num); + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewRelatedToState() throws OseeCoreException { + return ""; + } + + @Override + public String getWorldViewTargetedVersionStr() throws OseeCoreException { + if (getWorldViewTargetedVersion() == null) { + return ""; + } + return getWorldViewTargetedVersion().toString(); + } + + /** + * Return true if this artifact, it's ATS relations and any of the other side artifacts are dirty + * + * @return true if any object in SMA tree is dirty + */ + public Result isSMAEditorDirty() { + try { + Set<Artifact> artifacts = new HashSet<Artifact>(); + getSmaArtifactsOneLevel(this, artifacts); + for (Artifact artifact : artifacts) { + if (artifact.isDirty()) { + return new Result(true, String.format("Artifact [%s][%s] is dirty", artifact.getHumanReadableId(), + artifact)); + } + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Can't save artifact " + getHumanReadableId(), ex); + } + return Result.FalseResult; + } + + public void saveSMA(SkynetTransaction transaction) { + try { + Set<Artifact> artifacts = new HashSet<Artifact>(); + getSmaArtifactsOneLevel(this, artifacts); + for (Artifact artifact : artifacts) { + artifact.persist(transaction); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Can't save artifact " + getHumanReadableId(), ex); + } + } + + public void revertSMA() { + try { + Set<Artifact> artifacts = new HashSet<Artifact>(); + getSmaArtifactsOneLevel(this, artifacts); + for (Artifact artifact : artifacts) { + artifact.reloadAttributesAndRelations(); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Can't revert artifact " + getHumanReadableId(), ex); + } + } + + @SuppressWarnings("unused") + public void getSmaArtifactsOneLevel(StateMachineArtifact smaArtifact, Set<Artifact> artifacts) throws OseeCoreException { + artifacts.add(smaArtifact); + } + + @Override + public Date getWorldViewEstimatedReleaseDate() throws OseeCoreException { + Date date = getSoleAttributeValue(AtsAttributeTypes.EstimatedReleaseDate, null); + Date parentDate = null; + if (getParentSMA() != null) { + parentDate = getParentSMA().getWorldViewEstimatedReleaseDate(); + } + if (date == null && parentDate != null) { + return parentDate; + } + return date; + } + + @Override + public Date getWorldViewEstimatedCompletionDate() throws OseeCoreException { + Date date = getSoleAttributeValue(AtsAttributeTypes.EstimatedCompletionDate, null); + if (date != null) { + return date; + } + if (getParentSMA() != null) { + Date parentDate = getParentSMA().getWorldViewEstimatedCompletionDate(); + if (parentDate != null) { + return parentDate; + } + } + date = getWorldViewEstimatedReleaseDate(); + if (date != null) { + return date; + } + return null; + } + + @Override + public String getWorldViewEstimatedReleaseDateStr() throws OseeCoreException { + if (getWorldViewEstimatedReleaseDate() == null) { + return ""; + } + return new XDate(getWorldViewEstimatedReleaseDate()).getMMDDYYHHMM(); + } + + @Override + public String getWorldViewEstimatedCompletionDateStr() throws OseeCoreException { + if (getWorldViewEstimatedCompletionDate() == null) { + return ""; + } + return new XDate(getWorldViewEstimatedCompletionDate()).getMMDDYYHHMM(); + } + + @Override + public abstract Date getWorldViewReleaseDate() throws OseeCoreException; + + @Override + public String getWorldViewReleaseDateStr() throws OseeCoreException { + if (getWorldViewReleaseDate() == null) { + return ""; + } + return new XDate(getWorldViewReleaseDate()).getMMDDYYHHMM(); + } + + /** + * Called at the end of a transition just before transaction manager persist. SMAs can override to perform tasks due + * to transition. + * + * @throws Exception + */ + @SuppressWarnings("unused") + public void transitioned(WorkPageDefinition fromPage, WorkPageDefinition toPage, Collection<User> toAssignees, boolean persist, SkynetTransaction transaction) throws OseeCoreException { + // provided for subclass implementation + } + + @Override + public String getHyperName() { + return getName(); + } + + @Override + public String getHyperType() { + try { + return getArtifactTypeName(); + } catch (Exception ex) { + return ex.getLocalizedMessage(); + } + } + + @Override + public String getHyperState() { + try { + return getStateMgr().getCurrentStateName(); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + return ""; + } + + @Override + public String getHyperAssignee() { + try { + return Artifacts.toString("; ", getStateMgr().getAssignees()); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + return ""; + } + + @Override + public Image getHyperAssigneeImage() throws OseeCoreException { + return getAssigneeImage(); + } + + @Override + public Artifact getHyperArtifact() { + return this; + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewDecision() throws OseeCoreException { + return ""; + } + + @Override + public Artifact getParentAtsArtifact() throws OseeCoreException { + return getParentSMA(); + } + + @Override + public String getWorldViewValidationRequiredStr() throws OseeCoreException { + if (isAttributeTypeValid(AtsAttributeTypes.ValidationRequired)) { + return String.valueOf(getSoleAttributeValue(AtsAttributeTypes.ValidationRequired, false)); + } + return ""; + } + + @SuppressWarnings("unused") + @Override + public Result isWorldViewDeadlineAlerting() throws OseeCoreException { + return Result.FalseResult; + } + + @SuppressWarnings("unused") + @Override + public int getWorldViewPercentRework() throws OseeCoreException { + return 0; + } + + @Override + public String getWorldViewPercentReworkStr() throws OseeCoreException { + int reWork = getWorldViewPercentRework(); + if (reWork == 0) { + return ""; + } + return String.valueOf(reWork); + } + + public static Set<IArtifactType> getAllSMAType() throws OseeCoreException { + Set<IArtifactType> artTypeNames = TeamWorkflowExtensions.getInstance().getAllTeamWorkflowArtifactTypes(); + artTypeNames.add(AtsArtifactTypes.Task); + artTypeNames.add(AtsArtifactTypes.DecisionReview); + artTypeNames.add(AtsArtifactTypes.PeerToPeerReview); + return artTypeNames; + } + + public static List<Artifact> getAllSMATypeArtifacts() throws OseeCoreException { + List<Artifact> result = new ArrayList<Artifact>(); + for (IArtifactType artType : getAllSMAType()) { + result.addAll(ArtifactQuery.getArtifactListFromType(artType, AtsUtil.getAtsBranch())); + } + return result; + } + + public static List<TeamWorkFlowArtifact> getAllTeamWorkflowArtifacts() throws OseeCoreException { + List<TeamWorkFlowArtifact> result = new ArrayList<TeamWorkFlowArtifact>(); + for (IArtifactType artType : TeamWorkflowExtensions.getInstance().getAllTeamWorkflowArtifactTypes()) { + List<TeamWorkFlowArtifact> teamArts = + org.eclipse.osee.framework.jdk.core.util.Collections.castAll(ArtifactQuery.getArtifactListFromType(artType, + AtsUtil.getAtsBranch())); + result.addAll(teamArts); + } + return result; + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewBranchStatus() throws OseeCoreException { + return ""; + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewReviewAuthor() throws OseeCoreException { + return ""; + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewReviewDecider() throws OseeCoreException { + return ""; + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewReviewModerator() throws OseeCoreException { + return ""; + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewReviewReviewer() throws OseeCoreException { + return ""; + } + + /** + * Return hours spent working ONLY the SMA stateName (not children SMAs) + */ + public double getHoursSpentSMAState(String stateName) throws OseeCoreException { + return getStateMgr().getHoursSpent(stateName); + } + + /** + * Return hours spent working ONLY on tasks related to stateName + */ + public double getHoursSpentSMAStateTasks(String stateName) throws OseeCoreException { + if (!(this instanceof TaskableStateMachineArtifact)) { + return 0; + } + return ((TaskableStateMachineArtifact) this).getHoursSpentFromTasks(stateName); + } + + /** + * Return hours spent working ONLY on reviews related to stateName + */ + public double getHoursSpentSMAStateReviews(String stateName) throws OseeCoreException { + if (isTeamWorkflow()) { + return ReviewManager.getHoursSpent((TeamWorkFlowArtifact) this, stateName); + } + return 0; + } + + /** + * Return hours spent working on all things (including children SMAs) related to stateName + */ + public double getHoursSpentSMAStateTotal(String stateName) throws OseeCoreException { + return getHoursSpentSMAState(stateName) + getHoursSpentSMAStateTasks(stateName) + getHoursSpentSMAStateReviews(stateName); + } + + @Override + public double getWorldViewHoursSpentStateTotal() throws OseeCoreException { + return getHoursSpentSMAStateTotal(getStateMgr().getCurrentStateName()); + } + + /** + * Return hours spent working on all things (including children SMAs) for this SMA + */ + public double getHoursSpentSMATotal() throws OseeCoreException { + double hours = 0.0; + for (String stateName : getStateMgr().getVisitedStateNames()) { + hours += getHoursSpentSMAStateTotal(stateName); + } + return hours; + } + + /** + * Return Percent Complete working ONLY the SMA stateName (not children SMAs) + */ + public int getPercentCompleteSMAState(String stateName) throws OseeCoreException { + return getStateMgr().getPercentComplete(stateName); + } + + /** + * Return Percent Complete ONLY on tasks related to stateName. Total Percent / # Tasks + */ + public int getPercentCompleteSMAStateTasks(String stateName) throws OseeCoreException { + if (!(this instanceof TaskableStateMachineArtifact)) { + return 0; + } + return ((TaskableStateMachineArtifact) this).getPercentCompleteFromTasks(stateName); + } + + /** + * Return Percent Complete ONLY on reviews related to stateName. Total Percent / # Reviews + */ + public int getPercentCompleteSMAStateReviews(String stateName) throws OseeCoreException { + if (isTeamWorkflow()) { + return ReviewManager.getPercentComplete((TeamWorkFlowArtifact) this, stateName); + } + return 0; + } + + /** + * Return Percent Complete on all things (including children SMAs) related to stateName. Total Percent for state, + * tasks and reviews / 1 + # Tasks + # Reviews + */ + public int getPercentCompleteSMAStateTotal(String stateName) throws OseeCoreException { + return getStateMetricsData(stateName).getResultingPercent(); + } + + /** + * Return Percent Complete on all things (including children SMAs) for this SMA<br> + * <br> + * percent = all state's percents / number of states (minus completed/cancelled) + */ + public int getPercentCompleteSMATotal() throws OseeCoreException { + if (isCancelledOrCompleted()) { + return 100; + } + Map<String, Double> stateToWeightMap = getStatePercentCompleteWeight(); + if (stateToWeightMap.size() > 0) { + // Calculate total percent using configured weighting + int percent = 0; + for (String stateName : getWorkFlowDefinition().getPageNames()) { + if (!stateName.equals(DefaultTeamState.Completed.name()) && !stateName.equals(DefaultTeamState.Cancelled.name())) { + Double weight = stateToWeightMap.get(stateName); + if (weight == null) { + weight = 0.0; + } + percent += weight * getPercentCompleteSMAStateTotal(stateName); + } + } + return percent; + } else { + int percent = 0; + int numStates = 0; + for (String stateName : getWorkFlowDefinition().getPageNames()) { + if (!stateName.equals(DefaultTeamState.Completed.name()) && !stateName.equals(DefaultTeamState.Cancelled.name())) { + percent += getPercentCompleteSMAStateTotal(stateName); + numStates++; + } + } + if (numStates == 0) { + return 0; + } + return percent / numStates; + } + } + + // Cache stateToWeight mapping + private Map<String, Double> stateToWeight = null; + + public Map<String, Double> getStatePercentCompleteWeight() throws OseeCoreException { + if (stateToWeight == null) { + stateToWeight = new HashMap<String, Double>(); + Collection<WorkRuleDefinition> workRuleDefs = getWorkRulesStartsWith(AtsStatePercentCompleteWeightRule.ID); + // Log error if multiple of same rule found, but keep going + if (workRuleDefs.size() > 1) { + OseeLog.log( + AtsPlugin.class, + Level.SEVERE, + "Team Definition has multiple rules of type " + AtsStatePercentCompleteWeightRule.ID + ". Only 1 allowed. Defaulting to first found."); + } + if (workRuleDefs.size() == 1) { + stateToWeight = AtsStatePercentCompleteWeightRule.getStateWeightMap(workRuleDefs.iterator().next()); + } + } + return stateToWeight; + } + + private StateMetricsData getStateMetricsData(String stateName) throws OseeCoreException { + // Add percent and bump objects 1 for state percent + int percent = getPercentCompleteSMAState(stateName); + int numObjects = 1; // the state itself is one object + + // Add percent for each task and bump objects for each task + if (this instanceof TaskableStateMachineArtifact) { + Collection<TaskArtifact> tasks = ((TaskableStateMachineArtifact) this).getTaskArtifacts(stateName); + for (TaskArtifact taskArt : tasks) { + percent += taskArt.getPercentCompleteSMATotal(); + } + numObjects += tasks.size(); + } + + // Add percent for each review and bump objects for each review + if (isTeamWorkflow()) { + Collection<ReviewSMArtifact> reviews = ReviewManager.getReviews((TeamWorkFlowArtifact) this, stateName); + for (ReviewSMArtifact reviewArt : reviews) { + percent += reviewArt.getPercentCompleteSMATotal(); + } + numObjects += reviews.size(); + } + + return new StateMetricsData(percent, numObjects); + } + + private static class StateMetricsData { + public int numObjects = 0; + public int percent = 0; + + public StateMetricsData(int percent, int numObjects) { + this.numObjects = numObjects; + this.percent = percent; + } + + public int getResultingPercent() { + return percent / numObjects; + } + + @Override + public String toString() { + return "Percent: " + getResultingPercent() + " NumObjs: " + numObjects + " Total Percent: " + percent; + } + } + + @Override + public double getWorldViewHoursSpentState() throws OseeCoreException { + return getHoursSpentSMAState(getStateMgr().getCurrentStateName()); + } + + @Override + public double getWorldViewHoursSpentStateReview() throws OseeCoreException { + return getHoursSpentSMAStateReviews(getStateMgr().getCurrentStateName()); + } + + @Override + public double getWorldViewHoursSpentStateTask() throws OseeCoreException { + return getHoursSpentSMAStateTasks(getStateMgr().getCurrentStateName()); + } + + @Override + public double getWorldViewHoursSpentTotal() throws OseeCoreException { + return getHoursSpentSMATotal(); + } + + @Override + public int getWorldViewPercentCompleteState() throws OseeCoreException { + return getPercentCompleteSMAState(getStateMgr().getCurrentStateName()); + } + + @Override + public int getWorldViewPercentCompleteStateReview() throws OseeCoreException { + return getPercentCompleteSMAStateReviews(getStateMgr().getCurrentStateName()); + } + + @Override + public int getWorldViewPercentCompleteStateTask() throws OseeCoreException { + return getPercentCompleteSMAStateTasks(getStateMgr().getCurrentStateName()); + } + + @Override + public int getWorldViewPercentCompleteTotal() throws OseeCoreException { + return getPercentCompleteSMATotal(); + } + + public Set<IRelationEnumeration> getAtsWorldRelations() { + return atsWorldRelations; + } + + public String getWorldViewLastUpdated() throws OseeCoreException { + return XDate.getDateStr(getLastModified(), XDate.MMDDYYHHMM); + } + + @Override + public String getWorldViewLastStatused() throws OseeCoreException { + return XDate.getDateStr(getLog().getLastStatusedDate(), XDate.MMDDYYHHMM); + } + + @SuppressWarnings("unused") + public String getWorldViewSWEnhancement() throws OseeCoreException { + return ""; + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewNumberOfReviewIssueDefects() throws OseeCoreException { + return ""; + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewNumberOfReviewMajorDefects() throws OseeCoreException { + return ""; + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewNumberOfReviewMinorDefects() throws OseeCoreException { + return ""; + } + + @Override + public String getWorldViewActionsIntiatingWorkflow() throws OseeCoreException { + return getParentActionArtifact().getWorldViewActionsIntiatingWorkflow(); + } + + @Override + public String getWorldViewDaysInCurrentState() throws OseeCoreException { + double timeInCurrState = getStateMgr().getTimeInState(); + if (timeInCurrState == 0) { + return "0.0"; + } + return AtsUtil.doubleToI18nString(timeInCurrState / XDate.MILLISECONDS_IN_A_DAY); + } + + @Override + public String getWorldViewParentState() throws OseeCoreException { + if (getParentSMA() != null) { + return getParentSMA().getStateMgr().getCurrentStateName(); + } + return ""; + } + + @Override + public String getGroupExplorerName() throws OseeCoreException { + return String.format("[%s] %s", getStateMgr().getCurrentStateName(), getName()); + } + + @Override + public String getWorldViewOriginatingWorkflowStr() throws OseeCoreException { + return getParentActionArtifact().getWorldViewOriginatingWorkflowStr(); + } + + @Override + public Collection<TeamWorkFlowArtifact> getWorldViewOriginatingWorkflows() throws OseeCoreException { + return getParentActionArtifact().getWorldViewOriginatingWorkflows(); + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewNumberOfTasksRemaining() throws OseeCoreException { + return ""; + } + + public void closeEditors(boolean save) { + SMAEditor.close(java.util.Collections.singleton(this), save); + } + + public ATSLog getLog() { + return atsLog; + } + + public ATSNote getNotes() { + return atsNote; + } + + public Result getUserInputNeeded() { + return Result.FalseResult; + } + + public WorkPageDefinition getWorkPageDefinition() throws OseeCoreException { + if (getStateMgr().getCurrentStateName() == null) { + return null; + } + return getWorkFlowDefinition().getWorkPageDefinitionByName(getStateMgr().getCurrentStateName()); + } + + public WorkPageDefinition getWorkPageDefinitionByName(String name) throws OseeCoreException { + return getWorkFlowDefinition().getWorkPageDefinitionByName(name); + } + + public WorkPageDefinition getWorkPageDefinitionById(String id) throws OseeCoreException { + return getWorkFlowDefinition().getWorkPageDefinitionById(id); + } + + public boolean isHistoricalVersion() { + return isHistorical(); + } + + public List<WorkPageDefinition> getToWorkPages() throws OseeCoreException { + return getWorkFlowDefinition().getToPages(getWorkPageDefinition()); + } + + public List<WorkPageDefinition> getReturnPages() throws OseeCoreException { + return getWorkFlowDefinition().getReturnPages(getWorkPageDefinition()); + } + + public boolean isReturnPage(WorkPageDefinition workPageDefinition) throws OseeCoreException { + return getWorkFlowDefinition().isReturnPage(getWorkPageDefinition(), workPageDefinition); + } + + public boolean isAccessControlWrite() throws OseeCoreException { + return AccessControlManager.hasPermission(this, PermissionEnum.WRITE); + } + + public User getOriginator() throws OseeCoreException { + return atsLog.getOriginator(); + } + + public void setOriginator(User user) throws OseeCoreException { + atsLog.addLog(LogType.Originated, "", "Changed by " + UserManager.getUser().getName(), user); + } + + /** + * @return true if this is a TeamWorkflow and it uses versions + * @throws OseeStateException + */ + public boolean isTeamUsesVersions() { + if (!isTeamWorkflow()) { + return false; + } + try { + return ((TeamWorkFlowArtifact) this).getTeamDefinition().isTeamUsesVersions(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + return false; + } + } + + /** + * Return true if sma is TeamWorkflowArtifact or review of a team workflow and it's TeamDefinitionArtifact has rule + * set + */ + public boolean teamDefHasWorkRule(String ruleId) throws OseeCoreException { + TeamWorkFlowArtifact teamArt = null; + if (isTeamWorkflow()) { + teamArt = (TeamWorkFlowArtifact) this; + } + if (this instanceof ReviewSMArtifact) { + teamArt = ((ReviewSMArtifact) this).getParentTeamWorkflow(); + } + if (teamArt == null) { + return false; + } + try { + return teamArt.getTeamDefinition().hasWorkRule(ruleId); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + return false; + } + } + + public boolean workPageHasWorkRule(String ruleId) throws OseeCoreException { + return getWorkPageDefinition().hasWorkRule(AtsWorkDefinitions.RuleWorkItemId.atsRequireTargetedVersion.name()); + } + + public Collection<WorkRuleDefinition> getWorkRulesStartsWith(String ruleId) throws OseeCoreException { + Set<WorkRuleDefinition> workRules = new HashSet<WorkRuleDefinition>(); + if (!Strings.isValid(ruleId)) { + return workRules; + } + if (isTeamWorkflow()) { + // Get rules from team definition + workRules.addAll(((TeamWorkFlowArtifact) this).getTeamDefinition().getWorkRulesStartsWith(ruleId)); + } + // Get work rules from workflow + WorkFlowDefinition workFlowDefinition = getWorkFlowDefinition(); + if (workFlowDefinition != null) { + // Get rules from workflow definitions + workRules.addAll(getWorkFlowDefinition().getWorkRulesStartsWith(ruleId)); + } + // Add work rules from page + for (WorkItemDefinition wid : getWorkPageDefinition().getWorkItems(false)) { + if (!wid.getId().equals("") && wid.getId().startsWith(ruleId)) { + workRules.add((WorkRuleDefinition) wid); + } + } + return workRules; + } + + /** + * @return true if this is a TeamWorkflow and the version it's been targeted for has been released + */ + public boolean isReleased() { + try { + VersionArtifact verArt = getTargetedForVersion(); + if (verArt != null) { + return verArt.isReleased(); + } + } catch (Exception ex) { + // Do Nothing + } + return false; + } + + public boolean isVersionLocked() { + try { + VersionArtifact verArt = getTargetedForVersion(); + if (verArt != null) { + return verArt.isVersionLocked(); + } + } catch (Exception ex) { + // Do Nothing + } + return false; + } + + public VersionArtifact getTargetedForVersion() throws OseeCoreException { + return getWorldViewTargetedVersion(); + } + + public boolean isCompleted() throws OseeCoreException { + return stateMgr.getCurrentStateName().equals(DefaultTeamState.Completed.name()); + } + + public boolean isCancelled() throws OseeCoreException { + return stateMgr.getCurrentStateName().equals(DefaultTeamState.Cancelled.name()); + } + + public boolean isCancelledOrCompleted() throws OseeCoreException { + return isCompleted() || isCancelled(); + } + + public boolean isCurrentState(String stateName) throws OseeCoreException { + return stateName.equals(stateMgr.getCurrentStateName()); + } + + public void setTransitionAssignees(Collection<User> assignees) throws OseeCoreException { + if (assignees.contains(UserManager.getUser(SystemUser.OseeSystem)) || assignees.contains(UserManager.getUser(SystemUser.Guest))) { + throw new OseeArgumentException("Can not assign workflow to OseeSystem or Guest"); + } + if (assignees.size() > 1 && assignees.contains(UserManager.getUser(SystemUser.UnAssigned))) { + throw new OseeArgumentException("Can not assign to user and UnAssigned"); + } + transitionAssignees = assignees; + } + + public boolean isAssigneeMe() throws OseeCoreException { + return stateMgr.getAssignees().contains(UserManager.getUser()); + } + + public Collection<User> getTransitionAssignees() throws OseeCoreException { + if (transitionAssignees != null) { + if (transitionAssignees.size() > 0 && transitionAssignees.contains(UserManager.getUser(SystemUser.UnAssigned))) { + transitionAssignees.remove(UserManager.getUser(SystemUser.UnAssigned)); + } + if (transitionAssignees.size() > 0) { + return transitionAssignees; + } + } + return stateMgr.getAssignees(); + } + + public String getTransitionAssigneesStr() throws OseeCoreException { + StringBuffer sb = new StringBuffer(); + for (User u : getTransitionAssignees()) { + sb.append(u.getName() + SEPERATOR); + } + return sb.toString().replaceFirst(SEPERATOR + "$", ""); + } + + public Result transitionToCancelled(String reason, SkynetTransaction transaction, TransitionOption... transitionOption) { + Result result = + transition(DefaultTeamState.Cancelled.name(), Arrays.asList(new User[] {}), reason, transaction, + transitionOption); + return result; + } + + public Result transitionToCompleted(String reason, SkynetTransaction transaction, TransitionOption... transitionOption) { + Result result = + transition(DefaultTeamState.Completed.name(), Arrays.asList(new User[] {}), reason, transaction, + transitionOption); + return result; + } + + public Result isTransitionValid(final String toStateName, final Collection<User> toAssignees, TransitionOption... transitionOption) throws OseeCoreException { + boolean overrideTransitionCheck = + org.eclipse.osee.framework.jdk.core.util.Collections.getAggregate(transitionOption).contains( + TransitionOption.OverrideTransitionValidityCheck); + boolean overrideAssigneeCheck = + org.eclipse.osee.framework.jdk.core.util.Collections.getAggregate(transitionOption).contains( + TransitionOption.OverrideAssigneeCheck); + // Validate assignees + if (!overrideAssigneeCheck && (getStateMgr().getAssignees().contains(UserManager.getUser(SystemUser.OseeSystem)) || getStateMgr().getAssignees().contains( + UserManager.getUser(SystemUser.Guest)) || getStateMgr().getAssignees().contains( + UserManager.getUser(SystemUser.UnAssigned)))) { + return new Result("Can not transition with \"Guest\", \"UnAssigned\" or \"OseeSystem\" user as assignee."); + } + + // Validate toState name + final WorkPageDefinition fromWorkPageDefinition = getWorkPageDefinition(); + final WorkPageDefinition toWorkPageDefinition = getWorkPageDefinitionByName(toStateName); + if (toWorkPageDefinition == null) { + return new Result("Invalid toState \"" + toStateName + "\""); + } + + // Validate transition from fromPage to toPage + if (!overrideTransitionCheck && !getWorkFlowDefinition().getToPages(fromWorkPageDefinition).contains( + toWorkPageDefinition)) { + String errStr = + "Not configured to transition to \"" + toStateName + "\" from \"" + fromWorkPageDefinition.getPageName() + "\""; + OseeLog.log(AtsPlugin.class, Level.SEVERE, errStr); + return new Result(errStr); + } + // Don't transition with existing working branch + if (toStateName.equals(DefaultTeamState.Cancelled.name()) && isTeamWorkflow() && ((TeamWorkFlowArtifact) this).getBranchMgr().isWorkingBranchInWork()) { + return new Result("Working Branch exists. Please delete working branch before cancelling."); + } + + // Don't transition with uncommitted branch if this is a commit state + if (AtsWorkDefinitions.isAllowCommitBranch(getWorkPageDefinition()) && isTeamWorkflow() && ((TeamWorkFlowArtifact) this).getBranchMgr().isWorkingBranchInWork()) { + return new Result("Working Branch exists. Please commit or delete working branch before transition."); + } + + // Check extension points for valid transition + List<IAtsStateItem> atsStateItems = stateItems.getStateItems(fromWorkPageDefinition.getId()); + for (IAtsStateItem item : atsStateItems) { + Result result = item.transitioning(this, fromWorkPageDefinition.getPageName(), toStateName, toAssignees); + if (result.isFalse()) { + return result; + } + } + for (IAtsStateItem item : atsStateItems) { + Result result = item.transitioning(this, fromWorkPageDefinition.getPageName(), toStateName, toAssignees); + if (result.isFalse()) { + return result; + } + } + return Result.TrueResult; + } + + public Result transition(String toStateName, User toAssignee, SkynetTransaction transaction, TransitionOption... transitionOption) { + List<User> users = new ArrayList<User>(); + if (toAssignee != null && !toStateName.equals(DefaultTeamState.Completed.name()) && !toStateName.equals(DefaultTeamState.Cancelled.name())) { + users.add(toAssignee); + } + return transition(toStateName, users, transaction, transitionOption); + } + + public boolean isTargetedVersionable() throws OseeCoreException { + if (!isTeamWorkflow()) { + return false; + } + return ((TeamWorkFlowArtifact) this).getTeamDefinition().getTeamDefinitionHoldingVersions() != null && ((TeamWorkFlowArtifact) this).getTeamDefinition().getTeamDefinitionHoldingVersions().isTeamUsesVersions(); + } + + public Result transition(String toStateName, Collection<User> toAssignees, SkynetTransaction transaction, TransitionOption... transitionOption) { + return transition(toStateName, toAssignees, null, transaction, transitionOption); + } + + private Result transition(final String toStateName, final Collection<User> toAssignees, final String completeOrCancelReason, SkynetTransaction transaction, TransitionOption... transitionOption) { + try { + final boolean persist = + org.eclipse.osee.framework.jdk.core.util.Collections.getAggregate(transitionOption).contains( + TransitionOption.Persist); + + Result result = isTransitionValid(toStateName, toAssignees, transitionOption); + if (result.isFalse()) { + return result; + } + + final WorkPageDefinition fromWorkPageDefinition = getWorkPageDefinition(); + final WorkPageDefinition toWorkPageDefinition = getWorkPageDefinitionByName(toStateName); + + transitionHelper(toAssignees, persist, fromWorkPageDefinition, toWorkPageDefinition, toStateName, + completeOrCancelReason, transaction); + if (persist) { + OseeNotificationManager.getInstance().sendNotifications(); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + return new Result("Transaction failed " + ex.getLocalizedMessage()); + } + return Result.TrueResult; + } + + private void transitionHelper(Collection<User> toAssignees, boolean persist, WorkPageDefinition fromPage, WorkPageDefinition toPage, String toStateName, String completeOrCancelReason, SkynetTransaction transaction) throws OseeCoreException { + // Log transition + if (toPage.isCancelledPage()) { + atsLog.addLog(LogType.StateCancelled, stateMgr.getCurrentStateName(), completeOrCancelReason); + } else { + atsLog.addLog(LogType.StateComplete, stateMgr.getCurrentStateName(), + (completeOrCancelReason != null ? completeOrCancelReason : "")); + } + atsLog.addLog(LogType.StateEntered, toStateName, ""); + + stateMgr.transitionHelper(toAssignees, persist, fromPage, toPage, toStateName, completeOrCancelReason); + + if (isValidationRequired() && isTeamWorkflow()) { + ReviewManager.createValidateReview((TeamWorkFlowArtifact) this, false, transaction); + } + + AtsNotifyUsers.getInstance().notify(this, AtsNotifyUsers.NotifyType.Subscribed, + AtsNotifyUsers.NotifyType.Completed, AtsNotifyUsers.NotifyType.Completed); + + // Persist + if (persist) { + persist(transaction); + } + + transitioned(fromPage, toPage, toAssignees, true, transaction); + + // Notify extension points of transition + for (IAtsStateItem item : stateItems.getStateItems(fromPage.getId())) { + item.transitioned(this, fromPage.getPageName(), toStateName, toAssignees, transaction); + } + for (IAtsStateItem item : stateItems.getStateItems(toPage.getId())) { + item.transitioned(this, fromPage.getPageName(), toStateName, toAssignees, transaction); + } + } + + public SMAEditor getEditor() { + return editor; + } + + public void setEditor(SMAEditor editor) { + this.editor = editor; + } + + public AtsStateItems getStateItems() { + return stateItems; + } + + public boolean isInTransition() { + return inTransition; + } + + public void setInTransition(boolean inTransition) { + this.inTransition = inTransition; + } + + public DeadlineManager getDeadlineMgr() { + return deadlineMgr; + } + + public StateManager getStateMgr() { + return stateMgr; + } + + public boolean isTeamWorkflow() { + return this instanceof TeamWorkFlowArtifact; + } + + public boolean isTask() { + return this instanceof TaskArtifact; + } + + @Override + public String getWorldViewGoalOrder() throws OseeCoreException { + return GoalArtifact.getGoalOrder(this); + } + + public AtsWorkPage getCurrentAtsWorkPage() throws OseeCoreException { + for (AtsWorkPage atsWorkPage : getAtsWorkPages()) { + if (isCurrentState(atsWorkPage.getName())) { + return atsWorkPage; + } + } + return null; + } + + public List<AtsWorkPage> getAtsWorkPages() throws OseeCoreException { + List<AtsWorkPage> atsWorkPages = new ArrayList<AtsWorkPage>(); + for (WorkPageDefinition workPageDefinition : getWorkFlowDefinition().getPagesOrdered()) { + try { + AtsWorkPage atsWorkPage = + new AtsWorkPage(getWorkFlowDefinition(), workPageDefinition, null, + ATSXWidgetOptionResolver.getInstance()); + atsWorkPages.add(atsWorkPage); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + return atsWorkPages; + } + + /** + * Assigned or computed Id that will show at the top of the editor + */ + @SuppressWarnings("unused") + public String getPcrId() throws OseeCoreException { + return ""; + } + + public Map<String, String> getSMADetails() throws OseeCoreException { + Map<String, String> details = Artifacts.getDetailsKeyValues(this); + details.put("Workflow Definition", getWorkFlowDefinition().getName()); + if (getParentActionArtifact() != null) { + details.put("Action Id", getParentActionArtifact().getHumanReadableId()); + } + if (!(this instanceof TeamWorkFlowArtifact) && getParentTeamWorkflow() != null) { + details.put("Parent Team Workflow Id", getParentTeamWorkflow().getHumanReadableId()); + } + if (this.isOfType(AtsArtifactTypes.TeamWorkflow)) { + String message = null; + CmAccessControl accessControl = getAccessControl(); + if (accessControl != null) { + Collection<? extends AccessContextId> ids = accessControl.getContextId(UserManager.getUser(), this); + message = ids.toString(); + } else { + message = "AtsCmAccessControlService not started"; + } + details.put("Access Context Id", message); + } + return details; + } + + protected void addPriviledgedUsersUpTeamDefinitionTree(TeamDefinitionArtifact tda, Set<User> users) throws OseeCoreException { + users.addAll(tda.getLeads()); + users.addAll(tda.getPrivilegedMembers()); + + // Walk up tree to get other editors + if (tda.getParent() != null && tda.getParent() instanceof TeamDefinitionArtifact) { + addPriviledgedUsersUpTeamDefinitionTree((TeamDefinitionArtifact) tda.getParent(), users); + } + } + + @Override + public CmAccessControl getAccessControl() { + return AtsPlugin.getInstance().getCmService(); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TaskArtifact.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TaskArtifact.java index 4121c38afc4..74609cb372a 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TaskArtifact.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TaskArtifact.java @@ -1,408 +1,406 @@ -/*******************************************************************************
- * 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.artifact;
-
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact.DefaultTeamState;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsRelationTypes;
-import org.eclipse.osee.ats.util.widgets.dialog.TaskResOptionDefinition;
-import org.eclipse.osee.ats.util.widgets.dialog.TaskResolutionOptionRule;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeDataStoreException;
-import org.eclipse.osee.framework.core.exception.OseeStateException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.core.model.type.ArtifactType;
-import org.eclipse.osee.framework.jdk.core.util.Collections;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.UserManager;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
-import org.eclipse.osee.framework.skynet.core.artifact.IATSStateMachineArtifact;
-import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinition;
-
-/**
- * @author Donald G. Dunne
- */
-public class TaskArtifact extends StateMachineArtifact implements IATSStateMachineArtifact {
-
- public static enum TaskStates {
- InWork,
- Completed,
- Cancelled
- };
-
- public TaskArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException {
- super(parentFactory, guid, humanReadableId, branch, artifactType);
- }
-
- public boolean isRelatedToParentWorkflowCurrentState() throws OseeCoreException {
- return getWorldViewRelatedToState().equals(getParentSMA().getStateMgr().getCurrentStateName());
- }
-
- @Override
- public void onInitializationComplete() throws OseeCoreException {
- super.onInitializationComplete();
- }
-
- /**
- * Allow parent SMA's assignees and all privileged users up Team tree
- */
- @Override
- public Set<User> getPrivilegedUsers() throws OseeCoreException {
- Set<User> users = new HashSet<User>();
- StateMachineArtifact parentSma = getParentSMA();
- if (parentSma.isTeamWorkflow()) {
- users.addAll(((TeamWorkFlowArtifact) parentSma).getPrivilegedUsers());
- }
- users.addAll(parentSma.getStateMgr().getAssignees());
- return users;
- }
-
- /**
- * Can only un-cancel task when it's related to an active state
- */
- @Override
- public boolean isUnCancellable() {
- try {
- StateMachineArtifact parentSMA = getParentSMA();
- boolean unCancellable =
- parentSMA.getStateMgr().getCurrentStateName().equals(
+/******************************************************************************* + * 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.artifact; + +import java.util.Collection; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.logging.Level; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact.DefaultTeamState; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsRelationTypes; +import org.eclipse.osee.ats.util.widgets.dialog.TaskResOptionDefinition; +import org.eclipse.osee.ats.util.widgets.dialog.TaskResolutionOptionRule; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeDataStoreException; +import org.eclipse.osee.framework.core.exception.OseeStateException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.type.ArtifactType; +import org.eclipse.osee.framework.jdk.core.util.Collections; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.UserManager; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory; +import org.eclipse.osee.framework.skynet.core.artifact.IATSStateMachineArtifact; +import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinition; + +/** + * @author Donald G. Dunne + */ +public class TaskArtifact extends StateMachineArtifact implements IATSStateMachineArtifact { + + public static enum TaskStates { + InWork, + Completed, + Cancelled + }; + + public TaskArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException { + super(parentFactory, guid, humanReadableId, branch, artifactType); + } + + public boolean isRelatedToParentWorkflowCurrentState() throws OseeCoreException { + return getWorldViewRelatedToState().equals(getParentSMA().getStateMgr().getCurrentStateName()); + } + + @Override + public void onInitializationComplete() throws OseeCoreException { + super.onInitializationComplete(); + } + + /** + * Allow parent SMA's assignees and all privileged users up Team tree + */ + @Override + public Set<User> getPrivilegedUsers() throws OseeCoreException { + Set<User> users = new HashSet<User>(); + StateMachineArtifact parentSma = getParentSMA(); + if (parentSma.isTeamWorkflow()) { + users.addAll(((TeamWorkFlowArtifact) parentSma).getPrivilegedUsers()); + } + users.addAll(parentSma.getStateMgr().getAssignees()); + return users; + } + + /** + * Can only un-cancel task when it's related to an active state + */ + @Override + public boolean isUnCancellable() { + try { + StateMachineArtifact parentSMA = getParentSMA(); + boolean unCancellable = + parentSMA.getStateMgr().getCurrentStateName().equals( getSoleAttributeValue(AtsAttributeTypes.RelatedToState, "")); - if (!unCancellable) {
- return false;
- }
- return super.isUnCancellable();
- } catch (Exception ex) {
- // Do Nothing
- }
- return false;
- }
-
- @Override
- public boolean isTaskable() {
- return false;
- }
-
- public boolean isUsingTaskResolutionOptions() throws OseeCoreException {
- return getTaskResolutionOptionDefintions().size() > 0;
- }
-
- public List<TaskResOptionDefinition> getTaskResolutionOptionDefintions() throws OseeCoreException {
- TeamWorkFlowArtifact team = getParentTeamWorkflow();
- if (team == null) {
- return TaskResolutionOptionRule.EMPTY_TASK_RESOLUTION_OPTIONS;
- }
- return TaskResolutionOptionRule.getTaskResolutionOptions(team.getWorkPageDefinition());
- }
-
- public TaskResOptionDefinition getTaskResolutionOptionDefinition(String optionName) throws OseeCoreException {
- for (TaskResOptionDefinition def : getTaskResolutionOptionDefintions()) {
- if (def.getName().equals(optionName)) {
- return def;
- }
- }
- return null;
- }
-
- public List<TaskResOptionDefinition> getTaskResolutionOptionDefintions(String stateName) throws OseeCoreException {
- TeamWorkFlowArtifact team = getParentTeamWorkflow();
- if (team == null) {
- return TaskResolutionOptionRule.EMPTY_TASK_RESOLUTION_OPTIONS;
- }
- return TaskResolutionOptionRule.getTaskResolutionOptions(team.getWorkPageDefinitionByName(stateName));
- }
-
- public TaskResOptionDefinition getTaskResolutionOptionDefinition(String stateName, String optionName) throws OseeCoreException {
- for (TaskResOptionDefinition def : getTaskResolutionOptionDefintions(stateName)) {
- if (def.getName().equals(optionName)) {
- return def;
- }
- }
- return null;
- }
-
- @Override
- public String getDescription() {
- try {
+ if (!unCancellable) { + return false; + } + return super.isUnCancellable(); + } catch (Exception ex) { + // Do Nothing + } + return false; + } + + @Override + public boolean isTaskable() { + return false; + } + + public boolean isUsingTaskResolutionOptions() throws OseeCoreException { + return getTaskResolutionOptionDefintions().size() > 0; + } + + public List<TaskResOptionDefinition> getTaskResolutionOptionDefintions() throws OseeCoreException { + TeamWorkFlowArtifact team = getParentTeamWorkflow(); + if (team == null) { + return TaskResolutionOptionRule.EMPTY_TASK_RESOLUTION_OPTIONS; + } + return TaskResolutionOptionRule.getTaskResolutionOptions(team.getWorkPageDefinition()); + } + + public TaskResOptionDefinition getTaskResolutionOptionDefinition(String optionName) throws OseeCoreException { + for (TaskResOptionDefinition def : getTaskResolutionOptionDefintions()) { + if (def.getName().equals(optionName)) { + return def; + } + } + return null; + } + + public List<TaskResOptionDefinition> getTaskResolutionOptionDefintions(String stateName) throws OseeCoreException { + TeamWorkFlowArtifact team = getParentTeamWorkflow(); + if (team == null) { + return TaskResolutionOptionRule.EMPTY_TASK_RESOLUTION_OPTIONS; + } + return TaskResolutionOptionRule.getTaskResolutionOptions(team.getWorkPageDefinitionByName(stateName)); + } + + public TaskResOptionDefinition getTaskResolutionOptionDefinition(String stateName, String optionName) throws OseeCoreException { + for (TaskResOptionDefinition def : getTaskResolutionOptionDefintions(stateName)) { + if (def.getName().equals(optionName)) { + return def; + } + } + return null; + } + + @Override + public String getDescription() { + try { return getSoleAttributeValue(AtsAttributeTypes.Description, ""); - } catch (Exception ex) {
- return "Error: " + ex.getLocalizedMessage();
- }
- }
-
- @Override
- public String getWorldViewRelatedToState() throws OseeCoreException {
+ } catch (Exception ex) { + return "Error: " + ex.getLocalizedMessage(); + } + } + + @Override + public String getWorldViewRelatedToState() throws OseeCoreException { return getSoleAttributeValue(AtsAttributeTypes.RelatedToState, ""); - }
-
- @Override
- public void atsDelete(Set<Artifact> deleteArts, Map<Artifact, Object> allRelated) throws OseeCoreException {
- super.atsDelete(deleteArts, allRelated);
- }
-
- @Override
- public String getWorldViewTeam() {
- return "";
- }
-
- @Override
- public String getWorldViewWorkPackage() throws OseeCoreException {
- String value = super.getWorldViewWorkPackage();
- if (Strings.isValid(value)) {
- return value;
- }
- return getParentSMA().getWorldViewWorkPackage();
- }
-
- @Override
- public Date getWorldViewEstimatedCompletionDate() throws OseeCoreException {
- Date value = super.getWorldViewEstimatedCompletionDate();
- if (value != null) {
- return value;
- }
- return getParentSMA().getWorldViewEstimatedCompletionDate();
- }
-
- @Override
- public Date getWorldViewEstimatedReleaseDate() throws OseeCoreException {
- Date value = super.getWorldViewEstimatedReleaseDate();
- if (value != null) {
- return value;
- }
- return getParentSMA().getWorldViewEstimatedReleaseDate();
- }
-
- public Boolean isInWork() throws OseeCoreException {
- return getStateMgr().getCurrentStateName().equals(TaskStates.InWork.name());
- }
-
- public void transitionToCompleted(double additionalHours, SkynetTransaction transaction, TransitionOption... transitionOption) throws OseeCoreException {
- if (getStateMgr().getCurrentStateName().equals(DefaultTeamState.Completed.name())) {
- return;
- }
- // Assign current user if unassigned
- try {
- if (getStateMgr().isUnAssigned()) {
- getStateMgr().setAssignee(UserManager.getUser());
- }
- getStateMgr().updateMetrics(additionalHours, 100, true);
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- Result result = transition(DefaultTeamState.Completed.name(), (User) null, transaction, transitionOption);
- if (result.isFalse()) {
- result.popup();
- }
- }
-
- public void transitionToInWork(User toUser, int percentComplete, double additionalHours, SkynetTransaction transaction, TransitionOption... transitionOption) throws OseeCoreException {
- if (getStateMgr().getCurrentStateName().equals(TaskStates.InWork.name())) {
- return;
- }
- Result result = transition(TaskStates.InWork.name(), toUser, transaction, transitionOption);
- if (getStateMgr().getPercentComplete() != percentComplete || additionalHours > 0) {
- getStateMgr().updateMetrics(additionalHours, percentComplete, true);
- }
- if (Collections.getAggregate(transitionOption).contains(TransitionOption.Persist)) {
- saveSMA(transaction);
- }
- if (result.isFalse()) {
- result.popup();
- }
- }
-
- /**
- * Tasks must transition in/out of completed when percent changes between 100 and <100. This method will handle these
- * cases.
- *
- * @param percentComplete
- * @param transaction
- * @throws OseeCoreException
- */
- public void statusPercentChanged(double additionalHours, int percentComplete, SkynetTransaction transaction) throws OseeCoreException {
- if (percentComplete == 100 && !isCompleted()) {
- transitionToCompleted(additionalHours, transaction, TransitionOption.None);
- } else if (percentComplete != 100 && isCompleted()) {
- transitionToInWork(UserManager.getUser(), percentComplete, additionalHours, transaction,
- TransitionOption.Persist);
- }
- // Case where already completed and statusing, just add additional hours to InWork state
- else if (percentComplete == 100 && isCompleted()) {
- if (additionalHours > 0) {
- getStateMgr().updateMetrics(TaskStates.InWork.name(), additionalHours, percentComplete, true);
- }
- } else {
- getStateMgr().updateMetrics(additionalHours, percentComplete, true);
- }
- }
-
- public void parentWorkFlowTransitioned(WorkPageDefinition fromWorkPageDefinition, WorkPageDefinition toWorkPageDefinition, Collection<User> toAssignees, boolean persist, SkynetTransaction transaction, TransitionOption... transitionOption) throws OseeCoreException {
- if (toWorkPageDefinition.getPageName().equals(DefaultTeamState.Cancelled.name()) && isInWork()) {
- transitionToCancelled("Parent Cancelled", transaction, transitionOption);
- } else if (fromWorkPageDefinition.getPageName().equals(DefaultTeamState.Cancelled.name()) && isCancelled()) {
- transitionToInWork(UserManager.getUser(), 99, 0, transaction, transitionOption);
- }
- }
-
- @Override
- public String getWorldViewDescription() throws OseeCoreException {
+ } + + @Override + public void atsDelete(Set<Artifact> deleteArts, Map<Artifact, Object> allRelated) throws OseeCoreException { + super.atsDelete(deleteArts, allRelated); + } + + @Override + public String getWorldViewTeam() { + return ""; + } + + @Override + public String getWorldViewWorkPackage() throws OseeCoreException { + String value = super.getWorldViewWorkPackage(); + if (Strings.isValid(value)) { + return value; + } + return getParentSMA().getWorldViewWorkPackage(); + } + + @Override + public Date getWorldViewEstimatedCompletionDate() throws OseeCoreException { + Date value = super.getWorldViewEstimatedCompletionDate(); + if (value != null) { + return value; + } + return getParentSMA().getWorldViewEstimatedCompletionDate(); + } + + @Override + public Date getWorldViewEstimatedReleaseDate() throws OseeCoreException { + Date value = super.getWorldViewEstimatedReleaseDate(); + if (value != null) { + return value; + } + return getParentSMA().getWorldViewEstimatedReleaseDate(); + } + + public Boolean isInWork() throws OseeCoreException { + return getStateMgr().getCurrentStateName().equals(TaskStates.InWork.name()); + } + + public void transitionToCompleted(double additionalHours, SkynetTransaction transaction, TransitionOption... transitionOption) throws OseeCoreException { + if (getStateMgr().getCurrentStateName().equals(DefaultTeamState.Completed.name())) { + return; + } + // Assign current user if unassigned + try { + if (getStateMgr().isUnAssigned()) { + getStateMgr().setAssignee(UserManager.getUser()); + } + getStateMgr().updateMetrics(additionalHours, 100, true); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + Result result = transition(DefaultTeamState.Completed.name(), (User) null, transaction, transitionOption); + if (result.isFalse()) { + result.popup(); + } + } + + public void transitionToInWork(User toUser, int percentComplete, double additionalHours, SkynetTransaction transaction, TransitionOption... transitionOption) throws OseeCoreException { + if (getStateMgr().getCurrentStateName().equals(TaskStates.InWork.name())) { + return; + } + Result result = transition(TaskStates.InWork.name(), toUser, transaction, transitionOption); + if (getStateMgr().getPercentComplete() != percentComplete || additionalHours > 0) { + getStateMgr().updateMetrics(additionalHours, percentComplete, true); + } + if (Collections.getAggregate(transitionOption).contains(TransitionOption.Persist)) { + saveSMA(transaction); + } + if (result.isFalse()) { + result.popup(); + } + } + + /** + * Tasks must transition in/out of completed when percent changes between 100 and <100. This method will handle these + * cases. + * + * @throws OseeCoreException + */ + public void statusPercentChanged(double additionalHours, int percentComplete, SkynetTransaction transaction) throws OseeCoreException { + if (percentComplete == 100 && !isCompleted()) { + transitionToCompleted(additionalHours, transaction, TransitionOption.None); + } else if (percentComplete != 100 && isCompleted()) { + transitionToInWork(UserManager.getUser(), percentComplete, additionalHours, transaction, + TransitionOption.Persist); + } + // Case where already completed and statusing, just add additional hours to InWork state + else if (percentComplete == 100 && isCompleted()) { + if (additionalHours > 0) { + getStateMgr().updateMetrics(TaskStates.InWork.name(), additionalHours, percentComplete, true); + } + } else { + getStateMgr().updateMetrics(additionalHours, percentComplete, true); + } + } + + public void parentWorkFlowTransitioned(WorkPageDefinition fromWorkPageDefinition, WorkPageDefinition toWorkPageDefinition, Collection<User> toAssignees, boolean persist, SkynetTransaction transaction, TransitionOption... transitionOption) throws OseeCoreException { + if (toWorkPageDefinition.getPageName().equals(DefaultTeamState.Cancelled.name()) && isInWork()) { + transitionToCancelled("Parent Cancelled", transaction, transitionOption); + } else if (fromWorkPageDefinition.getPageName().equals(DefaultTeamState.Cancelled.name()) && isCancelled()) { + transitionToInWork(UserManager.getUser(), 99, 0, transaction, transitionOption); + } + } + + @Override + public String getWorldViewDescription() throws OseeCoreException { return getSoleAttributeValue(AtsAttributeTypes.Description, ""); - }
-
- @Override
- public String getWorldViewNumberOfTasks() {
- return "";
- }
-
- @Override
- public Date getWorldViewReleaseDate() throws OseeCoreException {
- if (getParentSMA().isTeamWorkflow()) {
- return ((TeamWorkFlowArtifact) getParentSMA()).getWorldViewReleaseDate();
- }
+ } + + @Override + public String getWorldViewNumberOfTasks() { + return ""; + } + + @Override + public Date getWorldViewReleaseDate() throws OseeCoreException { + if (getParentSMA().isTeamWorkflow()) { + return ((TeamWorkFlowArtifact) getParentSMA()).getWorldViewReleaseDate(); + } return getSoleAttributeValue(AtsAttributeTypes.ReleaseDate); - }
-
- @Override
- public VersionArtifact getWorldViewTargetedVersion() throws OseeCoreException {
- return getParentSMA().getWorldViewTargetedVersion();
- }
-
- @Override
- public double getManHrsPerDayPreference() throws OseeCoreException {
- return getParentSMA().getManHrsPerDayPreference();
- }
-
- @Override
- public double getWorldViewRemainHours() throws OseeCoreException {
- if (isCompleted() || isCancelled()) {
- return 0;
- }
- double est = getWorldViewEstimatedHours();
- if (getWorldViewStatePercentComplete() == 0) {
- return getWorldViewEstimatedHours();
- }
- double percent = getStateMgr().getPercentComplete(TaskStates.InWork.name());
- if (percent == 0) {
- return getWorldViewEstimatedHours();
- }
- double remain = getWorldViewEstimatedHours() - est * percent / 100.0;
- return remain;
- }
-
- @Override
- public StateMachineArtifact getParentSMA() throws OseeCoreException {
- if (parentSma != null) {
- return parentSma;
- }
- Collection<StateMachineArtifact> smas =
- getRelatedArtifacts(AtsRelationTypes.SmaToTask_Sma, StateMachineArtifact.class);
- if (smas.isEmpty()) {
- throw new OseeStateException("Task has no parent - " + getHumanReadableId());
- }
- parentSma = smas.iterator().next();
- return parentSma;
- }
-
- @Override
- public ActionArtifact getParentActionArtifact() throws OseeCoreException {
- if (parentAction != null) {
- return parentAction;
- }
- parentAction = getParentTeamWorkflow().getParentActionArtifact();
- return parentAction;
- }
-
- @Override
- public TeamWorkFlowArtifact getParentTeamWorkflow() throws OseeCoreException {
- if (parentTeamArt != null) {
- return parentTeamArt;
- }
- StateMachineArtifact sma = getParentSMA();
- if (sma.isTeamWorkflow()) {
- parentTeamArt = (TeamWorkFlowArtifact) sma;
- }
- return parentTeamArt;
- }
-
- @Override
- public Collection<User> getImplementers() throws OseeCoreException {
- return getImplementersByState(TaskStates.InWork.name());
- }
-
- @Override
- public Date getWorldViewDeadlineDate() {
- return null;
- }
-
- @Override
- public String getWorldViewDeadlineDateStr() {
- return "";
- }
-
- @Override
- public double getWorldViewWeeklyBenefit() {
- return 0;
- }
-
- @Override
- public Result isWorldViewAnnualCostAvoidanceValid() {
- return Result.TrueResult;
- }
-
- @Override
- public String getWorldViewLegacyPCR() throws OseeCoreException {
- StateMachineArtifact sma = getParentSMA();
- if (sma != null) {
- return sma.getWorldViewLegacyPCR();
- }
- return "";
- }
-
- @Override
- public String getHyperTargetVersion() {
- return null;
- }
-
- @Override
- public String getWorldViewSWEnhancement() throws OseeCoreException {
- StateMachineArtifact sma = getParentSMA();
- if (sma != null) {
- return sma.getWorldViewSWEnhancement();
- }
- return "";
- }
-
- @Override
- public String getWorldViewParentID() throws OseeCoreException {
- return getParentTeamWorkflow().getHumanReadableId();
- }
-
- @Override
- public boolean hasAtsWorldChildren() {
- return false;
- }
-
- @Override
- public String getPcrId() throws OseeCoreException {
- return getParentTeamWorkflow().getPcrId();
- }
-}
+ } + + @Override + public VersionArtifact getWorldViewTargetedVersion() throws OseeCoreException { + return getParentSMA().getWorldViewTargetedVersion(); + } + + @Override + public double getManHrsPerDayPreference() throws OseeCoreException { + return getParentSMA().getManHrsPerDayPreference(); + } + + @Override + public double getWorldViewRemainHours() throws OseeCoreException { + if (isCompleted() || isCancelled()) { + return 0; + } + double est = getWorldViewEstimatedHours(); + if (getWorldViewStatePercentComplete() == 0) { + return getWorldViewEstimatedHours(); + } + double percent = getStateMgr().getPercentComplete(TaskStates.InWork.name()); + if (percent == 0) { + return getWorldViewEstimatedHours(); + } + double remain = getWorldViewEstimatedHours() - est * percent / 100.0; + return remain; + } + + @Override + public StateMachineArtifact getParentSMA() throws OseeCoreException { + if (parentSma != null) { + return parentSma; + } + Collection<StateMachineArtifact> smas = + getRelatedArtifacts(AtsRelationTypes.SmaToTask_Sma, StateMachineArtifact.class); + if (smas.isEmpty()) { + throw new OseeStateException("Task has no parent - " + getHumanReadableId()); + } + parentSma = smas.iterator().next(); + return parentSma; + } + + @Override + public ActionArtifact getParentActionArtifact() throws OseeCoreException { + if (parentAction != null) { + return parentAction; + } + parentAction = getParentTeamWorkflow().getParentActionArtifact(); + return parentAction; + } + + @Override + public TeamWorkFlowArtifact getParentTeamWorkflow() throws OseeCoreException { + if (parentTeamArt != null) { + return parentTeamArt; + } + StateMachineArtifact sma = getParentSMA(); + if (sma.isTeamWorkflow()) { + parentTeamArt = (TeamWorkFlowArtifact) sma; + } + return parentTeamArt; + } + + @Override + public Collection<User> getImplementers() throws OseeCoreException { + return getImplementersByState(TaskStates.InWork.name()); + } + + @Override + public Date getWorldViewDeadlineDate() { + return null; + } + + @Override + public String getWorldViewDeadlineDateStr() { + return ""; + } + + @Override + public double getWorldViewWeeklyBenefit() { + return 0; + } + + @Override + public Result isWorldViewAnnualCostAvoidanceValid() { + return Result.TrueResult; + } + + @Override + public String getWorldViewLegacyPCR() throws OseeCoreException { + StateMachineArtifact sma = getParentSMA(); + if (sma != null) { + return sma.getWorldViewLegacyPCR(); + } + return ""; + } + + @Override + public String getHyperTargetVersion() { + return null; + } + + @Override + public String getWorldViewSWEnhancement() throws OseeCoreException { + StateMachineArtifact sma = getParentSMA(); + if (sma != null) { + return sma.getWorldViewSWEnhancement(); + } + return ""; + } + + @Override + public String getWorldViewParentID() throws OseeCoreException { + return getParentTeamWorkflow().getHumanReadableId(); + } + + @Override + public boolean hasAtsWorldChildren() { + return false; + } + + @Override + public String getPcrId() throws OseeCoreException { + return getParentTeamWorkflow().getPcrId(); + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TaskableStateMachineArtifact.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TaskableStateMachineArtifact.java index 73310d05b99..533f4179e2a 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TaskableStateMachineArtifact.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TaskableStateMachineArtifact.java @@ -1,343 +1,343 @@ -/*******************************************************************************
- * 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.artifact;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
-import org.eclipse.osee.ats.artifact.ATSLog.LogType;
-import org.eclipse.osee.ats.artifact.TaskArtifact.TaskStates;
-import org.eclipse.osee.ats.config.AtsCacheManager;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.ats.util.AtsRelationTypes;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeDataStoreException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.core.model.type.ArtifactType;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.UserManager;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
-import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinition;
-
-/**
- * @author Donald G. Dunne
- */
-public abstract class TaskableStateMachineArtifact extends StateMachineArtifact {
-
- public TaskableStateMachineArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException {
- super(parentFactory, guid, humanReadableId, branch, artifactType);
- registerAtsWorldRelation(AtsRelationTypes.SmaToTask_Task);
- }
-
- @SuppressWarnings("unused")
- @Override
- public Set<User> getPrivilegedUsers() throws OseeCoreException {
- return null;
- }
-
- @Override
- public void getSmaArtifactsOneLevel(StateMachineArtifact smaArtifact, Set<Artifact> artifacts) throws OseeCoreException {
- super.getSmaArtifactsOneLevel(smaArtifact, artifacts);
- artifacts.addAll(getTaskArtifacts());
- }
-
- @SuppressWarnings("unused")
- @Override
- public Date getWorldViewReleaseDate() throws OseeCoreException {
- return null;
- }
-
- @Override
- public String getHyperTargetVersion() {
- return null;
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getWorldViewParentID() throws OseeCoreException {
- return null;
- }
-
- @Override
- public VersionArtifact getWorldViewTargetedVersion() throws OseeCoreException {
- TeamWorkFlowArtifact teamArt = getParentTeamWorkflow();
- if (teamArt == null) {
- return null;
- }
- return teamArt.getWorldViewTargetedVersion();
- }
-
- @Override
- public boolean showTaskTab() throws OseeCoreException {
- return isTaskable() || isCompleted() || isCancelled();
- }
-
- @Override
- public void atsDelete(Set<Artifact> deleteArts, Map<Artifact, Object> allRelated) throws OseeCoreException {
- super.atsDelete(deleteArts, allRelated);
- for (TaskArtifact taskArt : getTaskArtifacts()) {
- taskArt.atsDelete(deleteArts, allRelated);
- }
- }
-
- @Override
- public void transitioned(WorkPageDefinition fromPage, WorkPageDefinition toPage, Collection<User> toAssignees, boolean persist, SkynetTransaction transaction) throws OseeCoreException {
- super.transitioned(fromPage, toPage, toAssignees, persist, transaction);
- for (TaskArtifact taskArt : getTaskArtifacts()) {
- taskArt.parentWorkFlowTransitioned(fromPage, toPage, toAssignees, persist, transaction);
- }
- }
-
- @Override
- public String getWorldViewNumberOfTasksRemaining() throws OseeCoreException {
- if (getTaskArtifacts().isEmpty()) {
- return "";
- }
- return String.valueOf(getNumTasksInWork());
- }
-
- public String getStatus(String stateName) throws OseeCoreException {
- int completed = 0, cancelled = 0, inWork = 0;
- for (TaskArtifact taskArt : getTaskArtifacts(stateName)) {
- if (taskArt.isCompleted()) {
- completed++;
- } else if (taskArt.isCancelled()) {
- cancelled++;
- } else {
- inWork++;
- }
- }
- return String.format("Total: %d - InWork: %d - Completed: %d - Cancelled: %d",
- getTaskArtifacts(stateName).size(), inWork, completed, cancelled);
- }
-
- public Collection<TaskArtifact> getTaskArtifacts() throws OseeCoreException {
- return AtsCacheManager.getTaskArtifacts(this);
- }
-
- public Collection<TaskArtifact> getTaskArtifactsSorted() throws OseeCoreException {
- return AtsCacheManager.getTaskArtifacts(this);
- }
-
- public Collection<TaskArtifact> getTaskArtifactsFromCurrentState() throws OseeCoreException {
- return getTaskArtifacts(getStateMgr().getCurrentStateName());
- }
-
- public Collection<TaskArtifact> getTaskArtifacts(String stateName) throws OseeCoreException {
- List<TaskArtifact> arts = new ArrayList<TaskArtifact>();
- for (TaskArtifact taskArt : getTaskArtifacts()) {
+/******************************************************************************* + * 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.artifact; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.logging.Level; +import org.eclipse.osee.ats.artifact.ATSLog.LogType; +import org.eclipse.osee.ats.artifact.TaskArtifact.TaskStates; +import org.eclipse.osee.ats.config.AtsCacheManager; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.ats.util.AtsRelationTypes; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeDataStoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.type.ArtifactType; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.UserManager; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager; +import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinition; + +/** + * @author Donald G. Dunne + */ +public abstract class TaskableStateMachineArtifact extends StateMachineArtifact { + + public TaskableStateMachineArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException { + super(parentFactory, guid, humanReadableId, branch, artifactType); + registerAtsWorldRelation(AtsRelationTypes.SmaToTask_Task); + } + + @SuppressWarnings("unused") + @Override + public Set<User> getPrivilegedUsers() throws OseeCoreException { + return null; + } + + @Override + public void getSmaArtifactsOneLevel(StateMachineArtifact smaArtifact, Set<Artifact> artifacts) throws OseeCoreException { + super.getSmaArtifactsOneLevel(smaArtifact, artifacts); + artifacts.addAll(getTaskArtifacts()); + } + + @SuppressWarnings("unused") + @Override + public Date getWorldViewReleaseDate() throws OseeCoreException { + return null; + } + + @Override + public String getHyperTargetVersion() { + return null; + } + + @SuppressWarnings("unused") + @Override + public String getWorldViewParentID() throws OseeCoreException { + return null; + } + + @Override + public VersionArtifact getWorldViewTargetedVersion() throws OseeCoreException { + TeamWorkFlowArtifact teamArt = getParentTeamWorkflow(); + if (teamArt == null) { + return null; + } + return teamArt.getWorldViewTargetedVersion(); + } + + @Override + public boolean showTaskTab() throws OseeCoreException { + return isTaskable() || isCompleted() || isCancelled(); + } + + @Override + public void atsDelete(Set<Artifact> deleteArts, Map<Artifact, Object> allRelated) throws OseeCoreException { + super.atsDelete(deleteArts, allRelated); + for (TaskArtifact taskArt : getTaskArtifacts()) { + taskArt.atsDelete(deleteArts, allRelated); + } + } + + @Override + public void transitioned(WorkPageDefinition fromPage, WorkPageDefinition toPage, Collection<User> toAssignees, boolean persist, SkynetTransaction transaction) throws OseeCoreException { + super.transitioned(fromPage, toPage, toAssignees, persist, transaction); + for (TaskArtifact taskArt : getTaskArtifacts()) { + taskArt.parentWorkFlowTransitioned(fromPage, toPage, toAssignees, persist, transaction); + } + } + + @Override + public String getWorldViewNumberOfTasksRemaining() throws OseeCoreException { + if (getTaskArtifacts().isEmpty()) { + return ""; + } + return String.valueOf(getNumTasksInWork()); + } + + public String getStatus(String stateName) throws OseeCoreException { + int completed = 0, cancelled = 0, inWork = 0; + for (TaskArtifact taskArt : getTaskArtifacts(stateName)) { + if (taskArt.isCompleted()) { + completed++; + } else if (taskArt.isCancelled()) { + cancelled++; + } else { + inWork++; + } + } + return String.format("Total: %d - InWork: %d - Completed: %d - Cancelled: %d", + getTaskArtifacts(stateName).size(), inWork, completed, cancelled); + } + + public Collection<TaskArtifact> getTaskArtifacts() throws OseeCoreException { + return AtsCacheManager.getTaskArtifacts(this); + } + + public Collection<TaskArtifact> getTaskArtifactsSorted() throws OseeCoreException { + return AtsCacheManager.getTaskArtifacts(this); + } + + public Collection<TaskArtifact> getTaskArtifactsFromCurrentState() throws OseeCoreException { + return getTaskArtifacts(getStateMgr().getCurrentStateName()); + } + + public Collection<TaskArtifact> getTaskArtifacts(String stateName) throws OseeCoreException { + List<TaskArtifact> arts = new ArrayList<TaskArtifact>(); + for (TaskArtifact taskArt : getTaskArtifacts()) { if (taskArt.getSoleAttributeValue(AtsAttributeTypes.RelatedToState, "").equals(stateName)) { - arts.add(taskArt);
- }
- }
- return arts;
- }
-
- public boolean hasTaskArtifacts() {
- try {
- return getRelatedArtifactsCount(AtsRelationTypes.SmaToTask_Task) > 0;
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- return false;
- }
- }
-
- public TaskArtifact createNewTask(String title) throws OseeCoreException {
- return createNewTask(Arrays.asList(UserManager.getUser()), title);
- }
-
- public TaskArtifact createNewTask(User assignee, String title) throws OseeCoreException {
- return createNewTask(Arrays.asList(assignee), title);
- }
-
- public TaskArtifact createNewTask(Collection<User> assignees, String title) throws OseeCoreException {
- TaskArtifact taskArt = null;
- taskArt = (TaskArtifact) ArtifactTypeManager.addArtifact(AtsArtifactTypes.Task, AtsUtil.getAtsBranch(), title);
- taskArt.getLog().addLog(LogType.Originated, "", "");
-
- // Initialize state machine
- taskArt.getStateMgr().initializeStateMachine(TaskStates.InWork.name(), assignees);
- taskArt.getLog().addLog(LogType.StateEntered, "InWork", "");
-
- // Set parent state task is related to
+ arts.add(taskArt); + } + } + return arts; + } + + public boolean hasTaskArtifacts() { + try { + return getRelatedArtifactsCount(AtsRelationTypes.SmaToTask_Task) > 0; + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + return false; + } + } + + public TaskArtifact createNewTask(String title) throws OseeCoreException { + return createNewTask(Arrays.asList(UserManager.getUser()), title); + } + + public TaskArtifact createNewTask(User assignee, String title) throws OseeCoreException { + return createNewTask(Arrays.asList(assignee), title); + } + + public TaskArtifact createNewTask(Collection<User> assignees, String title) throws OseeCoreException { + TaskArtifact taskArt = null; + taskArt = (TaskArtifact) ArtifactTypeManager.addArtifact(AtsArtifactTypes.Task, AtsUtil.getAtsBranch(), title); + taskArt.getLog().addLog(LogType.Originated, "", ""); + + // Initialize state machine + taskArt.getStateMgr().initializeStateMachine(TaskStates.InWork.name(), assignees); + taskArt.getLog().addLog(LogType.StateEntered, "InWork", ""); + + // Set parent state task is related to taskArt.setSoleAttributeValue(AtsAttributeTypes.RelatedToState, getStateMgr().getCurrentStateName()); -
- addRelation(AtsRelationTypes.SmaToTask_Task, taskArt);
-
- return taskArt;
- }
-
- public Result areTasksComplete() {
- try {
- for (TaskArtifact taskArt : getTaskArtifacts()) {
- if (taskArt.isInWork()) {
- return new Result(false, "Task " + taskArt.getGuid() + " Not Complete");
- }
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return new Result(false, "Exception " + ex.getLocalizedMessage());
- }
- return Result.TrueResult;
- }
-
- public Result areTasksComplete(String stateName) {
- try {
- for (TaskArtifact taskArt : getTaskArtifacts(stateName)) {
- if (taskArt.isInWork()) {
- return new Result(false, "Task " + taskArt.getGuid() + " Not Complete");
- }
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return new Result(false, "Exception " + ex.getLocalizedMessage());
- }
- return Result.TrueResult;
- }
-
- public int getNumTasksInWork() {
- int num = 0;
- try {
- for (TaskArtifact taskArt : getTaskArtifacts()) {
- if (taskArt.isInWork()) {
- num++;
- }
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- return num;
- }
-
- /**
- * Return Estimated Task Hours of "Related to State" stateName
- *
- * @param relatedToStateName state name of parent workflow's state
- * @return Returns the Estimated Hours
- */
- @Override
- public double getEstimatedHoursFromTasks(String relatedToStateName) throws OseeCoreException {
- double hours = 0;
- for (TaskArtifact taskArt : getTaskArtifacts(relatedToStateName)) {
- hours += taskArt.getEstimatedHoursTotal();
- }
- return hours;
- }
-
- /**
- * Return Estimated Hours for all tasks
- *
- * @return hours
- * @throws Exception
- */
- @Override
- public double getEstimatedHoursFromTasks() throws OseeCoreException {
- double hours = 0;
- for (TaskArtifact taskArt : getTaskArtifacts()) {
- hours += taskArt.getEstimatedHoursFromArtifact();
- }
- return hours;
-
- }
-
- /**
- * Return Remain Task Hours of "Related to State" stateName
- *
- * @param relatedToStateName state name of parent workflow's state
- * @return Returns the Remain Hours
- */
- public double getRemainHoursFromTasks(String relatedToStateName) throws OseeCoreException {
- double hours = 0;
- for (TaskArtifact taskArt : getTaskArtifacts(relatedToStateName)) {
- hours += taskArt.getRemainHoursFromArtifact();
- }
- return hours;
- }
-
- /**
- * Return Remain Hours for all tasks
- *
- * @return hours
- * @throws Exception
- */
- public double getRemainHoursFromTasks() throws OseeCoreException {
- double hours = 0;
- for (TaskArtifact taskArt : getTaskArtifacts()) {
- hours += taskArt.getRemainHoursFromArtifact();
- }
- return hours;
-
- }
-
- /**
- * Return Hours Spent for Tasks of "Related to State" stateName
- *
- * @param relatedToStateName state name of parent workflow's state
- * @return Returns the Hours Spent
- */
- public double getHoursSpentFromTasks(String relatedToStateName) throws OseeCoreException {
- double spent = 0;
- for (TaskArtifact taskArt : getTaskArtifacts(relatedToStateName)) {
- spent += taskArt.getHoursSpentSMATotal();
- }
- return spent;
- }
-
- /**
- * Return Total Percent Complete / # Tasks for "Related to State" stateName
- *
- * @param relatedToStateName state name of parent workflow's state
- * @return Returns the Percent Complete.
- */
- public int getPercentCompleteFromTasks(String relatedToStateName) throws OseeCoreException {
- int spent = 0;
- Collection<TaskArtifact> taskArts = getTaskArtifacts(relatedToStateName);
- for (TaskArtifact taskArt : taskArts) {
- spent += taskArt.getPercentCompleteSMATotal();
- }
- if (spent == 0) {
- return 0;
- }
- return spent / taskArts.size();
- }
-
- public Collection<TaskArtifact> createTasks(List<String> titles, List<User> assignees, SkynetTransaction transaction) throws OseeCoreException {
- List<TaskArtifact> tasks = new ArrayList<TaskArtifact>();
- for (String title : titles) {
- TaskArtifact taskArt = createNewTask(title);
- if (assignees != null && assignees.size() > 0) {
- Set<User> users = new HashSet<User>();
- for (User art : assignees) {
- users.add(art);
- }
- taskArt.getStateMgr().setAssignees(users);
- }
- tasks.add(taskArt);
- taskArt.persist(transaction);
- }
- return tasks;
- }
-
+ + addRelation(AtsRelationTypes.SmaToTask_Task, taskArt); + + return taskArt; + } + + public Result areTasksComplete() { + try { + for (TaskArtifact taskArt : getTaskArtifacts()) { + if (taskArt.isInWork()) { + return new Result(false, "Task " + taskArt.getGuid() + " Not Complete"); + } + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + return new Result(false, "Exception " + ex.getLocalizedMessage()); + } + return Result.TrueResult; + } + + public Result areTasksComplete(String stateName) { + try { + for (TaskArtifact taskArt : getTaskArtifacts(stateName)) { + if (taskArt.isInWork()) { + return new Result(false, "Task " + taskArt.getGuid() + " Not Complete"); + } + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + return new Result(false, "Exception " + ex.getLocalizedMessage()); + } + return Result.TrueResult; + } + + public int getNumTasksInWork() { + int num = 0; + try { + for (TaskArtifact taskArt : getTaskArtifacts()) { + if (taskArt.isInWork()) { + num++; + } + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + return num; + } + + /** + * Return Estimated Task Hours of "Related to State" stateName + * + * @param relatedToStateName state name of parent workflow's state + * @return Returns the Estimated Hours + */ + @Override + public double getEstimatedHoursFromTasks(String relatedToStateName) throws OseeCoreException { + double hours = 0; + for (TaskArtifact taskArt : getTaskArtifacts(relatedToStateName)) { + hours += taskArt.getEstimatedHoursTotal(); + } + return hours; + } + + /** + * Return Estimated Hours for all tasks + * + * @return hours + * @throws Exception + */ + @Override + public double getEstimatedHoursFromTasks() throws OseeCoreException { + double hours = 0; + for (TaskArtifact taskArt : getTaskArtifacts()) { + hours += taskArt.getEstimatedHoursFromArtifact(); + } + return hours; + + } + + /** + * Return Remain Task Hours of "Related to State" stateName + * + * @param relatedToStateName state name of parent workflow's state + * @return Returns the Remain Hours + */ + public double getRemainHoursFromTasks(String relatedToStateName) throws OseeCoreException { + double hours = 0; + for (TaskArtifact taskArt : getTaskArtifacts(relatedToStateName)) { + hours += taskArt.getRemainHoursFromArtifact(); + } + return hours; + } + + /** + * Return Remain Hours for all tasks + * + * @return hours + * @throws Exception + */ + public double getRemainHoursFromTasks() throws OseeCoreException { + double hours = 0; + for (TaskArtifact taskArt : getTaskArtifacts()) { + hours += taskArt.getRemainHoursFromArtifact(); + } + return hours; + + } + + /** + * Return Hours Spent for Tasks of "Related to State" stateName + * + * @param relatedToStateName state name of parent workflow's state + * @return Returns the Hours Spent + */ + public double getHoursSpentFromTasks(String relatedToStateName) throws OseeCoreException { + double spent = 0; + for (TaskArtifact taskArt : getTaskArtifacts(relatedToStateName)) { + spent += taskArt.getHoursSpentSMATotal(); + } + return spent; + } + + /** + * Return Total Percent Complete / # Tasks for "Related to State" stateName + * + * @param relatedToStateName state name of parent workflow's state + * @return Returns the Percent Complete. + */ + public int getPercentCompleteFromTasks(String relatedToStateName) throws OseeCoreException { + int spent = 0; + Collection<TaskArtifact> taskArts = getTaskArtifacts(relatedToStateName); + for (TaskArtifact taskArt : taskArts) { + spent += taskArt.getPercentCompleteSMATotal(); + } + if (spent == 0) { + return 0; + } + return spent / taskArts.size(); + } + + public Collection<TaskArtifact> createTasks(List<String> titles, List<User> assignees, SkynetTransaction transaction) throws OseeCoreException { + List<TaskArtifact> tasks = new ArrayList<TaskArtifact>(); + for (String title : titles) { + TaskArtifact taskArt = createNewTask(title); + if (assignees != null && assignees.size() > 0) { + Set<User> users = new HashSet<User>(); + for (User art : assignees) { + users.add(art); + } + taskArt.getStateMgr().setAssignees(users); + } + tasks.add(taskArt); + taskArt.persist(transaction); + } + return tasks; + } + }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TeamDefinitionArtifact.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TeamDefinitionArtifact.java index 3f092fc977b..ef6b661a72c 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TeamDefinitionArtifact.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TeamDefinitionArtifact.java @@ -1,520 +1,519 @@ -/*******************************************************************************
- * 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.artifact;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Level;
-import org.eclipse.osee.ats.artifact.VersionArtifact.VersionReleaseType;
-import org.eclipse.osee.ats.config.AtsCacheManager;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.ats.util.AtsFolderUtil;
-import org.eclipse.osee.ats.util.AtsFolderUtil.AtsFolder;
-import org.eclipse.osee.ats.util.AtsRelationTypes;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.ats.util.widgets.commit.ICommitConfigArtifact;
-import org.eclipse.osee.ats.workflow.item.AtsWorkDefinitions.RuleWorkItemId;
-import org.eclipse.osee.framework.core.enums.Active;
-import org.eclipse.osee.framework.core.enums.CoreArtifactTypes;
-import org.eclipse.osee.framework.core.enums.CoreAttributeTypes;
-import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
-import org.eclipse.osee.framework.core.exception.BranchDoesNotExist;
-import org.eclipse.osee.framework.core.exception.OseeArgumentException;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeDataStoreException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.core.model.type.ArtifactType;
-import org.eclipse.osee.framework.jdk.core.util.Collections;
-import org.eclipse.osee.framework.jdk.core.util.GUID;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
-import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
-import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkFlowDefinition;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkItemDefinitionFactory;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkRuleDefinition;
-
-/**
- * @author Donald G. Dunne
- */
-public class TeamDefinitionArtifact extends Artifact implements ICommitConfigArtifact {
-
- public static enum TeamDefinitionOptions {
- TeamUsesVersions,
- RequireTargetedVersion
- };
-
- public TeamDefinitionArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException {
- super(parentFactory, guid, humanReadableId, branch, artifactType);
- }
-
- @Override
- public Result isCreateBranchAllowed() throws OseeCoreException {
+/******************************************************************************* + * 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.artifact; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.logging.Level; +import org.eclipse.osee.ats.artifact.VersionArtifact.VersionReleaseType; +import org.eclipse.osee.ats.config.AtsCacheManager; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.ats.util.AtsFolderUtil; +import org.eclipse.osee.ats.util.AtsFolderUtil.AtsFolder; +import org.eclipse.osee.ats.util.AtsRelationTypes; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.ats.util.widgets.commit.ICommitConfigArtifact; +import org.eclipse.osee.ats.workflow.item.AtsWorkDefinitions.RuleWorkItemId; +import org.eclipse.osee.framework.core.enums.Active; +import org.eclipse.osee.framework.core.enums.CoreArtifactTypes; +import org.eclipse.osee.framework.core.enums.CoreAttributeTypes; +import org.eclipse.osee.framework.core.enums.CoreRelationTypes; +import org.eclipse.osee.framework.core.exception.BranchDoesNotExist; +import org.eclipse.osee.framework.core.exception.OseeArgumentException; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeDataStoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.type.ArtifactType; +import org.eclipse.osee.framework.jdk.core.util.Collections; +import org.eclipse.osee.framework.jdk.core.util.GUID; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager; +import org.eclipse.osee.framework.skynet.core.artifact.BranchManager; +import org.eclipse.osee.framework.skynet.core.utility.Artifacts; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkFlowDefinition; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkItemDefinitionFactory; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkRuleDefinition; + +/** + * @author Donald G. Dunne + */ +public class TeamDefinitionArtifact extends Artifact implements ICommitConfigArtifact { + + public static enum TeamDefinitionOptions { + TeamUsesVersions, + RequireTargetedVersion + }; + + public TeamDefinitionArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException { + super(parentFactory, guid, humanReadableId, branch, artifactType); + } + + @Override + public Result isCreateBranchAllowed() throws OseeCoreException { if (getSoleAttributeValue(AtsAttributeTypes.AllowCreateBranch, false) == false) { - return new Result(false, "Branch creation disabled for Team Definition [" + this + "]");
- }
- if (getParentBranch() == null) {
- return new Result(false, "Parent Branch not configured for Team Definition [" + this + "]");
- }
- return Result.TrueResult;
- }
-
- @Override
- public Result isCommitBranchAllowed() throws OseeCoreException {
+ return new Result(false, "Branch creation disabled for Team Definition [" + this + "]"); + } + if (getParentBranch() == null) { + return new Result(false, "Parent Branch not configured for Team Definition [" + this + "]"); + } + return Result.TrueResult; + } + + @Override + public Result isCommitBranchAllowed() throws OseeCoreException { if (getSoleAttributeValue(AtsAttributeTypes.AllowCommitBranch, false) == false) { - return new Result(false, "Team Definition [" + this + "] not configured to allow branch commit.");
- }
- if (getParentBranch() == null) {
- return new Result(false, "Parent Branch not configured for Team Definition [" + this + "]");
- }
- return Result.TrueResult;
- }
-
- public void initialize(String fullname, String description, Collection<User> leads, Collection<User> members, Collection<ActionableItemArtifact> actionableItems, TeamDefinitionOptions... teamDefinitionOptions) throws OseeCoreException {
- List<Object> teamDefOptions = Collections.getAggregate((Object[]) teamDefinitionOptions);
-
+ return new Result(false, "Team Definition [" + this + "] not configured to allow branch commit."); + } + if (getParentBranch() == null) { + return new Result(false, "Parent Branch not configured for Team Definition [" + this + "]"); + } + return Result.TrueResult; + } + + public void initialize(String fullname, String description, Collection<User> leads, Collection<User> members, Collection<ActionableItemArtifact> actionableItems, TeamDefinitionOptions... teamDefinitionOptions) throws OseeCoreException { + List<Object> teamDefOptions = Collections.getAggregate((Object[]) teamDefinitionOptions); + setSoleAttributeValue(AtsAttributeTypes.Description, description); setSoleAttributeValue(AtsAttributeTypes.FullName, fullname); - for (User user : leads) {
- addRelation(AtsRelationTypes.TeamLead_Lead, user);
- // All leads are members
- addRelation(AtsRelationTypes.TeamMember_Member, user);
- }
- for (User user : members) {
- addRelation(AtsRelationTypes.TeamMember_Member, user);
- }
-
- if (teamDefOptions.contains(TeamDefinitionOptions.TeamUsesVersions)) {
+ for (User user : leads) { + addRelation(AtsRelationTypes.TeamLead_Lead, user); + // All leads are members + addRelation(AtsRelationTypes.TeamMember_Member, user); + } + for (User user : members) { + addRelation(AtsRelationTypes.TeamMember_Member, user); + } + + if (teamDefOptions.contains(TeamDefinitionOptions.TeamUsesVersions)) { setSoleAttributeValue(AtsAttributeTypes.TeamUsesVersions, true); - }
- if (teamDefOptions.contains(TeamDefinitionOptions.RequireTargetedVersion)) {
- addWorkRule(RuleWorkItemId.atsRequireTargetedVersion.name());
- }
-
- // Relate to actionable items
- for (ActionableItemArtifact aia : actionableItems) {
- addRelation(AtsRelationTypes.TeamActionableItem_ActionableItem, aia);
- }
- }
-
- public static List<TeamDefinitionArtifact> getTopLevelTeamDefinitions(Active active) throws OseeCoreException {
- TeamDefinitionArtifact topTeamDef = getTopTeamDefinition();
- if (topTeamDef == null) {
- return java.util.Collections.emptyList();
- }
- return Collections.castAll(AtsUtil.getActive(
- Artifacts.getChildrenOfTypeSet(topTeamDef, TeamDefinitionArtifact.class, false), active,
- TeamDefinitionArtifact.class));
- }
-
- @Override
- public Branch getParentBranch() throws OseeCoreException {
- try {
+ } + if (teamDefOptions.contains(TeamDefinitionOptions.RequireTargetedVersion)) { + addWorkRule(RuleWorkItemId.atsRequireTargetedVersion.name()); + } + + // Relate to actionable items + for (ActionableItemArtifact aia : actionableItems) { + addRelation(AtsRelationTypes.TeamActionableItem_ActionableItem, aia); + } + } + + public static List<TeamDefinitionArtifact> getTopLevelTeamDefinitions(Active active) throws OseeCoreException { + TeamDefinitionArtifact topTeamDef = getTopTeamDefinition(); + if (topTeamDef == null) { + return java.util.Collections.emptyList(); + } + return Collections.castAll(AtsUtil.getActive( + Artifacts.getChildrenOfTypeSet(topTeamDef, TeamDefinitionArtifact.class, false), active, + TeamDefinitionArtifact.class)); + } + + @Override + public Branch getParentBranch() throws OseeCoreException { + try { String guid = getSoleAttributeValue(AtsAttributeTypes.BaselineBranchGuid, ""); - if (GUID.isValid(guid)) {
- return BranchManager.getBranchByGuid(guid);
- }
- } catch (BranchDoesNotExist ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- return null;
- }
-
- /**
- * This method will walk up the TeamDefinition tree until a def is found that configured with versions. This allows
- * multiple TeamDefinitions to be versioned/released together by having the parent hold the versions. It is not
- * required that a product configured in ATS uses the versions option. If no parent with versions is found, null is
- * returned. If boolean "Team Uses Versions" is false, just return cause this team doesn't use versions
- *
- * @return parent TeamDefinition that holds the version definitions
- */
- public TeamDefinitionArtifact getTeamDefinitionHoldingVersions() throws OseeCoreException {
- if (!isTeamUsesVersions()) {
- return null;
- }
- if (getVersionsArtifacts().size() > 0) {
- return this;
- }
- if (getParent() instanceof TeamDefinitionArtifact) {
- TeamDefinitionArtifact parentTda = (TeamDefinitionArtifact) getParent();
- if (parentTda != null) {
- return parentTda.getTeamDefinitionHoldingVersions();
- }
- }
- return null;
- }
-
- /**
- * This method will walk up the TeamDefinition tree until a def is found that configured with work flow.
- *
- * @return parent TeamDefinition that holds the work flow id attribute
- */
- public TeamDefinitionArtifact getTeamDefinitionHoldingWorkFlow() throws OseeCoreException {
- for (Artifact artifact : getRelatedArtifacts(CoreRelationTypes.WorkItem__Child, Artifact.class)) {
- if (artifact.isOfType(CoreArtifactTypes.WorkFlowDefinition)) {
- return this;
- }
- }
- if (getParent() instanceof TeamDefinitionArtifact) {
- TeamDefinitionArtifact parentTda = (TeamDefinitionArtifact) getParent();
- if (parentTda != null) {
- return parentTda.getTeamDefinitionHoldingWorkFlow();
- }
- }
- return null;
- }
-
- public VersionArtifact getNextReleaseVersion() throws OseeCoreException {
- for (VersionArtifact verArt : getRelatedArtifacts(AtsRelationTypes.TeamDefinitionToVersion_Version,
- VersionArtifact.class)) {
+ if (GUID.isValid(guid)) { + return BranchManager.getBranchByGuid(guid); + } + } catch (BranchDoesNotExist ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + return null; + } + + /** + * This method will walk up the TeamDefinition tree until a def is found that configured with versions. This allows + * multiple TeamDefinitions to be versioned/released together by having the parent hold the versions. It is not + * required that a product configured in ATS uses the versions option. If no parent with versions is found, null is + * returned. If boolean "Team Uses Versions" is false, just return cause this team doesn't use versions + * + * @return parent TeamDefinition that holds the version definitions + */ + public TeamDefinitionArtifact getTeamDefinitionHoldingVersions() throws OseeCoreException { + if (!isTeamUsesVersions()) { + return null; + } + if (getVersionsArtifacts().size() > 0) { + return this; + } + if (getParent() instanceof TeamDefinitionArtifact) { + TeamDefinitionArtifact parentTda = (TeamDefinitionArtifact) getParent(); + if (parentTda != null) { + return parentTda.getTeamDefinitionHoldingVersions(); + } + } + return null; + } + + /** + * This method will walk up the TeamDefinition tree until a def is found that configured with work flow. + * + * @return parent TeamDefinition that holds the work flow id attribute + */ + public TeamDefinitionArtifact getTeamDefinitionHoldingWorkFlow() throws OseeCoreException { + for (Artifact artifact : getRelatedArtifacts(CoreRelationTypes.WorkItem__Child, Artifact.class)) { + if (artifact.isOfType(CoreArtifactTypes.WorkFlowDefinition)) { + return this; + } + } + if (getParent() instanceof TeamDefinitionArtifact) { + TeamDefinitionArtifact parentTda = (TeamDefinitionArtifact) getParent(); + if (parentTda != null) { + return parentTda.getTeamDefinitionHoldingWorkFlow(); + } + } + return null; + } + + public VersionArtifact getNextReleaseVersion() throws OseeCoreException { + for (VersionArtifact verArt : getRelatedArtifacts(AtsRelationTypes.TeamDefinitionToVersion_Version, + VersionArtifact.class)) { if (verArt.getSoleAttributeValue(AtsAttributeTypes.NextVersion, false)) { - return verArt;
- }
- }
- return null;
- }
-
- public Collection<VersionArtifact> getVersionsFromTeamDefHoldingVersions(VersionReleaseType releaseType) throws OseeCoreException {
- TeamDefinitionArtifact teamDef = getTeamDefinitionHoldingVersions();
- if (teamDef == null) {
- return new ArrayList<VersionArtifact>();
- }
- return teamDef.getVersionsArtifacts(releaseType);
- }
-
- public static List<TeamDefinitionArtifact> getTeamDefinitions(Active active) throws OseeCoreException {
- return Collections.castAll(AtsCacheManager.getArtifactsByActive(
- ArtifactTypeManager.getType(AtsArtifactTypes.TeamDefinition), active));
- }
-
- public static List<TeamDefinitionArtifact> getTeamTopLevelDefinitions(Active active) throws OseeCoreException {
- TeamDefinitionArtifact topTeamDef = getTopTeamDefinition();
- if (topTeamDef == null) {
- return java.util.Collections.emptyList();
- }
- return Collections.castAll(AtsUtil.getActive(
- Artifacts.getChildrenOfTypeSet(topTeamDef, TeamDefinitionArtifact.class, false), active,
- TeamDefinitionArtifact.class));
- }
-
- public static TeamDefinitionArtifact getTopTeamDefinition() throws OseeCoreException {
- return (TeamDefinitionArtifact) AtsFolderUtil.getFolder(AtsFolder.Teams);
- }
-
- public static Set<TeamDefinitionArtifact> getTeamReleaseableDefinitions(Active active) throws OseeCoreException {
- Set<TeamDefinitionArtifact> teamDefs = new HashSet<TeamDefinitionArtifact>();
- for (TeamDefinitionArtifact teamDef : getTeamDefinitions(active)) {
- if (teamDef.getVersionsArtifacts().size() > 0) {
- teamDefs.add(teamDef);
- }
- }
- return teamDefs;
- }
-
- public static Collection<TeamDefinitionArtifact> getImpactedTeamDefs(Collection<ActionableItemArtifact> aias) throws OseeCoreException {
- Set<TeamDefinitionArtifact> resultTeams = new HashSet<TeamDefinitionArtifact>();
- for (ActionableItemArtifact aia : aias) {
- resultTeams.addAll(getImpactedTeamDefInherited(aia));
- }
- return resultTeams;
- }
-
- private static List<TeamDefinitionArtifact> getImpactedTeamDefInherited(ActionableItemArtifact aia) throws OseeCoreException {
- if (aia.getRelatedArtifacts(AtsRelationTypes.TeamActionableItem_Team).size() > 0) {
- return aia.getRelatedArtifacts(AtsRelationTypes.TeamActionableItem_Team, TeamDefinitionArtifact.class);
- }
- Artifact parentArt = aia.getParent();
- if (parentArt instanceof ActionableItemArtifact) {
- return getImpactedTeamDefInherited((ActionableItemArtifact) parentArt);
- }
- return java.util.Collections.emptyList();
- }
-
- public static Set<TeamDefinitionArtifact> getTeamsFromItemAndChildren(ActionableItemArtifact aia) throws OseeCoreException {
- Set<TeamDefinitionArtifact> aiaTeams = new HashSet<TeamDefinitionArtifact>();
- getTeamFromItemAndChildren(aia, aiaTeams);
- return aiaTeams;
- }
-
- public static Set<TeamDefinitionArtifact> getTeamsFromItemAndChildren(TeamDefinitionArtifact teamDef) throws OseeCoreException {
- Set<TeamDefinitionArtifact> teamDefs = new HashSet<TeamDefinitionArtifact>();
- teamDefs.add(teamDef);
- for (Artifact art : teamDef.getChildren()) {
- if (art instanceof TeamDefinitionArtifact) {
- teamDefs.addAll(getTeamsFromItemAndChildren((TeamDefinitionArtifact) art));
- }
- }
- return teamDefs;
- }
-
- private static void getTeamFromItemAndChildren(ActionableItemArtifact aia, Set<TeamDefinitionArtifact> aiaTeams) throws OseeCoreException {
- if (aia.getRelatedArtifacts(AtsRelationTypes.TeamActionableItem_Team).size() > 0) {
- aiaTeams.addAll(aia.getRelatedArtifacts(AtsRelationTypes.TeamActionableItem_Team, TeamDefinitionArtifact.class));
- }
- for (Artifact childArt : aia.getChildren()) {
- if (childArt instanceof ActionableItemArtifact) {
- getTeamFromItemAndChildren((ActionableItemArtifact) childArt, aiaTeams);
- }
- }
- }
-
- public double getManDayHrsFromItemAndChildren() {
- return getHoursPerWorkDayFromItemAndChildren(this);
- }
-
- public WorkFlowDefinition getWorkFlowDefinition() throws OseeCoreException {
- Artifact teamDef = getTeamDefinitionHoldingWorkFlow();
- if (teamDef == null) {
- return null;
- }
- Artifact workFlowArt = null;
- for (Artifact artifact : teamDef.getRelatedArtifacts(CoreRelationTypes.WorkItem__Child, Artifact.class)) {
- if (artifact.isOfType(CoreArtifactTypes.WorkFlowDefinition)) {
- if (workFlowArt != null) {
- OseeLog.log(
- AtsPlugin.class,
- Level.SEVERE,
- "Multiple workflows found where only one expected for Team Definition " + getHumanReadableId() + " - " + getName());
- }
- workFlowArt = artifact;
- }
- }
- if (workFlowArt == null) {
- return null;
- }
- return (WorkFlowDefinition) WorkItemDefinitionFactory.getWorkItemDefinition(workFlowArt.getName());
- }
-
- /**
- * Return rules associated with team definition . Use StateMachineArtifact.getWorkRulesStartsWith to acquire these
- * and work page rules and workflow rules.
- */
- public Collection<WorkRuleDefinition> getWorkRulesStartsWith(String ruleId) throws OseeCoreException {
- Set<WorkRuleDefinition> workRules = new HashSet<WorkRuleDefinition>();
- if (!Strings.isValid(ruleId)) {
- return workRules;
- }
- // Get work rules from team definition
- for (WorkRuleDefinition workRuleDefinition : getWorkRules()) {
- if (!workRuleDefinition.getId().equals("") && workRuleDefinition.getId().startsWith(ruleId)) {
- workRules.add(workRuleDefinition);
- }
- }
-
- return workRules;
- }
-
- public Collection<WorkRuleDefinition> getWorkRules() throws OseeCoreException {
- Set<WorkRuleDefinition> workRules = new HashSet<WorkRuleDefinition>();
- // Get work rules from team definition
- for (Artifact art : getRelatedArtifacts(CoreRelationTypes.WorkItem__Child)) {
- if (art.isOfType(CoreArtifactTypes.WorkRuleDefinition)) {
+ return verArt; + } + } + return null; + } + + public Collection<VersionArtifact> getVersionsFromTeamDefHoldingVersions(VersionReleaseType releaseType) throws OseeCoreException { + TeamDefinitionArtifact teamDef = getTeamDefinitionHoldingVersions(); + if (teamDef == null) { + return new ArrayList<VersionArtifact>(); + } + return teamDef.getVersionsArtifacts(releaseType); + } + + public static List<TeamDefinitionArtifact> getTeamDefinitions(Active active) throws OseeCoreException { + return Collections.castAll(AtsCacheManager.getArtifactsByActive( + ArtifactTypeManager.getType(AtsArtifactTypes.TeamDefinition), active)); + } + + public static List<TeamDefinitionArtifact> getTeamTopLevelDefinitions(Active active) throws OseeCoreException { + TeamDefinitionArtifact topTeamDef = getTopTeamDefinition(); + if (topTeamDef == null) { + return java.util.Collections.emptyList(); + } + return Collections.castAll(AtsUtil.getActive( + Artifacts.getChildrenOfTypeSet(topTeamDef, TeamDefinitionArtifact.class, false), active, + TeamDefinitionArtifact.class)); + } + + public static TeamDefinitionArtifact getTopTeamDefinition() throws OseeCoreException { + return (TeamDefinitionArtifact) AtsFolderUtil.getFolder(AtsFolder.Teams); + } + + public static Set<TeamDefinitionArtifact> getTeamReleaseableDefinitions(Active active) throws OseeCoreException { + Set<TeamDefinitionArtifact> teamDefs = new HashSet<TeamDefinitionArtifact>(); + for (TeamDefinitionArtifact teamDef : getTeamDefinitions(active)) { + if (teamDef.getVersionsArtifacts().size() > 0) { + teamDefs.add(teamDef); + } + } + return teamDefs; + } + + public static Collection<TeamDefinitionArtifact> getImpactedTeamDefs(Collection<ActionableItemArtifact> aias) throws OseeCoreException { + Set<TeamDefinitionArtifact> resultTeams = new HashSet<TeamDefinitionArtifact>(); + for (ActionableItemArtifact aia : aias) { + resultTeams.addAll(getImpactedTeamDefInherited(aia)); + } + return resultTeams; + } + + private static List<TeamDefinitionArtifact> getImpactedTeamDefInherited(ActionableItemArtifact aia) throws OseeCoreException { + if (aia.getRelatedArtifacts(AtsRelationTypes.TeamActionableItem_Team).size() > 0) { + return aia.getRelatedArtifacts(AtsRelationTypes.TeamActionableItem_Team, TeamDefinitionArtifact.class); + } + Artifact parentArt = aia.getParent(); + if (parentArt instanceof ActionableItemArtifact) { + return getImpactedTeamDefInherited((ActionableItemArtifact) parentArt); + } + return java.util.Collections.emptyList(); + } + + public static Set<TeamDefinitionArtifact> getTeamsFromItemAndChildren(ActionableItemArtifact aia) throws OseeCoreException { + Set<TeamDefinitionArtifact> aiaTeams = new HashSet<TeamDefinitionArtifact>(); + getTeamFromItemAndChildren(aia, aiaTeams); + return aiaTeams; + } + + public static Set<TeamDefinitionArtifact> getTeamsFromItemAndChildren(TeamDefinitionArtifact teamDef) throws OseeCoreException { + Set<TeamDefinitionArtifact> teamDefs = new HashSet<TeamDefinitionArtifact>(); + teamDefs.add(teamDef); + for (Artifact art : teamDef.getChildren()) { + if (art instanceof TeamDefinitionArtifact) { + teamDefs.addAll(getTeamsFromItemAndChildren((TeamDefinitionArtifact) art)); + } + } + return teamDefs; + } + + private static void getTeamFromItemAndChildren(ActionableItemArtifact aia, Set<TeamDefinitionArtifact> aiaTeams) throws OseeCoreException { + if (aia.getRelatedArtifacts(AtsRelationTypes.TeamActionableItem_Team).size() > 0) { + aiaTeams.addAll(aia.getRelatedArtifacts(AtsRelationTypes.TeamActionableItem_Team, TeamDefinitionArtifact.class)); + } + for (Artifact childArt : aia.getChildren()) { + if (childArt instanceof ActionableItemArtifact) { + getTeamFromItemAndChildren((ActionableItemArtifact) childArt, aiaTeams); + } + } + } + + public double getManDayHrsFromItemAndChildren() { + return getHoursPerWorkDayFromItemAndChildren(this); + } + + public WorkFlowDefinition getWorkFlowDefinition() throws OseeCoreException { + Artifact teamDef = getTeamDefinitionHoldingWorkFlow(); + if (teamDef == null) { + return null; + } + Artifact workFlowArt = null; + for (Artifact artifact : teamDef.getRelatedArtifacts(CoreRelationTypes.WorkItem__Child, Artifact.class)) { + if (artifact.isOfType(CoreArtifactTypes.WorkFlowDefinition)) { + if (workFlowArt != null) { + OseeLog.log( + AtsPlugin.class, + Level.SEVERE, + "Multiple workflows found where only one expected for Team Definition " + getHumanReadableId() + " - " + getName()); + } + workFlowArt = artifact; + } + } + if (workFlowArt == null) { + return null; + } + return (WorkFlowDefinition) WorkItemDefinitionFactory.getWorkItemDefinition(workFlowArt.getName()); + } + + /** + * Return rules associated with team definition . Use StateMachineArtifact.getWorkRulesStartsWith to acquire these + * and work page rules and workflow rules. + */ + public Collection<WorkRuleDefinition> getWorkRulesStartsWith(String ruleId) throws OseeCoreException { + Set<WorkRuleDefinition> workRules = new HashSet<WorkRuleDefinition>(); + if (!Strings.isValid(ruleId)) { + return workRules; + } + // Get work rules from team definition + for (WorkRuleDefinition workRuleDefinition : getWorkRules()) { + if (!workRuleDefinition.getId().equals("") && workRuleDefinition.getId().startsWith(ruleId)) { + workRules.add(workRuleDefinition); + } + } + + return workRules; + } + + public Collection<WorkRuleDefinition> getWorkRules() throws OseeCoreException { + Set<WorkRuleDefinition> workRules = new HashSet<WorkRuleDefinition>(); + // Get work rules from team definition + for (Artifact art : getRelatedArtifacts(CoreRelationTypes.WorkItem__Child)) { + if (art.isOfType(CoreArtifactTypes.WorkRuleDefinition)) { String id = art.getSoleAttributeValue(CoreAttributeTypes.WorkId, ""); - if (Strings.isValid(id)) {
- workRules.add((WorkRuleDefinition) WorkItemDefinitionFactory.getWorkItemDefinition(id));
- }
- }
- }
-
- return workRules;
- }
-
- /**
- * If hours per work day attribute is set, use it, otherwise, walk up the Team Definition tree. Value used in
- * calculations.
- */
- public double getHoursPerWorkDayFromItemAndChildren(TeamDefinitionArtifact teamDef) {
- try {
+ if (Strings.isValid(id)) { + workRules.add((WorkRuleDefinition) WorkItemDefinitionFactory.getWorkItemDefinition(id)); + } + } + } + + return workRules; + } + + /** + * If hours per work day attribute is set, use it, otherwise, walk up the Team Definition tree. Value used in + * calculations. + */ + public double getHoursPerWorkDayFromItemAndChildren(TeamDefinitionArtifact teamDef) { + try { Double manDaysHrs = teamDef.getSoleAttributeValue(AtsAttributeTypes.HoursPerWorkDay, 0.0); - if (manDaysHrs != null && manDaysHrs != 0) {
- return manDaysHrs;
- }
- if (teamDef.getParent() != null && teamDef.getParent() instanceof TeamDefinitionArtifact) {
- return teamDef.getHoursPerWorkDayFromItemAndChildren((TeamDefinitionArtifact) teamDef.getParent());
- }
- return StateMachineArtifact.DEFAULT_HOURS_PER_WORK_DAY;
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- return 0.0;
- }
-
- /**
- * Return ONLY leads configured for this TeamDefinitionArtifact. Depending on the use, like creating new actions, the
- * assignees (or Leads) are determined first from users configured as leads of individual actionable items and only
- * if that returns no leads, THEN default to using the leads configured for the TeamDefinition. In these cases, use
- * getLeads(Collection<ActionableItemArtifact>) instead.
- *
- * @return users configured as leads for this TeamDefinitionArtifact
- * @throws OseeCoreException
- */
- public Collection<User> getLeads() throws OseeCoreException {
- return getRelatedArtifacts(AtsRelationTypes.TeamLead_Lead, User.class);
- }
-
- public Collection<User> getPrivilegedMembers() throws OseeCoreException {
- return getRelatedArtifacts(AtsRelationTypes.PrivilegedMember_Member, User.class);
- }
-
- /**
- * Returns leads configured first by ActionableItems and only if this is an empty set, THEN defaults to those
- * configured by TeamDefinitions. Use getLeads() to only get the leads configured for this TeamDefinitionArtifact.
- *
- * @param actionableItems
- * @return users configured as leads by ActionableItems, then by TeamDefinition
- */
- public Collection<User> getLeads(Collection<ActionableItemArtifact> actionableItems) throws OseeCoreException {
- Set<User> leads = new HashSet<User>();
- for (ActionableItemArtifact aia : actionableItems) {
- if (aia.getImpactedTeamDefs().contains(this)) {
- // If leads are specified for this aia, add them
- if (aia.getLeads().size() > 0) {
- leads.addAll(aia.getLeads());
- } else {
- for (TeamDefinitionArtifact teamDef : aia.getImpactedTeamDefs()) {
- leads.addAll(teamDef.getLeads());
- }
- }
- }
- }
- if (leads.isEmpty()) {
- leads.addAll(getLeads());
- }
- return leads;
- }
-
- @SuppressWarnings("unchecked")
- public Collection<User> getMembersAndLeads() throws OseeCoreException {
- return Collections.setUnion(getMembers(), getLeads());
- }
-
- public Collection<User> getMembers() throws OseeCoreException {
- return getRelatedArtifacts(AtsRelationTypes.TeamMember_Member, User.class);
- }
-
- public VersionArtifact getVersionArtifact(String name, boolean create) throws OseeCoreException {
- for (VersionArtifact verArt : getVersionsArtifacts()) {
- if (verArt.getName().equals(name)) {
- return verArt;
- }
- }
- if (create) {
- return createVersion(name);
- }
- return null;
- }
-
- public VersionArtifact createVersion(String name) throws OseeCoreException {
- VersionArtifact versionArt =
- (VersionArtifact) ArtifactTypeManager.addArtifact(AtsArtifactTypes.Version, AtsUtil.getAtsBranch(), name);
- addRelation(AtsRelationTypes.TeamDefinitionToVersion_Version, versionArt);
- return versionArt;
- }
-
- public Collection<VersionArtifact> getVersionsArtifacts() throws OseeCoreException {
- return getRelatedArtifacts(AtsRelationTypes.TeamDefinitionToVersion_Version, VersionArtifact.class);
- }
-
- public Collection<VersionArtifact> getVersionsArtifacts(VersionReleaseType releaseType) throws OseeCoreException {
- ArrayList<VersionArtifact> versions = new ArrayList<VersionArtifact>();
- for (VersionArtifact version : getVersionsArtifacts()) {
- if (version.isReleased()) {
- if (releaseType == VersionReleaseType.Released || releaseType == VersionReleaseType.Both) {
- versions.add(version);
- }
- } else if (version.isVersionLocked()) {
- if (releaseType == VersionReleaseType.VersionLocked || releaseType == VersionReleaseType.Both) {
- versions.add(version);
- }
- } else {
- if (releaseType == VersionReleaseType.UnReleased || releaseType == VersionReleaseType.Both) {
- versions.add(version);
- }
- }
- }
- return versions;
- }
-
- public boolean isTeamUsesVersions() throws OseeCoreException {
+ if (manDaysHrs != null && manDaysHrs != 0) { + return manDaysHrs; + } + if (teamDef.getParent() != null && teamDef.getParent() instanceof TeamDefinitionArtifact) { + return teamDef.getHoursPerWorkDayFromItemAndChildren((TeamDefinitionArtifact) teamDef.getParent()); + } + return StateMachineArtifact.DEFAULT_HOURS_PER_WORK_DAY; + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + return 0.0; + } + + /** + * Return ONLY leads configured for this TeamDefinitionArtifact. Depending on the use, like creating new actions, the + * assignees (or Leads) are determined first from users configured as leads of individual actionable items and only + * if that returns no leads, THEN default to using the leads configured for the TeamDefinition. In these cases, use + * getLeads(Collection<ActionableItemArtifact>) instead. + * + * @return users configured as leads for this TeamDefinitionArtifact + * @throws OseeCoreException + */ + public Collection<User> getLeads() throws OseeCoreException { + return getRelatedArtifacts(AtsRelationTypes.TeamLead_Lead, User.class); + } + + public Collection<User> getPrivilegedMembers() throws OseeCoreException { + return getRelatedArtifacts(AtsRelationTypes.PrivilegedMember_Member, User.class); + } + + /** + * Returns leads configured first by ActionableItems and only if this is an empty set, THEN defaults to those + * configured by TeamDefinitions. Use getLeads() to only get the leads configured for this TeamDefinitionArtifact. + * + * @return users configured as leads by ActionableItems, then by TeamDefinition + */ + public Collection<User> getLeads(Collection<ActionableItemArtifact> actionableItems) throws OseeCoreException { + Set<User> leads = new HashSet<User>(); + for (ActionableItemArtifact aia : actionableItems) { + if (aia.getImpactedTeamDefs().contains(this)) { + // If leads are specified for this aia, add them + if (aia.getLeads().size() > 0) { + leads.addAll(aia.getLeads()); + } else { + for (TeamDefinitionArtifact teamDef : aia.getImpactedTeamDefs()) { + leads.addAll(teamDef.getLeads()); + } + } + } + } + if (leads.isEmpty()) { + leads.addAll(getLeads()); + } + return leads; + } + + @SuppressWarnings("unchecked") + public Collection<User> getMembersAndLeads() throws OseeCoreException { + return Collections.setUnion(getMembers(), getLeads()); + } + + public Collection<User> getMembers() throws OseeCoreException { + return getRelatedArtifacts(AtsRelationTypes.TeamMember_Member, User.class); + } + + public VersionArtifact getVersionArtifact(String name, boolean create) throws OseeCoreException { + for (VersionArtifact verArt : getVersionsArtifacts()) { + if (verArt.getName().equals(name)) { + return verArt; + } + } + if (create) { + return createVersion(name); + } + return null; + } + + public VersionArtifact createVersion(String name) throws OseeCoreException { + VersionArtifact versionArt = + (VersionArtifact) ArtifactTypeManager.addArtifact(AtsArtifactTypes.Version, AtsUtil.getAtsBranch(), name); + addRelation(AtsRelationTypes.TeamDefinitionToVersion_Version, versionArt); + return versionArt; + } + + public Collection<VersionArtifact> getVersionsArtifacts() throws OseeCoreException { + return getRelatedArtifacts(AtsRelationTypes.TeamDefinitionToVersion_Version, VersionArtifact.class); + } + + public Collection<VersionArtifact> getVersionsArtifacts(VersionReleaseType releaseType) throws OseeCoreException { + ArrayList<VersionArtifact> versions = new ArrayList<VersionArtifact>(); + for (VersionArtifact version : getVersionsArtifacts()) { + if (version.isReleased()) { + if (releaseType == VersionReleaseType.Released || releaseType == VersionReleaseType.Both) { + versions.add(version); + } + } else if (version.isVersionLocked()) { + if (releaseType == VersionReleaseType.VersionLocked || releaseType == VersionReleaseType.Both) { + versions.add(version); + } + } else { + if (releaseType == VersionReleaseType.UnReleased || releaseType == VersionReleaseType.Both) { + versions.add(version); + } + } + } + return versions; + } + + public boolean isTeamUsesVersions() throws OseeCoreException { return getSoleAttributeValue(AtsAttributeTypes.TeamUsesVersions, false); - }
-
- public boolean isActionable() throws OseeCoreException {
+ } + + public boolean isActionable() throws OseeCoreException { return getSoleAttributeValue(AtsAttributeTypes.Actionable, false); - }
-
- public void addWorkRule(String ruleId) throws OseeCoreException {
- if (!hasWorkRule(ruleId)) {
- Artifact artifact = WorkItemDefinitionFactory.getWorkItemDefinitionArtifact(ruleId);
- if (artifact == null) {
- throw new OseeArgumentException("Rule \"" + ruleId + "\" does not exist.");
- } else {
- addRelation(CoreRelationTypes.WorkItem__Child, artifact);
- }
- }
- }
-
- public boolean hasWorkRule(String ruleId) throws OseeCoreException {
- for (Artifact art : getRelatedArtifacts(CoreRelationTypes.WorkItem__Child)) {
- if (art.getName().equals(ruleId)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Returns the branch associated with this team. If this team does not have a branch associated then the parent team
- * will be asked, this results in a recursive look at parent teams until a parent artifact has a related branch or
- * the parent of a team is not a team. <br/>
- * <br/>
- * If no branch is associated then null will be returned.
- */
- public Branch getTeamBranch() throws OseeCoreException {
+ } + + public void addWorkRule(String ruleId) throws OseeCoreException { + if (!hasWorkRule(ruleId)) { + Artifact artifact = WorkItemDefinitionFactory.getWorkItemDefinitionArtifact(ruleId); + if (artifact == null) { + throw new OseeArgumentException("Rule \"" + ruleId + "\" does not exist."); + } else { + addRelation(CoreRelationTypes.WorkItem__Child, artifact); + } + } + } + + public boolean hasWorkRule(String ruleId) throws OseeCoreException { + for (Artifact art : getRelatedArtifacts(CoreRelationTypes.WorkItem__Child)) { + if (art.getName().equals(ruleId)) { + return true; + } + } + return false; + } + + /** + * Returns the branch associated with this team. If this team does not have a branch associated then the parent team + * will be asked, this results in a recursive look at parent teams until a parent artifact has a related branch or + * the parent of a team is not a team. <br/> + * <br/> + * If no branch is associated then null will be returned. + */ + public Branch getTeamBranch() throws OseeCoreException { String guid = getSoleAttributeValue(AtsAttributeTypes.BaselineBranchGuid, null); - if (GUID.isValid(guid)) {
- return BranchManager.getBranchByGuid(guid);
- } else {
- Artifact parent = getParent();
- if (parent instanceof TeamDefinitionArtifact) {
- return ((TeamDefinitionArtifact) parent).getTeamBranch();
- }
- }
- return null;
- }
-
- public static Set<TeamDefinitionArtifact> getTeamDefinitions(Collection<String> teamDefNames) throws OseeCoreException {
- Set<TeamDefinitionArtifact> teamDefs = new HashSet<TeamDefinitionArtifact>();
- for (String teamDefName : teamDefNames) {
- for (Artifact artifact : AtsCacheManager.getArtifactsByName(
- ArtifactTypeManager.getType(AtsArtifactTypes.TeamDefinition), teamDefName)) {
- teamDefs.add((TeamDefinitionArtifact) artifact);
- }
- }
- return teamDefs;
- }
-
- @Override
- public String getFullDisplayName() {
- return getName();
- }
-
-}
+ if (GUID.isValid(guid)) { + return BranchManager.getBranchByGuid(guid); + } else { + Artifact parent = getParent(); + if (parent instanceof TeamDefinitionArtifact) { + return ((TeamDefinitionArtifact) parent).getTeamBranch(); + } + } + return null; + } + + public static Set<TeamDefinitionArtifact> getTeamDefinitions(Collection<String> teamDefNames) throws OseeCoreException { + Set<TeamDefinitionArtifact> teamDefs = new HashSet<TeamDefinitionArtifact>(); + for (String teamDefName : teamDefNames) { + for (Artifact artifact : AtsCacheManager.getArtifactsByName( + ArtifactTypeManager.getType(AtsArtifactTypes.TeamDefinition), teamDefName)) { + teamDefs.add((TeamDefinitionArtifact) artifact); + } + } + return teamDefs; + } + + @Override + public String getFullDisplayName() { + return getName(); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TeamWorkFlowArtifact.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TeamWorkFlowArtifact.java index 03f7ad8531b..da037d8aeed 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TeamWorkFlowArtifact.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TeamWorkFlowArtifact.java @@ -1,598 +1,598 @@ -/*******************************************************************************
- * 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.artifact;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.nebula.widgets.xviewer.XViewerCells;
-import org.eclipse.osee.ats.config.AtsCacheManager;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsBranchManager;
-import org.eclipse.osee.ats.util.AtsPriority.PriorityType;
-import org.eclipse.osee.ats.util.AtsRelationTypes;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.ats.util.widgets.ReviewManager;
-import org.eclipse.osee.ats.util.widgets.XActionableItemsDam;
-import org.eclipse.osee.ats.util.widgets.dialog.AICheckTreeDialog;
-import org.eclipse.osee.ats.workflow.item.AtsWorkDefinitions.RuleWorkItemId;
-import org.eclipse.osee.framework.core.enums.Active;
-import org.eclipse.osee.framework.core.exception.OseeArgumentException;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeDataStoreException;
-import org.eclipse.osee.framework.core.exception.OseeStateException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.core.model.type.ArtifactType;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.UserManager;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
-import org.eclipse.osee.framework.skynet.core.artifact.IATSStateMachineArtifact;
-import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
-import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.skynet.util.ChangeType;
-import org.eclipse.osee.framework.ui.skynet.widgets.IBranchArtifact;
-import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinition;
-import org.eclipse.osee.framework.ui.swt.Displays;
-
-/**
- * @author Donald G. Dunne
- */
-public class TeamWorkFlowArtifact extends TaskableStateMachineArtifact implements IBranchArtifact, IATSStateMachineArtifact {
-
- private XActionableItemsDam actionableItemsDam;
- private boolean targetedErrorLogged = false;
- private final AtsBranchManager branchMgr;
- public static enum DefaultTeamState {
- Endorse,
- Analyze,
- Authorize,
- Implement,
- Completed,
- Cancelled
- }
-
- public TeamWorkFlowArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException {
- super(parentFactory, guid, humanReadableId, branch, artifactType);
- registerAtsWorldRelation(AtsRelationTypes.TeamWorkflowToReview_Review);
- branchMgr = new AtsBranchManager(this);
- }
-
- @Override
- public void getSmaArtifactsOneLevel(StateMachineArtifact smaArtifact, Set<Artifact> artifacts) throws OseeCoreException {
- super.getSmaArtifactsOneLevel(smaArtifact, artifacts);
- try {
- if (getTargetedForVersion() != null) {
- artifacts.add(getTargetedForVersion());
- }
- artifacts.addAll(ReviewManager.getReviews(this));
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- @Override
- public String getArtifactSuperTypeName() {
- return "Team Workflow";
- }
-
- @Override
- public void saveSMA(SkynetTransaction transaction) {
- super.saveSMA(transaction);
- try {
- getParentActionArtifact().resetAttributesOffChildren(transaction);
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Can't reset Action parent of children", ex);
- }
- }
-
- @Override
- public String getDescription() {
- try {
- return getSoleAttributeValue(AtsAttributeTypes.Description, "");
- } catch (Exception ex) {
- return "Error: " + ex.getLocalizedMessage();
- }
- }
-
- @Override
- public boolean isValidationRequired() throws OseeCoreException {
- return getSoleAttributeValue(AtsAttributeTypes.ValidationRequired, false);
- }
-
- @Override
- public int getWorldViewPercentRework() throws OseeCoreException {
- return getSoleAttributeValue(AtsAttributeTypes.PercentRework, 0);
- }
-
- @Override
- public Set<User> getPrivilegedUsers() {
- Set<User> users = new HashSet<User>();
- try {
- addPriviledgedUsersUpTeamDefinitionTree(getTeamDefinition(), users);
-
- WorkPageDefinition workPageDefinition = getWorkPageDefinition();
-
- // Add user if allowing privileged edit to all users
- if (!users.contains(UserManager.getUser()) && (workPageDefinition.hasWorkRule(RuleWorkItemId.atsAllowPriviledgedEditToAll.name()) || getTeamDefinition().hasWorkRule(
- RuleWorkItemId.atsAllowPriviledgedEditToAll.name()))) {
- users.add(UserManager.getUser());
- }
-
- // Add user if user is team member and rule exists
- if (!users.contains(UserManager.getUser()) && (workPageDefinition.hasWorkRule(RuleWorkItemId.atsAllowPriviledgedEditToTeamMember.name()) || getTeamDefinition().hasWorkRule(
- RuleWorkItemId.atsAllowPriviledgedEditToTeamMember.name()))) {
- if (getTeamDefinition().getMembers().contains(UserManager.getUser())) {
- users.add(UserManager.getUser());
- }
- }
-
- // Add user if team member is originator and rule exists
- if (!users.contains(UserManager.getUser()) && (workPageDefinition.hasWorkRule(RuleWorkItemId.atsAllowPriviledgedEditToTeamMemberAndOriginator.name()) || getTeamDefinition().hasWorkRule(
- RuleWorkItemId.atsAllowPriviledgedEditToTeamMemberAndOriginator.name()))) {
- if (getOriginator().equals(UserManager.getUser()) && getTeamDefinition().getMembers().contains(
- UserManager.getUser())) {
- users.add(UserManager.getUser());
- }
- }
-
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- return users;
- }
-
- @Override
- public String getEditorTitle() throws OseeCoreException {
- try {
- if (getWorldViewTargetedVersion() != null) {
- return getWorldViewType() + ": " + "[" + getWorldViewTargetedVersionStr() + "] - " + getName();
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- return super.getEditorTitle();
- }
-
- @Override
- public void onInitializationComplete() throws OseeCoreException {
- super.onInitializationComplete();
- initializeSMA();
- }
-
- @Override
- protected void initializeSMA() throws OseeCoreException {
- super.initializeSMA();
- actionableItemsDam = new XActionableItemsDam(this);
- }
-
- public ChangeType getChangeType() throws OseeCoreException {
- return ChangeType.getChangeType(getSoleAttributeValue(AtsAttributeTypes.ChangeType, ""));
- }
-
- public void setChangeType(ChangeType type) throws OseeCoreException {
- setSoleAttributeValue(AtsAttributeTypes.ChangeType, type.name());
- }
-
- public PriorityType getPriority() throws OseeCoreException {
- return PriorityType.getPriority(getSoleAttributeValue(AtsAttributeTypes.PriorityType, ""));
- }
-
- public void setPriority(PriorityType type) throws OseeCoreException {
- setSoleAttributeValue(AtsAttributeTypes.PriorityType, type.getShortName());
- }
-
- /**
- * @return Returns the actionableItemsDam.
- */
- public XActionableItemsDam getActionableItemsDam() {
- return actionableItemsDam;
- }
-
- public void setTeamDefinition(TeamDefinitionArtifact tda) throws OseeCoreException {
- this.setSoleAttributeValue(AtsAttributeTypes.TeamDefinition, tda.getGuid());
- }
-
- public TeamDefinitionArtifact getTeamDefinition() throws OseeCoreException, OseeCoreException {
- String guid = this.getSoleAttributeValue(AtsAttributeTypes.TeamDefinition, "");
- if (!Strings.isValid(guid)) {
- throw new OseeArgumentException(
- "TeamWorkflow [" + getHumanReadableId() + "] has no TeamDefinition associated.");
- }
- return AtsCacheManager.getTeamDefinitionArtifact(guid);
- }
-
- public String getTeamName() {
- try {
- return getTeamDefinition().getName();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return XViewerCells.getCellExceptionString(ex);
- }
- }
-
- @Override
- public String getWorldViewType() {
- return getTeamName() + " Workflow";
- }
-
- @Override
- public ChangeType getWorldViewChangeType() throws OseeCoreException {
- return ChangeType.getChangeType(getSoleAttributeValue(AtsAttributeTypes.ChangeType, ""));
- }
-
- @Override
- public String getWorldViewPriority() throws OseeCoreException {
- return PriorityType.getPriority(getSoleAttributeValue(AtsAttributeTypes.PriorityType, "")).getShortName();
- }
-
- @Override
- public String getWorldViewUserCommunity() throws OseeCoreException {
- return getAttributesToString(AtsAttributeTypes.UserCommunity);
- }
-
- @Override
- public String getWorldViewActionableItems() throws OseeCoreException {
- return getActionableItemsDam().getActionableItemsStr();
- }
-
- @Override
- public void atsDelete(Set<Artifact> deleteArts, Map<Artifact, Object> allRelated) throws OseeCoreException {
- super.atsDelete(deleteArts, allRelated);
- for (ReviewSMArtifact reviewArt : ReviewManager.getReviews(this)) {
- reviewArt.atsDelete(deleteArts, allRelated);
- }
- }
-
- @Override
- public String getWorldViewTeam() {
- return getTeamName();
- }
-
- @Override
- public TeamWorkFlowArtifact getParentTeamWorkflow() {
- parentTeamArt = this;
- return parentTeamArt;
- }
-
- @Override
- public Artifact getParentAtsArtifact() throws OseeCoreException {
- return getParentActionArtifact();
- }
-
- @Override
- public ActionArtifact getParentActionArtifact() throws OseeCoreException {
- if (parentAction != null) {
- return parentAction;
- }
- Collection<ActionArtifact> arts =
- getRelatedArtifacts(AtsRelationTypes.ActionToWorkflow_Action, ActionArtifact.class);
- if (arts.isEmpty()) {
- throw new OseeStateException("Team " + getHumanReadableId() + " has no parent Action");
- } else if (arts.size() > 1) {
- throw new OseeStateException("Team " + getHumanReadableId() + " has multiple parent Actions");
- }
- parentAction = arts.iterator().next();
- return parentAction;
- }
-
- @Override
- public StateMachineArtifact getParentSMA() {
- return null;
- }
-
- @Override
- public String getWorldViewTargetedVersionStr() throws OseeCoreException {
- Collection<VersionArtifact> verArts =
- getRelatedArtifacts(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version, VersionArtifact.class);
- if (verArts.isEmpty()) {
- return "";
- }
- if (verArts.size() > 1) {
- String errStr =
- "Workflow " + getHumanReadableId() + " targeted for multiple versions: " + Artifacts.commaArts(verArts);
- OseeLog.log(AtsPlugin.class, Level.SEVERE, errStr, null);
- return XViewerCells.getCellExceptionString(errStr);
- }
- VersionArtifact verArt = verArts.iterator().next();
- if (!isCompleted() && !isCancelled() && verArt.getSoleAttributeValue(AtsAttributeTypes.Released, false)) {
- String errStr =
- "Workflow " + getHumanReadableId() + " targeted for released version, but not completed: " + verArt;
- if (!targetedErrorLogged) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, errStr, null);
- targetedErrorLogged = true;
- }
- return XViewerCells.getCellExceptionString(errStr);
- }
- return verArt.getName();
- }
-
- @Override
- public VersionArtifact getWorldViewTargetedVersion() throws OseeCoreException {
- if (getRelatedArtifactsCount(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version) > 0) {
- return (VersionArtifact) getRelatedArtifact(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version);
- }
- return null;
- }
-
- @Override
- public String getHyperName() {
- try {
- return getEditorTitle();
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- return getTeamName();
- }
-
- @Override
- public String getHyperTargetVersion() {
- try {
- return getWorldViewTargetedVersionStr().equals("") ? null : getWorldViewTargetedVersionStr();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- return null;
- }
-
- @Override
- public double getManHrsPerDayPreference() throws OseeCoreException {
- try {
- return getTeamDefinition().getManDayHrsFromItemAndChildren();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- return super.getManHrsPerDayPreference();
- }
-
- public Result editActionableItems() throws OseeCoreException {
- return getParentActionArtifact().editActionableItems();
- }
-
- public Result convertActionableItems() throws OseeCoreException {
- Result toReturn = Result.FalseResult;
- AICheckTreeDialog diag =
- new AICheckTreeDialog("Convert Impacted Actionable Items",
- "NOTE: This should NOT be the normal path to changing actionable items.\n\nIf a team has " +
- //
- "determined " + "that there is NO impact and that another actionable items IS impacted:\n" +
- //
- " 1) Cancel this operation\n" + " 2) Select \"Edit Actionable Items\" to add/remove " +
- //
- "impacted items \n" + " which will create new teams as needed.\n" +
- //
- " 3) Then cancel the team that has no impacts.\n Doing this will show that the original " +
- //
- "team analyzed the impact\n" + " and determined that there was no change.\n\n" + "However, " +
- //
- "there are some cases where an impacted item was incorrectly chosen\n" + "and the original team " +
- //
- "does not need to do anything, this dialog will purge the\n" + "team from the DB as if it was " +
- //
- "never chosen.\n\n" + "Current Actionable Item(s): " + getWorldViewActionableItems() + "\n" +
- //
- "Current Team: " + getTeamDefinition().getName() + "\n" +
- //
- "Select SINGLE Actionable Item below to convert this workflow to.\n\n" +
- //
- "You will be prompted to confirm this conversion.", Active.Both);
-
- diag.setInput(ActionableItemArtifact.getTopLevelActionableItems(Active.Both));
- if (diag.open() != 0) {
- return Result.FalseResult;
- }
- if (diag.getChecked().isEmpty()) {
- return new Result("At least one actionable item must must be selected.");
- }
- if (diag.getChecked().size() > 1) {
- return new Result("Only ONE actionable item can be selected for converts");
- }
- ActionableItemArtifact selectedAia = diag.getChecked().iterator().next();
- Collection<TeamDefinitionArtifact> teamDefs =
- ActionableItemArtifact.getImpactedTeamDefs(Arrays.asList(selectedAia));
- if (teamDefs.size() != 1) {
- toReturn = new Result("Single team can not retrieved for " + selectedAia.getName());
- } else {
- TeamDefinitionArtifact newTeamDef = teamDefs.iterator().next();
- if (newTeamDef.equals(getTeamDefinition())) {
- toReturn =
- new Result(
- "Actionable Item selected belongs to same team as currently selected team.\n" + "Use \"Edit Actionable Items\" instaed.");
- } else {
- StringBuffer sb = new StringBuffer();
- sb.append("Converting...");
- sb.append("\nActionable Item(s): " + getWorldViewActionableItems());
- sb.append("\nTeam: " + getTeamDefinition().getName());
- sb.append("\nto\nActionable Item(s): " + selectedAia);
- sb.append("\nTeam: " + newTeamDef.getName());
- if (MessageDialog.openConfirm(Displays.getActiveShell(), "Confirm Convert", sb.toString())) {
- Set<ActionableItemArtifact> toProcess = new HashSet<ActionableItemArtifact>();
- toProcess.add(selectedAia);
- toReturn = actionableItemsTx(AtsUtil.getAtsBranch(), toProcess, newTeamDef);
- }
- }
- }
- return toReturn;
- }
-
- @Override
- public String getWorldViewDescription() throws OseeCoreException {
- return getSoleAttributeValue(AtsAttributeTypes.Description, "");
- }
-
- /**
- * If targeted for version exists, return that estimated date. Else, if attribute is set, return that date. Else
- * null.
- */
- @Override
- public Date getWorldViewEstimatedReleaseDate() throws OseeCoreException {
- Collection<VersionArtifact> vers =
- getRelatedArtifacts(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version, VersionArtifact.class);
- Date date = null;
- if (vers.size() > 0) {
- date = vers.iterator().next().getEstimatedReleaseDate();
- if (date == null) {
- date = getSoleAttributeValue(AtsAttributeTypes.EstimatedReleaseDate, null);
- }
- } else {
- date = getSoleAttributeValue(AtsAttributeTypes.EstimatedReleaseDate, null);
- }
- return date;
- }
-
- /**
- * If targeted for version exists, return that estimated date. Else, if attribute is set, return that date. Else
- * null.
- */
- @Override
- public Date getWorldViewReleaseDate() throws OseeCoreException {
- Collection<VersionArtifact> vers =
- getRelatedArtifacts(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version, VersionArtifact.class);
- Date date = null;
- if (vers.size() > 0) {
- date = vers.iterator().next().getReleaseDate();
- if (date == null) {
- date = getSoleAttributeValue(AtsAttributeTypes.ReleaseDate, null);
- }
- } else {
- date = getSoleAttributeValue(AtsAttributeTypes.ReleaseDate, null);
- }
- return date;
- }
-
- @Override
- public Collection<User> getImplementers() throws OseeCoreException {
- return getImplementersByState(DefaultTeamState.Implement.name());
- }
-
- @Override
- public String getWorldViewDeadlineDateStr() throws OseeCoreException {
- Date date = getWorldViewDeadlineDate();
- if (date != null) {
- return XDate.getDateStr(date, XDate.MMDDYY);
- }
- return "";
- }
-
- @Override
- public Date getWorldViewDeadlineDate() throws OseeCoreException {
- return getSoleAttributeValue(AtsAttributeTypes.NeedBy, null);
- }
-
- @Override
- public double getWorldViewWeeklyBenefit() throws OseeCoreException {
- if (isAttributeTypeValid(AtsAttributeTypes.WeeklyBenefit)) {
- return 0;
- }
- String value = getSoleAttributeValue(AtsAttributeTypes.WeeklyBenefit, "");
- if (!Strings.isValid(value)) {
- return 0;
- }
- return new Float(value).doubleValue();
- }
-
- @Override
- public double getWorldViewAnnualCostAvoidance() throws OseeCoreException {
- double benefit = getWorldViewWeeklyBenefit();
- double remainHrs = getRemainHoursTotal();
- return benefit * 52 - remainHrs;
- }
-
- private Result actionableItemsTx(Branch branch, Set<ActionableItemArtifact> selectedAlias, TeamDefinitionArtifact teamDefinition) throws OseeCoreException {
- Result workResult = actionableItemsDam.setActionableItems(selectedAlias);
- if (workResult.isTrue()) {
- if (teamDefinition != null) {
- setTeamDefinition(teamDefinition);
- }
- SkynetTransaction transaction = new SkynetTransaction(branch, "Converate Actionable Item");
- getParentActionArtifact().resetAttributesOffChildren(transaction);
- persist(transaction);
- transaction.execute();
- }
- return workResult;
- }
-
- @Override
- public String getWorldViewBranchStatus() {
- try {
- if (getBranchMgr().isWorkingBranchInWork()) {
- return "Working";
- } else if (getBranchMgr().isCommittedBranchExists()) {
- if (!getBranchMgr().isAllObjectsToCommitToConfigured() || !getBranchMgr().isBranchesAllCommitted()) {
- return "Needs Commit";
- }
- return "Committed";
- }
- return "";
- } catch (Exception ex) {
- return "Exception: " + ex.getLocalizedMessage();
- }
- }
-
- @Override
- public Artifact getArtifact() {
- return this;
- }
-
- @Override
- public Branch getWorkingBranch() throws OseeCoreException {
- return getBranchMgr().getWorkingBranch();
- }
-
- @Override
- public String getWorldViewParentID() throws OseeCoreException {
- return getParentActionArtifact().getHumanReadableId();
- }
-
- @Override
- public Date getWorldViewEstimatedCompletionDate() throws OseeCoreException {
- Date date = super.getWorldViewEstimatedCompletionDate();
- if (date == null) {
- date = getWorldViewEstimatedReleaseDate();
- }
- return date;
- }
-
- public AtsBranchManager getBranchMgr() {
- return branchMgr;
- }
-
- /**
- * 5-9 character short name for UI and display purposes
- */
- public String getArtifactTypeShortName() {
- return "";
- }
-
- public String getBranchName() {
- String smaTitle = getName();
- if (smaTitle.length() > 40) {
- smaTitle = smaTitle.substring(0, 39) + "...";
- }
- if (Strings.isValid(getArtifactTypeShortName())) {
- return String.format("%s - %s - %s", getHumanReadableId(), getArtifactTypeShortName(), smaTitle);
- } else {
- return String.format("%s - %s", getHumanReadableId(), smaTitle);
- }
- }
-
-}
+/******************************************************************************* + * 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.artifact; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.logging.Level; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.nebula.widgets.xviewer.XViewerCells; +import org.eclipse.osee.ats.config.AtsCacheManager; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsBranchManager; +import org.eclipse.osee.ats.util.AtsPriority.PriorityType; +import org.eclipse.osee.ats.util.AtsRelationTypes; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.ats.util.widgets.ReviewManager; +import org.eclipse.osee.ats.util.widgets.XActionableItemsDam; +import org.eclipse.osee.ats.util.widgets.dialog.AICheckTreeDialog; +import org.eclipse.osee.ats.workflow.item.AtsWorkDefinitions.RuleWorkItemId; +import org.eclipse.osee.framework.core.enums.Active; +import org.eclipse.osee.framework.core.exception.OseeArgumentException; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeDataStoreException; +import org.eclipse.osee.framework.core.exception.OseeStateException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.type.ArtifactType; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.UserManager; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory; +import org.eclipse.osee.framework.skynet.core.artifact.IATSStateMachineArtifact; +import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction; +import org.eclipse.osee.framework.skynet.core.utility.Artifacts; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.skynet.util.ChangeType; +import org.eclipse.osee.framework.ui.skynet.widgets.IBranchArtifact; +import org.eclipse.osee.framework.ui.skynet.widgets.XDate; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinition; +import org.eclipse.osee.framework.ui.swt.Displays; + +/** + * @author Donald G. Dunne + */ +public class TeamWorkFlowArtifact extends TaskableStateMachineArtifact implements IBranchArtifact, IATSStateMachineArtifact { + + private XActionableItemsDam actionableItemsDam; + private boolean targetedErrorLogged = false; + private final AtsBranchManager branchMgr; + public static enum DefaultTeamState { + Endorse, + Analyze, + Authorize, + Implement, + Completed, + Cancelled + } + + public TeamWorkFlowArtifact(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException { + super(parentFactory, guid, humanReadableId, branch, artifactType); + registerAtsWorldRelation(AtsRelationTypes.TeamWorkflowToReview_Review); + branchMgr = new AtsBranchManager(this); + } + + @Override + public void getSmaArtifactsOneLevel(StateMachineArtifact smaArtifact, Set<Artifact> artifacts) throws OseeCoreException { + super.getSmaArtifactsOneLevel(smaArtifact, artifacts); + try { + if (getTargetedForVersion() != null) { + artifacts.add(getTargetedForVersion()); + } + artifacts.addAll(ReviewManager.getReviews(this)); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + @Override + public String getArtifactSuperTypeName() { + return "Team Workflow"; + } + + @Override + public void saveSMA(SkynetTransaction transaction) { + super.saveSMA(transaction); + try { + getParentActionArtifact().resetAttributesOffChildren(transaction); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Can't reset Action parent of children", ex); + } + } + + @Override + public String getDescription() { + try { + return getSoleAttributeValue(AtsAttributeTypes.Description, ""); + } catch (Exception ex) { + return "Error: " + ex.getLocalizedMessage(); + } + } + + @Override + public boolean isValidationRequired() throws OseeCoreException { + return getSoleAttributeValue(AtsAttributeTypes.ValidationRequired, false); + } + + @Override + public int getWorldViewPercentRework() throws OseeCoreException { + return getSoleAttributeValue(AtsAttributeTypes.PercentRework, 0); + } + + @Override + public Set<User> getPrivilegedUsers() { + Set<User> users = new HashSet<User>(); + try { + addPriviledgedUsersUpTeamDefinitionTree(getTeamDefinition(), users); + + WorkPageDefinition workPageDefinition = getWorkPageDefinition(); + + // Add user if allowing privileged edit to all users + if (!users.contains(UserManager.getUser()) && (workPageDefinition.hasWorkRule(RuleWorkItemId.atsAllowPriviledgedEditToAll.name()) || getTeamDefinition().hasWorkRule( + RuleWorkItemId.atsAllowPriviledgedEditToAll.name()))) { + users.add(UserManager.getUser()); + } + + // Add user if user is team member and rule exists + if (!users.contains(UserManager.getUser()) && (workPageDefinition.hasWorkRule(RuleWorkItemId.atsAllowPriviledgedEditToTeamMember.name()) || getTeamDefinition().hasWorkRule( + RuleWorkItemId.atsAllowPriviledgedEditToTeamMember.name()))) { + if (getTeamDefinition().getMembers().contains(UserManager.getUser())) { + users.add(UserManager.getUser()); + } + } + + // Add user if team member is originator and rule exists + if (!users.contains(UserManager.getUser()) && (workPageDefinition.hasWorkRule(RuleWorkItemId.atsAllowPriviledgedEditToTeamMemberAndOriginator.name()) || getTeamDefinition().hasWorkRule( + RuleWorkItemId.atsAllowPriviledgedEditToTeamMemberAndOriginator.name()))) { + if (getOriginator().equals(UserManager.getUser()) && getTeamDefinition().getMembers().contains( + UserManager.getUser())) { + users.add(UserManager.getUser()); + } + } + + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + return users; + } + + @Override + public String getEditorTitle() throws OseeCoreException { + try { + if (getWorldViewTargetedVersion() != null) { + return getWorldViewType() + ": " + "[" + getWorldViewTargetedVersionStr() + "] - " + getName(); + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + return super.getEditorTitle(); + } + + @Override + public void onInitializationComplete() throws OseeCoreException { + super.onInitializationComplete(); + initializeSMA(); + } + + @Override + protected void initializeSMA() throws OseeCoreException { + super.initializeSMA(); + actionableItemsDam = new XActionableItemsDam(this); + } + + public ChangeType getChangeType() throws OseeCoreException { + return ChangeType.getChangeType(getSoleAttributeValue(AtsAttributeTypes.ChangeType, "")); + } + + public void setChangeType(ChangeType type) throws OseeCoreException { + setSoleAttributeValue(AtsAttributeTypes.ChangeType, type.name()); + } + + public PriorityType getPriority() throws OseeCoreException { + return PriorityType.getPriority(getSoleAttributeValue(AtsAttributeTypes.PriorityType, "")); + } + + public void setPriority(PriorityType type) throws OseeCoreException { + setSoleAttributeValue(AtsAttributeTypes.PriorityType, type.getShortName()); + } + + /** + * @return Returns the actionableItemsDam. + */ + public XActionableItemsDam getActionableItemsDam() { + return actionableItemsDam; + } + + public void setTeamDefinition(TeamDefinitionArtifact tda) throws OseeCoreException { + this.setSoleAttributeValue(AtsAttributeTypes.TeamDefinition, tda.getGuid()); + } + + public TeamDefinitionArtifact getTeamDefinition() throws OseeCoreException, OseeCoreException { + String guid = this.getSoleAttributeValue(AtsAttributeTypes.TeamDefinition, ""); + if (!Strings.isValid(guid)) { + throw new OseeArgumentException( + "TeamWorkflow [" + getHumanReadableId() + "] has no TeamDefinition associated."); + } + return AtsCacheManager.getTeamDefinitionArtifact(guid); + } + + public String getTeamName() { + try { + return getTeamDefinition().getName(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + return XViewerCells.getCellExceptionString(ex); + } + } + + @Override + public String getWorldViewType() { + return getTeamName() + " Workflow"; + } + + @Override + public ChangeType getWorldViewChangeType() throws OseeCoreException { + return ChangeType.getChangeType(getSoleAttributeValue(AtsAttributeTypes.ChangeType, "")); + } + + @Override + public String getWorldViewPriority() throws OseeCoreException { + return PriorityType.getPriority(getSoleAttributeValue(AtsAttributeTypes.PriorityType, "")).getShortName(); + } + + @Override + public String getWorldViewUserCommunity() throws OseeCoreException { + return getAttributesToString(AtsAttributeTypes.UserCommunity); + } + + @Override + public String getWorldViewActionableItems() throws OseeCoreException { + return getActionableItemsDam().getActionableItemsStr(); + } + + @Override + public void atsDelete(Set<Artifact> deleteArts, Map<Artifact, Object> allRelated) throws OseeCoreException { + super.atsDelete(deleteArts, allRelated); + for (ReviewSMArtifact reviewArt : ReviewManager.getReviews(this)) { + reviewArt.atsDelete(deleteArts, allRelated); + } + } + + @Override + public String getWorldViewTeam() { + return getTeamName(); + } + + @Override + public TeamWorkFlowArtifact getParentTeamWorkflow() { + parentTeamArt = this; + return parentTeamArt; + } + + @Override + public Artifact getParentAtsArtifact() throws OseeCoreException { + return getParentActionArtifact(); + } + + @Override + public ActionArtifact getParentActionArtifact() throws OseeCoreException { + if (parentAction != null) { + return parentAction; + } + Collection<ActionArtifact> arts = + getRelatedArtifacts(AtsRelationTypes.ActionToWorkflow_Action, ActionArtifact.class); + if (arts.isEmpty()) { + throw new OseeStateException("Team " + getHumanReadableId() + " has no parent Action"); + } else if (arts.size() > 1) { + throw new OseeStateException("Team " + getHumanReadableId() + " has multiple parent Actions"); + } + parentAction = arts.iterator().next(); + return parentAction; + } + + @Override + public StateMachineArtifact getParentSMA() { + return null; + } + + @Override + public String getWorldViewTargetedVersionStr() throws OseeCoreException { + Collection<VersionArtifact> verArts = + getRelatedArtifacts(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version, VersionArtifact.class); + if (verArts.isEmpty()) { + return ""; + } + if (verArts.size() > 1) { + String errStr = + "Workflow " + getHumanReadableId() + " targeted for multiple versions: " + Artifacts.commaArts(verArts); + OseeLog.log(AtsPlugin.class, Level.SEVERE, errStr, null); + return XViewerCells.getCellExceptionString(errStr); + } + VersionArtifact verArt = verArts.iterator().next(); + if (!isCompleted() && !isCancelled() && verArt.getSoleAttributeValue(AtsAttributeTypes.Released, false)) { + String errStr = + "Workflow " + getHumanReadableId() + " targeted for released version, but not completed: " + verArt; + if (!targetedErrorLogged) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, errStr, null); + targetedErrorLogged = true; + } + return XViewerCells.getCellExceptionString(errStr); + } + return verArt.getName(); + } + + @Override + public VersionArtifact getWorldViewTargetedVersion() throws OseeCoreException { + if (getRelatedArtifactsCount(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version) > 0) { + return (VersionArtifact) getRelatedArtifact(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version); + } + return null; + } + + @Override + public String getHyperName() { + try { + return getEditorTitle(); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + return getTeamName(); + } + + @Override + public String getHyperTargetVersion() { + try { + return getWorldViewTargetedVersionStr().equals("") ? null : getWorldViewTargetedVersionStr(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + return null; + } + + @Override + public double getManHrsPerDayPreference() throws OseeCoreException { + try { + return getTeamDefinition().getManDayHrsFromItemAndChildren(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + return super.getManHrsPerDayPreference(); + } + + public Result editActionableItems() throws OseeCoreException { + return getParentActionArtifact().editActionableItems(); + } + + public Result convertActionableItems() throws OseeCoreException { + Result toReturn = Result.FalseResult; + AICheckTreeDialog diag = + new AICheckTreeDialog("Convert Impacted Actionable Items", + "NOTE: This should NOT be the normal path to changing actionable items.\n\nIf a team has " + + // + "determined " + "that there is NO impact and that another actionable items IS impacted:\n" + + // + " 1) Cancel this operation\n" + " 2) Select \"Edit Actionable Items\" to add/remove " + + // + "impacted items \n" + " which will create new teams as needed.\n" + + // + " 3) Then cancel the team that has no impacts.\n Doing this will show that the original " + + // + "team analyzed the impact\n" + " and determined that there was no change.\n\n" + "However, " + + // + "there are some cases where an impacted item was incorrectly chosen\n" + "and the original team " + + // + "does not need to do anything, this dialog will purge the\n" + "team from the DB as if it was " + + // + "never chosen.\n\n" + "Current Actionable Item(s): " + getWorldViewActionableItems() + "\n" + + // + "Current Team: " + getTeamDefinition().getName() + "\n" + + // + "Select SINGLE Actionable Item below to convert this workflow to.\n\n" + + // + "You will be prompted to confirm this conversion.", Active.Both); + + diag.setInput(ActionableItemArtifact.getTopLevelActionableItems(Active.Both)); + if (diag.open() != 0) { + return Result.FalseResult; + } + if (diag.getChecked().isEmpty()) { + return new Result("At least one actionable item must must be selected."); + } + if (diag.getChecked().size() > 1) { + return new Result("Only ONE actionable item can be selected for converts"); + } + ActionableItemArtifact selectedAia = diag.getChecked().iterator().next(); + Collection<TeamDefinitionArtifact> teamDefs = + ActionableItemArtifact.getImpactedTeamDefs(Arrays.asList(selectedAia)); + if (teamDefs.size() != 1) { + toReturn = new Result("Single team can not retrieved for " + selectedAia.getName()); + } else { + TeamDefinitionArtifact newTeamDef = teamDefs.iterator().next(); + if (newTeamDef.equals(getTeamDefinition())) { + toReturn = + new Result( + "Actionable Item selected belongs to same team as currently selected team.\n" + "Use \"Edit Actionable Items\" instaed."); + } else { + StringBuffer sb = new StringBuffer(); + sb.append("Converting..."); + sb.append("\nActionable Item(s): " + getWorldViewActionableItems()); + sb.append("\nTeam: " + getTeamDefinition().getName()); + sb.append("\nto\nActionable Item(s): " + selectedAia); + sb.append("\nTeam: " + newTeamDef.getName()); + if (MessageDialog.openConfirm(Displays.getActiveShell(), "Confirm Convert", sb.toString())) { + Set<ActionableItemArtifact> toProcess = new HashSet<ActionableItemArtifact>(); + toProcess.add(selectedAia); + toReturn = actionableItemsTx(AtsUtil.getAtsBranch(), toProcess, newTeamDef); + } + } + } + return toReturn; + } + + @Override + public String getWorldViewDescription() throws OseeCoreException { + return getSoleAttributeValue(AtsAttributeTypes.Description, ""); + } + + /** + * If targeted for version exists, return that estimated date. Else, if attribute is set, return that date. Else + * null. + */ + @Override + public Date getWorldViewEstimatedReleaseDate() throws OseeCoreException { + Collection<VersionArtifact> vers = + getRelatedArtifacts(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version, VersionArtifact.class); + Date date = null; + if (vers.size() > 0) { + date = vers.iterator().next().getEstimatedReleaseDate(); + if (date == null) { + date = getSoleAttributeValue(AtsAttributeTypes.EstimatedReleaseDate, null); + } + } else { + date = getSoleAttributeValue(AtsAttributeTypes.EstimatedReleaseDate, null); + } + return date; + } + + /** + * If targeted for version exists, return that estimated date. Else, if attribute is set, return that date. Else + * null. + */ + @Override + public Date getWorldViewReleaseDate() throws OseeCoreException { + Collection<VersionArtifact> vers = + getRelatedArtifacts(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version, VersionArtifact.class); + Date date = null; + if (vers.size() > 0) { + date = vers.iterator().next().getReleaseDate(); + if (date == null) { + date = getSoleAttributeValue(AtsAttributeTypes.ReleaseDate, null); + } + } else { + date = getSoleAttributeValue(AtsAttributeTypes.ReleaseDate, null); + } + return date; + } + + @Override + public Collection<User> getImplementers() throws OseeCoreException { + return getImplementersByState(DefaultTeamState.Implement.name()); + } + + @Override + public String getWorldViewDeadlineDateStr() throws OseeCoreException { + Date date = getWorldViewDeadlineDate(); + if (date != null) { + return XDate.getDateStr(date, XDate.MMDDYY); + } + return ""; + } + + @Override + public Date getWorldViewDeadlineDate() throws OseeCoreException { + return getSoleAttributeValue(AtsAttributeTypes.NeedBy, null); + } + + @Override + public double getWorldViewWeeklyBenefit() throws OseeCoreException { + if (isAttributeTypeValid(AtsAttributeTypes.WeeklyBenefit)) { + return 0; + } + String value = getSoleAttributeValue(AtsAttributeTypes.WeeklyBenefit, ""); + if (!Strings.isValid(value)) { + return 0; + } + return new Float(value).doubleValue(); + } + + @Override + public double getWorldViewAnnualCostAvoidance() throws OseeCoreException { + double benefit = getWorldViewWeeklyBenefit(); + double remainHrs = getRemainHoursTotal(); + return benefit * 52 - remainHrs; + } + + private Result actionableItemsTx(Branch branch, Set<ActionableItemArtifact> selectedAlias, TeamDefinitionArtifact teamDefinition) throws OseeCoreException { + Result workResult = actionableItemsDam.setActionableItems(selectedAlias); + if (workResult.isTrue()) { + if (teamDefinition != null) { + setTeamDefinition(teamDefinition); + } + SkynetTransaction transaction = new SkynetTransaction(branch, "Converate Actionable Item"); + getParentActionArtifact().resetAttributesOffChildren(transaction); + persist(transaction); + transaction.execute(); + } + return workResult; + } + + @Override + public String getWorldViewBranchStatus() { + try { + if (getBranchMgr().isWorkingBranchInWork()) { + return "Working"; + } else if (getBranchMgr().isCommittedBranchExists()) { + if (!getBranchMgr().isAllObjectsToCommitToConfigured() || !getBranchMgr().isBranchesAllCommitted()) { + return "Needs Commit"; + } + return "Committed"; + } + return ""; + } catch (Exception ex) { + return "Exception: " + ex.getLocalizedMessage(); + } + } + + @Override + public Artifact getArtifact() { + return this; + } + + @Override + public Branch getWorkingBranch() throws OseeCoreException { + return getBranchMgr().getWorkingBranch(); + } + + @Override + public String getWorldViewParentID() throws OseeCoreException { + return getParentActionArtifact().getHumanReadableId(); + } + + @Override + public Date getWorldViewEstimatedCompletionDate() throws OseeCoreException { + Date date = super.getWorldViewEstimatedCompletionDate(); + if (date == null) { + date = getWorldViewEstimatedReleaseDate(); + } + return date; + } + + public AtsBranchManager getBranchMgr() { + return branchMgr; + } + + /** + * 5-9 character short name for UI and display purposes + */ + public String getArtifactTypeShortName() { + return ""; + } + + public String getBranchName() { + String smaTitle = getName(); + if (smaTitle.length() > 40) { + smaTitle = smaTitle.substring(0, 39) + "..."; + } + if (Strings.isValid(getArtifactTypeShortName())) { + return String.format("%s - %s - %s", getHumanReadableId(), getArtifactTypeShortName(), smaTitle); + } else { + return String.format("%s - %s", getHumanReadableId(), smaTitle); + } + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TeamWorkflowExtensions.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TeamWorkflowExtensions.java index 70010b7f4bc..eaa749c3cc7 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TeamWorkflowExtensions.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TeamWorkflowExtensions.java @@ -1,92 +1,92 @@ -/*******************************************************************************
- * 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.artifact;
-
-import java.util.HashSet;
-import java.util.Set;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.osee.ats.actions.wizard.IAtsTeamWorkflow;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.framework.core.data.IArtifactType;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.osgi.framework.Bundle;
-
-/**
- * @author Donald G. Dunne
- */
-public class TeamWorkflowExtensions {
-
- private static TeamWorkflowExtensions instance = new TeamWorkflowExtensions();
- private static Set<IAtsTeamWorkflow> teamWorkflowExtensionItems;
-
- private TeamWorkflowExtensions() {
- instance = this;
- }
-
- public static TeamWorkflowExtensions getInstance() {
- return instance;
- }
-
- public Set<IArtifactType> getAllTeamWorkflowArtifactTypes() throws OseeCoreException {
- Set<IArtifactType> artifactTypes = new HashSet<IArtifactType>();
- artifactTypes.add(AtsArtifactTypes.TeamWorkflow);
- for (IAtsTeamWorkflow ext : getAtsTeamWorkflowExtensions()) {
- artifactTypes.addAll(ext.getTeamWorkflowArtifactNames());
- }
- return artifactTypes;
- }
-
- /*
- * due to lazy initialization, this function is non-reentrant therefore, the synchronized keyword is necessary
- */
- public synchronized Set<IAtsTeamWorkflow> getAtsTeamWorkflowExtensions() {
- if (teamWorkflowExtensionItems != null) {
- return teamWorkflowExtensionItems;
- }
- teamWorkflowExtensionItems = new HashSet<IAtsTeamWorkflow>();
-
- IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.osee.ats.AtsTeamWorkflow");
- if (point == null) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Can't access AtsTeamWorkflow extension point");
- return teamWorkflowExtensionItems;
- }
- IExtension[] extensions = point.getExtensions();
- for (IExtension extension : extensions) {
- IConfigurationElement[] elements = extension.getConfigurationElements();
- String classname = null;
- String bundleName = null;
- for (IConfigurationElement el : elements) {
- if (el.getName().equals("AtsTeamWorkflow")) {
- classname = el.getAttribute("classname");
- bundleName = el.getContributor().getName();
- if (classname != null && bundleName != null) {
- Bundle bundle = Platform.getBundle(bundleName);
- try {
- Class<?> taskClass = bundle.loadClass(classname);
- Object obj = taskClass.newInstance();
- teamWorkflowExtensionItems.add((IAtsTeamWorkflow) obj);
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Error loading AtsTeamWorkflow extension", ex);
- }
- }
- }
- }
- }
- return teamWorkflowExtensionItems;
- }
-
-}
+/******************************************************************************* + * 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.artifact; + +import java.util.HashSet; +import java.util.Set; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExtension; +import org.eclipse.core.runtime.IExtensionPoint; +import org.eclipse.core.runtime.Platform; +import org.eclipse.osee.ats.actions.wizard.IAtsTeamWorkflow; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.framework.core.data.IArtifactType; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.osgi.framework.Bundle; + +/** + * @author Donald G. Dunne + */ +public class TeamWorkflowExtensions { + + private static TeamWorkflowExtensions instance = new TeamWorkflowExtensions(); + private static Set<IAtsTeamWorkflow> teamWorkflowExtensionItems; + + private TeamWorkflowExtensions() { + instance = this; + } + + public static TeamWorkflowExtensions getInstance() { + return instance; + } + + public Set<IArtifactType> getAllTeamWorkflowArtifactTypes() throws OseeCoreException { + Set<IArtifactType> artifactTypes = new HashSet<IArtifactType>(); + artifactTypes.add(AtsArtifactTypes.TeamWorkflow); + for (IAtsTeamWorkflow ext : getAtsTeamWorkflowExtensions()) { + artifactTypes.addAll(ext.getTeamWorkflowArtifactNames()); + } + return artifactTypes; + } + + /* + * due to lazy initialization, this function is non-reentrant therefore, the synchronized keyword is necessary + */ + public synchronized Set<IAtsTeamWorkflow> getAtsTeamWorkflowExtensions() { + if (teamWorkflowExtensionItems != null) { + return teamWorkflowExtensionItems; + } + teamWorkflowExtensionItems = new HashSet<IAtsTeamWorkflow>(); + + IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.osee.ats.AtsTeamWorkflow"); + if (point == null) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Can't access AtsTeamWorkflow extension point"); + return teamWorkflowExtensionItems; + } + IExtension[] extensions = point.getExtensions(); + for (IExtension extension : extensions) { + IConfigurationElement[] elements = extension.getConfigurationElements(); + String classname = null; + String bundleName = null; + for (IConfigurationElement el : elements) { + if (el.getName().equals("AtsTeamWorkflow")) { + classname = el.getAttribute("classname"); + bundleName = el.getContributor().getName(); + if (classname != null && bundleName != null) { + Bundle bundle = Platform.getBundle(bundleName); + try { + Class<?> taskClass = bundle.loadClass(classname); + Object obj = taskClass.newInstance(); + teamWorkflowExtensionItems.add((IAtsTeamWorkflow) obj); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Error loading AtsTeamWorkflow extension", ex); + } + } + } + } + } + return teamWorkflowExtensionItems; + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/VersionArtifact.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/VersionArtifact.java index 86fde68fd52..39b85e824ff 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/VersionArtifact.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/VersionArtifact.java @@ -1,197 +1,196 @@ -/*******************************************************************************
- * 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.artifact;
-
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.logging.Level;
-import org.eclipse.osee.ats.config.AtsCacheManager;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.ats.util.AtsRelationTypes;
-import org.eclipse.osee.ats.util.widgets.commit.ICommitConfigArtifact;
-import org.eclipse.osee.framework.core.exception.ArtifactDoesNotExist;
-import org.eclipse.osee.framework.core.exception.BranchDoesNotExist;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeDataStoreException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.core.model.type.ArtifactType;
-import org.eclipse.osee.framework.jdk.core.util.GUID;
-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.ArtifactFactory;
-import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-
-public class VersionArtifact extends Artifact implements ICommitConfigArtifact {
- public static enum VersionReleaseType {
- Released,
- UnReleased,
- Both,
- VersionLocked
- };
-
- public VersionArtifact(ArtifactFactory parentFactory, String guid, String humandReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException {
- super(parentFactory, guid, humandReadableId, branch, artifactType);
- }
-
- @Override
- public Result isCreateBranchAllowed() throws OseeCoreException {
- if (getSoleAttributeValue(AtsAttributeTypes.AllowCreateBranch, false) == false) {
- return new Result(false, "Branch creation disabled for Version [" + this + "]");
- }
- if (getParentBranch() == null) {
- return new Result(false, "Parent Branch not configured for Version [" + this + "]");
- }
- return Result.TrueResult;
- }
-
- @Override
- public Result isCommitBranchAllowed() throws OseeCoreException {
- if (getSoleAttributeValue(AtsAttributeTypes.AllowCommitBranch, false) == false) {
- return new Result(false, "Version [" + this + "] not configured to allow branch commit.");
- }
- if (getParentBranch() == null) {
- return new Result(false, "Parent Branch not configured for Version [" + this + "]");
- }
- return Result.TrueResult;
- }
-
- @Override
- public Branch getParentBranch() throws OseeCoreException {
- try {
- String guid = getSoleAttributeValue(AtsAttributeTypes.BaselineBranchGuid, "");
- if (GUID.isValid(guid)) {
- return BranchManager.getBranchByGuid(guid);
- }
- } catch (BranchDoesNotExist ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- return null;
- }
-
- public TeamDefinitionArtifact getParentTeamDefinition() throws OseeCoreException {
- return getRelatedArtifacts(AtsRelationTypes.TeamDefinitionToVersion_TeamDefinition, TeamDefinitionArtifact.class).iterator().next();
- }
-
- public Boolean isReleased() throws OseeCoreException {
- return getSoleAttributeValue(AtsAttributeTypes.Released, false);
- }
-
- public Boolean isNextVersion() throws OseeCoreException {
- return getSoleAttributeValue(AtsAttributeTypes.NextVersion, false);
- }
-
- public void getParallelVersions(Set<ICommitConfigArtifact> configArts) throws OseeCoreException {
- configArts.add(this);
- for (VersionArtifact verArt : getRelatedArtifacts(AtsRelationTypes.ParallelVersion_Child, VersionArtifact.class)) {
- verArt.getParallelVersions(configArts);
- }
- }
-
- public Boolean isVersionLocked() throws OseeCoreException {
- return getSoleAttributeValue(AtsAttributeTypes.VersionLocked, false);
- }
-
- @Override
- public String toString() {
- return getName();
- }
-
- public void setReleased(boolean released) throws OseeCoreException {
- setSoleAttributeValue(AtsAttributeTypes.Released, released);
- }
-
- public void setNextVersion(boolean nextVersion) throws OseeCoreException {
- setSoleAttributeValue(AtsAttributeTypes.NextVersion, nextVersion);
- }
-
- public void setVersionLocked(boolean locked) throws OseeCoreException {
- setSoleAttributeValue(AtsAttributeTypes.VersionLocked, locked);
- }
-
- public String getFullName() throws OseeCoreException {
- return getSoleAttributeValue(AtsAttributeTypes.FullName, "");
- }
-
- public void setFullName(String name) throws OseeCoreException {
- setSoleAttributeValue(AtsAttributeTypes.FullName, name);
- }
-
- public void setDescription(String desc) throws OseeCoreException {
- setSoleAttributeValue(AtsAttributeTypes.Description, desc);
- }
-
- public Collection<TeamWorkFlowArtifact> getTargetedForTeamArtifacts() throws OseeCoreException {
- return getRelatedArtifacts(AtsRelationTypes.TeamWorkflowTargetedForVersion_Workflow, TeamWorkFlowArtifact.class);
- }
-
- @Override
- public String getFullDisplayName() throws OseeCoreException {
- String str = "";
- if (!getName().equals(Artifact.UNNAMED)) {
- str += getName();
- }
- if (!getFullName().equals("")) {
- if (str.equals("")) {
- str = getFullName();
- } else {
- str += " - " + getFullName();
- }
- }
- String description = getSoleAttributeValue(AtsAttributeTypes.Description, "");
- if (Strings.isValid(description)) {
- if (str.equals("")) {
- str = description;
- } else {
- str += " - " + description;
- }
- }
- return str;
- }
-
- public TeamDefinitionArtifact getTeamDefinitionArtifact() throws OseeCoreException {
- try {
- return (TeamDefinitionArtifact) getRelatedArtifact(AtsRelationTypes.TeamDefinitionToVersion_TeamDefinition);
- } catch (ArtifactDoesNotExist ex) {
- return null;
- }
- }
-
- public Date getEstimatedReleaseDate() throws OseeCoreException {
- return getSoleAttributeValue(AtsAttributeTypes.EstimatedReleaseDate, null);
- }
-
- public Date getReleaseDate() throws OseeCoreException {
- return getSoleAttributeValue(AtsAttributeTypes.ReleaseDate, null);
- }
-
- public static Set<VersionArtifact> getVersions(Collection<String> teamDefNames) throws OseeCoreException {
- Set<VersionArtifact> teamDefs = new HashSet<VersionArtifact>();
- for (String teamDefName : teamDefNames) {
- teamDefs.add(getSoleVersion(teamDefName));
- }
- return teamDefs;
- }
-
- /**
- * Refrain from using this method as Version Artifact names can be changed by the user.
- *
- * @param name
- * @return Version
- */
- public static VersionArtifact getSoleVersion(String name) throws OseeCoreException {
- return (VersionArtifact) AtsCacheManager.getArtifactsByName(AtsArtifactTypes.Version, name).iterator().next();
- }
-}
+/******************************************************************************* + * 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.artifact; + +import java.util.Collection; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; +import java.util.logging.Level; +import org.eclipse.osee.ats.config.AtsCacheManager; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.ats.util.AtsRelationTypes; +import org.eclipse.osee.ats.util.widgets.commit.ICommitConfigArtifact; +import org.eclipse.osee.framework.core.exception.ArtifactDoesNotExist; +import org.eclipse.osee.framework.core.exception.BranchDoesNotExist; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeDataStoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.type.ArtifactType; +import org.eclipse.osee.framework.jdk.core.util.GUID; +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.ArtifactFactory; +import org.eclipse.osee.framework.skynet.core.artifact.BranchManager; +import org.eclipse.osee.framework.ui.plugin.util.Result; + +public class VersionArtifact extends Artifact implements ICommitConfigArtifact { + public static enum VersionReleaseType { + Released, + UnReleased, + Both, + VersionLocked + }; + + public VersionArtifact(ArtifactFactory parentFactory, String guid, String humandReadableId, Branch branch, ArtifactType artifactType) throws OseeDataStoreException { + super(parentFactory, guid, humandReadableId, branch, artifactType); + } + + @Override + public Result isCreateBranchAllowed() throws OseeCoreException { + if (getSoleAttributeValue(AtsAttributeTypes.AllowCreateBranch, false) == false) { + return new Result(false, "Branch creation disabled for Version [" + this + "]"); + } + if (getParentBranch() == null) { + return new Result(false, "Parent Branch not configured for Version [" + this + "]"); + } + return Result.TrueResult; + } + + @Override + public Result isCommitBranchAllowed() throws OseeCoreException { + if (getSoleAttributeValue(AtsAttributeTypes.AllowCommitBranch, false) == false) { + return new Result(false, "Version [" + this + "] not configured to allow branch commit."); + } + if (getParentBranch() == null) { + return new Result(false, "Parent Branch not configured for Version [" + this + "]"); + } + return Result.TrueResult; + } + + @Override + public Branch getParentBranch() throws OseeCoreException { + try { + String guid = getSoleAttributeValue(AtsAttributeTypes.BaselineBranchGuid, ""); + if (GUID.isValid(guid)) { + return BranchManager.getBranchByGuid(guid); + } + } catch (BranchDoesNotExist ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + return null; + } + + public TeamDefinitionArtifact getParentTeamDefinition() throws OseeCoreException { + return getRelatedArtifacts(AtsRelationTypes.TeamDefinitionToVersion_TeamDefinition, TeamDefinitionArtifact.class).iterator().next(); + } + + public Boolean isReleased() throws OseeCoreException { + return getSoleAttributeValue(AtsAttributeTypes.Released, false); + } + + public Boolean isNextVersion() throws OseeCoreException { + return getSoleAttributeValue(AtsAttributeTypes.NextVersion, false); + } + + public void getParallelVersions(Set<ICommitConfigArtifact> configArts) throws OseeCoreException { + configArts.add(this); + for (VersionArtifact verArt : getRelatedArtifacts(AtsRelationTypes.ParallelVersion_Child, VersionArtifact.class)) { + verArt.getParallelVersions(configArts); + } + } + + public Boolean isVersionLocked() throws OseeCoreException { + return getSoleAttributeValue(AtsAttributeTypes.VersionLocked, false); + } + + @Override + public String toString() { + return getName(); + } + + public void setReleased(boolean released) throws OseeCoreException { + setSoleAttributeValue(AtsAttributeTypes.Released, released); + } + + public void setNextVersion(boolean nextVersion) throws OseeCoreException { + setSoleAttributeValue(AtsAttributeTypes.NextVersion, nextVersion); + } + + public void setVersionLocked(boolean locked) throws OseeCoreException { + setSoleAttributeValue(AtsAttributeTypes.VersionLocked, locked); + } + + public String getFullName() throws OseeCoreException { + return getSoleAttributeValue(AtsAttributeTypes.FullName, ""); + } + + public void setFullName(String name) throws OseeCoreException { + setSoleAttributeValue(AtsAttributeTypes.FullName, name); + } + + public void setDescription(String desc) throws OseeCoreException { + setSoleAttributeValue(AtsAttributeTypes.Description, desc); + } + + public Collection<TeamWorkFlowArtifact> getTargetedForTeamArtifacts() throws OseeCoreException { + return getRelatedArtifacts(AtsRelationTypes.TeamWorkflowTargetedForVersion_Workflow, TeamWorkFlowArtifact.class); + } + + @Override + public String getFullDisplayName() throws OseeCoreException { + String str = ""; + if (!getName().equals(Artifact.UNNAMED)) { + str += getName(); + } + if (!getFullName().equals("")) { + if (str.equals("")) { + str = getFullName(); + } else { + str += " - " + getFullName(); + } + } + String description = getSoleAttributeValue(AtsAttributeTypes.Description, ""); + if (Strings.isValid(description)) { + if (str.equals("")) { + str = description; + } else { + str += " - " + description; + } + } + return str; + } + + public TeamDefinitionArtifact getTeamDefinitionArtifact() throws OseeCoreException { + try { + return (TeamDefinitionArtifact) getRelatedArtifact(AtsRelationTypes.TeamDefinitionToVersion_TeamDefinition); + } catch (ArtifactDoesNotExist ex) { + return null; + } + } + + public Date getEstimatedReleaseDate() throws OseeCoreException { + return getSoleAttributeValue(AtsAttributeTypes.EstimatedReleaseDate, null); + } + + public Date getReleaseDate() throws OseeCoreException { + return getSoleAttributeValue(AtsAttributeTypes.ReleaseDate, null); + } + + public static Set<VersionArtifact> getVersions(Collection<String> teamDefNames) throws OseeCoreException { + Set<VersionArtifact> teamDefs = new HashSet<VersionArtifact>(); + for (String teamDefName : teamDefNames) { + teamDefs.add(getSoleVersion(teamDefName)); + } + return teamDefs; + } + + /** + * Refrain from using this method as Version Artifact names can be changed by the user. + * + * @return Version + */ + public static VersionArtifact getSoleVersion(String name) throws OseeCoreException { + return (VersionArtifact) AtsCacheManager.getArtifactsByName(AtsArtifactTypes.Version, name).iterator().next(); + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/AtsBulkLoad.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/AtsBulkLoad.java index 56000ffe7df..2c1296dd997 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/AtsBulkLoad.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/AtsBulkLoad.java @@ -1,60 +1,60 @@ -/*******************************************************************************
- * 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.config;
-
-import java.util.Collection;
-import java.util.Set;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsRelationTypes;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.operation.EmptyOperation;
-import org.eclipse.osee.framework.core.operation.IOperation;
-import org.eclipse.osee.framework.core.operation.Operations;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.relation.RelationManager;
-
-/**
- * @author Donald G. Dunne
- */
-public class AtsBulkLoad {
-
- private static boolean atsTypeDataLoadedStarted = false;
-
- public synchronized static IOperation getConfigLoadingOperation() {
- if (atsTypeDataLoadedStarted == false) {
- atsTypeDataLoadedStarted = true;
- return new AtsLoadConfigArtifactsOperation();
- }
- return new EmptyOperation("ATS Bulk Loading", AtsPlugin.PLUGIN_ID);
- }
-
- public static void loadConfig(boolean pend) {
- if (AtsLoadConfigArtifactsOperation.isLoaded()) {
- return;
- }
- if (pend) {
- Operations.executeAndPend(new AtsLoadConfigArtifactsOperation(), false);
- } else {
- Operations.executeAsJob(new AtsLoadConfigArtifactsOperation(), false);
- }
- }
-
- public static Set<Artifact> loadFromActions(Collection<? extends Artifact> actions) throws OseeCoreException {
- return RelationManager.getRelatedArtifacts(actions, 4, AtsRelationTypes.SmaToTask_Task,
- AtsRelationTypes.ActionToWorkflow_WorkFlow, AtsRelationTypes.TeamWorkflowToReview_Review);
- }
-
- public static Set<Artifact> loadFromTeamWorkflows(Collection<? extends Artifact> teams) throws OseeCoreException {
- return RelationManager.getRelatedArtifacts(teams, 3, AtsRelationTypes.SmaToTask_Task,
- AtsRelationTypes.TeamWorkflowToReview_Team, AtsRelationTypes.ActionToWorkflow_Action);
- }
-
-}
+/******************************************************************************* + * 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.config; + +import java.util.Collection; +import java.util.Set; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsRelationTypes; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.operation.EmptyOperation; +import org.eclipse.osee.framework.core.operation.IOperation; +import org.eclipse.osee.framework.core.operation.Operations; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.relation.RelationManager; + +/** + * @author Donald G. Dunne + */ +public class AtsBulkLoad { + + private static boolean atsTypeDataLoadedStarted = false; + + public synchronized static IOperation getConfigLoadingOperation() { + if (atsTypeDataLoadedStarted == false) { + atsTypeDataLoadedStarted = true; + return new AtsLoadConfigArtifactsOperation(); + } + return new EmptyOperation("ATS Bulk Loading", AtsPlugin.PLUGIN_ID); + } + + public static void loadConfig(boolean pend) { + if (AtsLoadConfigArtifactsOperation.isLoaded()) { + return; + } + if (pend) { + Operations.executeAndPend(new AtsLoadConfigArtifactsOperation(), false); + } else { + Operations.executeAsJob(new AtsLoadConfigArtifactsOperation(), false); + } + } + + public static Set<Artifact> loadFromActions(Collection<? extends Artifact> actions) throws OseeCoreException { + return RelationManager.getRelatedArtifacts(actions, 4, AtsRelationTypes.SmaToTask_Task, + AtsRelationTypes.ActionToWorkflow_WorkFlow, AtsRelationTypes.TeamWorkflowToReview_Review); + } + + public static Set<Artifact> loadFromTeamWorkflows(Collection<? extends Artifact> teams) throws OseeCoreException { + return RelationManager.getRelatedArtifacts(teams, 3, AtsRelationTypes.SmaToTask_Task, + AtsRelationTypes.TeamWorkflowToReview_Team, AtsRelationTypes.ActionToWorkflow_Action); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/AtsCacheManager.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/AtsCacheManager.java index b15031378cf..aa91624f5dc 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/AtsCacheManager.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/AtsCacheManager.java @@ -1,321 +1,321 @@ -/*******************************************************************************
- * 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.config;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-import org.eclipse.osee.ats.artifact.ActionableItemArtifact;
-import org.eclipse.osee.ats.artifact.TaskArtifact;
-import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact;
-import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.ats.util.AtsRelationTypes;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.core.data.IArtifactType;
-import org.eclipse.osee.framework.core.enums.Active;
-import org.eclipse.osee.framework.core.enums.CoreArtifactTypes;
-import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.model.type.ArtifactType;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactCache;
-import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
-import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData;
-import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData.ChangeType;
-import org.eclipse.osee.framework.skynet.core.event.IArtifactsPurgedEventListener;
-import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener;
-import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
-import org.eclipse.osee.framework.skynet.core.event.Sender;
-import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent;
-import org.eclipse.osee.framework.skynet.core.event2.artifact.EventBasicGuidArtifact;
-import org.eclipse.osee.framework.skynet.core.event2.artifact.EventBasicGuidRelation;
-import org.eclipse.osee.framework.skynet.core.event2.artifact.EventModType;
-import org.eclipse.osee.framework.skynet.core.event2.artifact.IArtifactEventListener;
-import org.eclipse.osee.framework.skynet.core.event2.filter.IEventFilter;
-import org.eclipse.osee.framework.skynet.core.relation.RelationEventType;
-import org.eclipse.osee.framework.skynet.core.utility.DbUtil;
-import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkFlowDefinition;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkItemDefinition.WriteType;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkItemDefinitionFactory;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinition;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkRuleDefinition;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkWidgetDefinition;
-
-/**
- * Common cache storage for ATS configuration artifacts:<br>
- * TeamDefinitionArtifact<br>
- * VersionArtifact<br>
- * ActionableItemArtifact<br>
- * All other artifact types will silently not cached<br>
- * <REM2>
- *
- * @author Donald G. Dunne
- */
-public class AtsCacheManager implements IArtifactEventListener, IArtifactsPurgedEventListener, IFrameworkTransactionEventListener {
-
- private static Map<TaskableStateMachineArtifact, Collection<TaskArtifact>> teamTasksCache =
- new HashMap<TaskableStateMachineArtifact, Collection<TaskArtifact>>();
-
- public static void start() {
- new AtsCacheManager();
- }
-
- private AtsCacheManager() {
- OseeEventManager.addPriorityListener(this);
- }
-
- public static synchronized void decacheTaskArtifacts(TaskableStateMachineArtifact sma) {
- teamTasksCache.remove(sma);
- }
-
- public static synchronized Collection<TaskArtifact> getTaskArtifacts(TaskableStateMachineArtifact sma) throws OseeCoreException {
- if (!teamTasksCache.containsKey(sma)) {
- Collection<TaskArtifact> taskArtifacts =
- sma.getRelatedArtifacts(AtsRelationTypes.SmaToTask_Task, TaskArtifact.class);
- if (taskArtifacts.isEmpty()) {
- return taskArtifacts;
- }
- teamTasksCache.put(sma, taskArtifacts);
- }
- return teamTasksCache.get(sma);
- }
-
- public static List<Artifact> getArtifactsByName(IArtifactType artifactType, String name) throws OseeCoreException {
- AtsBulkLoad.loadConfig(true);
- return ArtifactCache.getArtifactsByName(artifactType, name);
- }
-
- public static ActionableItemArtifact getActionableItemByGuid(String guid) throws OseeCoreException {
- AtsBulkLoad.loadConfig(true);
- return (ActionableItemArtifact) ArtifactCache.getActive(guid, AtsUtil.getAtsBranch().getId());
- }
-
- public static TeamDefinitionArtifact getTeamDefinitionArtifact(String guid) throws OseeCoreException {
- AtsBulkLoad.loadConfig(true);
- return (TeamDefinitionArtifact) ArtifactCache.getActive(guid, AtsUtil.getAtsBranch().getId());
- }
-
- public static List<Artifact> getArtifactsByActive(ArtifactType artifactType, Active active) throws OseeCoreException {
- AtsBulkLoad.loadConfig(true);
- return AtsUtil.getActive(ArtifactCache.getArtifactsByType(artifactType), active, null);
- }
-
- public static Artifact getSoleArtifactByName(IArtifactType artifactType, String name) throws OseeCoreException {
- AtsBulkLoad.loadConfig(true);
- List<Artifact> arts = ArtifactCache.getArtifactsByName(artifactType, name);
- if (arts.size() == 1) {
- return arts.iterator().next();
- }
- return null;
- }
-
- @Override
- public void handleArtifactsPurgedEvent(Sender sender, LoadedArtifacts loadedArtifacts) {
- if (DbUtil.isDbInit()) {
- OseeEventManager.removeListener(this);
- return;
- }
- try {
- for (Artifact artifact : loadedArtifacts.getLoadedArtifacts()) {
+/******************************************************************************* + * 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.config; + +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; +import org.eclipse.osee.ats.artifact.ActionableItemArtifact; +import org.eclipse.osee.ats.artifact.TaskArtifact; +import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact; +import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.ats.util.AtsRelationTypes; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.core.data.IArtifactType; +import org.eclipse.osee.framework.core.enums.Active; +import org.eclipse.osee.framework.core.enums.CoreArtifactTypes; +import org.eclipse.osee.framework.core.enums.CoreRelationTypes; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.model.type.ArtifactType; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactCache; +import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; +import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData; +import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData.ChangeType; +import org.eclipse.osee.framework.skynet.core.event.IArtifactsPurgedEventListener; +import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener; +import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; +import org.eclipse.osee.framework.skynet.core.event.Sender; +import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent; +import org.eclipse.osee.framework.skynet.core.event2.artifact.EventBasicGuidArtifact; +import org.eclipse.osee.framework.skynet.core.event2.artifact.EventBasicGuidRelation; +import org.eclipse.osee.framework.skynet.core.event2.artifact.EventModType; +import org.eclipse.osee.framework.skynet.core.event2.artifact.IArtifactEventListener; +import org.eclipse.osee.framework.skynet.core.event2.filter.IEventFilter; +import org.eclipse.osee.framework.skynet.core.relation.RelationEventType; +import org.eclipse.osee.framework.skynet.core.utility.DbUtil; +import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkFlowDefinition; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkItemDefinition.WriteType; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkItemDefinitionFactory; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinition; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkRuleDefinition; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkWidgetDefinition; + +/** + * Common cache storage for ATS configuration artifacts:<br> + * TeamDefinitionArtifact<br> + * VersionArtifact<br> + * ActionableItemArtifact<br> + * All other artifact types will silently not cached<br> + * <REM2> + * + * @author Donald G. Dunne + */ +public class AtsCacheManager implements IArtifactEventListener, IArtifactsPurgedEventListener, IFrameworkTransactionEventListener { + + private static Map<TaskableStateMachineArtifact, Collection<TaskArtifact>> teamTasksCache = + new HashMap<TaskableStateMachineArtifact, Collection<TaskArtifact>>(); + + public static void start() { + new AtsCacheManager(); + } + + private AtsCacheManager() { + OseeEventManager.addPriorityListener(this); + } + + public static synchronized void decacheTaskArtifacts(TaskableStateMachineArtifact sma) { + teamTasksCache.remove(sma); + } + + public static synchronized Collection<TaskArtifact> getTaskArtifacts(TaskableStateMachineArtifact sma) throws OseeCoreException { + if (!teamTasksCache.containsKey(sma)) { + Collection<TaskArtifact> taskArtifacts = + sma.getRelatedArtifacts(AtsRelationTypes.SmaToTask_Task, TaskArtifact.class); + if (taskArtifacts.isEmpty()) { + return taskArtifacts; + } + teamTasksCache.put(sma, taskArtifacts); + } + return teamTasksCache.get(sma); + } + + public static List<Artifact> getArtifactsByName(IArtifactType artifactType, String name) throws OseeCoreException { + AtsBulkLoad.loadConfig(true); + return ArtifactCache.getArtifactsByName(artifactType, name); + } + + public static ActionableItemArtifact getActionableItemByGuid(String guid) throws OseeCoreException { + AtsBulkLoad.loadConfig(true); + return (ActionableItemArtifact) ArtifactCache.getActive(guid, AtsUtil.getAtsBranch().getId()); + } + + public static TeamDefinitionArtifact getTeamDefinitionArtifact(String guid) throws OseeCoreException { + AtsBulkLoad.loadConfig(true); + return (TeamDefinitionArtifact) ArtifactCache.getActive(guid, AtsUtil.getAtsBranch().getId()); + } + + public static List<Artifact> getArtifactsByActive(ArtifactType artifactType, Active active) throws OseeCoreException { + AtsBulkLoad.loadConfig(true); + return AtsUtil.getActive(ArtifactCache.getArtifactsByType(artifactType), active, null); + } + + public static Artifact getSoleArtifactByName(IArtifactType artifactType, String name) throws OseeCoreException { + AtsBulkLoad.loadConfig(true); + List<Artifact> arts = ArtifactCache.getArtifactsByName(artifactType, name); + if (arts.size() == 1) { + return arts.iterator().next(); + } + return null; + } + + @Override + public void handleArtifactsPurgedEvent(Sender sender, LoadedArtifacts loadedArtifacts) { + if (DbUtil.isDbInit()) { + OseeEventManager.removeListener(this); + return; + } + try { + for (Artifact artifact : loadedArtifacts.getLoadedArtifacts()) { if (artifact.isOfType(CoreArtifactTypes.WorkRuleDefinition, CoreArtifactTypes.WorkPageDefinition, CoreArtifactTypes.WorkFlowDefinition, CoreArtifactTypes.WorkWidgetDefinition)) { - WorkItemDefinitionFactory.deCache(artifact);
- }
- if (artifact instanceof TaskArtifact) {
- teamTasksCache.remove(artifact.getParent());
- }
- if (artifact instanceof TaskableStateMachineArtifact) {
- teamTasksCache.remove(artifact);
- }
- }
- } catch (Exception ex) {
+ WorkItemDefinitionFactory.deCache(artifact); + } + if (artifact instanceof TaskArtifact) { + teamTasksCache.remove(artifact.getParent()); + } + if (artifact instanceof TaskableStateMachineArtifact) { + teamTasksCache.remove(artifact); + } + } + } catch (Exception ex) { OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); - }
- }
-
- @Override
- public void handleFrameworkTransactionEvent(Sender sender, FrameworkTransactionData transData) throws OseeCoreException {
- if (DbUtil.isDbInit()) {
- OseeEventManager.removeListener(this);
- return;
- }
- if (transData.branchId != AtsUtil.getAtsBranch().getId()) {
- return;
- }
- for (Artifact artifact : transData.cacheDeletedArtifacts) {
+ } + } + + @Override + public void handleFrameworkTransactionEvent(Sender sender, FrameworkTransactionData transData) throws OseeCoreException { + if (DbUtil.isDbInit()) { + OseeEventManager.removeListener(this); + return; + } + if (transData.branchId != AtsUtil.getAtsBranch().getId()) { + return; + } + for (Artifact artifact : transData.cacheDeletedArtifacts) { if (artifact.isOfType(CoreArtifactTypes.WorkRuleDefinition, CoreArtifactTypes.WorkPageDefinition, CoreArtifactTypes.WorkFlowDefinition, CoreArtifactTypes.WorkWidgetDefinition)) { - WorkItemDefinitionFactory.deCache(artifact);
- }
- if (artifact instanceof TaskArtifact) {
- teamTasksCache.remove(artifact.getParent());
- }
- if (artifact instanceof TaskableStateMachineArtifact) {
- teamTasksCache.remove(artifact);
- }
- }
- for (Artifact artifact : transData.cacheAddedArtifacts) {
- if (artifact.isOfType(CoreArtifactTypes.WorkRuleDefinition)) {
- WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update,
- new WorkRuleDefinition(artifact), artifact);
- } else if (artifact.isOfType(CoreArtifactTypes.WorkPageDefinition)) {
- WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update,
- new WorkPageDefinition(artifact), artifact);
- } else if (artifact.isOfType(CoreArtifactTypes.WorkWidgetDefinition)) {
- WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, new WorkWidgetDefinition(
- artifact), artifact);
- } else if (artifact.isOfType(CoreArtifactTypes.WorkFlowDefinition)) {
- WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update,
- new WorkFlowDefinition(artifact), artifact);
- }
- if (artifact instanceof TaskArtifact) {
- teamTasksCache.remove(artifact.getParent());
- }
- if (artifact instanceof TaskableStateMachineArtifact) {
- teamTasksCache.remove(artifact);
- }
- }
- for (Artifact artifact : transData.getArtifactsInRelations(ChangeType.All, AtsRelationTypes.SmaToTask_Task)) {
- if (artifact instanceof TaskArtifact) {
- teamTasksCache.remove(artifact.getParent());
- }
- if (artifact instanceof TaskableStateMachineArtifact) {
- teamTasksCache.remove(artifact);
- }
- }
- for (Artifact artifact : transData.getArtifactsInRelations(ChangeType.All, CoreRelationTypes.WorkItem__Child)) {
- if (artifact.isOfType(CoreArtifactTypes.WorkRuleDefinition)) {
- WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update,
- new WorkRuleDefinition(artifact), artifact);
- } else if (artifact.isOfType(CoreArtifactTypes.WorkPageDefinition)) {
- WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update,
- new WorkPageDefinition(artifact), artifact);
- } else if (artifact.isOfType(CoreArtifactTypes.WorkWidgetDefinition)) {
- WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, new WorkWidgetDefinition(
- artifact), artifact);
- } else if (artifact.isOfType(CoreArtifactTypes.WorkFlowDefinition)) {
- WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update,
- new WorkFlowDefinition(artifact), artifact);
- }
- }
- }
-
- @Override
- public void handleArtifactEvent(ArtifactEvent artifactEvent, Sender sender) {
- if (DbUtil.isDbInit()) {
- OseeEventManager.removeListener(this);
- return;
- }
- try {
- for (EventBasicGuidArtifact guidArt : artifactEvent.getArtifacts()) {
- try {
- if (guidArt.is(EventModType.Deleted, EventModType.Purged)) {
- if (guidArt.is(CoreArtifactTypes.WorkRuleDefinition, CoreArtifactTypes.WorkPageDefinition,
- CoreArtifactTypes.WorkFlowDefinition, CoreArtifactTypes.WorkWidgetDefinition)) {
- WorkItemDefinitionFactory.deCache(guidArt);
- }
- if (guidArt.is(AtsArtifactTypes.Task) && guidArt.is(EventModType.Deleted)) {
- Artifact artifact = ArtifactCache.getActive(guidArt);
- if (artifact != null) {
- teamTasksCache.remove(artifact.getParent());
- }
- }
- Artifact artifact = ArtifactCache.getActive(guidArt);
- if (artifact != null && artifact instanceof TaskableStateMachineArtifact) {
- teamTasksCache.remove(artifact);
- }
- }
- if (guidArt.is(EventModType.Added, EventModType.Modified)) {
- if (guidArt.is(CoreArtifactTypes.WorkRuleDefinition, CoreArtifactTypes.WorkPageDefinition,
- CoreArtifactTypes.WorkFlowDefinition, CoreArtifactTypes.WorkWidgetDefinition)) {
- // Must load these cause they are config artifacts
- Artifact artifact = ArtifactQuery.getArtifactFromToken(guidArt);
- if (artifact != null) {
- if (guidArt.is(CoreArtifactTypes.WorkRuleDefinition)) {
- WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update,
- new WorkRuleDefinition(artifact), artifact);
- } else if (artifact.isOfType(CoreArtifactTypes.WorkPageDefinition)) {
- WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update,
- new WorkPageDefinition(artifact), artifact);
- } else if (artifact.isOfType(CoreArtifactTypes.WorkWidgetDefinition)) {
- WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update,
- new WorkWidgetDefinition(artifact), artifact);
- } else if (artifact.isOfType(CoreArtifactTypes.WorkFlowDefinition)) {
- WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update,
- new WorkFlowDefinition(artifact), artifact);
- }
- }
- }
- // Only process if in cache
- Artifact artifact = ArtifactCache.getActive(guidArt);
- if (artifact != null && guidArt.is(EventModType.Added)) {
- if (artifact instanceof TaskArtifact) {
- teamTasksCache.remove(artifact.getParent());
- }
- if (artifact instanceof TaskableStateMachineArtifact) {
- teamTasksCache.remove(artifact);
- }
- }
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- for (EventBasicGuidRelation guidRel : artifactEvent.getRelations()) {
- try {
- if (guidRel.is(AtsRelationTypes.SmaToTask_Task)) {
- for (TaskArtifact taskArt : ArtifactCache.getActive(guidRel, TaskArtifact.class)) {
- teamTasksCache.remove(taskArt.getParent());
- }
- for (Artifact artifact : ArtifactCache.getActive(guidRel)) {
- if (artifact instanceof TaskableStateMachineArtifact) {
- teamTasksCache.remove(artifact);
- }
- }
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- for (Artifact artifact : artifactEvent.getArtifactsInRelations(CoreRelationTypes.WorkItem__Child,
- RelationEventType.Added, RelationEventType.Undeleted)) {
- if (artifact.isOfType(CoreArtifactTypes.WorkRuleDefinition)) {
- WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, new WorkRuleDefinition(
- artifact), artifact);
- } else if (artifact.isOfType(CoreArtifactTypes.WorkPageDefinition)) {
- WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, new WorkPageDefinition(
- artifact), artifact);
- } else if (artifact.isOfType(CoreArtifactTypes.WorkWidgetDefinition)) {
- WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, new WorkWidgetDefinition(
- artifact), artifact);
- } else if (artifact.isOfType(CoreArtifactTypes.WorkFlowDefinition)) {
- WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, new WorkFlowDefinition(
- artifact), artifact);
- }
- }
-
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- @Override
- public List<? extends IEventFilter> getEventFilters() {
- return Arrays.asList(OseeEventManager.getCommonBranchFilter());
- }
-}
+ WorkItemDefinitionFactory.deCache(artifact); + } + if (artifact instanceof TaskArtifact) { + teamTasksCache.remove(artifact.getParent()); + } + if (artifact instanceof TaskableStateMachineArtifact) { + teamTasksCache.remove(artifact); + } + } + for (Artifact artifact : transData.cacheAddedArtifacts) { + if (artifact.isOfType(CoreArtifactTypes.WorkRuleDefinition)) { + WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, + new WorkRuleDefinition(artifact), artifact); + } else if (artifact.isOfType(CoreArtifactTypes.WorkPageDefinition)) { + WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, + new WorkPageDefinition(artifact), artifact); + } else if (artifact.isOfType(CoreArtifactTypes.WorkWidgetDefinition)) { + WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, new WorkWidgetDefinition( + artifact), artifact); + } else if (artifact.isOfType(CoreArtifactTypes.WorkFlowDefinition)) { + WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, + new WorkFlowDefinition(artifact), artifact); + } + if (artifact instanceof TaskArtifact) { + teamTasksCache.remove(artifact.getParent()); + } + if (artifact instanceof TaskableStateMachineArtifact) { + teamTasksCache.remove(artifact); + } + } + for (Artifact artifact : transData.getArtifactsInRelations(ChangeType.All, AtsRelationTypes.SmaToTask_Task)) { + if (artifact instanceof TaskArtifact) { + teamTasksCache.remove(artifact.getParent()); + } + if (artifact instanceof TaskableStateMachineArtifact) { + teamTasksCache.remove(artifact); + } + } + for (Artifact artifact : transData.getArtifactsInRelations(ChangeType.All, CoreRelationTypes.WorkItem__Child)) { + if (artifact.isOfType(CoreArtifactTypes.WorkRuleDefinition)) { + WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, + new WorkRuleDefinition(artifact), artifact); + } else if (artifact.isOfType(CoreArtifactTypes.WorkPageDefinition)) { + WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, + new WorkPageDefinition(artifact), artifact); + } else if (artifact.isOfType(CoreArtifactTypes.WorkWidgetDefinition)) { + WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, new WorkWidgetDefinition( + artifact), artifact); + } else if (artifact.isOfType(CoreArtifactTypes.WorkFlowDefinition)) { + WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, + new WorkFlowDefinition(artifact), artifact); + } + } + } + + @Override + public void handleArtifactEvent(ArtifactEvent artifactEvent, Sender sender) { + if (DbUtil.isDbInit()) { + OseeEventManager.removeListener(this); + return; + } + try { + for (EventBasicGuidArtifact guidArt : artifactEvent.getArtifacts()) { + try { + if (guidArt.is(EventModType.Deleted, EventModType.Purged)) { + if (guidArt.is(CoreArtifactTypes.WorkRuleDefinition, CoreArtifactTypes.WorkPageDefinition, + CoreArtifactTypes.WorkFlowDefinition, CoreArtifactTypes.WorkWidgetDefinition)) { + WorkItemDefinitionFactory.deCache(guidArt); + } + if (guidArt.is(AtsArtifactTypes.Task) && guidArt.is(EventModType.Deleted)) { + Artifact artifact = ArtifactCache.getActive(guidArt); + if (artifact != null) { + teamTasksCache.remove(artifact.getParent()); + } + } + Artifact artifact = ArtifactCache.getActive(guidArt); + if (artifact != null && artifact instanceof TaskableStateMachineArtifact) { + teamTasksCache.remove(artifact); + } + } + if (guidArt.is(EventModType.Added, EventModType.Modified)) { + if (guidArt.is(CoreArtifactTypes.WorkRuleDefinition, CoreArtifactTypes.WorkPageDefinition, + CoreArtifactTypes.WorkFlowDefinition, CoreArtifactTypes.WorkWidgetDefinition)) { + // Must load these cause they are config artifacts + Artifact artifact = ArtifactQuery.getArtifactFromToken(guidArt); + if (artifact != null) { + if (guidArt.is(CoreArtifactTypes.WorkRuleDefinition)) { + WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, + new WorkRuleDefinition(artifact), artifact); + } else if (artifact.isOfType(CoreArtifactTypes.WorkPageDefinition)) { + WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, + new WorkPageDefinition(artifact), artifact); + } else if (artifact.isOfType(CoreArtifactTypes.WorkWidgetDefinition)) { + WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, + new WorkWidgetDefinition(artifact), artifact); + } else if (artifact.isOfType(CoreArtifactTypes.WorkFlowDefinition)) { + WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, + new WorkFlowDefinition(artifact), artifact); + } + } + } + // Only process if in cache + Artifact artifact = ArtifactCache.getActive(guidArt); + if (artifact != null && guidArt.is(EventModType.Added)) { + if (artifact instanceof TaskArtifact) { + teamTasksCache.remove(artifact.getParent()); + } + if (artifact instanceof TaskableStateMachineArtifact) { + teamTasksCache.remove(artifact); + } + } + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + for (EventBasicGuidRelation guidRel : artifactEvent.getRelations()) { + try { + if (guidRel.is(AtsRelationTypes.SmaToTask_Task)) { + for (TaskArtifact taskArt : ArtifactCache.getActive(guidRel, TaskArtifact.class)) { + teamTasksCache.remove(taskArt.getParent()); + } + for (Artifact artifact : ArtifactCache.getActive(guidRel)) { + if (artifact instanceof TaskableStateMachineArtifact) { + teamTasksCache.remove(artifact); + } + } + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + for (Artifact artifact : artifactEvent.getArtifactsInRelations(CoreRelationTypes.WorkItem__Child, + RelationEventType.Added, RelationEventType.Undeleted)) { + if (artifact.isOfType(CoreArtifactTypes.WorkRuleDefinition)) { + WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, new WorkRuleDefinition( + artifact), artifact); + } else if (artifact.isOfType(CoreArtifactTypes.WorkPageDefinition)) { + WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, new WorkPageDefinition( + artifact), artifact); + } else if (artifact.isOfType(CoreArtifactTypes.WorkWidgetDefinition)) { + WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, new WorkWidgetDefinition( + artifact), artifact); + } else if (artifact.isOfType(CoreArtifactTypes.WorkFlowDefinition)) { + WorkItemDefinitionFactory.cacheWorkItemDefinitionArtifact(WriteType.Update, new WorkFlowDefinition( + artifact), artifact); + } + } + + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + @Override + public List<? extends IEventFilter> getEventFilters() { + return Arrays.asList(OseeEventManager.getCommonBranchFilter()); + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/AtsConfigManager.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/AtsConfigManager.java index c5ca3cfbfc0..9b5521aa987 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/AtsConfigManager.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/AtsConfigManager.java @@ -76,7 +76,6 @@ public class AtsConfigManager extends AbstractOperation { private final Display display; /** - * @param namespace * @param teamDefName - name of team definition to use * @param versionNames - list of version names (if team is using versions) * @param actionableItems - list of actionable items diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/wizard/AtsConfigWizardPage1.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/wizard/AtsConfigWizardPage1.java index 6c9abf9f4fd..8d73df0261d 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/wizard/AtsConfigWizardPage1.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/wizard/AtsConfigWizardPage1.java @@ -39,9 +39,6 @@ import org.eclipse.swt.widgets.Composite; public class AtsConfigWizardPage1 extends WizardPage { private WorkPage page; - /** - * @param actionWizard - */ public AtsConfigWizardPage1(AtsConfigWizard actionWizard) { super("Create New ATS Configuration", "Create ATS Configuration", null); setMessage("Enter configuration information."); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/AtsTaskEditorRenderer.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/AtsTaskEditorRenderer.java index d11ca624593..14e771cfa8f 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/AtsTaskEditorRenderer.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/AtsTaskEditorRenderer.java @@ -1,70 +1,70 @@ -/*******************************************************************************
- * 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.editor;
-
-import static org.eclipse.osee.framework.ui.skynet.render.PresentationType.GENERALIZED_EDIT;
-import java.util.ArrayList;
-import java.util.List;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.ats.artifact.TaskArtifact;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.ui.skynet.render.DefaultArtifactRenderer;
-import org.eclipse.osee.framework.ui.skynet.render.PresentationType;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-import org.eclipse.swt.graphics.Image;
-
-/**
- * @author Jeff C. Phillips
- */
-public class AtsTaskEditorRenderer extends DefaultArtifactRenderer {
- private static final String COMMAND_ID = "org.eclipse.osee.framework.ui.skynet.atstaskeditor.command";
-
- @Override
- public Image getImage(Artifact artifact) {
- return ImageManager.getImage(AtsImage.TASK);
- }
-
- @Override
- public String getName() {
- return "ATS Task Editor";
- }
-
- @Override
- public int getApplicabilityRating(PresentationType presentationType, Artifact artifact) {
+/******************************************************************************* + * 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.editor; + +import static org.eclipse.osee.framework.ui.skynet.render.PresentationType.GENERALIZED_EDIT; +import java.util.ArrayList; +import java.util.List; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.artifact.TaskArtifact; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.ui.skynet.render.DefaultArtifactRenderer; +import org.eclipse.osee.framework.ui.skynet.render.PresentationType; +import org.eclipse.osee.framework.ui.swt.ImageManager; +import org.eclipse.swt.graphics.Image; + +/** + * @author Jeff C. Phillips + */ +public class AtsTaskEditorRenderer extends DefaultArtifactRenderer { + private static final String COMMAND_ID = "org.eclipse.osee.framework.ui.skynet.atstaskeditor.command"; + + @Override + public Image getImage(Artifact artifact) { + return ImageManager.getImage(AtsImage.TASK); + } + + @Override + public String getName() { + return "ATS Task Editor"; + } + + @Override + public int getApplicabilityRating(PresentationType presentationType, Artifact artifact) { if (artifact instanceof TaskArtifact && !artifact.isHistorical() && presentationType != GENERALIZED_EDIT) { - return PRESENTATION_SUBTYPE_MATCH;
- }
- return NO_MATCH;
- }
-
- @Override
- public List<String> getCommandId(PresentationType presentationType) {
- ArrayList<String> commandIds = new ArrayList<String>(1);
-
- if (presentationType == PresentationType.SPECIALIZED_EDIT) {
- commandIds.add(COMMAND_ID);
- }
-
- return commandIds;
- }
-
- @Override
- public AtsTaskEditorRenderer newInstance() {
- return new AtsTaskEditorRenderer();
- }
-
- @Override
- public void open(List<Artifact> artifacts, PresentationType presentationType) throws OseeCoreException {
- AtsUtil.openInAtsTaskEditor("Tasks", artifacts);
- }
+ return PRESENTATION_SUBTYPE_MATCH; + } + return NO_MATCH; + } + + @Override + public List<String> getCommandId(PresentationType presentationType) { + ArrayList<String> commandIds = new ArrayList<String>(1); + + if (presentationType == PresentationType.SPECIALIZED_EDIT) { + commandIds.add(COMMAND_ID); + } + + return commandIds; + } + + @Override + public AtsTaskEditorRenderer newInstance() { + return new AtsTaskEditorRenderer(); + } + + @Override + public void open(List<Artifact> artifacts, PresentationType presentationType) throws OseeCoreException { + AtsUtil.openInAtsTaskEditor("Tasks", artifacts); + } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/AtsWorldEditorRenderer.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/AtsWorldEditorRenderer.java index 9d8f6f66333..59c21b1fea5 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/AtsWorldEditorRenderer.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/AtsWorldEditorRenderer.java @@ -1,85 +1,85 @@ -/*******************************************************************************
- * 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.editor;
-
-import static org.eclipse.osee.framework.ui.skynet.render.PresentationType.GENERALIZED_EDIT;
-import java.util.ArrayList;
-import java.util.List;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.core.enums.CoreArtifactTypes;
-import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.ui.skynet.render.DefaultArtifactRenderer;
-import org.eclipse.osee.framework.ui.skynet.render.PresentationType;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-import org.eclipse.swt.graphics.Image;
-
-/**
- * @author Jeff C. Phillips
- */
-public class AtsWorldEditorRenderer extends DefaultArtifactRenderer {
- private static final String COMMAND_ID = "org.eclipse.osee.framework.ui.skynet.atsworldeditor.command";
-
- @Override
- public int getApplicabilityRating(PresentationType presentationType, Artifact artifact) throws OseeCoreException {
+/******************************************************************************* + * 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.editor; + +import static org.eclipse.osee.framework.ui.skynet.render.PresentationType.GENERALIZED_EDIT; +import java.util.ArrayList; +import java.util.List; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.core.enums.CoreArtifactTypes; +import org.eclipse.osee.framework.core.enums.CoreRelationTypes; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.ui.skynet.render.DefaultArtifactRenderer; +import org.eclipse.osee.framework.ui.skynet.render.PresentationType; +import org.eclipse.osee.framework.ui.swt.ImageManager; +import org.eclipse.swt.graphics.Image; + +/** + * @author Jeff C. Phillips + */ +public class AtsWorldEditorRenderer extends DefaultArtifactRenderer { + private static final String COMMAND_ID = "org.eclipse.osee.framework.ui.skynet.atsworldeditor.command"; + + @Override + public int getApplicabilityRating(PresentationType presentationType, Artifact artifact) throws OseeCoreException { if (artifact.isHistorical() || presentationType == GENERALIZED_EDIT) { - return NO_MATCH;
- }
+ return NO_MATCH; + } if (artifact.isOfType(AtsArtifactTypes.AtsArtifact)) { - return PRESENTATION_SUBTYPE_MATCH;
- }
- if (artifact.isOfType(CoreArtifactTypes.UniversalGroup)) {
- if (artifact.getRelatedArtifactsCount(CoreRelationTypes.Universal_Grouping__Members) == 0) {
- return NO_MATCH;
- }
- for (Artifact childArt : artifact.getRelatedArtifacts(CoreRelationTypes.Universal_Grouping__Members)) {
+ return PRESENTATION_SUBTYPE_MATCH; + } + if (artifact.isOfType(CoreArtifactTypes.UniversalGroup)) { + if (artifact.getRelatedArtifactsCount(CoreRelationTypes.Universal_Grouping__Members) == 0) { + return NO_MATCH; + } + for (Artifact childArt : artifact.getRelatedArtifacts(CoreRelationTypes.Universal_Grouping__Members)) { if (childArt.isOfType(AtsArtifactTypes.AtsArtifact)) { - return PRESENTATION_SUBTYPE_MATCH;
- }
- }
- }
- return NO_MATCH;
- }
-
- @Override
- public List<String> getCommandId(PresentationType presentationType) {
- ArrayList<String> commandIds = new ArrayList<String>(1);
-
- if (presentationType == PresentationType.SPECIALIZED_EDIT) {
- commandIds.add(COMMAND_ID);
- }
-
- return commandIds;
- }
-
- @Override
- public String getName() {
- return "ATS World Editor";
- }
-
- @Override
- public AtsWorldEditorRenderer newInstance() {
- return new AtsWorldEditorRenderer();
- }
-
- @Override
- public Image getImage(Artifact artifact) {
- return ImageManager.getImage(AtsImage.GLOBE);
- }
-
- @Override
- public void open(List<Artifact> artifacts, PresentationType presentationType) {
- AtsUtil.openInAtsWorldEditor("ATS", artifacts);
- }
+ return PRESENTATION_SUBTYPE_MATCH; + } + } + } + return NO_MATCH; + } + + @Override + public List<String> getCommandId(PresentationType presentationType) { + ArrayList<String> commandIds = new ArrayList<String>(1); + + if (presentationType == PresentationType.SPECIALIZED_EDIT) { + commandIds.add(COMMAND_ID); + } + + return commandIds; + } + + @Override + public String getName() { + return "ATS World Editor"; + } + + @Override + public AtsWorldEditorRenderer newInstance() { + return new AtsWorldEditorRenderer(); + } + + @Override + public Image getImage(Artifact artifact) { + return ImageManager.getImage(AtsImage.GLOBE); + } + + @Override + public void open(List<Artifact> artifacts, PresentationType presentationType) { + AtsUtil.openInAtsWorldEditor("ATS", artifacts); + } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/ISMAOperationsSection.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/ISMAOperationsSection.java index 9ed5ad424ac..1a26aeb4b8f 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/ISMAOperationsSection.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/ISMAOperationsSection.java @@ -1,21 +1,21 @@ -/*******************************************************************************
- * 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.editor;
-
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-
-public interface ISMAOperationsSection {
-
- public abstract void createAdvancedSection(SMAEditor editor, Composite parent, FormToolkit toolkit);
-
- public abstract boolean isValid(SMAEditor editor);
-}
+/******************************************************************************* + * 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.editor; + +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.forms.widgets.FormToolkit; + +public interface ISMAOperationsSection { + + public abstract void createAdvancedSection(SMAEditor editor, Composite parent, FormToolkit toolkit); + + public abstract boolean isValid(SMAEditor editor); +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMADetailsSection.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMADetailsSection.java index c7ba6b4931d..e97efd8d193 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMADetailsSection.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMADetailsSection.java @@ -1,96 +1,96 @@ -/*******************************************************************************
- * 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.editor;
-
-import org.eclipse.osee.framework.jdk.core.util.Lib;
-import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
-import org.eclipse.osee.framework.ui.swt.Widgets;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.ui.forms.IManagedForm;
-import org.eclipse.ui.forms.SectionPart;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
-import org.eclipse.ui.forms.widgets.FormText;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-import org.eclipse.ui.forms.widgets.Section;
-
-/**
- * @author Donald G. Dunne
- */
-public class SMADetailsSection extends SectionPart {
-
- private FormText formText;
- private final SMAEditor editor;
- private boolean sectionCreated = false;
-
- public SMADetailsSection(SMAEditor editor, Composite parent, FormToolkit toolkit, int style) {
- super(parent, toolkit, style | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
- this.editor = editor;
- }
-
- @Override
- public void initialize(IManagedForm form) {
- super.initialize(form);
- Section section = getSection();
- section.setText("Details");
- section.setLayout(new GridLayout());
- section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-
- // Only load when users selects section
- section.addListener(SWT.Activate, new Listener() {
-
- @Override
- public void handleEvent(Event e) {
- createSection();
- }
- });
- }
-
- private synchronized void createSection() {
- if (!sectionCreated) {
- final FormToolkit toolkit = getManagedForm().getToolkit();
- Composite composite = toolkit.createComposite(getSection(), toolkit.getBorderStyle() | SWT.WRAP);
- composite.setLayout(new GridLayout());
- composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-
- formText = toolkit.createFormText(composite, false);
- GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
- gd.widthHint = 200;
- formText.setLayoutData(gd);
-
- getSection().setClient(composite);
- toolkit.paintBordersFor(composite);
- sectionCreated = true;
- }
-
- if (Widgets.isAccessible(formText)) {
- try {
- formText.setText(Artifacts.getDetailsFormText(editor.getSma().getSMADetails()), true, true);
- } catch (Exception ex) {
- formText.setText(Lib.exceptionToString(ex), false, false);
- }
- getManagedForm().reflow(true);
- }
- }
-
- @Override
- public void dispose() {
- if (formText != null && !formText.isDisposed()) {
- formText.dispose();
- }
- super.dispose();
- }
-
-}
+/******************************************************************************* + * 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.editor; + +import org.eclipse.osee.framework.jdk.core.util.Lib; +import org.eclipse.osee.framework.skynet.core.utility.Artifacts; +import org.eclipse.osee.framework.ui.swt.Widgets; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.ui.forms.IManagedForm; +import org.eclipse.ui.forms.SectionPart; +import org.eclipse.ui.forms.widgets.ExpandableComposite; +import org.eclipse.ui.forms.widgets.FormText; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.eclipse.ui.forms.widgets.Section; + +/** + * @author Donald G. Dunne + */ +public class SMADetailsSection extends SectionPart { + + private FormText formText; + private final SMAEditor editor; + private boolean sectionCreated = false; + + public SMADetailsSection(SMAEditor editor, Composite parent, FormToolkit toolkit, int style) { + super(parent, toolkit, style | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR); + this.editor = editor; + } + + @Override + public void initialize(IManagedForm form) { + super.initialize(form); + Section section = getSection(); + section.setText("Details"); + section.setLayout(new GridLayout()); + section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + + // Only load when users selects section + section.addListener(SWT.Activate, new Listener() { + + @Override + public void handleEvent(Event e) { + createSection(); + } + }); + } + + private synchronized void createSection() { + if (!sectionCreated) { + final FormToolkit toolkit = getManagedForm().getToolkit(); + Composite composite = toolkit.createComposite(getSection(), toolkit.getBorderStyle() | SWT.WRAP); + composite.setLayout(new GridLayout()); + composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + formText = toolkit.createFormText(composite, false); + GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); + gd.widthHint = 200; + formText.setLayoutData(gd); + + getSection().setClient(composite); + toolkit.paintBordersFor(composite); + sectionCreated = true; + } + + if (Widgets.isAccessible(formText)) { + try { + formText.setText(Artifacts.getDetailsFormText(editor.getSma().getSMADetails()), true, true); + } catch (Exception ex) { + formText.setText(Lib.exceptionToString(ex), false, false); + } + getManagedForm().reflow(true); + } + } + + @Override + public void dispose() { + if (formText != null && !formText.isDisposed()) { + formText.dispose(); + } + super.dispose(); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMADragAndDrop.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMADragAndDrop.java index 8db09b4579a..9cecd200467 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMADragAndDrop.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMADragAndDrop.java @@ -1,41 +1,41 @@ -/*******************************************************************************
- * 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.editor;
-
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.ui.skynet.util.SkynetDragAndDrop;
-import org.eclipse.swt.dnd.DragSourceEvent;
-import org.eclipse.swt.widgets.Control;
-
-/**
- * @author Donald G. Dunne
- */
-public class SMADragAndDrop extends SkynetDragAndDrop {
-
- private final StateMachineArtifact sma;
-
- public SMADragAndDrop(Control control, StateMachineArtifact sma, String viewId) {
- super(control, viewId);
- this.sma = sma;
- }
-
- @Override
- public Artifact[] getArtifacts() {
- return new Artifact[] {sma};
- }
-
- @Override
- public void artifactTransferDragSetData(DragSourceEvent event) {
- super.artifactTransferDragSetData(event);
- }
-
-}
+/******************************************************************************* + * 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.editor; + +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.ui.skynet.util.SkynetDragAndDrop; +import org.eclipse.swt.dnd.DragSourceEvent; +import org.eclipse.swt.widgets.Control; + +/** + * @author Donald G. Dunne + */ +public class SMADragAndDrop extends SkynetDragAndDrop { + + private final StateMachineArtifact sma; + + public SMADragAndDrop(Control control, StateMachineArtifact sma, String viewId) { + super(control, viewId); + this.sma = sma; + } + + @Override + public Artifact[] getArtifacts() { + return new Artifact[] {sma}; + } + + @Override + public void artifactTransferDragSetData(DragSourceEvent event) { + super.artifactTransferDragSetData(event); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAEditor.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAEditor.java index b63cde6f1bd..21ff9cc188e 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAEditor.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAEditor.java @@ -1,788 +1,788 @@ -/*******************************************************************************
- * 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.editor;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Level;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.osee.ats.actions.AccessControlAction;
-import org.eclipse.osee.ats.actions.DirtyReportAction;
-import org.eclipse.osee.ats.actions.ISelectedAtsArtifacts;
-import org.eclipse.osee.ats.actions.ResourceHistoryAction;
-import org.eclipse.osee.ats.artifact.ReviewSMArtifact;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.ats.artifact.TaskArtifact;
-import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.artifact.VersionArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.navigate.VisitedItems;
-import org.eclipse.osee.ats.task.IXTaskViewer;
-import org.eclipse.osee.ats.task.TaskComposite;
-import org.eclipse.osee.ats.task.TaskTabXWidgetActionPage;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.ats.util.widgets.ReviewManager;
-import org.eclipse.osee.ats.world.AtsMetricsComposite;
-import org.eclipse.osee.ats.world.IAtsMetricsProvider;
-import org.eclipse.osee.framework.access.AccessControlManager;
-import org.eclipse.osee.framework.core.enums.PermissionEnum;
-import org.eclipse.osee.framework.core.exception.OseeArgumentException;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.plugin.core.IActionable;
-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.artifact.BranchManager;
-import org.eclipse.osee.framework.skynet.core.event.BranchEventType;
-import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData;
-import org.eclipse.osee.framework.skynet.core.event.IArtifactReloadEventListener;
-import org.eclipse.osee.framework.skynet.core.event.IArtifactsPurgedEventListener;
-import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener;
-import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener;
-import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
-import org.eclipse.osee.framework.skynet.core.event.Sender;
-import org.eclipse.osee.framework.skynet.core.event2.BranchEvent;
-import org.eclipse.osee.framework.skynet.core.event2.filter.IEventFilter;
-import org.eclipse.osee.framework.skynet.core.relation.RelationManager;
-import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
-import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts;
-import org.eclipse.osee.framework.ui.plugin.OseeUiActions;
-import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.skynet.ArtifactImageManager;
-import org.eclipse.osee.framework.ui.skynet.AttributesComposite;
-import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
-import org.eclipse.osee.framework.ui.skynet.OseeContributionItem;
-import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
-import org.eclipse.osee.framework.ui.skynet.artifact.editor.AbstractArtifactEditor;
-import org.eclipse.osee.framework.ui.skynet.notify.OseeNotificationManager;
-import org.eclipse.osee.framework.ui.skynet.render.PresentationType;
-import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
-import org.eclipse.osee.framework.ui.swt.Displays;
-import org.eclipse.osee.framework.ui.swt.IDirtiableEditor;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IEditorReference;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.ActionFactory;
-import org.eclipse.ui.part.MultiPageEditorPart;
-
-/**
- * <REM2>
- *
- * @author Donald G. Dunne
- */
-public class SMAEditor extends AbstractArtifactEditor implements ISMAEditorEventHandler, ISelectedAtsArtifacts, IActionable, IArtifactReloadEventListener, IAtsMetricsProvider, IArtifactsPurgedEventListener, IFrameworkTransactionEventListener, IBranchEventListener, IXTaskViewer {
- public static final String EDITOR_ID = "org.eclipse.osee.ats.editor.SMAEditor";
- private StateMachineArtifact sma;
- private int workFlowPageIndex, metricsPageIndex, attributesPageIndex;
- private SMAWorkFlowTab workFlowTab;
- private AttributesComposite attributesComposite;
- private boolean priviledgedEditModeEnabled = false;
- private Action printAction;
- private TaskTabXWidgetActionPage taskTabXWidgetActionPage;
- private final List<ISMAEditorListener> editorListeners = new ArrayList<ISMAEditorListener>();
-
- public SMAEditor() {
- super();
- }
-
- @Override
- protected void addPages() {
- try {
- IEditorInput editorInput = getEditorInput();
- if (editorInput instanceof SMAEditorInput) {
- SMAEditorInput aei = (SMAEditorInput) editorInput;
- if (aei.getArtifact() != null) {
- if (aei.getArtifact() instanceof StateMachineArtifact) {
- sma = (StateMachineArtifact) aei.getArtifact();
- } else {
- throw new OseeArgumentException("SMAEditorInput artifact must be StateMachineArtifact");
- }
- }
- } else {
- throw new OseeArgumentException("Editor Input not SMAEditorInput");
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- return;
- }
-
- if (sma == null) {
- MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Open Error",
- "Can't Find Action in DB");
- return;
- }
- try {
- sma.setEditor(this);
- if (OseeEventManager.getPreferences().isOldEvents()) {
- OseeEventManager.addListener(this); // <REM2> Don't need this cause handled through SMAEditorEventManager
- } else if (OseeEventManager.getPreferences().isNewEvents()) {
- SMAEditorArtifactEventManager.add(this);
- SMAEditorBranchEventManager.add(this);
- }
-
- updatePartName();
-
- setContentDescription(priviledgedEditModeEnabled ? " PRIVILEGED EDIT MODE ENABLED" : "");
-
- // Create WorkFlow tab
- try {
- workFlowTab = new SMAWorkFlowTab(sma);
- workFlowPageIndex = addPage(workFlowTab);
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
-
- // Create Tasks tab
- if (sma.showTaskTab()) {
- createTaskTab();
- }
-
- createAttributesTab();
- createMetricsTab();
-
- setActivePage(workFlowPageIndex);
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
-
- enableGlobalPrint();
- }
-
- private void createTaskTab() throws PartInitException {
- taskTabXWidgetActionPage = new TaskTabXWidgetActionPage(this);
- addPage(taskTabXWidgetActionPage);
- }
-
- private void updatePartName() throws OseeCoreException {
- setPartName(getTitleStr());
- setTitleImage(ArtifactImageManager.getImage(sma));
- }
-
- public String getTitleStr() throws OseeCoreException {
- return sma.getEditorTitle();
- }
-
- @Override
- public void doSave(IProgressMonitor monitor) {
- try {
- if (sma.isHistoricalVersion()) {
- AWorkbench.popup("Historical Error",
- "You can not change a historical version of " + sma.getArtifactTypeName() + ":\n\n" + sma);
- } else if (!sma.isAccessControlWrite()) {
- AWorkbench.popup("Authentication Error",
- "You do not have permissions to save " + sma.getArtifactTypeName() + ":" + sma);
- } else {
- try {
- SkynetTransaction transaction = new SkynetTransaction(AtsUtil.getAtsBranch(), "Workflow Editor - Save");
- // If change was made on Attribute tab, persist sma separately. This is cause attribute
- // tab changes conflict with XWidget changes
- if (attributesComposite != null && getActivePage() == attributesPageIndex) {
- sma.persist(transaction);
- }
- // Save widget data to artifact
- workFlowTab.saveXWidgetToArtifact();
- sma.saveSMA(transaction);
- transaction.execute();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- onDirtied();
- }
-
- OseeNotificationManager.getInstance().sendNotifications();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- public static void setLabelFonts(Control parent, Font font) {
- if (parent instanceof Label) {
- Label label = (Label) parent;
- label.setFont(font);
- }
- if (parent instanceof Composite) {
- Composite container = (Composite) parent;
- for (Control child : container.getChildren()) {
- setLabelFonts(child, font);
- }
- container.layout();
- }
- }
-
- void enableGlobalPrint() {
- printAction = new SMAPrint(sma);
- getEditorSite().getActionBars().setGlobalActionHandler(ActionFactory.PRINT.getId(), printAction);
- }
-
- @Override
- public boolean isSaveOnCloseNeeded() {
- return isDirty();
- }
-
- @Override
- public void dispose() {
- for (ISMAEditorListener listener : editorListeners) {
- listener.editorDisposing();
- }
- OseeEventManager.removeListener(this); // <REM2> Don't need this cause handled through SMAEditorEventManager
- SMAEditorArtifactEventManager.remove(this);
- SMAEditorBranchEventManager.remove(this);
- if (sma != null && !sma.isDeleted() && sma.isSMAEditorDirty().isTrue()) {
- sma.revertSMA();
- }
- workFlowTab.dispose();
- super.dispose();
- }
-
- @Override
- public boolean isDirty() {
- return isDirtyResult().isTrue();
- }
-
- public Result isDirtyResult() {
- if (sma.isDeleted()) {
- return Result.FalseResult;
- }
- try {
- Result result = workFlowTab.isXWidgetDirty();
- if (result.isTrue()) {
- return result;
- }
- result = ((StateMachineArtifact) ((SMAEditorInput) getEditorInput()).getArtifact()).isSMAEditorDirty();
- if (result.isTrue()) {
- return result;
- }
-
- String rString = null;
- for (Attribute<?> attribute : sma.internalGetAttributes()) {
- if (attribute.isDirty()) {
- rString = "Attribute: " + attribute.getNameValueDescription();
- break;
- }
- }
-
- if (rString == null) {
- rString = RelationManager.reportHasDirtyLinks(sma);
- }
-
- return new Result((rString != null), rString);
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- return new Result(true, ex.getLocalizedMessage());
- }
- }
-
- @Override
- public String toString() {
- return "SMAEditor - " + sma.getHumanReadableId() + " - " + sma.getArtifactTypeName() + " named \"" + sma.getName() + "\"";
- }
-
- @Override
- protected void createPages() {
- super.createPages();
- OseeContributionItem.addTo(this, true);
- }
-
- private void createMetricsTab() {
- try {
- Composite composite = AtsUtil.createCommonPageComposite(getContainer());
- createToolBar(composite);
- new AtsMetricsComposite(this, composite, SWT.NONE);
- metricsPageIndex = addPage(composite);
- setPageText(metricsPageIndex, "Metrics");
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
-
- }
-
- private void createAttributesTab() {
- try {
- if (!AtsUtil.isAtsAdmin()) {
- return;
- }
-
- // Create Attributes tab
- Composite composite = AtsUtil.createCommonPageComposite(getContainer());
- ToolBar toolBar = createToolBar(composite);
-
- ToolItem item = new ToolItem(toolBar, SWT.PUSH);
- item.setImage(ImageManager.getImage(FrameworkImage.SAVE));
- item.setToolTipText("Save attributes changes only");
- item.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- try {
- sma.persist();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
- });
-
- Label label = new Label(composite, SWT.NONE);
- label.setText(" NOTE: Changes made on this page MUST be saved through save icon on this page");
- label.setForeground(Displays.getSystemColor(SWT.COLOR_RED));
-
- attributesComposite = new AttributesComposite(this, composite, SWT.NONE, sma);
- attributesPageIndex = addPage(composite);
- setPageText(attributesPageIndex, "Attributes");
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- private ToolBar createToolBar(Composite parent) {
- ToolBar toolBar = AtsUtil.createCommonToolBar(parent);
-
- OseeUiActions.addButtonToEditorToolBar(this, SkynetGuiPlugin.getInstance(), toolBar, EDITOR_ID, "ATS Editor");
- AtsUtil.actionToToolItem(toolBar, new ResourceHistoryAction(sma), FrameworkImage.EDIT_BLUE);
- AtsUtil.actionToToolItem(toolBar, new AccessControlAction(sma), FrameworkImage.AUTHENTICATED);
- AtsUtil.actionToToolItem(toolBar, new DirtyReportAction(sma), FrameworkImage.DIRTY);
- new ToolItem(toolBar, SWT.SEPARATOR);
- Text artifactInfoLabel = new Text(toolBar.getParent(), SWT.END);
- artifactInfoLabel.setEditable(false);
- artifactInfoLabel.setText("Type: \"" + sma.getArtifactTypeName() + "\" HRID: " + sma.getHumanReadableId());
- artifactInfoLabel.setToolTipText("The human readable id and database id for this artifact");
-
- return toolBar;
- }
-
- public void refreshPages() {
- try {
- if (getContainer() == null || getContainer().isDisposed()) {
- return;
- }
- if (workFlowTab != null) {
- workFlowTab.refresh();
- }
- if (attributesComposite != null) {
- attributesComposite.refreshArtifact(sma);
- }
- sma.getEditor().onDirtied();
- updatePartName();
- } catch (Exception ex) {
- // do nothing
- }
- }
-
- public static void editArtifact(Artifact artifact) throws OseeCoreException {
- if (artifact == null) {
- return;
- }
- if (artifact.isDeleted()) {
- AWorkbench.popup("ERROR", "Artifact has been deleted");
- return;
- }
- if (artifact instanceof StateMachineArtifact) {
- editArtifact((StateMachineArtifact) artifact);
- } else {
- RendererManager.open(artifact, PresentationType.GENERALIZED_EDIT);
- }
- }
-
- public static void editArtifact(final StateMachineArtifact sma) {
- if (sma == null) {
- return;
- }
- if (sma.isDeleted()) {
- AWorkbench.popup("ERROR", "Artifact has been deleted");
- return;
- }
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- IWorkbenchPage page = AWorkbench.getActivePage();
- try {
- page.openEditor(new SMAEditorInput(sma), EDITOR_ID);
- VisitedItems.addVisited(sma);
- } catch (PartInitException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
- });
-
- }
-
- @Override
- public void onDirtied() {
- Displays.ensureInDisplayThread(new Runnable() {
-
- @Override
- public void run() {
- firePropertyChange(PROP_DIRTY);
- }
- });
- }
-
- public static void close(final Collection<? extends StateMachineArtifact> artifacts, boolean save) {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
- IEditorReference editors[] = page.getEditorReferences();
- for (int j = 0; j < editors.length; j++) {
- IEditorReference editor = editors[j];
- if (editor.getPart(false) instanceof SMAEditor) {
- if (artifacts.contains(((SMAEditor) editor.getPart(false)).getSma())) {
- ((SMAEditor) editor.getPart(false)).closeEditor();
- }
- }
- }
- }
- });
- }
-
- public static SMAEditor getSmaEditor(StateMachineArtifact artifact) {
- IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
- IEditorReference editors[] = page.getEditorReferences();
- for (int j = 0; j < editors.length; j++) {
- IEditorReference editor = editors[j];
- if (editor.getPart(false) instanceof SMAEditor) {
- if (((SMAEditor) editor.getPart(false)).getSma().equals(artifact)) {
- return (SMAEditor) editor.getPart(false);
- }
- }
- }
- return null;
- }
-
- public void closeEditor() {
- final MultiPageEditorPart editor = this;
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- AWorkbench.getActivePage().closeEditor(editor, false);
- }
- });
- }
-
- @Override
- public StateMachineArtifact getSma() {
- return sma;
- }
-
- @Override
- public String getCurrentStateName() throws OseeCoreException {
- return sma.getStateMgr().getCurrentStateName();
- }
-
- @Override
- public IDirtiableEditor getEditor() {
- return this;
- }
-
- @Override
- public String getTabName() {
- return "Tasks";
- }
-
- @Override
- public Collection<TaskArtifact> getTaskArtifacts(String stateName) throws OseeCoreException {
- if (sma instanceof TaskableStateMachineArtifact) {
- if (!Strings.isValid(stateName)) {
- return ((TaskableStateMachineArtifact) sma).getTaskArtifacts();
- } else {
- return ((TaskableStateMachineArtifact) sma).getTaskArtifacts(stateName);
- }
- }
- return Collections.emptyList();
- }
-
- @Override
- public boolean isTaskable() throws OseeCoreException {
- return sma.isTaskable();
- }
-
- @Override
- public boolean isTasksEditable() throws OseeCoreException {
- return sma.isTaskable();
- }
-
- public boolean isPriviledgedEditModeEnabled() {
- return priviledgedEditModeEnabled;
- }
-
- /**
- * @param priviledgedEditMode the priviledgedEditMode to set s * @throws OseeCoreException
- */
- public void setPriviledgedEditMode(boolean enabled) {
- this.priviledgedEditModeEnabled = enabled;
- doSave(null);
- workFlowTab.refresh();
- }
-
- public boolean isAccessControlWrite() throws OseeCoreException {
- return AccessControlManager.hasPermission(sma, PermissionEnum.WRITE);
- }
-
- @Override
- public void handleBranchEventREM1(Sender sender, BranchEventType branchModType, int branchId) {
- try {
- handleBranchEvent(branchModType, BranchManager.getBranch(branchId));
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- private void handleBranchEvent(BranchEventType branchModType, Branch branch) {
- try {
- if (!sma.isTeamWorkflow()) {
- return;
- }
- if (sma.isInTransition()) {
- return;
- }
- if (branchModType == BranchEventType.Added || branchModType == BranchEventType.Deleted || branchModType == BranchEventType.Purged || branchModType == BranchEventType.Committed) {
- if (((TeamWorkFlowArtifact) sma).getBranchMgr().getId() == null || ((TeamWorkFlowArtifact) sma).getBranchMgr().getId() != branch.getId()) {
- return;
- }
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- if (getContainer() == null || getContainer().isDisposed()) {
- return;
- }
- try {
- refreshPages();
- onDirtied();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- });
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- @Override
- public void handleFrameworkTransactionEvent(Sender sender, FrameworkTransactionData transData) throws OseeCoreException {
- if (sma.isInTransition()) {
- return;
- }
- if (transData.branchId != AtsUtil.getAtsBranch().getId()) {
- return;
- }
- if (transData.isDeleted(sma)) {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- closeEditor();
- }
- });
- } else if (transData.isHasEvent(sma)) {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- try {
- refreshPages();
- onDirtied();
- } catch (Exception ex) {
- // do nothing
- }
- }
- });
- } else if (sma.isTeamWorkflow() && ReviewManager.hasReviews((TeamWorkFlowArtifact) sma)) {
- try {
- // If related review has made a change, redraw
- for (ReviewSMArtifact reviewArt : ReviewManager.getReviews((TeamWorkFlowArtifact) sma)) {
- if (transData.isHasEvent(reviewArt)) {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- try {
- refreshPages();
- onDirtied();
- } catch (Exception ex) {
- // do nothing
- }
- }
- });
- // Only refresh editor for first review that has event
- break;
- }
- }
- } catch (Exception ex) {
- // do nothings
- }
- }
- onDirtied();
- }
-
- @Override
- public void handleArtifactsPurgedEvent(Sender sender, LoadedArtifacts loadedArtifacts) {
- try {
- if (loadedArtifacts.getLoadedArtifacts().contains(sma)) {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- closeEditor();
- }
- });
- }
- } catch (Exception ex) {
+/******************************************************************************* + * 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.editor; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import java.util.logging.Level; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.osee.ats.actions.AccessControlAction; +import org.eclipse.osee.ats.actions.DirtyReportAction; +import org.eclipse.osee.ats.actions.ISelectedAtsArtifacts; +import org.eclipse.osee.ats.actions.ResourceHistoryAction; +import org.eclipse.osee.ats.artifact.ReviewSMArtifact; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.artifact.TaskArtifact; +import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.artifact.VersionArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.navigate.VisitedItems; +import org.eclipse.osee.ats.task.IXTaskViewer; +import org.eclipse.osee.ats.task.TaskComposite; +import org.eclipse.osee.ats.task.TaskTabXWidgetActionPage; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.ats.util.widgets.ReviewManager; +import org.eclipse.osee.ats.world.AtsMetricsComposite; +import org.eclipse.osee.ats.world.IAtsMetricsProvider; +import org.eclipse.osee.framework.access.AccessControlManager; +import org.eclipse.osee.framework.core.enums.PermissionEnum; +import org.eclipse.osee.framework.core.exception.OseeArgumentException; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.plugin.core.IActionable; +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.artifact.BranchManager; +import org.eclipse.osee.framework.skynet.core.event.BranchEventType; +import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData; +import org.eclipse.osee.framework.skynet.core.event.IArtifactReloadEventListener; +import org.eclipse.osee.framework.skynet.core.event.IArtifactsPurgedEventListener; +import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener; +import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener; +import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; +import org.eclipse.osee.framework.skynet.core.event.Sender; +import org.eclipse.osee.framework.skynet.core.event2.BranchEvent; +import org.eclipse.osee.framework.skynet.core.event2.filter.IEventFilter; +import org.eclipse.osee.framework.skynet.core.relation.RelationManager; +import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction; +import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts; +import org.eclipse.osee.framework.ui.plugin.OseeUiActions; +import org.eclipse.osee.framework.ui.plugin.util.AWorkbench; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.skynet.ArtifactImageManager; +import org.eclipse.osee.framework.ui.skynet.AttributesComposite; +import org.eclipse.osee.framework.ui.skynet.FrameworkImage; +import org.eclipse.osee.framework.ui.skynet.OseeContributionItem; +import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin; +import org.eclipse.osee.framework.ui.skynet.artifact.editor.AbstractArtifactEditor; +import org.eclipse.osee.framework.ui.skynet.notify.OseeNotificationManager; +import org.eclipse.osee.framework.ui.skynet.render.PresentationType; +import org.eclipse.osee.framework.ui.skynet.render.RendererManager; +import org.eclipse.osee.framework.ui.swt.Displays; +import org.eclipse.osee.framework.ui.swt.IDirtiableEditor; +import org.eclipse.osee.framework.ui.swt.ImageManager; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; +import org.eclipse.swt.widgets.ToolBar; +import org.eclipse.swt.widgets.ToolItem; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IEditorReference; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.actions.ActionFactory; +import org.eclipse.ui.part.MultiPageEditorPart; + +/** + * <REM2> + * + * @author Donald G. Dunne + */ +public class SMAEditor extends AbstractArtifactEditor implements ISMAEditorEventHandler, ISelectedAtsArtifacts, IActionable, IArtifactReloadEventListener, IAtsMetricsProvider, IArtifactsPurgedEventListener, IFrameworkTransactionEventListener, IBranchEventListener, IXTaskViewer { + public static final String EDITOR_ID = "org.eclipse.osee.ats.editor.SMAEditor"; + private StateMachineArtifact sma; + private int workFlowPageIndex, metricsPageIndex, attributesPageIndex; + private SMAWorkFlowTab workFlowTab; + private AttributesComposite attributesComposite; + private boolean priviledgedEditModeEnabled = false; + private Action printAction; + private TaskTabXWidgetActionPage taskTabXWidgetActionPage; + private final List<ISMAEditorListener> editorListeners = new ArrayList<ISMAEditorListener>(); + + public SMAEditor() { + super(); + } + + @Override + protected void addPages() { + try { + IEditorInput editorInput = getEditorInput(); + if (editorInput instanceof SMAEditorInput) { + SMAEditorInput aei = (SMAEditorInput) editorInput; + if (aei.getArtifact() != null) { + if (aei.getArtifact() instanceof StateMachineArtifact) { + sma = (StateMachineArtifact) aei.getArtifact(); + } else { + throw new OseeArgumentException("SMAEditorInput artifact must be StateMachineArtifact"); + } + } + } else { + throw new OseeArgumentException("Editor Input not SMAEditorInput"); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + return; + } + + if (sma == null) { + MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Open Error", + "Can't Find Action in DB"); + return; + } + try { + sma.setEditor(this); + if (OseeEventManager.getPreferences().isOldEvents()) { + OseeEventManager.addListener(this); // <REM2> Don't need this cause handled through SMAEditorEventManager + } else if (OseeEventManager.getPreferences().isNewEvents()) { + SMAEditorArtifactEventManager.add(this); + SMAEditorBranchEventManager.add(this); + } + + updatePartName(); + + setContentDescription(priviledgedEditModeEnabled ? " PRIVILEGED EDIT MODE ENABLED" : ""); + + // Create WorkFlow tab + try { + workFlowTab = new SMAWorkFlowTab(sma); + workFlowPageIndex = addPage(workFlowTab); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + + // Create Tasks tab + if (sma.showTaskTab()) { + createTaskTab(); + } + + createAttributesTab(); + createMetricsTab(); + + setActivePage(workFlowPageIndex); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + + enableGlobalPrint(); + } + + private void createTaskTab() throws PartInitException { + taskTabXWidgetActionPage = new TaskTabXWidgetActionPage(this); + addPage(taskTabXWidgetActionPage); + } + + private void updatePartName() throws OseeCoreException { + setPartName(getTitleStr()); + setTitleImage(ArtifactImageManager.getImage(sma)); + } + + public String getTitleStr() throws OseeCoreException { + return sma.getEditorTitle(); + } + + @Override + public void doSave(IProgressMonitor monitor) { + try { + if (sma.isHistoricalVersion()) { + AWorkbench.popup("Historical Error", + "You can not change a historical version of " + sma.getArtifactTypeName() + ":\n\n" + sma); + } else if (!sma.isAccessControlWrite()) { + AWorkbench.popup("Authentication Error", + "You do not have permissions to save " + sma.getArtifactTypeName() + ":" + sma); + } else { + try { + SkynetTransaction transaction = new SkynetTransaction(AtsUtil.getAtsBranch(), "Workflow Editor - Save"); + // If change was made on Attribute tab, persist sma separately. This is cause attribute + // tab changes conflict with XWidget changes + if (attributesComposite != null && getActivePage() == attributesPageIndex) { + sma.persist(transaction); + } + // Save widget data to artifact + workFlowTab.saveXWidgetToArtifact(); + sma.saveSMA(transaction); + transaction.execute(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + onDirtied(); + } + + OseeNotificationManager.getInstance().sendNotifications(); + } catch (Exception ex) { OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); - }
- }
-
- @Override
- public String getActionDescription() {
- return null;
- }
-
- @Override
- public Collection<? extends Artifact> getMetricsArtifacts() {
- return Arrays.asList(sma);
- }
-
- @Override
- public VersionArtifact getMetricsVersionArtifact() throws OseeCoreException {
- return sma.getWorldViewTargetedVersion();
- }
-
- @Override
- public void handleRefreshAction() {
- // do nothing
- }
-
- @Override
- public boolean isRefreshActionHandled() {
- return false;
- }
-
- @Override
- public double getManHoursPerDayPreference() throws OseeCoreException {
- return sma.getManHrsPerDayPreference();
- }
-
- public SMAWorkFlowTab getWorkFlowTab() {
- return workFlowTab;
- }
-
- public TaskComposite getTaskComposite() {
- return taskTabXWidgetActionPage.getTaskComposite();
- }
-
- @Override
- public void handleReloadEvent(Sender sender, Collection<? extends Artifact> artifacts) throws OseeCoreException {
- boolean reload = false;
- if (artifacts.contains(sma)) {
- reload = true;
- }
- if (!reload) {
- if (sma instanceof TaskableStateMachineArtifact) {
- for (TaskArtifact taskArt : ((TaskableStateMachineArtifact) sma).getTaskArtifacts()) {
- if (artifacts.contains(taskArt)) {
- reload = true;
- break;
- }
- }
- }
- }
- if (!reload && sma.isTeamWorkflow()) {
- for (ReviewSMArtifact reviewArt : ReviewManager.getReviews((TeamWorkFlowArtifact) sma)) {
- if (artifacts.contains(reviewArt)) {
- reload = true;
- break;
- }
-
- }
- }
- if (reload) {
- SMAEditor.close(Collections.singleton(sma), false);
- if (!sma.isDeleted()) {
- SMAEditor.editArtifact(sma);
- }
- }
- }
-
- @Override
- public IActionable getActionable() {
- return this;
- }
-
- @Override
- public Set<? extends Artifact> getSelectedSMAArtifacts() {
- return Collections.singleton(sma);
- }
-
- public Action getPrintAction() {
- return printAction;
- }
-
- @Override
- public IEditorPart getActiveEditor() {
- return this;
- }
-
- @Override
- public SMAEditor getSMAEditor() {
- return this;
- }
-
- @Override
- public boolean isDisposed() {
- return getContainer() == null || getContainer().isDisposed();
- }
-
- @Override
- public void handleBranchEvent(Sender sender, BranchEvent branchEvent) {
- try {
- handleBranchEvent(branchEvent.getEventType(), BranchManager.getBranchByGuid(branchEvent.getBranchGuid()));
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- @Override
- public List<? extends IEventFilter> getEventFilters() {
- return OseeEventManager.getCommonBranchEventFilters();
- }
-
- public void addEditorListeners(ISMAEditorListener listener) {
- editorListeners.add(listener);
- }
-
- @Override
- public List<Artifact> getSelectedAtsArtifacts() {
- List<Artifact> arts = new ArrayList<Artifact>();
- arts.add(sma);
- return arts;
- }
+ } + } + + public static void setLabelFonts(Control parent, Font font) { + if (parent instanceof Label) { + Label label = (Label) parent; + label.setFont(font); + } + if (parent instanceof Composite) { + Composite container = (Composite) parent; + for (Control child : container.getChildren()) { + setLabelFonts(child, font); + } + container.layout(); + } + } + + void enableGlobalPrint() { + printAction = new SMAPrint(sma); + getEditorSite().getActionBars().setGlobalActionHandler(ActionFactory.PRINT.getId(), printAction); + } + + @Override + public boolean isSaveOnCloseNeeded() { + return isDirty(); + } + + @Override + public void dispose() { + for (ISMAEditorListener listener : editorListeners) { + listener.editorDisposing(); + } + OseeEventManager.removeListener(this); // <REM2> Don't need this cause handled through SMAEditorEventManager + SMAEditorArtifactEventManager.remove(this); + SMAEditorBranchEventManager.remove(this); + if (sma != null && !sma.isDeleted() && sma.isSMAEditorDirty().isTrue()) { + sma.revertSMA(); + } + workFlowTab.dispose(); + super.dispose(); + } + + @Override + public boolean isDirty() { + return isDirtyResult().isTrue(); + } + + public Result isDirtyResult() { + if (sma.isDeleted()) { + return Result.FalseResult; + } + try { + Result result = workFlowTab.isXWidgetDirty(); + if (result.isTrue()) { + return result; + } + result = ((StateMachineArtifact) ((SMAEditorInput) getEditorInput()).getArtifact()).isSMAEditorDirty(); + if (result.isTrue()) { + return result; + } + + String rString = null; + for (Attribute<?> attribute : sma.internalGetAttributes()) { + if (attribute.isDirty()) { + rString = "Attribute: " + attribute.getNameValueDescription(); + break; + } + } + + if (rString == null) { + rString = RelationManager.reportHasDirtyLinks(sma); + } + + return new Result((rString != null), rString); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + return new Result(true, ex.getLocalizedMessage()); + } + } + + @Override + public String toString() { + return "SMAEditor - " + sma.getHumanReadableId() + " - " + sma.getArtifactTypeName() + " named \"" + sma.getName() + "\""; + } + + @Override + protected void createPages() { + super.createPages(); + OseeContributionItem.addTo(this, true); + } + + private void createMetricsTab() { + try { + Composite composite = AtsUtil.createCommonPageComposite(getContainer()); + createToolBar(composite); + new AtsMetricsComposite(this, composite, SWT.NONE); + metricsPageIndex = addPage(composite); + setPageText(metricsPageIndex, "Metrics"); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + + } + + private void createAttributesTab() { + try { + if (!AtsUtil.isAtsAdmin()) { + return; + } + + // Create Attributes tab + Composite composite = AtsUtil.createCommonPageComposite(getContainer()); + ToolBar toolBar = createToolBar(composite); + + ToolItem item = new ToolItem(toolBar, SWT.PUSH); + item.setImage(ImageManager.getImage(FrameworkImage.SAVE)); + item.setToolTipText("Save attributes changes only"); + item.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + try { + sma.persist(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + }); + + Label label = new Label(composite, SWT.NONE); + label.setText(" NOTE: Changes made on this page MUST be saved through save icon on this page"); + label.setForeground(Displays.getSystemColor(SWT.COLOR_RED)); + + attributesComposite = new AttributesComposite(this, composite, SWT.NONE, sma); + attributesPageIndex = addPage(composite); + setPageText(attributesPageIndex, "Attributes"); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + private ToolBar createToolBar(Composite parent) { + ToolBar toolBar = AtsUtil.createCommonToolBar(parent); + + OseeUiActions.addButtonToEditorToolBar(this, SkynetGuiPlugin.getInstance(), toolBar, EDITOR_ID, "ATS Editor"); + AtsUtil.actionToToolItem(toolBar, new ResourceHistoryAction(sma), FrameworkImage.EDIT_BLUE); + AtsUtil.actionToToolItem(toolBar, new AccessControlAction(sma), FrameworkImage.AUTHENTICATED); + AtsUtil.actionToToolItem(toolBar, new DirtyReportAction(sma), FrameworkImage.DIRTY); + new ToolItem(toolBar, SWT.SEPARATOR); + Text artifactInfoLabel = new Text(toolBar.getParent(), SWT.END); + artifactInfoLabel.setEditable(false); + artifactInfoLabel.setText("Type: \"" + sma.getArtifactTypeName() + "\" HRID: " + sma.getHumanReadableId()); + artifactInfoLabel.setToolTipText("The human readable id and database id for this artifact"); + + return toolBar; + } + + public void refreshPages() { + try { + if (getContainer() == null || getContainer().isDisposed()) { + return; + } + if (workFlowTab != null) { + workFlowTab.refresh(); + } + if (attributesComposite != null) { + attributesComposite.refreshArtifact(sma); + } + sma.getEditor().onDirtied(); + updatePartName(); + } catch (Exception ex) { + // do nothing + } + } + + public static void editArtifact(Artifact artifact) throws OseeCoreException { + if (artifact == null) { + return; + } + if (artifact.isDeleted()) { + AWorkbench.popup("ERROR", "Artifact has been deleted"); + return; + } + if (artifact instanceof StateMachineArtifact) { + editArtifact((StateMachineArtifact) artifact); + } else { + RendererManager.open(artifact, PresentationType.GENERALIZED_EDIT); + } + } + + public static void editArtifact(final StateMachineArtifact sma) { + if (sma == null) { + return; + } + if (sma.isDeleted()) { + AWorkbench.popup("ERROR", "Artifact has been deleted"); + return; + } + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + IWorkbenchPage page = AWorkbench.getActivePage(); + try { + page.openEditor(new SMAEditorInput(sma), EDITOR_ID); + VisitedItems.addVisited(sma); + } catch (PartInitException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + }); + + } + + @Override + public void onDirtied() { + Displays.ensureInDisplayThread(new Runnable() { + + @Override + public void run() { + firePropertyChange(PROP_DIRTY); + } + }); + } + + public static void close(final Collection<? extends StateMachineArtifact> artifacts, boolean save) { + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + IEditorReference editors[] = page.getEditorReferences(); + for (int j = 0; j < editors.length; j++) { + IEditorReference editor = editors[j]; + if (editor.getPart(false) instanceof SMAEditor) { + if (artifacts.contains(((SMAEditor) editor.getPart(false)).getSma())) { + ((SMAEditor) editor.getPart(false)).closeEditor(); + } + } + } + } + }); + } + + public static SMAEditor getSmaEditor(StateMachineArtifact artifact) { + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + IEditorReference editors[] = page.getEditorReferences(); + for (int j = 0; j < editors.length; j++) { + IEditorReference editor = editors[j]; + if (editor.getPart(false) instanceof SMAEditor) { + if (((SMAEditor) editor.getPart(false)).getSma().equals(artifact)) { + return (SMAEditor) editor.getPart(false); + } + } + } + return null; + } + + public void closeEditor() { + final MultiPageEditorPart editor = this; + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + AWorkbench.getActivePage().closeEditor(editor, false); + } + }); + } + + @Override + public StateMachineArtifact getSma() { + return sma; + } + + @Override + public String getCurrentStateName() throws OseeCoreException { + return sma.getStateMgr().getCurrentStateName(); + } + + @Override + public IDirtiableEditor getEditor() { + return this; + } + + @Override + public String getTabName() { + return "Tasks"; + } + + @Override + public Collection<TaskArtifact> getTaskArtifacts(String stateName) throws OseeCoreException { + if (sma instanceof TaskableStateMachineArtifact) { + if (!Strings.isValid(stateName)) { + return ((TaskableStateMachineArtifact) sma).getTaskArtifacts(); + } else { + return ((TaskableStateMachineArtifact) sma).getTaskArtifacts(stateName); + } + } + return Collections.emptyList(); + } + + @Override + public boolean isTaskable() throws OseeCoreException { + return sma.isTaskable(); + } + + @Override + public boolean isTasksEditable() throws OseeCoreException { + return sma.isTaskable(); + } + + public boolean isPriviledgedEditModeEnabled() { + return priviledgedEditModeEnabled; + } + + /** + * @param priviledgedEditMode the priviledgedEditMode to set s * @throws OseeCoreException + */ + public void setPriviledgedEditMode(boolean enabled) { + this.priviledgedEditModeEnabled = enabled; + doSave(null); + workFlowTab.refresh(); + } + + public boolean isAccessControlWrite() throws OseeCoreException { + return AccessControlManager.hasPermission(sma, PermissionEnum.WRITE); + } + + @Override + public void handleBranchEventREM1(Sender sender, BranchEventType branchModType, int branchId) { + try { + handleBranchEvent(branchModType, BranchManager.getBranch(branchId)); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + private void handleBranchEvent(BranchEventType branchModType, Branch branch) { + try { + if (!sma.isTeamWorkflow()) { + return; + } + if (sma.isInTransition()) { + return; + } + if (branchModType == BranchEventType.Added || branchModType == BranchEventType.Deleted || branchModType == BranchEventType.Purged || branchModType == BranchEventType.Committed) { + if (((TeamWorkFlowArtifact) sma).getBranchMgr().getId() == null || ((TeamWorkFlowArtifact) sma).getBranchMgr().getId() != branch.getId()) { + return; + } + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + if (getContainer() == null || getContainer().isDisposed()) { + return; + } + try { + refreshPages(); + onDirtied(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + }); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + @Override + public void handleFrameworkTransactionEvent(Sender sender, FrameworkTransactionData transData) throws OseeCoreException { + if (sma.isInTransition()) { + return; + } + if (transData.branchId != AtsUtil.getAtsBranch().getId()) { + return; + } + if (transData.isDeleted(sma)) { + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + closeEditor(); + } + }); + } else if (transData.isHasEvent(sma)) { + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + try { + refreshPages(); + onDirtied(); + } catch (Exception ex) { + // do nothing + } + } + }); + } else if (sma.isTeamWorkflow() && ReviewManager.hasReviews((TeamWorkFlowArtifact) sma)) { + try { + // If related review has made a change, redraw + for (ReviewSMArtifact reviewArt : ReviewManager.getReviews((TeamWorkFlowArtifact) sma)) { + if (transData.isHasEvent(reviewArt)) { + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + try { + refreshPages(); + onDirtied(); + } catch (Exception ex) { + // do nothing + } + } + }); + // Only refresh editor for first review that has event + break; + } + } + } catch (Exception ex) { + // do nothings + } + } + onDirtied(); + } + + @Override + public void handleArtifactsPurgedEvent(Sender sender, LoadedArtifacts loadedArtifacts) { + try { + if (loadedArtifacts.getLoadedArtifacts().contains(sma)) { + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + closeEditor(); + } + }); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + @Override + public String getActionDescription() { + return null; + } + + @Override + public Collection<? extends Artifact> getMetricsArtifacts() { + return Arrays.asList(sma); + } + + @Override + public VersionArtifact getMetricsVersionArtifact() throws OseeCoreException { + return sma.getWorldViewTargetedVersion(); + } + + @Override + public void handleRefreshAction() { + // do nothing + } + + @Override + public boolean isRefreshActionHandled() { + return false; + } + + @Override + public double getManHoursPerDayPreference() throws OseeCoreException { + return sma.getManHrsPerDayPreference(); + } + + public SMAWorkFlowTab getWorkFlowTab() { + return workFlowTab; + } + + public TaskComposite getTaskComposite() { + return taskTabXWidgetActionPage.getTaskComposite(); + } + + @Override + public void handleReloadEvent(Sender sender, Collection<? extends Artifact> artifacts) throws OseeCoreException { + boolean reload = false; + if (artifacts.contains(sma)) { + reload = true; + } + if (!reload) { + if (sma instanceof TaskableStateMachineArtifact) { + for (TaskArtifact taskArt : ((TaskableStateMachineArtifact) sma).getTaskArtifacts()) { + if (artifacts.contains(taskArt)) { + reload = true; + break; + } + } + } + } + if (!reload && sma.isTeamWorkflow()) { + for (ReviewSMArtifact reviewArt : ReviewManager.getReviews((TeamWorkFlowArtifact) sma)) { + if (artifacts.contains(reviewArt)) { + reload = true; + break; + } + + } + } + if (reload) { + SMAEditor.close(Collections.singleton(sma), false); + if (!sma.isDeleted()) { + SMAEditor.editArtifact(sma); + } + } + } + + @Override + public IActionable getActionable() { + return this; + } + + @Override + public Set<? extends Artifact> getSelectedSMAArtifacts() { + return Collections.singleton(sma); + } + + public Action getPrintAction() { + return printAction; + } + + @Override + public IEditorPart getActiveEditor() { + return this; + } + + @Override + public SMAEditor getSMAEditor() { + return this; + } + + @Override + public boolean isDisposed() { + return getContainer() == null || getContainer().isDisposed(); + } + + @Override + public void handleBranchEvent(Sender sender, BranchEvent branchEvent) { + try { + handleBranchEvent(branchEvent.getEventType(), BranchManager.getBranchByGuid(branchEvent.getBranchGuid())); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + @Override + public List<? extends IEventFilter> getEventFilters() { + return OseeEventManager.getCommonBranchEventFilters(); + } + + public void addEditorListeners(ISMAEditorListener listener) { + editorListeners.add(listener); + } + + @Override + public List<Artifact> getSelectedAtsArtifacts() { + List<Artifact> arts = new ArrayList<Artifact>(); + arts.add(sma); + return arts; + } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAEditorArtifactEventManager.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAEditorArtifactEventManager.java index caf113f61f1..686f9d58d7d 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAEditorArtifactEventManager.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAEditorArtifactEventManager.java @@ -95,7 +95,7 @@ public class SMAEditorArtifactEventManager implements IArtifactEventListener { } else if (artifactEvent.isModifiedReloaded(sma) || // artifactEvent.isRelAddedChangedDeleted(sma) || - // + // artifactEvent.isModifiedReloaded(actionArt) || // artifactEvent.isRelAddedChangedDeleted(actionArt)) { diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAEditorInput.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAEditorInput.java index dea5f5a85dd..03be3138182 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAEditorInput.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAEditorInput.java @@ -1,48 +1,48 @@ -/*******************************************************************************
- * 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.editor;
-
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.ui.skynet.artifact.editor.BaseArtifactEditorInput;
-
-/**
- * @author Donald G. Dunne
- */
-public class SMAEditorInput extends BaseArtifactEditorInput {
-
- private final boolean pend;
-
- public SMAEditorInput(Artifact artifact) {
- this(artifact, false);
- }
-
- public SMAEditorInput(Artifact artifact, boolean pend) {
- super(artifact);
- this.pend = pend;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj instanceof SMAEditorInput) {
- return getArtifact() == ((SMAEditorInput) obj).getArtifact();
- }
- return false;
- }
-
- @Override
- public int hashCode() {
- return getArtifact().hashCode();
- }
-
- public boolean isPend() {
- return pend;
- }
-}
+/******************************************************************************* + * 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.editor; + +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.ui.skynet.artifact.editor.BaseArtifactEditorInput; + +/** + * @author Donald G. Dunne + */ +public class SMAEditorInput extends BaseArtifactEditorInput { + + private final boolean pend; + + public SMAEditorInput(Artifact artifact) { + this(artifact, false); + } + + public SMAEditorInput(Artifact artifact, boolean pend) { + super(artifact); + this.pend = pend; + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof SMAEditorInput) { + return getArtifact() == ((SMAEditorInput) obj).getArtifact(); + } + return false; + } + + @Override + public int hashCode() { + return getArtifact().hashCode(); + } + + public boolean isPend() { + return pend; + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAGoalMembersSection.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAGoalMembersSection.java index 0f5c5d9e468..22ff047c3f7 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAGoalMembersSection.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAGoalMembersSection.java @@ -1,410 +1,410 @@ -/*******************************************************************************
- * 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.editor;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.ActionContributionItem;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.nebula.widgets.xviewer.customize.CustomizeData;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.ats.actions.ISelectedAtsArtifacts;
-import org.eclipse.osee.ats.artifact.GoalArtifact;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.ats.goal.GoalXViewerFactory;
-import org.eclipse.osee.ats.goal.RemoveFromGoalAction;
-import org.eclipse.osee.ats.goal.SetGoalOrderAction;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.ats.util.AtsRelationTypes;
-import org.eclipse.osee.ats.world.IMenuActionProvider;
-import org.eclipse.osee.ats.world.IWorldEditor;
-import org.eclipse.osee.ats.world.IWorldEditorProvider;
-import org.eclipse.osee.ats.world.WorldComposite;
-import org.eclipse.osee.ats.world.WorldLabelProvider;
-import org.eclipse.osee.ats.world.WorldXViewer;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.plugin.core.IActionable;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
-import org.eclipse.osee.framework.ui.skynet.XFormToolkit;
-import org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor;
-import org.eclipse.osee.framework.ui.skynet.util.ArtifactDragAndDrop;
-import org.eclipse.osee.framework.ui.swt.ALayout;
-import org.eclipse.osee.framework.ui.swt.Displays;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-import org.eclipse.osee.framework.ui.swt.Widgets;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.eclipse.ui.forms.IManagedForm;
-import org.eclipse.ui.forms.SectionPart;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-import org.eclipse.ui.forms.widgets.Section;
-
-/**
- * @author Roberto E. Escobar
- * @author Donald G. Dunne
- */
-public class SMAGoalMembersSection extends SectionPart implements ISelectedAtsArtifacts, IWorldEditor, IMenuActionProvider {
-
- private final SMAEditor editor;
- private WorldComposite worldComposite;
- private static final Map<SMAEditor, CustomizeData> editorToCustDataMap = new HashMap<SMAEditor, CustomizeData>(20);
- private static Map<SMAEditor, Boolean> editorToTableExpanded = new HashMap<SMAEditor, Boolean>();
- private final static int DEFAULT_TABLE_HEIGHT = 400;
-
- public SMAGoalMembersSection(SMAEditor editor, Composite parent, XFormToolkit toolkit, int style) {
- super(parent, toolkit, style | ExpandableComposite.TITLE_BAR);
- this.editor = editor;
- }
-
- @Override
- public void initialize(final IManagedForm form) {
- super.initialize(form);
- final FormToolkit toolkit = form.getToolkit();
-
- Section section = getSection();
- section.setText("Members");
-
- section.setLayout(new GridLayout());
- section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-
- Composite sectionBody = toolkit.createComposite(section, toolkit.getBorderStyle());
- sectionBody.setLayout(ALayout.getZeroMarginLayout(2, false));
- GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
- gd.widthHint = 300;
- sectionBody.setLayoutData(gd);
-
- ToolBar toolBar = createToolBar(sectionBody);
- addDropToAddLabel(toolkit, sectionBody);
- addDropToRemoveLabel(toolkit, sectionBody);
-
- createWorldComposite(sectionBody);
- createActions();
- setupListenersForCustomizeDataCaching();
- fillActionBar(toolBar);
-
- section.setClient(sectionBody);
- toolkit.paintBordersFor(section);
-
- RefreshTableSizeJob job = new RefreshTableSizeJob("");
- job.schedule(300);
- }
-
- private class RefreshTableSizeJob extends Job {
- public RefreshTableSizeJob(String name) {
- super(name);
- }
-
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- refreshTableSize();
- }
- });
- return Status.OK_STATUS;
- }
- }
-
- private ToolBar createToolBar(Composite parent) {
- Composite actionComp = new Composite(parent, SWT.NONE);
- actionComp.setLayout(ALayout.getZeroMarginLayout());
- GridData gd = new GridData(SWT.FILL, SWT.NONE, true, false);
- gd.horizontalSpan = 2;
- actionComp.setLayoutData(gd);
-
- ToolBar toolBar = new ToolBar(actionComp, SWT.FLAT | SWT.RIGHT);
- gd = new GridData(GridData.FILL_HORIZONTAL);
- toolBar.setLayoutData(gd);
-
- ToolItem expandItem = new ToolItem(toolBar, SWT.PUSH);
- expandItem.setImage(ImageManager.getImage(AtsImage.EXPAND_TABLE));
- expandItem.setToolTipText("Expand/Collapse Table Height");
- expandItem.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- toggleTableExpand();
- refreshTableSize();
- }
- });
-
- return toolBar;
- }
-
- private void refreshTableSize() {
- GridData gd = null;
- if (!isTableExpanded()) {
- gd = new GridData(SWT.FILL, SWT.NONE, true, false);
- gd.heightHint = DEFAULT_TABLE_HEIGHT;
- } else {
- gd = new GridData(SWT.FILL, SWT.FILL, true, true);
- }
- gd.horizontalSpan = 2;
- worldComposite.setLayoutData(gd);
- worldComposite.layout(true);
- getManagedForm().reflow(true);
- }
-
- private void fillActionBar(ToolBar toolBar) {
-
- new ActionContributionItem(worldComposite.getXViewer().getCustomizeAction()).fill(toolBar, -1);
- }
-
- private void createWorldComposite(final Composite sectionBody) {
- worldComposite =
- new WorldComposite(this, new GoalXViewerFactory((GoalArtifact) editor.getSma()), sectionBody, SWT.BORDER);
-
- CustomizeData customizeData = editorToCustDataMap.get(editor);
- if (customizeData == null) {
- customizeData = worldComposite.getCustomizeDataCopy();
- }
- WorldLabelProvider labelProvider = (WorldLabelProvider) worldComposite.getXViewer().getLabelProvider();
- labelProvider.setParentGoal((GoalArtifact) editor.getSma());
-
- worldComposite.getWorldXViewer().addMenuActionProvider(this);
-
- try {
- customizeData = null;
- worldComposite.load("Members", editor.getSma().getRelatedArtifacts(AtsRelationTypes.Goal_Member),
- customizeData, TableLoadOption.None);
-
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
-
- }
-
- private boolean isTableExpanded() {
- if (editor != null && editorToTableExpanded.containsKey(editor)) {
- return editorToTableExpanded.get(editor);
- }
- return false;
- }
-
- private void toggleTableExpand() {
- if (editor != null) {
- Boolean expanded = editorToTableExpanded.get(editor);
- if (expanded == null) {
- expanded = true;
- } else {
- expanded = !expanded;
- }
- editorToTableExpanded.put(editor, expanded);
- }
- }
-
- private void setupListenersForCustomizeDataCaching() {
- worldComposite.addDisposeListener(new DisposeListener() {
-
- @Override
- public void widgetDisposed(DisposeEvent e) {
- editorToCustDataMap.put(editor, worldComposite.getCustomizeDataCopy());
- }
- });
- editor.addEditorListeners(new ISMAEditorListener() {
-
- @Override
- public void editorDisposing() {
- editorToCustDataMap.remove(editor);
- editorToTableExpanded.remove(editor);
- }
- });
- }
-
- protected void addDropToAddLabel(FormToolkit toolkit, Composite sectionBody) {
- Label dropToAddLabel = new Label(sectionBody, SWT.BORDER);
- dropToAddLabel.setText(" Drop New Members Here");
- dropToAddLabel.setBackgroundImage(ImageManager.getImage(AtsImage.DROP_HERE_TO_ADD_BACKGROUND));
- GridData gd = new GridData(GridData.FILL_BOTH);
- gd.heightHint = 25;
- dropToAddLabel.setLayoutData(gd);
- toolkit.adapt(dropToAddLabel, true, true);
-
- new ArtifactDragAndDrop(dropToAddLabel, editor.getSma(), ArtifactEditor.EDITOR_ID) {
- @Override
- public void performArtifactDrop(Artifact[] dropArtifacts) {
- super.performArtifactDrop(dropArtifacts);
- try {
- List<Artifact> members = new ArrayList<Artifact>();
- members.addAll(((GoalArtifact) editor.getSma()).getMembers());
- for (Artifact art : dropArtifacts) {
- if (!members.contains(art)) {
- members.add(art);
- editor.getSma().addRelation(AtsRelationTypes.Goal_Member, art);
- }
- }
- editor.getSma().setRelationOrder(AtsRelationTypes.Goal_Member, members);
- editor.doSave(null);
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
- };
- }
-
- protected void addDropToRemoveLabel(FormToolkit toolkit, Composite sectionBody) {
- Label dropToAddLabel = new Label(sectionBody, SWT.BORDER);
- dropToAddLabel.setText(" Drop Members to Remove");
- dropToAddLabel.setBackgroundImage(ImageManager.getImage(AtsImage.DROP_HERE_TO_REMOVE_BACKGROUND));
- GridData gd = new GridData(GridData.FILL_BOTH);
- gd.heightHint = 25;
- dropToAddLabel.setLayoutData(gd);
- toolkit.adapt(dropToAddLabel, true, true);
-
- new ArtifactDragAndDrop(dropToAddLabel, editor.getSma(), ArtifactEditor.EDITOR_ID) {
- @Override
- public void performArtifactDrop(Artifact[] dropArtifacts) {
- super.performArtifactDrop(dropArtifacts);
- final Set<Artifact> artifacts = new HashSet<Artifact>();
- final List<Artifact> artList = new ArrayList<Artifact>();
- for (Artifact artifact : dropArtifacts) {
- artifacts.add(artifact);
- artList.add(artifact);
- }
- RemoveFromGoalAction remove =
- new RemoveFromGoalAction((GoalArtifact) editor.getSma(), new ISelectedAtsArtifacts() {
-
- @Override
- public Set<? extends Artifact> getSelectedSMAArtifacts() {
- return artifacts;
- }
-
- @Override
- public List<Artifact> getSelectedAtsArtifacts() {
- return artList;
- }
- });
- remove.run();
- }
- };
- }
-
- @Override
- public void refresh() {
- super.refresh();
- Displays.ensureInDisplayThread(new Runnable() {
-
- @Override
- public void run() {
- if (Widgets.isAccessible(worldComposite)) {
- worldComposite.getXViewer().refresh();
- }
- }
- });
- }
-
- @Override
- public void dispose() {
- if (Widgets.isAccessible(worldComposite)) {
- worldComposite.dispose();
- }
- super.dispose();
- }
-
- @Override
- public void createToolBarPulldown(Menu menu) {
- // do nothing
- }
-
- @Override
- public String getCurrentTitleLabel() {
- return "";
- }
-
- @Override
- public IActionable getIActionable() {
- return null;
- }
-
- @Override
- public IWorldEditorProvider getWorldEditorProvider() {
- return null;
- }
-
- @Override
- public void reSearch() {
- // do nothing
- }
-
- @Override
- public void reflow() {
- // do nothing
- }
-
- @Override
- public void setTableTitle(String title, boolean warning) {
- // do nothing
- }
-
- Action setGoalOrderAction, removeFromGoalAction;
-
- public void createActions() {
- setGoalOrderAction = new SetGoalOrderAction((GoalArtifact) editor.getSma(), this);
- removeFromGoalAction = new RemoveFromGoalAction((GoalArtifact) editor.getSma(), this);
- }
-
- @Override
- public void updateMenuActionsForTable() {
- MenuManager mm = worldComposite.getXViewer().getMenuManager();
-
- mm.insertBefore(WorldXViewer.MENU_GROUP_ATS_WORLD_EDIT, setGoalOrderAction);
- mm.insertBefore(WorldXViewer.MENU_GROUP_ATS_WORLD_EDIT, removeFromGoalAction);
- mm.insertBefore(WorldXViewer.MENU_GROUP_ATS_WORLD_EDIT, new Separator());
- }
-
- @Override
- public Set<Artifact> getSelectedSMAArtifacts() {
- Set<Artifact> artifacts = new HashSet<Artifact>();
- for (Artifact art : worldComposite.getSelectedArtifacts()) {
- if (art instanceof StateMachineArtifact) {
- artifacts.add(art);
- }
- }
- return artifacts;
- }
-
- @Override
- public List<Artifact> getSelectedAtsArtifacts() {
- List<Artifact> artifacts = new ArrayList<Artifact>();
- for (Artifact art : worldComposite.getSelectedArtifacts()) {
+/******************************************************************************* + * 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.editor; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.logging.Level; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.ActionContributionItem; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.nebula.widgets.xviewer.customize.CustomizeData; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.actions.ISelectedAtsArtifacts; +import org.eclipse.osee.ats.artifact.GoalArtifact; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.goal.GoalXViewerFactory; +import org.eclipse.osee.ats.goal.RemoveFromGoalAction; +import org.eclipse.osee.ats.goal.SetGoalOrderAction; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.ats.util.AtsRelationTypes; +import org.eclipse.osee.ats.world.IMenuActionProvider; +import org.eclipse.osee.ats.world.IWorldEditor; +import org.eclipse.osee.ats.world.IWorldEditorProvider; +import org.eclipse.osee.ats.world.WorldComposite; +import org.eclipse.osee.ats.world.WorldLabelProvider; +import org.eclipse.osee.ats.world.WorldXViewer; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.plugin.core.IActionable; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption; +import org.eclipse.osee.framework.ui.skynet.XFormToolkit; +import org.eclipse.osee.framework.ui.skynet.artifact.editor.ArtifactEditor; +import org.eclipse.osee.framework.ui.skynet.util.ArtifactDragAndDrop; +import org.eclipse.osee.framework.ui.swt.ALayout; +import org.eclipse.osee.framework.ui.swt.Displays; +import org.eclipse.osee.framework.ui.swt.ImageManager; +import org.eclipse.osee.framework.ui.swt.Widgets; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.DisposeEvent; +import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.ToolBar; +import org.eclipse.swt.widgets.ToolItem; +import org.eclipse.ui.forms.IManagedForm; +import org.eclipse.ui.forms.SectionPart; +import org.eclipse.ui.forms.widgets.ExpandableComposite; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.eclipse.ui.forms.widgets.Section; + +/** + * @author Roberto E. Escobar + * @author Donald G. Dunne + */ +public class SMAGoalMembersSection extends SectionPart implements ISelectedAtsArtifacts, IWorldEditor, IMenuActionProvider { + + private final SMAEditor editor; + private WorldComposite worldComposite; + private static final Map<SMAEditor, CustomizeData> editorToCustDataMap = new HashMap<SMAEditor, CustomizeData>(20); + private static Map<SMAEditor, Boolean> editorToTableExpanded = new HashMap<SMAEditor, Boolean>(); + private final static int DEFAULT_TABLE_HEIGHT = 400; + + public SMAGoalMembersSection(SMAEditor editor, Composite parent, XFormToolkit toolkit, int style) { + super(parent, toolkit, style | ExpandableComposite.TITLE_BAR); + this.editor = editor; + } + + @Override + public void initialize(final IManagedForm form) { + super.initialize(form); + final FormToolkit toolkit = form.getToolkit(); + + Section section = getSection(); + section.setText("Members"); + + section.setLayout(new GridLayout()); + section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + + Composite sectionBody = toolkit.createComposite(section, toolkit.getBorderStyle()); + sectionBody.setLayout(ALayout.getZeroMarginLayout(2, false)); + GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); + gd.widthHint = 300; + sectionBody.setLayoutData(gd); + + ToolBar toolBar = createToolBar(sectionBody); + addDropToAddLabel(toolkit, sectionBody); + addDropToRemoveLabel(toolkit, sectionBody); + + createWorldComposite(sectionBody); + createActions(); + setupListenersForCustomizeDataCaching(); + fillActionBar(toolBar); + + section.setClient(sectionBody); + toolkit.paintBordersFor(section); + + RefreshTableSizeJob job = new RefreshTableSizeJob(""); + job.schedule(300); + } + + private class RefreshTableSizeJob extends Job { + public RefreshTableSizeJob(String name) { + super(name); + } + + @Override + protected IStatus run(IProgressMonitor monitor) { + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + refreshTableSize(); + } + }); + return Status.OK_STATUS; + } + } + + private ToolBar createToolBar(Composite parent) { + Composite actionComp = new Composite(parent, SWT.NONE); + actionComp.setLayout(ALayout.getZeroMarginLayout()); + GridData gd = new GridData(SWT.FILL, SWT.NONE, true, false); + gd.horizontalSpan = 2; + actionComp.setLayoutData(gd); + + ToolBar toolBar = new ToolBar(actionComp, SWT.FLAT | SWT.RIGHT); + gd = new GridData(GridData.FILL_HORIZONTAL); + toolBar.setLayoutData(gd); + + ToolItem expandItem = new ToolItem(toolBar, SWT.PUSH); + expandItem.setImage(ImageManager.getImage(AtsImage.EXPAND_TABLE)); + expandItem.setToolTipText("Expand/Collapse Table Height"); + expandItem.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + toggleTableExpand(); + refreshTableSize(); + } + }); + + return toolBar; + } + + private void refreshTableSize() { + GridData gd = null; + if (!isTableExpanded()) { + gd = new GridData(SWT.FILL, SWT.NONE, true, false); + gd.heightHint = DEFAULT_TABLE_HEIGHT; + } else { + gd = new GridData(SWT.FILL, SWT.FILL, true, true); + } + gd.horizontalSpan = 2; + worldComposite.setLayoutData(gd); + worldComposite.layout(true); + getManagedForm().reflow(true); + } + + private void fillActionBar(ToolBar toolBar) { + + new ActionContributionItem(worldComposite.getXViewer().getCustomizeAction()).fill(toolBar, -1); + } + + private void createWorldComposite(final Composite sectionBody) { + worldComposite = + new WorldComposite(this, new GoalXViewerFactory((GoalArtifact) editor.getSma()), sectionBody, SWT.BORDER); + + CustomizeData customizeData = editorToCustDataMap.get(editor); + if (customizeData == null) { + customizeData = worldComposite.getCustomizeDataCopy(); + } + WorldLabelProvider labelProvider = (WorldLabelProvider) worldComposite.getXViewer().getLabelProvider(); + labelProvider.setParentGoal((GoalArtifact) editor.getSma()); + + worldComposite.getWorldXViewer().addMenuActionProvider(this); + + try { + customizeData = null; + worldComposite.load("Members", editor.getSma().getRelatedArtifacts(AtsRelationTypes.Goal_Member), + customizeData, TableLoadOption.None); + + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + + } + + private boolean isTableExpanded() { + if (editor != null && editorToTableExpanded.containsKey(editor)) { + return editorToTableExpanded.get(editor); + } + return false; + } + + private void toggleTableExpand() { + if (editor != null) { + Boolean expanded = editorToTableExpanded.get(editor); + if (expanded == null) { + expanded = true; + } else { + expanded = !expanded; + } + editorToTableExpanded.put(editor, expanded); + } + } + + private void setupListenersForCustomizeDataCaching() { + worldComposite.addDisposeListener(new DisposeListener() { + + @Override + public void widgetDisposed(DisposeEvent e) { + editorToCustDataMap.put(editor, worldComposite.getCustomizeDataCopy()); + } + }); + editor.addEditorListeners(new ISMAEditorListener() { + + @Override + public void editorDisposing() { + editorToCustDataMap.remove(editor); + editorToTableExpanded.remove(editor); + } + }); + } + + protected void addDropToAddLabel(FormToolkit toolkit, Composite sectionBody) { + Label dropToAddLabel = new Label(sectionBody, SWT.BORDER); + dropToAddLabel.setText(" Drop New Members Here"); + dropToAddLabel.setBackgroundImage(ImageManager.getImage(AtsImage.DROP_HERE_TO_ADD_BACKGROUND)); + GridData gd = new GridData(GridData.FILL_BOTH); + gd.heightHint = 25; + dropToAddLabel.setLayoutData(gd); + toolkit.adapt(dropToAddLabel, true, true); + + new ArtifactDragAndDrop(dropToAddLabel, editor.getSma(), ArtifactEditor.EDITOR_ID) { + @Override + public void performArtifactDrop(Artifact[] dropArtifacts) { + super.performArtifactDrop(dropArtifacts); + try { + List<Artifact> members = new ArrayList<Artifact>(); + members.addAll(((GoalArtifact) editor.getSma()).getMembers()); + for (Artifact art : dropArtifacts) { + if (!members.contains(art)) { + members.add(art); + editor.getSma().addRelation(AtsRelationTypes.Goal_Member, art); + } + } + editor.getSma().setRelationOrder(AtsRelationTypes.Goal_Member, members); + editor.doSave(null); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + }; + } + + protected void addDropToRemoveLabel(FormToolkit toolkit, Composite sectionBody) { + Label dropToAddLabel = new Label(sectionBody, SWT.BORDER); + dropToAddLabel.setText(" Drop Members to Remove"); + dropToAddLabel.setBackgroundImage(ImageManager.getImage(AtsImage.DROP_HERE_TO_REMOVE_BACKGROUND)); + GridData gd = new GridData(GridData.FILL_BOTH); + gd.heightHint = 25; + dropToAddLabel.setLayoutData(gd); + toolkit.adapt(dropToAddLabel, true, true); + + new ArtifactDragAndDrop(dropToAddLabel, editor.getSma(), ArtifactEditor.EDITOR_ID) { + @Override + public void performArtifactDrop(Artifact[] dropArtifacts) { + super.performArtifactDrop(dropArtifacts); + final Set<Artifact> artifacts = new HashSet<Artifact>(); + final List<Artifact> artList = new ArrayList<Artifact>(); + for (Artifact artifact : dropArtifacts) { + artifacts.add(artifact); + artList.add(artifact); + } + RemoveFromGoalAction remove = + new RemoveFromGoalAction((GoalArtifact) editor.getSma(), new ISelectedAtsArtifacts() { + + @Override + public Set<? extends Artifact> getSelectedSMAArtifacts() { + return artifacts; + } + + @Override + public List<Artifact> getSelectedAtsArtifacts() { + return artList; + } + }); + remove.run(); + } + }; + } + + @Override + public void refresh() { + super.refresh(); + Displays.ensureInDisplayThread(new Runnable() { + + @Override + public void run() { + if (Widgets.isAccessible(worldComposite)) { + worldComposite.getXViewer().refresh(); + } + } + }); + } + + @Override + public void dispose() { + if (Widgets.isAccessible(worldComposite)) { + worldComposite.dispose(); + } + super.dispose(); + } + + @Override + public void createToolBarPulldown(Menu menu) { + // do nothing + } + + @Override + public String getCurrentTitleLabel() { + return ""; + } + + @Override + public IActionable getIActionable() { + return null; + } + + @Override + public IWorldEditorProvider getWorldEditorProvider() { + return null; + } + + @Override + public void reSearch() { + // do nothing + } + + @Override + public void reflow() { + // do nothing + } + + @Override + public void setTableTitle(String title, boolean warning) { + // do nothing + } + + Action setGoalOrderAction, removeFromGoalAction; + + public void createActions() { + setGoalOrderAction = new SetGoalOrderAction((GoalArtifact) editor.getSma(), this); + removeFromGoalAction = new RemoveFromGoalAction((GoalArtifact) editor.getSma(), this); + } + + @Override + public void updateMenuActionsForTable() { + MenuManager mm = worldComposite.getXViewer().getMenuManager(); + + mm.insertBefore(WorldXViewer.MENU_GROUP_ATS_WORLD_EDIT, setGoalOrderAction); + mm.insertBefore(WorldXViewer.MENU_GROUP_ATS_WORLD_EDIT, removeFromGoalAction); + mm.insertBefore(WorldXViewer.MENU_GROUP_ATS_WORLD_EDIT, new Separator()); + } + + @Override + public Set<Artifact> getSelectedSMAArtifacts() { + Set<Artifact> artifacts = new HashSet<Artifact>(); + for (Artifact art : worldComposite.getSelectedArtifacts()) { + if (art instanceof StateMachineArtifact) { + artifacts.add(art); + } + } + return artifacts; + } + + @Override + public List<Artifact> getSelectedAtsArtifacts() { + List<Artifact> artifacts = new ArrayList<Artifact>(); + for (Artifact art : worldComposite.getSelectedArtifacts()) { if (art.isOfType(AtsArtifactTypes.AtsArtifact)) { - artifacts.add(art);
- }
- }
- return artifacts;
- }
-}
+ artifacts.add(art); + } + } + return artifacts; + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAHistorySection.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAHistorySection.java index 55cb51b1720..3b5a35e962f 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAHistorySection.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAHistorySection.java @@ -1,107 +1,107 @@ -/*******************************************************************************
- * 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.editor;
-
-import java.util.logging.Level;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.skynet.render.PresentationType;
-import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
-import org.eclipse.osee.framework.ui.skynet.results.html.XResultsComposite;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.ui.forms.IManagedForm;
-import org.eclipse.ui.forms.SectionPart;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-import org.eclipse.ui.forms.widgets.Section;
-
-/**
- * @author Donald G. Dunne
- */
-public class SMAHistorySection extends SectionPart {
-
- private final SMAEditor editor;
- private boolean sectionCreated = false;
-
- public SMAHistorySection(SMAEditor editor, Composite parent, FormToolkit toolkit, int style) {
- super(parent, toolkit, style | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
- this.editor = editor;
- }
-
- @Override
- public void initialize(IManagedForm form) {
- super.initialize(form);
- Section section = getSection();
- section.setText("History");
- section.setLayout(new GridLayout());
- section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-
- // Only load when users selects section
- section.addListener(SWT.Activate, new Listener() {
-
- @Override
- public void handleEvent(Event e) {
- createSection();
- }
- });
- }
-
- private synchronized void createSection() {
- if (sectionCreated) {
- return;
- }
-
- StateMachineArtifact sma = editor.getSma();
- final FormToolkit toolkit = getManagedForm().getToolkit();
- Composite composite = toolkit.createComposite(getSection(), toolkit.getBorderStyle() | SWT.WRAP);
- composite.setLayout(new GridLayout());
- composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-
- XResultsComposite xResultsComp = new XResultsComposite(composite, SWT.BORDER);
- xResultsComp.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING));
- GridData gd = new GridData(GridData.FILL_BOTH);
- gd.heightHint = 500;
- xResultsComp.setLayoutData(gd);
- try {
- xResultsComp.setHtmlText(sma.getLog().getHtml(true), sma.getArtifactTypeName() + " History");
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
-
- Label button = toolkit.createLabel(composite, " ", SWT.NONE);
- button.setText(" ");
- final StateMachineArtifact fSma = sma;
- button.addListener(SWT.MouseDoubleClick, new Listener() {
- @Override
- public void handleEvent(Event event) {
- try {
+/******************************************************************************* + * 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.editor; + +import java.util.logging.Level; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.skynet.render.PresentationType; +import org.eclipse.osee.framework.ui.skynet.render.RendererManager; +import org.eclipse.osee.framework.ui.skynet.results.html.XResultsComposite; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.ui.forms.IManagedForm; +import org.eclipse.ui.forms.SectionPart; +import org.eclipse.ui.forms.widgets.ExpandableComposite; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.eclipse.ui.forms.widgets.Section; + +/** + * @author Donald G. Dunne + */ +public class SMAHistorySection extends SectionPart { + + private final SMAEditor editor; + private boolean sectionCreated = false; + + public SMAHistorySection(SMAEditor editor, Composite parent, FormToolkit toolkit, int style) { + super(parent, toolkit, style | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR); + this.editor = editor; + } + + @Override + public void initialize(IManagedForm form) { + super.initialize(form); + Section section = getSection(); + section.setText("History"); + section.setLayout(new GridLayout()); + section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + + // Only load when users selects section + section.addListener(SWT.Activate, new Listener() { + + @Override + public void handleEvent(Event e) { + createSection(); + } + }); + } + + private synchronized void createSection() { + if (sectionCreated) { + return; + } + + StateMachineArtifact sma = editor.getSma(); + final FormToolkit toolkit = getManagedForm().getToolkit(); + Composite composite = toolkit.createComposite(getSection(), toolkit.getBorderStyle() | SWT.WRAP); + composite.setLayout(new GridLayout()); + composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + XResultsComposite xResultsComp = new XResultsComposite(composite, SWT.BORDER); + xResultsComp.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING)); + GridData gd = new GridData(GridData.FILL_BOTH); + gd.heightHint = 500; + xResultsComp.setLayoutData(gd); + try { + xResultsComp.setHtmlText(sma.getLog().getHtml(true), sma.getArtifactTypeName() + " History"); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + + Label button = toolkit.createLabel(composite, " ", SWT.NONE); + button.setText(" "); + final StateMachineArtifact fSma = sma; + button.addListener(SWT.MouseDoubleClick, new Listener() { + @Override + public void handleEvent(Event event) { + try { RendererManager.open(fSma, PresentationType.DEFAULT_OPEN); - } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- });
-
- getSection().setClient(composite);
- toolkit.paintBordersFor(composite);
- sectionCreated = true;
-
- }
-
-}
+ } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + }); + + getSection().setClient(composite); + toolkit.paintBordersFor(composite); + sectionCreated = true; + + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAOperationsSection.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAOperationsSection.java index cfced03c3a4..c971d245595 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAOperationsSection.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAOperationsSection.java @@ -1,257 +1,257 @@ -/*******************************************************************************
- * 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.editor;
-
-import java.util.Collections;
-import java.util.logging.Level;
-import org.eclipse.osee.ats.actions.AccessControlAction;
-import org.eclipse.osee.ats.actions.ConvertActionableItemsAction;
-import org.eclipse.osee.ats.actions.DeletePurgeAtsArtifactsAction;
-import org.eclipse.osee.ats.actions.DirtyReportAction;
-import org.eclipse.osee.ats.actions.DuplicateWorkflowAction;
-import org.eclipse.osee.ats.actions.EditActionableItemsAction;
-import org.eclipse.osee.ats.actions.EmailActionAction;
-import org.eclipse.osee.ats.actions.FavoriteAction;
-import org.eclipse.osee.ats.actions.OpenInArtifactEditorAction;
-import org.eclipse.osee.ats.actions.OpenInAtsWorldAction;
-import org.eclipse.osee.ats.actions.OpenInSkyWalkerAction;
-import org.eclipse.osee.ats.actions.OpenParentAction;
-import org.eclipse.osee.ats.actions.RefreshDirtyAction;
-import org.eclipse.osee.ats.actions.ReloadAction;
-import org.eclipse.osee.ats.actions.ResourceHistoryAction;
-import org.eclipse.osee.ats.actions.ShowBranchChangeDataAction;
-import org.eclipse.osee.ats.actions.SubscribedAction;
-import org.eclipse.osee.ats.actions.WorkflowDebugAction;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.plugin.core.util.ExtensionDefinedObjects;
-import org.eclipse.osee.framework.ui.skynet.widgets.XButtonViaAction;
-import org.eclipse.osee.framework.ui.swt.ALayout;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.ui.forms.IManagedForm;
-import org.eclipse.ui.forms.SectionPart;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-import org.eclipse.ui.forms.widgets.Section;
-
-/**
- * @author Donald G. Dunne
- */
-public class SMAOperationsSection extends SectionPart {
-
- protected final SMAEditor editor;
- private ISMAOperationsSection advOperation = null;
- private boolean sectionCreated = false;
-
- public SMAOperationsSection(SMAEditor editor, Composite parent, FormToolkit toolkit, int style) {
- super(parent, toolkit, style | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
- this.editor = editor;
- registerAdvancedSectionsFromExtensionPoints();
- }
-
- private void registerAdvancedSectionsFromExtensionPoints() {
-
- ExtensionDefinedObjects<ISMAOperationsSection> extensions =
- new ExtensionDefinedObjects<ISMAOperationsSection>(AtsPlugin.PLUGIN_ID + ".AtsAdvancedOperationAction",
- "AtsAdvancedOperationAction", "classname");
- for (ISMAOperationsSection item : extensions.getObjects()) {
- try {
- advOperation = item;
- } catch (Exception ex) {
+/******************************************************************************* + * 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.editor; + +import java.util.Collections; +import java.util.logging.Level; +import org.eclipse.osee.ats.actions.AccessControlAction; +import org.eclipse.osee.ats.actions.ConvertActionableItemsAction; +import org.eclipse.osee.ats.actions.DeletePurgeAtsArtifactsAction; +import org.eclipse.osee.ats.actions.DirtyReportAction; +import org.eclipse.osee.ats.actions.DuplicateWorkflowAction; +import org.eclipse.osee.ats.actions.EditActionableItemsAction; +import org.eclipse.osee.ats.actions.EmailActionAction; +import org.eclipse.osee.ats.actions.FavoriteAction; +import org.eclipse.osee.ats.actions.OpenInArtifactEditorAction; +import org.eclipse.osee.ats.actions.OpenInAtsWorldAction; +import org.eclipse.osee.ats.actions.OpenInSkyWalkerAction; +import org.eclipse.osee.ats.actions.OpenParentAction; +import org.eclipse.osee.ats.actions.RefreshDirtyAction; +import org.eclipse.osee.ats.actions.ReloadAction; +import org.eclipse.osee.ats.actions.ResourceHistoryAction; +import org.eclipse.osee.ats.actions.ShowBranchChangeDataAction; +import org.eclipse.osee.ats.actions.SubscribedAction; +import org.eclipse.osee.ats.actions.WorkflowDebugAction; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.plugin.core.util.ExtensionDefinedObjects; +import org.eclipse.osee.framework.ui.skynet.widgets.XButtonViaAction; +import org.eclipse.osee.framework.ui.swt.ALayout; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.ui.forms.IManagedForm; +import org.eclipse.ui.forms.SectionPart; +import org.eclipse.ui.forms.widgets.ExpandableComposite; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.eclipse.ui.forms.widgets.Section; + +/** + * @author Donald G. Dunne + */ +public class SMAOperationsSection extends SectionPart { + + protected final SMAEditor editor; + private ISMAOperationsSection advOperation = null; + private boolean sectionCreated = false; + + public SMAOperationsSection(SMAEditor editor, Composite parent, FormToolkit toolkit, int style) { + super(parent, toolkit, style | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR); + this.editor = editor; + registerAdvancedSectionsFromExtensionPoints(); + } + + private void registerAdvancedSectionsFromExtensionPoints() { + + ExtensionDefinedObjects<ISMAOperationsSection> extensions = + new ExtensionDefinedObjects<ISMAOperationsSection>(AtsPlugin.PLUGIN_ID + ".AtsAdvancedOperationAction", + "AtsAdvancedOperationAction", "classname"); + for (ISMAOperationsSection item : extensions.getObjects()) { + try { + advOperation = item; + } catch (Exception ex) { OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); - }
- }
- }
-
- @Override
- public void initialize(final IManagedForm form) {
- super.initialize(form);
- final FormToolkit toolkit = form.getToolkit();
-
- final Section section = getSection();
- section.setText("Operations");
-
- section.setLayout(new GridLayout());
- section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-
- // Only load when users selects section
- section.addListener(SWT.Activate, new Listener() {
-
- @Override
- public void handleEvent(Event e) {
- createSection(section, toolkit);
- }
- });
- }
-
- private synchronized void createSection(Section section, FormToolkit toolkit) {
- if (sectionCreated) {
- return;
- }
-
- final Composite sectionBody = toolkit.createComposite(section, SWT.NONE);
- sectionBody.setLayout(ALayout.getZeroMarginLayout(3, false));
- sectionBody.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-
- createImpactsSection(sectionBody, toolkit);
- createViewsEditorsSection(sectionBody, toolkit);
- createNotificationsSection(sectionBody, toolkit);
-
- if (advOperation != null && advOperation.isValid(editor)) {
- advOperation.createAdvancedSection(editor, sectionBody, toolkit);
- } else {
- createAdvancedSection(sectionBody, toolkit);
- }
-
- createAdminSection(sectionBody, toolkit);
-
- section.setClient(sectionBody);
- toolkit.paintBordersFor(section);
- sectionCreated = true;
-
- }
-
- private void createImpactsSection(Composite parent, FormToolkit toolkit) {
- if (!editor.getSma().isTeamWorkflow()) {
- return;
- }
- Section section = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR);
- section.setText("Impacts and Workflows");
-
- section.setLayout(new GridLayout());
- section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-
- final Composite sectionBody = toolkit.createComposite(section, SWT.NONE);
- sectionBody.setLayout(ALayout.getZeroMarginLayout(1, false));
- sectionBody.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-
- if (editor.getSma().isTeamWorkflow()) {
- new XButtonViaAction(new EditActionableItemsAction((TeamWorkFlowArtifact) editor.getSma())).createWidgets(
- sectionBody, 2);
- new XButtonViaAction(
- new DuplicateWorkflowAction(Collections.singleton((TeamWorkFlowArtifact) editor.getSma()))).createWidgets(
- sectionBody, 2);
- new XButtonViaAction(new AccessControlAction(editor.getSma())).createWidgets(sectionBody, 2);
- }
- section.setClient(sectionBody);
- }
-
- private void createAdvancedSection(Composite parent, FormToolkit toolkit) {
- if (!editor.getSma().isTeamWorkflow()) {
- return;
- }
-
- Section section = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR);
- section.setText("Advanced");
-
- section.setLayout(new GridLayout());
- section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-
- final Composite sectionBody = toolkit.createComposite(section, SWT.NONE);
- sectionBody.setLayout(ALayout.getZeroMarginLayout(1, false));
- sectionBody.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-
- if (editor.getSma().isTeamWorkflow()) {
- new XButtonViaAction(new DirtyReportAction(editor.getSma())).createWidgets(sectionBody, 2);
- new XButtonViaAction(new ReloadAction(editor.getSma())).createWidgets(sectionBody, 2);
- new XButtonViaAction(new ConvertActionableItemsAction(editor)).createWidgets(sectionBody, 2);
- }
- section.setClient(sectionBody);
- }
-
- private void createAdminSection(Composite parent, FormToolkit toolkit) {
- if (!AtsUtil.isAtsAdmin()) {
- return;
- }
- Section section = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR);
- section.setText("Admin");
-
- section.setLayout(new GridLayout());
- section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-
- final Composite sectionBody = toolkit.createComposite(section, SWT.NONE);
- sectionBody.setLayout(ALayout.getZeroMarginLayout(1, false));
- sectionBody.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-
- new XButtonViaAction(new RefreshDirtyAction(editor.getSma())).createWidgets(sectionBody, 2);
- new XButtonViaAction(new DeletePurgeAtsArtifactsAction(editor)).createWidgets(sectionBody, 2);
- new XButtonViaAction(new WorkflowDebugAction(editor.getSma())).createWidgets(sectionBody, 2);
- if (ShowBranchChangeDataAction.isApplicable(editor.getSma())) {
- new XButtonViaAction(new ShowBranchChangeDataAction(editor.getSma())).createWidgets(sectionBody, 2);
- }
-
- section.setClient(sectionBody);
- }
-
- private void createViewsEditorsSection(Composite parent, FormToolkit toolkit) {
- Section section = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR);
- section.setText("Views and Editors");
-
- section.setLayout(new GridLayout());
- section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-
- final Composite sectionBody = toolkit.createComposite(section, SWT.NONE);
- sectionBody.setLayout(ALayout.getZeroMarginLayout(1, false));
- sectionBody.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-
- try {
- new XButtonViaAction(new OpenInAtsWorldAction(editor.getSma())).createWidgets(sectionBody, 2);
- new XButtonViaAction(new OpenInSkyWalkerAction(editor.getSma())).createWidgets(sectionBody, 2);
- new XButtonViaAction(new ResourceHistoryAction(editor.getSma())).createWidgets(sectionBody, 2);
- if (editor.getSma().getParentSMA() != null) {
- new XButtonViaAction(new OpenParentAction(editor.getSma())).createWidgets(sectionBody, 2);
- }
- if (AtsUtil.isAtsAdmin()) {
- new XButtonViaAction(new OpenInArtifactEditorAction(editor)).createWidgets(sectionBody, 2);
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
-
- section.setClient(sectionBody);
- }
-
- private void createNotificationsSection(Composite parent, FormToolkit toolkit) {
- Section section = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR);
- section.setText("Notifications and Favorites");
-
- section.setLayout(new GridLayout());
- section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-
- final Composite sectionBody = toolkit.createComposite(section, SWT.NONE);
- sectionBody.setLayout(ALayout.getZeroMarginLayout(1, false));
- sectionBody.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-
- try {
- new XButtonViaAction(new SubscribedAction(editor)).createWidgets(sectionBody, 2);
- new XButtonViaAction(new FavoriteAction(editor)).createWidgets(sectionBody, 2);
- new XButtonViaAction(new EmailActionAction(editor)).createWidgets(sectionBody, 2);
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
-
- section.setClient(sectionBody);
- }
-
- @Override
- public void dispose() {
- super.dispose();
- }
-
-}
+ } + } + } + + @Override + public void initialize(final IManagedForm form) { + super.initialize(form); + final FormToolkit toolkit = form.getToolkit(); + + final Section section = getSection(); + section.setText("Operations"); + + section.setLayout(new GridLayout()); + section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + + // Only load when users selects section + section.addListener(SWT.Activate, new Listener() { + + @Override + public void handleEvent(Event e) { + createSection(section, toolkit); + } + }); + } + + private synchronized void createSection(Section section, FormToolkit toolkit) { + if (sectionCreated) { + return; + } + + final Composite sectionBody = toolkit.createComposite(section, SWT.NONE); + sectionBody.setLayout(ALayout.getZeroMarginLayout(3, false)); + sectionBody.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + createImpactsSection(sectionBody, toolkit); + createViewsEditorsSection(sectionBody, toolkit); + createNotificationsSection(sectionBody, toolkit); + + if (advOperation != null && advOperation.isValid(editor)) { + advOperation.createAdvancedSection(editor, sectionBody, toolkit); + } else { + createAdvancedSection(sectionBody, toolkit); + } + + createAdminSection(sectionBody, toolkit); + + section.setClient(sectionBody); + toolkit.paintBordersFor(section); + sectionCreated = true; + + } + + private void createImpactsSection(Composite parent, FormToolkit toolkit) { + if (!editor.getSma().isTeamWorkflow()) { + return; + } + Section section = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR); + section.setText("Impacts and Workflows"); + + section.setLayout(new GridLayout()); + section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + + final Composite sectionBody = toolkit.createComposite(section, SWT.NONE); + sectionBody.setLayout(ALayout.getZeroMarginLayout(1, false)); + sectionBody.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + if (editor.getSma().isTeamWorkflow()) { + new XButtonViaAction(new EditActionableItemsAction((TeamWorkFlowArtifact) editor.getSma())).createWidgets( + sectionBody, 2); + new XButtonViaAction( + new DuplicateWorkflowAction(Collections.singleton((TeamWorkFlowArtifact) editor.getSma()))).createWidgets( + sectionBody, 2); + new XButtonViaAction(new AccessControlAction(editor.getSma())).createWidgets(sectionBody, 2); + } + section.setClient(sectionBody); + } + + private void createAdvancedSection(Composite parent, FormToolkit toolkit) { + if (!editor.getSma().isTeamWorkflow()) { + return; + } + + Section section = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR); + section.setText("Advanced"); + + section.setLayout(new GridLayout()); + section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + + final Composite sectionBody = toolkit.createComposite(section, SWT.NONE); + sectionBody.setLayout(ALayout.getZeroMarginLayout(1, false)); + sectionBody.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + if (editor.getSma().isTeamWorkflow()) { + new XButtonViaAction(new DirtyReportAction(editor.getSma())).createWidgets(sectionBody, 2); + new XButtonViaAction(new ReloadAction(editor.getSma())).createWidgets(sectionBody, 2); + new XButtonViaAction(new ConvertActionableItemsAction(editor)).createWidgets(sectionBody, 2); + } + section.setClient(sectionBody); + } + + private void createAdminSection(Composite parent, FormToolkit toolkit) { + if (!AtsUtil.isAtsAdmin()) { + return; + } + Section section = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR); + section.setText("Admin"); + + section.setLayout(new GridLayout()); + section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + + final Composite sectionBody = toolkit.createComposite(section, SWT.NONE); + sectionBody.setLayout(ALayout.getZeroMarginLayout(1, false)); + sectionBody.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + new XButtonViaAction(new RefreshDirtyAction(editor.getSma())).createWidgets(sectionBody, 2); + new XButtonViaAction(new DeletePurgeAtsArtifactsAction(editor)).createWidgets(sectionBody, 2); + new XButtonViaAction(new WorkflowDebugAction(editor.getSma())).createWidgets(sectionBody, 2); + if (ShowBranchChangeDataAction.isApplicable(editor.getSma())) { + new XButtonViaAction(new ShowBranchChangeDataAction(editor.getSma())).createWidgets(sectionBody, 2); + } + + section.setClient(sectionBody); + } + + private void createViewsEditorsSection(Composite parent, FormToolkit toolkit) { + Section section = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR); + section.setText("Views and Editors"); + + section.setLayout(new GridLayout()); + section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + + final Composite sectionBody = toolkit.createComposite(section, SWT.NONE); + sectionBody.setLayout(ALayout.getZeroMarginLayout(1, false)); + sectionBody.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + try { + new XButtonViaAction(new OpenInAtsWorldAction(editor.getSma())).createWidgets(sectionBody, 2); + new XButtonViaAction(new OpenInSkyWalkerAction(editor.getSma())).createWidgets(sectionBody, 2); + new XButtonViaAction(new ResourceHistoryAction(editor.getSma())).createWidgets(sectionBody, 2); + if (editor.getSma().getParentSMA() != null) { + new XButtonViaAction(new OpenParentAction(editor.getSma())).createWidgets(sectionBody, 2); + } + if (AtsUtil.isAtsAdmin()) { + new XButtonViaAction(new OpenInArtifactEditorAction(editor)).createWidgets(sectionBody, 2); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + + section.setClient(sectionBody); + } + + private void createNotificationsSection(Composite parent, FormToolkit toolkit) { + Section section = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR); + section.setText("Notifications and Favorites"); + + section.setLayout(new GridLayout()); + section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + + final Composite sectionBody = toolkit.createComposite(section, SWT.NONE); + sectionBody.setLayout(ALayout.getZeroMarginLayout(1, false)); + sectionBody.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + try { + new XButtonViaAction(new SubscribedAction(editor)).createWidgets(sectionBody, 2); + new XButtonViaAction(new FavoriteAction(editor)).createWidgets(sectionBody, 2); + new XButtonViaAction(new EmailActionAction(editor)).createWidgets(sectionBody, 2); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + + section.setClient(sectionBody); + } + + @Override + public void dispose() { + super.dispose(); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAPrint.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAPrint.java index b70a752e875..9a8e1971c72 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAPrint.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAPrint.java @@ -1,189 +1,199 @@ -/*******************************************************************************
- * 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.editor;
-
-import java.util.Arrays;
-import java.util.logging.Level;
-import org.eclipse.jface.action.Action;
-import org.eclipse.osee.ats.artifact.AtsAttributeTypes;
-import org.eclipse.osee.ats.artifact.NoteItem;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.ats.artifact.TaskArtifact;
-import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.editor.widget.ReviewInfoXWidget;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.ats.util.Overview;
-import org.eclipse.osee.ats.workflow.AtsWorkPage;
-import org.eclipse.osee.ats.world.IWorldViewArtifact;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.jdk.core.util.AHTML;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.skynet.results.XResultData;
-import org.eclipse.osee.framework.ui.skynet.results.html.XResultPage.Manipulations;
-import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPage;
-
-/**
- * @author Donald G. Dunne
- */
-public class SMAPrint extends Action {
-
- private final StateMachineArtifact sma;
- boolean includeTaskList = true;
-
- public SMAPrint(StateMachineArtifact sma) {
- super();
- this.sma = sma;
- }
-
- @Override
- public void run() {
- try {
- XResultData xResultData = getResultData();
- xResultData.report("Print Preview of " + sma.getName(), Manipulations.RAW_HTML);
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
-
- }
-
- public XResultData getResultData() throws OseeCoreException {
- XResultData resultData = new XResultData();
- resultData.addRaw(AHTML.beginMultiColumnTable(100));
- resultData.addRaw(AHTML.addRowMultiColumnTable(new String[] {AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Title: ",
- sma.getName())}));
- resultData.addRaw(AHTML.endMultiColumnTable());
- resultData.addRaw(AHTML.beginMultiColumnTable(100));
- resultData.addRaw(AHTML.addRowMultiColumnTable(new String[] {
- //
- AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Current State: ", ((IWorldViewArtifact) sma).getWorldViewState()),
- //
- AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Team: ", ((IWorldViewArtifact) sma).getWorldViewTeam()),
- //
- AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Assignees: ", ((IWorldViewArtifact) sma).getWorldViewActivePoc()),
- //
- AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Originator: ", ((IWorldViewArtifact) sma).getWorldViewOriginator()),
- //
- AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Created: ",
- XDate.getDateStr(sma.getLog().getCreationDate(), XDate.MMDDYYHHMM))
-
- }));
- resultData.addRaw(AHTML.endMultiColumnTable());
- resultData.addRaw(AHTML.beginMultiColumnTable(100));
- resultData.addRaw(AHTML.addRowMultiColumnTable(new String[] {
- //
- AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Change Type: ", sma.getWorldViewChangeTypeStr()),
- AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Priority: ", sma.getWorldViewPriority()),
- AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Need By: ", sma.getWorldViewDeadlineDateStr())}));
-
- resultData.addRaw(AHTML.addRowMultiColumnTable(new String[] {
- //
- AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Workflow: ", sma.getArtifactTypeName()),
- AHTML.getLabelValueStr(AHTML.LABEL_FONT, "HRID: ", sma.getHumanReadableId()),
- (sma.getParentActionArtifact() == null ? "" : AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Action HRID: ",
- sma.getParentActionArtifact().getHumanReadableId()))}));
- resultData.addRaw(AHTML.endMultiColumnTable());
- for (NoteItem note : sma.getNotes().getNoteItems()) {
- if (note.getState().equals("")) {
- resultData.addRaw(note.toHTML() + AHTML.newline());
- }
- }
- getWorkFlowHtml(resultData);
- if (includeTaskList) {
- getTaskHtml(resultData);
- }
- resultData.addRaw(AHTML.newline());
- resultData.addRaw(sma.getLog().getHtml());
-
- XResultData rd = new XResultData();
- rd.addRaw(AHTML.beginMultiColumnTable(100, 1));
- rd.addRaw(AHTML.addRowMultiColumnTable(new String[] {resultData.getReport("").getManipulatedHtml(
- Arrays.asList(Manipulations.NONE))}));
- rd.addRaw(AHTML.endMultiColumnTable());
-
- return rd;
- }
-
- private void getTaskHtml(XResultData rd) throws OseeCoreException {
- if (!sma.isTaskable()) {
- return;
- }
- try {
- rd.addRaw(AHTML.addSpace(1) + AHTML.getLabelStr(AHTML.LABEL_FONT, "Tasks"));
- rd.addRaw(AHTML.startBorderTable(100, Overview.normalColor, ""));
- rd.addRaw(AHTML.addHeaderRowMultiColumnTable(new String[] {"Title", "State", "POC", "%", "Hrs", "Resolution",
- "ID"}));
- for (TaskArtifact art : ((TaskableStateMachineArtifact) sma).getTaskArtifacts()) {
- rd.addRaw(AHTML.addRowMultiColumnTable(new String[] {art.getName(),
- art.getStateMgr().getCurrentStateName().replaceAll("(Task|State)", ""), art.getWorldViewActivePoc(),
- art.getPercentCompleteSMATotal() + "", art.getHoursSpentSMATotal() + "",
- art.getSoleAttributeValue(AtsAttributeTypes.Resolution, ""), art.getHumanReadableId()})); - }
- rd.addRaw(AHTML.endBorderTable());
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- rd.addRaw("Task Exception - " + ex.getLocalizedMessage());
- }
- }
-
- private void getWorkFlowHtml(XResultData rd) throws OseeCoreException {
- // Only display current or past states
- for (AtsWorkPage atsWorkPage : sma.getAtsWorkPages()) {
- if (sma.isCurrentState(atsWorkPage.getName()) || sma.getStateMgr().isStateVisited(atsWorkPage.getName())) {
- // Don't show completed or cancelled state if not currently those state
- if (atsWorkPage.isCompletePage() && !sma.isCompleted()) {
- continue;
- }
- if (atsWorkPage.isCancelledPage() && !sma.isCancelled()) {
- continue;
- }
- StringBuffer notesSb = new StringBuffer();
- for (NoteItem note : sma.getNotes().getNoteItems()) {
- if (note.getState().equals(atsWorkPage.getName())) {
- notesSb.append(note.toHTML() + AHTML.newline());
- }
- }
- if (sma.isCurrentState(atsWorkPage.getName()) || sma.getStateMgr().isStateVisited(atsWorkPage.getName()) && sma.isTeamWorkflow()) {
- atsWorkPage.generateLayoutDatas(sma);
- rd.addRaw(atsWorkPage.getHtml(
- sma.isCurrentState(atsWorkPage.getName()) ? AtsUtil.activeColor : AtsUtil.normalColor,
- notesSb.toString(), getStateHoursSpentHtml(atsWorkPage) + getReviewData(sma, atsWorkPage)));
- rd.addRaw(AHTML.newline());
- }
- }
- }
- }
-
- private String getReviewData(StateMachineArtifact sma, AtsWorkPage page) throws OseeCoreException {
- if (sma instanceof TeamWorkFlowArtifact) {
- return ReviewInfoXWidget.toHTML((TeamWorkFlowArtifact) sma, page.getName());
- }
- return "";
- }
-
- private String getStateHoursSpentHtml(WorkPage page) throws OseeCoreException {
- return AHTML.getLabelValueStr("State Hours Spent",
- AtsUtil.doubleToI18nString(sma.getStateMgr().getHoursSpent(page.getName())) + "<br>");
- }
-
- public boolean isIncludeTaskList() {
- return includeTaskList;
- }
-
- public void setIncludeTaskList(boolean includeTaskList) {
- this.includeTaskList = includeTaskList;
- }
-
-}
+/******************************************************************************* + * 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.editor; + +import java.util.Arrays; +import java.util.logging.Level; +import org.eclipse.jface.action.Action; +import org.eclipse.osee.ats.artifact.AtsAttributeTypes; +import org.eclipse.osee.ats.artifact.NoteItem; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.artifact.TaskArtifact; +import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.editor.widget.ReviewInfoXWidget; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.ats.util.Overview; +import org.eclipse.osee.ats.workflow.AtsWorkPage; +import org.eclipse.osee.ats.world.IWorldViewArtifact; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.AHTML; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.skynet.results.XResultData; +import org.eclipse.osee.framework.ui.skynet.results.html.XResultPage.Manipulations; +import org.eclipse.osee.framework.ui.skynet.widgets.XDate; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPage; + +/** + * @author Donald G. Dunne + */ +public class SMAPrint extends Action { + + private final StateMachineArtifact sma; + boolean includeTaskList = true; + + public SMAPrint(StateMachineArtifact sma) { + super(); + this.sma = sma; + } + + @Override + public void run() { + try { + XResultData xResultData = getResultData(); + xResultData.report("Print Preview of " + sma.getName(), Manipulations.RAW_HTML); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + + } + + public XResultData getResultData() throws OseeCoreException { + XResultData resultData = new XResultData(); + resultData.addRaw(AHTML.beginMultiColumnTable(100)); + resultData.addRaw(AHTML.addRowMultiColumnTable(new String[] {AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Title: ", + sma.getName())})); + resultData.addRaw(AHTML.endMultiColumnTable()); + resultData.addRaw(AHTML.beginMultiColumnTable(100)); + resultData.addRaw(AHTML.addRowMultiColumnTable(new String[] { + // + AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Current State: ", ((IWorldViewArtifact) sma).getWorldViewState()), + // + AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Team: ", ((IWorldViewArtifact) sma).getWorldViewTeam()), + // + AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Assignees: ", ((IWorldViewArtifact) sma).getWorldViewActivePoc()), + // + AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Originator: ", ((IWorldViewArtifact) sma).getWorldViewOriginator()), + // + AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Created: ", + XDate.getDateStr(sma.getLog().getCreationDate(), XDate.MMDDYYHHMM)) + + })); + resultData.addRaw(AHTML.endMultiColumnTable()); + resultData.addRaw(AHTML.beginMultiColumnTable(100)); + resultData.addRaw(AHTML.addRowMultiColumnTable(new String[] { + // + AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Change Type: ", sma.getWorldViewChangeTypeStr()), + AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Priority: ", sma.getWorldViewPriority()), + AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Need By: ", sma.getWorldViewDeadlineDateStr())})); + + resultData.addRaw(AHTML.addRowMultiColumnTable(new String[] { + // + AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Workflow: ", sma.getArtifactTypeName()), + AHTML.getLabelValueStr(AHTML.LABEL_FONT, "HRID: ", sma.getHumanReadableId()), + (sma.getParentActionArtifact() == null ? "" : AHTML.getLabelValueStr(AHTML.LABEL_FONT, "Action HRID: ", + sma.getParentActionArtifact().getHumanReadableId()))})); + resultData.addRaw(AHTML.endMultiColumnTable()); + for (NoteItem note : sma.getNotes().getNoteItems()) { + if (note.getState().equals("")) { + resultData.addRaw(note.toHTML() + AHTML.newline()); + } + } + getWorkFlowHtml(resultData); + if (includeTaskList) { + getTaskHtml(resultData); + } + resultData.addRaw(AHTML.newline()); + resultData.addRaw(sma.getLog().getHtml()); + + XResultData rd = new XResultData(); + rd.addRaw(AHTML.beginMultiColumnTable(100, 1)); + rd.addRaw(AHTML.addRowMultiColumnTable(new String[] {resultData.getReport("").getManipulatedHtml( + Arrays.asList(Manipulations.NONE))})); + rd.addRaw(AHTML.endMultiColumnTable()); + + return rd; + } + + private void getTaskHtml(XResultData rd) throws OseeCoreException { + if (!sma.isTaskable()) { + return; + } + try { + rd.addRaw(AHTML.addSpace(1) + AHTML.getLabelStr(AHTML.LABEL_FONT, "Tasks")); + rd.addRaw(AHTML.startBorderTable(100, Overview.normalColor, "")); + rd.addRaw(AHTML.addHeaderRowMultiColumnTable(new String[] { + "Title", + "State", + "POC", + "%", + "Hrs", + "Resolution", + "ID"})); + for (TaskArtifact art : ((TaskableStateMachineArtifact) sma).getTaskArtifacts()) { + rd.addRaw(AHTML.addRowMultiColumnTable(new String[] { + art.getName(), + art.getStateMgr().getCurrentStateName().replaceAll("(Task|State)", ""), + art.getWorldViewActivePoc(), + art.getPercentCompleteSMATotal() + "", + art.getHoursSpentSMATotal() + "", + art.getSoleAttributeValue(AtsAttributeTypes.Resolution, ""), + art.getHumanReadableId()})); + } + rd.addRaw(AHTML.endBorderTable()); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + rd.addRaw("Task Exception - " + ex.getLocalizedMessage()); + } + } + + private void getWorkFlowHtml(XResultData rd) throws OseeCoreException { + // Only display current or past states + for (AtsWorkPage atsWorkPage : sma.getAtsWorkPages()) { + if (sma.isCurrentState(atsWorkPage.getName()) || sma.getStateMgr().isStateVisited(atsWorkPage.getName())) { + // Don't show completed or cancelled state if not currently those state + if (atsWorkPage.isCompletePage() && !sma.isCompleted()) { + continue; + } + if (atsWorkPage.isCancelledPage() && !sma.isCancelled()) { + continue; + } + StringBuffer notesSb = new StringBuffer(); + for (NoteItem note : sma.getNotes().getNoteItems()) { + if (note.getState().equals(atsWorkPage.getName())) { + notesSb.append(note.toHTML() + AHTML.newline()); + } + } + if (sma.isCurrentState(atsWorkPage.getName()) || sma.getStateMgr().isStateVisited(atsWorkPage.getName()) && sma.isTeamWorkflow()) { + atsWorkPage.generateLayoutDatas(sma); + rd.addRaw(atsWorkPage.getHtml( + sma.isCurrentState(atsWorkPage.getName()) ? AtsUtil.activeColor : AtsUtil.normalColor, + notesSb.toString(), getStateHoursSpentHtml(atsWorkPage) + getReviewData(sma, atsWorkPage))); + rd.addRaw(AHTML.newline()); + } + } + } + } + + private String getReviewData(StateMachineArtifact sma, AtsWorkPage page) throws OseeCoreException { + if (sma instanceof TeamWorkFlowArtifact) { + return ReviewInfoXWidget.toHTML((TeamWorkFlowArtifact) sma, page.getName()); + } + return ""; + } + + private String getStateHoursSpentHtml(WorkPage page) throws OseeCoreException { + return AHTML.getLabelValueStr("State Hours Spent", + AtsUtil.doubleToI18nString(sma.getStateMgr().getHoursSpent(page.getName())) + "<br>"); + } + + public boolean isIncludeTaskList() { + return includeTaskList; + } + + public void setIncludeTaskList(boolean includeTaskList) { + this.includeTaskList = includeTaskList; + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMARelationsHyperlinkComposite.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMARelationsHyperlinkComposite.java index 2d34ec819b3..85c86b90b9d 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMARelationsHyperlinkComposite.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMARelationsHyperlinkComposite.java @@ -42,17 +42,17 @@ public class SMARelationsHyperlinkComposite extends Composite { private final XFormToolkit toolkit; private static IRelationEnumeration[] sides = new IRelationEnumeration[] { - AtsRelationTypes.TeamWorkflowToReview_Review, AtsRelationTypes.TeamWorkflowToReview_Team, - CoreRelationTypes.Supercedes_Superceded, CoreRelationTypes.Supercedes_Supercedes, - CoreRelationTypes.SupportingInfo_SupportedBy, CoreRelationTypes.SupportingInfo_SupportingInfo, - CoreRelationTypes.Dependency__Artifact, CoreRelationTypes.Dependency__Dependency}; + AtsRelationTypes.TeamWorkflowToReview_Review, + AtsRelationTypes.TeamWorkflowToReview_Team, + CoreRelationTypes.Supercedes_Superceded, + CoreRelationTypes.Supercedes_Supercedes, + CoreRelationTypes.SupportingInfo_SupportedBy, + CoreRelationTypes.SupportingInfo_SupportingInfo, + CoreRelationTypes.Dependency__Artifact, + CoreRelationTypes.Dependency__Dependency}; private StateMachineArtifact sma; private Label actionableItemsLabel; - /** - * @param parent - * @param style - */ public SMARelationsHyperlinkComposite(Composite parent, XFormToolkit toolkit, int style) { super(parent, style); this.toolkit = toolkit; @@ -78,7 +78,7 @@ public class SMARelationsHyperlinkComposite extends Composite { createArtifactRelationHyperlinks("This", sma, "has supporting info", CoreRelationTypes.SupportingInfo_SupportingInfo); - // Create label for review's related actionable items (if any) + // Create label for review's related actionable items (if any) if (sma instanceof ReviewSMArtifact) { processReviewArtifact((ReviewSMArtifact) sma); } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMARelationsSection.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMARelationsSection.java index 941efcc594b..2576b7ba16c 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMARelationsSection.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMARelationsSection.java @@ -1,87 +1,87 @@ -/*******************************************************************************
- * 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.editor;
-
-import java.util.Arrays;
-import java.util.List;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerFilter;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.ats.util.AtsRelationTypes;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
-import org.eclipse.osee.framework.core.model.type.RelationType;
-import org.eclipse.osee.framework.ui.skynet.artifact.editor.BaseArtifactEditorInput;
-import org.eclipse.osee.framework.ui.skynet.artifact.editor.sections.RelationsFormSection;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-import org.eclipse.ui.forms.widgets.Section;
-
-/**
- * @author Roberto E. Escobar
- * @author Donald G. Dunne
- */
-public class SMARelationsSection extends RelationsFormSection {
-
- public SMARelationsSection(SMAEditor editor, Composite parent, FormToolkit toolkit, int style) {
- super(editor, parent, toolkit, style | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
- }
-
- @Override
- public SMAEditor getEditor() {
- return (SMAEditor) super.getEditor();
- }
-
- @Override
- public BaseArtifactEditorInput getEditorInput() {
- return super.getEditorInput();
- }
-
- @Override
- protected synchronized void createSection(Section section, FormToolkit toolkit) {
- super.createSection(section, toolkit);
- // Don't allow users to see all relations
- if (!AtsUtil.isAtsAdmin()) {
- getRelationComposite().getTreeViewer().addFilter(userRelationsFilter);
- }
- }
-
- @Override
- protected void handleExpandAndCollapse() {
- ((SMAWorkFlowTab) getEditor().getSelectedPage()).getManagedForm().getForm().layout();
- }
-
- @Override
- protected void addDragAndDrop(Control dropArea) {
- new SMADragAndDrop(dropArea, (StateMachineArtifact) getEditorInput().getArtifact(), SMAEditor.EDITOR_ID);
- }
-
- private static ViewerFilter userRelationsFilter = new ViewerFilter() {
- @Override
- public boolean select(Viewer viewer, Object parentElement, Object element) {
- if (element instanceof RelationType) {
- return !filteredRelationTypeNames.contains(((RelationType) element).getName());
- }
- return true;
- }
- };
-
- private static List<String> filteredRelationTypeNames = Arrays.asList(
- AtsRelationTypes.ActionToWorkflow_Action.getName(), AtsRelationTypes.SmaToTask_Sma.getName(),
- AtsRelationTypes.TeamActionableItem_ActionableItem.getName(),
- AtsRelationTypes.TeamWorkflowTargetedForVersion_Version.getName(), AtsRelationTypes.TeamLead_Lead.getName(),
- AtsRelationTypes.TeamMember_Member.getName(), AtsRelationTypes.TeamWorkflowToReview_Review.getName(),
- CoreRelationTypes.WorkItem__Child.getName(), CoreRelationTypes.Default_Hierarchical__Child.getName(),
- CoreRelationTypes.Users_Artifact.getName());
-
-}
+/******************************************************************************* + * 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.editor; + +import java.util.Arrays; +import java.util.List; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerFilter; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.util.AtsRelationTypes; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.core.enums.CoreRelationTypes; +import org.eclipse.osee.framework.core.model.type.RelationType; +import org.eclipse.osee.framework.ui.skynet.artifact.editor.BaseArtifactEditorInput; +import org.eclipse.osee.framework.ui.skynet.artifact.editor.sections.RelationsFormSection; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.ui.forms.widgets.ExpandableComposite; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.eclipse.ui.forms.widgets.Section; + +/** + * @author Roberto E. Escobar + * @author Donald G. Dunne + */ +public class SMARelationsSection extends RelationsFormSection { + + public SMARelationsSection(SMAEditor editor, Composite parent, FormToolkit toolkit, int style) { + super(editor, parent, toolkit, style | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR); + } + + @Override + public SMAEditor getEditor() { + return (SMAEditor) super.getEditor(); + } + + @Override + public BaseArtifactEditorInput getEditorInput() { + return super.getEditorInput(); + } + + @Override + protected synchronized void createSection(Section section, FormToolkit toolkit) { + super.createSection(section, toolkit); + // Don't allow users to see all relations + if (!AtsUtil.isAtsAdmin()) { + getRelationComposite().getTreeViewer().addFilter(userRelationsFilter); + } + } + + @Override + protected void handleExpandAndCollapse() { + ((SMAWorkFlowTab) getEditor().getSelectedPage()).getManagedForm().getForm().layout(); + } + + @Override + protected void addDragAndDrop(Control dropArea) { + new SMADragAndDrop(dropArea, (StateMachineArtifact) getEditorInput().getArtifact(), SMAEditor.EDITOR_ID); + } + + private static ViewerFilter userRelationsFilter = new ViewerFilter() { + @Override + public boolean select(Viewer viewer, Object parentElement, Object element) { + if (element instanceof RelationType) { + return !filteredRelationTypeNames.contains(((RelationType) element).getName()); + } + return true; + } + }; + + private static List<String> filteredRelationTypeNames = Arrays.asList( + AtsRelationTypes.ActionToWorkflow_Action.getName(), AtsRelationTypes.SmaToTask_Sma.getName(), + AtsRelationTypes.TeamActionableItem_ActionableItem.getName(), + AtsRelationTypes.TeamWorkflowTargetedForVersion_Version.getName(), AtsRelationTypes.TeamLead_Lead.getName(), + AtsRelationTypes.TeamMember_Member.getName(), AtsRelationTypes.TeamWorkflowToReview_Review.getName(), + CoreRelationTypes.WorkItem__Child.getName(), CoreRelationTypes.Default_Hierarchical__Child.getName(), + CoreRelationTypes.Users_Artifact.getName()); + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAWorkFlowSection.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAWorkFlowSection.java index abaa6145347..7fe89d6f8cb 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAWorkFlowSection.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAWorkFlowSection.java @@ -1,895 +1,895 @@ -/*******************************************************************************
- * 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.editor;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.logging.Level;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.viewers.ArrayContentProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.osee.ats.artifact.ATSLog.LogType;
-import org.eclipse.osee.ats.artifact.LogItem;
-import org.eclipse.osee.ats.artifact.ReviewSMArtifact;
-import org.eclipse.osee.ats.artifact.ReviewSMArtifact.ReviewBlockType;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact.TransitionOption;
-import org.eclipse.osee.ats.artifact.TaskArtifact;
-import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact.DefaultTeamState;
-import org.eclipse.osee.ats.editor.stateItem.IAtsStateItem;
-import org.eclipse.osee.ats.editor.widget.ReviewInfoXWidget;
-import org.eclipse.osee.ats.editor.widget.StateHoursSpentXWidget;
-import org.eclipse.osee.ats.editor.widget.StatePercentCompleteXWidget;
-import org.eclipse.osee.ats.editor.widget.TaskInfoXWidget;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.ats.util.XCancellationReasonTextWidget;
-import org.eclipse.osee.ats.util.widgets.ReviewManager;
-import org.eclipse.osee.ats.util.widgets.dialog.SMAStatusDialog;
-import org.eclipse.osee.ats.workflow.AtsWorkPage;
-import org.eclipse.osee.ats.workflow.item.AtsWorkDefinitions;
-import org.eclipse.osee.framework.core.data.SystemUser;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeStateException;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.UserManager;
-import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
-import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.skynet.XFormToolkit;
-import org.eclipse.osee.framework.ui.skynet.widgets.IArtifactStoredWidget;
-import org.eclipse.osee.framework.ui.skynet.widgets.XComboViewer;
-import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
-import org.eclipse.osee.framework.ui.skynet.widgets.XLabelValue;
-import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
-import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
-import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
-import org.eclipse.osee.framework.ui.skynet.widgets.dialog.UserCheckTreeDialog;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinition;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinitionLabelProvider;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinitionViewSorter;
-import org.eclipse.osee.framework.ui.swt.ALayout;
-import org.eclipse.osee.framework.ui.swt.Displays;
-import org.eclipse.osee.framework.ui.swt.FontManager;
-import org.eclipse.osee.framework.ui.swt.Widgets;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.forms.IManagedForm;
-import org.eclipse.ui.forms.SectionPart;
-import org.eclipse.ui.forms.events.HyperlinkEvent;
-import org.eclipse.ui.forms.events.IHyperlinkListener;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
-import org.eclipse.ui.forms.widgets.Hyperlink;
-import org.eclipse.ui.forms.widgets.Section;
-
-/**
- * @author Donald G. Dunne
- */
-public class SMAWorkFlowSection extends SectionPart {
-
- private XComboViewer transitionToStateCombo;
- private Button transitionButton;
- private Label transitionAssigneesLabel;
- protected final StateMachineArtifact sma;
- private final AtsWorkPage atsWorkPage;
- private final boolean isEditable, isCurrentState, isGlobalEditable;
- private final XFormToolkit toolkit;
- private Composite mainComp;
- private final List<XWidget> allXWidgets = new ArrayList<XWidget>();
- private boolean sectionCreated = false;
- private Section section;
-
- public SMAWorkFlowSection(Composite parent, XFormToolkit toolkit, int style, AtsWorkPage page, StateMachineArtifact sma) throws OseeCoreException {
- super(parent, toolkit, style | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
- this.toolkit = toolkit;
- this.atsWorkPage = page;
- this.sma = sma;
-
- isEditable = isEditable(sma, page);
- isGlobalEditable =
- !sma.isReadOnly() && sma.isAccessControlWrite() && sma.getEditor().isPriviledgedEditModeEnabled();
- isCurrentState = sma.isCurrentState(page.getName());
- // parent.setBackground(Displays.getSystemColor(SWT.COLOR_CYAN));
- }
-
- @Override
- public void initialize(final IManagedForm form) {
- super.initialize(form);
-
- section = getSection();
- try {
- section.setText(getCurrentStateTitle());
- if (sma.isCurrentState(atsWorkPage.getName())) {
- section.setTitleBarForeground(Displays.getSystemColor(SWT.COLOR_DARK_GREEN));
- section.setBackground(AtsUtil.ACTIVE_COLOR);
- }
- section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- // section.setBackground(Displays.getSystemColor(SWT.COLOR_MAGENTA));
-
- boolean isCurrentSectionExpanded = sma.isCurrentSectionExpanded(atsWorkPage.getName());
-
- if (isCurrentSectionExpanded) {
- createSection(section);
- }
- // Only load when users selects section
- section.addListener(SWT.Activate, new Listener() {
-
- @Override
- public void handleEvent(Event e) {
- try {
- createSection(section);
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- });
-
- section.layout();
- section.setExpanded(isCurrentSectionExpanded);
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
- private synchronized void createSection(Section section) throws OseeCoreException {
- if (sectionCreated) {
- return;
- }
-
- mainComp = toolkit.createClientContainer(section, 2);
- mainComp.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING));
- mainComp.setLayout(ALayout.getZeroMarginLayout(1, false));
- // mainComp.setBackground(Displays.getSystemColor(SWT.COLOR_DARK_YELLOW));
- mainComp.layout();
-
- SMAWorkFlowTab.createStateNotesHeader(mainComp, toolkit, sma, 2, atsWorkPage.getName());
-
- Composite workComp = createWorkArea(mainComp, atsWorkPage, toolkit);
-
- if (isCurrentState) {
- createCurrentPageTransitionLine(mainComp, atsWorkPage, toolkit);
- }
-
- GridData gridData = new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING);
- gridData.widthHint = 400;
- workComp.setLayoutData(gridData);
- sectionCreated = true;
- }
-
- protected Composite createWorkArea(Composite comp, AtsWorkPage atsWorkPage, XFormToolkit toolkit) throws OseeCoreException {
-
- atsWorkPage.generateLayoutDatas(sma);
-
- // Create Page
- Composite workComp = toolkit.createContainer(comp, 1);
- workComp.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING));
- // workComp.setBackground(Displays.getSystemColor(SWT.COLOR_GREEN));
-
- createMetricsHeader(workComp);
-
- // Add any dynamic XWidgets declared for page by IAtsStateItem extensions
- for (IAtsStateItem item : sma.getStateItems().getStateItems(atsWorkPage.getId())) {
- for (XWidget xWidget : item.getDynamicXWidgetsPreBody(sma)) {
- xWidget.createWidgets(workComp, 2);
- allXWidgets.add(xWidget);
- }
- }
-
- if (atsWorkPage.isCompleteCancelledState()) {
- Composite completeComp = new Composite(workComp, SWT.None);
- GridLayout layout = new GridLayout(1, false);
- completeComp.setLayout(layout);
- completeComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- if (atsWorkPage.isCancelledPage()) {
- createCancelledPageWidgets(completeComp);
- } else if (atsWorkPage.isCompletePage()) {
- createCompletedPageWidgets(completeComp);
- }
- }
-
- // Create dynamic XWidgets
- DynamicXWidgetLayout dynamicXWidgetLayout =
- atsWorkPage.createBody(getManagedForm(), workComp, sma, xModListener, isEditable || isGlobalEditable);
- allXWidgets.addAll(dynamicXWidgetLayout.getXWidgets());
-
- // Add any dynamic XWidgets declared for page by IAtsStateItem extensions
- for (IAtsStateItem item : sma.getStateItems().getStateItems(atsWorkPage.getId())) {
- for (XWidget xWidget : item.getDynamicXWidgetsPostBody(sma)) {
- xWidget.createWidgets(workComp, 2);
- allXWidgets.add(xWidget);
- }
- }
-
- createTaskFooter(workComp, atsWorkPage.getName());
- createReviewFooter(workComp, atsWorkPage.getName());
-
- // Set all XWidget labels to bold font
- for (XWidget xWidget : allXWidgets) {
- if (xWidget.getLabelWidget() != null) {
- SMAEditor.setLabelFonts(xWidget.getLabelWidget(), FontManager.getDefaultLabelFont());
- }
- }
-
- // Check extension points for page creation
- for (IAtsStateItem item : sma.getStateItems().getStateItems(atsWorkPage.getId())) {
- Result result = item.pageCreated(toolkit, atsWorkPage, sma, xModListener, isEditable || isGlobalEditable);
- if (result.isFalse()) {
- result.popup();
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Error in page creation => " + result.getText());
- }
- }
-
- return workComp;
- }
-
- private void createCancelledPageWidgets(Composite parent) throws OseeCoreException {
- XWidget xWidget = null;
- xWidget = new XLabelValue("Cancelled from State", sma.getLog().getCancelledFromState());
- xWidget.createWidgets(parent, 1);
- allXWidgets.add(xWidget);
-
- if (sma.getEditor().isPriviledgedEditModeEnabled()) {
- xWidget = new XCancellationReasonTextWidget(sma);
- xWidget.addXModifiedListener(xModListener);
- } else {
- xWidget = new XLabelValue("Cancellation Reason", sma.getLog().getCancellationReason());
- }
- xWidget.createWidgets(parent, 1);
- allXWidgets.add(xWidget);
- }
-
- private void createCompletedPageWidgets(Composite parent) throws OseeCoreException {
- XWidget xWidget = null;
- xWidget = new XLabelValue("Completed from State", sma.getLog().getCompletedFromState());
- xWidget.createWidgets(parent, 1);
- allXWidgets.add(xWidget);
- }
-
- private void createMetricsHeader(Composite parent) {
- if (!atsWorkPage.isCompleteCancelledState()) {
- Composite comp = new Composite(parent, SWT.None);
- GridLayout layout = ALayout.getZeroMarginLayout(4, false);
- layout.marginLeft = 2;
- comp.setLayout(layout);
- comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- allXWidgets.add(new StatePercentCompleteXWidget(getManagedForm(), atsWorkPage, sma, comp, 2, xModListener,
- isCurrentState));
- allXWidgets.add(new StateHoursSpentXWidget(getManagedForm(), atsWorkPage, sma, comp, 2, xModListener,
- isCurrentState));
- }
- }
-
- private void createReviewFooter(Composite parent, String forStateName) {
- if (isShowReviewInfo() && sma.isTeamWorkflow()) {
- Composite comp = new Composite(parent, SWT.None);
- GridLayout layout = new GridLayout(1, false);
- comp.setLayout(layout);
- comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- allXWidgets.add(new ReviewInfoXWidget(getManagedForm(), toolkit, (TeamWorkFlowArtifact) sma, forStateName,
- comp, 1));
- }
- }
-
- private void createTaskFooter(Composite parent, String forStateName) throws OseeCoreException {
- if (isShowTaskInfo()) {
- Composite comp = new Composite(parent, SWT.None);
- GridLayout layout = new GridLayout(6, false);
- comp.setLayout(layout);
- comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- allXWidgets.add(new TaskInfoXWidget(getManagedForm(), ((TaskableStateMachineArtifact) sma), forStateName,
- comp, 2));
- }
- }
-
- protected boolean isShowTaskInfo() throws OseeCoreException {
- return sma.isTaskable();
- }
-
- protected boolean isShowReviewInfo() {
- return sma.isTeamWorkflow();
- }
-
- public Result isXWidgetSavable() {
- for (XWidget widget : allXWidgets) {
- if (widget instanceof IArtifactStoredWidget) {
- IStatus status = widget.isValid();
- if (!status.isOK()) {
- return new Result(false, status.getMessage());
- }
- }
- }
- return Result.TrueResult;
- }
-
- @Override
- public String toString() {
- return atsWorkPage + " for " + getSma();
- }
-
- public Result isXWidgetDirty() throws OseeCoreException {
- for (XWidget widget : allXWidgets) {
- if (widget instanceof IArtifactStoredWidget) {
- IArtifactStoredWidget artifactStoredWidget = ((IArtifactStoredWidget) widget);
- Result result = artifactStoredWidget.isDirty();
- if (result.isTrue()) {
- return result;
- }
- }
- }
- return Result.FalseResult;
- }
-
- public void getDirtyIArtifactWidgets(List<IArtifactStoredWidget> widgets) throws OseeCoreException {
- for (XWidget widget : allXWidgets) {
- if (widget instanceof IArtifactStoredWidget) {
- IArtifactStoredWidget artifactStoredWidget = ((IArtifactStoredWidget) widget);
- if (artifactStoredWidget.isDirty().isTrue()) {
- widgets.add(artifactStoredWidget);
- }
- }
- }
- }
-
- private String getCurrentStateTitle() throws OseeCoreException {
- StringBuffer sb = new StringBuffer(atsWorkPage.getName());
- if (isEditable && !sma.isCompleted() && !sma.isCancelled()) {
- sb.append(" - Current State");
- }
- if (sma.isCancelled()) {
- LogItem item = sma.getLog().getStateEvent(LogType.StateCancelled);
- if (item == null) {
- throw new OseeStateException("ats.Log: Cancelled state has no logItem for " + sma.getHumanReadableId());
- }
- if (item.getState().equals(atsWorkPage.getName())) {
- sb.append(" - Cancelled");
- if (!item.getMsg().equals("")) {
- sb.append(" - Reason: " + item.getMsg());
- }
- }
- }
- if (isCurrentState) {
- if (sma.isCompleted()) {
- sb.append(" - ");
- sb.append(sma.getWorldViewCompletedDateStr());
- LogItem item = sma.getLog().getStateEvent(LogType.StateEntered, atsWorkPage.getName());
- sb.append(" by " + item.getUser().getName());
- } else if (sma.isCancelled()) {
- sb.append(" - ");
- sb.append(sma.getWorldViewCancelledDateStr());
- LogItem item = sma.getLog().getStateEvent(LogType.StateEntered, atsWorkPage.getName());
- sb.append(" by " + item.getUser().getName());
- }
- if (sma.getStateMgr().getAssignees().size() > 0) {
- sb.append(" assigned to ");
- sb.append(sma.getStateMgr().getAssigneesStr(80));
- }
- } else {
- LogItem item = sma.getLog().getStateEvent(LogType.StateComplete, atsWorkPage.getName());
- if (item != null) {
- sb.append(" - State Completed " + item.getDate(XDate.MMDDYYHHMM));
- sb.append(" by " + item.getUser().getName());
- }
- }
- return sb.toString();
- }
-
- @Override
- public void dispose() {
- super.dispose();
- for (XWidget xWidget : allXWidgets) {
- xWidget.dispose();
- }
- atsWorkPage.dispose();
- }
-
- final SMAWorkFlowSection fSection = this;
- final XModifiedListener xModListener = new XModifiedListener() {
- @Override
- public void widgetModified(XWidget xWidget) {
- try {
- if (sma.isDeleted()) {
- return;
- }
- // Notify extensions of widget modified
- for (IAtsStateItem item : sma.getStateItems().getStateItems(atsWorkPage.getId())) {
- try {
- item.widgetModified(fSection, xWidget);
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- updateTransitionToState();
- updateTransitionToAssignees();
- sma.getEditor().onDirtied();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- };
-
- @Override
- public void refresh() {
- if (!Widgets.isAccessible(mainComp)) {
- return;
- }
- super.refresh();
- try {
- if (Widgets.isAccessible(transitionAssigneesLabel)) {
- WorkPageDefinition toWorkPage = (WorkPageDefinition) transitionToStateCombo.getSelected();
- if (toWorkPage == null) {
- transitionAssigneesLabel.setText("");
- } else {
- transitionAssigneesLabel.setText(sma.getTransitionAssigneesStr());
- }
- transitionAssigneesLabel.getParent().layout();
- }
- sma.getEditor().onDirtied();
- for (XWidget xWidget : allXWidgets) {
- xWidget.refresh();
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- private void handleChangeTransitionAssignees() throws OseeCoreException {
- WorkPageDefinition toWorkPage = (WorkPageDefinition) transitionToStateCombo.getSelected();
- if (toWorkPage == null) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "No Transition State Selected");
- return;
- }
- if (toWorkPage.isCancelledPage() || toWorkPage.isCompletePage()) {
- AWorkbench.popup("ERROR", "No Assignees in Completed and Cancelled states");
- return;
- }
- UserCheckTreeDialog uld = new UserCheckTreeDialog();
- uld.setMessage("Select users to transition to.");
- uld.setInitialSelections(sma.getTransitionAssignees());
- if (sma.getParentTeamWorkflow() != null) {
- uld.setTeamMembers(sma.getParentTeamWorkflow().getTeamDefinition().getMembersAndLeads());
- }
- if (uld.open() != 0) {
- return;
- }
- Collection<User> users = uld.getUsersSelected();
- if (users.isEmpty()) {
- AWorkbench.popup("ERROR", "Must have at least one assignee");
- return;
- }
- sma.setTransitionAssignees(users);
- refresh();
- sma.getEditor().onDirtied();
- }
-
- private void createCurrentPageTransitionLine(Composite parent, AtsWorkPage atsWorkPage, XFormToolkit toolkit) throws OseeCoreException {
- Composite comp = toolkit.createComposite(parent, SWT.NONE);
- comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- comp.setLayout(new GridLayout(5, false));
- comp.setBackground(AtsUtil.ACTIVE_COLOR);
-
- transitionButton = toolkit.createButton(comp, "Transition", SWT.PUSH);
- transitionButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- handleTransition();
- }
- });
- transitionButton.setBackground(AtsUtil.ACTIVE_COLOR);
-
- Label label = toolkit.createLabel(comp, "to");
- label.setBackground(AtsUtil.ACTIVE_COLOR);
-
- transitionToStateCombo = new XComboViewer("Transition To State Combo");
- transitionToStateCombo.setDisplayLabel(false);
- ArrayList<Object> allPages = new ArrayList<Object>();
- for (WorkPageDefinition nextPage : sma.getToWorkPages()) {
- allPages.add(nextPage);
- }
- transitionToStateCombo.setInput(allPages);
- transitionToStateCombo.setLabelProvider(new WorkPageDefinitionLabelProvider());
- transitionToStateCombo.setContentProvider(new ArrayContentProvider());
- transitionToStateCombo.setSorter(new WorkPageDefinitionViewSorter());
-
- transitionToStateCombo.createWidgets(comp, 1);
-
- // Set default page from workflow default
- ArrayList<Object> defaultPage = new ArrayList<Object>();
- if (atsWorkPage.getDefaultToPage() != null) {
- defaultPage.add(atsWorkPage.getDefaultToPage());
- transitionToStateCombo.setSelected(defaultPage);
- }
- if (atsWorkPage.isCancelledPage()) {
- LogItem item = sma.getLog().getStateEvent(LogType.StateCancelled);
- if (item != null) {
- defaultPage.add(sma.getWorkPageDefinitionByName(item.getState()));
- transitionToStateCombo.setSelected(defaultPage);
- }
- }
- // Update transition based on state items
- updateTransitionToState();
-
- transitionToStateCombo.getCombo().setVisibleItemCount(20);
- transitionToStateCombo.addSelectionChangedListener(new ISelectionChangedListener() {
- @Override
- public void selectionChanged(SelectionChangedEvent event) {
- try {
- updateTransitionToAssignees();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- });
-
- Hyperlink assigneesLabelLink = toolkit.createHyperlink(comp, "Next State Assignee(s)", SWT.NONE);
- assigneesLabelLink.addHyperlinkListener(new IHyperlinkListener() {
-
- @Override
- public void linkEntered(HyperlinkEvent e) {
- // do nothing
- }
-
- @Override
- public void linkExited(HyperlinkEvent e) {
- // do nothing
- }
-
- @Override
- public void linkActivated(HyperlinkEvent e) {
- try {
- handleChangeTransitionAssignees();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
- });
- assigneesLabelLink.setBackground(AtsUtil.ACTIVE_COLOR);
-
- transitionAssigneesLabel =
- toolkit.createLabel(comp, Strings.truncate(sma.getTransitionAssigneesStr(), 100, true));
- transitionAssigneesLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- transitionAssigneesLabel.setBackground(AtsUtil.ACTIVE_COLOR);
-
- }
-
- public void updateTransitionToAssignees() throws OseeCoreException {
- Collection<User> assignees = null;
- // Determine if the is an override set of assigness
- for (IAtsStateItem item : sma.getStateItems().getStateItems(atsWorkPage.getId())) {
- assignees = item.getOverrideTransitionToAssignees(this);
- if (assignees != null) {
- break;
- }
- }
- // If override set and isn't the same as already selected, update
- if (assignees != null && !sma.getTransitionAssignees().equals(assignees)) {
- sma.setTransitionAssignees(assignees);
- sma.getEditor().onDirtied();
- }
- refresh();
- }
-
- public void updateTransitionToState() throws OseeCoreException {
- // Determine if there is a transitionToStateOverride for this page
- String transitionStateOverride = null;
- for (IAtsStateItem item : sma.getStateItems().getStateItems(atsWorkPage.getId())) {
- transitionStateOverride = item.getOverrideTransitionToStateName(this);
- if (transitionStateOverride != null) {
- break;
- }
- }
- if (transitionStateOverride != null) {
- // Return if override state is same as selected
- if (((WorkPageDefinition) transitionToStateCombo.getSelected()).getName().equals(transitionStateOverride)) {
- return;
- }
- // Find page corresponding to override state name
- for (WorkPageDefinition toWorkPageDefinition : sma.getToWorkPages()) {
- if (toWorkPageDefinition.getPageName().equals(transitionStateOverride)) {
- // Reset selection
- ArrayList<Object> defaultPage = new ArrayList<Object>();
- defaultPage.add(toWorkPageDefinition);
- transitionToStateCombo.setSelected(defaultPage);
- return;
- }
- }
- }
- }
-
- public void setTransitionToStateSelection(String stateName) throws OseeCoreException {
- ArrayList<Object> allPages = new ArrayList<Object>();
- for (WorkPageDefinition nextPage : sma.getToWorkPages()) {
- if (nextPage.getPageName().equals(stateName)) {
- allPages.add(nextPage);
- }
- }
- transitionToStateCombo.setSelected(allPages);
- }
-
- private void handleTransition() {
-
- try {
-
- if (!isEditable && !sma.getStateMgr().getAssignees().contains(UserManager.getUser(SystemUser.UnAssigned))) {
- AWorkbench.popup(
- "ERROR",
- "You must be assigned to transition this workflow.\nContact Assignee or Select Priviledged Edit for Authorized Overriders.");
- return;
- }
- // As a convenience, if assignee is UnAssigned and user selects to transition, make user current assignee
- if (sma.getStateMgr().getAssignees().contains(UserManager.getUser(SystemUser.UnAssigned))) {
- sma.getStateMgr().removeAssignee(UserManager.getUser(SystemUser.UnAssigned));
- sma.getStateMgr().addAssignee(UserManager.getUser());
- }
- if (sma.isTeamWorkflow() && ((TeamWorkFlowArtifact) sma).getBranchMgr().isWorkingBranchInWork()) {
-
- if (((WorkPageDefinition) transitionToStateCombo.getSelected()).getPageName().equals(
- DefaultTeamState.Cancelled.name())) {
- AWorkbench.popup("Transition Blocked",
- "Working Branch exists.\n\nPlease delete working branch before transition to cancel.");
- return;
- }
- if (((TeamWorkFlowArtifact) sma).getBranchMgr().isBranchInCommit()) {
- AWorkbench.popup("Transition Blocked",
- "Working Branch is being Committed.\n\nPlease wait till commit completes to transition.");
- return;
- }
- if (!atsWorkPage.isAllowTransitionWithWorkingBranch()) {
- AWorkbench.popup("Transition Blocked",
- "Working Branch exists.\n\nPlease commit or delete working branch before transition.");
- return;
- }
-
- }
-
- sma.setInTransition(true);
- sma.getEditor().doSave(null);
-
- // Get transition to state
- WorkPageDefinition toWorkPageDefinition = (WorkPageDefinition) transitionToStateCombo.getSelected();
-
- if (toWorkPageDefinition == null) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "No Transition State Selected");
- return;
- }
- if (toWorkPageDefinition.getPageName().equals(DefaultTeamState.Cancelled.name())) {
- EntryDialog cancelDialog = new EntryDialog("Cancellation Reason", "Enter cancellation reason.");
- if (cancelDialog.open() != 0) {
- return;
- }
- SkynetTransaction transaction =
- new SkynetTransaction(AtsUtil.getAtsBranch(), "ATS Transition to Cancelled");
- Result result = sma.transitionToCancelled(cancelDialog.getEntry(), transaction, TransitionOption.Persist);
- transaction.execute();
- if (result.isFalse()) {
- result.popup();
- return;
- }
- sma.setInTransition(false);
- sma.getEditor().refreshPages();
- return;
- }
-
- // Validate assignees
- if (sma.getStateMgr().getAssignees().contains(UserManager.getUser(SystemUser.OseeSystem)) || sma.getStateMgr().getAssignees().contains(
- UserManager.getUser(SystemUser.Guest)) || sma.getStateMgr().getAssignees().contains(
- UserManager.getUser(SystemUser.UnAssigned))) {
- AWorkbench.popup("Transition Blocked",
- "Can not transition with \"Guest\", \"UnAssigned\" or \"OseeSystem\" user as assignee.");
- return;
- }
-
- // Get transition to assignees
- Collection<User> toAssignees;
- if (toWorkPageDefinition.isCancelledPage() || toWorkPageDefinition.isCompletePage()) {
- toAssignees = new HashSet<User>();
- } else {
- toAssignees = sma.getTransitionAssignees();
- }
-
- // If this is a return transition, don't require page/tasks to be complete
- if (!sma.isReturnPage(toWorkPageDefinition)) {
-
- // Validate XWidgets for transition
- Result result = atsWorkPage.isPageComplete();
- if (result.isFalse()) {
- result.popup();
- return;
- }
-
- // Loop through this state's tasks to confirm complete
- if (sma.isTaskable()) {
- if (sma instanceof TaskableStateMachineArtifact) {
- for (TaskArtifact taskArt : ((TaskableStateMachineArtifact) sma).getTaskArtifactsFromCurrentState()) {
- if (taskArt.isInWork()) {
- AWorkbench.popup(
- "Transition Blocked",
- "Task Not Complete\n\nTitle: " + taskArt.getName() + "\n\nHRID: " + taskArt.getHumanReadableId());
- return;
- }
- }
- }
- }
-
- // Don't transition without targeted version if so configured
- if (sma.teamDefHasWorkRule(AtsWorkDefinitions.RuleWorkItemId.atsRequireTargetedVersion.name()) || sma.getWorkPageDefinition().hasWorkRule(
- AtsWorkDefinitions.RuleWorkItemId.atsRequireTargetedVersion.name())) {
- if (sma.getWorldViewTargetedVersion() == null && !toWorkPageDefinition.isCancelledPage()) {
- AWorkbench.popup("Transition Blocked",
- "Actions must be targeted for a Version.\nPlease set \"Target Version\" before transition.");
- return;
- }
- }
-
- // Loop through this state's blocking reviews to confirm complete
- if (sma.isTeamWorkflow()) {
- for (ReviewSMArtifact reviewArt : ReviewManager.getReviewsFromCurrentState((TeamWorkFlowArtifact) sma)) {
- if (reviewArt.getReviewBlockType() == ReviewBlockType.Transition && !reviewArt.isCancelledOrCompleted()) {
- AWorkbench.popup("Transition Blocked", "All Blocking Reviews must be completed before transition.");
- return;
- }
- }
- }
-
- // Check extension points for valid transition
- for (IAtsStateItem item : sma.getStateItems().getStateItems(atsWorkPage.getId())) {
- try {
- result =
- item.transitioning(sma, sma.getStateMgr().getCurrentStateName(),
- toWorkPageDefinition.getPageName(), toAssignees);
- if (result.isFalse()) {
- result.popup();
- return;
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- // Ask for metrics for this page (store in state versus task?)
- if (!handlePopulateStateMetrics()) {
- return;
- }
- }
-
- // Persist must be done prior and separate from transition
- sma.persist();
-
- // Perform transition separate from persist of previous changes to state machine artifact
- SkynetTransaction transaction = new SkynetTransaction(AtsUtil.getAtsBranch(), "ATS Transition");
- Result result =
- sma.transition(toWorkPageDefinition.getPageName(), toAssignees, transaction, TransitionOption.Persist);
- transaction.execute();
- if (result.isFalse()) {
- result.popup();
- return;
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- } finally {
- sma.setInTransition(false);
- }
- }
-
- public boolean isCurrentState() {
- return isCurrentState;
- }
-
- public boolean handlePopulateStateMetrics() throws OseeCoreException {
-
- // Page has the ability to override the autofill of the metrics
- if (!atsWorkPage.isRequireStateHoursSpentPrompt() && sma.getStateMgr().getHoursSpent() == 0) {
- // First, try to autofill if it's only been < 5 min since creation
- double minSinceCreation = getCreationToNowDateDeltaMinutes();
- // System.out.println("minSinceCreation *" + minSinceCreation + "*");
- double hoursSinceCreation = minSinceCreation / 60.0;
- if (hoursSinceCreation < 0.02) {
- hoursSinceCreation = 0.02;
- }
- // System.out.println("hoursSinceCreation *" + hoursSinceCreation + "*");
- if (minSinceCreation < 5) {
- sma.getStateMgr().updateMetrics(hoursSinceCreation, 100, true);
- return true;
- }
- }
-
- // Otherwise, open dialog to ask for hours complete
- String msg =
- sma.getStateMgr().getCurrentStateName() + " State\n\n" + AtsUtil.doubleToI18nString(sma.getStateMgr().getHoursSpent()) + " hours already spent on this state.\n" + "Enter the additional number of hours you spent on this state.";
- SMAStatusDialog tsd =
- new SMAStatusDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Enter Hours Spent", msg,
- false, Arrays.asList(sma));
- int result = tsd.open();
- if (result == 0) {
- sma.getStateMgr().updateMetrics(tsd.getHours().getFloat(), 100, true);
- return true;
- }
- return false;
- }
-
- public int getCreationToNowDateDeltaMinutes() throws OseeCoreException {
- Date createDate = sma.getLog().getStateEvent(LogType.StateEntered, atsWorkPage.getName()).getDate();
- long createDateLong = createDate.getTime();
- Date date = new Date();
- float diff = date.getTime() - createDateLong;
- // System.out.println("diff *" + diff + "*");
- Float min = diff / 60000;
- // System.out.println("min *" + min + "*");
- return min.intValue();
- }
-
- public XComboViewer getTransitionToStateCombo() {
- return transitionToStateCombo;
- }
-
- public StateMachineArtifact getSma() {
- return sma;
- }
-
- public AtsWorkPage getPage() {
- return atsWorkPage;
- }
-
- public Composite getMainComp() {
- return mainComp;
- }
-
- public List<XWidget> getXWidgets(Class<?> clazz) {
- List<XWidget> widgets = new ArrayList<XWidget>();
- for (XWidget widget : allXWidgets) {
- if (clazz.isInstance(widget)) {
- widgets.add(widget);
- }
- }
- return widgets;
- }
-
- public static boolean isEditable(StateMachineArtifact sma, AtsWorkPage page) throws OseeCoreException {
- // must be writeable
- return !sma.isReadOnly() &&
- // and access control writeable
- sma.isAccessControlWrite() &&
- // and current state
- (page == null || sma.isCurrentState(page.getName())) &&
- // and one of these
- //
- // page is define to allow anyone to edit
- (sma.getWorkPageDefinition().hasWorkRule(AtsWorkDefinitions.RuleWorkItemId.atsAllowEditToAll.name()) ||
- // team definition has allowed anyone to edit
- sma.teamDefHasWorkRule(AtsWorkDefinitions.RuleWorkItemId.atsAllowEditToAll.name()) ||
- // priviledged edit mode is on
- sma.getEditor().isPriviledgedEditModeEnabled() ||
- // current user is assigned
- sma.isAssigneeMe() ||
- // current user is ats admin
- AtsUtil.isAtsAdmin());
- }
-}
+/******************************************************************************* + * 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.editor; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.logging.Level; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.osee.ats.artifact.ATSLog.LogType; +import org.eclipse.osee.ats.artifact.LogItem; +import org.eclipse.osee.ats.artifact.ReviewSMArtifact; +import org.eclipse.osee.ats.artifact.ReviewSMArtifact.ReviewBlockType; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.artifact.StateMachineArtifact.TransitionOption; +import org.eclipse.osee.ats.artifact.TaskArtifact; +import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact.DefaultTeamState; +import org.eclipse.osee.ats.editor.stateItem.IAtsStateItem; +import org.eclipse.osee.ats.editor.widget.ReviewInfoXWidget; +import org.eclipse.osee.ats.editor.widget.StateHoursSpentXWidget; +import org.eclipse.osee.ats.editor.widget.StatePercentCompleteXWidget; +import org.eclipse.osee.ats.editor.widget.TaskInfoXWidget; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.ats.util.XCancellationReasonTextWidget; +import org.eclipse.osee.ats.util.widgets.ReviewManager; +import org.eclipse.osee.ats.util.widgets.dialog.SMAStatusDialog; +import org.eclipse.osee.ats.workflow.AtsWorkPage; +import org.eclipse.osee.ats.workflow.item.AtsWorkDefinitions; +import org.eclipse.osee.framework.core.data.SystemUser; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeStateException; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.UserManager; +import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction; +import org.eclipse.osee.framework.ui.plugin.util.AWorkbench; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.skynet.XFormToolkit; +import org.eclipse.osee.framework.ui.skynet.widgets.IArtifactStoredWidget; +import org.eclipse.osee.framework.ui.skynet.widgets.XComboViewer; +import org.eclipse.osee.framework.ui.skynet.widgets.XDate; +import org.eclipse.osee.framework.ui.skynet.widgets.XLabelValue; +import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener; +import org.eclipse.osee.framework.ui.skynet.widgets.XWidget; +import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog; +import org.eclipse.osee.framework.ui.skynet.widgets.dialog.UserCheckTreeDialog; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinition; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinitionLabelProvider; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinitionViewSorter; +import org.eclipse.osee.framework.ui.swt.ALayout; +import org.eclipse.osee.framework.ui.swt.Displays; +import org.eclipse.osee.framework.ui.swt.FontManager; +import org.eclipse.osee.framework.ui.swt.Widgets; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.forms.IManagedForm; +import org.eclipse.ui.forms.SectionPart; +import org.eclipse.ui.forms.events.HyperlinkEvent; +import org.eclipse.ui.forms.events.IHyperlinkListener; +import org.eclipse.ui.forms.widgets.ExpandableComposite; +import org.eclipse.ui.forms.widgets.Hyperlink; +import org.eclipse.ui.forms.widgets.Section; + +/** + * @author Donald G. Dunne + */ +public class SMAWorkFlowSection extends SectionPart { + + private XComboViewer transitionToStateCombo; + private Button transitionButton; + private Label transitionAssigneesLabel; + protected final StateMachineArtifact sma; + private final AtsWorkPage atsWorkPage; + private final boolean isEditable, isCurrentState, isGlobalEditable; + private final XFormToolkit toolkit; + private Composite mainComp; + private final List<XWidget> allXWidgets = new ArrayList<XWidget>(); + private boolean sectionCreated = false; + private Section section; + + public SMAWorkFlowSection(Composite parent, XFormToolkit toolkit, int style, AtsWorkPage page, StateMachineArtifact sma) throws OseeCoreException { + super(parent, toolkit, style | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR); + this.toolkit = toolkit; + this.atsWorkPage = page; + this.sma = sma; + + isEditable = isEditable(sma, page); + isGlobalEditable = + !sma.isReadOnly() && sma.isAccessControlWrite() && sma.getEditor().isPriviledgedEditModeEnabled(); + isCurrentState = sma.isCurrentState(page.getName()); + // parent.setBackground(Displays.getSystemColor(SWT.COLOR_CYAN)); + } + + @Override + public void initialize(final IManagedForm form) { + super.initialize(form); + + section = getSection(); + try { + section.setText(getCurrentStateTitle()); + if (sma.isCurrentState(atsWorkPage.getName())) { + section.setTitleBarForeground(Displays.getSystemColor(SWT.COLOR_DARK_GREEN)); + section.setBackground(AtsUtil.ACTIVE_COLOR); + } + section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + // section.setBackground(Displays.getSystemColor(SWT.COLOR_MAGENTA)); + + boolean isCurrentSectionExpanded = sma.isCurrentSectionExpanded(atsWorkPage.getName()); + + if (isCurrentSectionExpanded) { + createSection(section); + } + // Only load when users selects section + section.addListener(SWT.Activate, new Listener() { + + @Override + public void handleEvent(Event e) { + try { + createSection(section); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + }); + + section.layout(); + section.setExpanded(isCurrentSectionExpanded); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + + private synchronized void createSection(Section section) throws OseeCoreException { + if (sectionCreated) { + return; + } + + mainComp = toolkit.createClientContainer(section, 2); + mainComp.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING)); + mainComp.setLayout(ALayout.getZeroMarginLayout(1, false)); + // mainComp.setBackground(Displays.getSystemColor(SWT.COLOR_DARK_YELLOW)); + mainComp.layout(); + + SMAWorkFlowTab.createStateNotesHeader(mainComp, toolkit, sma, 2, atsWorkPage.getName()); + + Composite workComp = createWorkArea(mainComp, atsWorkPage, toolkit); + + if (isCurrentState) { + createCurrentPageTransitionLine(mainComp, atsWorkPage, toolkit); + } + + GridData gridData = new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING); + gridData.widthHint = 400; + workComp.setLayoutData(gridData); + sectionCreated = true; + } + + protected Composite createWorkArea(Composite comp, AtsWorkPage atsWorkPage, XFormToolkit toolkit) throws OseeCoreException { + + atsWorkPage.generateLayoutDatas(sma); + + // Create Page + Composite workComp = toolkit.createContainer(comp, 1); + workComp.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING)); + // workComp.setBackground(Displays.getSystemColor(SWT.COLOR_GREEN)); + + createMetricsHeader(workComp); + + // Add any dynamic XWidgets declared for page by IAtsStateItem extensions + for (IAtsStateItem item : sma.getStateItems().getStateItems(atsWorkPage.getId())) { + for (XWidget xWidget : item.getDynamicXWidgetsPreBody(sma)) { + xWidget.createWidgets(workComp, 2); + allXWidgets.add(xWidget); + } + } + + if (atsWorkPage.isCompleteCancelledState()) { + Composite completeComp = new Composite(workComp, SWT.None); + GridLayout layout = new GridLayout(1, false); + completeComp.setLayout(layout); + completeComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + if (atsWorkPage.isCancelledPage()) { + createCancelledPageWidgets(completeComp); + } else if (atsWorkPage.isCompletePage()) { + createCompletedPageWidgets(completeComp); + } + } + + // Create dynamic XWidgets + DynamicXWidgetLayout dynamicXWidgetLayout = + atsWorkPage.createBody(getManagedForm(), workComp, sma, xModListener, isEditable || isGlobalEditable); + allXWidgets.addAll(dynamicXWidgetLayout.getXWidgets()); + + // Add any dynamic XWidgets declared for page by IAtsStateItem extensions + for (IAtsStateItem item : sma.getStateItems().getStateItems(atsWorkPage.getId())) { + for (XWidget xWidget : item.getDynamicXWidgetsPostBody(sma)) { + xWidget.createWidgets(workComp, 2); + allXWidgets.add(xWidget); + } + } + + createTaskFooter(workComp, atsWorkPage.getName()); + createReviewFooter(workComp, atsWorkPage.getName()); + + // Set all XWidget labels to bold font + for (XWidget xWidget : allXWidgets) { + if (xWidget.getLabelWidget() != null) { + SMAEditor.setLabelFonts(xWidget.getLabelWidget(), FontManager.getDefaultLabelFont()); + } + } + + // Check extension points for page creation + for (IAtsStateItem item : sma.getStateItems().getStateItems(atsWorkPage.getId())) { + Result result = item.pageCreated(toolkit, atsWorkPage, sma, xModListener, isEditable || isGlobalEditable); + if (result.isFalse()) { + result.popup(); + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Error in page creation => " + result.getText()); + } + } + + return workComp; + } + + private void createCancelledPageWidgets(Composite parent) throws OseeCoreException { + XWidget xWidget = null; + xWidget = new XLabelValue("Cancelled from State", sma.getLog().getCancelledFromState()); + xWidget.createWidgets(parent, 1); + allXWidgets.add(xWidget); + + if (sma.getEditor().isPriviledgedEditModeEnabled()) { + xWidget = new XCancellationReasonTextWidget(sma); + xWidget.addXModifiedListener(xModListener); + } else { + xWidget = new XLabelValue("Cancellation Reason", sma.getLog().getCancellationReason()); + } + xWidget.createWidgets(parent, 1); + allXWidgets.add(xWidget); + } + + private void createCompletedPageWidgets(Composite parent) throws OseeCoreException { + XWidget xWidget = null; + xWidget = new XLabelValue("Completed from State", sma.getLog().getCompletedFromState()); + xWidget.createWidgets(parent, 1); + allXWidgets.add(xWidget); + } + + private void createMetricsHeader(Composite parent) { + if (!atsWorkPage.isCompleteCancelledState()) { + Composite comp = new Composite(parent, SWT.None); + GridLayout layout = ALayout.getZeroMarginLayout(4, false); + layout.marginLeft = 2; + comp.setLayout(layout); + comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + allXWidgets.add(new StatePercentCompleteXWidget(getManagedForm(), atsWorkPage, sma, comp, 2, xModListener, + isCurrentState)); + allXWidgets.add(new StateHoursSpentXWidget(getManagedForm(), atsWorkPage, sma, comp, 2, xModListener, + isCurrentState)); + } + } + + private void createReviewFooter(Composite parent, String forStateName) { + if (isShowReviewInfo() && sma.isTeamWorkflow()) { + Composite comp = new Composite(parent, SWT.None); + GridLayout layout = new GridLayout(1, false); + comp.setLayout(layout); + comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + allXWidgets.add(new ReviewInfoXWidget(getManagedForm(), toolkit, (TeamWorkFlowArtifact) sma, forStateName, + comp, 1)); + } + } + + private void createTaskFooter(Composite parent, String forStateName) throws OseeCoreException { + if (isShowTaskInfo()) { + Composite comp = new Composite(parent, SWT.None); + GridLayout layout = new GridLayout(6, false); + comp.setLayout(layout); + comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + allXWidgets.add(new TaskInfoXWidget(getManagedForm(), ((TaskableStateMachineArtifact) sma), forStateName, + comp, 2)); + } + } + + protected boolean isShowTaskInfo() throws OseeCoreException { + return sma.isTaskable(); + } + + protected boolean isShowReviewInfo() { + return sma.isTeamWorkflow(); + } + + public Result isXWidgetSavable() { + for (XWidget widget : allXWidgets) { + if (widget instanceof IArtifactStoredWidget) { + IStatus status = widget.isValid(); + if (!status.isOK()) { + return new Result(false, status.getMessage()); + } + } + } + return Result.TrueResult; + } + + @Override + public String toString() { + return atsWorkPage + " for " + getSma(); + } + + public Result isXWidgetDirty() throws OseeCoreException { + for (XWidget widget : allXWidgets) { + if (widget instanceof IArtifactStoredWidget) { + IArtifactStoredWidget artifactStoredWidget = (IArtifactStoredWidget) widget; + Result result = artifactStoredWidget.isDirty(); + if (result.isTrue()) { + return result; + } + } + } + return Result.FalseResult; + } + + public void getDirtyIArtifactWidgets(List<IArtifactStoredWidget> widgets) throws OseeCoreException { + for (XWidget widget : allXWidgets) { + if (widget instanceof IArtifactStoredWidget) { + IArtifactStoredWidget artifactStoredWidget = (IArtifactStoredWidget) widget; + if (artifactStoredWidget.isDirty().isTrue()) { + widgets.add(artifactStoredWidget); + } + } + } + } + + private String getCurrentStateTitle() throws OseeCoreException { + StringBuffer sb = new StringBuffer(atsWorkPage.getName()); + if (isEditable && !sma.isCompleted() && !sma.isCancelled()) { + sb.append(" - Current State"); + } + if (sma.isCancelled()) { + LogItem item = sma.getLog().getStateEvent(LogType.StateCancelled); + if (item == null) { + throw new OseeStateException("ats.Log: Cancelled state has no logItem for " + sma.getHumanReadableId()); + } + if (item.getState().equals(atsWorkPage.getName())) { + sb.append(" - Cancelled"); + if (!item.getMsg().equals("")) { + sb.append(" - Reason: " + item.getMsg()); + } + } + } + if (isCurrentState) { + if (sma.isCompleted()) { + sb.append(" - "); + sb.append(sma.getWorldViewCompletedDateStr()); + LogItem item = sma.getLog().getStateEvent(LogType.StateEntered, atsWorkPage.getName()); + sb.append(" by " + item.getUser().getName()); + } else if (sma.isCancelled()) { + sb.append(" - "); + sb.append(sma.getWorldViewCancelledDateStr()); + LogItem item = sma.getLog().getStateEvent(LogType.StateEntered, atsWorkPage.getName()); + sb.append(" by " + item.getUser().getName()); + } + if (sma.getStateMgr().getAssignees().size() > 0) { + sb.append(" assigned to "); + sb.append(sma.getStateMgr().getAssigneesStr(80)); + } + } else { + LogItem item = sma.getLog().getStateEvent(LogType.StateComplete, atsWorkPage.getName()); + if (item != null) { + sb.append(" - State Completed " + item.getDate(XDate.MMDDYYHHMM)); + sb.append(" by " + item.getUser().getName()); + } + } + return sb.toString(); + } + + @Override + public void dispose() { + super.dispose(); + for (XWidget xWidget : allXWidgets) { + xWidget.dispose(); + } + atsWorkPage.dispose(); + } + + final SMAWorkFlowSection fSection = this; + final XModifiedListener xModListener = new XModifiedListener() { + @Override + public void widgetModified(XWidget xWidget) { + try { + if (sma.isDeleted()) { + return; + } + // Notify extensions of widget modified + for (IAtsStateItem item : sma.getStateItems().getStateItems(atsWorkPage.getId())) { + try { + item.widgetModified(fSection, xWidget); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + updateTransitionToState(); + updateTransitionToAssignees(); + sma.getEditor().onDirtied(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + }; + + @Override + public void refresh() { + if (!Widgets.isAccessible(mainComp)) { + return; + } + super.refresh(); + try { + if (Widgets.isAccessible(transitionAssigneesLabel)) { + WorkPageDefinition toWorkPage = (WorkPageDefinition) transitionToStateCombo.getSelected(); + if (toWorkPage == null) { + transitionAssigneesLabel.setText(""); + } else { + transitionAssigneesLabel.setText(sma.getTransitionAssigneesStr()); + } + transitionAssigneesLabel.getParent().layout(); + } + sma.getEditor().onDirtied(); + for (XWidget xWidget : allXWidgets) { + xWidget.refresh(); + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + private void handleChangeTransitionAssignees() throws OseeCoreException { + WorkPageDefinition toWorkPage = (WorkPageDefinition) transitionToStateCombo.getSelected(); + if (toWorkPage == null) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "No Transition State Selected"); + return; + } + if (toWorkPage.isCancelledPage() || toWorkPage.isCompletePage()) { + AWorkbench.popup("ERROR", "No Assignees in Completed and Cancelled states"); + return; + } + UserCheckTreeDialog uld = new UserCheckTreeDialog(); + uld.setMessage("Select users to transition to."); + uld.setInitialSelections(sma.getTransitionAssignees()); + if (sma.getParentTeamWorkflow() != null) { + uld.setTeamMembers(sma.getParentTeamWorkflow().getTeamDefinition().getMembersAndLeads()); + } + if (uld.open() != 0) { + return; + } + Collection<User> users = uld.getUsersSelected(); + if (users.isEmpty()) { + AWorkbench.popup("ERROR", "Must have at least one assignee"); + return; + } + sma.setTransitionAssignees(users); + refresh(); + sma.getEditor().onDirtied(); + } + + private void createCurrentPageTransitionLine(Composite parent, AtsWorkPage atsWorkPage, XFormToolkit toolkit) throws OseeCoreException { + Composite comp = toolkit.createComposite(parent, SWT.NONE); + comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + comp.setLayout(new GridLayout(5, false)); + comp.setBackground(AtsUtil.ACTIVE_COLOR); + + transitionButton = toolkit.createButton(comp, "Transition", SWT.PUSH); + transitionButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + handleTransition(); + } + }); + transitionButton.setBackground(AtsUtil.ACTIVE_COLOR); + + Label label = toolkit.createLabel(comp, "to"); + label.setBackground(AtsUtil.ACTIVE_COLOR); + + transitionToStateCombo = new XComboViewer("Transition To State Combo"); + transitionToStateCombo.setDisplayLabel(false); + ArrayList<Object> allPages = new ArrayList<Object>(); + for (WorkPageDefinition nextPage : sma.getToWorkPages()) { + allPages.add(nextPage); + } + transitionToStateCombo.setInput(allPages); + transitionToStateCombo.setLabelProvider(new WorkPageDefinitionLabelProvider()); + transitionToStateCombo.setContentProvider(new ArrayContentProvider()); + transitionToStateCombo.setSorter(new WorkPageDefinitionViewSorter()); + + transitionToStateCombo.createWidgets(comp, 1); + + // Set default page from workflow default + ArrayList<Object> defaultPage = new ArrayList<Object>(); + if (atsWorkPage.getDefaultToPage() != null) { + defaultPage.add(atsWorkPage.getDefaultToPage()); + transitionToStateCombo.setSelected(defaultPage); + } + if (atsWorkPage.isCancelledPage()) { + LogItem item = sma.getLog().getStateEvent(LogType.StateCancelled); + if (item != null) { + defaultPage.add(sma.getWorkPageDefinitionByName(item.getState())); + transitionToStateCombo.setSelected(defaultPage); + } + } + // Update transition based on state items + updateTransitionToState(); + + transitionToStateCombo.getCombo().setVisibleItemCount(20); + transitionToStateCombo.addSelectionChangedListener(new ISelectionChangedListener() { + @Override + public void selectionChanged(SelectionChangedEvent event) { + try { + updateTransitionToAssignees(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + }); + + Hyperlink assigneesLabelLink = toolkit.createHyperlink(comp, "Next State Assignee(s)", SWT.NONE); + assigneesLabelLink.addHyperlinkListener(new IHyperlinkListener() { + + @Override + public void linkEntered(HyperlinkEvent e) { + // do nothing + } + + @Override + public void linkExited(HyperlinkEvent e) { + // do nothing + } + + @Override + public void linkActivated(HyperlinkEvent e) { + try { + handleChangeTransitionAssignees(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + + }); + assigneesLabelLink.setBackground(AtsUtil.ACTIVE_COLOR); + + transitionAssigneesLabel = + toolkit.createLabel(comp, Strings.truncate(sma.getTransitionAssigneesStr(), 100, true)); + transitionAssigneesLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + transitionAssigneesLabel.setBackground(AtsUtil.ACTIVE_COLOR); + + } + + public void updateTransitionToAssignees() throws OseeCoreException { + Collection<User> assignees = null; + // Determine if the is an override set of assigness + for (IAtsStateItem item : sma.getStateItems().getStateItems(atsWorkPage.getId())) { + assignees = item.getOverrideTransitionToAssignees(this); + if (assignees != null) { + break; + } + } + // If override set and isn't the same as already selected, update + if (assignees != null && !sma.getTransitionAssignees().equals(assignees)) { + sma.setTransitionAssignees(assignees); + sma.getEditor().onDirtied(); + } + refresh(); + } + + public void updateTransitionToState() throws OseeCoreException { + // Determine if there is a transitionToStateOverride for this page + String transitionStateOverride = null; + for (IAtsStateItem item : sma.getStateItems().getStateItems(atsWorkPage.getId())) { + transitionStateOverride = item.getOverrideTransitionToStateName(this); + if (transitionStateOverride != null) { + break; + } + } + if (transitionStateOverride != null) { + // Return if override state is same as selected + if (((WorkPageDefinition) transitionToStateCombo.getSelected()).getName().equals(transitionStateOverride)) { + return; + } + // Find page corresponding to override state name + for (WorkPageDefinition toWorkPageDefinition : sma.getToWorkPages()) { + if (toWorkPageDefinition.getPageName().equals(transitionStateOverride)) { + // Reset selection + ArrayList<Object> defaultPage = new ArrayList<Object>(); + defaultPage.add(toWorkPageDefinition); + transitionToStateCombo.setSelected(defaultPage); + return; + } + } + } + } + + public void setTransitionToStateSelection(String stateName) throws OseeCoreException { + ArrayList<Object> allPages = new ArrayList<Object>(); + for (WorkPageDefinition nextPage : sma.getToWorkPages()) { + if (nextPage.getPageName().equals(stateName)) { + allPages.add(nextPage); + } + } + transitionToStateCombo.setSelected(allPages); + } + + private void handleTransition() { + + try { + + if (!isEditable && !sma.getStateMgr().getAssignees().contains(UserManager.getUser(SystemUser.UnAssigned))) { + AWorkbench.popup( + "ERROR", + "You must be assigned to transition this workflow.\nContact Assignee or Select Priviledged Edit for Authorized Overriders."); + return; + } + // As a convenience, if assignee is UnAssigned and user selects to transition, make user current assignee + if (sma.getStateMgr().getAssignees().contains(UserManager.getUser(SystemUser.UnAssigned))) { + sma.getStateMgr().removeAssignee(UserManager.getUser(SystemUser.UnAssigned)); + sma.getStateMgr().addAssignee(UserManager.getUser()); + } + if (sma.isTeamWorkflow() && ((TeamWorkFlowArtifact) sma).getBranchMgr().isWorkingBranchInWork()) { + + if (((WorkPageDefinition) transitionToStateCombo.getSelected()).getPageName().equals( + DefaultTeamState.Cancelled.name())) { + AWorkbench.popup("Transition Blocked", + "Working Branch exists.\n\nPlease delete working branch before transition to cancel."); + return; + } + if (((TeamWorkFlowArtifact) sma).getBranchMgr().isBranchInCommit()) { + AWorkbench.popup("Transition Blocked", + "Working Branch is being Committed.\n\nPlease wait till commit completes to transition."); + return; + } + if (!atsWorkPage.isAllowTransitionWithWorkingBranch()) { + AWorkbench.popup("Transition Blocked", + "Working Branch exists.\n\nPlease commit or delete working branch before transition."); + return; + } + + } + + sma.setInTransition(true); + sma.getEditor().doSave(null); + + // Get transition to state + WorkPageDefinition toWorkPageDefinition = (WorkPageDefinition) transitionToStateCombo.getSelected(); + + if (toWorkPageDefinition == null) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "No Transition State Selected"); + return; + } + if (toWorkPageDefinition.getPageName().equals(DefaultTeamState.Cancelled.name())) { + EntryDialog cancelDialog = new EntryDialog("Cancellation Reason", "Enter cancellation reason."); + if (cancelDialog.open() != 0) { + return; + } + SkynetTransaction transaction = + new SkynetTransaction(AtsUtil.getAtsBranch(), "ATS Transition to Cancelled"); + Result result = sma.transitionToCancelled(cancelDialog.getEntry(), transaction, TransitionOption.Persist); + transaction.execute(); + if (result.isFalse()) { + result.popup(); + return; + } + sma.setInTransition(false); + sma.getEditor().refreshPages(); + return; + } + + // Validate assignees + if (sma.getStateMgr().getAssignees().contains(UserManager.getUser(SystemUser.OseeSystem)) || sma.getStateMgr().getAssignees().contains( + UserManager.getUser(SystemUser.Guest)) || sma.getStateMgr().getAssignees().contains( + UserManager.getUser(SystemUser.UnAssigned))) { + AWorkbench.popup("Transition Blocked", + "Can not transition with \"Guest\", \"UnAssigned\" or \"OseeSystem\" user as assignee."); + return; + } + + // Get transition to assignees + Collection<User> toAssignees; + if (toWorkPageDefinition.isCancelledPage() || toWorkPageDefinition.isCompletePage()) { + toAssignees = new HashSet<User>(); + } else { + toAssignees = sma.getTransitionAssignees(); + } + + // If this is a return transition, don't require page/tasks to be complete + if (!sma.isReturnPage(toWorkPageDefinition)) { + + // Validate XWidgets for transition + Result result = atsWorkPage.isPageComplete(); + if (result.isFalse()) { + result.popup(); + return; + } + + // Loop through this state's tasks to confirm complete + if (sma.isTaskable()) { + if (sma instanceof TaskableStateMachineArtifact) { + for (TaskArtifact taskArt : ((TaskableStateMachineArtifact) sma).getTaskArtifactsFromCurrentState()) { + if (taskArt.isInWork()) { + AWorkbench.popup( + "Transition Blocked", + "Task Not Complete\n\nTitle: " + taskArt.getName() + "\n\nHRID: " + taskArt.getHumanReadableId()); + return; + } + } + } + } + + // Don't transition without targeted version if so configured + if (sma.teamDefHasWorkRule(AtsWorkDefinitions.RuleWorkItemId.atsRequireTargetedVersion.name()) || sma.getWorkPageDefinition().hasWorkRule( + AtsWorkDefinitions.RuleWorkItemId.atsRequireTargetedVersion.name())) { + if (sma.getWorldViewTargetedVersion() == null && !toWorkPageDefinition.isCancelledPage()) { + AWorkbench.popup("Transition Blocked", + "Actions must be targeted for a Version.\nPlease set \"Target Version\" before transition."); + return; + } + } + + // Loop through this state's blocking reviews to confirm complete + if (sma.isTeamWorkflow()) { + for (ReviewSMArtifact reviewArt : ReviewManager.getReviewsFromCurrentState((TeamWorkFlowArtifact) sma)) { + if (reviewArt.getReviewBlockType() == ReviewBlockType.Transition && !reviewArt.isCancelledOrCompleted()) { + AWorkbench.popup("Transition Blocked", "All Blocking Reviews must be completed before transition."); + return; + } + } + } + + // Check extension points for valid transition + for (IAtsStateItem item : sma.getStateItems().getStateItems(atsWorkPage.getId())) { + try { + result = + item.transitioning(sma, sma.getStateMgr().getCurrentStateName(), + toWorkPageDefinition.getPageName(), toAssignees); + if (result.isFalse()) { + result.popup(); + return; + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + // Ask for metrics for this page (store in state versus task?) + if (!handlePopulateStateMetrics()) { + return; + } + } + + // Persist must be done prior and separate from transition + sma.persist(); + + // Perform transition separate from persist of previous changes to state machine artifact + SkynetTransaction transaction = new SkynetTransaction(AtsUtil.getAtsBranch(), "ATS Transition"); + Result result = + sma.transition(toWorkPageDefinition.getPageName(), toAssignees, transaction, TransitionOption.Persist); + transaction.execute(); + if (result.isFalse()) { + result.popup(); + return; + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } finally { + sma.setInTransition(false); + } + } + + public boolean isCurrentState() { + return isCurrentState; + } + + public boolean handlePopulateStateMetrics() throws OseeCoreException { + + // Page has the ability to override the autofill of the metrics + if (!atsWorkPage.isRequireStateHoursSpentPrompt() && sma.getStateMgr().getHoursSpent() == 0) { + // First, try to autofill if it's only been < 5 min since creation + double minSinceCreation = getCreationToNowDateDeltaMinutes(); + // System.out.println("minSinceCreation *" + minSinceCreation + "*"); + double hoursSinceCreation = minSinceCreation / 60.0; + if (hoursSinceCreation < 0.02) { + hoursSinceCreation = 0.02; + } + // System.out.println("hoursSinceCreation *" + hoursSinceCreation + "*"); + if (minSinceCreation < 5) { + sma.getStateMgr().updateMetrics(hoursSinceCreation, 100, true); + return true; + } + } + + // Otherwise, open dialog to ask for hours complete + String msg = + sma.getStateMgr().getCurrentStateName() + " State\n\n" + AtsUtil.doubleToI18nString(sma.getStateMgr().getHoursSpent()) + " hours already spent on this state.\n" + "Enter the additional number of hours you spent on this state."; + SMAStatusDialog tsd = + new SMAStatusDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Enter Hours Spent", msg, + false, Arrays.asList(sma)); + int result = tsd.open(); + if (result == 0) { + sma.getStateMgr().updateMetrics(tsd.getHours().getFloat(), 100, true); + return true; + } + return false; + } + + public int getCreationToNowDateDeltaMinutes() throws OseeCoreException { + Date createDate = sma.getLog().getStateEvent(LogType.StateEntered, atsWorkPage.getName()).getDate(); + long createDateLong = createDate.getTime(); + Date date = new Date(); + float diff = date.getTime() - createDateLong; + // System.out.println("diff *" + diff + "*"); + Float min = diff / 60000; + // System.out.println("min *" + min + "*"); + return min.intValue(); + } + + public XComboViewer getTransitionToStateCombo() { + return transitionToStateCombo; + } + + public StateMachineArtifact getSma() { + return sma; + } + + public AtsWorkPage getPage() { + return atsWorkPage; + } + + public Composite getMainComp() { + return mainComp; + } + + public List<XWidget> getXWidgets(Class<?> clazz) { + List<XWidget> widgets = new ArrayList<XWidget>(); + for (XWidget widget : allXWidgets) { + if (clazz.isInstance(widget)) { + widgets.add(widget); + } + } + return widgets; + } + + public static boolean isEditable(StateMachineArtifact sma, AtsWorkPage page) throws OseeCoreException { + // must be writeable + return !sma.isReadOnly() && + // and access control writeable + sma.isAccessControlWrite() && + // and current state + (page == null || sma.isCurrentState(page.getName())) && + // and one of these + // + // page is define to allow anyone to edit + (sma.getWorkPageDefinition().hasWorkRule(AtsWorkDefinitions.RuleWorkItemId.atsAllowEditToAll.name()) || + // team definition has allowed anyone to edit + sma.teamDefHasWorkRule(AtsWorkDefinitions.RuleWorkItemId.atsAllowEditToAll.name()) || + // priviledged edit mode is on + sma.getEditor().isPriviledgedEditModeEnabled() || + // current user is assigned + sma.isAssigneeMe() || + // current user is ats admin + AtsUtil.isAtsAdmin()); + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAWorkFlowTab.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAWorkFlowTab.java index 7259d0c50d5..4559511a5ab 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAWorkFlowTab.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAWorkFlowTab.java @@ -1,673 +1,673 @@ -/*******************************************************************************
- * 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.editor;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.IJobChangeEvent;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.core.runtime.jobs.JobChangeAdapter;
-import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.osee.ats.actions.AddNoteAction;
-import org.eclipse.osee.ats.actions.CopyActionDetailsAction;
-import org.eclipse.osee.ats.actions.EmailActionAction;
-import org.eclipse.osee.ats.actions.FavoriteAction;
-import org.eclipse.osee.ats.actions.OpenInArtifactEditorAction;
-import org.eclipse.osee.ats.actions.OpenInAtsWorldAction;
-import org.eclipse.osee.ats.actions.OpenParentAction;
-import org.eclipse.osee.ats.actions.OpenTeamDefinitionAction;
-import org.eclipse.osee.ats.actions.OpenVersionArtifactAction;
-import org.eclipse.osee.ats.actions.PrivilegedEditAction;
-import org.eclipse.osee.ats.actions.ReloadAction;
-import org.eclipse.osee.ats.actions.ResourceHistoryAction;
-import org.eclipse.osee.ats.actions.ShowChangeReportAction;
-import org.eclipse.osee.ats.actions.ShowMergeManagerAction;
-import org.eclipse.osee.ats.artifact.AtsAttributeTypes;
-import org.eclipse.osee.ats.artifact.GoalArtifact;
-import org.eclipse.osee.ats.artifact.NoteItem;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.config.AtsBulkLoad;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.ats.workflow.AtsWorkPage;
-import org.eclipse.osee.ats.workflow.item.AtsWorkDefinitions;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.operation.Operations;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.plugin.core.IActionable;
-import org.eclipse.osee.framework.ui.plugin.OseeUiActions;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.skynet.ArtifactImageManager;
-import org.eclipse.osee.framework.ui.skynet.XFormToolkit;
-import org.eclipse.osee.framework.ui.skynet.artifact.annotation.AnnotationComposite;
-import org.eclipse.osee.framework.ui.skynet.artifact.editor.parts.MessageSummaryNote;
-import org.eclipse.osee.framework.ui.skynet.util.FormsUtil;
-import org.eclipse.osee.framework.ui.skynet.util.LoadingComposite;
-import org.eclipse.osee.framework.ui.skynet.util.OseeDictionary;
-import org.eclipse.osee.framework.ui.skynet.widgets.IArtifactStoredWidget;
-import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
-import org.eclipse.osee.framework.ui.swt.ALayout;
-import org.eclipse.osee.framework.ui.swt.Displays;
-import org.eclipse.osee.framework.ui.swt.ExceptionComposite;
-import org.eclipse.osee.framework.ui.swt.IDirtiableEditor;
-import org.eclipse.osee.framework.ui.swt.Widgets;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.forms.IManagedForm;
-import org.eclipse.ui.forms.IMessage;
-import org.eclipse.ui.forms.editor.FormPage;
-import org.eclipse.ui.forms.events.HyperlinkAdapter;
-import org.eclipse.ui.forms.events.HyperlinkEvent;
-import org.eclipse.ui.forms.widgets.ScrolledForm;
-import org.eclipse.ui.progress.UIJob;
-
-/**
- * @author Donald G. Dunne
- */
-public class SMAWorkFlowTab extends FormPage implements IActionable {
- private final StateMachineArtifact sma;
- private final ArrayList<SMAWorkFlowSection> sections = new ArrayList<SMAWorkFlowSection>();
- private final XFormToolkit toolkit;
- private final List<AtsWorkPage> atsWorkPages = new ArrayList<AtsWorkPage>();
- private ScrolledForm scrolledForm;
- private final Integer HEADER_COMP_COLUMNS = 4;
- private static Map<String, Integer> guidToScrollLocation = new HashMap<String, Integer>();
- private SMARelationsHyperlinkComposite smaRelationsComposite;
- private IManagedForm managedForm;
- private Composite bodyComp;
- private Composite atsBody;
- private SMAActionableItemHeader actionableItemHeader;
- private SMAWorkflowMetricsHeader workflowMetricsHeader;
- private SMADetailsSection smaDetailsSection;
- private SMARelationsSection smaRelationsSection;
- private SMAOperationsSection smaOperationsSection;
- private SMAGoalMembersSection smaGoalMembersSection;
- private SMAHistorySection smaHistorySection;
- private LoadingComposite loadingComposite;
- private static String PRIVILEGED_EDIT = "(Priviledged Edit Enabled)";
-
- public SMAWorkFlowTab(StateMachineArtifact sma) {
- super(sma.getEditor(), "overview", "Workflow");
- this.sma = sma;
- toolkit = sma.getEditor().getToolkit();
- }
-
- @Override
- protected void createFormContent(IManagedForm managedForm) {
- super.createFormContent(managedForm);
-
- this.managedForm = managedForm;
- try {
- scrolledForm = managedForm.getForm();
- scrolledForm.addDisposeListener(new DisposeListener() {
- @Override
- public void widgetDisposed(DisposeEvent e) {
- storeScrollLocation();
- }
- });
- updateTitleBar();
-
- bodyComp = managedForm.getForm().getBody();
- GridLayout gridLayout = new GridLayout(1, false);
- bodyComp.setLayout(gridLayout);
- GridData gd = new GridData(SWT.LEFT, SWT.LEFT, true, false);
- gd.widthHint = 300;
- bodyComp.setLayoutData(gd);
-
- setLoading(true);
- if (sma.getHelpContext() != null) {
- AtsPlugin.getInstance().setHelp(scrolledForm, sma.getHelpContext(), "org.eclipse.osee.ats.help.ui");
- }
-
- refreshData();
-
- } catch (Exception ex) {
- handleException(ex);
- }
- }
-
- private void updateTitleBar() throws OseeCoreException {
- String titleString = sma.getEditor().getTitleStr();
- String displayableTitle = Strings.escapeAmpersands(titleString);
- scrolledForm.setText(displayableTitle);
- scrolledForm.setImage(ArtifactImageManager.getImage(sma));
- }
-
- @Override
- public void showBusy(boolean busy) {
- super.showBusy(busy);
- if (Widgets.isAccessible(getManagedForm().getForm())) {
- getManagedForm().getForm().getForm().setBusy(busy);
- }
- }
-
- public void refreshData() {
+/******************************************************************************* + * 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.editor; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.IJobChangeEvent; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.core.runtime.jobs.JobChangeAdapter; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.osee.ats.actions.AddNoteAction; +import org.eclipse.osee.ats.actions.CopyActionDetailsAction; +import org.eclipse.osee.ats.actions.EmailActionAction; +import org.eclipse.osee.ats.actions.FavoriteAction; +import org.eclipse.osee.ats.actions.OpenInArtifactEditorAction; +import org.eclipse.osee.ats.actions.OpenInAtsWorldAction; +import org.eclipse.osee.ats.actions.OpenParentAction; +import org.eclipse.osee.ats.actions.OpenTeamDefinitionAction; +import org.eclipse.osee.ats.actions.OpenVersionArtifactAction; +import org.eclipse.osee.ats.actions.PrivilegedEditAction; +import org.eclipse.osee.ats.actions.ReloadAction; +import org.eclipse.osee.ats.actions.ResourceHistoryAction; +import org.eclipse.osee.ats.actions.ShowChangeReportAction; +import org.eclipse.osee.ats.actions.ShowMergeManagerAction; +import org.eclipse.osee.ats.artifact.AtsAttributeTypes; +import org.eclipse.osee.ats.artifact.GoalArtifact; +import org.eclipse.osee.ats.artifact.NoteItem; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.config.AtsBulkLoad; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.ats.workflow.AtsWorkPage; +import org.eclipse.osee.ats.workflow.item.AtsWorkDefinitions; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.operation.Operations; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.plugin.core.IActionable; +import org.eclipse.osee.framework.ui.plugin.OseeUiActions; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.skynet.ArtifactImageManager; +import org.eclipse.osee.framework.ui.skynet.XFormToolkit; +import org.eclipse.osee.framework.ui.skynet.artifact.annotation.AnnotationComposite; +import org.eclipse.osee.framework.ui.skynet.artifact.editor.parts.MessageSummaryNote; +import org.eclipse.osee.framework.ui.skynet.util.FormsUtil; +import org.eclipse.osee.framework.ui.skynet.util.LoadingComposite; +import org.eclipse.osee.framework.ui.skynet.util.OseeDictionary; +import org.eclipse.osee.framework.ui.skynet.widgets.IArtifactStoredWidget; +import org.eclipse.osee.framework.ui.skynet.widgets.XDate; +import org.eclipse.osee.framework.ui.swt.ALayout; +import org.eclipse.osee.framework.ui.swt.Displays; +import org.eclipse.osee.framework.ui.swt.ExceptionComposite; +import org.eclipse.osee.framework.ui.swt.IDirtiableEditor; +import org.eclipse.osee.framework.ui.swt.Widgets; +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.ScrolledComposite; +import org.eclipse.swt.events.DisposeEvent; +import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; +import org.eclipse.ui.forms.IManagedForm; +import org.eclipse.ui.forms.IMessage; +import org.eclipse.ui.forms.editor.FormPage; +import org.eclipse.ui.forms.events.HyperlinkAdapter; +import org.eclipse.ui.forms.events.HyperlinkEvent; +import org.eclipse.ui.forms.widgets.ScrolledForm; +import org.eclipse.ui.progress.UIJob; + +/** + * @author Donald G. Dunne + */ +public class SMAWorkFlowTab extends FormPage implements IActionable { + private final StateMachineArtifact sma; + private final ArrayList<SMAWorkFlowSection> sections = new ArrayList<SMAWorkFlowSection>(); + private final XFormToolkit toolkit; + private final List<AtsWorkPage> atsWorkPages = new ArrayList<AtsWorkPage>(); + private ScrolledForm scrolledForm; + private final Integer HEADER_COMP_COLUMNS = 4; + private static Map<String, Integer> guidToScrollLocation = new HashMap<String, Integer>(); + private SMARelationsHyperlinkComposite smaRelationsComposite; + private IManagedForm managedForm; + private Composite bodyComp; + private Composite atsBody; + private SMAActionableItemHeader actionableItemHeader; + private SMAWorkflowMetricsHeader workflowMetricsHeader; + private SMADetailsSection smaDetailsSection; + private SMARelationsSection smaRelationsSection; + private SMAOperationsSection smaOperationsSection; + private SMAGoalMembersSection smaGoalMembersSection; + private SMAHistorySection smaHistorySection; + private LoadingComposite loadingComposite; + private static String PRIVILEGED_EDIT = "(Priviledged Edit Enabled)"; + + public SMAWorkFlowTab(StateMachineArtifact sma) { + super(sma.getEditor(), "overview", "Workflow"); + this.sma = sma; + toolkit = sma.getEditor().getToolkit(); + } + + @Override + protected void createFormContent(IManagedForm managedForm) { + super.createFormContent(managedForm); + + this.managedForm = managedForm; + try { + scrolledForm = managedForm.getForm(); + scrolledForm.addDisposeListener(new DisposeListener() { + @Override + public void widgetDisposed(DisposeEvent e) { + storeScrollLocation(); + } + }); + updateTitleBar(); + + bodyComp = managedForm.getForm().getBody(); + GridLayout gridLayout = new GridLayout(1, false); + bodyComp.setLayout(gridLayout); + GridData gd = new GridData(SWT.LEFT, SWT.LEFT, true, false); + gd.widthHint = 300; + bodyComp.setLayoutData(gd); + + setLoading(true); + if (sma.getHelpContext() != null) { + AtsPlugin.getInstance().setHelp(scrolledForm, sma.getHelpContext(), "org.eclipse.osee.ats.help.ui"); + } + + refreshData(); + + } catch (Exception ex) { + handleException(ex); + } + } + + private void updateTitleBar() throws OseeCoreException { + String titleString = sma.getEditor().getTitleStr(); + String displayableTitle = Strings.escapeAmpersands(titleString); + scrolledForm.setText(displayableTitle); + scrolledForm.setImage(ArtifactImageManager.getImage(sma)); + } + + @Override + public void showBusy(boolean busy) { + super.showBusy(busy); + if (Widgets.isAccessible(getManagedForm().getForm())) { + getManagedForm().getForm().getForm().setBusy(busy); + } + } + + public void refreshData() { Operations.executeAsJob(AtsBulkLoad.getConfigLoadingOperation(), true, Job.LONG, new ReloadJobChangeAdapter(sma.getEditor())); - // Don't put in operation cause doesn't have to be loaded before editor displays
- OseeDictionary.load();
- }
- private final class ReloadJobChangeAdapter extends JobChangeAdapter {
-
- private final IDirtiableEditor editor;
-
- private ReloadJobChangeAdapter(IDirtiableEditor editor) {
- this.editor = editor;
- showBusy(true);
- }
-
- @Override
- public void scheduled(IJobChangeEvent event) {
- super.scheduled(event);
- }
-
- @Override
- public void aboutToRun(IJobChangeEvent event) {
- super.aboutToRun(event);
- }
-
- @Override
- public void done(IJobChangeEvent event) {
- super.done(event);
- Job job = new UIJob("Draw Workflow Tab") {
-
- @Override
- public IStatus runInUIThread(IProgressMonitor monitor) {
- try {
- updateTitleBar();
- refreshToolbar();
- setLoading(false);
- createAtsBody();
- addMessageDecoration(scrolledForm);
- FormsUtil.addHeadingGradient(toolkit, scrolledForm, true);
- editor.onDirtied();
- } catch (OseeCoreException ex) {
- handleException(ex);
- } finally {
- showBusy(false);
- }
- return Status.OK_STATUS;
- }
- };
- Operations.scheduleJob(job, false, Job.SHORT, null);
- }
- }
-
- private void handleException(Exception ex) {
- setLoading(false);
- if (Widgets.isAccessible(atsBody)) {
- atsBody.dispose();
- }
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- new ExceptionComposite(bodyComp, ex);
- bodyComp.layout();
- }
-
- private void setLoading(boolean set) {
- if (set) {
- loadingComposite = new LoadingComposite(bodyComp);
- bodyComp.layout();
- } else {
- if (Widgets.isAccessible(loadingComposite)) {
- loadingComposite.dispose();
- }
- }
- showBusy(set);
- }
-
- private void createAtsBody() throws OseeCoreException {
- if (Widgets.isAccessible(atsBody)) {
- atsBody.dispose();
- }
- atsBody = toolkit.createComposite(bodyComp);
- atsBody.setLayoutData(new GridData(GridData.FILL_BOTH));
- atsBody.setLayout(new GridLayout(1, false));
-
- createHeaderSection(sma.getCurrentAtsWorkPage());
- createGoalSection();
- createPageSections();
- createHistorySection();
- createRelationsSection();
- createOperationsSection();
- createDetailsSection();
-
- atsBody.layout();
- atsBody.setFocus();
- // Jump to scroll location if set
- Integer selection = guidToScrollLocation.get(sma.getGuid());
- if (selection != null) {
- JumpScrollbarJob job = new JumpScrollbarJob("");
- job.schedule(500);
- }
-
- }
-
- private void createDetailsSection() {
- try {
- smaDetailsSection = new SMADetailsSection(sma.getEditor(), atsBody, toolkit, SWT.NONE);
- managedForm.addPart(smaDetailsSection);
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- private void createOperationsSection() {
- try {
- smaOperationsSection = new SMAOperationsSection(sma.getEditor(), atsBody, toolkit, SWT.NONE);
- managedForm.addPart(smaOperationsSection);
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- private void createRelationsSection() {
- try {
- smaRelationsSection = new SMARelationsSection(sma.getEditor(), atsBody, toolkit, SWT.NONE);
- managedForm.addPart(smaRelationsSection);
-
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- private void createHistorySection() {
- try {
- smaHistorySection = new SMAHistorySection(sma.getEditor(), atsBody, toolkit, SWT.NONE);
- managedForm.addPart(smaHistorySection);
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- private void createGoalSection() {
- try {
- if (sma instanceof GoalArtifact) {
- smaGoalMembersSection = new SMAGoalMembersSection(sma.getEditor(), atsBody, toolkit, SWT.NONE);
- managedForm.addPart(smaGoalMembersSection);
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- private void createPageSections() {
- try {
- // Only display current or past states
- for (AtsWorkPage atsWorkPage : sma.getAtsWorkPages()) {
- try {
- if (sma.isCurrentState(atsWorkPage.getName()) || sma.getStateMgr().isStateVisited(atsWorkPage.getName())) {
- // Don't show completed or cancelled state if not currently those state
- if (atsWorkPage.isCompletePage() && !sma.isCompleted()) {
- continue;
- }
- if (atsWorkPage.isCancelledPage() && !sma.isCancelled()) {
- continue;
- }
- SMAWorkFlowSection section = new SMAWorkFlowSection(atsBody, toolkit, SWT.NONE, atsWorkPage, sma);
- managedForm.addPart(section);
- control = section.getMainComp();
- sections.add(section);
- atsWorkPages.add(atsWorkPage);
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- private void createHeaderSection(AtsWorkPage currentAtsWorkPage) {
- Composite headerComp = toolkit.createComposite(atsBody);
- GridData gd = new GridData(GridData.FILL_HORIZONTAL);
- gd.widthHint = 100;
- headerComp.setLayoutData(gd);
- headerComp.setLayout(ALayout.getZeroMarginLayout(1, false));
- // mainComp.setBackground(Displays.getSystemColor(SWT.COLOR_RED));
-
- // Display relations
- try {
- createCurrentStateAndTeamHeaders(headerComp, toolkit);
- createTargetVersionAndAssigneeHeader(headerComp, currentAtsWorkPage, toolkit);
-
- createLatestHeader(headerComp, toolkit);
- if (sma.isTeamWorkflow()) {
- actionableItemHeader = new SMAActionableItemHeader(headerComp, toolkit, sma);
- }
- workflowMetricsHeader = new SMAWorkflowMetricsHeader(headerComp, toolkit, sma);
- createSMANotesHeader(headerComp, toolkit, sma, HEADER_COMP_COLUMNS);
- createStateNotesHeader(headerComp, toolkit, sma, HEADER_COMP_COLUMNS, null);
- createAnnotationsHeader(headerComp, toolkit);
-
- sections.clear();
- atsWorkPages.clear();
-
- if (SMARelationsHyperlinkComposite.relationExists(sma)) {
- smaRelationsComposite = new SMARelationsHyperlinkComposite(atsBody, toolkit, SWT.NONE);
- smaRelationsComposite.create(sma);
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- protected boolean isShowTargetedVersion() throws OseeCoreException {
- return sma.isTargetedVersionable();
- }
-
- private void createTargetVersionAndAssigneeHeader(Composite parent, AtsWorkPage page, XFormToolkit toolkit) throws OseeCoreException {
- boolean isShowTargetedVersion = isShowTargetedVersion();
- boolean isCurrentNonCompleteCanceledState = page.isCurrentNonCompleteCancelledState(sma);
- if (!isShowTargetedVersion && !isCurrentNonCompleteCanceledState) {
- return;
- }
-
- Composite comp = toolkit.createContainer(parent, 6);
- comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- comp.setLayout(ALayout.getZeroMarginLayout(6, false));
-
- // Targeted Version
- if (isShowTargetedVersion) {
- new SMATargetedVersionHeader(comp, SWT.NONE, sma, toolkit);
- toolkit.createLabel(comp, " ");
- }
-
- // Create Privileged Edit label
- if (sma.getEditor().isPriviledgedEditModeEnabled()) {
- Label label = toolkit.createLabel(comp, PRIVILEGED_EDIT);
- label.setForeground(Displays.getSystemColor(SWT.COLOR_RED));
- label.setToolTipText("Priviledged Edit Mode is Enabled. Editing any field in any state is authorized. Select icon to disable");
- }
-
- // Current Assignees
- if (isCurrentNonCompleteCanceledState) {
- boolean editable = !sma.isCancelledOrCompleted() && !sma.isReadOnly() &&
- // and access control writeable
- sma.isAccessControlWrite() && //
-
- (SMAWorkFlowSection.isEditable(sma, page) || //
- // page is define to allow anyone to edit
- sma.getWorkPageDefinition().hasWorkRule(AtsWorkDefinitions.RuleWorkItemId.atsAllowAssigneeToAll.name()) ||
- // team definition has allowed anyone to edit
- sma.teamDefHasWorkRule(AtsWorkDefinitions.RuleWorkItemId.atsAllowAssigneeToAll.name()));
-
- new SMAAssigneesHeader(comp, SWT.NONE, sma, toolkit, editable);
- }
- }
-
- private void addMessageDecoration(ScrolledForm form) {
- form.getForm().addMessageHyperlinkListener(new HyperlinkAdapter() {
-
- @Override
- public void linkActivated(HyperlinkEvent e) {
- String title = e.getLabel();
- Object href = e.getHref();
- if (href instanceof IMessage[]) {
- Point noteLocation = ((Control) e.widget).toDisplay(0, 0);
- noteLocation.x += 10;
- noteLocation.y += 10;
-
- MessageSummaryNote note = new MessageSummaryNote(getManagedForm(), title, (IMessage[]) href);
- note.setLocation(noteLocation);
- note.open();
- }
- }
-
- });
- }
-
- private void refreshToolbar() throws OseeCoreException {
- IToolBarManager toolBarMgr = scrolledForm.getToolBarManager();
- toolBarMgr.removeAll();
-
- if (sma.isTeamWorkflow() && (((TeamWorkFlowArtifact) sma).getBranchMgr().isCommittedBranchExists() || ((TeamWorkFlowArtifact) sma).getBranchMgr().isWorkingBranchInWork())) {
- toolBarMgr.add(new ShowMergeManagerAction((TeamWorkFlowArtifact) sma));
- toolBarMgr.add(new ShowChangeReportAction((TeamWorkFlowArtifact) sma));
- }
- toolBarMgr.add(new FavoriteAction(sma.getEditor()));
- if (sma.getParentSMA() != null) {
- toolBarMgr.add(new OpenParentAction(sma));
- }
- toolBarMgr.add(new EmailActionAction(sma.getEditor()));
- toolBarMgr.add(new AddNoteAction(sma));
- toolBarMgr.add(new OpenInAtsWorldAction(sma));
- if (AtsUtil.isAtsAdmin()) {
- toolBarMgr.add(new OpenInArtifactEditorAction(sma.getEditor()));
- }
- toolBarMgr.add(new OpenVersionArtifactAction(sma));
- toolBarMgr.add(new OpenTeamDefinitionAction(sma));
- toolBarMgr.add(new CopyActionDetailsAction(sma));
- toolBarMgr.add(new PrivilegedEditAction(sma));
- toolBarMgr.add(new ResourceHistoryAction(sma));
- toolBarMgr.add(new ReloadAction(sma));
-
- OseeUiActions.addButtonToEditorToolBar(sma.getEditor(), this, AtsPlugin.getInstance(),
- scrolledForm.getToolBarManager(), SMAEditor.EDITOR_ID, "ATS Editor");
-
- scrolledForm.updateToolBar();
- }
-
- public Result isXWidgetDirty() throws OseeCoreException {
- for (SMAWorkFlowSection section : sections) {
- Result result = section.isXWidgetDirty();
- if (result.isTrue()) {
- return result;
- }
- }
- return Result.FalseResult;
- }
-
- public Result isXWidgetSavable() {
- for (SMAWorkFlowSection section : sections) {
- Result result = section.isXWidgetSavable();
- if (result.isFalse()) {
- return result;
- }
- }
- return Result.TrueResult;
- }
-
- public void saveXWidgetToArtifact() throws OseeCoreException {
- List<IArtifactStoredWidget> artWidgets = new ArrayList<IArtifactStoredWidget>();
- // Collect all dirty widgets first (so same attribute shown on different sections don't colide
- for (SMAWorkFlowSection section : sections) {
- section.getDirtyIArtifactWidgets(artWidgets);
- }
- for (IArtifactStoredWidget widget : artWidgets) {
- widget.saveToArtifact();
- }
- }
-
- @Override
- public void dispose() {
- if (actionableItemHeader != null) {
- actionableItemHeader.dispose();
- }
- if (workflowMetricsHeader != null) {
- workflowMetricsHeader.dispose();
- }
- if (smaDetailsSection != null) {
- smaDetailsSection.dispose();
- }
- if (smaHistorySection != null) {
- smaHistorySection.dispose();
- }
- if (smaRelationsSection != null) {
- smaRelationsSection.dispose();
- }
- if (smaGoalMembersSection != null) {
- smaGoalMembersSection.dispose();
- }
- for (SMAWorkFlowSection section : sections) {
- section.dispose();
- }
-
- if (toolkit != null) {
- toolkit.dispose();
- }
- }
-
- @Override
- public String getActionDescription() {
- return "Workflow Tab";
- }
-
- private Control control = null;
-
- private void storeScrollLocation() {
- if (scrolledForm != null) {
- Integer selection = scrolledForm.getVerticalBar().getSelection();
- // System.out.println("Storing selection => " + selection);
- guidToScrollLocation.put(sma.getGuid(), selection);
- }
- }
-
- private class JumpScrollbarJob extends Job {
- public JumpScrollbarJob(String name) {
- super(name);
- }
-
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- Integer selection = guidToScrollLocation.get(sma.getGuid());
- // System.out.println("Restoring selection => " + selection);
-
- // Find the ScrolledComposite operating on the control.
- ScrolledComposite sComp = null;
- if (control == null || control.isDisposed()) {
- return;
- }
- Composite parent = control.getParent();
- while (parent != null) {
- if (parent instanceof ScrolledComposite) {
- sComp = (ScrolledComposite) parent;
- break;
- }
- parent = parent.getParent();
- }
-
- if (sComp != null) {
- sComp.setOrigin(0, selection);
- }
- }
- });
- return Status.OK_STATUS;
-
- }
- }
-
- private void createCurrentStateAndTeamHeaders(Composite comp, XFormToolkit toolkit) {
- Composite topLineComp = new Composite(comp, SWT.NONE);
- topLineComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- topLineComp.setLayout(ALayout.getZeroMarginLayout(3, false));
- toolkit.adapt(topLineComp);
-
- try {
- FormsUtil.createLabelText(toolkit, topLineComp, "Current State: ", sma.getStateMgr().getCurrentStateName());
- FormsUtil.createLabelText(toolkit, topLineComp, "Created: ",
- XDate.getDateStr(sma.getLog().getCreationDate(), XDate.MMDDYYHHMM));
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
-
- new SMAOriginatorHeader(topLineComp, SWT.NONE, sma, toolkit);
-
- if (sma.isTeamWorkflow()) {
- FormsUtil.createLabelText(toolkit, topLineComp, "Team: ", ((TeamWorkFlowArtifact) sma).getTeamName());
- }
- FormsUtil.createLabelText(toolkit, topLineComp, sma.getArtifactSuperTypeName() + "Id: ", sma.getHumanReadableId());
-
- try {
- if (Strings.isValid(sma.getPcrId())) {
- FormsUtil.createLabelText(toolkit, topLineComp, " Id: ", sma.getPcrId());
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- private void createLatestHeader(Composite comp, XFormToolkit toolkit) {
- if (sma.isHistoricalVersion()) {
- Label label =
- toolkit.createLabel(
- comp,
- "This is a historical version of this " + sma.getArtifactTypeName() + " and can not be edited; Select \"Open Latest\" to view/edit latest version.");
- label.setForeground(Displays.getSystemColor(SWT.COLOR_RED));
- }
- }
-
- private void createAnnotationsHeader(Composite comp, XFormToolkit toolkit) {
- if (sma.getAnnotations().size() > 0) {
- new AnnotationComposite(toolkit, comp, SWT.None, sma);
- }
- }
-
- public static void createSMANotesHeader(Composite comp, XFormToolkit toolkit, StateMachineArtifact sma, int horizontalSpan) throws OseeCoreException {
- // Display SMA Note
+ // Don't put in operation cause doesn't have to be loaded before editor displays + OseeDictionary.load(); + } + private final class ReloadJobChangeAdapter extends JobChangeAdapter { + + private final IDirtiableEditor editor; + + private ReloadJobChangeAdapter(IDirtiableEditor editor) { + this.editor = editor; + showBusy(true); + } + + @Override + public void scheduled(IJobChangeEvent event) { + super.scheduled(event); + } + + @Override + public void aboutToRun(IJobChangeEvent event) { + super.aboutToRun(event); + } + + @Override + public void done(IJobChangeEvent event) { + super.done(event); + Job job = new UIJob("Draw Workflow Tab") { + + @Override + public IStatus runInUIThread(IProgressMonitor monitor) { + try { + updateTitleBar(); + refreshToolbar(); + setLoading(false); + createAtsBody(); + addMessageDecoration(scrolledForm); + FormsUtil.addHeadingGradient(toolkit, scrolledForm, true); + editor.onDirtied(); + } catch (OseeCoreException ex) { + handleException(ex); + } finally { + showBusy(false); + } + return Status.OK_STATUS; + } + }; + Operations.scheduleJob(job, false, Job.SHORT, null); + } + } + + private void handleException(Exception ex) { + setLoading(false); + if (Widgets.isAccessible(atsBody)) { + atsBody.dispose(); + } + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + new ExceptionComposite(bodyComp, ex); + bodyComp.layout(); + } + + private void setLoading(boolean set) { + if (set) { + loadingComposite = new LoadingComposite(bodyComp); + bodyComp.layout(); + } else { + if (Widgets.isAccessible(loadingComposite)) { + loadingComposite.dispose(); + } + } + showBusy(set); + } + + private void createAtsBody() throws OseeCoreException { + if (Widgets.isAccessible(atsBody)) { + atsBody.dispose(); + } + atsBody = toolkit.createComposite(bodyComp); + atsBody.setLayoutData(new GridData(GridData.FILL_BOTH)); + atsBody.setLayout(new GridLayout(1, false)); + + createHeaderSection(sma.getCurrentAtsWorkPage()); + createGoalSection(); + createPageSections(); + createHistorySection(); + createRelationsSection(); + createOperationsSection(); + createDetailsSection(); + + atsBody.layout(); + atsBody.setFocus(); + // Jump to scroll location if set + Integer selection = guidToScrollLocation.get(sma.getGuid()); + if (selection != null) { + JumpScrollbarJob job = new JumpScrollbarJob(""); + job.schedule(500); + } + + } + + private void createDetailsSection() { + try { + smaDetailsSection = new SMADetailsSection(sma.getEditor(), atsBody, toolkit, SWT.NONE); + managedForm.addPart(smaDetailsSection); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + private void createOperationsSection() { + try { + smaOperationsSection = new SMAOperationsSection(sma.getEditor(), atsBody, toolkit, SWT.NONE); + managedForm.addPart(smaOperationsSection); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + private void createRelationsSection() { + try { + smaRelationsSection = new SMARelationsSection(sma.getEditor(), atsBody, toolkit, SWT.NONE); + managedForm.addPart(smaRelationsSection); + + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + private void createHistorySection() { + try { + smaHistorySection = new SMAHistorySection(sma.getEditor(), atsBody, toolkit, SWT.NONE); + managedForm.addPart(smaHistorySection); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + private void createGoalSection() { + try { + if (sma instanceof GoalArtifact) { + smaGoalMembersSection = new SMAGoalMembersSection(sma.getEditor(), atsBody, toolkit, SWT.NONE); + managedForm.addPart(smaGoalMembersSection); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + private void createPageSections() { + try { + // Only display current or past states + for (AtsWorkPage atsWorkPage : sma.getAtsWorkPages()) { + try { + if (sma.isCurrentState(atsWorkPage.getName()) || sma.getStateMgr().isStateVisited(atsWorkPage.getName())) { + // Don't show completed or cancelled state if not currently those state + if (atsWorkPage.isCompletePage() && !sma.isCompleted()) { + continue; + } + if (atsWorkPage.isCancelledPage() && !sma.isCancelled()) { + continue; + } + SMAWorkFlowSection section = new SMAWorkFlowSection(atsBody, toolkit, SWT.NONE, atsWorkPage, sma); + managedForm.addPart(section); + control = section.getMainComp(); + sections.add(section); + atsWorkPages.add(atsWorkPage); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + private void createHeaderSection(AtsWorkPage currentAtsWorkPage) { + Composite headerComp = toolkit.createComposite(atsBody); + GridData gd = new GridData(GridData.FILL_HORIZONTAL); + gd.widthHint = 100; + headerComp.setLayoutData(gd); + headerComp.setLayout(ALayout.getZeroMarginLayout(1, false)); + // mainComp.setBackground(Displays.getSystemColor(SWT.COLOR_RED)); + + // Display relations + try { + createCurrentStateAndTeamHeaders(headerComp, toolkit); + createTargetVersionAndAssigneeHeader(headerComp, currentAtsWorkPage, toolkit); + + createLatestHeader(headerComp, toolkit); + if (sma.isTeamWorkflow()) { + actionableItemHeader = new SMAActionableItemHeader(headerComp, toolkit, sma); + } + workflowMetricsHeader = new SMAWorkflowMetricsHeader(headerComp, toolkit, sma); + createSMANotesHeader(headerComp, toolkit, sma, HEADER_COMP_COLUMNS); + createStateNotesHeader(headerComp, toolkit, sma, HEADER_COMP_COLUMNS, null); + createAnnotationsHeader(headerComp, toolkit); + + sections.clear(); + atsWorkPages.clear(); + + if (SMARelationsHyperlinkComposite.relationExists(sma)) { + smaRelationsComposite = new SMARelationsHyperlinkComposite(atsBody, toolkit, SWT.NONE); + smaRelationsComposite.create(sma); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + protected boolean isShowTargetedVersion() throws OseeCoreException { + return sma.isTargetedVersionable(); + } + + private void createTargetVersionAndAssigneeHeader(Composite parent, AtsWorkPage page, XFormToolkit toolkit) throws OseeCoreException { + boolean isShowTargetedVersion = isShowTargetedVersion(); + boolean isCurrentNonCompleteCanceledState = page.isCurrentNonCompleteCancelledState(sma); + if (!isShowTargetedVersion && !isCurrentNonCompleteCanceledState) { + return; + } + + Composite comp = toolkit.createContainer(parent, 6); + comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + comp.setLayout(ALayout.getZeroMarginLayout(6, false)); + + // Targeted Version + if (isShowTargetedVersion) { + new SMATargetedVersionHeader(comp, SWT.NONE, sma, toolkit); + toolkit.createLabel(comp, " "); + } + + // Create Privileged Edit label + if (sma.getEditor().isPriviledgedEditModeEnabled()) { + Label label = toolkit.createLabel(comp, PRIVILEGED_EDIT); + label.setForeground(Displays.getSystemColor(SWT.COLOR_RED)); + label.setToolTipText("Priviledged Edit Mode is Enabled. Editing any field in any state is authorized. Select icon to disable"); + } + + // Current Assignees + if (isCurrentNonCompleteCanceledState) { + boolean editable = !sma.isCancelledOrCompleted() && !sma.isReadOnly() && + // and access control writeable + sma.isAccessControlWrite() && // + + (SMAWorkFlowSection.isEditable(sma, page) || // + // page is define to allow anyone to edit + sma.getWorkPageDefinition().hasWorkRule(AtsWorkDefinitions.RuleWorkItemId.atsAllowAssigneeToAll.name()) || + // team definition has allowed anyone to edit + sma.teamDefHasWorkRule(AtsWorkDefinitions.RuleWorkItemId.atsAllowAssigneeToAll.name())); + + new SMAAssigneesHeader(comp, SWT.NONE, sma, toolkit, editable); + } + } + + private void addMessageDecoration(ScrolledForm form) { + form.getForm().addMessageHyperlinkListener(new HyperlinkAdapter() { + + @Override + public void linkActivated(HyperlinkEvent e) { + String title = e.getLabel(); + Object href = e.getHref(); + if (href instanceof IMessage[]) { + Point noteLocation = ((Control) e.widget).toDisplay(0, 0); + noteLocation.x += 10; + noteLocation.y += 10; + + MessageSummaryNote note = new MessageSummaryNote(getManagedForm(), title, (IMessage[]) href); + note.setLocation(noteLocation); + note.open(); + } + } + + }); + } + + private void refreshToolbar() throws OseeCoreException { + IToolBarManager toolBarMgr = scrolledForm.getToolBarManager(); + toolBarMgr.removeAll(); + + if (sma.isTeamWorkflow() && (((TeamWorkFlowArtifact) sma).getBranchMgr().isCommittedBranchExists() || ((TeamWorkFlowArtifact) sma).getBranchMgr().isWorkingBranchInWork())) { + toolBarMgr.add(new ShowMergeManagerAction((TeamWorkFlowArtifact) sma)); + toolBarMgr.add(new ShowChangeReportAction((TeamWorkFlowArtifact) sma)); + } + toolBarMgr.add(new FavoriteAction(sma.getEditor())); + if (sma.getParentSMA() != null) { + toolBarMgr.add(new OpenParentAction(sma)); + } + toolBarMgr.add(new EmailActionAction(sma.getEditor())); + toolBarMgr.add(new AddNoteAction(sma)); + toolBarMgr.add(new OpenInAtsWorldAction(sma)); + if (AtsUtil.isAtsAdmin()) { + toolBarMgr.add(new OpenInArtifactEditorAction(sma.getEditor())); + } + toolBarMgr.add(new OpenVersionArtifactAction(sma)); + toolBarMgr.add(new OpenTeamDefinitionAction(sma)); + toolBarMgr.add(new CopyActionDetailsAction(sma)); + toolBarMgr.add(new PrivilegedEditAction(sma)); + toolBarMgr.add(new ResourceHistoryAction(sma)); + toolBarMgr.add(new ReloadAction(sma)); + + OseeUiActions.addButtonToEditorToolBar(sma.getEditor(), this, AtsPlugin.getInstance(), + scrolledForm.getToolBarManager(), SMAEditor.EDITOR_ID, "ATS Editor"); + + scrolledForm.updateToolBar(); + } + + public Result isXWidgetDirty() throws OseeCoreException { + for (SMAWorkFlowSection section : sections) { + Result result = section.isXWidgetDirty(); + if (result.isTrue()) { + return result; + } + } + return Result.FalseResult; + } + + public Result isXWidgetSavable() { + for (SMAWorkFlowSection section : sections) { + Result result = section.isXWidgetSavable(); + if (result.isFalse()) { + return result; + } + } + return Result.TrueResult; + } + + public void saveXWidgetToArtifact() throws OseeCoreException { + List<IArtifactStoredWidget> artWidgets = new ArrayList<IArtifactStoredWidget>(); + // Collect all dirty widgets first (so same attribute shown on different sections don't colide + for (SMAWorkFlowSection section : sections) { + section.getDirtyIArtifactWidgets(artWidgets); + } + for (IArtifactStoredWidget widget : artWidgets) { + widget.saveToArtifact(); + } + } + + @Override + public void dispose() { + if (actionableItemHeader != null) { + actionableItemHeader.dispose(); + } + if (workflowMetricsHeader != null) { + workflowMetricsHeader.dispose(); + } + if (smaDetailsSection != null) { + smaDetailsSection.dispose(); + } + if (smaHistorySection != null) { + smaHistorySection.dispose(); + } + if (smaRelationsSection != null) { + smaRelationsSection.dispose(); + } + if (smaGoalMembersSection != null) { + smaGoalMembersSection.dispose(); + } + for (SMAWorkFlowSection section : sections) { + section.dispose(); + } + + if (toolkit != null) { + toolkit.dispose(); + } + } + + @Override + public String getActionDescription() { + return "Workflow Tab"; + } + + private Control control = null; + + private void storeScrollLocation() { + if (scrolledForm != null) { + Integer selection = scrolledForm.getVerticalBar().getSelection(); + // System.out.println("Storing selection => " + selection); + guidToScrollLocation.put(sma.getGuid(), selection); + } + } + + private class JumpScrollbarJob extends Job { + public JumpScrollbarJob(String name) { + super(name); + } + + @Override + protected IStatus run(IProgressMonitor monitor) { + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + Integer selection = guidToScrollLocation.get(sma.getGuid()); + // System.out.println("Restoring selection => " + selection); + + // Find the ScrolledComposite operating on the control. + ScrolledComposite sComp = null; + if (control == null || control.isDisposed()) { + return; + } + Composite parent = control.getParent(); + while (parent != null) { + if (parent instanceof ScrolledComposite) { + sComp = (ScrolledComposite) parent; + break; + } + parent = parent.getParent(); + } + + if (sComp != null) { + sComp.setOrigin(0, selection); + } + } + }); + return Status.OK_STATUS; + + } + } + + private void createCurrentStateAndTeamHeaders(Composite comp, XFormToolkit toolkit) { + Composite topLineComp = new Composite(comp, SWT.NONE); + topLineComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + topLineComp.setLayout(ALayout.getZeroMarginLayout(3, false)); + toolkit.adapt(topLineComp); + + try { + FormsUtil.createLabelText(toolkit, topLineComp, "Current State: ", sma.getStateMgr().getCurrentStateName()); + FormsUtil.createLabelText(toolkit, topLineComp, "Created: ", + XDate.getDateStr(sma.getLog().getCreationDate(), XDate.MMDDYYHHMM)); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + + new SMAOriginatorHeader(topLineComp, SWT.NONE, sma, toolkit); + + if (sma.isTeamWorkflow()) { + FormsUtil.createLabelText(toolkit, topLineComp, "Team: ", ((TeamWorkFlowArtifact) sma).getTeamName()); + } + FormsUtil.createLabelText(toolkit, topLineComp, sma.getArtifactSuperTypeName() + "Id: ", sma.getHumanReadableId()); + + try { + if (Strings.isValid(sma.getPcrId())) { + FormsUtil.createLabelText(toolkit, topLineComp, " Id: ", sma.getPcrId()); + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + private void createLatestHeader(Composite comp, XFormToolkit toolkit) { + if (sma.isHistoricalVersion()) { + Label label = + toolkit.createLabel( + comp, + "This is a historical version of this " + sma.getArtifactTypeName() + " and can not be edited; Select \"Open Latest\" to view/edit latest version."); + label.setForeground(Displays.getSystemColor(SWT.COLOR_RED)); + } + } + + private void createAnnotationsHeader(Composite comp, XFormToolkit toolkit) { + if (sma.getAnnotations().size() > 0) { + new AnnotationComposite(toolkit, comp, SWT.None, sma); + } + } + + public static void createSMANotesHeader(Composite comp, XFormToolkit toolkit, StateMachineArtifact sma, int horizontalSpan) throws OseeCoreException { + // Display SMA Note String note = sma.getSoleAttributeValue(AtsAttributeTypes.SmaNote, ""); - if (!note.equals("")) {
- FormsUtil.createLabelOrHyperlink(comp, toolkit, horizontalSpan, "Note: " + note);
- }
- }
-
- public static void createStateNotesHeader(Composite comp, XFormToolkit toolkit, StateMachineArtifact sma, int horizontalSpan, String forStateName) {
- // Display global Notes
- for (NoteItem noteItem : sma.getNotes().getNoteItems()) {
- if (forStateName == null || noteItem.getState().equals(forStateName)) {
- FormsUtil.createLabelOrHyperlink(comp, toolkit, horizontalSpan, noteItem.toString());
- }
- }
- }
-
- public void refresh() {
- if (sma.getEditor() != null && !sma.isInTransition()) {
- // remove all pages
- for (SMAWorkFlowSection section : sections) {
- section.dispose();
- }
- // add pages back
- refreshData();
- }
- }
-
- public List<AtsWorkPage> getPages() {
- return atsWorkPages;
- }
-
- public List<SMAWorkFlowSection> getSections() {
- return sections;
- }
-
- public SMAWorkFlowSection getSectionForCurrentState() {
- return null;
- }
+ if (!note.equals("")) { + FormsUtil.createLabelOrHyperlink(comp, toolkit, horizontalSpan, "Note: " + note); + } + } + + public static void createStateNotesHeader(Composite comp, XFormToolkit toolkit, StateMachineArtifact sma, int horizontalSpan, String forStateName) { + // Display global Notes + for (NoteItem noteItem : sma.getNotes().getNoteItems()) { + if (forStateName == null || noteItem.getState().equals(forStateName)) { + FormsUtil.createLabelOrHyperlink(comp, toolkit, horizontalSpan, noteItem.toString()); + } + } + } + + public void refresh() { + if (sma.getEditor() != null && !sma.isInTransition()) { + // remove all pages + for (SMAWorkFlowSection section : sections) { + section.dispose(); + } + // add pages back + refreshData(); + } + } + + public List<AtsWorkPage> getPages() { + return atsWorkPages; + } + + public List<SMAWorkFlowSection> getSections() { + return sections; + } + + public SMAWorkFlowSection getSectionForCurrentState() { + return null; + } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAWorkflowMetricsHeader.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAWorkflowMetricsHeader.java index 7d1b95cf0cb..4abc6634782 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAWorkflowMetricsHeader.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAWorkflowMetricsHeader.java @@ -1,96 +1,96 @@ -/*******************************************************************************
- * 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.editor;
-
-import java.util.logging.Level;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.ats.world.WorldXViewerFactory;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.skynet.XFormToolkit;
-import org.eclipse.osee.framework.ui.skynet.util.FormsUtil;
-import org.eclipse.osee.framework.ui.swt.ALayout;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-
-/**
- * <REM2> handled through SMAEditorEventManager
- *
- * @author Donald G. Dunne
- */
-public class SMAWorkflowMetricsHeader extends Composite {
-
- private final StateMachineArtifact sma;
- private Label percentLabel, estHoursLabel, hoursSpentLabel, remainHoursLabel;
-
- public SMAWorkflowMetricsHeader(Composite parent, XFormToolkit toolkit, StateMachineArtifact sma) {
- super(parent, SWT.NONE);
- this.sma = sma;
- try {
-
- toolkit.adapt(this);
- setLayout(ALayout.getZeroMarginLayout(8, false));
- setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
- percentLabel =
- FormsUtil.createLabelValue(toolkit, this, "Total Percent: ", "",
- "Calculation: sum of percent for all states (including all tasks and reviews) / # statusable states");
- estHoursLabel =
- FormsUtil.createLabelValue(toolkit, this, "Total Estimated Hours: ", "",
- "Calculation: sum estimated hours for workflow and all tasks and reviews");
- hoursSpentLabel =
- FormsUtil.createLabelValue(toolkit, this, "Total Hours Spent: ", "",
- "Calculation: sum of all hours spent for all tasks, reviews and in each state");
- remainHoursLabel =
- FormsUtil.createLabelValue(toolkit, this, "Remaining Hours: ", "",
- WorldXViewerFactory.Remaining_Hours_Col.getDescription());
-
- refresh();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- private void refresh() {
- if (percentLabel.isDisposed()) {
- return;
- }
- try {
- if (!percentLabel.isDisposed()) {
- percentLabel.setText(String.valueOf(sma.getPercentCompleteSMATotal()));
- }
- if (estHoursLabel != null && !estHoursLabel.isDisposed()) {
- estHoursLabel.setText(String.valueOf(AtsUtil.doubleToI18nString(sma.getEstimatedHoursTotal())));
- }
- if (hoursSpentLabel != null && !hoursSpentLabel.isDisposed()) {
- hoursSpentLabel.setText(String.valueOf(AtsUtil.doubleToI18nString(sma.getHoursSpentSMATotal())));
- }
- if (hoursSpentLabel != null && !hoursSpentLabel.isDisposed()) {
- Result result = sma.isWorldViewRemainHoursValid();
- if (result.isFalse()) {
- remainHoursLabel.setText("Error" + result.getText());
- } else {
- remainHoursLabel.setText(String.valueOf(AtsUtil.doubleToI18nString(sma.getWorldViewRemainHours())));
- }
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
-
- percentLabel.update();
- layout();
- }
-
-}
+/******************************************************************************* + * 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.editor; + +import java.util.logging.Level; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.ats.world.WorldXViewerFactory; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.skynet.XFormToolkit; +import org.eclipse.osee.framework.ui.skynet.util.FormsUtil; +import org.eclipse.osee.framework.ui.swt.ALayout; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; + +/** + * <REM2> handled through SMAEditorEventManager + * + * @author Donald G. Dunne + */ +public class SMAWorkflowMetricsHeader extends Composite { + + private final StateMachineArtifact sma; + private Label percentLabel, estHoursLabel, hoursSpentLabel, remainHoursLabel; + + public SMAWorkflowMetricsHeader(Composite parent, XFormToolkit toolkit, StateMachineArtifact sma) { + super(parent, SWT.NONE); + this.sma = sma; + try { + + toolkit.adapt(this); + setLayout(ALayout.getZeroMarginLayout(8, false)); + setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + percentLabel = + FormsUtil.createLabelValue(toolkit, this, "Total Percent: ", "", + "Calculation: sum of percent for all states (including all tasks and reviews) / # statusable states"); + estHoursLabel = + FormsUtil.createLabelValue(toolkit, this, "Total Estimated Hours: ", "", + "Calculation: sum estimated hours for workflow and all tasks and reviews"); + hoursSpentLabel = + FormsUtil.createLabelValue(toolkit, this, "Total Hours Spent: ", "", + "Calculation: sum of all hours spent for all tasks, reviews and in each state"); + remainHoursLabel = + FormsUtil.createLabelValue(toolkit, this, "Remaining Hours: ", "", + WorldXViewerFactory.Remaining_Hours_Col.getDescription()); + + refresh(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + private void refresh() { + if (percentLabel.isDisposed()) { + return; + } + try { + if (!percentLabel.isDisposed()) { + percentLabel.setText(String.valueOf(sma.getPercentCompleteSMATotal())); + } + if (estHoursLabel != null && !estHoursLabel.isDisposed()) { + estHoursLabel.setText(String.valueOf(AtsUtil.doubleToI18nString(sma.getEstimatedHoursTotal()))); + } + if (hoursSpentLabel != null && !hoursSpentLabel.isDisposed()) { + hoursSpentLabel.setText(String.valueOf(AtsUtil.doubleToI18nString(sma.getHoursSpentSMATotal()))); + } + if (hoursSpentLabel != null && !hoursSpentLabel.isDisposed()) { + Result result = sma.isWorldViewRemainHoursValid(); + if (result.isFalse()) { + remainHoursLabel.setText("Error" + result.getText()); + } else { + remainHoursLabel.setText(String.valueOf(AtsUtil.doubleToI18nString(sma.getWorldViewRemainHours()))); + } + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + + percentLabel.update(); + layout(); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/stateItem/AtsDecisionReviewDecisionStateItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/stateItem/AtsDecisionReviewDecisionStateItem.java index 3596ad42995..4a7f1067290 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/stateItem/AtsDecisionReviewDecisionStateItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/stateItem/AtsDecisionReviewDecisionStateItem.java @@ -1,107 +1,107 @@ -/*******************************************************************************
- * 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.editor.stateItem;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import org.eclipse.osee.ats.artifact.AtsAttributeTypes;
-import org.eclipse.osee.ats.artifact.DecisionReviewArtifact;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.ats.editor.SMAWorkFlowSection;
-import org.eclipse.osee.ats.util.widgets.DecisionOption;
-import org.eclipse.osee.ats.util.widgets.XDecisionOptions;
-import org.eclipse.osee.ats.workflow.AtsWorkPage;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeStateException;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.skynet.widgets.XComboDam;
-import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
-import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-
-/**
- * @author Donald G. Dunne
- */
-public class AtsDecisionReviewDecisionStateItem extends AtsStateItem {
-
- @Override
- public String getId() {
- return "osee.ats.decisionReview.Decision";
- }
-
- @Override
- public Result xWidgetCreating(XWidget xWidget, FormToolkit toolkit, AtsWorkPage page, Artifact art, XModifiedListener xModListener, boolean isEditable) throws OseeCoreException {
- if (xWidget == null) {
- throw new OseeStateException("Can't retrieve decision review combo widget to set.");
- }
- if (!(art instanceof StateMachineArtifact)) {
- throw new OseeCoreException(
- "AtsDecisionReviewDecisionStateItem.xWidgetCreating expected a StateMachineArtifact");
- }
+/******************************************************************************* + * 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.editor.stateItem; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import org.eclipse.osee.ats.artifact.AtsAttributeTypes; +import org.eclipse.osee.ats.artifact.DecisionReviewArtifact; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.editor.SMAWorkFlowSection; +import org.eclipse.osee.ats.util.widgets.DecisionOption; +import org.eclipse.osee.ats.util.widgets.XDecisionOptions; +import org.eclipse.osee.ats.workflow.AtsWorkPage; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeStateException; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.skynet.widgets.XComboDam; +import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener; +import org.eclipse.osee.framework.ui.skynet.widgets.XWidget; +import org.eclipse.ui.forms.widgets.FormToolkit; + +/** + * @author Donald G. Dunne + */ +public class AtsDecisionReviewDecisionStateItem extends AtsStateItem { + + @Override + public String getId() { + return "osee.ats.decisionReview.Decision"; + } + + @Override + public Result xWidgetCreating(XWidget xWidget, FormToolkit toolkit, AtsWorkPage page, Artifact art, XModifiedListener xModListener, boolean isEditable) throws OseeCoreException { + if (xWidget == null) { + throw new OseeStateException("Can't retrieve decision review combo widget to set."); + } + if (!(art instanceof StateMachineArtifact)) { + throw new OseeCoreException( + "AtsDecisionReviewDecisionStateItem.xWidgetCreating expected a StateMachineArtifact"); + } if (xWidget.getLabel().equals(AtsAttributeTypes.Decision.getUnqualifiedName())) { - XComboDam decisionComboDam = (XComboDam) xWidget;
- List<String> options = new ArrayList<String>();
- XDecisionOptions xDecOptions = new XDecisionOptions((StateMachineArtifact) art);
- for (DecisionOption opt : xDecOptions.getDecisionOptions()) {
- options.add(opt.getName());
- }
- decisionComboDam.setDataStrings(options.toArray(new String[options.size()]));
- }
- return Result.TrueResult;
- }
-
- @Override
- public String getOverrideTransitionToStateName(SMAWorkFlowSection section) throws OseeCoreException {
- DecisionOption decisionOption = getDecisionOption(section);
- if (decisionOption == null) {
- return null;
- }
- boolean followUpRequired = decisionOption.isFollowupRequired();
- if (section.getTransitionToStateCombo() == null || section.getTransitionToStateCombo().getSelected() == null) {
- return null;
- }
- if (followUpRequired) {
- return DecisionReviewArtifact.DecisionReviewState.Followup.name();
- } else {
- return DecisionReviewArtifact.DecisionReviewState.Completed.name();
- }
- }
-
- @Override
- public Collection<User> getOverrideTransitionToAssignees(SMAWorkFlowSection section) throws OseeCoreException {
- DecisionOption decisionOption = getDecisionOption(section);
- if (decisionOption == null) {
- return null;
- }
- return decisionOption.getAssignees();
- }
-
- private DecisionOption getDecisionOption(SMAWorkFlowSection section) throws OseeCoreException {
+ XComboDam decisionComboDam = (XComboDam) xWidget; + List<String> options = new ArrayList<String>(); + XDecisionOptions xDecOptions = new XDecisionOptions((StateMachineArtifact) art); + for (DecisionOption opt : xDecOptions.getDecisionOptions()) { + options.add(opt.getName()); + } + decisionComboDam.setDataStrings(options.toArray(new String[options.size()])); + } + return Result.TrueResult; + } + + @Override + public String getOverrideTransitionToStateName(SMAWorkFlowSection section) throws OseeCoreException { + DecisionOption decisionOption = getDecisionOption(section); + if (decisionOption == null) { + return null; + } + boolean followUpRequired = decisionOption.isFollowupRequired(); + if (section.getTransitionToStateCombo() == null || section.getTransitionToStateCombo().getSelected() == null) { + return null; + } + if (followUpRequired) { + return DecisionReviewArtifact.DecisionReviewState.Followup.name(); + } else { + return DecisionReviewArtifact.DecisionReviewState.Completed.name(); + } + } + + @Override + public Collection<User> getOverrideTransitionToAssignees(SMAWorkFlowSection section) throws OseeCoreException { + DecisionOption decisionOption = getDecisionOption(section); + if (decisionOption == null) { + return null; + } + return decisionOption.getAssignees(); + } + + private DecisionOption getDecisionOption(SMAWorkFlowSection section) throws OseeCoreException { XWidget xWidget = section.getPage().getLayoutData(AtsAttributeTypes.Decision.getName()).getXWidget(); - XComboDam decisionComboDam = (XComboDam) xWidget;
- String decision = decisionComboDam.get();
- if (decision.equals("")) {
- return null;
- }
- DecisionReviewArtifact decArt = (DecisionReviewArtifact) section.getSma();
- DecisionOption decisionOption = decArt.decisionOptions.getDecisionOption(decision);
- return decisionOption;
- }
-
- @Override
- public String getDescription() {
- return "AtsDecisionReviewDecisionStateItem - Add decision options to review state based on prepare state's entries.";
- }
-
-}
+ XComboDam decisionComboDam = (XComboDam) xWidget; + String decision = decisionComboDam.get(); + if (decision.equals("")) { + return null; + } + DecisionReviewArtifact decArt = (DecisionReviewArtifact) section.getSma(); + DecisionOption decisionOption = decArt.decisionOptions.getDecisionOption(decision); + return decisionOption; + } + + @Override + public String getDescription() { + return "AtsDecisionReviewDecisionStateItem - Add decision options to review state based on prepare state's entries."; + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/stateItem/AtsDecisionReviewPrepareStateItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/stateItem/AtsDecisionReviewPrepareStateItem.java index 3d1bbbf1953..bf9eddc12e0 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/stateItem/AtsDecisionReviewPrepareStateItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/stateItem/AtsDecisionReviewPrepareStateItem.java @@ -1,45 +1,45 @@ -/*******************************************************************************
- * 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.editor.stateItem;
-
-import java.util.Collection;
-import org.eclipse.osee.ats.artifact.DecisionReviewArtifact;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.ats.util.widgets.XDecisionOptions;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-
-/**
- * @author Donald G. Dunne
- */
-public class AtsDecisionReviewPrepareStateItem extends AtsStateItem {
-
- @Override
- public String getId() {
- return "osee.ats.decisionReview.Prepare";
- }
-
- @Override
- public Result transitioning(StateMachineArtifact sma, String fromState, String toState, Collection<User> toAssignees) throws OseeCoreException {
- if (fromState.equals(DecisionReviewArtifact.DecisionReviewState.Prepare.name()) && toState.equals(DecisionReviewArtifact.DecisionReviewState.Decision.name())) {
- XDecisionOptions decOptions = new XDecisionOptions(sma);
- return decOptions.validateDecisionOptions();
- }
- return Result.TrueResult;
- }
-
- @Override
- public String getDescription() {
- return "AtsDecisionReviewPrepareStateItem - Add validation of decision options prior to transitioning.";
- }
-
-}
+/******************************************************************************* + * 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.editor.stateItem; + +import java.util.Collection; +import org.eclipse.osee.ats.artifact.DecisionReviewArtifact; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.util.widgets.XDecisionOptions; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.ui.plugin.util.Result; + +/** + * @author Donald G. Dunne + */ +public class AtsDecisionReviewPrepareStateItem extends AtsStateItem { + + @Override + public String getId() { + return "osee.ats.decisionReview.Prepare"; + } + + @Override + public Result transitioning(StateMachineArtifact sma, String fromState, String toState, Collection<User> toAssignees) throws OseeCoreException { + if (fromState.equals(DecisionReviewArtifact.DecisionReviewState.Prepare.name()) && toState.equals(DecisionReviewArtifact.DecisionReviewState.Decision.name())) { + XDecisionOptions decOptions = new XDecisionOptions(sma); + return decOptions.validateDecisionOptions(); + } + return Result.TrueResult; + } + + @Override + public String getDescription() { + return "AtsDecisionReviewPrepareStateItem - Add validation of decision options prior to transitioning."; + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/stateItem/AtsLogWorkPage.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/stateItem/AtsLogWorkPage.java index 425292c127a..010f843401e 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/stateItem/AtsLogWorkPage.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/stateItem/AtsLogWorkPage.java @@ -23,20 +23,12 @@ public class AtsLogWorkPage extends AtsWorkPage { public static class EmptyWorkFlowDefinition extends WorkFlowDefinition { - /** - * @param name - * @param id - * @param parentId - */ public EmptyWorkFlowDefinition(String name, String id) { super(name, id, null); } } - /** - * @param title - */ public AtsLogWorkPage(String title) { super(new EmptyWorkFlowDefinition(title, PAGE_ID), new WorkPageDefinition(title, PAGE_ID, null), null, null); } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/stateItem/IAtsStateItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/stateItem/IAtsStateItem.java index 18916e558bd..72175372bdc 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/stateItem/IAtsStateItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/stateItem/IAtsStateItem.java @@ -50,10 +50,6 @@ public interface IAtsStateItem { public Collection<String> getIds() throws OseeCoreException; /** - * @param sma - * @param fromState - * @param toState - * @param toAssignees * @return Result of operation. If Result.isFalse(), transition will not continue and Result.popup will occur. * @throws Exception */ @@ -62,7 +58,6 @@ public interface IAtsStateItem { public void transitioned(StateMachineArtifact sma, String fromState, String toState, Collection<User> toAssignees, SkynetTransaction transaction) throws OseeCoreException; /** - * @param sma * @return Result of operation. If Result.isFalse(), commit will not continue and Result.popup will occur. * @throws Exception */ diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/EstimatedHoursXWidget.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/EstimatedHoursXWidget.java index 1d5c5c93ee8..654693b9c07 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/EstimatedHoursXWidget.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/EstimatedHoursXWidget.java @@ -1,41 +1,41 @@ -/*******************************************************************************
- * 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.editor.widget;
-
-import java.util.logging.Level;
-import org.eclipse.osee.ats.artifact.AtsAttributeTypes;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.skynet.widgets.XFloatDam;
-import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * @author Donald G. Dunne
- */
-public class EstimatedHoursXWidget extends XFloatDam {
-
- public EstimatedHoursXWidget(StateMachineArtifact sma, Composite composite, int horizontalSpan, XModifiedListener xModListener) {
+/******************************************************************************* + * 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.editor.widget; + +import java.util.logging.Level; +import org.eclipse.osee.ats.artifact.AtsAttributeTypes; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.skynet.widgets.XFloatDam; +import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener; +import org.eclipse.swt.widgets.Composite; + +/** + * @author Donald G. Dunne + */ +public class EstimatedHoursXWidget extends XFloatDam { + + public EstimatedHoursXWidget(StateMachineArtifact sma, Composite composite, int horizontalSpan, XModifiedListener xModListener) { super(AtsAttributeTypes.EstimatedHours.getUnqualifiedName()); - try {
- if (xModListener != null) {
- addXModifiedListener(xModListener);
- }
+ try { + if (xModListener != null) { + addXModifiedListener(xModListener); + } setAttributeType(sma, AtsAttributeTypes.EstimatedHours); - setFillHorizontally(true);
- createWidgets(composite, horizontalSpan);
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
+ setFillHorizontally(true); + createWidgets(composite, horizontalSpan); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/ReviewInfoXWidget.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/ReviewInfoXWidget.java index f074d7a0082..ee504e63729 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/ReviewInfoXWidget.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/ReviewInfoXWidget.java @@ -1,310 +1,312 @@ -/*******************************************************************************
- * 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.editor.widget;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.logging.Level;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.dialogs.IMessageProvider;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.osee.ats.actions.NewDecisionReviewJob;
-import org.eclipse.osee.ats.actions.NewPeerToPeerReviewJob;
-import org.eclipse.osee.ats.artifact.PeerToPeerReviewArtifact;
-import org.eclipse.osee.ats.artifact.ReviewSMArtifact;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact.TransitionOption;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.editor.SMAEditor;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.ats.util.Overview;
-import org.eclipse.osee.ats.util.widgets.ReviewManager;
-import org.eclipse.osee.ats.util.widgets.dialog.StateListAndTitleDialog;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.jdk.core.util.AHTML;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.UserManager;
-import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
-import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.skynet.XFormToolkit;
-import org.eclipse.osee.framework.ui.skynet.widgets.XLabelValueBase;
-import org.eclipse.osee.framework.ui.swt.ALayout;
-import org.eclipse.osee.framework.ui.swt.Displays;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.ui.forms.IManagedForm;
-import org.eclipse.ui.forms.IMessageManager;
-import org.eclipse.ui.forms.events.HyperlinkEvent;
-import org.eclipse.ui.forms.events.IHyperlinkListener;
-import org.eclipse.ui.forms.widgets.Hyperlink;
-
-/**
- * <REM2> handled through SMAEditorEventManager
- *
- * @author Donald G. Dunne
- */
-public class ReviewInfoXWidget extends XLabelValueBase {
-
- private final String forStateName;
- private final ArrayList<Label> labelWidgets = new ArrayList<Label>();
- private Composite destroyableComposite = null;
- private final Composite composite;
- private final IManagedForm managedForm;
- private final int horizontalSpan;
- private final XFormToolkit toolkit;
- private final TeamWorkFlowArtifact teamArt;
-
- public ReviewInfoXWidget(IManagedForm managedForm, XFormToolkit toolkit, final TeamWorkFlowArtifact teamArt, final String forStateName, Composite composite, int horizontalSpan) {
- super("\"" + forStateName + "\" State Reviews");
- this.managedForm = managedForm;
- this.toolkit = toolkit;
- this.teamArt = teamArt;
- this.forStateName = forStateName;
- this.composite = composite;
- this.horizontalSpan = horizontalSpan;
- reDisplay();
- }
-
- public void reDisplay() {
- if (composite != null && composite.isDisposed()) {
- return;
- }
- if (destroyableComposite != null) {
- destroyableComposite.dispose();
- }
- destroyableComposite = new Composite(composite, SWT.None);
- destroyableComposite.setLayout(ALayout.getZeroMarginLayout(4, false));
-
- setToolTip("Blocking Reviews must be completed before transtion. Select Review hyperlink to view.");
- createWidgets(managedForm, destroyableComposite, horizontalSpan);
-
- try {
- addAdminRightClickOption();
- Collection<ReviewSMArtifact> revArts = ReviewManager.getReviews(teamArt, forStateName);
- if (revArts.isEmpty()) {
- setValueText("No Reviews Created");
- }
-
- Hyperlink link = toolkit.createHyperlink(destroyableComposite, "[Add Decision Review]", SWT.NONE);
- link.addHyperlinkListener(new IHyperlinkListener() {
-
- @Override
- public void linkEntered(HyperlinkEvent e) {
- // do nothing
- }
-
- @Override
- public void linkExited(HyperlinkEvent e) {
- // do nothing
- }
-
- @Override
- public void linkActivated(HyperlinkEvent e) {
- try {
- StateListAndTitleDialog dialog =
- new StateListAndTitleDialog("Create Decision Review",
- "Select state to that review will be associated with.",
- teamArt.getWorkFlowDefinition().getPageNames());
- dialog.setInitialSelections(new Object[] {forStateName});
- if (dialog.open() == 0) {
- if (!Strings.isValid(dialog.getReviewTitle())) {
- AWorkbench.popup("ERROR", "Must enter review title");
- return;
- }
- NewDecisionReviewJob job =
- new NewDecisionReviewJob(teamArt, null, dialog.getReviewTitle(), dialog.getSelectedState(),
- null, ReviewManager.getDefaultDecisionReviewOptions(), null);
- job.setUser(true);
- job.setPriority(Job.LONG);
- job.schedule();
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- });
-
- link = toolkit.createHyperlink(destroyableComposite, "[Add Peer to Peer Review]", SWT.NONE);
- link.addHyperlinkListener(new IHyperlinkListener() {
-
- @Override
- public void linkEntered(HyperlinkEvent e) {
- // do nothing
- }
-
- @Override
- public void linkExited(HyperlinkEvent e) {
- // do nothing
- }
-
- @Override
- public void linkActivated(HyperlinkEvent e) {
- try {
- StateListAndTitleDialog dialog =
- new StateListAndTitleDialog("Add Peer to Peer Review",
- "Select state to that review will be associated with.",
- teamArt.getWorkFlowDefinition().getPageNames());
- dialog.setInitialSelections(new Object[] {forStateName});
- dialog.setReviewTitle(PeerToPeerReviewArtifact.getDefaultReviewTitle(teamArt));
- if (dialog.open() == 0) {
- if (!Strings.isValid(dialog.getReviewTitle())) {
- AWorkbench.popup("ERROR", "Must enter review title");
- return;
- }
- NewPeerToPeerReviewJob job =
- new NewPeerToPeerReviewJob(teamArt, dialog.getReviewTitle(), dialog.getSelectedState());
- job.setUser(true);
- job.setPriority(Job.LONG);
- job.schedule();
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
- });
- if (revArts.size() > 0) {
- Composite workComp = toolkit.createContainer(destroyableComposite, 1);
- workComp.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING));
- GridData gd = new GridData();
- gd.horizontalIndent = 20;
- gd.horizontalSpan = 4;
- workComp.setLayoutData(gd);
-
- for (ReviewSMArtifact revArt : revArts) {
- createReviewHyperlink(workComp, managedForm, toolkit, 2, revArt, forStateName);
- }
- }
-
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
- @Override
- public String toString() {
- try {
- return "ReviewInfoXWidget for SMA \"" + teamArt + "\"";
- } catch (Exception ex) {
- return "ReviewInfoXWidget " + ex.getLocalizedMessage();
- }
- }
-
- public static String toHTML(final TeamWorkFlowArtifact teamArt, String forStateName) throws OseeCoreException {
- if (ReviewManager.getReviews(teamArt, forStateName).isEmpty()) {
- return "";
- }
- StringBuffer html = new StringBuffer();
- try {
- html.append(AHTML.addSpace(1) + AHTML.getLabelStr(AHTML.LABEL_FONT, "\"" + forStateName + "\" State Reviews"));
- html.append(AHTML.startBorderTable(100, Overview.normalColor, ""));
- html.append(AHTML.addHeaderRowMultiColumnTable(new String[] {"Review Type", "Title", "ID"}));
- for (ReviewSMArtifact art : ReviewManager.getReviews(teamArt, forStateName)) {
- html.append(AHTML.addRowMultiColumnTable(new String[] {art.getArtifactTypeName(), art.getName(),
- art.getHumanReadableId()}));
- }
- html.append(AHTML.endBorderTable());
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return "Review Exception - " + ex.getLocalizedMessage();
- }
- return html.toString();
- }
-
- public String toHTML() throws OseeCoreException {
- return ReviewInfoXWidget.toHTML(teamArt, forStateName);
- }
-
- private void createReviewHyperlink(Composite comp, IManagedForm managedForm, XFormToolkit toolkit, final int horizontalSpan, final ReviewSMArtifact revArt, String forStateName) throws OseeCoreException {
-
- Composite workComp = toolkit.createContainer(comp, 1);
- workComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
- workComp.setLayout(ALayout.getZeroMarginLayout(3, false));
-
- Label strLabel = new Label(workComp, SWT.NONE);
- labelWidgets.add(strLabel);
- if (revArt.isBlocking() && !revArt.isCancelledOrCompleted()) {
- strLabel.setText("State Blocking [" + revArt.getArtifactTypeName() + "] must be completed: ");
- IMessageManager messageManager = managedForm.getMessageManager();
- if (messageManager != null) {
- messageManager.addMessage(
- "validation.error",
- "\"" + forStateName + "\" State has a blocking [" + revArt.getArtifactTypeName() + "] that must be completed.",
- null, IMessageProvider.ERROR, strLabel);
- }
- } else if (!revArt.isCancelledOrCompleted()) {
- strLabel.setText("Open [" + revArt.getArtifactTypeName() + "] exists: ");
- IMessageManager messageManager = managedForm.getMessageManager();
- if (messageManager != null) {
- messageManager.addMessage("validation.error",
- "\"" + forStateName + "\" State has an open [" + revArt.getArtifactTypeName() + "].", null,
- IMessageProvider.WARNING, strLabel);
- }
- } else {
- strLabel.setText(revArt.getStateMgr().getCurrentStateName() + " [" + revArt.getArtifactTypeName() + "] exists: ");
- }
-
- String str = "[" + revArt.getName() + "]";
- Hyperlink hyperLabel =
- toolkit.createHyperlink(workComp, (str.length() > 300 ? Strings.truncate(str, 300) + "..." : str), SWT.NONE);
- hyperLabel.setToolTipText("Select to open review");
- hyperLabel.addListener(SWT.MouseUp, new Listener() {
- @Override
- public void handleEvent(Event event) {
- SMAEditor.editArtifact(revArt);
- }
- });
- }
-
- public void addAdminRightClickOption() throws OseeCoreException {
- // If ATS Admin, allow right-click to auto-complete tasks
- if (AtsUtil.isAtsAdmin() && !AtsUtil.isProductionDb()) {
- labelWidget.addListener(SWT.MouseUp, new Listener() {
- @Override
- public void handleEvent(Event event) {
- if (event.button == 3) {
- if (!MessageDialog.openConfirm(Displays.getActiveShell(), "Auto Complete Reviews",
- "ATS Admin\n\nAuto Complete Reviews?")) {
- return;
- }
- try {
- SkynetTransaction transaction =
- new SkynetTransaction(AtsUtil.getAtsBranch(), "ATS Auto Complete Reviews");
- for (ReviewSMArtifact revArt : ReviewManager.getReviewsFromCurrentState(teamArt)) {
- if (!revArt.isCancelledOrCompleted()) {
- if (revArt.getStateMgr().isUnAssigned()) {
- revArt.getStateMgr().setAssignee(UserManager.getUser());
- }
- Result result =
- revArt.transitionToCompleted("", transaction,
- TransitionOption.OverrideTransitionValidityCheck, TransitionOption.Persist);
- if (result.isFalse()) {
- result.popup();
- return;
- }
- }
- }
- transaction.execute();
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
- }
- });
- }
- }
-}
+/******************************************************************************* + * 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.editor.widget; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.logging.Level; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.jface.dialogs.IMessageProvider; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.osee.ats.actions.NewDecisionReviewJob; +import org.eclipse.osee.ats.actions.NewPeerToPeerReviewJob; +import org.eclipse.osee.ats.artifact.PeerToPeerReviewArtifact; +import org.eclipse.osee.ats.artifact.ReviewSMArtifact; +import org.eclipse.osee.ats.artifact.StateMachineArtifact.TransitionOption; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.editor.SMAEditor; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.ats.util.Overview; +import org.eclipse.osee.ats.util.widgets.ReviewManager; +import org.eclipse.osee.ats.util.widgets.dialog.StateListAndTitleDialog; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.AHTML; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.UserManager; +import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction; +import org.eclipse.osee.framework.ui.plugin.util.AWorkbench; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.skynet.XFormToolkit; +import org.eclipse.osee.framework.ui.skynet.widgets.XLabelValueBase; +import org.eclipse.osee.framework.ui.swt.ALayout; +import org.eclipse.osee.framework.ui.swt.Displays; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.ui.forms.IManagedForm; +import org.eclipse.ui.forms.IMessageManager; +import org.eclipse.ui.forms.events.HyperlinkEvent; +import org.eclipse.ui.forms.events.IHyperlinkListener; +import org.eclipse.ui.forms.widgets.Hyperlink; + +/** + * <REM2> handled through SMAEditorEventManager + * + * @author Donald G. Dunne + */ +public class ReviewInfoXWidget extends XLabelValueBase { + + private final String forStateName; + private final ArrayList<Label> labelWidgets = new ArrayList<Label>(); + private Composite destroyableComposite = null; + private final Composite composite; + private final IManagedForm managedForm; + private final int horizontalSpan; + private final XFormToolkit toolkit; + private final TeamWorkFlowArtifact teamArt; + + public ReviewInfoXWidget(IManagedForm managedForm, XFormToolkit toolkit, final TeamWorkFlowArtifact teamArt, final String forStateName, Composite composite, int horizontalSpan) { + super("\"" + forStateName + "\" State Reviews"); + this.managedForm = managedForm; + this.toolkit = toolkit; + this.teamArt = teamArt; + this.forStateName = forStateName; + this.composite = composite; + this.horizontalSpan = horizontalSpan; + reDisplay(); + } + + public void reDisplay() { + if (composite != null && composite.isDisposed()) { + return; + } + if (destroyableComposite != null) { + destroyableComposite.dispose(); + } + destroyableComposite = new Composite(composite, SWT.None); + destroyableComposite.setLayout(ALayout.getZeroMarginLayout(4, false)); + + setToolTip("Blocking Reviews must be completed before transtion. Select Review hyperlink to view."); + createWidgets(managedForm, destroyableComposite, horizontalSpan); + + try { + addAdminRightClickOption(); + Collection<ReviewSMArtifact> revArts = ReviewManager.getReviews(teamArt, forStateName); + if (revArts.isEmpty()) { + setValueText("No Reviews Created"); + } + + Hyperlink link = toolkit.createHyperlink(destroyableComposite, "[Add Decision Review]", SWT.NONE); + link.addHyperlinkListener(new IHyperlinkListener() { + + @Override + public void linkEntered(HyperlinkEvent e) { + // do nothing + } + + @Override + public void linkExited(HyperlinkEvent e) { + // do nothing + } + + @Override + public void linkActivated(HyperlinkEvent e) { + try { + StateListAndTitleDialog dialog = + new StateListAndTitleDialog("Create Decision Review", + "Select state to that review will be associated with.", + teamArt.getWorkFlowDefinition().getPageNames()); + dialog.setInitialSelections(new Object[] {forStateName}); + if (dialog.open() == 0) { + if (!Strings.isValid(dialog.getReviewTitle())) { + AWorkbench.popup("ERROR", "Must enter review title"); + return; + } + NewDecisionReviewJob job = + new NewDecisionReviewJob(teamArt, null, dialog.getReviewTitle(), dialog.getSelectedState(), + null, ReviewManager.getDefaultDecisionReviewOptions(), null); + job.setUser(true); + job.setPriority(Job.LONG); + job.schedule(); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + }); + + link = toolkit.createHyperlink(destroyableComposite, "[Add Peer to Peer Review]", SWT.NONE); + link.addHyperlinkListener(new IHyperlinkListener() { + + @Override + public void linkEntered(HyperlinkEvent e) { + // do nothing + } + + @Override + public void linkExited(HyperlinkEvent e) { + // do nothing + } + + @Override + public void linkActivated(HyperlinkEvent e) { + try { + StateListAndTitleDialog dialog = + new StateListAndTitleDialog("Add Peer to Peer Review", + "Select state to that review will be associated with.", + teamArt.getWorkFlowDefinition().getPageNames()); + dialog.setInitialSelections(new Object[] {forStateName}); + dialog.setReviewTitle(PeerToPeerReviewArtifact.getDefaultReviewTitle(teamArt)); + if (dialog.open() == 0) { + if (!Strings.isValid(dialog.getReviewTitle())) { + AWorkbench.popup("ERROR", "Must enter review title"); + return; + } + NewPeerToPeerReviewJob job = + new NewPeerToPeerReviewJob(teamArt, dialog.getReviewTitle(), dialog.getSelectedState()); + job.setUser(true); + job.setPriority(Job.LONG); + job.schedule(); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + }); + if (revArts.size() > 0) { + Composite workComp = toolkit.createContainer(destroyableComposite, 1); + workComp.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING)); + GridData gd = new GridData(); + gd.horizontalIndent = 20; + gd.horizontalSpan = 4; + workComp.setLayoutData(gd); + + for (ReviewSMArtifact revArt : revArts) { + createReviewHyperlink(workComp, managedForm, toolkit, 2, revArt, forStateName); + } + } + + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + + @Override + public String toString() { + try { + return "ReviewInfoXWidget for SMA \"" + teamArt + "\""; + } catch (Exception ex) { + return "ReviewInfoXWidget " + ex.getLocalizedMessage(); + } + } + + public static String toHTML(final TeamWorkFlowArtifact teamArt, String forStateName) throws OseeCoreException { + if (ReviewManager.getReviews(teamArt, forStateName).isEmpty()) { + return ""; + } + StringBuffer html = new StringBuffer(); + try { + html.append(AHTML.addSpace(1) + AHTML.getLabelStr(AHTML.LABEL_FONT, "\"" + forStateName + "\" State Reviews")); + html.append(AHTML.startBorderTable(100, Overview.normalColor, "")); + html.append(AHTML.addHeaderRowMultiColumnTable(new String[] {"Review Type", "Title", "ID"})); + for (ReviewSMArtifact art : ReviewManager.getReviews(teamArt, forStateName)) { + html.append(AHTML.addRowMultiColumnTable(new String[] { + art.getArtifactTypeName(), + art.getName(), + art.getHumanReadableId()})); + } + html.append(AHTML.endBorderTable()); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + return "Review Exception - " + ex.getLocalizedMessage(); + } + return html.toString(); + } + + public String toHTML() throws OseeCoreException { + return ReviewInfoXWidget.toHTML(teamArt, forStateName); + } + + private void createReviewHyperlink(Composite comp, IManagedForm managedForm, XFormToolkit toolkit, final int horizontalSpan, final ReviewSMArtifact revArt, String forStateName) throws OseeCoreException { + + Composite workComp = toolkit.createContainer(comp, 1); + workComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING)); + workComp.setLayout(ALayout.getZeroMarginLayout(3, false)); + + Label strLabel = new Label(workComp, SWT.NONE); + labelWidgets.add(strLabel); + if (revArt.isBlocking() && !revArt.isCancelledOrCompleted()) { + strLabel.setText("State Blocking [" + revArt.getArtifactTypeName() + "] must be completed: "); + IMessageManager messageManager = managedForm.getMessageManager(); + if (messageManager != null) { + messageManager.addMessage( + "validation.error", + "\"" + forStateName + "\" State has a blocking [" + revArt.getArtifactTypeName() + "] that must be completed.", + null, IMessageProvider.ERROR, strLabel); + } + } else if (!revArt.isCancelledOrCompleted()) { + strLabel.setText("Open [" + revArt.getArtifactTypeName() + "] exists: "); + IMessageManager messageManager = managedForm.getMessageManager(); + if (messageManager != null) { + messageManager.addMessage("validation.error", + "\"" + forStateName + "\" State has an open [" + revArt.getArtifactTypeName() + "].", null, + IMessageProvider.WARNING, strLabel); + } + } else { + strLabel.setText(revArt.getStateMgr().getCurrentStateName() + " [" + revArt.getArtifactTypeName() + "] exists: "); + } + + String str = "[" + revArt.getName() + "]"; + Hyperlink hyperLabel = + toolkit.createHyperlink(workComp, (str.length() > 300 ? Strings.truncate(str, 300) + "..." : str), SWT.NONE); + hyperLabel.setToolTipText("Select to open review"); + hyperLabel.addListener(SWT.MouseUp, new Listener() { + @Override + public void handleEvent(Event event) { + SMAEditor.editArtifact(revArt); + } + }); + } + + public void addAdminRightClickOption() throws OseeCoreException { + // If ATS Admin, allow right-click to auto-complete tasks + if (AtsUtil.isAtsAdmin() && !AtsUtil.isProductionDb()) { + labelWidget.addListener(SWT.MouseUp, new Listener() { + @Override + public void handleEvent(Event event) { + if (event.button == 3) { + if (!MessageDialog.openConfirm(Displays.getActiveShell(), "Auto Complete Reviews", + "ATS Admin\n\nAuto Complete Reviews?")) { + return; + } + try { + SkynetTransaction transaction = + new SkynetTransaction(AtsUtil.getAtsBranch(), "ATS Auto Complete Reviews"); + for (ReviewSMArtifact revArt : ReviewManager.getReviewsFromCurrentState(teamArt)) { + if (!revArt.isCancelledOrCompleted()) { + if (revArt.getStateMgr().isUnAssigned()) { + revArt.getStateMgr().setAssignee(UserManager.getUser()); + } + Result result = + revArt.transitionToCompleted("", transaction, + TransitionOption.OverrideTransitionValidityCheck, TransitionOption.Persist); + if (result.isFalse()) { + result.popup(); + return; + } + } + } + transaction.execute(); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + } + }); + } + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/StateHoursSpentXWidget.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/StateHoursSpentXWidget.java index de2444a3095..ee233f8d8da 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/StateHoursSpentXWidget.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/StateHoursSpentXWidget.java @@ -1,106 +1,106 @@ -/*******************************************************************************
- * 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.editor.widget;
-
-import java.util.Collections;
-import java.util.logging.Level;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.editor.SMAPromptChangeStatus;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.widgets.ReviewManager;
-import org.eclipse.osee.ats.workflow.AtsWorkPage;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.skynet.widgets.XHyperlinkLabelValueSelection;
-import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.forms.IManagedForm;
-
-/**
- * @author Donald G. Dunne
- */
-public class StateHoursSpentXWidget extends XHyperlinkLabelValueSelection {
-
- private final StateMachineArtifact sma;
- private final AtsWorkPage page;
- private final boolean isCurrentState;
-
- public StateHoursSpentXWidget(IManagedForm managedForm, AtsWorkPage page, final StateMachineArtifact sma, Composite composite, int horizontalSpan, XModifiedListener xModListener, boolean isCurrentState) {
- super("\"" + page.getName() + "\"" + " State Hours Spent");
- this.page = page;
- this.sma = sma;
- this.isCurrentState = isCurrentState;
- if (xModListener != null) {
- addXModifiedListener(xModListener);
- }
- setEditable(isCurrentState && !sma.isReadOnly());
- setFillHorizontally(true);
- setToolTip(TOOLTIP);
- super.createWidgets(managedForm, composite, horizontalSpan);
- }
-
- @Override
- public boolean handleSelection() {
- try {
- SMAPromptChangeStatus.promptChangeStatus(Collections.singleton(sma), false);
- sma.getEditor().onDirtied();
- return true;
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- return false;
- }
-
- public static String TOOLTIP = "Calculation: \n State Hours Spent: amount entered by user\n" +
- //
- " Task Hours Spent: total hours spent of all tasks related to state\n" +
- //
- " Review Hours Spent: total hours spent of all reviews related to state\n" +
- //
- "Total State Hours Spent: state hours + all task hours + all review hours";
-
- @Override
- public String getCurrentValue() {
- if (page == null) {
- return "page == null";
- }
- try {
- StringBuffer sb =
- new StringBuffer(String.format(" State Hours: %5.2f",
- sma.getStateMgr().getHoursSpent(page.getName())));
- setEditable(isCurrentState && !sma.isReadOnly());
- boolean breakoutNeeded = false;
- if (sma instanceof TaskableStateMachineArtifact) {
- if (((TaskableStateMachineArtifact) sma).hasTaskArtifacts()) {
- sb.append(String.format("\n Task Hours: %5.2f",
- ((TaskableStateMachineArtifact) sma).getHoursSpentFromTasks(page.getName())));
- breakoutNeeded = true;
- }
- }
- if (sma.isTeamWorkflow() && ReviewManager.hasReviews((TeamWorkFlowArtifact) sma)) {
- sb.append(String.format("\n Review Hours: %5.2f",
- ReviewManager.getHoursSpent((TeamWorkFlowArtifact) sma, page.getName())));
- breakoutNeeded = true;
- }
- if (breakoutNeeded) {
- setToolTip(sb.toString());
- return String.format("%5.2f", sma.getHoursSpentSMAStateTotal(page.getName()));
- } else {
- return String.format("%5.2f", sma.getStateMgr().getHoursSpent(page.getName()));
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return ex.getLocalizedMessage();
- }
- }
-}
+/******************************************************************************* + * 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.editor.widget; + +import java.util.Collections; +import java.util.logging.Level; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.editor.SMAPromptChangeStatus; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.widgets.ReviewManager; +import org.eclipse.osee.ats.workflow.AtsWorkPage; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.skynet.widgets.XHyperlinkLabelValueSelection; +import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.forms.IManagedForm; + +/** + * @author Donald G. Dunne + */ +public class StateHoursSpentXWidget extends XHyperlinkLabelValueSelection { + + private final StateMachineArtifact sma; + private final AtsWorkPage page; + private final boolean isCurrentState; + + public StateHoursSpentXWidget(IManagedForm managedForm, AtsWorkPage page, final StateMachineArtifact sma, Composite composite, int horizontalSpan, XModifiedListener xModListener, boolean isCurrentState) { + super("\"" + page.getName() + "\"" + " State Hours Spent"); + this.page = page; + this.sma = sma; + this.isCurrentState = isCurrentState; + if (xModListener != null) { + addXModifiedListener(xModListener); + } + setEditable(isCurrentState && !sma.isReadOnly()); + setFillHorizontally(true); + setToolTip(TOOLTIP); + super.createWidgets(managedForm, composite, horizontalSpan); + } + + @Override + public boolean handleSelection() { + try { + SMAPromptChangeStatus.promptChangeStatus(Collections.singleton(sma), false); + sma.getEditor().onDirtied(); + return true; + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + return false; + } + + public static String TOOLTIP = "Calculation: \n State Hours Spent: amount entered by user\n" + + // + " Task Hours Spent: total hours spent of all tasks related to state\n" + + // + " Review Hours Spent: total hours spent of all reviews related to state\n" + + // + "Total State Hours Spent: state hours + all task hours + all review hours"; + + @Override + public String getCurrentValue() { + if (page == null) { + return "page == null"; + } + try { + StringBuffer sb = + new StringBuffer(String.format(" State Hours: %5.2f", + sma.getStateMgr().getHoursSpent(page.getName()))); + setEditable(isCurrentState && !sma.isReadOnly()); + boolean breakoutNeeded = false; + if (sma instanceof TaskableStateMachineArtifact) { + if (((TaskableStateMachineArtifact) sma).hasTaskArtifacts()) { + sb.append(String.format("\n Task Hours: %5.2f", + ((TaskableStateMachineArtifact) sma).getHoursSpentFromTasks(page.getName()))); + breakoutNeeded = true; + } + } + if (sma.isTeamWorkflow() && ReviewManager.hasReviews((TeamWorkFlowArtifact) sma)) { + sb.append(String.format("\n Review Hours: %5.2f", + ReviewManager.getHoursSpent((TeamWorkFlowArtifact) sma, page.getName()))); + breakoutNeeded = true; + } + if (breakoutNeeded) { + setToolTip(sb.toString()); + return String.format("%5.2f", sma.getHoursSpentSMAStateTotal(page.getName())); + } else { + return String.format("%5.2f", sma.getStateMgr().getHoursSpent(page.getName())); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + return ex.getLocalizedMessage(); + } + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/StatePercentCompleteXWidget.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/StatePercentCompleteXWidget.java index 4a3fb1836c2..bd7a4b9fa2f 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/StatePercentCompleteXWidget.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/StatePercentCompleteXWidget.java @@ -1,111 +1,111 @@ -/*******************************************************************************
- * 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.editor.widget;
-
-import java.util.Collections;
-import java.util.logging.Level;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.editor.SMAPromptChangeStatus;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.widgets.ReviewManager;
-import org.eclipse.osee.ats.workflow.AtsWorkPage;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.skynet.widgets.XHyperlinkLabelValueSelection;
-import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.forms.IManagedForm;
-
-/**
- * @author Donald G. Dunne
- */
-public class StatePercentCompleteXWidget extends XHyperlinkLabelValueSelection {
-
- private final StateMachineArtifact sma;
- private final AtsWorkPage page;
- private final boolean isCurrentState;
-
- public StatePercentCompleteXWidget(IManagedForm managedForm, AtsWorkPage page, final StateMachineArtifact sma, Composite composite, int horizontalSpan, XModifiedListener xModListener, boolean isCurrentState) {
- super("\"" + page.getName() + "\"" + " State Percent Complete");
- this.page = page;
- this.sma = sma;
- this.isCurrentState = isCurrentState;
- if (xModListener != null) {
- addXModifiedListener(xModListener);
- }
- setEditable(isCurrentState && !sma.isReadOnly());
- setFillHorizontally(true);
- setToolTip(TOOLTIP);
- super.createWidgets(managedForm, composite, horizontalSpan);
- }
-
- @Override
- public boolean handleSelection() {
- try {
- SMAPromptChangeStatus.promptChangeStatus(Collections.singleton(sma), false);
- sma.getEditor().onDirtied();
- return true;
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- return false;
- }
-
- public static String TOOLTIP = "Calculation: \n State Percent: amount entered by user\n" +
- //
- " Task Percent: total percent of all tasks related to state / number of tasks related to state\n" +
- //
- " Review Percent: total percent of all reviews related to state / number of reviews related to state\n" +
- //
- "Total State Percent: state percent + all task percents + all review percents / 1 + num tasks + num reviews";
-
- @Override
- public String getCurrentValue() {
- if (page == null) {
- return "page == null";
- }
- try {
- setEditable(isCurrentState && !sma.isReadOnly());
- StringBuffer sb =
- new StringBuffer(String.format(" State Percent: %d",
- sma.getStateMgr().getPercentComplete(page.getName())));
- boolean breakoutNeeded = false;
- if (sma instanceof TaskableStateMachineArtifact) {
- if (((TaskableStateMachineArtifact) sma).hasTaskArtifacts()) {
- sb.append(String.format("\n Task Percent: %d",
- ((TaskableStateMachineArtifact) sma).getPercentCompleteFromTasks(page.getName())));
- breakoutNeeded = true;
- }
- }
- if (sma.isTeamWorkflow()) {
- if (ReviewManager.hasReviews((TeamWorkFlowArtifact) sma)) {
- sb.append(String.format("\n Review Percent: %d",
- ReviewManager.getPercentComplete((TeamWorkFlowArtifact) sma, page.getName())));
- breakoutNeeded = true;
- }
- }
- if (breakoutNeeded) {
- if (!getControl().isDisposed()) {
- setToolTip(sb.toString() + "\n" + TOOLTIP);
- }
- return String.valueOf(sma.getPercentCompleteSMAStateTotal(page.getName()));
- } else {
- return String.valueOf(sma.getStateMgr().getPercentComplete(page.getName()));
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return ex.getLocalizedMessage();
- }
- }
-
-}
+/******************************************************************************* + * 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.editor.widget; + +import java.util.Collections; +import java.util.logging.Level; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.editor.SMAPromptChangeStatus; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.widgets.ReviewManager; +import org.eclipse.osee.ats.workflow.AtsWorkPage; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.skynet.widgets.XHyperlinkLabelValueSelection; +import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.forms.IManagedForm; + +/** + * @author Donald G. Dunne + */ +public class StatePercentCompleteXWidget extends XHyperlinkLabelValueSelection { + + private final StateMachineArtifact sma; + private final AtsWorkPage page; + private final boolean isCurrentState; + + public StatePercentCompleteXWidget(IManagedForm managedForm, AtsWorkPage page, final StateMachineArtifact sma, Composite composite, int horizontalSpan, XModifiedListener xModListener, boolean isCurrentState) { + super("\"" + page.getName() + "\"" + " State Percent Complete"); + this.page = page; + this.sma = sma; + this.isCurrentState = isCurrentState; + if (xModListener != null) { + addXModifiedListener(xModListener); + } + setEditable(isCurrentState && !sma.isReadOnly()); + setFillHorizontally(true); + setToolTip(TOOLTIP); + super.createWidgets(managedForm, composite, horizontalSpan); + } + + @Override + public boolean handleSelection() { + try { + SMAPromptChangeStatus.promptChangeStatus(Collections.singleton(sma), false); + sma.getEditor().onDirtied(); + return true; + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + return false; + } + + public static String TOOLTIP = "Calculation: \n State Percent: amount entered by user\n" + + // + " Task Percent: total percent of all tasks related to state / number of tasks related to state\n" + + // + " Review Percent: total percent of all reviews related to state / number of reviews related to state\n" + + // + "Total State Percent: state percent + all task percents + all review percents / 1 + num tasks + num reviews"; + + @Override + public String getCurrentValue() { + if (page == null) { + return "page == null"; + } + try { + setEditable(isCurrentState && !sma.isReadOnly()); + StringBuffer sb = + new StringBuffer(String.format(" State Percent: %d", + sma.getStateMgr().getPercentComplete(page.getName()))); + boolean breakoutNeeded = false; + if (sma instanceof TaskableStateMachineArtifact) { + if (((TaskableStateMachineArtifact) sma).hasTaskArtifacts()) { + sb.append(String.format("\n Task Percent: %d", + ((TaskableStateMachineArtifact) sma).getPercentCompleteFromTasks(page.getName()))); + breakoutNeeded = true; + } + } + if (sma.isTeamWorkflow()) { + if (ReviewManager.hasReviews((TeamWorkFlowArtifact) sma)) { + sb.append(String.format("\n Review Percent: %d", + ReviewManager.getPercentComplete((TeamWorkFlowArtifact) sma, page.getName()))); + breakoutNeeded = true; + } + } + if (breakoutNeeded) { + if (!getControl().isDisposed()) { + setToolTip(sb.toString() + "\n" + TOOLTIP); + } + return String.valueOf(sma.getPercentCompleteSMAStateTotal(page.getName())); + } else { + return String.valueOf(sma.getStateMgr().getPercentComplete(page.getName())); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + return ex.getLocalizedMessage(); + } + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/TaskInfoXWidget.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/TaskInfoXWidget.java index ec45d38249d..2ed7ea672f4 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/TaskInfoXWidget.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/widget/TaskInfoXWidget.java @@ -1,137 +1,137 @@ -/*******************************************************************************
- * 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.editor.widget;
-
-import java.util.logging.Level;
-import org.eclipse.jface.dialogs.IMessageProvider;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact.TransitionOption;
-import org.eclipse.osee.ats.artifact.TaskArtifact;
-import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.UserManager;
-import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.skynet.widgets.XLabelValueBase;
-import org.eclipse.osee.framework.ui.swt.Displays;
-import org.eclipse.osee.framework.ui.swt.Widgets;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.ui.forms.IManagedForm;
-import org.eclipse.ui.forms.IMessageManager;
-
-/**
- * <REM2> handled through SMAEditorEventManager
- *
- * @author Donald G. Dunne
- */
-public class TaskInfoXWidget extends XLabelValueBase {
-
- private final String forStateName;
- private final IManagedForm managedForm;
- private final TaskableStateMachineArtifact taskableArt;
-
- public TaskInfoXWidget(IManagedForm managedForm, final TaskableStateMachineArtifact taskableArt, final String forStateName, Composite composite, int horizontalSpan) {
- super("\"" + forStateName + "\" State Tasks");
- this.managedForm = managedForm;
- this.taskableArt = taskableArt;
- this.forStateName = forStateName;
- setToolTip("Tasks must be completed before transtion. Select \"Task\" tab to view tasks");
- setFillHorizontally(true);
- createWidgets(managedForm, composite, horizontalSpan);
- addAdminRightClickOption();
- }
-
- @Override
- public String toString() {
- try {
- return "TaskInfoXWidget for SMA \"" + taskableArt + "\"";
- } catch (Exception ex) {
- return "TaskInfoXWidget " + ex.getLocalizedMessage();
- }
- }
-
- @Override
- public void refresh() {
- if (labelWidget == null || labelWidget.isDisposed() || managedForm == null || managedForm.getForm() == null || managedForm.getForm().isDisposed()) {
- dispose();
- }
- try {
- if (taskableArt.getTaskArtifacts(forStateName).size() > 0) {
- setValueText(taskableArt.getStatus(forStateName));
- } else {
- setValueText("No Tasks Created");
- }
- if (taskableArt.areTasksComplete(forStateName).isFalse()) {
- IMessageManager messageManager = managedForm.getMessageManager();
- if (messageManager != null) {
- messageManager.addMessage("validation.error", "State \"" + forStateName + "\" has uncompleted Tasks",
- null, IMessageProvider.ERROR, labelWidget);
- }
- } else {
- if (Widgets.isAccessible(managedForm.getForm())) {
- managedForm.getMessageManager().removeMessage("validation.error", labelWidget);
- }
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
-
- public void addAdminRightClickOption() {
- try {
- // If ATS Admin, allow right-click to auto-complete tasks
- if (AtsUtil.isAtsAdmin() && !AtsUtil.isProductionDb()) {
- labelWidget.addListener(SWT.MouseUp, new Listener() {
- @Override
- public void handleEvent(Event event) {
- if (event.button == 3) {
- if (!MessageDialog.openConfirm(Displays.getActiveShell(), "Auto Complete Tasks",
- "ATS Admin\n\nAuto Complete Tasks?")) {
- return;
- }
- try {
- SkynetTransaction transaction =
- new SkynetTransaction(AtsUtil.getAtsBranch(), "ATS Auto Complete Tasks");
- for (TaskArtifact taskArt : taskableArt.getTaskArtifacts(forStateName)) {
- if (!taskArt.isCancelledOrCompleted()) {
- if (taskArt.getStateMgr().isUnAssigned()) {
- taskArt.getStateMgr().setAssignee(UserManager.getUser());
- }
- Result result =
- taskArt.transitionToCompleted("", transaction,
- TransitionOption.OverrideTransitionValidityCheck, TransitionOption.Persist);
- if (result.isFalse()) {
- result.popup();
- return;
- }
- }
- }
- transaction.execute();
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
- }
- });
- }
-
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-}
+/******************************************************************************* + * 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.editor.widget; + +import java.util.logging.Level; +import org.eclipse.jface.dialogs.IMessageProvider; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.osee.ats.artifact.StateMachineArtifact.TransitionOption; +import org.eclipse.osee.ats.artifact.TaskArtifact; +import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.UserManager; +import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.skynet.widgets.XLabelValueBase; +import org.eclipse.osee.framework.ui.swt.Displays; +import org.eclipse.osee.framework.ui.swt.Widgets; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.ui.forms.IManagedForm; +import org.eclipse.ui.forms.IMessageManager; + +/** + * <REM2> handled through SMAEditorEventManager + * + * @author Donald G. Dunne + */ +public class TaskInfoXWidget extends XLabelValueBase { + + private final String forStateName; + private final IManagedForm managedForm; + private final TaskableStateMachineArtifact taskableArt; + + public TaskInfoXWidget(IManagedForm managedForm, final TaskableStateMachineArtifact taskableArt, final String forStateName, Composite composite, int horizontalSpan) { + super("\"" + forStateName + "\" State Tasks"); + this.managedForm = managedForm; + this.taskableArt = taskableArt; + this.forStateName = forStateName; + setToolTip("Tasks must be completed before transtion. Select \"Task\" tab to view tasks"); + setFillHorizontally(true); + createWidgets(managedForm, composite, horizontalSpan); + addAdminRightClickOption(); + } + + @Override + public String toString() { + try { + return "TaskInfoXWidget for SMA \"" + taskableArt + "\""; + } catch (Exception ex) { + return "TaskInfoXWidget " + ex.getLocalizedMessage(); + } + } + + @Override + public void refresh() { + if (labelWidget == null || labelWidget.isDisposed() || managedForm == null || managedForm.getForm() == null || managedForm.getForm().isDisposed()) { + dispose(); + } + try { + if (taskableArt.getTaskArtifacts(forStateName).size() > 0) { + setValueText(taskableArt.getStatus(forStateName)); + } else { + setValueText("No Tasks Created"); + } + if (taskableArt.areTasksComplete(forStateName).isFalse()) { + IMessageManager messageManager = managedForm.getMessageManager(); + if (messageManager != null) { + messageManager.addMessage("validation.error", "State \"" + forStateName + "\" has uncompleted Tasks", + null, IMessageProvider.ERROR, labelWidget); + } + } else { + if (Widgets.isAccessible(managedForm.getForm())) { + managedForm.getMessageManager().removeMessage("validation.error", labelWidget); + } + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + + public void addAdminRightClickOption() { + try { + // If ATS Admin, allow right-click to auto-complete tasks + if (AtsUtil.isAtsAdmin() && !AtsUtil.isProductionDb()) { + labelWidget.addListener(SWT.MouseUp, new Listener() { + @Override + public void handleEvent(Event event) { + if (event.button == 3) { + if (!MessageDialog.openConfirm(Displays.getActiveShell(), "Auto Complete Tasks", + "ATS Admin\n\nAuto Complete Tasks?")) { + return; + } + try { + SkynetTransaction transaction = + new SkynetTransaction(AtsUtil.getAtsBranch(), "ATS Auto Complete Tasks"); + for (TaskArtifact taskArt : taskableArt.getTaskArtifacts(forStateName)) { + if (!taskArt.isCancelledOrCompleted()) { + if (taskArt.getStateMgr().isUnAssigned()) { + taskArt.getStateMgr().setAssignee(UserManager.getUser()); + } + Result result = + taskArt.transitionToCompleted("", transaction, + TransitionOption.OverrideTransitionValidityCheck, TransitionOption.Persist); + if (result.isFalse()) { + result.popup(); + return; + } + } + } + transaction.execute(); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + } + }); + } + + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/export/AtsExportManager.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/export/AtsExportManager.java index c784a0b0303..4f8f4c87296 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/export/AtsExportManager.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/export/AtsExportManager.java @@ -1,189 +1,189 @@ -/*******************************************************************************
- * 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.export;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.osee.ats.artifact.ActionArtifact;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.ats.editor.SMAPrint;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.world.WorldEditor;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.jdk.core.util.AHTML;
-import org.eclipse.osee.framework.jdk.core.util.Collections;
-import org.eclipse.osee.framework.jdk.core.util.Lib;
-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.ui.plugin.util.AWorkbench;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
-import org.eclipse.osee.framework.ui.skynet.results.ResultsEditor;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-import org.eclipse.search.ui.text.Match;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * @author Donald G. Dunne
- */
-public class AtsExportManager extends Action {
-
- private final TreeViewer treeViewer;
-
- public AtsExportManager(WorldEditor worldEditor) {
- this(worldEditor.getWorldComposite().getXViewer());
- }
-
- public AtsExportManager(TreeViewer treeViewer) {
- setText("Export Selected ATS Artifacts");
- setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.EXPORT_DATA));
- this.treeViewer = treeViewer;
- }
-
- public enum ExportOption {
- NONE,
- POPUP_DIALOG,
- AS_HTML_TO_RESULT_EDITOR,
- AS_HTML_TO_FILE,
- AS_PDF,
- MERGE_INTO_SINGLE_FILE,
- SAVE_INTO_SEPARATE_FILES,
- INCLUDE_TASKLIST;
-
- };
-
- public static Collection<StateMachineArtifact> getSmaArts(Collection<? extends Artifact> artifacts) throws OseeCoreException {
- Set<StateMachineArtifact> smaArts = new HashSet<StateMachineArtifact>();
- for (Artifact artifact : artifacts) {
- if (artifact instanceof StateMachineArtifact) {
- smaArts.add((StateMachineArtifact) artifact);
- } else if (artifact instanceof ActionArtifact) {
- smaArts.addAll(((ActionArtifact) artifact).getTeamWorkFlowArtifacts());
- }
- }
- return smaArts;
- }
-
- public static Collection<StateMachineArtifact> getSmaArts(ISelection selection) throws OseeCoreException {
- Set<StateMachineArtifact> smaArts = new HashSet<StateMachineArtifact>();
- if (selection != null) {
- Iterator<?> selectionIterator = ((IStructuredSelection) selection).iterator();
- while (selectionIterator.hasNext()) {
- Object selectedObject = selectionIterator.next();
-
- if (selectedObject instanceof Match) {
- selectedObject = ((Match) selectedObject).getElement();
- } else if (selectedObject instanceof IAdaptable) {
- selectedObject = ((IAdaptable) selectedObject).getAdapter(Artifact.class);
- }
-
- if (selectedObject instanceof StateMachineArtifact) {
- smaArts.add((StateMachineArtifact) selectedObject);
- } else if (selectedObject instanceof ActionArtifact) {
- smaArts.addAll(((ActionArtifact) selectedObject).getTeamWorkFlowArtifacts());
- } else {
+/******************************************************************************* + * 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.export; + +import java.io.File; +import java.io.IOException; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.window.Window; +import org.eclipse.jface.wizard.WizardDialog; +import org.eclipse.osee.ats.artifact.ActionArtifact; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.editor.SMAPrint; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.world.WorldEditor; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.AHTML; +import org.eclipse.osee.framework.jdk.core.util.Collections; +import org.eclipse.osee.framework.jdk.core.util.Lib; +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.ui.plugin.util.AWorkbench; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.skynet.FrameworkImage; +import org.eclipse.osee.framework.ui.skynet.results.ResultsEditor; +import org.eclipse.osee.framework.ui.swt.ImageManager; +import org.eclipse.search.ui.text.Match; +import org.eclipse.ui.PlatformUI; + +/** + * @author Donald G. Dunne + */ +public class AtsExportManager extends Action { + + private final TreeViewer treeViewer; + + public AtsExportManager(WorldEditor worldEditor) { + this(worldEditor.getWorldComposite().getXViewer()); + } + + public AtsExportManager(TreeViewer treeViewer) { + setText("Export Selected ATS Artifacts"); + setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.EXPORT_DATA)); + this.treeViewer = treeViewer; + } + + public enum ExportOption { + NONE, + POPUP_DIALOG, + AS_HTML_TO_RESULT_EDITOR, + AS_HTML_TO_FILE, + AS_PDF, + MERGE_INTO_SINGLE_FILE, + SAVE_INTO_SEPARATE_FILES, + INCLUDE_TASKLIST; + + }; + + public static Collection<StateMachineArtifact> getSmaArts(Collection<? extends Artifact> artifacts) throws OseeCoreException { + Set<StateMachineArtifact> smaArts = new HashSet<StateMachineArtifact>(); + for (Artifact artifact : artifacts) { + if (artifact instanceof StateMachineArtifact) { + smaArts.add((StateMachineArtifact) artifact); + } else if (artifact instanceof ActionArtifact) { + smaArts.addAll(((ActionArtifact) artifact).getTeamWorkFlowArtifacts()); + } + } + return smaArts; + } + + public static Collection<StateMachineArtifact> getSmaArts(ISelection selection) throws OseeCoreException { + Set<StateMachineArtifact> smaArts = new HashSet<StateMachineArtifact>(); + if (selection != null) { + Iterator<?> selectionIterator = ((IStructuredSelection) selection).iterator(); + while (selectionIterator.hasNext()) { + Object selectedObject = selectionIterator.next(); + + if (selectedObject instanceof Match) { + selectedObject = ((Match) selectedObject).getElement(); + } else if (selectedObject instanceof IAdaptable) { + selectedObject = ((IAdaptable) selectedObject).getAdapter(Artifact.class); + } + + if (selectedObject instanceof StateMachineArtifact) { + smaArts.add((StateMachineArtifact) selectedObject); + } else if (selectedObject instanceof ActionArtifact) { + smaArts.addAll(((ActionArtifact) selectedObject).getTeamWorkFlowArtifacts()); + } else { OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Expected selection to be of type Artifact"); - }
- }
- }
- return smaArts;
- }
-
- public static Result export(ISelection selection, ExportOption... exportOption) throws OseeCoreException {
- return export(getSmaArts(selection), exportOption);
- }
-
- public static Result export(Collection<? extends Artifact> artifacts, ExportOption... exportOption) throws OseeCoreException {
- Collection<ExportOption> exportOptions = Collections.getAggregate(exportOption);
- if (exportOptions.contains(ExportOption.POPUP_DIALOG)) {
- AtsExportWizard exportWizard = new AtsExportWizard(getSmaArts(artifacts));
- WizardDialog dialog =
- new WizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), exportWizard);
- if (dialog.open() == Window.OK) {
- Collection<ExportOption> selectedExportOptions = exportWizard.getSelectedExportOptions();
- boolean singleFile = selectedExportOptions.contains(ExportOption.MERGE_INTO_SINGLE_FILE);
- boolean asHtmlToFile = selectedExportOptions.contains(ExportOption.AS_HTML_TO_FILE);
- boolean asHtmlToResultEditor = selectedExportOptions.contains(ExportOption.AS_HTML_TO_RESULT_EDITOR);
- boolean multipleFile = selectedExportOptions.contains(ExportOption.SAVE_INTO_SEPARATE_FILES);
- boolean includeTaskList = selectedExportOptions.contains(ExportOption.INCLUDE_TASKLIST);
- if (asHtmlToFile || asHtmlToResultEditor) {
- StringBuffer singleSb = new StringBuffer();
- for (Artifact artifact : artifacts) {
- if (artifact instanceof StateMachineArtifact) {
- SMAPrint smaPrint = new SMAPrint(((StateMachineArtifact) artifact));
- smaPrint.setIncludeTaskList(includeTaskList);
- String html = smaPrint.getResultData().getReport("").getManipulatedHtml();
- if (multipleFile) {
- try {
- if (asHtmlToFile) {
- File file =
- new File(
- exportWizard.getFileLocation() + "\\" + artifact.getHumanReadableId() + ".html");
- Lib.writeStringToFile(html, file);
- }
- if (asHtmlToResultEditor) {
- ResultsEditor.open("Output", "Export " + artifact.getHumanReadableId(), html);
- }
- } catch (IOException ex) {
- throw new OseeCoreException("Error writing to html file", ex);
- }
- }
- if (singleFile) {
- singleSb.append(html + AHTML.newline(3));
- }
- }
- }
- if (singleFile) {
- try {
- if (asHtmlToFile) {
- File file = new File(exportWizard.getFileLocation() + "\\ATS_Export.html");
- Lib.writeStringToFile(singleSb.toString(), file);
- }
- if (asHtmlToResultEditor) {
- ResultsEditor.open("Output", "Export ATS Artifacts", singleSb.toString());
- }
- } catch (IOException ex) {
- throw new OseeCoreException("Error writing to html file", ex);
- }
- }
- AWorkbench.popup("Export Completed", "Export Completed");
- }
- if (selectedExportOptions.contains(ExportOption.AS_PDF)) {
- AWorkbench.popup("ERROR", "AS_PDF Not Implemented Yet");
- }
- }
- }
- return Result.TrueResult;
- }
-
- @Override
- public void run() {
- if (treeViewer != null) {
- try {
- AtsExportManager.export(treeViewer.getSelection(), ExportOption.POPUP_DIALOG);
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
- }
-}
+ } + } + } + return smaArts; + } + + public static Result export(ISelection selection, ExportOption... exportOption) throws OseeCoreException { + return export(getSmaArts(selection), exportOption); + } + + public static Result export(Collection<? extends Artifact> artifacts, ExportOption... exportOption) throws OseeCoreException { + Collection<ExportOption> exportOptions = Collections.getAggregate(exportOption); + if (exportOptions.contains(ExportOption.POPUP_DIALOG)) { + AtsExportWizard exportWizard = new AtsExportWizard(getSmaArts(artifacts)); + WizardDialog dialog = + new WizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), exportWizard); + if (dialog.open() == Window.OK) { + Collection<ExportOption> selectedExportOptions = exportWizard.getSelectedExportOptions(); + boolean singleFile = selectedExportOptions.contains(ExportOption.MERGE_INTO_SINGLE_FILE); + boolean asHtmlToFile = selectedExportOptions.contains(ExportOption.AS_HTML_TO_FILE); + boolean asHtmlToResultEditor = selectedExportOptions.contains(ExportOption.AS_HTML_TO_RESULT_EDITOR); + boolean multipleFile = selectedExportOptions.contains(ExportOption.SAVE_INTO_SEPARATE_FILES); + boolean includeTaskList = selectedExportOptions.contains(ExportOption.INCLUDE_TASKLIST); + if (asHtmlToFile || asHtmlToResultEditor) { + StringBuffer singleSb = new StringBuffer(); + for (Artifact artifact : artifacts) { + if (artifact instanceof StateMachineArtifact) { + SMAPrint smaPrint = new SMAPrint(((StateMachineArtifact) artifact)); + smaPrint.setIncludeTaskList(includeTaskList); + String html = smaPrint.getResultData().getReport("").getManipulatedHtml(); + if (multipleFile) { + try { + if (asHtmlToFile) { + File file = + new File( + exportWizard.getFileLocation() + "\\" + artifact.getHumanReadableId() + ".html"); + Lib.writeStringToFile(html, file); + } + if (asHtmlToResultEditor) { + ResultsEditor.open("Output", "Export " + artifact.getHumanReadableId(), html); + } + } catch (IOException ex) { + throw new OseeCoreException("Error writing to html file", ex); + } + } + if (singleFile) { + singleSb.append(html + AHTML.newline(3)); + } + } + } + if (singleFile) { + try { + if (asHtmlToFile) { + File file = new File(exportWizard.getFileLocation() + "\\ATS_Export.html"); + Lib.writeStringToFile(singleSb.toString(), file); + } + if (asHtmlToResultEditor) { + ResultsEditor.open("Output", "Export ATS Artifacts", singleSb.toString()); + } + } catch (IOException ex) { + throw new OseeCoreException("Error writing to html file", ex); + } + } + AWorkbench.popup("Export Completed", "Export Completed"); + } + if (selectedExportOptions.contains(ExportOption.AS_PDF)) { + AWorkbench.popup("ERROR", "AS_PDF Not Implemented Yet"); + } + } + } + return Result.TrueResult; + } + + @Override + public void run() { + if (treeViewer != null) { + try { + AtsExportManager.export(treeViewer.getSelection(), ExportOption.POPUP_DIALOG); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/export/AtsExportPage.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/export/AtsExportPage.java index c4610e72fb6..4e6b2a4c049 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/export/AtsExportPage.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/export/AtsExportPage.java @@ -1,162 +1,162 @@ -/*******************************************************************************
- * 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.export;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.osee.ats.export.AtsExportManager.ExportOption;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.skynet.widgets.XCheckBox;
-import org.eclipse.osee.framework.ui.skynet.widgets.XFileTextWithSelectionDialog;
-import org.eclipse.osee.framework.ui.skynet.widgets.XFileTextWithSelectionDialog.Type;
-import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
-import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
-import org.eclipse.osee.framework.ui.swt.Displays;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.dialogs.WizardDataTransferPage;
-
-/**
- * @author Donald G. Dunne
- */
-public class AtsExportPage extends WizardDataTransferPage {
- private final List<XCheckBox> checkBoxes = new ArrayList<XCheckBox>();
- private XFileTextWithSelectionDialog xFileSel;
- private String fileLocation;
- private final Collection<ExportOption> selectedExportOptions = new ArrayList<ExportOption>();
- private final Collection<? extends Artifact> artifacts;
-
- public AtsExportPage(IStructuredSelection selection) throws OseeCoreException {
- super("Main");
- this.artifacts = AtsExportManager.getSmaArts(selection);
- }
-
- public AtsExportPage(Collection<? extends Artifact> artifacts) {
- super("Main");
- this.artifacts = artifacts;
- }
-
- @Override
- protected boolean allowNewContainerName() {
- return false;
- }
-
- @Override
- public void handleEvent(Event event) {
- // do nothing
- }
-
- @Override
- public void createControl(Composite parent) {
- initializeDialogUnits(parent);
- setTitle("Export ATS Artifacts");
- setMessage("Select export options and export location.");
- Composite composite = new Composite(parent, SWT.NULL);
- composite.setLayout(new GridLayout(2, false));
- composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));
- composite.setFont(parent.getFont());
-
- Label label = new Label(composite, SWT.NONE);
- if (artifacts.isEmpty()) {
- label.setText("Error: No ATS Artifacts input. Close wizard and re-perform selection.");
- label.setBackground(Displays.getSystemColor(SWT.COLOR_RED));
- } else {
- label.setText("Selected " + artifacts.size() + " ATS Artifact to export.");
- }
- GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
- gridData.horizontalSpan = 2;
- label.setLayoutData(gridData);
-
- XModifiedListener modifyListener = new XModifiedListener() {
- @Override
- public void widgetModified(XWidget widget) {
- handleModified();
- }
- };
-
- List<ExportOption> validExportOptions = new ArrayList<ExportOption>();
- validExportOptions.addAll(Arrays.asList(ExportOption.values()));
- validExportOptions.remove(ExportOption.POPUP_DIALOG);
- validExportOptions.remove(ExportOption.NONE);
-
- for (ExportOption exportOption : validExportOptions) {
- XCheckBox checkBox = new XCheckBox(exportOption.name());
- checkBox.setLabelAfter(true);
- checkBox.createWidgets(composite, 2);
- if (selectedExportOptions.contains(exportOption)) {
- checkBox.set(true);
- }
- checkBox.addXModifiedListener(modifyListener);
- checkBoxes.add(checkBox);
- }
-
- xFileSel = new XFileTextWithSelectionDialog("Export Location", Type.Directory);
- xFileSel.createWidgets(composite, 2);
- xFileSel.addXModifiedListener(modifyListener);
-
- setPageComplete(determinePageCompletion());
- setControl(composite);
- }
-
- public Result isEntryValid() {
- if (artifacts.isEmpty()) {
- return new Result("No Artifacts selected. Cancel wizard and try again.");
- }
- if (!selectedExportOptions.contains(ExportOption.AS_HTML_TO_FILE) && !selectedExportOptions.contains(ExportOption.AS_HTML_TO_RESULT_EDITOR) && !selectedExportOptions.contains(ExportOption.AS_PDF)) {
- return new Result("Must select at least one export AS_ option.");
- }
- if (!selectedExportOptions.contains(ExportOption.MERGE_INTO_SINGLE_FILE) && !selectedExportOptions.contains(ExportOption.SAVE_INTO_SEPARATE_FILES)) {
- return new Result("Must select \"MERGE_INTO_SINGLE_FILE\" or \"SAVE_INTO_SEPARATE_FILES\"");
- }
- if (selectedExportOptions.contains(ExportOption.AS_HTML_TO_FILE) || selectedExportOptions.contains(ExportOption.AS_PDF)) {
- if (xFileSel.get().equals("")) {
- return new Result(
- "Must select \"Export Location\" for \"" + ExportOption.AS_HTML_TO_FILE + "\" or \"" + ExportOption.AS_PDF + "\" options.");
- }
- if (!new File(xFileSel.get()).isDirectory()) {
- return new Result("Invalid Directory");
- }
- }
- return Result.TrueResult;
- }
-
- public void handleModified() {
- for (XCheckBox checkBox : checkBoxes) {
- ExportOption exportOption = ExportOption.valueOf(checkBox.getLabel());
- if (checkBox.isSelected()) {
- selectedExportOptions.add(exportOption);
- } else {
- selectedExportOptions.remove(exportOption);
- }
- }
- fileLocation = xFileSel.get();
- }
-
- public Collection<ExportOption> getSelectedExportOptions() {
- return selectedExportOptions;
- }
-
- public String getFileLocation() {
- return fileLocation;
- }
-
+/******************************************************************************* + * 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.export; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.osee.ats.export.AtsExportManager.ExportOption; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.skynet.widgets.XCheckBox; +import org.eclipse.osee.framework.ui.skynet.widgets.XFileTextWithSelectionDialog; +import org.eclipse.osee.framework.ui.skynet.widgets.XFileTextWithSelectionDialog.Type; +import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener; +import org.eclipse.osee.framework.ui.skynet.widgets.XWidget; +import org.eclipse.osee.framework.ui.swt.Displays; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Label; +import org.eclipse.ui.dialogs.WizardDataTransferPage; + +/** + * @author Donald G. Dunne + */ +public class AtsExportPage extends WizardDataTransferPage { + private final List<XCheckBox> checkBoxes = new ArrayList<XCheckBox>(); + private XFileTextWithSelectionDialog xFileSel; + private String fileLocation; + private final Collection<ExportOption> selectedExportOptions = new ArrayList<ExportOption>(); + private final Collection<? extends Artifact> artifacts; + + public AtsExportPage(IStructuredSelection selection) throws OseeCoreException { + super("Main"); + this.artifacts = AtsExportManager.getSmaArts(selection); + } + + public AtsExportPage(Collection<? extends Artifact> artifacts) { + super("Main"); + this.artifacts = artifacts; + } + + @Override + protected boolean allowNewContainerName() { + return false; + } + + @Override + public void handleEvent(Event event) { + // do nothing + } + + @Override + public void createControl(Composite parent) { + initializeDialogUnits(parent); + setTitle("Export ATS Artifacts"); + setMessage("Select export options and export location."); + Composite composite = new Composite(parent, SWT.NULL); + composite.setLayout(new GridLayout(2, false)); + composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL)); + composite.setFont(parent.getFont()); + + Label label = new Label(composite, SWT.NONE); + if (artifacts.isEmpty()) { + label.setText("Error: No ATS Artifacts input. Close wizard and re-perform selection."); + label.setBackground(Displays.getSystemColor(SWT.COLOR_RED)); + } else { + label.setText("Selected " + artifacts.size() + " ATS Artifact to export."); + } + GridData gridData = new GridData(GridData.FILL_HORIZONTAL); + gridData.horizontalSpan = 2; + label.setLayoutData(gridData); + + XModifiedListener modifyListener = new XModifiedListener() { + @Override + public void widgetModified(XWidget widget) { + handleModified(); + } + }; + + List<ExportOption> validExportOptions = new ArrayList<ExportOption>(); + validExportOptions.addAll(Arrays.asList(ExportOption.values())); + validExportOptions.remove(ExportOption.POPUP_DIALOG); + validExportOptions.remove(ExportOption.NONE); + + for (ExportOption exportOption : validExportOptions) { + XCheckBox checkBox = new XCheckBox(exportOption.name()); + checkBox.setLabelAfter(true); + checkBox.createWidgets(composite, 2); + if (selectedExportOptions.contains(exportOption)) { + checkBox.set(true); + } + checkBox.addXModifiedListener(modifyListener); + checkBoxes.add(checkBox); + } + + xFileSel = new XFileTextWithSelectionDialog("Export Location", Type.Directory); + xFileSel.createWidgets(composite, 2); + xFileSel.addXModifiedListener(modifyListener); + + setPageComplete(determinePageCompletion()); + setControl(composite); + } + + public Result isEntryValid() { + if (artifacts.isEmpty()) { + return new Result("No Artifacts selected. Cancel wizard and try again."); + } + if (!selectedExportOptions.contains(ExportOption.AS_HTML_TO_FILE) && !selectedExportOptions.contains(ExportOption.AS_HTML_TO_RESULT_EDITOR) && !selectedExportOptions.contains(ExportOption.AS_PDF)) { + return new Result("Must select at least one export AS_ option."); + } + if (!selectedExportOptions.contains(ExportOption.MERGE_INTO_SINGLE_FILE) && !selectedExportOptions.contains(ExportOption.SAVE_INTO_SEPARATE_FILES)) { + return new Result("Must select \"MERGE_INTO_SINGLE_FILE\" or \"SAVE_INTO_SEPARATE_FILES\""); + } + if (selectedExportOptions.contains(ExportOption.AS_HTML_TO_FILE) || selectedExportOptions.contains(ExportOption.AS_PDF)) { + if (xFileSel.get().equals("")) { + return new Result( + "Must select \"Export Location\" for \"" + ExportOption.AS_HTML_TO_FILE + "\" or \"" + ExportOption.AS_PDF + "\" options."); + } + if (!new File(xFileSel.get()).isDirectory()) { + return new Result("Invalid Directory"); + } + } + return Result.TrueResult; + } + + public void handleModified() { + for (XCheckBox checkBox : checkBoxes) { + ExportOption exportOption = ExportOption.valueOf(checkBox.getLabel()); + if (checkBox.isSelected()) { + selectedExportOptions.add(exportOption); + } else { + selectedExportOptions.remove(exportOption); + } + } + fileLocation = xFileSel.get(); + } + + public Collection<ExportOption> getSelectedExportOptions() { + return selectedExportOptions; + } + + public String getFileLocation() { + return fileLocation; + } + }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/export/AtsExportWizard.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/export/AtsExportWizard.java index 1469b478e1f..1edc3e503c7 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/export/AtsExportWizard.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/export/AtsExportWizard.java @@ -1,89 +1,89 @@ -/*******************************************************************************
- * 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.export;
-
-import java.util.Collection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.osee.ats.export.AtsExportManager.ExportOption;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-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.ui.plugin.util.Result;
-import org.eclipse.ui.IExportWizard;
-import org.eclipse.ui.IWorkbench;
-
-/**
- * @author Donald G. Dunne
- */
-public class AtsExportWizard extends Wizard implements IExportWizard {
- private AtsExportPage mainPage;
- private final Collection<? extends Artifact> artifacts;
-
- public AtsExportWizard() {
- this.artifacts = null;
- }
-
- public AtsExportWizard(Collection<? extends Artifact> artifacts) {
- this.artifacts = artifacts;
- }
-
- /**
- * @return the fileLocation
- */
- public String getFileLocation() {
- return mainPage.getFileLocation();
- }
-
- /**
- * @return the selectedExportOptions
- */
- public Collection<ExportOption> getSelectedExportOptions() {
- return mainPage.getSelectedExportOptions();
- }
-
- @Override
- public boolean performFinish() {
-
- Result result = mainPage.isEntryValid();
- if (result.isFalse()) {
- result.popup();
- return false;
- }
- try {
- AtsExportManager.export(artifacts,
- mainPage.getSelectedExportOptions().toArray(new ExportOption[mainPage.getSelectedExportOptions().size()]));
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- return true;
- }
-
- @Override
- public void init(IWorkbench workbench, IStructuredSelection selection) {
- try {
- mainPage = new AtsExportPage(selection);
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
- @Override
- public void addPages() {
- if (mainPage == null) {
- mainPage = new AtsExportPage(artifacts);
- }
- addPage(mainPage);
- }
+/******************************************************************************* + * 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.export; + +import java.util.Collection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.wizard.Wizard; +import org.eclipse.osee.ats.export.AtsExportManager.ExportOption; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +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.ui.plugin.util.Result; +import org.eclipse.ui.IExportWizard; +import org.eclipse.ui.IWorkbench; + +/** + * @author Donald G. Dunne + */ +public class AtsExportWizard extends Wizard implements IExportWizard { + private AtsExportPage mainPage; + private final Collection<? extends Artifact> artifacts; + + public AtsExportWizard() { + this.artifacts = null; + } + + public AtsExportWizard(Collection<? extends Artifact> artifacts) { + this.artifacts = artifacts; + } + + /** + * @return the fileLocation + */ + public String getFileLocation() { + return mainPage.getFileLocation(); + } + + /** + * @return the selectedExportOptions + */ + public Collection<ExportOption> getSelectedExportOptions() { + return mainPage.getSelectedExportOptions(); + } + + @Override + public boolean performFinish() { + + Result result = mainPage.isEntryValid(); + if (result.isFalse()) { + result.popup(); + return false; + } + try { + AtsExportManager.export(artifacts, + mainPage.getSelectedExportOptions().toArray(new ExportOption[mainPage.getSelectedExportOptions().size()])); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + return true; + } + + @Override + public void init(IWorkbench workbench, IStructuredSelection selection) { + try { + mainPage = new AtsExportPage(selection); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + + @Override + public void addPages() { + if (mainPage == null) { + mainPage = new AtsExportPage(artifacts); + } + addPage(mainPage); + } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/goal/GoalXViewerFactory.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/goal/GoalXViewerFactory.java index abcc064a50c..75e75ab12a8 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/goal/GoalXViewerFactory.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/goal/GoalXViewerFactory.java @@ -1,101 +1,112 @@ -/*******************************************************************************
- * 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.goal;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.logging.Level;
-import org.eclipse.nebula.widgets.xviewer.XViewer;
-import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
-import org.eclipse.nebula.widgets.xviewer.XViewerSorter;
-import org.eclipse.nebula.widgets.xviewer.customize.CustomizeData;
-import org.eclipse.osee.ats.artifact.GoalArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.world.AtsWorldEditorItems;
-import org.eclipse.osee.ats.world.IAtsWorldEditorItem;
-import org.eclipse.osee.ats.world.WorldXViewerFactory;
-import org.eclipse.osee.ats.world.WorldXViewerSorter;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.SkynetXViewerFactory;
-import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column.XViewerHridColumn;
-
-/**
- * @author Donald G. Dunne
- */
-public class GoalXViewerFactory extends SkynetXViewerFactory {
-
- private GoalArtifact soleGoalArtifact;
- public static final List<XViewerColumn> GoalViewerVisibleColumns = Arrays.asList(WorldXViewerFactory.Goal_Order,
- WorldXViewerFactory.Goal_Order_Vote_Col, WorldXViewerFactory.Title_Col, WorldXViewerFactory.Type_Col,
- WorldXViewerFactory.State_Col, WorldXViewerFactory.Priority_Col, WorldXViewerFactory.Change_Type_Col,
- WorldXViewerFactory.Assignees_Col, new XViewerHridColumn(true), WorldXViewerFactory.Created_Date_Col,
- WorldXViewerFactory.Version_Target_Col, WorldXViewerFactory.Notes_Col);
- public static Integer[] widths = new Integer[] {WorldXViewerFactory.Goal_Order.getWidth(),
- WorldXViewerFactory.Goal_Order_Vote_Col.getWidth(), 250, 60, 60, 20, 20, 100, 50, 50, 50, 80};
-
- public GoalXViewerFactory(GoalArtifact soleGoalArtifact) {
- super("org.eclipse.osee.ats.GoalXViewer");
- this.soleGoalArtifact = soleGoalArtifact;
- int widthIndex = 0;
- // Create new column from world columns but set show and width for task
- for (XViewerColumn taskCol : GoalViewerVisibleColumns) {
- XViewerColumn newCol = taskCol.copy();
- newCol.setShow(true);
- newCol.setWidth(widths[widthIndex++]);
- registerColumns(newCol);
- }
- // Add remaining columns from world columns
- for (XViewerColumn worldCol : WorldXViewerFactory.WorldViewColumns) {
- if (!GoalViewerVisibleColumns.contains(worldCol)) {
- XViewerColumn newCol = worldCol.copy();
- newCol.setShow(false);
- registerColumns(newCol);
- }
- }
- // Register any columns from other plugins
- try {
- for (IAtsWorldEditorItem item : AtsWorldEditorItems.getItems()) {
- for (XViewerColumn xCol : item.getXViewerColumns()) {
- registerColumns(xCol);
- }
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- registerAllAttributeColumns();
- }
-
- @Override
- public XViewerSorter createNewXSorter(XViewer xViewer) {
- return new WorldXViewerSorter(xViewer);
- }
-
- @Override
- public CustomizeData getDefaultTableCustomizeData() {
- CustomizeData customizeData = super.getDefaultTableCustomizeData();
- for (XViewerColumn xCol : customizeData.getColumnData().getColumns()) {
- if (xCol.getId().equals(WorldXViewerFactory.Goal_Order.getId())) {
- xCol.setSortForward(true);
- }
- }
- customizeData.getSortingData().setSortingNames(WorldXViewerFactory.Goal_Order.getId());
- return customizeData;
- }
-
- public GoalArtifact getSoleGoalArtifact() {
- return soleGoalArtifact;
- }
-
- public void setSoleGoalArtifact(GoalArtifact soleGoalArtifact) {
- this.soleGoalArtifact = soleGoalArtifact;
- }
-
-}
+/******************************************************************************* + * 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.goal; + +import java.util.Arrays; +import java.util.List; +import java.util.logging.Level; +import org.eclipse.nebula.widgets.xviewer.XViewer; +import org.eclipse.nebula.widgets.xviewer.XViewerColumn; +import org.eclipse.nebula.widgets.xviewer.XViewerSorter; +import org.eclipse.nebula.widgets.xviewer.customize.CustomizeData; +import org.eclipse.osee.ats.artifact.GoalArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.world.AtsWorldEditorItems; +import org.eclipse.osee.ats.world.IAtsWorldEditorItem; +import org.eclipse.osee.ats.world.WorldXViewerFactory; +import org.eclipse.osee.ats.world.WorldXViewerSorter; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.SkynetXViewerFactory; +import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column.XViewerHridColumn; + +/** + * @author Donald G. Dunne + */ +public class GoalXViewerFactory extends SkynetXViewerFactory { + + private GoalArtifact soleGoalArtifact; + public static final List<XViewerColumn> GoalViewerVisibleColumns = Arrays.asList(WorldXViewerFactory.Goal_Order, + WorldXViewerFactory.Goal_Order_Vote_Col, WorldXViewerFactory.Title_Col, WorldXViewerFactory.Type_Col, + WorldXViewerFactory.State_Col, WorldXViewerFactory.Priority_Col, WorldXViewerFactory.Change_Type_Col, + WorldXViewerFactory.Assignees_Col, new XViewerHridColumn(true), WorldXViewerFactory.Created_Date_Col, + WorldXViewerFactory.Version_Target_Col, WorldXViewerFactory.Notes_Col); + public static Integer[] widths = new Integer[] { + WorldXViewerFactory.Goal_Order.getWidth(), + WorldXViewerFactory.Goal_Order_Vote_Col.getWidth(), + 250, + 60, + 60, + 20, + 20, + 100, + 50, + 50, + 50, + 80}; + + public GoalXViewerFactory(GoalArtifact soleGoalArtifact) { + super("org.eclipse.osee.ats.GoalXViewer"); + this.soleGoalArtifact = soleGoalArtifact; + int widthIndex = 0; + // Create new column from world columns but set show and width for task + for (XViewerColumn taskCol : GoalViewerVisibleColumns) { + XViewerColumn newCol = taskCol.copy(); + newCol.setShow(true); + newCol.setWidth(widths[widthIndex++]); + registerColumns(newCol); + } + // Add remaining columns from world columns + for (XViewerColumn worldCol : WorldXViewerFactory.WorldViewColumns) { + if (!GoalViewerVisibleColumns.contains(worldCol)) { + XViewerColumn newCol = worldCol.copy(); + newCol.setShow(false); + registerColumns(newCol); + } + } + // Register any columns from other plugins + try { + for (IAtsWorldEditorItem item : AtsWorldEditorItems.getItems()) { + for (XViewerColumn xCol : item.getXViewerColumns()) { + registerColumns(xCol); + } + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + registerAllAttributeColumns(); + } + + @Override + public XViewerSorter createNewXSorter(XViewer xViewer) { + return new WorldXViewerSorter(xViewer); + } + + @Override + public CustomizeData getDefaultTableCustomizeData() { + CustomizeData customizeData = super.getDefaultTableCustomizeData(); + for (XViewerColumn xCol : customizeData.getColumnData().getColumns()) { + if (xCol.getId().equals(WorldXViewerFactory.Goal_Order.getId())) { + xCol.setSortForward(true); + } + } + customizeData.getSortingData().setSortingNames(WorldXViewerFactory.Goal_Order.getId()); + return customizeData; + } + + public GoalArtifact getSoleGoalArtifact() { + return soleGoalArtifact; + } + + public void setSoleGoalArtifact(GoalArtifact soleGoalArtifact) { + this.soleGoalArtifact = soleGoalArtifact; + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsEditorHandler.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsEditorHandler.java index 4215eadc0c2..b8227e0bc12 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsEditorHandler.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsEditorHandler.java @@ -1,32 +1,32 @@ -/*******************************************************************************
- * 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.handlers;
-
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.osee.ats.editor.AtsWorkflowRenderer;
-import org.eclipse.osee.framework.ui.skynet.commandHandlers.renderer.handlers.AbstractEditorHandler;
-import org.eclipse.osee.framework.ui.skynet.render.PresentationType;
-
-/**
- * @author Jeff C. Phillips
- */
-public class AtsEditorHandler extends AbstractEditorHandler {
-
- @Override
- public Object execute(ExecutionEvent event) {
- if (!artifacts.isEmpty()) {
- AtsWorkflowRenderer renderer = new AtsWorkflowRenderer();
- renderer.open(artifacts, PresentationType.SPECIALIZED_EDIT);
- dispose();
- }
- return null;
- }
-}
+/******************************************************************************* + * 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.handlers; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.osee.ats.editor.AtsWorkflowRenderer; +import org.eclipse.osee.framework.ui.skynet.commandHandlers.renderer.handlers.AbstractEditorHandler; +import org.eclipse.osee.framework.ui.skynet.render.PresentationType; + +/** + * @author Jeff C. Phillips + */ +public class AtsEditorHandler extends AbstractEditorHandler { + + @Override + public Object execute(ExecutionEvent event) { + if (!artifacts.isEmpty()) { + AtsWorkflowRenderer renderer = new AtsWorkflowRenderer(); + renderer.open(artifacts, PresentationType.SPECIALIZED_EDIT); + dispose(); + } + return null; + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsExportHandler.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsExportHandler.java index b0a25ee53bb..2021eef76ac 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsExportHandler.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsExportHandler.java @@ -1,39 +1,39 @@ -/*******************************************************************************
- * 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.handlers;
-
-import java.util.logging.Level;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.osee.ats.export.AtsExportRenderer;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.skynet.commandHandlers.renderer.handlers.AbstractEditorHandler;
-import org.eclipse.osee.framework.ui.skynet.render.PresentationType;
-
-/**
- * @author Jeff C. Phillips
- */
-public class AtsExportHandler extends AbstractEditorHandler {
-
- @Override
- public Object execute(ExecutionEvent event) {
- if (!artifacts.isEmpty()) {
- AtsExportRenderer renderer = new AtsExportRenderer();
- try {
- renderer.open(artifacts, PresentationType.SPECIALIZED_EDIT);
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsEditorHandler.class, Level.SEVERE, ex);
- }
- dispose();
- }
- return null;
- }
-}
+/******************************************************************************* + * 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.handlers; + +import java.util.logging.Level; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.osee.ats.export.AtsExportRenderer; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.skynet.commandHandlers.renderer.handlers.AbstractEditorHandler; +import org.eclipse.osee.framework.ui.skynet.render.PresentationType; + +/** + * @author Jeff C. Phillips + */ +public class AtsExportHandler extends AbstractEditorHandler { + + @Override + public Object execute(ExecutionEvent event) { + if (!artifacts.isEmpty()) { + AtsExportRenderer renderer = new AtsExportRenderer(); + try { + renderer.open(artifacts, PresentationType.SPECIALIZED_EDIT); + } catch (OseeCoreException ex) { + OseeLog.log(AtsEditorHandler.class, Level.SEVERE, ex); + } + dispose(); + } + return null; + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsTaskEditorHandler.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsTaskEditorHandler.java index 379a5a84405..8deda2b901c 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsTaskEditorHandler.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsTaskEditorHandler.java @@ -1,39 +1,39 @@ -/*******************************************************************************
- * 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.handlers;
-
-import java.util.logging.Level;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.osee.ats.editor.AtsTaskEditorRenderer;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.ui.skynet.commandHandlers.renderer.handlers.AbstractEditorHandler;
-import org.eclipse.osee.framework.ui.skynet.render.PresentationType;
-
-/**
- * @author Jeff C. Phillips
- */
-public class AtsTaskEditorHandler extends AbstractEditorHandler {
-
- @Override
- public Object execute(ExecutionEvent event) {
- if (!artifacts.isEmpty()) {
- AtsTaskEditorRenderer renderer = new AtsTaskEditorRenderer();
- try {
- renderer.open(artifacts, PresentationType.SPECIALIZED_EDIT);
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsEditorHandler.class, Level.SEVERE, ex);
- }
- dispose();
- }
- return null;
- }
-}
+/******************************************************************************* + * 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.handlers; + +import java.util.logging.Level; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.osee.ats.editor.AtsTaskEditorRenderer; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.ui.skynet.commandHandlers.renderer.handlers.AbstractEditorHandler; +import org.eclipse.osee.framework.ui.skynet.render.PresentationType; + +/** + * @author Jeff C. Phillips + */ +public class AtsTaskEditorHandler extends AbstractEditorHandler { + + @Override + public Object execute(ExecutionEvent event) { + if (!artifacts.isEmpty()) { + AtsTaskEditorRenderer renderer = new AtsTaskEditorRenderer(); + try { + renderer.open(artifacts, PresentationType.SPECIALIZED_EDIT); + } catch (OseeCoreException ex) { + OseeLog.log(AtsEditorHandler.class, Level.SEVERE, ex); + } + dispose(); + } + return null; + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsWorkflowConfigEditorHandler.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsWorkflowConfigEditorHandler.java index fd0ef7767bf..35ce4f5dc5e 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsWorkflowConfigEditorHandler.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsWorkflowConfigEditorHandler.java @@ -1,32 +1,32 @@ -/*******************************************************************************
- * 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.handlers;
-
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.osee.ats.editor.AtsWorkflowRenderer;
-import org.eclipse.osee.framework.ui.skynet.commandHandlers.renderer.handlers.AbstractEditorHandler;
-import org.eclipse.osee.framework.ui.skynet.render.PresentationType;
-
-/**
- * @author Donald G. Dunne
- */
-public class AtsWorkflowConfigEditorHandler extends AbstractEditorHandler {
-
- @Override
- public Object execute(ExecutionEvent event) {
- if (!artifacts.isEmpty()) {
- AtsWorkflowRenderer renderer = new AtsWorkflowRenderer();
- renderer.open(artifacts, PresentationType.SPECIALIZED_EDIT);
- dispose();
- }
- return null;
- }
-}
+/******************************************************************************* + * 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.handlers; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.osee.ats.editor.AtsWorkflowRenderer; +import org.eclipse.osee.framework.ui.skynet.commandHandlers.renderer.handlers.AbstractEditorHandler; +import org.eclipse.osee.framework.ui.skynet.render.PresentationType; + +/** + * @author Donald G. Dunne + */ +public class AtsWorkflowConfigEditorHandler extends AbstractEditorHandler { + + @Override + public Object execute(ExecutionEvent event) { + if (!artifacts.isEmpty()) { + AtsWorkflowRenderer renderer = new AtsWorkflowRenderer(); + renderer.open(artifacts, PresentationType.SPECIALIZED_EDIT); + dispose(); + } + return null; + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsWorldEditorHandler.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsWorldEditorHandler.java index a2a47bb413f..4e6278b8cec 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsWorldEditorHandler.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/handlers/AtsWorldEditorHandler.java @@ -1,32 +1,32 @@ -/*******************************************************************************
- * 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.handlers;
-
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.osee.ats.editor.AtsWorldEditorRenderer;
-import org.eclipse.osee.framework.ui.skynet.commandHandlers.renderer.handlers.AbstractEditorHandler;
-import org.eclipse.osee.framework.ui.skynet.render.PresentationType;
-
-/**
- * @author Jeff C. Phillips
- */
-public class AtsWorldEditorHandler extends AbstractEditorHandler {
-
- @Override
- public Object execute(ExecutionEvent event) {
- if (!artifacts.isEmpty()) {
- AtsWorldEditorRenderer renderer = new AtsWorldEditorRenderer();
- renderer.open(artifacts, PresentationType.SPECIALIZED_EDIT);
- dispose();
- }
- return null;
- }
-}
+/******************************************************************************* + * 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.handlers; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.osee.ats.editor.AtsWorldEditorRenderer; +import org.eclipse.osee.framework.ui.skynet.commandHandlers.renderer.handlers.AbstractEditorHandler; +import org.eclipse.osee.framework.ui.skynet.render.PresentationType; + +/** + * @author Jeff C. Phillips + */ +public class AtsWorldEditorHandler extends AbstractEditorHandler { + + @Override + public Object execute(ExecutionEvent event) { + if (!artifacts.isEmpty()) { + AtsWorldEditorRenderer renderer = new AtsWorldEditorRenderer(); + renderer.open(artifacts, PresentationType.SPECIALIZED_EDIT); + dispose(); + } + return null; + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/AtsHealthCheck.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/AtsHealthCheck.java index 5bc2a9a50bc..cfc72b4e82f 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/AtsHealthCheck.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/AtsHealthCheck.java @@ -1,67 +1,67 @@ -/*******************************************************************************
- * 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.health;
-
-import java.util.HashSet;
-import java.util.Set;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.osgi.framework.Bundle;
-
-/**
- * @author Donald G. Dunne
- */
-public class AtsHealthCheck {
-
- private static Set<IAtsHealthCheck> healthCheckItems = null;
-
- public static Set<IAtsHealthCheck> getAtsHealthCheckItems() {
- if (healthCheckItems == null) {
- healthCheckItems = new HashSet<IAtsHealthCheck>();
-
- IExtensionPoint point =
- Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.osee.ats.AtsHealthCheck");
- if (point == null) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Can't access AtsHealthCheck extension point");
- return healthCheckItems;
- }
- IExtension[] extensions = point.getExtensions();
- for (IExtension extension : extensions) {
- IConfigurationElement[] elements = extension.getConfigurationElements();
- String classname = null;
- String bundleName = null;
- for (IConfigurationElement el : elements) {
- if (el.getName().equals("AtsHealthCheck")) {
- classname = el.getAttribute("classname");
- bundleName = el.getContributor().getName();
- if (classname != null && bundleName != null) {
- Bundle bundle = Platform.getBundle(bundleName);
- try {
- Class<?> taskClass = bundle.loadClass(classname);
- Object obj = taskClass.newInstance();
- healthCheckItems.add((IAtsHealthCheck) obj);
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Error loading AtsHealthCheck extension",
- ex);
- }
- }
- }
- }
- }
- }
- return healthCheckItems;
- }
-}
+/******************************************************************************* + * 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.health; + +import java.util.HashSet; +import java.util.Set; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExtension; +import org.eclipse.core.runtime.IExtensionPoint; +import org.eclipse.core.runtime.Platform; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.osgi.framework.Bundle; + +/** + * @author Donald G. Dunne + */ +public class AtsHealthCheck { + + private static Set<IAtsHealthCheck> healthCheckItems = null; + + public static Set<IAtsHealthCheck> getAtsHealthCheckItems() { + if (healthCheckItems == null) { + healthCheckItems = new HashSet<IAtsHealthCheck>(); + + IExtensionPoint point = + Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.osee.ats.AtsHealthCheck"); + if (point == null) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Can't access AtsHealthCheck extension point"); + return healthCheckItems; + } + IExtension[] extensions = point.getExtensions(); + for (IExtension extension : extensions) { + IConfigurationElement[] elements = extension.getConfigurationElements(); + String classname = null; + String bundleName = null; + for (IConfigurationElement el : elements) { + if (el.getName().equals("AtsHealthCheck")) { + classname = el.getAttribute("classname"); + bundleName = el.getContributor().getName(); + if (classname != null && bundleName != null) { + Bundle bundle = Platform.getBundle(bundleName); + try { + Class<?> taskClass = bundle.loadClass(classname); + Object obj = taskClass.newInstance(); + healthCheckItems.add((IAtsHealthCheck) obj); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Error loading AtsHealthCheck extension", + ex); + } + } + } + } + } + } + return healthCheckItems; + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/ChangeReportComparer.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/ChangeReportComparer.java index e746cedb906..8795a911d80 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/ChangeReportComparer.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/ChangeReportComparer.java @@ -1,56 +1,56 @@ -/*******************************************************************************
- * 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.health;
-
-import java.util.ArrayList;
-import java.util.logging.Level;
-import org.eclipse.osee.ats.health.change.DataChangeReportComparer;
-import org.eclipse.osee.ats.health.change.ValidateChangeReportParser;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.framework.logging.OseeLog;
-
-/**
- * Compares two change reports to see if the match.
- *
- * @author Jeff C. Phillips
- */
-public class ChangeReportComparer {
-
- /**
- * Compares two change report strings by parsing them and comparing each artifact change, attribute change and
- * relation change.
- *
- * @return Returns true if the change reports matches else false.
- */
- public boolean compare(String currentData, String storedData) {
- boolean success = true;
- ValidateChangeReportParser parser = new ValidateChangeReportParser();
- ArrayList<ArrayList<DataChangeReportComparer>> currentList = parser.parse(currentData);
- ArrayList<ArrayList<DataChangeReportComparer>> storedList = parser.parse(storedData);
-
- if (currentList.size() != storedList.size() || currentList.get(0).size() != storedList.get(0).size() || currentList.get(
- 1).size() != storedList.get(1).size() || currentList.get(2).size() != storedList.get(2).size()) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, "The change reports must have the same number of items");
- return false;
- }
- for (int i = 0; i < currentList.size(); i++) {
- for (int j = 0; j < currentList.get(i).size(); j++) {
- if (!currentList.get(i).get(j).getContent().equals(storedList.get(i).get(j).getContent())) {
- success = false;
- System.err.println(currentList.get(i).get(j).getContent());
- System.err.println(storedList.get(i).get(j).getContent());
- System.err.println("---------------------------------------------------");
- }
- }
- }
- return success;
- }
-}
+/******************************************************************************* + * 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.health; + +import java.util.ArrayList; +import java.util.logging.Level; +import org.eclipse.osee.ats.health.change.DataChangeReportComparer; +import org.eclipse.osee.ats.health.change.ValidateChangeReportParser; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.framework.logging.OseeLog; + +/** + * Compares two change reports to see if the match. + * + * @author Jeff C. Phillips + */ +public class ChangeReportComparer { + + /** + * Compares two change report strings by parsing them and comparing each artifact change, attribute change and + * relation change. + * + * @return Returns true if the change reports matches else false. + */ + public boolean compare(String currentData, String storedData) { + boolean success = true; + ValidateChangeReportParser parser = new ValidateChangeReportParser(); + ArrayList<ArrayList<DataChangeReportComparer>> currentList = parser.parse(currentData); + ArrayList<ArrayList<DataChangeReportComparer>> storedList = parser.parse(storedData); + + if (currentList.size() != storedList.size() || currentList.get(0).size() != storedList.get(0).size() || currentList.get( + 1).size() != storedList.get(1).size() || currentList.get(2).size() != storedList.get(2).size()) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, "The change reports must have the same number of items"); + return false; + } + for (int i = 0; i < currentList.size(); i++) { + for (int j = 0; j < currentList.get(i).size(); j++) { + if (!currentList.get(i).get(j).getContent().equals(storedList.get(i).get(j).getContent())) { + success = false; + System.err.println(currentList.get(i).get(j).getContent()); + System.err.println(storedList.get(i).get(j).getContent()); + System.err.println("---------------------------------------------------"); + } + } + } + return success; + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/TxImportedValidateChangeReports.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/TxImportedValidateChangeReports.java index 5083371ff12..08f9cc59c79 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/TxImportedValidateChangeReports.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/TxImportedValidateChangeReports.java @@ -1,299 +1,299 @@ -/*******************************************************************************
- * 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.health;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.core.enums.CoreArtifactTypes;
-import org.eclipse.osee.framework.core.enums.CoreAttributeTypes;
-import org.eclipse.osee.framework.core.exception.OseeArgumentException;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeDataStoreException;
-import org.eclipse.osee.framework.core.exception.OseeStateException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.database.core.ConnectionHandler;
-import org.eclipse.osee.framework.database.core.IOseeSequence;
-import org.eclipse.osee.framework.database.core.IOseeStatement;
-import org.eclipse.osee.framework.database.core.OseeInfo;
-import org.eclipse.osee.framework.jdk.core.text.change.ChangeSet;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
-import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
-import org.eclipse.osee.framework.ui.skynet.blam.AbstractBlam;
-import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
-
-/**
- * @author Roberto E. Escobar
- */
-public class TxImportedValidateChangeReports extends AbstractBlam {
-
- private static final String[] ARTIFACT_ID_ALIASES = new String[] {"artId", "bArtId", "aOrdr", "bOrdr"};
- public static final String BRANCH_ID_ALIASES = "brGuid";
- private static final String GAMMA_ID_ALIASES = "gamma";
- private static final String[] TRANSACTION_ID_ALIASES = new String[] {"tTranId", "fTranId"};
- private static final String ARTIFACT_TYPE_ID = "artTId";
- private static final String ATTRIBUTE_TYPE_ID = "attrTId";
- private static final String RELATION_TYPE_ID = "relTId";
- private static final String ATTRIBUTE_ID = "attrId";
- private static final String RELATION_ID = "relId";
- private static final String EMPTY_STRING = "";
-
- private static final String VCR_ROOT_ELEMENT_TAG = ValidateChangeReports.VCR_ROOT_ELEMENT_TAG;
- private static final String VCR_DB_GUID = ValidateChangeReports.VCR_DB_GUID;
-
- private static final Matcher NUMERICAL_MATCH = Pattern.compile("\\d+").matcher(EMPTY_STRING);
- private static final Matcher SOURCE_DB_GUID_MATCHER = Pattern.compile(
- "\\s*<" + VCR_ROOT_ELEMENT_TAG + "\\s*" + VCR_DB_GUID + "=\"(.*?)\"\\s*>").matcher(EMPTY_STRING);
- private static final Matcher XML_TAGGED_IDS_MATCHER = Pattern.compile("<(.*?)>(\\d+)</(.*?)>").matcher(EMPTY_STRING);
-
- private Map<String, ImportedId> translatorMap;
- private String currentDbGuid;
-
- @Override
- public String getName() {
- return "Tx Imported Validate Change Reports";
- }
-
- private void setup(String databaseTargetId) throws OseeDataStoreException {
- List<ImportedId> importtedIds = getImportedIds();
- for (ImportedId importedId : importtedIds) {
- print(importedId.getSequence() + "\n");
- importedId.load(databaseTargetId);
- }
-
- this.translatorMap = new HashMap<String, ImportedId>();
- for (ImportedId translator : importtedIds) {
- for (String alias : translator.getAliases()) {
- translatorMap.put(alias, translator);
- }
- }
-
- this.currentDbGuid = OseeInfo.getDatabaseGuid();
- }
-
- private void cleanUp() {
- if (translatorMap != null && !translatorMap.isEmpty()) {
- for (String key : translatorMap.keySet()) {
- translatorMap.get(key).clear();
- }
- translatorMap.clear();
- }
- this.currentDbGuid = null;
- }
-
- private List<ImportedId> getImportedIds() {
- List<ImportedId> translators = new ArrayList<ImportedId>();
- translators.add(new ImportedId(IOseeSequence.GAMMA_ID_SEQ, GAMMA_ID_ALIASES));
- translators.add(new ImportedId(IOseeSequence.TRANSACTION_ID_SEQ, TRANSACTION_ID_ALIASES));
- translators.add(new ImportedId(IOseeSequence.BRANCH_ID_SEQ, BRANCH_ID_ALIASES));
- translators.add(new ImportedId(IOseeSequence.ART_TYPE_ID_SEQ, ARTIFACT_TYPE_ID));
- translators.add(new ImportedId(IOseeSequence.ATTR_TYPE_ID_SEQ, ATTRIBUTE_TYPE_ID));
- translators.add(new ImportedId(IOseeSequence.REL_LINK_TYPE_ID_SEQ, RELATION_TYPE_ID));
- translators.add(new ImportedId(IOseeSequence.ART_ID_SEQ, ARTIFACT_ID_ALIASES));
- translators.add(new ImportedId(IOseeSequence.ATTR_ID_SEQ, ATTRIBUTE_ID));
- translators.add(new ImportedId(IOseeSequence.REL_LINK_ID_SEQ, RELATION_ID));
- return translators;
- }
-
- private long translate(String tag, long original) {
- long toReturn = original;
- if (Strings.isValid(tag)) {
- ImportedId importedId = translatorMap.get(tag);
- if (importedId != null) {
- toReturn = importedId.getFromCache(original);
- }
- }
- return toReturn;
- }
-
- private String getDataDbGuid(String data) {
- String toReturn = null;
- SOURCE_DB_GUID_MATCHER.reset(data);
- if (SOURCE_DB_GUID_MATCHER.find()) {
- toReturn = SOURCE_DB_GUID_MATCHER.group(1);
- }
- return toReturn != null ? toReturn : EMPTY_STRING;
- }
-
- @Override
- public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
- try {
- Branch branch = AtsUtil.getAtsBranch();
- String databaseTargetId = variableMap.getString("Import Db Id");
- boolean shouldIncludeItemsWithoutDbId = variableMap.getBoolean("Include items without database id");
- if (!Strings.isValid(databaseTargetId)) {
- throw new OseeArgumentException("Invalid database target id");
- }
-
- databaseTargetId = databaseTargetId.trim();
- setup(databaseTargetId);
-
- SkynetTransaction transaction = new SkynetTransaction(branch, "Import Validate Change Reports");
- List<Artifact> artifacts =
- ArtifactQuery.getArtifactListFromTypeAndName(CoreArtifactTypes.GeneralData, "VCR_%", branch);
- for (Artifact artifact : artifacts) {
+/******************************************************************************* + * 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.health; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.core.enums.CoreArtifactTypes; +import org.eclipse.osee.framework.core.enums.CoreAttributeTypes; +import org.eclipse.osee.framework.core.exception.OseeArgumentException; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeDataStoreException; +import org.eclipse.osee.framework.core.exception.OseeStateException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.database.core.ConnectionHandler; +import org.eclipse.osee.framework.database.core.IOseeSequence; +import org.eclipse.osee.framework.database.core.IOseeStatement; +import org.eclipse.osee.framework.database.core.OseeInfo; +import org.eclipse.osee.framework.jdk.core.text.change.ChangeSet; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; +import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction; +import org.eclipse.osee.framework.ui.skynet.blam.AbstractBlam; +import org.eclipse.osee.framework.ui.skynet.blam.VariableMap; + +/** + * @author Roberto E. Escobar + */ +public class TxImportedValidateChangeReports extends AbstractBlam { + + private static final String[] ARTIFACT_ID_ALIASES = new String[] {"artId", "bArtId", "aOrdr", "bOrdr"}; + public static final String BRANCH_ID_ALIASES = "brGuid"; + private static final String GAMMA_ID_ALIASES = "gamma"; + private static final String[] TRANSACTION_ID_ALIASES = new String[] {"tTranId", "fTranId"}; + private static final String ARTIFACT_TYPE_ID = "artTId"; + private static final String ATTRIBUTE_TYPE_ID = "attrTId"; + private static final String RELATION_TYPE_ID = "relTId"; + private static final String ATTRIBUTE_ID = "attrId"; + private static final String RELATION_ID = "relId"; + private static final String EMPTY_STRING = ""; + + private static final String VCR_ROOT_ELEMENT_TAG = ValidateChangeReports.VCR_ROOT_ELEMENT_TAG; + private static final String VCR_DB_GUID = ValidateChangeReports.VCR_DB_GUID; + + private static final Matcher NUMERICAL_MATCH = Pattern.compile("\\d+").matcher(EMPTY_STRING); + private static final Matcher SOURCE_DB_GUID_MATCHER = Pattern.compile( + "\\s*<" + VCR_ROOT_ELEMENT_TAG + "\\s*" + VCR_DB_GUID + "=\"(.*?)\"\\s*>").matcher(EMPTY_STRING); + private static final Matcher XML_TAGGED_IDS_MATCHER = Pattern.compile("<(.*?)>(\\d+)</(.*?)>").matcher(EMPTY_STRING); + + private Map<String, ImportedId> translatorMap; + private String currentDbGuid; + + @Override + public String getName() { + return "Tx Imported Validate Change Reports"; + } + + private void setup(String databaseTargetId) throws OseeDataStoreException { + List<ImportedId> importtedIds = getImportedIds(); + for (ImportedId importedId : importtedIds) { + print(importedId.getSequence() + "\n"); + importedId.load(databaseTargetId); + } + + this.translatorMap = new HashMap<String, ImportedId>(); + for (ImportedId translator : importtedIds) { + for (String alias : translator.getAliases()) { + translatorMap.put(alias, translator); + } + } + + this.currentDbGuid = OseeInfo.getDatabaseGuid(); + } + + private void cleanUp() { + if (translatorMap != null && !translatorMap.isEmpty()) { + for (String key : translatorMap.keySet()) { + translatorMap.get(key).clear(); + } + translatorMap.clear(); + } + this.currentDbGuid = null; + } + + private List<ImportedId> getImportedIds() { + List<ImportedId> translators = new ArrayList<ImportedId>(); + translators.add(new ImportedId(IOseeSequence.GAMMA_ID_SEQ, GAMMA_ID_ALIASES)); + translators.add(new ImportedId(IOseeSequence.TRANSACTION_ID_SEQ, TRANSACTION_ID_ALIASES)); + translators.add(new ImportedId(IOseeSequence.BRANCH_ID_SEQ, BRANCH_ID_ALIASES)); + translators.add(new ImportedId(IOseeSequence.ART_TYPE_ID_SEQ, ARTIFACT_TYPE_ID)); + translators.add(new ImportedId(IOseeSequence.ATTR_TYPE_ID_SEQ, ATTRIBUTE_TYPE_ID)); + translators.add(new ImportedId(IOseeSequence.REL_LINK_TYPE_ID_SEQ, RELATION_TYPE_ID)); + translators.add(new ImportedId(IOseeSequence.ART_ID_SEQ, ARTIFACT_ID_ALIASES)); + translators.add(new ImportedId(IOseeSequence.ATTR_ID_SEQ, ATTRIBUTE_ID)); + translators.add(new ImportedId(IOseeSequence.REL_LINK_ID_SEQ, RELATION_ID)); + return translators; + } + + private long translate(String tag, long original) { + long toReturn = original; + if (Strings.isValid(tag)) { + ImportedId importedId = translatorMap.get(tag); + if (importedId != null) { + toReturn = importedId.getFromCache(original); + } + } + return toReturn; + } + + private String getDataDbGuid(String data) { + String toReturn = null; + SOURCE_DB_GUID_MATCHER.reset(data); + if (SOURCE_DB_GUID_MATCHER.find()) { + toReturn = SOURCE_DB_GUID_MATCHER.group(1); + } + return toReturn != null ? toReturn : EMPTY_STRING; + } + + @Override + public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception { + try { + Branch branch = AtsUtil.getAtsBranch(); + String databaseTargetId = variableMap.getString("Import Db Id"); + boolean shouldIncludeItemsWithoutDbId = variableMap.getBoolean("Include items without database id"); + if (!Strings.isValid(databaseTargetId)) { + throw new OseeArgumentException("Invalid database target id"); + } + + databaseTargetId = databaseTargetId.trim(); + setup(databaseTargetId); + + SkynetTransaction transaction = new SkynetTransaction(branch, "Import Validate Change Reports"); + List<Artifact> artifacts = + ArtifactQuery.getArtifactListFromTypeAndName(CoreArtifactTypes.GeneralData, "VCR_%", branch); + for (Artifact artifact : artifacts) { String data = artifact.getSoleAttributeValue(CoreAttributeTypes.GeneralStringData); - String name = artifact.getName();
- try {
- String dataDbGuid = getDataDbGuid(data);
- if (Strings.isValid(dataDbGuid) || shouldIncludeItemsWithoutDbId) {
- if (databaseTargetId.equals(dataDbGuid) || shouldIncludeItemsWithoutDbId) {
- if (!currentDbGuid.equals(dataDbGuid)) {
- String modified = translateImportedData(data);
- modified = updateSourceGuid(currentDbGuid, modified);
+ String name = artifact.getName(); + try { + String dataDbGuid = getDataDbGuid(data); + if (Strings.isValid(dataDbGuid) || shouldIncludeItemsWithoutDbId) { + if (databaseTargetId.equals(dataDbGuid) || shouldIncludeItemsWithoutDbId) { + if (!currentDbGuid.equals(dataDbGuid)) { + String modified = translateImportedData(data); + modified = updateSourceGuid(currentDbGuid, modified); artifact.setSoleAttributeValue(CoreAttributeTypes.GeneralStringData, modified); - artifact.persist(transaction);
- }
- }
- }
- } catch (Exception ex) {
- throw new OseeCoreException(String.format("Error processing [%s]", name), ex);
- }
- }
- transaction.execute();
- } finally {
- cleanUp();
- }
- }
-
- @Override
- public String getXWidgetsXml() {
- StringBuilder builder = new StringBuilder();
- builder.append("<xWidgets>");
- builder.append("<XWidget xwidgetType=\"XText\" displayName=\"Import Db Id\" defaultValue=\"AAABHL_5XvkAFHT8QsrrPQ\"/>");
- builder.append("<XWidget xwidgetType=\"XCheckBox\" displayName=\"Include items without database id\" labelAfter=\"true\" horizontalLabel=\"true\"/>");
- builder.append("</xWidgets>");
- return builder.toString();
- }
-
- private static boolean isNumerical(String value) {
- boolean result = false;
- if (Strings.isValid(value)) {
- NUMERICAL_MATCH.reset(value);
- result = NUMERICAL_MATCH.matches();
- }
- return result;
- }
-
- private String translateImportedData(String data) {
- ChangeSet changeSet = new ChangeSet(data);
- XML_TAGGED_IDS_MATCHER.reset(data);
- while (XML_TAGGED_IDS_MATCHER.find()) {
- String tag = XML_TAGGED_IDS_MATCHER.group(3);
- tag = tag.toLowerCase().trim();
- String value = XML_TAGGED_IDS_MATCHER.group(2);
- if (isNumerical(value)) {
- long original = Long.parseLong(value);
- long newValue = translate(tag, original);
- if (original != newValue) {
- changeSet.replace(XML_TAGGED_IDS_MATCHER.start(2), XML_TAGGED_IDS_MATCHER.end(2),
- Long.toString(newValue));
- }
- }
- }
- return changeSet.applyChangesToSelf().toString();
- }
-
- private String updateSourceGuid(String currentDbGuid, String data) throws OseeStateException {
- String toReturn = null;
- ChangeSet changeSet = new ChangeSet(data);
- SOURCE_DB_GUID_MATCHER.reset(data);
- if (SOURCE_DB_GUID_MATCHER.find()) {
- String id = SOURCE_DB_GUID_MATCHER.group(1);
- if (!currentDbGuid.equals(id)) {
- changeSet.replace(SOURCE_DB_GUID_MATCHER.start(1), SOURCE_DB_GUID_MATCHER.end(1), currentDbGuid);
- toReturn = changeSet.applyChangesToSelf().toString();
- } else {
- toReturn = data;
- }
- } else {
- if (!data.contains(VCR_ROOT_ELEMENT_TAG)) {
- toReturn =
- String.format("<%s dbGuid=\"%s\">%s</%s>", VCR_ROOT_ELEMENT_TAG, currentDbGuid, data,
- VCR_ROOT_ELEMENT_TAG);
- } else {
- throw new OseeStateException("Error updating dbId");
- }
- }
- return toReturn;
- }
- private static final class ImportedId {
- private static final String SELECT_IDS_BY_DB_SOURCE_AND_SEQ_NAME =
- "SELECT original_id, mapped_id FROM osee_import_source ois, osee_import_map oim, osee_import_index_map oiim WHERE ois.import_id = oim.import_id AND oim.sequence_id = oiim.sequence_id AND oiim.sequence_id = oiim.sequence_id AND ois.db_source_guid = ? AND oim.sequence_name = ?";
-
- private final String sequenceName;
- private final Map<Long, Long> originalToMapped;
- private final Set<String> aliases;
-
- ImportedId(String sequenceName, String... aliases) {
- this.sequenceName = sequenceName;
- this.originalToMapped = new HashMap<Long, Long>();
- this.aliases = new HashSet<String>();
- if (aliases != null && aliases.length > 0) {
- for (String alias : aliases) {
- this.aliases.add(alias.toLowerCase());
- }
- }
- }
-
- public void clear() {
- this.originalToMapped.clear();
- this.aliases.clear();
- }
-
- public Set<String> getAliases() {
- return this.aliases;
- }
-
- public String getSequence() {
- return this.sequenceName;
- }
-
- public Long getFromCache(Long original) {
- Long newVersion = null;
- if (original <= 0L) {
- newVersion = original;
- } else {
- newVersion = this.originalToMapped.get(original);
- }
- return newVersion;
- }
-
- public void load(String sourceDatabaseId) throws OseeDataStoreException {
- IOseeStatement chStmt = ConnectionHandler.getStatement();
- try {
- originalToMapped.clear();
- chStmt.runPreparedQuery(10000, SELECT_IDS_BY_DB_SOURCE_AND_SEQ_NAME, sourceDatabaseId, getSequence());
- while (chStmt.next()) {
- originalToMapped.put(chStmt.getLong("original_id"), chStmt.getLong("mapped_id"));
- }
- } finally {
- chStmt.close();
- }
- }
- }
-
- @Override
- public Collection<String> getCategories() {
- return Arrays.asList("ATS.Admin");
- }
-}
+ artifact.persist(transaction); + } + } + } + } catch (Exception ex) { + throw new OseeCoreException(String.format("Error processing [%s]", name), ex); + } + } + transaction.execute(); + } finally { + cleanUp(); + } + } + + @Override + public String getXWidgetsXml() { + StringBuilder builder = new StringBuilder(); + builder.append("<xWidgets>"); + builder.append("<XWidget xwidgetType=\"XText\" displayName=\"Import Db Id\" defaultValue=\"AAABHL_5XvkAFHT8QsrrPQ\"/>"); + builder.append("<XWidget xwidgetType=\"XCheckBox\" displayName=\"Include items without database id\" labelAfter=\"true\" horizontalLabel=\"true\"/>"); + builder.append("</xWidgets>"); + return builder.toString(); + } + + private static boolean isNumerical(String value) { + boolean result = false; + if (Strings.isValid(value)) { + NUMERICAL_MATCH.reset(value); + result = NUMERICAL_MATCH.matches(); + } + return result; + } + + private String translateImportedData(String data) { + ChangeSet changeSet = new ChangeSet(data); + XML_TAGGED_IDS_MATCHER.reset(data); + while (XML_TAGGED_IDS_MATCHER.find()) { + String tag = XML_TAGGED_IDS_MATCHER.group(3); + tag = tag.toLowerCase().trim(); + String value = XML_TAGGED_IDS_MATCHER.group(2); + if (isNumerical(value)) { + long original = Long.parseLong(value); + long newValue = translate(tag, original); + if (original != newValue) { + changeSet.replace(XML_TAGGED_IDS_MATCHER.start(2), XML_TAGGED_IDS_MATCHER.end(2), + Long.toString(newValue)); + } + } + } + return changeSet.applyChangesToSelf().toString(); + } + + private String updateSourceGuid(String currentDbGuid, String data) throws OseeStateException { + String toReturn = null; + ChangeSet changeSet = new ChangeSet(data); + SOURCE_DB_GUID_MATCHER.reset(data); + if (SOURCE_DB_GUID_MATCHER.find()) { + String id = SOURCE_DB_GUID_MATCHER.group(1); + if (!currentDbGuid.equals(id)) { + changeSet.replace(SOURCE_DB_GUID_MATCHER.start(1), SOURCE_DB_GUID_MATCHER.end(1), currentDbGuid); + toReturn = changeSet.applyChangesToSelf().toString(); + } else { + toReturn = data; + } + } else { + if (!data.contains(VCR_ROOT_ELEMENT_TAG)) { + toReturn = + String.format("<%s dbGuid=\"%s\">%s</%s>", VCR_ROOT_ELEMENT_TAG, currentDbGuid, data, + VCR_ROOT_ELEMENT_TAG); + } else { + throw new OseeStateException("Error updating dbId"); + } + } + return toReturn; + } + private static final class ImportedId { + private static final String SELECT_IDS_BY_DB_SOURCE_AND_SEQ_NAME = + "SELECT original_id, mapped_id FROM osee_import_source ois, osee_import_map oim, osee_import_index_map oiim WHERE ois.import_id = oim.import_id AND oim.sequence_id = oiim.sequence_id AND oiim.sequence_id = oiim.sequence_id AND ois.db_source_guid = ? AND oim.sequence_name = ?"; + + private final String sequenceName; + private final Map<Long, Long> originalToMapped; + private final Set<String> aliases; + + ImportedId(String sequenceName, String... aliases) { + this.sequenceName = sequenceName; + this.originalToMapped = new HashMap<Long, Long>(); + this.aliases = new HashSet<String>(); + if (aliases != null && aliases.length > 0) { + for (String alias : aliases) { + this.aliases.add(alias.toLowerCase()); + } + } + } + + public void clear() { + this.originalToMapped.clear(); + this.aliases.clear(); + } + + public Set<String> getAliases() { + return this.aliases; + } + + public String getSequence() { + return this.sequenceName; + } + + public Long getFromCache(Long original) { + Long newVersion = null; + if (original <= 0L) { + newVersion = original; + } else { + newVersion = this.originalToMapped.get(original); + } + return newVersion; + } + + public void load(String sourceDatabaseId) throws OseeDataStoreException { + IOseeStatement chStmt = ConnectionHandler.getStatement(); + try { + originalToMapped.clear(); + chStmt.runPreparedQuery(10000, SELECT_IDS_BY_DB_SOURCE_AND_SEQ_NAME, sourceDatabaseId, getSequence()); + while (chStmt.next()) { + originalToMapped.put(chStmt.getLong("original_id"), chStmt.getLong("mapped_id")); + } + } finally { + chStmt.close(); + } + } + } + + @Override + public Collection<String> getCategories() { + return Arrays.asList("ATS.Admin"); + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/ValidateAtsDatabase.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/ValidateAtsDatabase.java index d9da9fe139a..77eb3c0af62 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/ValidateAtsDatabase.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/ValidateAtsDatabase.java @@ -1,889 +1,889 @@ -/*******************************************************************************
- * 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.health;
-
-import static org.eclipse.osee.framework.skynet.core.artifact.DeletionFlag.EXCLUDE_DELETED;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.osee.ats.AtsOpenOption;
-import org.eclipse.osee.ats.artifact.ATSLog;
-import org.eclipse.osee.ats.artifact.ATSLog.LogType;
-import org.eclipse.osee.ats.artifact.ActionArtifact;
-import org.eclipse.osee.ats.artifact.ActionableItemArtifact;
-import org.eclipse.osee.ats.artifact.AtsAttributeTypes;
-import org.eclipse.osee.ats.artifact.LogItem;
-import org.eclipse.osee.ats.artifact.ReviewSMArtifact;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.ats.artifact.TaskArtifact;
-import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact.DefaultTeamState;
-import org.eclipse.osee.ats.artifact.VersionArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.task.TaskEditor;
-import org.eclipse.osee.ats.task.TaskEditorSimpleProvider;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.ats.util.AtsBranchManager;
-import org.eclipse.osee.ats.util.AtsRelationTypes;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.ats.util.StateManager;
-import org.eclipse.osee.ats.util.widgets.SMAState;
-import org.eclipse.osee.ats.util.widgets.XCurrentStateDam;
-import org.eclipse.osee.ats.util.widgets.XStateDam;
-import org.eclipse.osee.ats.world.WorldXNavigateItemAction;
-import org.eclipse.osee.framework.core.data.SystemUser;
-import org.eclipse.osee.framework.core.enums.BranchArchivedState;
-import org.eclipse.osee.framework.core.enums.BranchState;
-import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
-import org.eclipse.osee.framework.core.exception.BranchDoesNotExist;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.core.model.type.AttributeType;
-import org.eclipse.osee.framework.jdk.core.type.HashCollection;
-import org.eclipse.osee.framework.jdk.core.util.Collections;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.logging.SevereLoggingMonitor;
-import org.eclipse.osee.framework.plugin.core.util.Jobs;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.UserManager;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
-import org.eclipse.osee.framework.skynet.core.artifact.Attribute;
-import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
-import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
-import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
-import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
-import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
-import org.eclipse.osee.framework.ui.plugin.PluginUiImage;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
-import org.eclipse.osee.framework.ui.skynet.results.XResultData;
-import org.eclipse.osee.framework.ui.skynet.util.ElapsedTime;
-import org.eclipse.osee.framework.ui.skynet.util.email.EmailUtil;
-import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
-import org.eclipse.osee.framework.ui.swt.Displays;
-
-/**
- * @author Donald G. Dunne
- */
-public class ValidateAtsDatabase extends WorldXNavigateItemAction {
-
- private boolean fixAssignees = true;
- private boolean fixAttributeValues = true;
- private final Set<String> hrids = new HashSet<String>();
- private final Map<String, String> legacyPcrIdToParentHrid = new HashMap<String, String>();
- private String emailOnComplete = null;
- private static ActionArtifact tempParentAction;
-
- public ValidateAtsDatabase(XNavigateItem parent) {
- this("Validate ATS Database", parent);
- }
-
- public ValidateAtsDatabase(String name, XNavigateItem parent) {
- super(parent, name, PluginUiImage.ADMIN);
- }
-
- @Override
- public void run(TableLoadOption... tableLoadOptions) {
- if (!MessageDialog.openConfirm(Displays.getActiveShell(), getName(), getName())) {
- return;
- }
- Jobs.startJob(new Report(getName()), true);
- }
-
- public void performTaskAndPend() throws InterruptedException {
- Report job = new Report(getName());
- job.setUser(true);
- job.setPriority(Job.LONG);
- job.schedule();
- job.join();
- }
-
- public class Report extends Job {
-
- public Report(String name) {
- super(name);
- }
-
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- try {
- XResultData rd = new XResultData();
- runIt(monitor, rd);
- rd.report(getName());
- if (Strings.isValid(emailOnComplete)) {
- String html = rd.getReport(getName()).getManipulatedHtml();
- EmailUtil.emailHtml(java.util.Collections.singleton(emailOnComplete),
- String.format("Sync - %s [%s]", XDate.getDateNow(), getName()), html);
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, -1, ex.getMessage(), ex);
- }
- monitor.done();
- return Status.OK_STATUS;
- }
- }
-
- private HashCollection<String, String> testNameToResultsMap = null;
-
- public void runIt(IProgressMonitor monitor, XResultData xResultData) throws OseeCoreException {
- SevereLoggingMonitor monitorLog = new SevereLoggingMonitor();
- OseeLog.registerLoggerListener(monitorLog);
-
- int count = 0;
- // Break artifacts into blocks so don't run out of memory
- List<Collection<Integer>> artIdLists = null;
-
- // Un-comment to process whole Common branch - Normal Mode
- ElapsedTime elapsedTime = new ElapsedTime("ValidateAtsDatabase - load ArtIds");
- artIdLists = loadAtsBranchArtifactIds(xResultData, monitor);
- elapsedTime.end();
-
- // Un-comment to process specific artifact from common - Test Mode
- // artIdLists = Arrays.asList((Collection<Integer>) Arrays.asList(new Integer(524575)));
-
- if (monitor != null) {
- monitor.beginTask(getName(), artIdLists.size());
- }
- testNameToResultsMap = new HashCollection<String, String>();
- boolean testingTest = false;
- int y = 0, artSetNum = 1;
- for (Collection<Integer> artIdList : artIdLists) {
- // Don't process all lists if just trying to test this report
- if (y++ > 5 && testingTest) {
- break;
- }
- elapsedTime =
- new ElapsedTime(String.format("ValidateAtsDatabase - load Artifact set %d/%d", artSetNum++,
- artIdLists.size()));
- Collection<Artifact> artifactsTemp = ArtifactQuery.getArtifactListFromIds(artIdList, AtsUtil.getAtsBranch());
- elapsedTime.end();
- Collection<Artifact> artifacts = new ArrayList<Artifact>();
- // Don't process all artifacts if just trying to test this report
- if (testingTest) {
- int x = 0;
- for (Artifact art : artifactsTemp) {
- artifacts.add(art);
- if (x++ > 20) {
- break;
- }
- }
- } else {
- artifacts.addAll(artifactsTemp);
- }
- count += artifacts.size();
- // testArtifactIds(artifacts);
- // testAtsAttributeValues(artifacts);
- // testAtsActionsHaveTeamWorkflow(artifacts);
- // testAtsWorkflowsHaveAction(artifacts);
- // testAtsWorkflowsHaveZeroOrOneVersion(artifacts);
- // testTasksHaveParentWorkflow(artifacts);
- // testReviewsHaveParentWorkflowOrActionableItems(artifacts);
- // testReviewsHaveValidDefectAndRoleXml(artifacts);
- // testTeamWorkflows(artifacts);
- testAtsBranchManager(artifacts);
- // testTeamDefinitions(artifacts);
- // testVersionArtifacts(artifacts);
- // testStateMachineAssignees(artifacts);
- // testAtsLogs(artifacts);
- // testActionableItemToTeamDefinition(artifacts);
- // testTeamDefinitionHasWorkflow(artifacts);
- // for (IAtsHealthCheck atsHealthCheck : AtsHealthCheck.getAtsHealthCheckItems()) {
- // atsHealthCheck.validateAtsDatabase(artifacts, testNameToResultsMap);
- // }
- if (monitor != null) {
- monitor.worked(1);
- }
- }
- // Log resultMap data into xResultData
- String[] keys = testNameToResultsMap.keySet().toArray(new String[testNameToResultsMap.keySet().size()]);
- Arrays.sort(keys);
- for (String testName : keys) {
- xResultData.log(testName);
- for (String result : testNameToResultsMap.getValues(testName)) {
- xResultData.log(result);
- }
- }
- xResultData.reportSevereLoggingMonitor(monitorLog);
- if (monitor != null) {
- xResultData.log(monitor, "Completed processing " + count + " artifacts.");
- }
- }
-
- private void testArtifactIds(Collection<Artifact> artifacts) {
- this.hrids.clear();
- this.legacyPcrIdToParentHrid.clear();
- for (Artifact artifact : artifacts) {
- try {
- // Check that HRIDs not duplicated on Common branch
- if (hrids.contains(artifact.getHumanReadableId())) {
- testNameToResultsMap.put("testArtifactIds",
- "Error: Duplicate HRIDs: " + XResultData.getHyperlink(artifact));
- }
- // Check that duplicate Legacy PCR IDs team arts do not exist with different parent actions
- if (artifact instanceof TeamWorkFlowArtifact) {
- TeamWorkFlowArtifact teamArt = (TeamWorkFlowArtifact) artifact;
- String legacyPcrId = artifact.getSoleAttributeValueAsString(AtsAttributeTypes.LegacyPcrId, null);
- if (legacyPcrId != null) {
- if (legacyPcrIdToParentHrid.containsKey(legacyPcrId)) {
- if (!legacyPcrIdToParentHrid.get(legacyPcrId).equals(
- teamArt.getParentActionArtifact().getHumanReadableId())) {
- testNameToResultsMap.put("testArtifactIds",
- "Error: Duplicate Legacy PCR Ids in Different Actions: " + legacyPcrId);
- }
- } else {
- legacyPcrIdToParentHrid.put(legacyPcrId, teamArt.getParentActionArtifact().getHumanReadableId());
- }
- }
- }
- } catch (Exception ex) {
- testNameToResultsMap.put(
- "testArtifactIds",
- "Error: " + artifact.getArtifactTypeName() + " " + XResultData.getHyperlink(artifact) + " exception: " + ex.getLocalizedMessage());
- }
- }
- }
-
- private void testVersionArtifacts(Collection<Artifact> artifacts) {
- for (Artifact artifact : artifacts) {
- if (artifact instanceof VersionArtifact) {
- VersionArtifact verArt = (VersionArtifact) artifact;
- try {
- String parentBranchGuid =
- verArt.getSoleAttributeValueAsString(AtsAttributeTypes.BaselineBranchGuid, null);
- if (parentBranchGuid != null) {
- validateBranchGuid(verArt, parentBranchGuid);
- }
- } catch (Exception ex) {
- testNameToResultsMap.put(
- "testVersionArtifacts",
- "Error: " + verArt.getArtifactTypeName() + " " + XResultData.getHyperlink(verArt) + " exception testing testVersionArtifacts: " + ex.getLocalizedMessage());
- }
- }
- }
- }
-
- private void testTeamDefinitions(Collection<Artifact> artifacts) {
- for (Artifact art : artifacts) {
- if (art instanceof TeamDefinitionArtifact) {
- TeamDefinitionArtifact teamDef = (TeamDefinitionArtifact) art;
- try {
- String parentBranchGuid =
- teamDef.getSoleAttributeValueAsString(AtsAttributeTypes.BaselineBranchGuid, null);
- if (parentBranchGuid != null) {
- validateBranchGuid(teamDef, parentBranchGuid);
- }
- } catch (Exception ex) {
- testNameToResultsMap.put(
- "testTeamDefinitionss",
- "Error: " + teamDef.getArtifactTypeName() + " " + XResultData.getHyperlink(teamDef) + " exception testing testTeamDefinitions: " + ex.getLocalizedMessage());
- }
- }
- }
- }
-
- private void testTeamWorkflows(Collection<Artifact> artifacts) {
- for (Artifact art : artifacts) {
- if (art instanceof TeamWorkFlowArtifact) {
- TeamWorkFlowArtifact teamArt = (TeamWorkFlowArtifact) art;
- try {
- if (teamArt.getActionableItemsDam().getActionableItems().isEmpty()) {
- testNameToResultsMap.put("testTeamWorkflows",
- "Error: TeamWorkflow " + XResultData.getHyperlink(teamArt) + " has 0 ActionableItems");
- }
- if (teamArt.getTeamDefinition() == null) {
- testNameToResultsMap.put("testTeamWorkflows",
- "Error: TeamWorkflow " + XResultData.getHyperlink(teamArt) + " has no TeamDefinition");
- }
- } catch (Exception ex) {
- testNameToResultsMap.put(
- "testTeamWorkflows",
- teamArt.getArtifactTypeName() + " " + XResultData.getHyperlink(teamArt) + " exception: " + ex.getLocalizedMessage());
- }
- }
- }
- }
-
- private void testAtsBranchManager(Collection<Artifact> artifacts) {
- for (Artifact art : artifacts) {
- if (art instanceof TeamWorkFlowArtifact) {
- TeamWorkFlowArtifact teamArt = (TeamWorkFlowArtifact) art;
- AtsBranchManager mgr = teamArt.getBranchMgr();
- try {
- Collection<Branch> branchesCommittedTo = mgr.getBranchesCommittedTo();
- Branch workingBranch = mgr.getWorkingBranch();
- if (workingBranch != null && branchesCommittedTo.size() > 0 && workingBranch.getBranchState() != BranchState.COMMITTED) {
- testNameToResultsMap.put(
- "testAtsBranchManagerA",
- "Error: TeamWorkflow " + XResultData.getHyperlink(teamArt) + " has committed branches but working branch [" + workingBranch.getGuid() + "] != COMMITTED");
- }
- if (workingBranch != null && workingBranch.getBranchState() == BranchState.COMMITTED && workingBranch.getArchiveState() == BranchArchivedState.UNARCHIVED) {
- String fixStr = "";
- if (teamArt.isCompleted()) {
- fixStr = " - Fix: Workflow Completed, Branch can be Archived";
- } else {
- fixStr = " - Workflow not completed, verify manually";
- }
- testNameToResultsMap.put(
- "testAtsBranchManagerB",
- "Error: TeamWorkflow " + XResultData.getHyperlink(teamArt) + " has committed working branch [" + workingBranch.getGuid() + "] but not archived" + fixStr);
- }
- } catch (Exception ex) {
- testNameToResultsMap.put(
- "testAtsBranchManager",
- teamArt.getArtifactTypeName() + " " + XResultData.getHyperlink(teamArt) + " exception: " + ex.getLocalizedMessage());
- }
- }
- }
- }
-
- private void validateBranchGuid(Artifact artifact, String parentBranchGuid) {
- try {
- Branch branch = BranchManager.getBranchByGuid(parentBranchGuid);
- if (branch.getArchiveState().isArchived()) {
- testNameToResultsMap.put("validateBranchGuid", String.format(
- "Error: Parent Branch Id [%s][%s] can't be Archived branch for [%s][%s]", parentBranchGuid, branch,
- artifact.getHumanReadableId(), artifact));
- } else if (branch.getBranchType().isWorkingBranch()) {
- testNameToResultsMap.put(
- "validateBranchGuid",
- String.format(
- "Error: Parent Branch [%s][%s] is WORKING branch and can't be parent branch for [%s][%s]; Switch to BASELINE?",
- parentBranchGuid, branch, artifact.getHumanReadableId(), artifact));
- } else if (!branch.getBranchType().isBaselineBranch()) {
- testNameToResultsMap.put("validateBranchGuid", String.format(
- "Error: Parent Branch Id [%s][%s] must be Baseline branch for [%s][%s]", parentBranchGuid, branch,
- artifact.getHumanReadableId(), artifact));
- }
- } catch (BranchDoesNotExist ex) {
- testNameToResultsMap.put("validateBranchGuid", String.format(
- "Error: Parent Branch Id [%s] references non-existant branch for [%s][%s]", parentBranchGuid,
- artifact.getHumanReadableId(), artifact));
- } catch (Exception ex) {
- testNameToResultsMap.put(
- "validateBranchGuid",
- "Error: " + artifact.getArtifactTypeName() + " " + XResultData.getHyperlink(artifact) + " exception: " + ex.getLocalizedMessage());
- }
- }
-
- public static List<Collection<Integer>> loadAtsBranchArtifactIds(XResultData xResultData, IProgressMonitor monitor) throws OseeCoreException {
- if (xResultData == null) {
- xResultData = new XResultData();
- }
- xResultData.log(monitor, "testLoadAllCommonArtifactIds - Started " + XDate.getDateNow(XDate.MMDDYYHHMM));
- List<Integer> artIds = ArtifactQuery.selectArtifactListFromBranch(AtsUtil.getAtsBranch(), EXCLUDE_DELETED);
-
- if (artIds.isEmpty()) {
- xResultData.logError("Error: Artifact load returned 0 artifacts to check");
- }
- xResultData.log(monitor, "testLoadAllCommonArtifactIds - Completed " + XDate.getDateNow(XDate.MMDDYYHHMM));
- return Collections.subDivide(artIds, 5000);
- }
-
- private void testAtsAttributeValues(Collection<Artifact> artifacts) {
- try {
- SkynetTransaction transaction = new SkynetTransaction(AtsUtil.getAtsBranch(), "Validate ATS Database");
- for (Artifact artifact : artifacts) {
-
- try {
- // Test for null attribute values
- for (Attribute<?> attr : artifact.getAttributes()) {
- if (attr.getValue() == null) {
- testNameToResultsMap.put(
- "testAtsAttributeValues",
- "Error: Artifact: " + XResultData.getHyperlink(artifact) + " Types: " + artifact.getArtifactTypeName() + " - Null Attribute");
- if (fixAttributeValues) {
- attr.delete();
- }
- }
- }
-
- if (artifact instanceof StateMachineArtifact) {
- checkAndResolveDuplicateAttributesForAttributeNameContains("ats", artifact, fixAttributeValues,
- testNameToResultsMap, transaction);
- }
-
- // Test for ats.State Completed;;;<num> or Cancelled;;;<num> and cleanup
- if (artifact instanceof StateMachineArtifact) {
- XStateDam stateDam = new XStateDam((StateMachineArtifact) artifact);
- for (SMAState state : stateDam.getStates()) {
- if (state.getName().equals(DefaultTeamState.Completed.name()) || state.getName().equals(
- DefaultTeamState.Cancelled.name())) {
- if (state.getHoursSpent() != 0.0 || state.getPercentComplete() != 0) {
- testNameToResultsMap.put(
- "testAtsAttributeValues",
- "Error: ats.State error for SMA: " + XResultData.getHyperlink(artifact) + " State: " + state.getName() + " Hours Spent: " + state.getHoursSpentStr() + " Percent: " + state.getPercentComplete());
- if (fixAttributeValues) {
- state.setHoursSpent(0);
- state.setPercentComplete(0);
- stateDam.setState(state);
- testNameToResultsMap.put("testAtsAttributeValues", "Fixed");
- }
- }
- }
- }
- }
-
- // Test for ats.CurrentState Completed;;;<num> or Cancelled;;;<num> and cleanup
- if (artifact instanceof StateMachineArtifact) {
- XCurrentStateDam currentStateDam = new XCurrentStateDam((StateMachineArtifact) artifact);
- SMAState state = currentStateDam.getState();
- if (state.getName().equals(DefaultTeamState.Completed.name()) || state.getName().equals(
- DefaultTeamState.Cancelled.name())) {
- if (state.getHoursSpent() != 0.0 || state.getPercentComplete() != 0) {
- testNameToResultsMap.put(
- "testAtsAttributeValues",
- "Error: ats.CurrentState error for SMA: " + XResultData.getHyperlink(artifact) + " State: " + state.getName() + " Hours Spent: " + state.getHoursSpentStr() + " Percent: " + state.getPercentComplete());
- if (fixAttributeValues) {
- state.setHoursSpent(0);
- state.setPercentComplete(0);
- currentStateDam.setState(state);
- testNameToResultsMap.put("testAtsAttributeValues", "Fixed");
- }
- }
- }
- }
- if (artifact.hasDirtyAttributes()) {
- artifact.persist(transaction);
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- testNameToResultsMap.put("testAtsAttributeValues",
- "Error: Artifact: " + XResultData.getHyperlink(artifact) + " Exception: " + ex.getLocalizedMessage());
- }
- }
- transaction.execute();
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- testNameToResultsMap.put("testAtsAttributeValues", "Error: Exception: " + ex.getLocalizedMessage());
- }
- }
-
- public static void checkAndResolveDuplicateAttributesForAttributeNameContains(String nameContainsStr, Artifact artifact, boolean fixAttributeValues, HashCollection<String, String> resultsMap, SkynetTransaction transaction) throws OseeCoreException {
- for (AttributeType attrType : AttributeTypeManager.getAllTypes()) {
- if (attrType.getName().contains(nameContainsStr)) {
- int count = artifact.getAttributeCount(attrType);
- if (count > attrType.getMaxOccurrences()) {
- String result =
- String.format(
- "Error: Artifact: " + XResultData.getHyperlink(artifact) + " Type [%s] AttrType [%s] Max [%d] Actual [%d] Values [%s] ",
- artifact.getArtifactTypeName(), attrType.getName(), attrType.getMaxOccurrences(), count,
- artifact.getAttributesToString(attrType));
- Map<String, Attribute<?>> valuesAttrMap = new HashMap<String, Attribute<?>>();
- int latestGamma = 0;
- String fixInfo = " - FIX AVAILABLE";
- for (Attribute<?> attr : artifact.getAttributes(attrType)) {
- if (attr.getGammaId() > latestGamma) {
- latestGamma = attr.getGammaId();
- }
- String info = String.format("[Gamma [%s] Value [%s]]", attr.getGammaId(), attr.getValue());
- valuesAttrMap.put(info, attr);
- fixInfo += info;
- }
- fixInfo += " - KEEP Gamma" + latestGamma;
- if (latestGamma != 0) {
- result += fixInfo;
- if (fixAttributeValues) {
- for (Attribute<?> attr : artifact.getAttributes(attrType)) {
- if (attr.getGammaId() != latestGamma) {
- attr.delete();
- }
- }
- artifact.persist(transaction);
- resultsMap.put("checkAndResolveDuplicateAttributesForAttributeNameContains", "Fixed");
- }
- }
- resultsMap.put("checkAndResolveDuplicateAttributesForAttributeNameContains", result);
- }
- }
- }
- }
-
- private void testAtsActionsHaveTeamWorkflow(Collection<Artifact> artifacts) {
- for (Artifact artifact : artifacts) {
- try {
- if (artifact instanceof ActionArtifact) {
- if (((ActionArtifact) artifact).getTeamWorkFlowArtifacts().isEmpty()) {
- testNameToResultsMap.put("testAtsActionsHaveTeamWorkflow",
- "Error: Action " + XResultData.getHyperlink(artifact) + " has no Team Workflows\n");
- }
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- testNameToResultsMap.put("testAtsActionsHaveTeamWorkflow", "Error: Exception: " + ex.getLocalizedMessage());
- }
- }
- }
-
- private void testAtsWorkflowsHaveAction(Collection<Artifact> artifacts) {
- for (Artifact artifact : artifacts) {
- try {
- if (artifact instanceof TeamWorkFlowArtifact) {
- boolean noParent = false;
- try {
- if (((TeamWorkFlowArtifact) artifact).getParentActionArtifact() == null) {
- testNameToResultsMap.put("testAtsWorkflowsHaveAction",
- "Error: Team " + XResultData.getHyperlink(artifact) + " has no parent Action\n");
- noParent = true;
- }
- } catch (Exception ex) {
- testNameToResultsMap.put("testAtsWorkflowsHaveAction",
- "Error: Team " + XResultData.getHyperlink(artifact) + " has no parent Action: exception " + ex);
- noParent = true;
- }
- // Create temporary action so these can be either purged or re-assigned
- if (noParent) {
- if (tempParentAction == null) {
- tempParentAction =
- (ActionArtifact) ArtifactTypeManager.addArtifact(AtsArtifactTypes.Action,
- AtsUtil.getAtsBranch());
- tempParentAction.setName("Temp Parent Action");
- testNameToResultsMap.put(
- "testAtsWorkflowsHaveAction",
- "Error: Temp Parent Action " + XResultData.getHyperlink(tempParentAction) + " created for orphaned teams.");
-
- }
- tempParentAction.addRelation(AtsRelationTypes.ActionToWorkflow_WorkFlow, artifact);
- tempParentAction.persist();
- }
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- testNameToResultsMap.put("testAtsWorkflowsHaveAction", "Error: Exception: " + ex.getLocalizedMessage());
- }
- }
- if (tempParentAction != null) {
- AtsUtil.openATSAction(tempParentAction, AtsOpenOption.AtsWorld);
- }
- }
-
- private void testAtsWorkflowsHaveZeroOrOneVersion(Collection<Artifact> artifacts) {
- for (Artifact artifact : artifacts) {
- try {
- if (artifact instanceof TeamWorkFlowArtifact) {
- TeamWorkFlowArtifact teamArt = (TeamWorkFlowArtifact) artifact;
- if (teamArt.getRelatedArtifacts(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version).size() > 1) {
- testNameToResultsMap.put(
- "testAtsWorkflowsHaveZeroOrOneVersion",
- "Error: Team workflow " + XResultData.getHyperlink(teamArt) + " has " + teamArt.getRelatedArtifacts(
- AtsRelationTypes.TeamWorkflowTargetedForVersion_Version).size() + " versions");
- }
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- testNameToResultsMap.put("testAtsWorkflowsHaveZeroOrOneVersion",
- "Error: Exception: " + ex.getLocalizedMessage());
- }
- }
-
- }
-
- private void testTasksHaveParentWorkflow(Collection<Artifact> artifacts) {
- Set<Artifact> badTasks = new HashSet<Artifact>(30);
- for (Artifact artifact : artifacts) {
- try {
- if (artifact instanceof TaskArtifact) {
- TaskArtifact taskArtifact = (TaskArtifact) artifact;
- if (taskArtifact.getRelatedArtifacts(AtsRelationTypes.SmaToTask_Sma).size() != 1) {
- testNameToResultsMap.put(
- "testTasksHaveParentWorkflow",
- "Error: Task " + XResultData.getHyperlink(taskArtifact) + " has " + taskArtifact.getRelatedArtifacts(
- AtsRelationTypes.SmaToTask_Sma).size() + " parents.");
- badTasks.add(taskArtifact);
- }
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- testNameToResultsMap.put("testTasksHaveParentWorkflow", "Error: Exception: " + ex.getLocalizedMessage());
- }
- }
- try {
- if (badTasks.size() > 0) {
- TaskEditor.open(new TaskEditorSimpleProvider("ValidateATSDatabase: Tasks have !=1 parent workflows.",
- badTasks));
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- testNameToResultsMap.put("testTasksHaveParentWorkflow", "Error: Exception: " + ex.getLocalizedMessage());
- }
- }
-
- private void testActionableItemToTeamDefinition(Collection<Artifact> artifacts) {
- for (Artifact artifact : artifacts) {
- try {
- if (artifact instanceof ActionableItemArtifact) {
- ActionableItemArtifact aia = (ActionableItemArtifact) artifact;
- if (aia.isActionable()) {
- if (TeamDefinitionArtifact.getImpactedTeamDefs(Arrays.asList(aia)).isEmpty()) {
- testNameToResultsMap.put(
- "testActionableItemToTeamDefinition",
- "Error: ActionableItem " + XResultData.getHyperlink(artifact.getName(), artifact) + " has to related TeamDefinition and is set to Actionable");
- }
- }
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- testNameToResultsMap.put("testActionableItemToTeamDefinition",
- "Error: Exception: " + ex.getLocalizedMessage());
- }
- }
- }
-
- private void testTeamDefinitionHasWorkflow(Collection<Artifact> artifacts) {
- for (Artifact artifact : artifacts) {
- try {
- if (artifact instanceof TeamDefinitionArtifact) {
- TeamDefinitionArtifact teamDef = (TeamDefinitionArtifact) artifact;
- if (teamDef.isActionable() && teamDef.getWorkFlowDefinition() == null) {
- testNameToResultsMap.put(
- "testTeamDefinitionHasWorkflow",
- "Error: TeamDefintion " + XResultData.getHyperlink(artifact.getName(), artifact) + " has no related workflow and is set to Actionable");
- }
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- testNameToResultsMap.put("testTeamDefinitionHasWorkflow", "Error: Exception: " + ex.getLocalizedMessage());
- }
- }
- }
-
- private void testReviewsHaveValidDefectAndRoleXml(Collection<Artifact> artifacts) {
- for (Artifact artifact : artifacts) {
- if (artifact instanceof ReviewSMArtifact) {
- ReviewSMArtifact reviewArtifact = (ReviewSMArtifact) artifact;
- try {
- if (reviewArtifact.getAttributes(AtsAttributeTypes.ReviewDefect).size() > 0 && reviewArtifact.getDefectManager().getDefectItems().isEmpty()) {
- testNameToResultsMap.put(
- "testReviewsHaveValidDefectAndRoleXml",
- "Error: Review " + XResultData.getHyperlink(reviewArtifact) + " has defect attribute, but no defects (xml parsing error).");
- }
- if (reviewArtifact.getAttributes(AtsAttributeTypes.Role).size() > 0 && reviewArtifact.getUserRoleManager().getUserRoles().isEmpty()) {
- testNameToResultsMap.put(
- "testReviewsHaveValidDefectAndRoleXml",
- "Error: Review " + XResultData.getHyperlink(reviewArtifact) + " has role attribute, but no roles (xml parsing error).");
- }
- } catch (OseeCoreException ex) {
- testNameToResultsMap.put(
- "testReviewsHaveValidDefectAndRoleXml",
- "Error: Exception processing Review " + XResultData.getHyperlink(reviewArtifact) + " defect test " + ex.getLocalizedMessage());
- }
- }
- }
- }
-
- private void testReviewsHaveParentWorkflowOrActionableItems(Collection<Artifact> artifacts) {
- for (Artifact artifact : artifacts) {
- try {
- if (artifact instanceof ReviewSMArtifact) {
- ReviewSMArtifact reviewArtifact = (ReviewSMArtifact) artifact;
- if (reviewArtifact.getRelatedArtifacts(AtsRelationTypes.TeamWorkflowToReview_Team).isEmpty() && reviewArtifact.getActionableItemsDam().getActionableItemGuids().isEmpty()) {
- testNameToResultsMap.put(
- "testReviewsHaveParentWorkflowOrActionableItems",
- "Error: Review " + XResultData.getHyperlink(reviewArtifact) + " has 0 related parents and 0 actionable items.");
- }
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- testNameToResultsMap.put("testTeamDefinitionHasWorkflow", "Error: Exception: " + ex.getLocalizedMessage());
- }
- }
- }
-
- private void testAtsLogs(Collection<Artifact> artifacts) {
- for (Artifact art : artifacts) {
- if (art instanceof StateMachineArtifact) {
- StateMachineArtifact sma = (StateMachineArtifact) art;
- try {
- ATSLog log = sma.getLog();
- if (log.getOriginator() == null) {
- try {
- testNameToResultsMap.put(
- "testAtsLogs",
- "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " originator == null");
- } catch (Exception ex) {
- testNameToResultsMap.put(
- "testAtsLogs",
- "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " exception accessing originator: " + ex.getLocalizedMessage());
- }
- }
- for (String stateName : Arrays.asList("Completed", "Cancelled")) {
- if (sma.getStateMgr().getCurrentStateName().equals(stateName)) {
- LogItem logItem = log.getStateEvent(LogType.StateEntered, stateName);
- if (logItem == null) {
- try {
- testNameToResultsMap.put(
- "testAtsLogs",
- "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " state \"" + stateName + "\" logItem == null");
- } catch (Exception ex) {
- testNameToResultsMap.put(
- "testAtsLogs",
- "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " exception accessing logItem: " + ex.getLocalizedMessage());
-
- }
- }
- if (logItem.getDate() == null) {
- try {
- testNameToResultsMap.put(
- "testAtsLogs",
- "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " state \"" + stateName + "\" logItem.date == null");
- } catch (Exception ex) {
- testNameToResultsMap.put(
- "testAtsLogs",
- "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " exception accessing logItem.date: " + ex.getLocalizedMessage());
-
- }
- }
- }
- }
- // Generate html log which will exercise all the conversions
- log.getHtml();
- // Verify that all users are resolved
- for (LogItem logItem : sma.getLog().getLogItems()) {
- if (logItem.getUser() == null) {
- testNameToResultsMap.put(
- "testAtsLogs",
- "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " user == null for userId \"" + logItem.getUserId() + "\"");
- }
- }
- } catch (Exception ex) {
- testNameToResultsMap.put(
- "testAtsLogs",
- "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " exception accessing AtsLog: " + ex.getLocalizedMessage());
- }
- }
- }
- }
-
- private static User unAssignedUser;
- private static User oseeSystemUser;
-
- private void testStateMachineAssignees(Collection<Artifact> artifacts) {
- if (unAssignedUser == null) {
- try {
- unAssignedUser = UserManager.getUser(SystemUser.UnAssigned);
- oseeSystemUser = UserManager.getUser(SystemUser.OseeSystem);
- } catch (OseeCoreException ex) {
- testNameToResultsMap.put("testStateMachineAssignees",
- "Error: Exception retrieving users: " + ex.getLocalizedMessage());
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- for (Artifact art : artifacts) {
- if (art instanceof StateMachineArtifact) {
- try {
- StateMachineArtifact sma = (StateMachineArtifact) art;
- if ((sma.isCompleted() || sma.isCancelled()) && sma.getStateMgr().getAssignees().size() > 0) {
- testNameToResultsMap.put(
- "testStateMachineAssignees",
- "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " cancel/complete with attribute assignees");
- if (fixAssignees) {
- sma.getStateMgr().clearAssignees();
- sma.persist();
- testNameToResultsMap.put("testStateMachineAssignees", "Fixed");
- }
- }
- if (sma.getStateMgr().getAssignees().size() > 1 && sma.getStateMgr().getAssignees().contains(
- unAssignedUser)) {
- testNameToResultsMap.put(
- "testStateMachineAssignees",
- "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " is unassigned and assigned => " + Artifacts.toString(
- "; ", sma.getStateMgr().getAssignees()));
- if (fixAssignees) {
- sma.getStateMgr().removeAssignee(unAssignedUser);
- testNameToResultsMap.put("testStateMachineAssignees", "Fixed");
- }
- }
- if (sma.getStateMgr().getAssignees().contains(oseeSystemUser)) {
- testNameToResultsMap.put(
- "testStateMachineAssignees",
- "Error: " + art.getHumanReadableId() + " is assigned to OseeSystem; invalid assignment - MANUAL FIX REQUIRED");
- }
- if (!sma.isCompleted() && !sma.isCancelled() && sma.getStateMgr().getAssignees().isEmpty()) {
- testNameToResultsMap.put(
- "testStateMachineAssignees",
- "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " In Work without assignees");
- }
- List<Artifact> relationAssigned = art.getRelatedArtifacts(CoreRelationTypes.Users_User, Artifact.class);
- if ((sma.isCompleted() || sma.isCancelled()) && relationAssigned.size() > 0) {
- testNameToResultsMap.put(
- "testStateMachineAssignees (remove after 0.9.5)",
- "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " cancel/complete with related assignees");
- if (fixAssignees) {
- try {
- StateManager.updateAssigneeRelations(sma);
- art.persist();
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- testNameToResultsMap.put("testStateMachineAssignees", "Fixed");
- }
- } else if (sma.getStateMgr().getAssignees().size() != relationAssigned.size()) {
- // Make sure this isn't just an UnAssigned user issue (don't relate to unassigned user anymore)
- if (!(sma.getStateMgr().getAssignees().contains(UserManager.getUser(SystemUser.UnAssigned)) && relationAssigned.isEmpty())) {
- testNameToResultsMap.put(
- "testStateMachineAssignees",
- "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " attribute assignees doesn't match related assignees");
- if (fixAssignees) {
- try {
- StateManager.updateAssigneeRelations(sma);
- art.persist();
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- testNameToResultsMap.put("testStateMachineAssignees", "Fixed");
- }
- }
- }
- } catch (OseeCoreException ex) {
- testNameToResultsMap.put("testStateMachineAssignees",
- "Error: Exception testing assignees: " + ex.getLocalizedMessage());
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- }
- }
-
- /**
- * @param fixAssignees the fixAssignees to set
- */
- public void setFixAssignees(boolean fixAssignees) {
- this.fixAssignees = fixAssignees;
- }
-
- /**
- * @param fixAttributeValues the fixAttributeValues to set
- */
- public void setFixAttributeValues(boolean fixAttributeValues) {
- this.fixAttributeValues = fixAttributeValues;
- }
-
- /**
- * set to email if desire email on completion
- */
- public void setEmailOnComplete(String emailOnComplete) {
- this.emailOnComplete = emailOnComplete;
- }
-
-}
+/******************************************************************************* + * 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.health; + +import static org.eclipse.osee.framework.skynet.core.artifact.DeletionFlag.EXCLUDE_DELETED; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.logging.Level; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.osee.ats.AtsOpenOption; +import org.eclipse.osee.ats.artifact.ATSLog; +import org.eclipse.osee.ats.artifact.ATSLog.LogType; +import org.eclipse.osee.ats.artifact.ActionArtifact; +import org.eclipse.osee.ats.artifact.ActionableItemArtifact; +import org.eclipse.osee.ats.artifact.AtsAttributeTypes; +import org.eclipse.osee.ats.artifact.LogItem; +import org.eclipse.osee.ats.artifact.ReviewSMArtifact; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.artifact.TaskArtifact; +import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact.DefaultTeamState; +import org.eclipse.osee.ats.artifact.VersionArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.task.TaskEditor; +import org.eclipse.osee.ats.task.TaskEditorSimpleProvider; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.ats.util.AtsBranchManager; +import org.eclipse.osee.ats.util.AtsRelationTypes; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.ats.util.StateManager; +import org.eclipse.osee.ats.util.widgets.SMAState; +import org.eclipse.osee.ats.util.widgets.XCurrentStateDam; +import org.eclipse.osee.ats.util.widgets.XStateDam; +import org.eclipse.osee.ats.world.WorldXNavigateItemAction; +import org.eclipse.osee.framework.core.data.SystemUser; +import org.eclipse.osee.framework.core.enums.BranchArchivedState; +import org.eclipse.osee.framework.core.enums.BranchState; +import org.eclipse.osee.framework.core.enums.CoreRelationTypes; +import org.eclipse.osee.framework.core.exception.BranchDoesNotExist; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.type.AttributeType; +import org.eclipse.osee.framework.jdk.core.type.HashCollection; +import org.eclipse.osee.framework.jdk.core.util.Collections; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.logging.SevereLoggingMonitor; +import org.eclipse.osee.framework.plugin.core.util.Jobs; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.UserManager; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager; +import org.eclipse.osee.framework.skynet.core.artifact.Attribute; +import org.eclipse.osee.framework.skynet.core.artifact.BranchManager; +import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; +import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager; +import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction; +import org.eclipse.osee.framework.skynet.core.utility.Artifacts; +import org.eclipse.osee.framework.ui.plugin.PluginUiImage; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem; +import org.eclipse.osee.framework.ui.skynet.results.XResultData; +import org.eclipse.osee.framework.ui.skynet.util.ElapsedTime; +import org.eclipse.osee.framework.ui.skynet.util.email.EmailUtil; +import org.eclipse.osee.framework.ui.skynet.widgets.XDate; +import org.eclipse.osee.framework.ui.swt.Displays; + +/** + * @author Donald G. Dunne + */ +public class ValidateAtsDatabase extends WorldXNavigateItemAction { + + private boolean fixAssignees = true; + private boolean fixAttributeValues = true; + private final Set<String> hrids = new HashSet<String>(); + private final Map<String, String> legacyPcrIdToParentHrid = new HashMap<String, String>(); + private String emailOnComplete = null; + private static ActionArtifact tempParentAction; + + public ValidateAtsDatabase(XNavigateItem parent) { + this("Validate ATS Database", parent); + } + + public ValidateAtsDatabase(String name, XNavigateItem parent) { + super(parent, name, PluginUiImage.ADMIN); + } + + @Override + public void run(TableLoadOption... tableLoadOptions) { + if (!MessageDialog.openConfirm(Displays.getActiveShell(), getName(), getName())) { + return; + } + Jobs.startJob(new Report(getName()), true); + } + + public void performTaskAndPend() throws InterruptedException { + Report job = new Report(getName()); + job.setUser(true); + job.setPriority(Job.LONG); + job.schedule(); + job.join(); + } + + public class Report extends Job { + + public Report(String name) { + super(name); + } + + @Override + protected IStatus run(IProgressMonitor monitor) { + try { + XResultData rd = new XResultData(); + runIt(monitor, rd); + rd.report(getName()); + if (Strings.isValid(emailOnComplete)) { + String html = rd.getReport(getName()).getManipulatedHtml(); + EmailUtil.emailHtml(java.util.Collections.singleton(emailOnComplete), + String.format("Sync - %s [%s]", XDate.getDateNow(), getName()), html); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, -1, ex.getMessage(), ex); + } + monitor.done(); + return Status.OK_STATUS; + } + } + + private HashCollection<String, String> testNameToResultsMap = null; + + public void runIt(IProgressMonitor monitor, XResultData xResultData) throws OseeCoreException { + SevereLoggingMonitor monitorLog = new SevereLoggingMonitor(); + OseeLog.registerLoggerListener(monitorLog); + + int count = 0; + // Break artifacts into blocks so don't run out of memory + List<Collection<Integer>> artIdLists = null; + + // Un-comment to process whole Common branch - Normal Mode + ElapsedTime elapsedTime = new ElapsedTime("ValidateAtsDatabase - load ArtIds"); + artIdLists = loadAtsBranchArtifactIds(xResultData, monitor); + elapsedTime.end(); + + // Un-comment to process specific artifact from common - Test Mode + // artIdLists = Arrays.asList((Collection<Integer>) Arrays.asList(new Integer(524575))); + + if (monitor != null) { + monitor.beginTask(getName(), artIdLists.size()); + } + testNameToResultsMap = new HashCollection<String, String>(); + boolean testingTest = false; + int y = 0, artSetNum = 1; + for (Collection<Integer> artIdList : artIdLists) { + // Don't process all lists if just trying to test this report + if (y++ > 5 && testingTest) { + break; + } + elapsedTime = + new ElapsedTime(String.format("ValidateAtsDatabase - load Artifact set %d/%d", artSetNum++, + artIdLists.size())); + Collection<Artifact> artifactsTemp = ArtifactQuery.getArtifactListFromIds(artIdList, AtsUtil.getAtsBranch()); + elapsedTime.end(); + Collection<Artifact> artifacts = new ArrayList<Artifact>(); + // Don't process all artifacts if just trying to test this report + if (testingTest) { + int x = 0; + for (Artifact art : artifactsTemp) { + artifacts.add(art); + if (x++ > 20) { + break; + } + } + } else { + artifacts.addAll(artifactsTemp); + } + count += artifacts.size(); + // testArtifactIds(artifacts); + // testAtsAttributeValues(artifacts); + // testAtsActionsHaveTeamWorkflow(artifacts); + // testAtsWorkflowsHaveAction(artifacts); + // testAtsWorkflowsHaveZeroOrOneVersion(artifacts); + // testTasksHaveParentWorkflow(artifacts); + // testReviewsHaveParentWorkflowOrActionableItems(artifacts); + // testReviewsHaveValidDefectAndRoleXml(artifacts); + // testTeamWorkflows(artifacts); + testAtsBranchManager(artifacts); + // testTeamDefinitions(artifacts); + // testVersionArtifacts(artifacts); + // testStateMachineAssignees(artifacts); + // testAtsLogs(artifacts); + // testActionableItemToTeamDefinition(artifacts); + // testTeamDefinitionHasWorkflow(artifacts); + // for (IAtsHealthCheck atsHealthCheck : AtsHealthCheck.getAtsHealthCheckItems()) { + // atsHealthCheck.validateAtsDatabase(artifacts, testNameToResultsMap); + // } + if (monitor != null) { + monitor.worked(1); + } + } + // Log resultMap data into xResultData + String[] keys = testNameToResultsMap.keySet().toArray(new String[testNameToResultsMap.keySet().size()]); + Arrays.sort(keys); + for (String testName : keys) { + xResultData.log(testName); + for (String result : testNameToResultsMap.getValues(testName)) { + xResultData.log(result); + } + } + xResultData.reportSevereLoggingMonitor(monitorLog); + if (monitor != null) { + xResultData.log(monitor, "Completed processing " + count + " artifacts."); + } + } + + private void testArtifactIds(Collection<Artifact> artifacts) { + this.hrids.clear(); + this.legacyPcrIdToParentHrid.clear(); + for (Artifact artifact : artifacts) { + try { + // Check that HRIDs not duplicated on Common branch + if (hrids.contains(artifact.getHumanReadableId())) { + testNameToResultsMap.put("testArtifactIds", + "Error: Duplicate HRIDs: " + XResultData.getHyperlink(artifact)); + } + // Check that duplicate Legacy PCR IDs team arts do not exist with different parent actions + if (artifact instanceof TeamWorkFlowArtifact) { + TeamWorkFlowArtifact teamArt = (TeamWorkFlowArtifact) artifact; + String legacyPcrId = artifact.getSoleAttributeValueAsString(AtsAttributeTypes.LegacyPcrId, null); + if (legacyPcrId != null) { + if (legacyPcrIdToParentHrid.containsKey(legacyPcrId)) { + if (!legacyPcrIdToParentHrid.get(legacyPcrId).equals( + teamArt.getParentActionArtifact().getHumanReadableId())) { + testNameToResultsMap.put("testArtifactIds", + "Error: Duplicate Legacy PCR Ids in Different Actions: " + legacyPcrId); + } + } else { + legacyPcrIdToParentHrid.put(legacyPcrId, teamArt.getParentActionArtifact().getHumanReadableId()); + } + } + } + } catch (Exception ex) { + testNameToResultsMap.put( + "testArtifactIds", + "Error: " + artifact.getArtifactTypeName() + " " + XResultData.getHyperlink(artifact) + " exception: " + ex.getLocalizedMessage()); + } + } + } + + private void testVersionArtifacts(Collection<Artifact> artifacts) { + for (Artifact artifact : artifacts) { + if (artifact instanceof VersionArtifact) { + VersionArtifact verArt = (VersionArtifact) artifact; + try { + String parentBranchGuid = + verArt.getSoleAttributeValueAsString(AtsAttributeTypes.BaselineBranchGuid, null); + if (parentBranchGuid != null) { + validateBranchGuid(verArt, parentBranchGuid); + } + } catch (Exception ex) { + testNameToResultsMap.put( + "testVersionArtifacts", + "Error: " + verArt.getArtifactTypeName() + " " + XResultData.getHyperlink(verArt) + " exception testing testVersionArtifacts: " + ex.getLocalizedMessage()); + } + } + } + } + + private void testTeamDefinitions(Collection<Artifact> artifacts) { + for (Artifact art : artifacts) { + if (art instanceof TeamDefinitionArtifact) { + TeamDefinitionArtifact teamDef = (TeamDefinitionArtifact) art; + try { + String parentBranchGuid = + teamDef.getSoleAttributeValueAsString(AtsAttributeTypes.BaselineBranchGuid, null); + if (parentBranchGuid != null) { + validateBranchGuid(teamDef, parentBranchGuid); + } + } catch (Exception ex) { + testNameToResultsMap.put( + "testTeamDefinitionss", + "Error: " + teamDef.getArtifactTypeName() + " " + XResultData.getHyperlink(teamDef) + " exception testing testTeamDefinitions: " + ex.getLocalizedMessage()); + } + } + } + } + + private void testTeamWorkflows(Collection<Artifact> artifacts) { + for (Artifact art : artifacts) { + if (art instanceof TeamWorkFlowArtifact) { + TeamWorkFlowArtifact teamArt = (TeamWorkFlowArtifact) art; + try { + if (teamArt.getActionableItemsDam().getActionableItems().isEmpty()) { + testNameToResultsMap.put("testTeamWorkflows", + "Error: TeamWorkflow " + XResultData.getHyperlink(teamArt) + " has 0 ActionableItems"); + } + if (teamArt.getTeamDefinition() == null) { + testNameToResultsMap.put("testTeamWorkflows", + "Error: TeamWorkflow " + XResultData.getHyperlink(teamArt) + " has no TeamDefinition"); + } + } catch (Exception ex) { + testNameToResultsMap.put( + "testTeamWorkflows", + teamArt.getArtifactTypeName() + " " + XResultData.getHyperlink(teamArt) + " exception: " + ex.getLocalizedMessage()); + } + } + } + } + + private void testAtsBranchManager(Collection<Artifact> artifacts) { + for (Artifact art : artifacts) { + if (art instanceof TeamWorkFlowArtifact) { + TeamWorkFlowArtifact teamArt = (TeamWorkFlowArtifact) art; + AtsBranchManager mgr = teamArt.getBranchMgr(); + try { + Collection<Branch> branchesCommittedTo = mgr.getBranchesCommittedTo(); + Branch workingBranch = mgr.getWorkingBranch(); + if (workingBranch != null && branchesCommittedTo.size() > 0 && workingBranch.getBranchState() != BranchState.COMMITTED) { + testNameToResultsMap.put( + "testAtsBranchManagerA", + "Error: TeamWorkflow " + XResultData.getHyperlink(teamArt) + " has committed branches but working branch [" + workingBranch.getGuid() + "] != COMMITTED"); + } + if (workingBranch != null && workingBranch.getBranchState() == BranchState.COMMITTED && workingBranch.getArchiveState() == BranchArchivedState.UNARCHIVED) { + String fixStr = ""; + if (teamArt.isCompleted()) { + fixStr = " - Fix: Workflow Completed, Branch can be Archived"; + } else { + fixStr = " - Workflow not completed, verify manually"; + } + testNameToResultsMap.put( + "testAtsBranchManagerB", + "Error: TeamWorkflow " + XResultData.getHyperlink(teamArt) + " has committed working branch [" + workingBranch.getGuid() + "] but not archived" + fixStr); + } + } catch (Exception ex) { + testNameToResultsMap.put( + "testAtsBranchManager", + teamArt.getArtifactTypeName() + " " + XResultData.getHyperlink(teamArt) + " exception: " + ex.getLocalizedMessage()); + } + } + } + } + + private void validateBranchGuid(Artifact artifact, String parentBranchGuid) { + try { + Branch branch = BranchManager.getBranchByGuid(parentBranchGuid); + if (branch.getArchiveState().isArchived()) { + testNameToResultsMap.put("validateBranchGuid", String.format( + "Error: Parent Branch Id [%s][%s] can't be Archived branch for [%s][%s]", parentBranchGuid, branch, + artifact.getHumanReadableId(), artifact)); + } else if (branch.getBranchType().isWorkingBranch()) { + testNameToResultsMap.put( + "validateBranchGuid", + String.format( + "Error: Parent Branch [%s][%s] is WORKING branch and can't be parent branch for [%s][%s]; Switch to BASELINE?", + parentBranchGuid, branch, artifact.getHumanReadableId(), artifact)); + } else if (!branch.getBranchType().isBaselineBranch()) { + testNameToResultsMap.put("validateBranchGuid", String.format( + "Error: Parent Branch Id [%s][%s] must be Baseline branch for [%s][%s]", parentBranchGuid, branch, + artifact.getHumanReadableId(), artifact)); + } + } catch (BranchDoesNotExist ex) { + testNameToResultsMap.put("validateBranchGuid", String.format( + "Error: Parent Branch Id [%s] references non-existant branch for [%s][%s]", parentBranchGuid, + artifact.getHumanReadableId(), artifact)); + } catch (Exception ex) { + testNameToResultsMap.put( + "validateBranchGuid", + "Error: " + artifact.getArtifactTypeName() + " " + XResultData.getHyperlink(artifact) + " exception: " + ex.getLocalizedMessage()); + } + } + + public static List<Collection<Integer>> loadAtsBranchArtifactIds(XResultData xResultData, IProgressMonitor monitor) throws OseeCoreException { + if (xResultData == null) { + xResultData = new XResultData(); + } + xResultData.log(monitor, "testLoadAllCommonArtifactIds - Started " + XDate.getDateNow(XDate.MMDDYYHHMM)); + List<Integer> artIds = ArtifactQuery.selectArtifactListFromBranch(AtsUtil.getAtsBranch(), EXCLUDE_DELETED); + + if (artIds.isEmpty()) { + xResultData.logError("Error: Artifact load returned 0 artifacts to check"); + } + xResultData.log(monitor, "testLoadAllCommonArtifactIds - Completed " + XDate.getDateNow(XDate.MMDDYYHHMM)); + return Collections.subDivide(artIds, 5000); + } + + private void testAtsAttributeValues(Collection<Artifact> artifacts) { + try { + SkynetTransaction transaction = new SkynetTransaction(AtsUtil.getAtsBranch(), "Validate ATS Database"); + for (Artifact artifact : artifacts) { + + try { + // Test for null attribute values + for (Attribute<?> attr : artifact.getAttributes()) { + if (attr.getValue() == null) { + testNameToResultsMap.put( + "testAtsAttributeValues", + "Error: Artifact: " + XResultData.getHyperlink(artifact) + " Types: " + artifact.getArtifactTypeName() + " - Null Attribute"); + if (fixAttributeValues) { + attr.delete(); + } + } + } + + if (artifact instanceof StateMachineArtifact) { + checkAndResolveDuplicateAttributesForAttributeNameContains("ats", artifact, fixAttributeValues, + testNameToResultsMap, transaction); + } + + // Test for ats.State Completed;;;<num> or Cancelled;;;<num> and cleanup + if (artifact instanceof StateMachineArtifact) { + XStateDam stateDam = new XStateDam((StateMachineArtifact) artifact); + for (SMAState state : stateDam.getStates()) { + if (state.getName().equals(DefaultTeamState.Completed.name()) || state.getName().equals( + DefaultTeamState.Cancelled.name())) { + if (state.getHoursSpent() != 0.0 || state.getPercentComplete() != 0) { + testNameToResultsMap.put( + "testAtsAttributeValues", + "Error: ats.State error for SMA: " + XResultData.getHyperlink(artifact) + " State: " + state.getName() + " Hours Spent: " + state.getHoursSpentStr() + " Percent: " + state.getPercentComplete()); + if (fixAttributeValues) { + state.setHoursSpent(0); + state.setPercentComplete(0); + stateDam.setState(state); + testNameToResultsMap.put("testAtsAttributeValues", "Fixed"); + } + } + } + } + } + + // Test for ats.CurrentState Completed;;;<num> or Cancelled;;;<num> and cleanup + if (artifact instanceof StateMachineArtifact) { + XCurrentStateDam currentStateDam = new XCurrentStateDam((StateMachineArtifact) artifact); + SMAState state = currentStateDam.getState(); + if (state.getName().equals(DefaultTeamState.Completed.name()) || state.getName().equals( + DefaultTeamState.Cancelled.name())) { + if (state.getHoursSpent() != 0.0 || state.getPercentComplete() != 0) { + testNameToResultsMap.put( + "testAtsAttributeValues", + "Error: ats.CurrentState error for SMA: " + XResultData.getHyperlink(artifact) + " State: " + state.getName() + " Hours Spent: " + state.getHoursSpentStr() + " Percent: " + state.getPercentComplete()); + if (fixAttributeValues) { + state.setHoursSpent(0); + state.setPercentComplete(0); + currentStateDam.setState(state); + testNameToResultsMap.put("testAtsAttributeValues", "Fixed"); + } + } + } + } + if (artifact.hasDirtyAttributes()) { + artifact.persist(transaction); + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + testNameToResultsMap.put("testAtsAttributeValues", + "Error: Artifact: " + XResultData.getHyperlink(artifact) + " Exception: " + ex.getLocalizedMessage()); + } + } + transaction.execute(); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + testNameToResultsMap.put("testAtsAttributeValues", "Error: Exception: " + ex.getLocalizedMessage()); + } + } + + public static void checkAndResolveDuplicateAttributesForAttributeNameContains(String nameContainsStr, Artifact artifact, boolean fixAttributeValues, HashCollection<String, String> resultsMap, SkynetTransaction transaction) throws OseeCoreException { + for (AttributeType attrType : AttributeTypeManager.getAllTypes()) { + if (attrType.getName().contains(nameContainsStr)) { + int count = artifact.getAttributeCount(attrType); + if (count > attrType.getMaxOccurrences()) { + String result = + String.format( + "Error: Artifact: " + XResultData.getHyperlink(artifact) + " Type [%s] AttrType [%s] Max [%d] Actual [%d] Values [%s] ", + artifact.getArtifactTypeName(), attrType.getName(), attrType.getMaxOccurrences(), count, + artifact.getAttributesToString(attrType)); + Map<String, Attribute<?>> valuesAttrMap = new HashMap<String, Attribute<?>>(); + int latestGamma = 0; + String fixInfo = " - FIX AVAILABLE"; + for (Attribute<?> attr : artifact.getAttributes(attrType)) { + if (attr.getGammaId() > latestGamma) { + latestGamma = attr.getGammaId(); + } + String info = String.format("[Gamma [%s] Value [%s]]", attr.getGammaId(), attr.getValue()); + valuesAttrMap.put(info, attr); + fixInfo += info; + } + fixInfo += " - KEEP Gamma" + latestGamma; + if (latestGamma != 0) { + result += fixInfo; + if (fixAttributeValues) { + for (Attribute<?> attr : artifact.getAttributes(attrType)) { + if (attr.getGammaId() != latestGamma) { + attr.delete(); + } + } + artifact.persist(transaction); + resultsMap.put("checkAndResolveDuplicateAttributesForAttributeNameContains", "Fixed"); + } + } + resultsMap.put("checkAndResolveDuplicateAttributesForAttributeNameContains", result); + } + } + } + } + + private void testAtsActionsHaveTeamWorkflow(Collection<Artifact> artifacts) { + for (Artifact artifact : artifacts) { + try { + if (artifact instanceof ActionArtifact) { + if (((ActionArtifact) artifact).getTeamWorkFlowArtifacts().isEmpty()) { + testNameToResultsMap.put("testAtsActionsHaveTeamWorkflow", + "Error: Action " + XResultData.getHyperlink(artifact) + " has no Team Workflows\n"); + } + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + testNameToResultsMap.put("testAtsActionsHaveTeamWorkflow", "Error: Exception: " + ex.getLocalizedMessage()); + } + } + } + + private void testAtsWorkflowsHaveAction(Collection<Artifact> artifacts) { + for (Artifact artifact : artifacts) { + try { + if (artifact instanceof TeamWorkFlowArtifact) { + boolean noParent = false; + try { + if (((TeamWorkFlowArtifact) artifact).getParentActionArtifact() == null) { + testNameToResultsMap.put("testAtsWorkflowsHaveAction", + "Error: Team " + XResultData.getHyperlink(artifact) + " has no parent Action\n"); + noParent = true; + } + } catch (Exception ex) { + testNameToResultsMap.put("testAtsWorkflowsHaveAction", + "Error: Team " + XResultData.getHyperlink(artifact) + " has no parent Action: exception " + ex); + noParent = true; + } + // Create temporary action so these can be either purged or re-assigned + if (noParent) { + if (tempParentAction == null) { + tempParentAction = + (ActionArtifact) ArtifactTypeManager.addArtifact(AtsArtifactTypes.Action, + AtsUtil.getAtsBranch()); + tempParentAction.setName("Temp Parent Action"); + testNameToResultsMap.put( + "testAtsWorkflowsHaveAction", + "Error: Temp Parent Action " + XResultData.getHyperlink(tempParentAction) + " created for orphaned teams."); + + } + tempParentAction.addRelation(AtsRelationTypes.ActionToWorkflow_WorkFlow, artifact); + tempParentAction.persist(); + } + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + testNameToResultsMap.put("testAtsWorkflowsHaveAction", "Error: Exception: " + ex.getLocalizedMessage()); + } + } + if (tempParentAction != null) { + AtsUtil.openATSAction(tempParentAction, AtsOpenOption.AtsWorld); + } + } + + private void testAtsWorkflowsHaveZeroOrOneVersion(Collection<Artifact> artifacts) { + for (Artifact artifact : artifacts) { + try { + if (artifact instanceof TeamWorkFlowArtifact) { + TeamWorkFlowArtifact teamArt = (TeamWorkFlowArtifact) artifact; + if (teamArt.getRelatedArtifacts(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version).size() > 1) { + testNameToResultsMap.put( + "testAtsWorkflowsHaveZeroOrOneVersion", + "Error: Team workflow " + XResultData.getHyperlink(teamArt) + " has " + teamArt.getRelatedArtifacts( + AtsRelationTypes.TeamWorkflowTargetedForVersion_Version).size() + " versions"); + } + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + testNameToResultsMap.put("testAtsWorkflowsHaveZeroOrOneVersion", + "Error: Exception: " + ex.getLocalizedMessage()); + } + } + + } + + private void testTasksHaveParentWorkflow(Collection<Artifact> artifacts) { + Set<Artifact> badTasks = new HashSet<Artifact>(30); + for (Artifact artifact : artifacts) { + try { + if (artifact instanceof TaskArtifact) { + TaskArtifact taskArtifact = (TaskArtifact) artifact; + if (taskArtifact.getRelatedArtifacts(AtsRelationTypes.SmaToTask_Sma).size() != 1) { + testNameToResultsMap.put( + "testTasksHaveParentWorkflow", + "Error: Task " + XResultData.getHyperlink(taskArtifact) + " has " + taskArtifact.getRelatedArtifacts( + AtsRelationTypes.SmaToTask_Sma).size() + " parents."); + badTasks.add(taskArtifact); + } + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + testNameToResultsMap.put("testTasksHaveParentWorkflow", "Error: Exception: " + ex.getLocalizedMessage()); + } + } + try { + if (badTasks.size() > 0) { + TaskEditor.open(new TaskEditorSimpleProvider("ValidateATSDatabase: Tasks have !=1 parent workflows.", + badTasks)); + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + testNameToResultsMap.put("testTasksHaveParentWorkflow", "Error: Exception: " + ex.getLocalizedMessage()); + } + } + + private void testActionableItemToTeamDefinition(Collection<Artifact> artifacts) { + for (Artifact artifact : artifacts) { + try { + if (artifact instanceof ActionableItemArtifact) { + ActionableItemArtifact aia = (ActionableItemArtifact) artifact; + if (aia.isActionable()) { + if (TeamDefinitionArtifact.getImpactedTeamDefs(Arrays.asList(aia)).isEmpty()) { + testNameToResultsMap.put( + "testActionableItemToTeamDefinition", + "Error: ActionableItem " + XResultData.getHyperlink(artifact.getName(), artifact) + " has to related TeamDefinition and is set to Actionable"); + } + } + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + testNameToResultsMap.put("testActionableItemToTeamDefinition", + "Error: Exception: " + ex.getLocalizedMessage()); + } + } + } + + private void testTeamDefinitionHasWorkflow(Collection<Artifact> artifacts) { + for (Artifact artifact : artifacts) { + try { + if (artifact instanceof TeamDefinitionArtifact) { + TeamDefinitionArtifact teamDef = (TeamDefinitionArtifact) artifact; + if (teamDef.isActionable() && teamDef.getWorkFlowDefinition() == null) { + testNameToResultsMap.put( + "testTeamDefinitionHasWorkflow", + "Error: TeamDefintion " + XResultData.getHyperlink(artifact.getName(), artifact) + " has no related workflow and is set to Actionable"); + } + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + testNameToResultsMap.put("testTeamDefinitionHasWorkflow", "Error: Exception: " + ex.getLocalizedMessage()); + } + } + } + + private void testReviewsHaveValidDefectAndRoleXml(Collection<Artifact> artifacts) { + for (Artifact artifact : artifacts) { + if (artifact instanceof ReviewSMArtifact) { + ReviewSMArtifact reviewArtifact = (ReviewSMArtifact) artifact; + try { + if (reviewArtifact.getAttributes(AtsAttributeTypes.ReviewDefect).size() > 0 && reviewArtifact.getDefectManager().getDefectItems().isEmpty()) { + testNameToResultsMap.put( + "testReviewsHaveValidDefectAndRoleXml", + "Error: Review " + XResultData.getHyperlink(reviewArtifact) + " has defect attribute, but no defects (xml parsing error)."); + } + if (reviewArtifact.getAttributes(AtsAttributeTypes.Role).size() > 0 && reviewArtifact.getUserRoleManager().getUserRoles().isEmpty()) { + testNameToResultsMap.put( + "testReviewsHaveValidDefectAndRoleXml", + "Error: Review " + XResultData.getHyperlink(reviewArtifact) + " has role attribute, but no roles (xml parsing error)."); + } + } catch (OseeCoreException ex) { + testNameToResultsMap.put( + "testReviewsHaveValidDefectAndRoleXml", + "Error: Exception processing Review " + XResultData.getHyperlink(reviewArtifact) + " defect test " + ex.getLocalizedMessage()); + } + } + } + } + + private void testReviewsHaveParentWorkflowOrActionableItems(Collection<Artifact> artifacts) { + for (Artifact artifact : artifacts) { + try { + if (artifact instanceof ReviewSMArtifact) { + ReviewSMArtifact reviewArtifact = (ReviewSMArtifact) artifact; + if (reviewArtifact.getRelatedArtifacts(AtsRelationTypes.TeamWorkflowToReview_Team).isEmpty() && reviewArtifact.getActionableItemsDam().getActionableItemGuids().isEmpty()) { + testNameToResultsMap.put( + "testReviewsHaveParentWorkflowOrActionableItems", + "Error: Review " + XResultData.getHyperlink(reviewArtifact) + " has 0 related parents and 0 actionable items."); + } + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + testNameToResultsMap.put("testTeamDefinitionHasWorkflow", "Error: Exception: " + ex.getLocalizedMessage()); + } + } + } + + private void testAtsLogs(Collection<Artifact> artifacts) { + for (Artifact art : artifacts) { + if (art instanceof StateMachineArtifact) { + StateMachineArtifact sma = (StateMachineArtifact) art; + try { + ATSLog log = sma.getLog(); + if (log.getOriginator() == null) { + try { + testNameToResultsMap.put( + "testAtsLogs", + "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " originator == null"); + } catch (Exception ex) { + testNameToResultsMap.put( + "testAtsLogs", + "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " exception accessing originator: " + ex.getLocalizedMessage()); + } + } + for (String stateName : Arrays.asList("Completed", "Cancelled")) { + if (sma.getStateMgr().getCurrentStateName().equals(stateName)) { + LogItem logItem = log.getStateEvent(LogType.StateEntered, stateName); + if (logItem == null) { + try { + testNameToResultsMap.put( + "testAtsLogs", + "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " state \"" + stateName + "\" logItem == null"); + } catch (Exception ex) { + testNameToResultsMap.put( + "testAtsLogs", + "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " exception accessing logItem: " + ex.getLocalizedMessage()); + + } + } + if (logItem.getDate() == null) { + try { + testNameToResultsMap.put( + "testAtsLogs", + "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " state \"" + stateName + "\" logItem.date == null"); + } catch (Exception ex) { + testNameToResultsMap.put( + "testAtsLogs", + "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " exception accessing logItem.date: " + ex.getLocalizedMessage()); + + } + } + } + } + // Generate html log which will exercise all the conversions + log.getHtml(); + // Verify that all users are resolved + for (LogItem logItem : sma.getLog().getLogItems()) { + if (logItem.getUser() == null) { + testNameToResultsMap.put( + "testAtsLogs", + "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " user == null for userId \"" + logItem.getUserId() + "\""); + } + } + } catch (Exception ex) { + testNameToResultsMap.put( + "testAtsLogs", + "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " exception accessing AtsLog: " + ex.getLocalizedMessage()); + } + } + } + } + + private static User unAssignedUser; + private static User oseeSystemUser; + + private void testStateMachineAssignees(Collection<Artifact> artifacts) { + if (unAssignedUser == null) { + try { + unAssignedUser = UserManager.getUser(SystemUser.UnAssigned); + oseeSystemUser = UserManager.getUser(SystemUser.OseeSystem); + } catch (OseeCoreException ex) { + testNameToResultsMap.put("testStateMachineAssignees", + "Error: Exception retrieving users: " + ex.getLocalizedMessage()); + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + for (Artifact art : artifacts) { + if (art instanceof StateMachineArtifact) { + try { + StateMachineArtifact sma = (StateMachineArtifact) art; + if ((sma.isCompleted() || sma.isCancelled()) && sma.getStateMgr().getAssignees().size() > 0) { + testNameToResultsMap.put( + "testStateMachineAssignees", + "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " cancel/complete with attribute assignees"); + if (fixAssignees) { + sma.getStateMgr().clearAssignees(); + sma.persist(); + testNameToResultsMap.put("testStateMachineAssignees", "Fixed"); + } + } + if (sma.getStateMgr().getAssignees().size() > 1 && sma.getStateMgr().getAssignees().contains( + unAssignedUser)) { + testNameToResultsMap.put( + "testStateMachineAssignees", + "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " is unassigned and assigned => " + Artifacts.toString( + "; ", sma.getStateMgr().getAssignees())); + if (fixAssignees) { + sma.getStateMgr().removeAssignee(unAssignedUser); + testNameToResultsMap.put("testStateMachineAssignees", "Fixed"); + } + } + if (sma.getStateMgr().getAssignees().contains(oseeSystemUser)) { + testNameToResultsMap.put( + "testStateMachineAssignees", + "Error: " + art.getHumanReadableId() + " is assigned to OseeSystem; invalid assignment - MANUAL FIX REQUIRED"); + } + if (!sma.isCompleted() && !sma.isCancelled() && sma.getStateMgr().getAssignees().isEmpty()) { + testNameToResultsMap.put( + "testStateMachineAssignees", + "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " In Work without assignees"); + } + List<Artifact> relationAssigned = art.getRelatedArtifacts(CoreRelationTypes.Users_User, Artifact.class); + if ((sma.isCompleted() || sma.isCancelled()) && relationAssigned.size() > 0) { + testNameToResultsMap.put( + "testStateMachineAssignees (remove after 0.9.5)", + "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " cancel/complete with related assignees"); + if (fixAssignees) { + try { + StateManager.updateAssigneeRelations(sma); + art.persist(); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + testNameToResultsMap.put("testStateMachineAssignees", "Fixed"); + } + } else if (sma.getStateMgr().getAssignees().size() != relationAssigned.size()) { + // Make sure this isn't just an UnAssigned user issue (don't relate to unassigned user anymore) + if (!(sma.getStateMgr().getAssignees().contains(UserManager.getUser(SystemUser.UnAssigned)) && relationAssigned.isEmpty())) { + testNameToResultsMap.put( + "testStateMachineAssignees", + "Error: " + sma.getArtifactTypeName() + " " + XResultData.getHyperlink(sma) + " attribute assignees doesn't match related assignees"); + if (fixAssignees) { + try { + StateManager.updateAssigneeRelations(sma); + art.persist(); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + testNameToResultsMap.put("testStateMachineAssignees", "Fixed"); + } + } + } + } catch (OseeCoreException ex) { + testNameToResultsMap.put("testStateMachineAssignees", + "Error: Exception testing assignees: " + ex.getLocalizedMessage()); + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + } + } + + /** + * @param fixAssignees the fixAssignees to set + */ + public void setFixAssignees(boolean fixAssignees) { + this.fixAssignees = fixAssignees; + } + + /** + * @param fixAttributeValues the fixAttributeValues to set + */ + public void setFixAttributeValues(boolean fixAttributeValues) { + this.fixAttributeValues = fixAttributeValues; + } + + /** + * set to email if desire email on completion + */ + public void setEmailOnComplete(String emailOnComplete) { + this.emailOnComplete = emailOnComplete; + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/ValidateChangeReportByHrid.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/ValidateChangeReportByHrid.java index 028ba1af2f1..50b0f3f0011 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/ValidateChangeReportByHrid.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/ValidateChangeReportByHrid.java @@ -1,86 +1,86 @@ -/*******************************************************************************
- * 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.health;
-
-import java.util.logging.Level;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.database.core.OseeInfo;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.plugin.core.util.Jobs;
-import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
-import org.eclipse.osee.framework.ui.plugin.PluginUiImage;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction;
-import org.eclipse.osee.framework.ui.skynet.results.XResultData;
-import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryCheckDialog;
-
-/**
- * @author Donald G. Dunne
- */
-public class ValidateChangeReportByHrid extends XNavigateItemAction {
-
- public ValidateChangeReportByHrid(XNavigateItem parent) {
- super(parent, "Validate Change Reports by HRID", PluginUiImage.ADMIN);
- }
-
- @Override
- public void run(TableLoadOption... tableLoadOptions) {
- EntryCheckDialog ed = new EntryCheckDialog(getName(), "Enter HRID", "Display Was/Is data in Results View.");
- if (ed.open() == 0) {
- String hrid = ed.getEntry();
- if (Strings.isValid(hrid)) {
- Jobs.startJob(new Report(getName(), hrid, ed.isChecked()), true);
- }
- }
- }
-
- public static class Report extends Job {
-
- private final String hrid;
- private final boolean exportWasIs;
-
- public Report(String name, String hrid, boolean exportWasIs) {
- super(name);
- this.hrid = hrid;
- this.exportWasIs = exportWasIs;
- }
-
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- try {
- final XResultData rd = new XResultData();
- try {
- TeamWorkFlowArtifact teamArt =
- (TeamWorkFlowArtifact) ArtifactQuery.getArtifactFromId(hrid, AtsUtil.getAtsBranch());
- String currentDbGuid = OseeInfo.getDatabaseGuid();
- ValidateChangeReports.changeReportValidated(currentDbGuid, teamArt, rd, exportWasIs);
- } catch (Exception ex) {
- rd.logError(ex.getLocalizedMessage());
- }
- rd.report(getName());
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, -1, ex.getMessage(), ex);
- }
- monitor.done();
- return Status.OK_STATUS;
- }
- }
-
-}
+/******************************************************************************* + * 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.health; + +import java.util.logging.Level; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.database.core.OseeInfo; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.plugin.core.util.Jobs; +import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; +import org.eclipse.osee.framework.ui.plugin.PluginUiImage; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction; +import org.eclipse.osee.framework.ui.skynet.results.XResultData; +import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryCheckDialog; + +/** + * @author Donald G. Dunne + */ +public class ValidateChangeReportByHrid extends XNavigateItemAction { + + public ValidateChangeReportByHrid(XNavigateItem parent) { + super(parent, "Validate Change Reports by HRID", PluginUiImage.ADMIN); + } + + @Override + public void run(TableLoadOption... tableLoadOptions) { + EntryCheckDialog ed = new EntryCheckDialog(getName(), "Enter HRID", "Display Was/Is data in Results View."); + if (ed.open() == 0) { + String hrid = ed.getEntry(); + if (Strings.isValid(hrid)) { + Jobs.startJob(new Report(getName(), hrid, ed.isChecked()), true); + } + } + } + + public static class Report extends Job { + + private final String hrid; + private final boolean exportWasIs; + + public Report(String name, String hrid, boolean exportWasIs) { + super(name); + this.hrid = hrid; + this.exportWasIs = exportWasIs; + } + + @Override + protected IStatus run(IProgressMonitor monitor) { + try { + final XResultData rd = new XResultData(); + try { + TeamWorkFlowArtifact teamArt = + (TeamWorkFlowArtifact) ArtifactQuery.getArtifactFromId(hrid, AtsUtil.getAtsBranch()); + String currentDbGuid = OseeInfo.getDatabaseGuid(); + ValidateChangeReports.changeReportValidated(currentDbGuid, teamArt, rd, exportWasIs); + } catch (Exception ex) { + rd.logError(ex.getLocalizedMessage()); + } + rd.report(getName()); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, -1, ex.getMessage(), ex); + } + monitor.done(); + return Status.OK_STATUS; + } + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/ValidateChangeReports.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/ValidateChangeReports.java index 10b5176e6a5..2fc0056a8cd 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/ValidateChangeReports.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/ValidateChangeReports.java @@ -1,381 +1,380 @@ -/*******************************************************************************
- * 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.health;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.logging.Level;
-import javax.xml.parsers.ParserConfigurationException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.osee.ats.artifact.AtsAttributeTypes;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.artifact.TeamWorkflowExtensions;
-import org.eclipse.osee.ats.health.change.DataChangeReportComparer;
-import org.eclipse.osee.ats.health.change.ValidateChangeReportParser;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.core.data.IArtifactType;
-import org.eclipse.osee.framework.core.enums.CoreArtifactTypes;
-import org.eclipse.osee.framework.core.enums.CoreAttributeTypes;
-import org.eclipse.osee.framework.core.enums.ModificationType;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeStateException;
-import org.eclipse.osee.framework.database.core.OseeInfo;
-import org.eclipse.osee.framework.jdk.core.util.AHTML;
-import org.eclipse.osee.framework.jdk.core.util.AXml;
-import org.eclipse.osee.framework.jdk.core.util.Lib;
-import org.eclipse.osee.framework.logging.IHealthStatus;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.logging.SevereLoggingMonitor;
-import org.eclipse.osee.framework.plugin.core.util.Jobs;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
-import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
-import org.eclipse.osee.framework.skynet.core.change.ArtifactChange;
-import org.eclipse.osee.framework.skynet.core.change.AttributeChange;
-import org.eclipse.osee.framework.skynet.core.change.Change;
-import org.eclipse.osee.framework.skynet.core.change.RelationChange;
-import org.eclipse.osee.framework.skynet.core.revision.ChangeData;
-import org.eclipse.osee.framework.skynet.core.revision.ChangeData.KindType;
-import org.eclipse.osee.framework.ui.plugin.PluginUiImage;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction;
-import org.eclipse.osee.framework.ui.skynet.compare.CompareHandler;
-import org.eclipse.osee.framework.ui.skynet.results.XResultData;
-import org.eclipse.osee.framework.ui.swt.Displays;
-
-/**
- * This test will validate the change report data that is returned for the ATS configured actions with committed
- * branches. Upon first time run against a newly committed branch, it will generate a "General Data" artifact with the
- * change report data stored to xml in a "General String Data" attribute. <br>
- * <br>
- * Every additional time this validation is run against an already stored change report, the current xml and stored xml
- * change report will be compared. <br>
- * <br>
- * If errors are found, the developer will need to put a breakpoint below to see the was-is values of the change report
- * data.<br>
- * <br>
- * This test also ensures that all change reports can return their historical artifacts by loading and accessing the
- * descriptive name for each artifact.
- *
- * @author Donald G. Dunne
- */
-public class ValidateChangeReports extends XNavigateItemAction {
-
- static final String VCR_ROOT_ELEMENT_TAG = "ValidateChangeReport";
- static final String VCR_DB_GUID = "dbGuid";
-
- public ValidateChangeReports(XNavigateItem parent) {
- super(parent, "Validate Change Reports", PluginUiImage.ADMIN);
- }
-
- @Override
- public void run(TableLoadOption... tableLoadOptions) {
- if (!MessageDialog.openConfirm(Displays.getActiveShell(), getName(), getName())) {
- return;
- }
- Jobs.startJob(new Report(getName()), true);
- }
-
- public class Report extends Job {
-
- public Report(String name) {
- super(name);
- }
-
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- try {
- final XResultData rd = new XResultData();
- runIt(monitor, rd);
- rd.report(getName());
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, -1, ex.getMessage(), ex);
- }
- monitor.done();
- return Status.OK_STATUS;
- }
- }
-
- private void runIt(IProgressMonitor monitor, XResultData xResultData) throws OseeCoreException {
- String currentDbGuid = OseeInfo.getDatabaseGuid();
- SevereLoggingMonitor monitorLog = new SevereLoggingMonitor();
- OseeLog.registerLoggerListener(monitorLog);
- StringBuffer sbFull = new StringBuffer(AHTML.beginMultiColumnTable(100, 1));
- String[] columnHeaders = new String[] {"HRID", "PCR", "Results"};
- sbFull.append(AHTML.addHeaderRowMultiColumnTable(columnHeaders));
- for (IArtifactType artifactType : TeamWorkflowExtensions.getInstance().getAllTeamWorkflowArtifactTypes()) {
- sbFull.append(AHTML.addRowSpanMultiColumnTable(artifactType.getName(), columnHeaders.length));
-
- try {
- int x = 1;
- Collection<Artifact> artifacts =
- ArtifactQuery.getArtifactListFromType(artifactType, AtsUtil.getAtsBranch());
- for (Artifact artifact : artifacts) {
- String resultStr = "PASS";
- TeamWorkFlowArtifact teamArt = (TeamWorkFlowArtifact) artifact;
-
- // Uncomment to only do a single program
- // if (!teamArt.getTeamName().contains("ATS")) {
- // System.err.println("Skipping non ATS workflow...Remove this.");
- // continue;
- // }
- // if (x >= 20) {
- // System.err.println("Only do first 20...Remove this.");
- // return;
- // }
-
- try {
- String str = String.format("Processing %s/%s - %s", x++, artifacts.size(), artifact);
- OseeLog.log(AtsPlugin.class, Level.INFO, str);
- if (monitor != null) {
- monitor.subTask(str);
- }
-
- // Only validate committed branches cause working branches change too much
- if (!teamArt.getBranchMgr().isCommittedBranchExists()) {
- continue;
- }
- Result valid = changeReportValidated(currentDbGuid, teamArt, xResultData, false);
- if (valid.isFalse()) {
- resultStr = "Error: " + valid.getText();
- }
- } catch (Exception ex) {
- resultStr = "Error: Exception Validating: " + ex.getLocalizedMessage();
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- sbFull.append(AHTML.addRowMultiColumnTable(teamArt.getHumanReadableId(),
- teamArt.getSoleAttributeValue(AtsAttributeTypes.LegacyPcrId, ""), resultStr));
- }
- } catch (Exception ex) {
- sbFull.append(AHTML.addRowSpanMultiColumnTable("Exception: " + ex.getLocalizedMessage(),
- columnHeaders.length));
- }
- }
- sbFull.append(AHTML.endMultiColumnTable());
- xResultData.addRaw(sbFull.toString().replaceAll("\n", ""));
- List<IHealthStatus> stats = new ArrayList<IHealthStatus>(monitorLog.getAllLogs());
- for (IHealthStatus stat : stats) {
- Throwable tr = stat.getException();
- if (tr != null) {
- xResultData.logError("Exception: " + Lib.exceptionToString(stat.getException()));
- }
- }
- }
-
- /**
- * Return true if current change report is same as stored change report data
- *
- * @param teamArt
- * @return Result.TrueResult if same, else Result.FalseResult with comparison in resultData
- * @throws ParserConfigurationException
- */
- static Result changeReportValidated(final String currentDbGuid, final TeamWorkFlowArtifact teamArt, XResultData resultData, boolean displayWasIs) throws OseeCoreException {
- String name = "VCR_" + teamArt.getHumanReadableId();
- List<Artifact> arts =
- ArtifactQuery.getArtifactListFromTypeAndName(CoreArtifactTypes.GeneralData, name, AtsUtil.getAtsBranch());
- String storedChangeReport = null;
- Artifact artifactForStore = null;
- if (arts.size() > 1) {
- throw new OseeStateException("Multiple artifacts found of name \"" + name + "\"");
- } else if (arts.size() == 1) {
- artifactForStore = arts.iterator().next();
- storedChangeReport = artifactForStore.getSoleAttributeValue(CoreAttributeTypes.GeneralStringData, null);
- }
- // Retrieve current
- ChangeData currentChangeData = teamArt.getBranchMgr().getChangeDataFromEarliestTransactionId();
- if (currentChangeData.isEmpty()) {
- return new Result(String.format("FAIL: Unexpected empty change report for %s", teamArt.toStringWithId()));
- }
- // Store
- if (storedChangeReport == null) {
- // Reuse same artifact if already exists
- if (artifactForStore == null) {
- artifactForStore =
- ArtifactTypeManager.addArtifact(CoreArtifactTypes.GeneralData, AtsUtil.getAtsBranch(), name);
- }
- artifactForStore.setSoleAttributeValue(CoreAttributeTypes.GeneralStringData,
- getReport(currentDbGuid, currentChangeData));
- artifactForStore.persist();
- resultData.log("Stored Change Report for " + teamArt.getHumanReadableId());
- return new Result(true, "Stored Change Report for " + teamArt.getHumanReadableId());
- }
- // Else, compare the two and report
- else {
- final String currentChangeReport = getReport(currentDbGuid, currentChangeData);
- final String fStoredChangeReport = storedChangeReport.replaceAll("\n", "");
- if (!isXmlChangeDataEqual(currentChangeReport, fStoredChangeReport)) {
- resultData.logError("Was/Is Change Report different for " + teamArt.getHumanReadableId());
- if (displayWasIs) {
- resultData.log("Was / Is reports displayed in Results View");
- }
- if (displayWasIs) {
- try {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- try {
- String storedChangeReportString = GetComparableString(fStoredChangeReport);
- String currentChangeReportString = GetComparableString(currentChangeReport);
-
- CompareHandler compareHandler =
- new CompareHandler(storedChangeReportString, currentChangeReportString);
- compareHandler.compare();
-
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
- });
-
- } catch (Exception ex) {
- System.err.println(ex.getLocalizedMessage());
- }
- }
- return new Result("FAIL: Was/Is Change Report different");
- }
- }
- // As another test, ensure that all artifacts can be retrieved and display their name
- try {
- for (Artifact art : currentChangeData.getArtifacts(KindType.ArtifactOrRelation, ModificationType.NEW,
- ModificationType.DELETED, ModificationType.MERGED)) {
- art.getName();
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return new Result("FAIL: Exception accessing name of change report artifacts: " + ex.getLocalizedMessage());
- }
- // As another test, allow ATS extensions add their own tests
- for (IAtsHealthCheck atsHealthCheck : AtsHealthCheck.getAtsHealthCheckItems()) {
- Result result = atsHealthCheck.validateChangeReports(currentChangeData, teamArt, resultData);
- if (result.isFalse()) {
- return result;
- }
- }
-
- return new Result(true, "PASS");
- }
-
- private static String GetComparableString(String changeReportString) {
- StringBuffer comparableString = new StringBuffer();
- ValidateChangeReportParser parser = new ValidateChangeReportParser();
- ArrayList<ArrayList<DataChangeReportComparer>> changeReport = parser.parse(changeReportString);
-
- for (int i = 0; i < changeReport.size(); i++) {
- for (int j = 0; j < changeReport.get(i).size(); j++) {
- comparableString.append(changeReport.get(i).get(j).getContent());
- }
- }
- return comparableString.toString().replaceAll("><", ">\n<");
- }
-
- private static String getReport(String dbGuid, ChangeData changeData) {
- StringBuffer sb = new StringBuffer();
- sb.append(String.format("<%s %s=\"%s\">", VCR_ROOT_ELEMENT_TAG, VCR_DB_GUID, dbGuid));
- for (Change change : changeData.getChanges()) {
- if (change instanceof RelationChange) {
- sb.append(toXml((RelationChange) change));
- } else if (change instanceof ArtifactChange) {
- sb.append(toXml((ArtifactChange) change));
- } else if (change instanceof AttributeChange) {
- sb.append(toXml((AttributeChange) change));
- }
- }
- sb.append(String.format("</%s>", VCR_ROOT_ELEMENT_TAG));
- String toReturn = sb.toString().replaceAll(">[\\s\\n\\r]+$", ">");
- return toReturn.replaceAll("\n", "");
- }
-
- private static void toXmlCommon(Change change, StringBuffer sb) {
- sb.append(AXml.addTagData(TxImportedValidateChangeReports.BRANCH_ID_ALIASES, change.getBranch().getGuid()));
- }
-
- private static String toXml(RelationChange change) {
- StringBuffer sb = new StringBuffer();
- toXmlCommon(change, sb);
- sb.append(AXml.addTagData("artTId", String.valueOf(change.getItemTypeId())));
- sb.append(AXml.addTagData("gamma", String.valueOf(change.getGamma())));
- sb.append(AXml.addTagData("artId", String.valueOf(change.getArtId())));
- sb.append(AXml.addTagData("tTranId", String.valueOf(change.getTxDelta().getEndTx().getId())));
- sb.append(AXml.addTagData("fTranId", String.valueOf(change.getTxDelta().getStartTx().getId())));
- sb.append(AXml.addTagData("mType", String.valueOf(change.getModificationType().name())));
- sb.append(AXml.addTagData("bArtId", String.valueOf(change.getBArtId())));
- sb.append(AXml.addTagData("relId", String.valueOf(change.getRelLinkId())));
- sb.append(AXml.addTagData("rat", change.getRationale()));
- sb.append(AXml.addTagData("relTId", String.valueOf(change.getRelationType().getId())));
- sb.append(AXml.addTagData("hist", String.valueOf(change.isHistorical())));
- return AXml.addTagData("RelChg", sb.toString());
- }
-
- private static String toXml(ArtifactChange change) {
- StringBuffer sb = new StringBuffer();
- toXmlCommon(change, sb);
- sb.append(AXml.addTagData("artTId", String.valueOf(change.getItemTypeId())));
- sb.append(AXml.addTagData("gamma", String.valueOf(change.getGamma())));
- sb.append(AXml.addTagData("artId", String.valueOf(change.getArtId())));
- sb.append(AXml.addTagData("tTranId", String.valueOf(change.getTxDelta().getEndTx().getId())));
- sb.append(AXml.addTagData("fTranId", String.valueOf(change.getTxDelta().getStartTx().getId())));
- sb.append(AXml.addTagData("mType", String.valueOf(change.getModificationType().name())));
- sb.append(AXml.addTagData("hist", String.valueOf(change.isHistorical())));
- return AXml.addTagData("ArtChg", sb.toString());
- }
-
- private static String toXml(AttributeChange change) {
- StringBuffer sb = new StringBuffer();
- toXmlCommon(change, sb);
- sb.append(AXml.addTagData("artTId", String.valueOf(change.getItemTypeId())));
- sb.append(AXml.addTagData("gamma", String.valueOf(change.getGamma())));
- sb.append(AXml.addTagData("artId", String.valueOf(change.getArtId())));
- sb.append(AXml.addTagData("tTranId", String.valueOf(change.getTxDelta().getEndTx().getId())));
- sb.append(AXml.addTagData("fTranId", String.valueOf(change.getTxDelta().getStartTx().getId())));
- sb.append(AXml.addTagData("mType", String.valueOf(change.getModificationType().name())));
- sb.append(AXml.addTagData("aModType", String.valueOf(change.getArtModType().name())));
- sb.append(AXml.addTagData("attrId", String.valueOf(change.getAttrId())));
- sb.append(AXml.addTagData("attrTId", String.valueOf(change.getAttributeType().getId())));
- sb.append(AXml.addTagData("hist", String.valueOf(change.isHistorical())));
- return AXml.addTagData("AttrChg", sb.toString());
- }
-
- private static boolean isXmlChangeDataEqual(String currentData, String storedData) {
- int checkSum1 = getCheckSum(currentData);
- int checkSum2 = getCheckSum(storedData);
-
- boolean result = checkSum1 == checkSum2;
- if (!result) {
- ChangeReportComparer comparer = new ChangeReportComparer();
- comparer.compare(currentData, storedData);
-
- OseeLog.log(AtsPlugin.class, Level.SEVERE,
- String.format("Checksums not equal - stored:[%s] current:[%s]", checkSum1, checkSum2));
- }
- return result;
- }
-
- private static int getCheckSum(String data) {
- int checksum = -1;
- for (int index = 0; index < data.length(); index++) {
- char character = data.charAt(index);
- if (character != '\n' && character != '\t' && character != '\r' && character != ' ') {
- checksum += character;
- }
- }
- return checksum;
- }
-}
+/******************************************************************************* + * 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.health; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.logging.Level; +import javax.xml.parsers.ParserConfigurationException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.osee.ats.artifact.AtsAttributeTypes; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.artifact.TeamWorkflowExtensions; +import org.eclipse.osee.ats.health.change.DataChangeReportComparer; +import org.eclipse.osee.ats.health.change.ValidateChangeReportParser; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.core.data.IArtifactType; +import org.eclipse.osee.framework.core.enums.CoreArtifactTypes; +import org.eclipse.osee.framework.core.enums.CoreAttributeTypes; +import org.eclipse.osee.framework.core.enums.ModificationType; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeStateException; +import org.eclipse.osee.framework.database.core.OseeInfo; +import org.eclipse.osee.framework.jdk.core.util.AHTML; +import org.eclipse.osee.framework.jdk.core.util.AXml; +import org.eclipse.osee.framework.jdk.core.util.Lib; +import org.eclipse.osee.framework.logging.IHealthStatus; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.logging.SevereLoggingMonitor; +import org.eclipse.osee.framework.plugin.core.util.Jobs; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager; +import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; +import org.eclipse.osee.framework.skynet.core.change.ArtifactChange; +import org.eclipse.osee.framework.skynet.core.change.AttributeChange; +import org.eclipse.osee.framework.skynet.core.change.Change; +import org.eclipse.osee.framework.skynet.core.change.RelationChange; +import org.eclipse.osee.framework.skynet.core.revision.ChangeData; +import org.eclipse.osee.framework.skynet.core.revision.ChangeData.KindType; +import org.eclipse.osee.framework.ui.plugin.PluginUiImage; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction; +import org.eclipse.osee.framework.ui.skynet.compare.CompareHandler; +import org.eclipse.osee.framework.ui.skynet.results.XResultData; +import org.eclipse.osee.framework.ui.swt.Displays; + +/** + * This test will validate the change report data that is returned for the ATS configured actions with committed + * branches. Upon first time run against a newly committed branch, it will generate a "General Data" artifact with the + * change report data stored to xml in a "General String Data" attribute. <br> + * <br> + * Every additional time this validation is run against an already stored change report, the current xml and stored xml + * change report will be compared. <br> + * <br> + * If errors are found, the developer will need to put a breakpoint below to see the was-is values of the change report + * data.<br> + * <br> + * This test also ensures that all change reports can return their historical artifacts by loading and accessing the + * descriptive name for each artifact. + * + * @author Donald G. Dunne + */ +public class ValidateChangeReports extends XNavigateItemAction { + + static final String VCR_ROOT_ELEMENT_TAG = "ValidateChangeReport"; + static final String VCR_DB_GUID = "dbGuid"; + + public ValidateChangeReports(XNavigateItem parent) { + super(parent, "Validate Change Reports", PluginUiImage.ADMIN); + } + + @Override + public void run(TableLoadOption... tableLoadOptions) { + if (!MessageDialog.openConfirm(Displays.getActiveShell(), getName(), getName())) { + return; + } + Jobs.startJob(new Report(getName()), true); + } + + public class Report extends Job { + + public Report(String name) { + super(name); + } + + @Override + protected IStatus run(IProgressMonitor monitor) { + try { + final XResultData rd = new XResultData(); + runIt(monitor, rd); + rd.report(getName()); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, -1, ex.getMessage(), ex); + } + monitor.done(); + return Status.OK_STATUS; + } + } + + private void runIt(IProgressMonitor monitor, XResultData xResultData) throws OseeCoreException { + String currentDbGuid = OseeInfo.getDatabaseGuid(); + SevereLoggingMonitor monitorLog = new SevereLoggingMonitor(); + OseeLog.registerLoggerListener(monitorLog); + StringBuffer sbFull = new StringBuffer(AHTML.beginMultiColumnTable(100, 1)); + String[] columnHeaders = new String[] {"HRID", "PCR", "Results"}; + sbFull.append(AHTML.addHeaderRowMultiColumnTable(columnHeaders)); + for (IArtifactType artifactType : TeamWorkflowExtensions.getInstance().getAllTeamWorkflowArtifactTypes()) { + sbFull.append(AHTML.addRowSpanMultiColumnTable(artifactType.getName(), columnHeaders.length)); + + try { + int x = 1; + Collection<Artifact> artifacts = + ArtifactQuery.getArtifactListFromType(artifactType, AtsUtil.getAtsBranch()); + for (Artifact artifact : artifacts) { + String resultStr = "PASS"; + TeamWorkFlowArtifact teamArt = (TeamWorkFlowArtifact) artifact; + + // Uncomment to only do a single program + // if (!teamArt.getTeamName().contains("ATS")) { + // System.err.println("Skipping non ATS workflow...Remove this."); + // continue; + // } + // if (x >= 20) { + // System.err.println("Only do first 20...Remove this."); + // return; + // } + + try { + String str = String.format("Processing %s/%s - %s", x++, artifacts.size(), artifact); + OseeLog.log(AtsPlugin.class, Level.INFO, str); + if (monitor != null) { + monitor.subTask(str); + } + + // Only validate committed branches cause working branches change too much + if (!teamArt.getBranchMgr().isCommittedBranchExists()) { + continue; + } + Result valid = changeReportValidated(currentDbGuid, teamArt, xResultData, false); + if (valid.isFalse()) { + resultStr = "Error: " + valid.getText(); + } + } catch (Exception ex) { + resultStr = "Error: Exception Validating: " + ex.getLocalizedMessage(); + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + sbFull.append(AHTML.addRowMultiColumnTable(teamArt.getHumanReadableId(), + teamArt.getSoleAttributeValue(AtsAttributeTypes.LegacyPcrId, ""), resultStr)); + } + } catch (Exception ex) { + sbFull.append(AHTML.addRowSpanMultiColumnTable("Exception: " + ex.getLocalizedMessage(), + columnHeaders.length)); + } + } + sbFull.append(AHTML.endMultiColumnTable()); + xResultData.addRaw(sbFull.toString().replaceAll("\n", "")); + List<IHealthStatus> stats = new ArrayList<IHealthStatus>(monitorLog.getAllLogs()); + for (IHealthStatus stat : stats) { + Throwable tr = stat.getException(); + if (tr != null) { + xResultData.logError("Exception: " + Lib.exceptionToString(stat.getException())); + } + } + } + + /** + * Return true if current change report is same as stored change report data + * + * @return Result.TrueResult if same, else Result.FalseResult with comparison in resultData + * @throws ParserConfigurationException + */ + static Result changeReportValidated(final String currentDbGuid, final TeamWorkFlowArtifact teamArt, XResultData resultData, boolean displayWasIs) throws OseeCoreException { + String name = "VCR_" + teamArt.getHumanReadableId(); + List<Artifact> arts = + ArtifactQuery.getArtifactListFromTypeAndName(CoreArtifactTypes.GeneralData, name, AtsUtil.getAtsBranch()); + String storedChangeReport = null; + Artifact artifactForStore = null; + if (arts.size() > 1) { + throw new OseeStateException("Multiple artifacts found of name \"" + name + "\""); + } else if (arts.size() == 1) { + artifactForStore = arts.iterator().next(); + storedChangeReport = artifactForStore.getSoleAttributeValue(CoreAttributeTypes.GeneralStringData, null); + } + // Retrieve current + ChangeData currentChangeData = teamArt.getBranchMgr().getChangeDataFromEarliestTransactionId(); + if (currentChangeData.isEmpty()) { + return new Result(String.format("FAIL: Unexpected empty change report for %s", teamArt.toStringWithId())); + } + // Store + if (storedChangeReport == null) { + // Reuse same artifact if already exists + if (artifactForStore == null) { + artifactForStore = + ArtifactTypeManager.addArtifact(CoreArtifactTypes.GeneralData, AtsUtil.getAtsBranch(), name); + } + artifactForStore.setSoleAttributeValue(CoreAttributeTypes.GeneralStringData, + getReport(currentDbGuid, currentChangeData)); + artifactForStore.persist(); + resultData.log("Stored Change Report for " + teamArt.getHumanReadableId()); + return new Result(true, "Stored Change Report for " + teamArt.getHumanReadableId()); + } + // Else, compare the two and report + else { + final String currentChangeReport = getReport(currentDbGuid, currentChangeData); + final String fStoredChangeReport = storedChangeReport.replaceAll("\n", ""); + if (!isXmlChangeDataEqual(currentChangeReport, fStoredChangeReport)) { + resultData.logError("Was/Is Change Report different for " + teamArt.getHumanReadableId()); + if (displayWasIs) { + resultData.log("Was / Is reports displayed in Results View"); + } + if (displayWasIs) { + try { + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + try { + String storedChangeReportString = GetComparableString(fStoredChangeReport); + String currentChangeReportString = GetComparableString(currentChangeReport); + + CompareHandler compareHandler = + new CompareHandler(storedChangeReportString, currentChangeReportString); + compareHandler.compare(); + + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + }); + + } catch (Exception ex) { + System.err.println(ex.getLocalizedMessage()); + } + } + return new Result("FAIL: Was/Is Change Report different"); + } + } + // As another test, ensure that all artifacts can be retrieved and display their name + try { + for (Artifact art : currentChangeData.getArtifacts(KindType.ArtifactOrRelation, ModificationType.NEW, + ModificationType.DELETED, ModificationType.MERGED)) { + art.getName(); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + return new Result("FAIL: Exception accessing name of change report artifacts: " + ex.getLocalizedMessage()); + } + // As another test, allow ATS extensions add their own tests + for (IAtsHealthCheck atsHealthCheck : AtsHealthCheck.getAtsHealthCheckItems()) { + Result result = atsHealthCheck.validateChangeReports(currentChangeData, teamArt, resultData); + if (result.isFalse()) { + return result; + } + } + + return new Result(true, "PASS"); + } + + private static String GetComparableString(String changeReportString) { + StringBuffer comparableString = new StringBuffer(); + ValidateChangeReportParser parser = new ValidateChangeReportParser(); + ArrayList<ArrayList<DataChangeReportComparer>> changeReport = parser.parse(changeReportString); + + for (int i = 0; i < changeReport.size(); i++) { + for (int j = 0; j < changeReport.get(i).size(); j++) { + comparableString.append(changeReport.get(i).get(j).getContent()); + } + } + return comparableString.toString().replaceAll("><", ">\n<"); + } + + private static String getReport(String dbGuid, ChangeData changeData) { + StringBuffer sb = new StringBuffer(); + sb.append(String.format("<%s %s=\"%s\">", VCR_ROOT_ELEMENT_TAG, VCR_DB_GUID, dbGuid)); + for (Change change : changeData.getChanges()) { + if (change instanceof RelationChange) { + sb.append(toXml((RelationChange) change)); + } else if (change instanceof ArtifactChange) { + sb.append(toXml((ArtifactChange) change)); + } else if (change instanceof AttributeChange) { + sb.append(toXml((AttributeChange) change)); + } + } + sb.append(String.format("</%s>", VCR_ROOT_ELEMENT_TAG)); + String toReturn = sb.toString().replaceAll(">[\\s\\n\\r]+$", ">"); + return toReturn.replaceAll("\n", ""); + } + + private static void toXmlCommon(Change change, StringBuffer sb) { + sb.append(AXml.addTagData(TxImportedValidateChangeReports.BRANCH_ID_ALIASES, change.getBranch().getGuid())); + } + + private static String toXml(RelationChange change) { + StringBuffer sb = new StringBuffer(); + toXmlCommon(change, sb); + sb.append(AXml.addTagData("artTId", String.valueOf(change.getItemTypeId()))); + sb.append(AXml.addTagData("gamma", String.valueOf(change.getGamma()))); + sb.append(AXml.addTagData("artId", String.valueOf(change.getArtId()))); + sb.append(AXml.addTagData("tTranId", String.valueOf(change.getTxDelta().getEndTx().getId()))); + sb.append(AXml.addTagData("fTranId", String.valueOf(change.getTxDelta().getStartTx().getId()))); + sb.append(AXml.addTagData("mType", String.valueOf(change.getModificationType().name()))); + sb.append(AXml.addTagData("bArtId", String.valueOf(change.getBArtId()))); + sb.append(AXml.addTagData("relId", String.valueOf(change.getRelLinkId()))); + sb.append(AXml.addTagData("rat", change.getRationale())); + sb.append(AXml.addTagData("relTId", String.valueOf(change.getRelationType().getId()))); + sb.append(AXml.addTagData("hist", String.valueOf(change.isHistorical()))); + return AXml.addTagData("RelChg", sb.toString()); + } + + private static String toXml(ArtifactChange change) { + StringBuffer sb = new StringBuffer(); + toXmlCommon(change, sb); + sb.append(AXml.addTagData("artTId", String.valueOf(change.getItemTypeId()))); + sb.append(AXml.addTagData("gamma", String.valueOf(change.getGamma()))); + sb.append(AXml.addTagData("artId", String.valueOf(change.getArtId()))); + sb.append(AXml.addTagData("tTranId", String.valueOf(change.getTxDelta().getEndTx().getId()))); + sb.append(AXml.addTagData("fTranId", String.valueOf(change.getTxDelta().getStartTx().getId()))); + sb.append(AXml.addTagData("mType", String.valueOf(change.getModificationType().name()))); + sb.append(AXml.addTagData("hist", String.valueOf(change.isHistorical()))); + return AXml.addTagData("ArtChg", sb.toString()); + } + + private static String toXml(AttributeChange change) { + StringBuffer sb = new StringBuffer(); + toXmlCommon(change, sb); + sb.append(AXml.addTagData("artTId", String.valueOf(change.getItemTypeId()))); + sb.append(AXml.addTagData("gamma", String.valueOf(change.getGamma()))); + sb.append(AXml.addTagData("artId", String.valueOf(change.getArtId()))); + sb.append(AXml.addTagData("tTranId", String.valueOf(change.getTxDelta().getEndTx().getId()))); + sb.append(AXml.addTagData("fTranId", String.valueOf(change.getTxDelta().getStartTx().getId()))); + sb.append(AXml.addTagData("mType", String.valueOf(change.getModificationType().name()))); + sb.append(AXml.addTagData("aModType", String.valueOf(change.getArtModType().name()))); + sb.append(AXml.addTagData("attrId", String.valueOf(change.getAttrId()))); + sb.append(AXml.addTagData("attrTId", String.valueOf(change.getAttributeType().getId()))); + sb.append(AXml.addTagData("hist", String.valueOf(change.isHistorical()))); + return AXml.addTagData("AttrChg", sb.toString()); + } + + private static boolean isXmlChangeDataEqual(String currentData, String storedData) { + int checkSum1 = getCheckSum(currentData); + int checkSum2 = getCheckSum(storedData); + + boolean result = checkSum1 == checkSum2; + if (!result) { + ChangeReportComparer comparer = new ChangeReportComparer(); + comparer.compare(currentData, storedData); + + OseeLog.log(AtsPlugin.class, Level.SEVERE, + String.format("Checksums not equal - stored:[%s] current:[%s]", checkSum1, checkSum2)); + } + return result; + } + + private static int getCheckSum(String data) { + int checksum = -1; + for (int index = 0; index < data.length(); index++) { + char character = data.charAt(index); + if (character != '\n' && character != '\t' && character != '\r' && character != ' ') { + checksum += character; + } + } + return checksum; + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/ArtifactChangeReportComparer.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/ArtifactChangeReportComparer.java index 63b20287e4d..252aea809e2 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/ArtifactChangeReportComparer.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/ArtifactChangeReportComparer.java @@ -1,45 +1,45 @@ -/*******************************************************************************
- * 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.health.change;
-
-/**
- * @author Jeff C. Phillips
- */
-public class ArtifactChangeReportComparer extends DataChangeReportComparer {
- private int artId;
- public static String ART_START_TAG = "<artId>";
- public static String ART_END_TAG = "</artId>";
-
- public ArtifactChangeReportComparer(String content) {
- super(content);
- }
-
- @Override
- public void processContent(String content) {
- artId =
- Integer.parseInt(content.substring(content.indexOf(ART_START_TAG) + ART_START_TAG.length(),
- content.indexOf(ART_END_TAG)));
- }
-
- @Override
- public int compareTo(Object obj) {
- int compareResult = -1;
- if (obj instanceof ArtifactChangeReportComparer) {
- ArtifactChangeReportComparer comparer = (ArtifactChangeReportComparer) obj;
- if (this.artId == comparer.artId) {
- compareResult = 0;
- } else if (this.artId > comparer.artId) {
- compareResult = 1;
- }
- }
- return compareResult;
- }
-}
+/******************************************************************************* + * 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.health.change; + +/** + * @author Jeff C. Phillips + */ +public class ArtifactChangeReportComparer extends DataChangeReportComparer { + private int artId; + public static String ART_START_TAG = "<artId>"; + public static String ART_END_TAG = "</artId>"; + + public ArtifactChangeReportComparer(String content) { + super(content); + } + + @Override + public void processContent(String content) { + artId = + Integer.parseInt(content.substring(content.indexOf(ART_START_TAG) + ART_START_TAG.length(), + content.indexOf(ART_END_TAG))); + } + + @Override + public int compareTo(Object obj) { + int compareResult = -1; + if (obj instanceof ArtifactChangeReportComparer) { + ArtifactChangeReportComparer comparer = (ArtifactChangeReportComparer) obj; + if (this.artId == comparer.artId) { + compareResult = 0; + } else if (this.artId > comparer.artId) { + compareResult = 1; + } + } + return compareResult; + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/AttributeChangeReportComparer.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/AttributeChangeReportComparer.java index db045871d24..7706d2525d4 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/AttributeChangeReportComparer.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/AttributeChangeReportComparer.java @@ -1,57 +1,57 @@ -/*******************************************************************************
- * 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.health.change;
-
-/**
- * @author Jeff C. Phillips
- */
-public class AttributeChangeReportComparer extends DataChangeReportComparer {
- private static String ATTR_START_TAG = "<attrId>";
- private static String ATTR_END_TAG = "</attrId>";
- private int artId;
- private int attrId;
-
- public AttributeChangeReportComparer(String content) {
- super(content);
- }
-
- @Override
- public void processContent(String content) {
- artId =
- Integer.parseInt(content.substring(
- content.indexOf(ArtifactChangeReportComparer.ART_START_TAG) + ArtifactChangeReportComparer.ART_START_TAG.length(),
- content.indexOf(ArtifactChangeReportComparer.ART_END_TAG)));
-
- attrId =
- Integer.parseInt(content.substring(content.indexOf(ATTR_START_TAG) + ATTR_START_TAG.length(),
- content.indexOf(ATTR_END_TAG)));
- }
-
- @Override
- public int compareTo(Object obj) {
- int compareResults = -1;
-
- if (obj instanceof AttributeChangeReportComparer) {
- AttributeChangeReportComparer comparer = (AttributeChangeReportComparer) obj;
-
- if (this.artId == comparer.artId) {
- if (this.attrId == comparer.attrId) {
- compareResults = 0;
- } else if (this.attrId > comparer.attrId) {
- compareResults = 1;
- }
- } else if (this.artId > comparer.artId) {
- compareResults = 1;
- }
- }
- return compareResults;
- }
-}
+/******************************************************************************* + * 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.health.change; + +/** + * @author Jeff C. Phillips + */ +public class AttributeChangeReportComparer extends DataChangeReportComparer { + private static String ATTR_START_TAG = "<attrId>"; + private static String ATTR_END_TAG = "</attrId>"; + private int artId; + private int attrId; + + public AttributeChangeReportComparer(String content) { + super(content); + } + + @Override + public void processContent(String content) { + artId = + Integer.parseInt(content.substring( + content.indexOf(ArtifactChangeReportComparer.ART_START_TAG) + ArtifactChangeReportComparer.ART_START_TAG.length(), + content.indexOf(ArtifactChangeReportComparer.ART_END_TAG))); + + attrId = + Integer.parseInt(content.substring(content.indexOf(ATTR_START_TAG) + ATTR_START_TAG.length(), + content.indexOf(ATTR_END_TAG))); + } + + @Override + public int compareTo(Object obj) { + int compareResults = -1; + + if (obj instanceof AttributeChangeReportComparer) { + AttributeChangeReportComparer comparer = (AttributeChangeReportComparer) obj; + + if (this.artId == comparer.artId) { + if (this.attrId == comparer.attrId) { + compareResults = 0; + } else if (this.attrId > comparer.attrId) { + compareResults = 1; + } + } else if (this.artId > comparer.artId) { + compareResults = 1; + } + } + return compareResults; + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/DataChangeReportComparer.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/DataChangeReportComparer.java index 6f2b951a2ee..ee14c9f1f7e 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/DataChangeReportComparer.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/DataChangeReportComparer.java @@ -1,29 +1,29 @@ -/*******************************************************************************
- * 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.health.change;
-
-/**
- * @author Jeff C. Phillips
- */
-public abstract class DataChangeReportComparer implements Comparable<Object> {
- private final String content;
-
- public DataChangeReportComparer(String content) {
- this.content = content;
- processContent(content);
- }
-
- public abstract void processContent(String content);
-
- public String getContent() {
- return content;
- }
-}
+/******************************************************************************* + * 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.health.change; + +/** + * @author Jeff C. Phillips + */ +public abstract class DataChangeReportComparer implements Comparable<Object> { + private final String content; + + public DataChangeReportComparer(String content) { + this.content = content; + processContent(content); + } + + public abstract void processContent(String content); + + public String getContent() { + return content; + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/RelationChangeReportComparer.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/RelationChangeReportComparer.java index 39e8bea977d..9ed395d0281 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/RelationChangeReportComparer.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/RelationChangeReportComparer.java @@ -1,47 +1,47 @@ -/*******************************************************************************
- * 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.health.change;
-
-/**
- * @author Jeff C. Phillips
- */
-public class RelationChangeReportComparer extends DataChangeReportComparer {
- private static String REL_TAG_START_ID = "<relId>";
- private static String REL_TAG_END_ID = "</relId>";
- private int relId;
-
- public RelationChangeReportComparer(String content) {
- super(content);
- }
-
- @Override
- public void processContent(String content) {
- relId =
- Integer.parseInt(content.substring(content.indexOf(REL_TAG_START_ID) + REL_TAG_START_ID.length(),
- content.indexOf(REL_TAG_END_ID)));
- }
-
- @Override
- public int compareTo(Object obj) {
- int compareResults = -1;
- if (obj instanceof RelationChangeReportComparer) {
- RelationChangeReportComparer comparer = (RelationChangeReportComparer) obj;
-
- if (this.relId == comparer.relId) {
- compareResults = 0;
- } else if (this.relId > comparer.relId) {
- compareResults = 1;
- }
- }
- return compareResults;
- }
-
-}
+/******************************************************************************* + * 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.health.change; + +/** + * @author Jeff C. Phillips + */ +public class RelationChangeReportComparer extends DataChangeReportComparer { + private static String REL_TAG_START_ID = "<relId>"; + private static String REL_TAG_END_ID = "</relId>"; + private int relId; + + public RelationChangeReportComparer(String content) { + super(content); + } + + @Override + public void processContent(String content) { + relId = + Integer.parseInt(content.substring(content.indexOf(REL_TAG_START_ID) + REL_TAG_START_ID.length(), + content.indexOf(REL_TAG_END_ID))); + } + + @Override + public int compareTo(Object obj) { + int compareResults = -1; + if (obj instanceof RelationChangeReportComparer) { + RelationChangeReportComparer comparer = (RelationChangeReportComparer) obj; + + if (this.relId == comparer.relId) { + compareResults = 0; + } else if (this.relId > comparer.relId) { + compareResults = 1; + } + } + return compareResults; + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/ValidateChangeReportParser.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/ValidateChangeReportParser.java index b22f17b96d1..7cde30cbe59 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/ValidateChangeReportParser.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/health/change/ValidateChangeReportParser.java @@ -1,65 +1,64 @@ -/*******************************************************************************
- * 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.health.change;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * @author Jeff C. Phillips
- */
-public class ValidateChangeReportParser {
- private static final String ART = "(<ArtChg>.*?</ArtChg>)";
- private static final String ATTR = "(<AttrChg>.*?</AttrChg>)";
- private static final String REL = "(<RelChg>.*?</RelChg>)";
-
- /**
- * @param changeReportString
- * @return Returns Three ArrayLists. 0 index for artifact changes, 1 index for attribute changes and 2 index for
- * relation changes.
- */
- public ArrayList<ArrayList<DataChangeReportComparer>> parse(String changeReportString) {
- ArrayList<ArrayList<DataChangeReportComparer>> changeLists =
- new ArrayList<ArrayList<DataChangeReportComparer>>(3);
- ArrayList<DataChangeReportComparer> artifactChanges = new ArrayList<DataChangeReportComparer>();
- ArrayList<DataChangeReportComparer> attrChanges = new ArrayList<DataChangeReportComparer>();
- ArrayList<DataChangeReportComparer> relChanges = new ArrayList<DataChangeReportComparer>();
-
- Matcher artChangeMatch = Pattern.compile(ART).matcher(changeReportString);
-
- while (artChangeMatch.find()) {
- artifactChanges.add(new ArtifactChangeReportComparer(artChangeMatch.group(0)));
- }
-
- Matcher attrChangeMatch = Pattern.compile(ATTR).matcher(changeReportString);
-
- while (attrChangeMatch.find()) {
- attrChanges.add(new AttributeChangeReportComparer(attrChangeMatch.group(0)));
- }
-
- Matcher relChangeMatch = Pattern.compile(REL).matcher(changeReportString);
-
- while (relChangeMatch.find()) {
- relChanges.add(new RelationChangeReportComparer(relChangeMatch.group(0)));
- }
- Collections.sort(artifactChanges);
- Collections.sort(attrChanges);
- Collections.sort(relChanges);
-
- changeLists.add(artifactChanges);
- changeLists.add(attrChanges);
- changeLists.add(relChanges);
-
- return changeLists;
- }
-}
+/******************************************************************************* + * 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.health.change; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @author Jeff C. Phillips + */ +public class ValidateChangeReportParser { + private static final String ART = "(<ArtChg>.*?</ArtChg>)"; + private static final String ATTR = "(<AttrChg>.*?</AttrChg>)"; + private static final String REL = "(<RelChg>.*?</RelChg>)"; + + /** + * @return Returns Three ArrayLists. 0 index for artifact changes, 1 index for attribute changes and 2 index for + * relation changes. + */ + public ArrayList<ArrayList<DataChangeReportComparer>> parse(String changeReportString) { + ArrayList<ArrayList<DataChangeReportComparer>> changeLists = + new ArrayList<ArrayList<DataChangeReportComparer>>(3); + ArrayList<DataChangeReportComparer> artifactChanges = new ArrayList<DataChangeReportComparer>(); + ArrayList<DataChangeReportComparer> attrChanges = new ArrayList<DataChangeReportComparer>(); + ArrayList<DataChangeReportComparer> relChanges = new ArrayList<DataChangeReportComparer>(); + + Matcher artChangeMatch = Pattern.compile(ART).matcher(changeReportString); + + while (artChangeMatch.find()) { + artifactChanges.add(new ArtifactChangeReportComparer(artChangeMatch.group(0))); + } + + Matcher attrChangeMatch = Pattern.compile(ATTR).matcher(changeReportString); + + while (attrChangeMatch.find()) { + attrChanges.add(new AttributeChangeReportComparer(attrChangeMatch.group(0))); + } + + Matcher relChangeMatch = Pattern.compile(REL).matcher(changeReportString); + + while (relChangeMatch.find()) { + relChanges.add(new RelationChangeReportComparer(relChangeMatch.group(0))); + } + Collections.sort(artifactChanges); + Collections.sort(attrChanges); + Collections.sort(relChanges); + + changeLists.add(artifactChanges); + changeLists.add(attrChanges); + changeLists.add(relChanges); + + return changeLists; + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/ActionHyperItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/ActionHyperItem.java index fc112cbd745..6f59b3e579b 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/ActionHyperItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/ActionHyperItem.java @@ -1,127 +1,127 @@ -/*******************************************************************************
- * 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.hyper;
-
-import java.util.ArrayList;
-import java.util.logging.Level;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.ui.skynet.ArtifactImageManager;
-import org.eclipse.swt.graphics.Image;
-
-public class ActionHyperItem extends HyperViewItem {
-
- private final IHyperArtifact iHyperartifact;
-
- public ActionHyperItem(IHyperArtifact iHyperartifact) {
- super(iHyperartifact.getHyperName());
- this.iHyperartifact = iHyperartifact;
- setGuid(iHyperartifact.getGuid());
- }
-
- @Override
- public String toString() {
- return iHyperartifact.getHyperType() + " - " + iHyperartifact.getHyperName();
- }
-
- public void handleDoubleClick(HyperViewItem hyperViewItem) {
- // provided for subclass implementation
- }
-
- public void calculateCurrent(Artifact currentArtifact) {
- setCurrent(currentArtifact.equals(getArtifact()));
- for (ActionHyperItem childHyperItem : getChildren()) {
- childHyperItem.calculateCurrent(currentArtifact);
- }
- }
-
- @SuppressWarnings("unused")
- @Override
- public Image getImage() throws OseeCoreException {
- if (iHyperartifact.getHyperArtifact() == null) {
- return null;
- }
- if (iHyperartifact.isDeleted()) {
- return null;
- }
- return ArtifactImageManager.getImage(iHyperartifact.getHyperArtifact());
- }
-
- @Override
- public String getTitle() {
- if (iHyperartifact.isDeleted()) {
- return "Deleted";
- }
- return iHyperartifact.getHyperName();
- }
-
- @Override
- public String getToolTip() {
- if (iHyperartifact.isDeleted()) {
- return "";
- }
- StringBuilder builder = new StringBuilder();
- builder.append("Name: " + iHyperartifact.getHyperName());
- builder.append("\nType: " + iHyperartifact.getHyperType());
- if (iHyperartifact.getHyperState() != null) {
- builder.append("\nState: " + iHyperartifact.getHyperState());
- }
- if (iHyperartifact.getHyperAssignee() != null) {
- builder.append("\nAssignee: " + iHyperartifact.getHyperAssignee());
- }
- if (iHyperartifact.getHyperTargetVersion() != null) {
- builder.append("\nVersion: " + iHyperartifact.getHyperTargetVersion());
- }
-
- return builder.toString();
- }
-
- @Override
- public Image getMarkImage() {
- if (iHyperartifact.isDeleted()) {
- return null;
- }
- try {
- return iHyperartifact.getHyperAssigneeImage();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- return super.getMarkImage();
- }
-
- public ArrayList<ActionHyperItem> getChildren() {
- ArrayList<ActionHyperItem> children = new ArrayList<ActionHyperItem>();
- for (HyperViewItem item : getBottom()) {
- children.add((ActionHyperItem) item);
- }
- for (HyperViewItem item : getTop()) {
- children.add((ActionHyperItem) item);
- }
- for (HyperViewItem item : getRight()) {
- children.add((ActionHyperItem) item);
- }
- for (HyperViewItem item : getLeft()) {
- children.add((ActionHyperItem) item);
- }
- return children;
- }
-
- public IHyperArtifact getHyperArtifact() {
- return iHyperartifact;
- }
-
- public Artifact getArtifact() {
- return iHyperartifact.getHyperArtifact();
- }
-
-}
+/******************************************************************************* + * 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.hyper; + +import java.util.ArrayList; +import java.util.logging.Level; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.ui.skynet.ArtifactImageManager; +import org.eclipse.swt.graphics.Image; + +public class ActionHyperItem extends HyperViewItem { + + private final IHyperArtifact iHyperartifact; + + public ActionHyperItem(IHyperArtifact iHyperartifact) { + super(iHyperartifact.getHyperName()); + this.iHyperartifact = iHyperartifact; + setGuid(iHyperartifact.getGuid()); + } + + @Override + public String toString() { + return iHyperartifact.getHyperType() + " - " + iHyperartifact.getHyperName(); + } + + public void handleDoubleClick(HyperViewItem hyperViewItem) { + // provided for subclass implementation + } + + public void calculateCurrent(Artifact currentArtifact) { + setCurrent(currentArtifact.equals(getArtifact())); + for (ActionHyperItem childHyperItem : getChildren()) { + childHyperItem.calculateCurrent(currentArtifact); + } + } + + @SuppressWarnings("unused") + @Override + public Image getImage() throws OseeCoreException { + if (iHyperartifact.getHyperArtifact() == null) { + return null; + } + if (iHyperartifact.isDeleted()) { + return null; + } + return ArtifactImageManager.getImage(iHyperartifact.getHyperArtifact()); + } + + @Override + public String getTitle() { + if (iHyperartifact.isDeleted()) { + return "Deleted"; + } + return iHyperartifact.getHyperName(); + } + + @Override + public String getToolTip() { + if (iHyperartifact.isDeleted()) { + return ""; + } + StringBuilder builder = new StringBuilder(); + builder.append("Name: " + iHyperartifact.getHyperName()); + builder.append("\nType: " + iHyperartifact.getHyperType()); + if (iHyperartifact.getHyperState() != null) { + builder.append("\nState: " + iHyperartifact.getHyperState()); + } + if (iHyperartifact.getHyperAssignee() != null) { + builder.append("\nAssignee: " + iHyperartifact.getHyperAssignee()); + } + if (iHyperartifact.getHyperTargetVersion() != null) { + builder.append("\nVersion: " + iHyperartifact.getHyperTargetVersion()); + } + + return builder.toString(); + } + + @Override + public Image getMarkImage() { + if (iHyperartifact.isDeleted()) { + return null; + } + try { + return iHyperartifact.getHyperAssigneeImage(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + return super.getMarkImage(); + } + + public ArrayList<ActionHyperItem> getChildren() { + ArrayList<ActionHyperItem> children = new ArrayList<ActionHyperItem>(); + for (HyperViewItem item : getBottom()) { + children.add((ActionHyperItem) item); + } + for (HyperViewItem item : getTop()) { + children.add((ActionHyperItem) item); + } + for (HyperViewItem item : getRight()) { + children.add((ActionHyperItem) item); + } + for (HyperViewItem item : getLeft()) { + children.add((ActionHyperItem) item); + } + return children; + } + + public IHyperArtifact getHyperArtifact() { + return iHyperartifact; + } + + public Artifact getArtifact() { + return iHyperartifact.getHyperArtifact(); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/ActionHyperView.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/ActionHyperView.java index 6201044f22a..690b3970f71 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/ActionHyperView.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/ActionHyperView.java @@ -1,369 +1,369 @@ -/*******************************************************************************
- * 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.hyper;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Level;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.osee.ats.AtsOpenOption;
-import org.eclipse.osee.ats.artifact.ATSArtifact;
-import org.eclipse.osee.ats.artifact.ActionArtifact;
-import org.eclipse.osee.ats.artifact.GoalArtifact;
-import org.eclipse.osee.ats.artifact.ReviewSMArtifact;
-import org.eclipse.osee.ats.artifact.TaskArtifact;
-import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.config.AtsBulkLoad;
-import org.eclipse.osee.ats.editor.SMAEditor;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsRelationTypes;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.ats.util.widgets.ReviewManager;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.plugin.core.IActionable;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData;
-import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener;
-import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
-import org.eclipse.osee.framework.skynet.core.event.Sender;
-import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent;
-import org.eclipse.osee.framework.skynet.core.event2.artifact.IArtifactEventListener;
-import org.eclipse.osee.framework.skynet.core.event2.filter.IEventFilter;
-import org.eclipse.osee.framework.ui.plugin.OseeUiActions;
-import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
-import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite;
-import org.eclipse.osee.framework.ui.swt.Displays;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Cursor;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IPerspectiveDescriptor;
-import org.eclipse.ui.IPerspectiveListener2;
-import org.eclipse.ui.IViewReference;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchPartReference;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * <REM2>
- *
- * @author Donald G. Dunne
- */
-public class ActionHyperView extends HyperView implements IActionable, IArtifactEventListener, IFrameworkTransactionEventListener, IPerspectiveListener2 {
-
- public static String VIEW_ID = "org.eclipse.osee.ats.hyper.ActionHyperView";
- private static String HELP_CONTEXT_ID = "atsActionView";
- private static ActionHyperItem topAHI;
- private static ATSArtifact currentArtifact;
- private Cursor cursor;
-
- public ActionHyperView() {
- super();
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().addPartListener(this);
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().addPerspectiveListener(this);
- HyperView.setNodeColor(whiteColor);
- HyperView.setCenterColor(whiteColor);
- setVerticalSelection(45);
- }
-
- @Override
- public void createPartControl(Composite top) {
- if (!DbConnectionExceptionComposite.dbConnectionIsOk(top)) {
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().removePartListener(this);
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().removePerspectiveListener(this);
- return;
- }
- AtsBulkLoad.loadConfig(false);
- super.createPartControl(top);
- OseeUiActions.addBugToViewToolbar(this, this, AtsPlugin.getInstance(), VIEW_ID, "SkyWalker");
- AtsPlugin.getInstance().setHelp(top, HELP_CONTEXT_ID, "org.eclipse.osee.ats.help.ui");
- AtsPlugin.getInstance().setHelp(composite, HELP_CONTEXT_ID, "org.eclipse.osee.ats.help.ui");
- OseeEventManager.addListener(this);
- }
-
- public static ActionHyperView getArtifactHyperView() {
- IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
- try {
- IViewReference ivr = page.findViewReference(ActionHyperView.VIEW_ID);
- if (ivr != null && page.isPartVisible(ivr.getPart(false))) {
- return (ActionHyperView) page.showView(ActionHyperView.VIEW_ID);
- }
- } catch (PartInitException e1) {
- MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Launch Error",
- "Couldn't Get OSEE Hyper View " + e1.getMessage());
- }
- return null;
- }
-
- @Override
- public boolean provideBackForwardActions() {
- return false;
- }
-
- @Override
- public void dispose() {
- OseeEventManager.removeListener(this);
- super.dispose();
- }
-
- @Override
- public void handleItemDoubleClick(HyperViewItem hvi) {
- Artifact art = ((ActionHyperItem) hvi).getArtifact();
- if (art == null) {
- ((ActionHyperItem) hvi).handleDoubleClick(hvi);
-
- } else if (art.isDeleted()) {
- AWorkbench.popup("ERROR", "Artifact has been deleted");
- return;
- } else {
- AtsUtil.openATSAction(art, AtsOpenOption.OpenOneOrPopupSelect);
- }
- }
-
- private boolean reviewsCreated = false;
- private boolean tasksReviewsCreated = false;
-
- @Override
- public void display() {
- try {
- if (cursor == null) {
- cursor = new Cursor(null, SWT.NONE);
- }
- getContainer().setCursor(cursor);
- if (currentArtifact == null || currentArtifact.isDeleted()) {
- return;
- }
- reviewsCreated = false;
- tasksReviewsCreated = false;
- ATSArtifact topArt = getTopArtifact(currentArtifact);
- if (topArt == null || topArt.isDeleted()) {
- return;
- }
- topAHI = new ActionHyperItem(topArt);
- if (topArt instanceof ActionArtifact) {
- for (TeamWorkFlowArtifact team : ((ActionArtifact) topArt).getTeamWorkFlowArtifacts()) {
- ActionHyperItem teamAHI = new ActionHyperItem(team);
- teamAHI.setRelationToolTip("Team");
- topAHI.addBottom(teamAHI);
- for (ReviewSMArtifact rev : ReviewManager.getReviews(team)) {
- reviewsCreated = true;
- ActionHyperItem reviewAHI = new ActionHyperItem(rev);
- reviewAHI.setRelationToolTip("Review");
- teamAHI.addBottom(reviewAHI);
- addTasksAHIs(reviewAHI, rev);
- }
- addTasksAHIs(teamAHI, team);
- }
- }
- if (topArt instanceof GoalArtifact) {
- List<TaskArtifact> taskArts = new ArrayList<TaskArtifact>();
- for (Artifact member : topArt.getRelatedArtifacts(AtsRelationTypes.Goal_Member)) {
- if (member instanceof TaskArtifact) {
- taskArts.add((TaskArtifact) member);
- } else if (member instanceof IHyperArtifact) {
- ActionHyperItem teamAHI = new ActionHyperItem((IHyperArtifact) member);
- teamAHI.setRelationToolTip("Member");
- topAHI.addBottom(teamAHI);
- }
- }
- if (taskArts.size() > 0) {
- topAHI.addBottom(new TasksActionHyperItem(taskArts));
- }
- }
-
- if (activeEditorIsActionEditor()) {
- topAHI.calculateCurrent(currentArtifact);
- }
- if (tasksReviewsCreated) {
- setVerticalSelection(50);
- } else if (reviewsCreated) {
- setVerticalSelection(47);
- } else {
- setVerticalSelection(45);
- }
- create(topAHI);
- } catch (OseeCoreException ex) {
- clear();
- }
- }
-
- private void addTasksAHIs(ActionHyperItem parentAHI, ATSArtifact artifact) throws OseeCoreException {
- if (!(artifact instanceof TaskableStateMachineArtifact)) {
- return;
- }
- if (((TaskableStateMachineArtifact) artifact).getTaskArtifacts().size() > 0) {
- if (artifact instanceof ReviewSMArtifact) {
- tasksReviewsCreated = true;
- }
- parentAHI.addBottom(new TasksActionHyperItem(((TaskableStateMachineArtifact) artifact).getTaskArtifacts()));
- }
- }
-
- public ATSArtifact getTopArtifact(ATSArtifact art) throws OseeCoreException {
- ATSArtifact artifact = art;
- if (artifact instanceof TaskArtifact) {
- artifact = ((TaskArtifact) artifact).getParentSMA();
- }
- if (artifact instanceof TeamWorkFlowArtifact) {
- artifact = ((TeamWorkFlowArtifact) artifact).getParentActionArtifact();
- }
- if (artifact instanceof ReviewSMArtifact) {
- if (((ReviewSMArtifact) artifact).getParentActionArtifact() != null) {
- artifact = ((ReviewSMArtifact) artifact).getParentActionArtifact();
- }
- }
- if (artifact == null) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, "Unknown parent " + art.getHumanReadableId());
- }
- return artifact;
- }
-
- public boolean activeEditorIsActionEditor() {
- IWorkbenchPage page = getSite().getWorkbenchWindow().getActivePage();
- if (page == null) {
- return false;
- }
- IEditorPart editorPart = page.getActiveEditor();
- boolean result = editorPart != null && editorPart instanceof SMAEditor;
- return result;
- }
-
- public void processWindowActivated() {
- if (!this.getSite().getPage().isPartVisible(this)) {
- return;
- }
- IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
- if (page != null) {
- IEditorPart editor = page.getActiveEditor();
- if (editor != null && editor instanceof SMAEditor) {
- currentArtifact = ((SMAEditor) editor).getSma();
- display();
- } else if (currentArtifact != null && currentArtifact.isDeleted()) {
- super.clear();
- }
- }
- }
-
- public void processWindowDeActivated(IWorkbenchPart part) {
- processWindowActivated();
- }
-
- @Override
- public void partActivated(IWorkbenchPart part) {
- processWindowActivated();
- }
-
- @Override
- public void partBroughtToTop(IWorkbenchPart part) {
- processWindowActivated();
- }
-
- @Override
- public void partClosed(IWorkbenchPart part) {
- if (part.equals(this)) {
- dispose();
- } else {
- processWindowActivated();
- }
- }
-
- @Override
- public void partDeactivated(IWorkbenchPart part) {
- processWindowActivated();
- }
-
- @Override
- public void partOpened(IWorkbenchPart part) {
- processWindowActivated();
- }
-
- @Override
- public String getActionDescription() {
- if (currentArtifact != null && currentArtifact.isDeleted()) {
- return String.format("Current Artifact - %s - %s", currentArtifact.getGuid(), currentArtifact.getName());
- }
- return "";
- }
-
- @Override
- protected void clear() {
- super.clear();
- }
-
- @Override
- public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) {
- processWindowActivated();
- }
-
- @Override
- public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, String changeId) {
- processWindowActivated();
- }
-
- @Override
- public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, IWorkbenchPartReference partRef, String changeId) {
- processWindowActivated();
- }
-
- @Override
- public void handleFrameworkTransactionEvent(Sender sender, FrameworkTransactionData transData) throws OseeCoreException {
- if (currentArtifact == null) {
- return;
- }
- if (transData.branchId != AtsUtil.getAtsBranch().getId()) {
- return;
- }
- if (transData.isDeleted(currentArtifact)) {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- clear();
- }
- });
- }
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- display();
- }
- });
- }
-
- @Override
- public List<? extends IEventFilter> getEventFilters() {
- return AtsUtil.getAtsObjectEventFilters();
- }
-
- @Override
- public void handleArtifactEvent(ArtifactEvent artifactEvent, Sender sender) {
- if (currentArtifact == null) {
- return;
- }
- if (artifactEvent.isDeletedPurged(currentArtifact)) {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- clear();
- }
- });
- }
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- display();
- }
- });
- }
-}
+/******************************************************************************* + * 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.hyper; + +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Level; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.osee.ats.AtsOpenOption; +import org.eclipse.osee.ats.artifact.ATSArtifact; +import org.eclipse.osee.ats.artifact.ActionArtifact; +import org.eclipse.osee.ats.artifact.GoalArtifact; +import org.eclipse.osee.ats.artifact.ReviewSMArtifact; +import org.eclipse.osee.ats.artifact.TaskArtifact; +import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.config.AtsBulkLoad; +import org.eclipse.osee.ats.editor.SMAEditor; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsRelationTypes; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.ats.util.widgets.ReviewManager; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.plugin.core.IActionable; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData; +import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener; +import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; +import org.eclipse.osee.framework.skynet.core.event.Sender; +import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent; +import org.eclipse.osee.framework.skynet.core.event2.artifact.IArtifactEventListener; +import org.eclipse.osee.framework.skynet.core.event2.filter.IEventFilter; +import org.eclipse.osee.framework.ui.plugin.OseeUiActions; +import org.eclipse.osee.framework.ui.plugin.util.AWorkbench; +import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite; +import org.eclipse.osee.framework.ui.swt.Displays; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Cursor; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IPerspectiveDescriptor; +import org.eclipse.ui.IPerspectiveListener2; +import org.eclipse.ui.IViewReference; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchPartReference; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.PlatformUI; + +/** + * <REM2> + * + * @author Donald G. Dunne + */ +public class ActionHyperView extends HyperView implements IActionable, IArtifactEventListener, IFrameworkTransactionEventListener, IPerspectiveListener2 { + + public static String VIEW_ID = "org.eclipse.osee.ats.hyper.ActionHyperView"; + private static String HELP_CONTEXT_ID = "atsActionView"; + private static ActionHyperItem topAHI; + private static ATSArtifact currentArtifact; + private Cursor cursor; + + public ActionHyperView() { + super(); + PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().addPartListener(this); + PlatformUI.getWorkbench().getActiveWorkbenchWindow().addPerspectiveListener(this); + HyperView.setNodeColor(whiteColor); + HyperView.setCenterColor(whiteColor); + setVerticalSelection(45); + } + + @Override + public void createPartControl(Composite top) { + if (!DbConnectionExceptionComposite.dbConnectionIsOk(top)) { + PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().removePartListener(this); + PlatformUI.getWorkbench().getActiveWorkbenchWindow().removePerspectiveListener(this); + return; + } + AtsBulkLoad.loadConfig(false); + super.createPartControl(top); + OseeUiActions.addBugToViewToolbar(this, this, AtsPlugin.getInstance(), VIEW_ID, "SkyWalker"); + AtsPlugin.getInstance().setHelp(top, HELP_CONTEXT_ID, "org.eclipse.osee.ats.help.ui"); + AtsPlugin.getInstance().setHelp(composite, HELP_CONTEXT_ID, "org.eclipse.osee.ats.help.ui"); + OseeEventManager.addListener(this); + } + + public static ActionHyperView getArtifactHyperView() { + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + try { + IViewReference ivr = page.findViewReference(ActionHyperView.VIEW_ID); + if (ivr != null && page.isPartVisible(ivr.getPart(false))) { + return (ActionHyperView) page.showView(ActionHyperView.VIEW_ID); + } + } catch (PartInitException e1) { + MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Launch Error", + "Couldn't Get OSEE Hyper View " + e1.getMessage()); + } + return null; + } + + @Override + public boolean provideBackForwardActions() { + return false; + } + + @Override + public void dispose() { + OseeEventManager.removeListener(this); + super.dispose(); + } + + @Override + public void handleItemDoubleClick(HyperViewItem hvi) { + Artifact art = ((ActionHyperItem) hvi).getArtifact(); + if (art == null) { + ((ActionHyperItem) hvi).handleDoubleClick(hvi); + + } else if (art.isDeleted()) { + AWorkbench.popup("ERROR", "Artifact has been deleted"); + return; + } else { + AtsUtil.openATSAction(art, AtsOpenOption.OpenOneOrPopupSelect); + } + } + + private boolean reviewsCreated = false; + private boolean tasksReviewsCreated = false; + + @Override + public void display() { + try { + if (cursor == null) { + cursor = new Cursor(null, SWT.NONE); + } + getContainer().setCursor(cursor); + if (currentArtifact == null || currentArtifact.isDeleted()) { + return; + } + reviewsCreated = false; + tasksReviewsCreated = false; + ATSArtifact topArt = getTopArtifact(currentArtifact); + if (topArt == null || topArt.isDeleted()) { + return; + } + topAHI = new ActionHyperItem(topArt); + if (topArt instanceof ActionArtifact) { + for (TeamWorkFlowArtifact team : ((ActionArtifact) topArt).getTeamWorkFlowArtifacts()) { + ActionHyperItem teamAHI = new ActionHyperItem(team); + teamAHI.setRelationToolTip("Team"); + topAHI.addBottom(teamAHI); + for (ReviewSMArtifact rev : ReviewManager.getReviews(team)) { + reviewsCreated = true; + ActionHyperItem reviewAHI = new ActionHyperItem(rev); + reviewAHI.setRelationToolTip("Review"); + teamAHI.addBottom(reviewAHI); + addTasksAHIs(reviewAHI, rev); + } + addTasksAHIs(teamAHI, team); + } + } + if (topArt instanceof GoalArtifact) { + List<TaskArtifact> taskArts = new ArrayList<TaskArtifact>(); + for (Artifact member : topArt.getRelatedArtifacts(AtsRelationTypes.Goal_Member)) { + if (member instanceof TaskArtifact) { + taskArts.add((TaskArtifact) member); + } else if (member instanceof IHyperArtifact) { + ActionHyperItem teamAHI = new ActionHyperItem((IHyperArtifact) member); + teamAHI.setRelationToolTip("Member"); + topAHI.addBottom(teamAHI); + } + } + if (taskArts.size() > 0) { + topAHI.addBottom(new TasksActionHyperItem(taskArts)); + } + } + + if (activeEditorIsActionEditor()) { + topAHI.calculateCurrent(currentArtifact); + } + if (tasksReviewsCreated) { + setVerticalSelection(50); + } else if (reviewsCreated) { + setVerticalSelection(47); + } else { + setVerticalSelection(45); + } + create(topAHI); + } catch (OseeCoreException ex) { + clear(); + } + } + + private void addTasksAHIs(ActionHyperItem parentAHI, ATSArtifact artifact) throws OseeCoreException { + if (!(artifact instanceof TaskableStateMachineArtifact)) { + return; + } + if (((TaskableStateMachineArtifact) artifact).getTaskArtifacts().size() > 0) { + if (artifact instanceof ReviewSMArtifact) { + tasksReviewsCreated = true; + } + parentAHI.addBottom(new TasksActionHyperItem(((TaskableStateMachineArtifact) artifact).getTaskArtifacts())); + } + } + + public ATSArtifact getTopArtifact(ATSArtifact art) throws OseeCoreException { + ATSArtifact artifact = art; + if (artifact instanceof TaskArtifact) { + artifact = ((TaskArtifact) artifact).getParentSMA(); + } + if (artifact instanceof TeamWorkFlowArtifact) { + artifact = ((TeamWorkFlowArtifact) artifact).getParentActionArtifact(); + } + if (artifact instanceof ReviewSMArtifact) { + if (((ReviewSMArtifact) artifact).getParentActionArtifact() != null) { + artifact = ((ReviewSMArtifact) artifact).getParentActionArtifact(); + } + } + if (artifact == null) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, "Unknown parent " + art.getHumanReadableId()); + } + return artifact; + } + + public boolean activeEditorIsActionEditor() { + IWorkbenchPage page = getSite().getWorkbenchWindow().getActivePage(); + if (page == null) { + return false; + } + IEditorPart editorPart = page.getActiveEditor(); + boolean result = editorPart != null && editorPart instanceof SMAEditor; + return result; + } + + public void processWindowActivated() { + if (!this.getSite().getPage().isPartVisible(this)) { + return; + } + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + if (page != null) { + IEditorPart editor = page.getActiveEditor(); + if (editor != null && editor instanceof SMAEditor) { + currentArtifact = ((SMAEditor) editor).getSma(); + display(); + } else if (currentArtifact != null && currentArtifact.isDeleted()) { + super.clear(); + } + } + } + + public void processWindowDeActivated(IWorkbenchPart part) { + processWindowActivated(); + } + + @Override + public void partActivated(IWorkbenchPart part) { + processWindowActivated(); + } + + @Override + public void partBroughtToTop(IWorkbenchPart part) { + processWindowActivated(); + } + + @Override + public void partClosed(IWorkbenchPart part) { + if (part.equals(this)) { + dispose(); + } else { + processWindowActivated(); + } + } + + @Override + public void partDeactivated(IWorkbenchPart part) { + processWindowActivated(); + } + + @Override + public void partOpened(IWorkbenchPart part) { + processWindowActivated(); + } + + @Override + public String getActionDescription() { + if (currentArtifact != null && currentArtifact.isDeleted()) { + return String.format("Current Artifact - %s - %s", currentArtifact.getGuid(), currentArtifact.getName()); + } + return ""; + } + + @Override + protected void clear() { + super.clear(); + } + + @Override + public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) { + processWindowActivated(); + } + + @Override + public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, String changeId) { + processWindowActivated(); + } + + @Override + public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, IWorkbenchPartReference partRef, String changeId) { + processWindowActivated(); + } + + @Override + public void handleFrameworkTransactionEvent(Sender sender, FrameworkTransactionData transData) throws OseeCoreException { + if (currentArtifact == null) { + return; + } + if (transData.branchId != AtsUtil.getAtsBranch().getId()) { + return; + } + if (transData.isDeleted(currentArtifact)) { + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + clear(); + } + }); + } + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + display(); + } + }); + } + + @Override + public List<? extends IEventFilter> getEventFilters() { + return AtsUtil.getAtsObjectEventFilters(); + } + + @Override + public void handleArtifactEvent(ArtifactEvent artifactEvent, Sender sender) { + if (currentArtifact == null) { + return; + } + if (artifactEvent.isDeletedPurged(currentArtifact)) { + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + clear(); + } + }); + } + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + display(); + } + }); + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/ActionSkyWalker.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/ActionSkyWalker.java index 612b43bf559..ef1389d70ab 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/ActionSkyWalker.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/ActionSkyWalker.java @@ -1,284 +1,284 @@ -/*******************************************************************************
- * 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.hyper;
-
-import java.util.List;
-import java.util.logging.Level;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.osee.ats.artifact.ATSArtifact;
-import org.eclipse.osee.ats.artifact.ActionArtifact;
-import org.eclipse.osee.ats.artifact.TaskArtifact;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.editor.SMAEditor;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.plugin.core.IActionable;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData;
-import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener;
-import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
-import org.eclipse.osee.framework.skynet.core.event.Sender;
-import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent;
-import org.eclipse.osee.framework.skynet.core.event2.artifact.IArtifactEventListener;
-import org.eclipse.osee.framework.skynet.core.event2.filter.IEventFilter;
-import org.eclipse.osee.framework.ui.plugin.PluginUiImage;
-import org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerOptions;
-import org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerView;
-import org.eclipse.osee.framework.ui.swt.Displays;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.IActionBars;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IPartListener;
-import org.eclipse.ui.IPerspectiveDescriptor;
-import org.eclipse.ui.IPerspectiveListener2;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchPartReference;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * <REM2>
- *
- * @author Donald G. Dunne
- */
-public class ActionSkyWalker extends SkyWalkerView implements IPartListener, IActionable, IArtifactEventListener, IFrameworkTransactionEventListener, IPerspectiveListener2 {
-
- public static final String VIEW_ID = "org.eclipse.osee.ats.hyper.ActionSkyWalker";
-
- public ActionSkyWalker() {
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().addPartListener(this);
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().addPerspectiveListener(this);
- }
-
- @Override
- public void createPartControl(Composite parent) {
- super.createPartControl(parent);
-
- sashForm.setWeights(new int[] {99, 1});
- OseeEventManager.addListener(this);
- }
-
- @Override
- protected void createActions() {
- IActionBars bars = getViewSite().getActionBars();
- // IMenuManager mm = bars.getMenuManager();
- IToolBarManager tbm = bars.getToolBarManager();
-
- Action action = new Action() {
- @Override
- public void run() {
- redraw();
- }
- };
- action.setText("Refresh");
- action.setToolTipText("Refresh");
- action.setImageDescriptor(ImageManager.getImageDescriptor(PluginUiImage.REFRESH));
- tbm.add(action);
- }
-
- @Override
- public void dispose() {
- OseeEventManager.removeListener(this);
- super.dispose();
- }
-
- @Override
- public void explore(Artifact artifact) {
- if (artifact == null || artifact.isDeleted() || !(artifact instanceof ATSArtifact)) {
- clear();
- }
- try {
- getOptions().setArtifact(artifact);
- getOptions().setLayout(getOptions().getLayout(SkyWalkerOptions.RADIAL_DOWN_LAYOUT));
- if (artifact instanceof User) {
- super.explore(artifact);
- } else if (artifact instanceof ATSArtifact) {
- super.explore(getTopArtifact((ATSArtifact) artifact));
- } else {
- throw new OseeCoreException("Unexpected artifact subclass");
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- clear();
- }
- }
-
- public ATSArtifact getTopArtifact(ATSArtifact art) throws OseeCoreException {
- ATSArtifact artifact = null;
- if (art instanceof ActionArtifact) {
- artifact = art;
- } else if (art instanceof TeamWorkFlowArtifact) {
- artifact = ((TeamWorkFlowArtifact) art).getParentActionArtifact();
- } else if (art instanceof TaskArtifact) {
- Artifact parentArtifact = ((TaskArtifact) art).getParentSMA();
- if (parentArtifact instanceof TeamWorkFlowArtifact) {
- artifact = ((TeamWorkFlowArtifact) parentArtifact).getParentActionArtifact();
- } else {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Unknown parent " + art.getHumanReadableId());
- }
- }
- return artifact;
- }
-
- public boolean activeEditorIsActionEditor() {
- IWorkbenchPage page = getSite().getWorkbenchWindow().getActivePage();
- if (page == null) {
- return false;
- }
- IEditorPart editorPart = page.getActiveEditor();
- boolean result = editorPart != null && editorPart instanceof SMAEditor;
- return result;
- }
-
- public void processWindowActivated() {
- if (!this.getSite().getPage().isPartVisible(this)) {
- return;
- }
- IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
- if (page != null) {
- IEditorPart editor = page.getActiveEditor();
- if (editor != null && editor instanceof SMAEditor) {
- explore(((SMAEditor) editor).getSma());
- }
- clear();
- }
- }
-
- public void processWindowDeActivated(IWorkbenchPart part) {
- processWindowActivated();
- }
-
- @Override
- public void partActivated(IWorkbenchPart part) {
- processWindowActivated();
- }
-
- @Override
- public void partBroughtToTop(IWorkbenchPart part) {
- processWindowActivated();
- }
-
- @Override
- public void partClosed(IWorkbenchPart part) {
- if (part.equals(this)) {
- dispose();
- } else {
- processWindowActivated();
- }
- }
-
- @Override
- public void partDeactivated(IWorkbenchPart part) {
- processWindowActivated();
- }
-
- @Override
- public void partOpened(IWorkbenchPart part) {
- processWindowActivated();
- }
-
- @Override
- public String getActionDescription() {
- if (getOptions() != null && getOptions().getArtifact() != null && getOptions().getArtifact().isDeleted()) {
- return String.format("Current Artifact - %s - %s", getOptions().getArtifact().getGuid(),
- getOptions().getArtifact().getName());
- }
- return "";
- }
-
- public void clear() {
- System.out.println("clear viewer here");
- }
-
- @Override
- public void handleFrameworkTransactionEvent(Sender sender, FrameworkTransactionData transData) throws OseeCoreException {
- if (sender.isRemote()) {
- return;
- }
- if (transData.branchId != AtsUtil.getAtsBranch().getId()) {
- return;
- }
- if (getOptions().getArtifact() == null) {
- return;
- }
- if (transData.isDeleted(getOptions().getArtifact())) {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- clear();
- }
- });
- }
- if (transData.isChanged(getOptions().getArtifact()) || transData.isRelAddedChangedDeleted(getOptions().getArtifact())) {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- explore(getOptions().getArtifact());
- }
- });
- }
- }
-
- @Override
- public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) {
- processWindowActivated();
- }
-
- @Override
- public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, String changeId) {
- processWindowActivated();
- }
-
- @Override
- public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, IWorkbenchPartReference partRef, String changeId) {
- processWindowActivated();
- }
-
- @Override
- public List<? extends IEventFilter> getEventFilters() {
- return AtsUtil.getAtsObjectEventFilters();
- }
-
- @Override
- public void handleArtifactEvent(ArtifactEvent artifactEvent, Sender sender) {
- if (sender.isRemote()) {
- return;
- }
- if (getOptions().getArtifact() == null) {
- return;
- }
- if (artifactEvent.isDeletedPurged(getOptions().getArtifact())) {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- clear();
- }
- });
- }
- if (artifactEvent.isModifiedReloaded(getOptions().getArtifact()) ||
- //
- artifactEvent.isRelAddedChangedDeleted(getOptions().getArtifact())) {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- explore(getOptions().getArtifact());
- }
- });
- }
- }
-
-}
+/******************************************************************************* + * 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.hyper; + +import java.util.List; +import java.util.logging.Level; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.osee.ats.artifact.ATSArtifact; +import org.eclipse.osee.ats.artifact.ActionArtifact; +import org.eclipse.osee.ats.artifact.TaskArtifact; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.editor.SMAEditor; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.plugin.core.IActionable; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData; +import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener; +import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; +import org.eclipse.osee.framework.skynet.core.event.Sender; +import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent; +import org.eclipse.osee.framework.skynet.core.event2.artifact.IArtifactEventListener; +import org.eclipse.osee.framework.skynet.core.event2.filter.IEventFilter; +import org.eclipse.osee.framework.ui.plugin.PluginUiImage; +import org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerOptions; +import org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerView; +import org.eclipse.osee.framework.ui.swt.Displays; +import org.eclipse.osee.framework.ui.swt.ImageManager; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IPartListener; +import org.eclipse.ui.IPerspectiveDescriptor; +import org.eclipse.ui.IPerspectiveListener2; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchPartReference; +import org.eclipse.ui.PlatformUI; + +/** + * <REM2> + * + * @author Donald G. Dunne + */ +public class ActionSkyWalker extends SkyWalkerView implements IPartListener, IActionable, IArtifactEventListener, IFrameworkTransactionEventListener, IPerspectiveListener2 { + + public static final String VIEW_ID = "org.eclipse.osee.ats.hyper.ActionSkyWalker"; + + public ActionSkyWalker() { + PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().addPartListener(this); + PlatformUI.getWorkbench().getActiveWorkbenchWindow().addPerspectiveListener(this); + } + + @Override + public void createPartControl(Composite parent) { + super.createPartControl(parent); + + sashForm.setWeights(new int[] {99, 1}); + OseeEventManager.addListener(this); + } + + @Override + protected void createActions() { + IActionBars bars = getViewSite().getActionBars(); + // IMenuManager mm = bars.getMenuManager(); + IToolBarManager tbm = bars.getToolBarManager(); + + Action action = new Action() { + @Override + public void run() { + redraw(); + } + }; + action.setText("Refresh"); + action.setToolTipText("Refresh"); + action.setImageDescriptor(ImageManager.getImageDescriptor(PluginUiImage.REFRESH)); + tbm.add(action); + } + + @Override + public void dispose() { + OseeEventManager.removeListener(this); + super.dispose(); + } + + @Override + public void explore(Artifact artifact) { + if (artifact == null || artifact.isDeleted() || !(artifact instanceof ATSArtifact)) { + clear(); + } + try { + getOptions().setArtifact(artifact); + getOptions().setLayout(getOptions().getLayout(SkyWalkerOptions.RADIAL_DOWN_LAYOUT)); + if (artifact instanceof User) { + super.explore(artifact); + } else if (artifact instanceof ATSArtifact) { + super.explore(getTopArtifact((ATSArtifact) artifact)); + } else { + throw new OseeCoreException("Unexpected artifact subclass"); + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + clear(); + } + } + + public ATSArtifact getTopArtifact(ATSArtifact art) throws OseeCoreException { + ATSArtifact artifact = null; + if (art instanceof ActionArtifact) { + artifact = art; + } else if (art instanceof TeamWorkFlowArtifact) { + artifact = ((TeamWorkFlowArtifact) art).getParentActionArtifact(); + } else if (art instanceof TaskArtifact) { + Artifact parentArtifact = ((TaskArtifact) art).getParentSMA(); + if (parentArtifact instanceof TeamWorkFlowArtifact) { + artifact = ((TeamWorkFlowArtifact) parentArtifact).getParentActionArtifact(); + } else { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Unknown parent " + art.getHumanReadableId()); + } + } + return artifact; + } + + public boolean activeEditorIsActionEditor() { + IWorkbenchPage page = getSite().getWorkbenchWindow().getActivePage(); + if (page == null) { + return false; + } + IEditorPart editorPart = page.getActiveEditor(); + boolean result = editorPart != null && editorPart instanceof SMAEditor; + return result; + } + + public void processWindowActivated() { + if (!this.getSite().getPage().isPartVisible(this)) { + return; + } + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + if (page != null) { + IEditorPart editor = page.getActiveEditor(); + if (editor != null && editor instanceof SMAEditor) { + explore(((SMAEditor) editor).getSma()); + } + clear(); + } + } + + public void processWindowDeActivated(IWorkbenchPart part) { + processWindowActivated(); + } + + @Override + public void partActivated(IWorkbenchPart part) { + processWindowActivated(); + } + + @Override + public void partBroughtToTop(IWorkbenchPart part) { + processWindowActivated(); + } + + @Override + public void partClosed(IWorkbenchPart part) { + if (part.equals(this)) { + dispose(); + } else { + processWindowActivated(); + } + } + + @Override + public void partDeactivated(IWorkbenchPart part) { + processWindowActivated(); + } + + @Override + public void partOpened(IWorkbenchPart part) { + processWindowActivated(); + } + + @Override + public String getActionDescription() { + if (getOptions() != null && getOptions().getArtifact() != null && getOptions().getArtifact().isDeleted()) { + return String.format("Current Artifact - %s - %s", getOptions().getArtifact().getGuid(), + getOptions().getArtifact().getName()); + } + return ""; + } + + public void clear() { + System.out.println("clear viewer here"); + } + + @Override + public void handleFrameworkTransactionEvent(Sender sender, FrameworkTransactionData transData) throws OseeCoreException { + if (sender.isRemote()) { + return; + } + if (transData.branchId != AtsUtil.getAtsBranch().getId()) { + return; + } + if (getOptions().getArtifact() == null) { + return; + } + if (transData.isDeleted(getOptions().getArtifact())) { + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + clear(); + } + }); + } + if (transData.isChanged(getOptions().getArtifact()) || transData.isRelAddedChangedDeleted(getOptions().getArtifact())) { + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + explore(getOptions().getArtifact()); + } + }); + } + } + + @Override + public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) { + processWindowActivated(); + } + + @Override + public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, String changeId) { + processWindowActivated(); + } + + @Override + public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, IWorkbenchPartReference partRef, String changeId) { + processWindowActivated(); + } + + @Override + public List<? extends IEventFilter> getEventFilters() { + return AtsUtil.getAtsObjectEventFilters(); + } + + @Override + public void handleArtifactEvent(ArtifactEvent artifactEvent, Sender sender) { + if (sender.isRemote()) { + return; + } + if (getOptions().getArtifact() == null) { + return; + } + if (artifactEvent.isDeletedPurged(getOptions().getArtifact())) { + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + clear(); + } + }); + } + if (artifactEvent.isModifiedReloaded(getOptions().getArtifact()) || + // + artifactEvent.isRelAddedChangedDeleted(getOptions().getArtifact())) { + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + explore(getOptions().getArtifact()); + } + }); + } + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/ArtifactHyperView.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/ArtifactHyperView.java index 998e245f009..90bd8d79c22 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/ArtifactHyperView.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/ArtifactHyperView.java @@ -1,391 +1,391 @@ -/*******************************************************************************
- * 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.hyper;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.logging.Level;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.ats.actions.wizard.ArtifactSelectWizard;
-import org.eclipse.osee.ats.editor.SMAEditor;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.plugin.core.IActionable;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
-import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
-import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData;
-import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener;
-import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
-import org.eclipse.osee.framework.skynet.core.event.Sender;
-import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent;
-import org.eclipse.osee.framework.skynet.core.event2.artifact.IArtifactEventListener;
-import org.eclipse.osee.framework.skynet.core.event2.filter.IEventFilter;
-import org.eclipse.osee.framework.skynet.core.relation.RelationLink;
-import org.eclipse.osee.framework.ui.plugin.OseeUiActions;
-import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
-import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite;
-import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
-import org.eclipse.osee.framework.ui.swt.Displays;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.IActionBars;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IPerspectiveDescriptor;
-import org.eclipse.ui.IPerspectiveListener2;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchPartReference;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * <REM2>
- *
- * @author Donald G. Dunne
- */
-public class ArtifactHyperView extends HyperView implements IArtifactEventListener, IFrameworkTransactionEventListener, IActionable, IPerspectiveListener2 {
-
- public static String VIEW_ID = "org.eclipse.osee.ats.hyper.ArtifactHyperView";
- public static ArtifactHyperItem topAHI;
- public static Artifact currentArtifact;
- private Action pinAction;
-
- public ArtifactHyperView() {
- super();
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().addPartListener(this);
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().addPerspectiveListener(this);
- HyperView.setNodeColor(whiteColor);
- HyperView.setCenterColor(whiteColor);
- defaultZoom.pcRadius += defaultZoom.pcRadiusFactor * 2;
- defaultZoom.uuRadius += defaultZoom.uuRadiusFactor * 2;
- defaultZoom.xSeparation += defaultZoom.xSeparationFactor;
- }
-
- public static ArtifactHyperView getArtifactHyperView() {
- IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
- try {
- return (ArtifactHyperView) page.showView(ArtifactHyperView.VIEW_ID);
- } catch (PartInitException e1) {
- MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Launch Error",
- "Couldn't Get OSEE Artifact Hyper View " + e1.getMessage());
- }
- return null;
- }
-
- public static void openArtifact(Artifact artifact) {
- getArtifactHyperView().load(artifact);
- }
-
- @Override
- public void createPartControl(Composite top) {
- if (!DbConnectionExceptionComposite.dbConnectionIsOk(top)) {
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().removePartListener(this);
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().removePerspectiveListener(this);
- return;
- }
- super.createPartControl(top);
- OseeUiActions.addBugToViewToolbar(this, this, AtsPlugin.getInstance(), VIEW_ID, "ATS Action View");
- OseeEventManager.addListener(this);
- }
-
- @Override
- public void handleItemDoubleClick(HyperViewItem hvi) {
- currentArtifact = ((ArtifactHyperItem) hvi).getArtifact();
- display();
- }
-
- private void load(Artifact artifact) {
- currentArtifact = artifact;
- display();
- }
-
- @Override
- public void display() {
- try {
- if (currentArtifact == null) {
- return;
- }
- topAHI = new ArtifactHyperItem(currentArtifact);
- // System.out.println("Artifact "+currentArtifact.getArtifactTypeNameShort());
- int x = 0;
- for (RelationLink link : currentArtifact.getRelationsAll(false)) {
-
- // Don't process link if onlyShowRel is populated and doesn't contain link name
- if (onlyShowRelations.size() > 0) {
- if (!onlyShowRelations.contains(link.getRelationType().getName())) {
- continue;
- }
- x++;
- if (x == 4) {
- x = 0;
- }
- }
-
- Artifact otherArt = link.getArtifactB();
- if (otherArt.equals(currentArtifact)) {
- otherArt = link.getArtifactA();
- }
- if (!otherArt.isDeleted()) {
- ArtifactHyperItem ahi = new ArtifactHyperItem(otherArt);
- String tip = link.getRelationType().getName();
- if (!link.getRationale().equals("")) {
- tip += "(" + link.getRationale() + ")";
- }
- ahi.setRelationToolTip(tip);
- String label = "";
- if (!link.getRationale().equals("")) {
- label += "(" + link.getRationale() + ")";
- }
- ahi.setRelationLabel(label);
- ahi.setLink(link);
- ahi.setRelationDirty(link.isDirty());
- switch (x) {
- case 0:
- topAHI.addBottom(ahi);
- break;
- case 1:
- topAHI.addLeft(ahi);
- break;
- case 2:
- topAHI.addTop(ahi);
- break;
- case 3:
- topAHI.addRight(ahi);
- break;
- default:
- break;
- }
- }
- x++;
- if (x == 4) {
- x = 0;
- }
- }
- create(topAHI);
- center();
- } catch (OseeCoreException ex) {
- clear();
- }
- }
-
- @Override
- protected void handleRefreshButton() {
- display();
- }
-
- @Override
- public void dispose() {
- OseeEventManager.removeListener(this);
- super.dispose();
- }
-
- public void handleWindowChange() {
- if (pinAction.isChecked()) {
- return;
- }
- if (!this.getSite().getPage().isPartVisible(this)) {
- return;
- }
- IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
- if (page != null) {
- IEditorPart editor = page.getActiveEditor();
- if (editor != null && editor instanceof SMAEditor) {
- currentArtifact = ((SMAEditor) editor).getSma();
- load(currentArtifact);
- }
- }
- }
-
- @Override
- public void partActivated(IWorkbenchPart part) {
- handleWindowChange();
- }
-
- @Override
- public void partBroughtToTop(IWorkbenchPart part) {
- handleWindowChange();
- }
-
- @Override
- public void partClosed(IWorkbenchPart part) {
- if (part.equals(this)) {
- dispose();
- } else {
- handleWindowChange();
- }
- }
-
- @Override
- public void partDeactivated(IWorkbenchPart part) {
- handleWindowChange();
- }
-
- @Override
- public void partOpened(IWorkbenchPart part) {
- handleWindowChange();
- }
-
- @Override
- protected void createActions() {
- super.createActions();
-
- Action openArtAction = new Action("Open Artifact") {
-
- @Override
- public void run() {
- handleOpenArtifact();
- }
- };
- openArtAction.setToolTipText("Open Artifact");
- openArtAction.setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.ART_VIEW));
-
- Action openByIdAction = new Action("Open by Id", IAction.AS_PUSH_BUTTON) {
-
- @Override
- public void run() {
- EntryDialog ed = new EntryDialog("Open by Id", "Enter HRID/Guid for Artifact");
- if (ed.open() != 0) {
- return;
- }
- String hridGuid = ed.getEntry().trim();
- try {
- Collection<Artifact> arts =
- ArtifactQuery.getArtifactListFromIds(Arrays.asList(hridGuid), BranchManager.getCommonBranch());
- if (arts.isEmpty()) {
- AWorkbench.popup("ERROR", "No Artifacts Found");
- return;
- }
- load(arts.iterator().next());
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- };
- openByIdAction.setToolTipText("Open by Id");
- openArtAction.setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.ART_VIEW));
-
- IActionBars bars = getViewSite().getActionBars();
- IToolBarManager tbm = bars.getToolBarManager();
- tbm.add(new Separator());
- tbm.add(openByIdAction);
- tbm.add(openArtAction);
- tbm.add(pinAction);
- }
-
- public void handleOpenArtifact() {
-
- ArtifactSelectWizard selWizard = new ArtifactSelectWizard();
- WizardDialog dialog =
- new WizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), selWizard);
- dialog.create();
- if (dialog.open() == 0) {
- load(selWizard.getSelectedArtifact());
- }
- }
-
- @Override
- public String getActionDescription() {
- if (currentArtifact != null && currentArtifact.isDeleted()) {
- return String.format("Current Artifact - %s - %s", currentArtifact.getGuid(), currentArtifact.getName());
- }
- return "";
- }
-
- @Override
- public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) {
- handleWindowChange();
- }
-
- @Override
- public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, String changeId) {
- handleWindowChange();
- }
-
- @Override
- public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, IWorkbenchPartReference partRef, String changeId) {
- handleWindowChange();
- }
-
- @Override
- public void handleFrameworkTransactionEvent(Sender sender, FrameworkTransactionData transData) throws OseeCoreException {
- if (sender.isRemote()) {
- return;
- }
- if (transData.branchId != AtsUtil.getAtsBranch().getId()) {
- return;
- }
- if (currentArtifact == null) {
- return;
- }
- if (transData.isDeleted(currentArtifact)) {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- clear();
- }
- });
- }
- if (transData.isRelAddedChangedDeleted(currentArtifact)) {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- display();
- }
- });
- }
- }
-
- @Override
- public List<? extends IEventFilter> getEventFilters() {
- return null;
- }
-
- @Override
- public void handleArtifactEvent(ArtifactEvent artifactEvent, Sender sender) {
- if (sender.isRemote()) {
- return;
- }
- if (currentArtifact == null) {
- return;
- }
- if (!artifactEvent.isForBranch(currentArtifact.getBranch())) {
- return;
- }
-
- if (artifactEvent.isDeletedPurged(currentArtifact)) {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- clear();
- }
- });
- }
- if (artifactEvent.isRelAddedChangedDeleted(currentArtifact)) {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- display();
- }
- });
- }
-
- }
-}
+/******************************************************************************* + * 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.hyper; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.logging.Level; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.wizard.WizardDialog; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.actions.wizard.ArtifactSelectWizard; +import org.eclipse.osee.ats.editor.SMAEditor; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.plugin.core.IActionable; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.BranchManager; +import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; +import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData; +import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener; +import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; +import org.eclipse.osee.framework.skynet.core.event.Sender; +import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent; +import org.eclipse.osee.framework.skynet.core.event2.artifact.IArtifactEventListener; +import org.eclipse.osee.framework.skynet.core.event2.filter.IEventFilter; +import org.eclipse.osee.framework.skynet.core.relation.RelationLink; +import org.eclipse.osee.framework.ui.plugin.OseeUiActions; +import org.eclipse.osee.framework.ui.plugin.util.AWorkbench; +import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite; +import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog; +import org.eclipse.osee.framework.ui.swt.Displays; +import org.eclipse.osee.framework.ui.swt.ImageManager; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IPerspectiveDescriptor; +import org.eclipse.ui.IPerspectiveListener2; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchPartReference; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.PlatformUI; + +/** + * <REM2> + * + * @author Donald G. Dunne + */ +public class ArtifactHyperView extends HyperView implements IArtifactEventListener, IFrameworkTransactionEventListener, IActionable, IPerspectiveListener2 { + + public static String VIEW_ID = "org.eclipse.osee.ats.hyper.ArtifactHyperView"; + public static ArtifactHyperItem topAHI; + public static Artifact currentArtifact; + private Action pinAction; + + public ArtifactHyperView() { + super(); + PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().addPartListener(this); + PlatformUI.getWorkbench().getActiveWorkbenchWindow().addPerspectiveListener(this); + HyperView.setNodeColor(whiteColor); + HyperView.setCenterColor(whiteColor); + defaultZoom.pcRadius += defaultZoom.pcRadiusFactor * 2; + defaultZoom.uuRadius += defaultZoom.uuRadiusFactor * 2; + defaultZoom.xSeparation += defaultZoom.xSeparationFactor; + } + + public static ArtifactHyperView getArtifactHyperView() { + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + try { + return (ArtifactHyperView) page.showView(ArtifactHyperView.VIEW_ID); + } catch (PartInitException e1) { + MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Launch Error", + "Couldn't Get OSEE Artifact Hyper View " + e1.getMessage()); + } + return null; + } + + public static void openArtifact(Artifact artifact) { + getArtifactHyperView().load(artifact); + } + + @Override + public void createPartControl(Composite top) { + if (!DbConnectionExceptionComposite.dbConnectionIsOk(top)) { + PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().removePartListener(this); + PlatformUI.getWorkbench().getActiveWorkbenchWindow().removePerspectiveListener(this); + return; + } + super.createPartControl(top); + OseeUiActions.addBugToViewToolbar(this, this, AtsPlugin.getInstance(), VIEW_ID, "ATS Action View"); + OseeEventManager.addListener(this); + } + + @Override + public void handleItemDoubleClick(HyperViewItem hvi) { + currentArtifact = ((ArtifactHyperItem) hvi).getArtifact(); + display(); + } + + private void load(Artifact artifact) { + currentArtifact = artifact; + display(); + } + + @Override + public void display() { + try { + if (currentArtifact == null) { + return; + } + topAHI = new ArtifactHyperItem(currentArtifact); + // System.out.println("Artifact "+currentArtifact.getArtifactTypeNameShort()); + int x = 0; + for (RelationLink link : currentArtifact.getRelationsAll(false)) { + + // Don't process link if onlyShowRel is populated and doesn't contain link name + if (onlyShowRelations.size() > 0) { + if (!onlyShowRelations.contains(link.getRelationType().getName())) { + continue; + } + x++; + if (x == 4) { + x = 0; + } + } + + Artifact otherArt = link.getArtifactB(); + if (otherArt.equals(currentArtifact)) { + otherArt = link.getArtifactA(); + } + if (!otherArt.isDeleted()) { + ArtifactHyperItem ahi = new ArtifactHyperItem(otherArt); + String tip = link.getRelationType().getName(); + if (!link.getRationale().equals("")) { + tip += "(" + link.getRationale() + ")"; + } + ahi.setRelationToolTip(tip); + String label = ""; + if (!link.getRationale().equals("")) { + label += "(" + link.getRationale() + ")"; + } + ahi.setRelationLabel(label); + ahi.setLink(link); + ahi.setRelationDirty(link.isDirty()); + switch (x) { + case 0: + topAHI.addBottom(ahi); + break; + case 1: + topAHI.addLeft(ahi); + break; + case 2: + topAHI.addTop(ahi); + break; + case 3: + topAHI.addRight(ahi); + break; + default: + break; + } + } + x++; + if (x == 4) { + x = 0; + } + } + create(topAHI); + center(); + } catch (OseeCoreException ex) { + clear(); + } + } + + @Override + protected void handleRefreshButton() { + display(); + } + + @Override + public void dispose() { + OseeEventManager.removeListener(this); + super.dispose(); + } + + public void handleWindowChange() { + if (pinAction.isChecked()) { + return; + } + if (!this.getSite().getPage().isPartVisible(this)) { + return; + } + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + if (page != null) { + IEditorPart editor = page.getActiveEditor(); + if (editor != null && editor instanceof SMAEditor) { + currentArtifact = ((SMAEditor) editor).getSma(); + load(currentArtifact); + } + } + } + + @Override + public void partActivated(IWorkbenchPart part) { + handleWindowChange(); + } + + @Override + public void partBroughtToTop(IWorkbenchPart part) { + handleWindowChange(); + } + + @Override + public void partClosed(IWorkbenchPart part) { + if (part.equals(this)) { + dispose(); + } else { + handleWindowChange(); + } + } + + @Override + public void partDeactivated(IWorkbenchPart part) { + handleWindowChange(); + } + + @Override + public void partOpened(IWorkbenchPart part) { + handleWindowChange(); + } + + @Override + protected void createActions() { + super.createActions(); + + Action openArtAction = new Action("Open Artifact") { + + @Override + public void run() { + handleOpenArtifact(); + } + }; + openArtAction.setToolTipText("Open Artifact"); + openArtAction.setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.ART_VIEW)); + + Action openByIdAction = new Action("Open by Id", IAction.AS_PUSH_BUTTON) { + + @Override + public void run() { + EntryDialog ed = new EntryDialog("Open by Id", "Enter HRID/Guid for Artifact"); + if (ed.open() != 0) { + return; + } + String hridGuid = ed.getEntry().trim(); + try { + Collection<Artifact> arts = + ArtifactQuery.getArtifactListFromIds(Arrays.asList(hridGuid), BranchManager.getCommonBranch()); + if (arts.isEmpty()) { + AWorkbench.popup("ERROR", "No Artifacts Found"); + return; + } + load(arts.iterator().next()); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + }; + openByIdAction.setToolTipText("Open by Id"); + openArtAction.setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.ART_VIEW)); + + IActionBars bars = getViewSite().getActionBars(); + IToolBarManager tbm = bars.getToolBarManager(); + tbm.add(new Separator()); + tbm.add(openByIdAction); + tbm.add(openArtAction); + tbm.add(pinAction); + } + + public void handleOpenArtifact() { + + ArtifactSelectWizard selWizard = new ArtifactSelectWizard(); + WizardDialog dialog = + new WizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), selWizard); + dialog.create(); + if (dialog.open() == 0) { + load(selWizard.getSelectedArtifact()); + } + } + + @Override + public String getActionDescription() { + if (currentArtifact != null && currentArtifact.isDeleted()) { + return String.format("Current Artifact - %s - %s", currentArtifact.getGuid(), currentArtifact.getName()); + } + return ""; + } + + @Override + public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) { + handleWindowChange(); + } + + @Override + public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, String changeId) { + handleWindowChange(); + } + + @Override + public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, IWorkbenchPartReference partRef, String changeId) { + handleWindowChange(); + } + + @Override + public void handleFrameworkTransactionEvent(Sender sender, FrameworkTransactionData transData) throws OseeCoreException { + if (sender.isRemote()) { + return; + } + if (transData.branchId != AtsUtil.getAtsBranch().getId()) { + return; + } + if (currentArtifact == null) { + return; + } + if (transData.isDeleted(currentArtifact)) { + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + clear(); + } + }); + } + if (transData.isRelAddedChangedDeleted(currentArtifact)) { + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + display(); + } + }); + } + } + + @Override + public List<? extends IEventFilter> getEventFilters() { + return null; + } + + @Override + public void handleArtifactEvent(ArtifactEvent artifactEvent, Sender sender) { + if (sender.isRemote()) { + return; + } + if (currentArtifact == null) { + return; + } + if (!artifactEvent.isForBranch(currentArtifact.getBranch())) { + return; + } + + if (artifactEvent.isDeletedPurged(currentArtifact)) { + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + clear(); + } + }); + } + if (artifactEvent.isRelAddedChangedDeleted(currentArtifact)) { + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + display(); + } + }); + } + + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/HyperView.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/HyperView.java index fef072b7ce4..94bcaab3eb6 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/HyperView.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/HyperView.java @@ -1,1168 +1,1168 @@ -/*******************************************************************************
- * 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.hyper;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Vector;
-import java.util.logging.Level;
-import org.eclipse.draw2d.ChopboxAnchor;
-import org.eclipse.draw2d.ColorConstants;
-import org.eclipse.draw2d.ConnectionEndpointLocator;
-import org.eclipse.draw2d.Figure;
-import org.eclipse.draw2d.FigureCanvas;
-import org.eclipse.draw2d.Label;
-import org.eclipse.draw2d.LightweightSystem;
-import org.eclipse.draw2d.LineBorder;
-import org.eclipse.draw2d.MouseEvent;
-import org.eclipse.draw2d.MouseListener;
-import org.eclipse.draw2d.PolylineConnection;
-import org.eclipse.draw2d.ToolbarLayout;
-import org.eclipse.draw2d.XYLayout;
-import org.eclipse.draw2d.geometry.Dimension;
-import org.eclipse.draw2d.geometry.Point;
-import org.eclipse.draw2d.geometry.Rectangle;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.ats.AtsOpenOption;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.ats.editor.SMAEditor;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-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.ui.plugin.PluginUiImage;
-import org.eclipse.osee.framework.ui.skynet.OseeContributionItem;
-import org.eclipse.osee.framework.ui.skynet.render.PresentationType;
-import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
-import org.eclipse.osee.framework.ui.swt.Displays;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Cursor;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.ScrollBar;
-import org.eclipse.ui.IActionBars;
-import org.eclipse.ui.IPartListener;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.part.ViewPart;
-
-public class HyperView extends ViewPart implements IPartListener {
-
- private static final boolean debugOn = false;
- public static String VIEW_ID = "org.eclipse.osee.ats.hyper.HyperView";
- private LightweightSystem lws;
- private HyperViewItem centerSearchItem;
- private NodeFigure centerFigure;
- protected Composite composite;
- private Figure container; // main container Figure to hold others
- private XYLayout contentsLayout;
- private final Vector<PolylineConnection> connectors = new Vector<PolylineConnection>(); // PolylineConnection
- private final Vector<HyperViewItem> backList = new Vector<HyperViewItem>();
- // List of SearchItems visited
- private int backListIndex = 0; // Index we are on in backList
- private HyperViewItem homeSearchItem = null;
- // private static Canvas canvas;
- private FigureCanvas canvas;
- private final Cursor hCursor = null;
- private Menu popupMenu;
- private Menu connectPopupMenu;
- /* Full circle is (2*Math.PI) */
- private static final double quadrant = 2 * Math.PI / 4;
- /* Each quadrant is 90 degrees */
- private static final double oneEighthCircle = quadrant / 2; /* Start 45 degrees off 0 */
- private static final double bottomQuadrantStart = oneEighthCircle;
- private static final double topQuadrantStart = oneEighthCircle + 2 * quadrant;
- private static final double leftQuadrantStart = oneEighthCircle + quadrant;
- private static final double rightQuadrantStart = oneEighthCircle + 3 * quadrant;
- // private ChopboxAnchor sourceAnchor = null;
- private boolean dragCenter = false;
- protected static Color nodeColor = new Color(null, 255, 255, 206);
- protected static Color centerColor = new Color(null, 106, 219, 255);
- protected static final Color cyanColor = ColorConstants.cyan;
- protected static final Color blackColor = ColorConstants.black;
- protected static final Color whiteColor = ColorConstants.white;
- private ScrollBar vsb;
- private ScrollBar hsb;
- private Action titleAction, backAction, forwardAction;
- private Zoom zoom;
- protected Zoom defaultZoom = new Zoom();
- private int verticalSelection = 40;
- protected ArrayList<String> onlyShowRelations = new ArrayList<String>();
-
- public static class Zoom {
-
- int pcRadius = 50;
- int pcRadiusFactor = 5;
- int uuRadius = 60;
- int uuRadiusFactor = 20;
- int uuRadiusSeparation = 13; // left/right
- int pcRadiusSeparation = 13; // top/bottom
- int xSeparation = 27;
- int xSeparationFactor = 20;
- int ySeparation = 5;
- Point dragCenter = null;
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("xR:" + pcRadius);
- builder.append("yR:" + uuRadius);
- builder.append(" xRF:" + pcRadiusFactor);
- builder.append(" yRF:" + uuRadiusFactor);
- builder.append(" pcRS: " + pcRadiusSeparation);
- builder.append(" uuRS: " + uuRadiusSeparation);
- builder.append(" xS: " + xSeparation);
- builder.append(" yS: " + ySeparation);
- return builder.toString();
- }
- }
-
- enum RelationEnum {
- TOP,
- BOTTOM,
- BOTTOM2,
- LEFT,
- RIGHT
- };
-
- public boolean provideBackForwardActions() {
- return true;
- }
-
- public static class NodeFigure extends Figure {
-
- HyperViewItem hvi = null;
-
- public HyperViewItem getSearchItem() {
- return hvi;
- }
-
- public NodeFigure(Label name, Label infoLabel, HyperViewItem hvi, boolean center) {
- ToolbarLayout layout = new ToolbarLayout();
- layout.setVertical(false);
- setLayoutManager(layout);
- if (hvi.isCurrent()) {
- setBorder(new LineBorder(cyanColor, 3));
- } else {
- setBorder(new LineBorder(blackColor, 1));
- }
- if (center) {
- setBackgroundColor(centerColor);
- } else {
- setBackgroundColor(nodeColor);
- }
- setOpaque(true);
- this.hvi = hvi;
- if (name != null) {
- add(name);
- }
- if (infoLabel != null) {
- add(infoLabel);
- }
- }
-
- public HyperViewItem getHvi() {
- return hvi;
- }
-
- }
-
- public HyperView() {
- zoom = defaultZoom;
- }
-
- public void create(HyperViewItem hvi) {
- clear();
- gridLoad(hvi);
- }
-
- private void gridLoad(HyperViewItem hvi) {
- if (HyperView.debugOn) {
- System.out.println("gridLoad");
- }
- /*
- * If grid already loaded and it was a collection, remove old home and all links associated with it.
- */
- if (homeSearchItem != null) {
- for (HyperViewItem hyperItem : homeSearchItem.getBottom()) {
- hyperItem.removeTop(homeSearchItem);
- }
- }
- homeSearchItem = hvi;
- centerSearchItem = hvi;
- backListAddSearchItem(homeSearchItem);
- jumpTo(homeSearchItem);
- }
-
- /**
- * This is a callback that will allow us to create the viewer and initialize it.
- */
- @Override
- public void createPartControl(Composite parent) {
- if (HyperView.debugOn) {
- System.out.println("createPartControl");
- }
- OseeContributionItem.addTo(this, true);
-
- canvas = new FigureCanvas(parent);
- canvas.setScrollBarVisibility(FigureCanvas.ALWAYS);
- vsb = canvas.getVerticalBar();
- vsb.setIncrement(1);
- vsb.setSelection(verticalSelection);
- vsb.addListener(SWT.Selection, new Listener() {
-
- @Override
- public void handleEvent(Event event) {
- refresh();
- // System.out.println("vScroll " + event);
- // int v = canvas.getVerticalBar().getSelection();
- // System.out.println("v *" + v + "*");
- }
- });
- hsb = canvas.getHorizontalBar();
- hsb.setIncrement(1);
- hsb.setSelection(40);
- hsb.addListener(SWT.Selection, new Listener() {
-
- @Override
- public void handleEvent(Event event) {
- refresh();
- // System.out.println("hScroll " + event);
- // int h = canvas.getVerticalBar().getSelection();
- // System.out.println("h *" + h + "*");
- }
- });
- // canvas = new Canvas(top, SWT.NONE);
- composite = parent;
- canvas.setBackground(composite.getDisplay().getSystemColor(SWT.COLOR_WHITE));
- lws = new LightweightSystem(canvas);
- container = new Figure();
- setContainerMouseListener(container);
- setMouseListener(container);
- contentsLayout = new XYLayout();
- container.setLayoutManager(contentsLayout);
- lws.setContents(container);
- // canvas.addPaintListener(new PaintListener() {
- //
- // public void paintControl(PaintEvent e) {
- // if (centerSearchItem == null || centerSearchItem.getArtifact() == null
- // || centerSearchItem.getArtifact().isDeleted())
- // return;
- // // refresh();
- // }
- // });
- canvas.layout();
- composite.layout();
- createActions();
-
- }
-
- private void printBackList(String inStr) {
- final boolean debug = false;
- if (debug) {
- StringBuilder builder = new StringBuilder();
- builder.append(inStr + "backList : [");
- for (int i = 0; i < backList.size(); i++) {
- builder.append(i + " ");
- }
- builder.append("] index: " + backListIndex);
- System.err.println(builder.toString());
- }
- }
-
- private void backListClearToIndex() {
- printBackList("pre backListClearToIndex");
- // Remove any extra items after where we are in backList
- for (int i = backListIndex + 1; i < backList.size(); i++) {
- backList.remove(i);
- }
- printBackList("post backListClearToIndex");
- }
-
- private void backListAddSearchItem(HyperViewItem hvi) {
- // If we are adding, then any items past backListIndex are
- // invalid and should be removed
- printBackList("pre backListAddSearchItem");
- backListClearToIndex();
- if (backList.size() > 0) {
- if (backList.get(backList.size() - 1).equals(hvi)) {
- // System.out.println("same as last; skip");
- return;
- }
- }
- backList.add(hvi);
- backListIndex = backList.size() - 1;
- printBackList("post backListAddSearchItem");
- }
-
- // private void backListClear() {
- // backList.clear();
- // backListIndex = 0;
- // }
-
- public void refresh() {
- gridDrawCenterItem();
- }
-
- protected void clear() {
- if (HyperView.debugOn) {
- System.out.println("gridClear");
- }
- if (connectors != null) {
- for (int i = 0; i < connectors.size(); i++) {
- connectors.get(i).erase();
- }
- connectors.clear();
- }
- if (container != null) {
- container.removeAll();
- }
- }
-
- private void gridDrawCenterItem() {
- clear();
- Rectangle grid = container.getClientArea();
- // System.out.println("grid w: " + grid.width + " h:" + grid.height);
- gridDraw(centerSearchItem, new Point(grid.width / 2, grid.height / 2));
- }
-
- private void gridDraw(HyperViewItem hvi, Point center) {
- if (HyperView.debugOn) {
- System.out.println("zoom *" + zoom + "*");
- }
- // Draw center node
- if (hvi != null) {
- if (HyperView.debugOn) {
- System.out.println("center x: " + center.x + " y:" + center.y);
- }
- if (HyperView.debugOn) {
- System.out.println("centerFigure *" + hvi.getTitle() + "*");
- }
- Point useCenter;
- if (zoom.dragCenter != null) {
- useCenter = zoom.dragCenter.getCopy();
- } else {
- useCenter = center.getCopy();
- }
- // Offset by scroll
- if (vsb != null) {
- useCenter.y -= (vsb.getSelection() - 40) * 10;
- }
- if (hsb != null) {
- useCenter.x -= (hsb.getSelection() - 40) * 10;
- }
- // System.out.println("zoom.dragCenter *" + zoom.dragCenter + "*");
- // System.out.println("center *" + center + "*");
- // System.out.println("vsb.getSelection() *" + vsb.getSelection() +
- // "*");
- // System.out.println("hsb.getSelection() *" + hsb.getSelection() +
- // "*");
- Point nwPoint;
- Point cPoint;
- centerFigure = createFigure(centerSearchItem, true);
- Dimension dim = centerFigure.getPreferredSize();
- if (HyperView.debugOn) {
- System.out.println("dim center w: " + dim.width + " h:" + dim.height);
- }
- nwPoint = new Point((useCenter.x - dim.width / 2), (useCenter.y - dim.height / 2));
- cPoint = new Point((nwPoint.x + dim.width / 2), (nwPoint.y + dim.height / 2));
- if (HyperView.debugOn) {
- System.out.println("nwPoint *" + nwPoint + "*");
- }
- if (HyperView.debugOn) {
- System.out.println("cPoint *" + cPoint + "*");
- }
- contentsLayout.setConstraint(centerFigure, new Rectangle(nwPoint.x, nwPoint.y, -1, -1));
- // centerFigure.repaint();
- ChopboxAnchor sourceAnchor = new ChopboxAnchor(centerFigure);
- setMouseListener(centerFigure);
- // debug only
- // drawQuadrant(topQuadrantStart, quadrant);
- // drawQuadrant(bottomQuadrantStart, quadrant);
- // drawQuadrant(leftQuadrantStart, quadrant);
- // drawQuadrant(rightQuadrantStart, quadrant);
- /*
- * Bottomren draw from right to left Tops draw from left to right Left draws from low to high Usedby draws from
- * high to low
- */
- // Draw other nodes
- drawNodes(RelationEnum.TOP, hvi.getTop(), cPoint, sourceAnchor);
- drawNodes(RelationEnum.BOTTOM, hvi.getBottom(), cPoint, sourceAnchor);
- drawNodes(RelationEnum.LEFT, hvi.getLeft(), cPoint, sourceAnchor);
- drawNodes(RelationEnum.RIGHT, hvi.getRight(), cPoint, sourceAnchor);
- }
- container.repaint();
- canvas.layout();
- composite.layout();
- }
-
- /**
- * Draw figures around center offsetPoint #param relType - relation
- *
- * @param hvis - HyperViewItems to show.
- * @param offsetPoint - x,y to offset figures
- */
- private void drawNodes(RelationEnum relType, ArrayList<HyperViewItem> hvis, Point offsetPoint, ChopboxAnchor sourceAnchor) {
- if (HyperView.debugOn) {
- System.out.println("drawNodes");
- }
- if (hvis.isEmpty()) {
- return;
- }
- final boolean isRight = relType == RelationEnum.RIGHT;
- final boolean isLeft = relType == RelationEnum.LEFT;
- final boolean isBottom = relType == RelationEnum.BOTTOM;
- final boolean isTop = relType == RelationEnum.TOP;
- if (HyperView.debugOn) {
- System.out.println("offsetPoint *" + offsetPoint + "*");
- }
- double startDegree = 0;
- if (isRight) {
- startDegree = HyperView.rightQuadrantStart;
- } else if (isLeft) {
- startDegree = HyperView.leftQuadrantStart;
- } else if (isTop) {
- startDegree = HyperView.topQuadrantStart;
- } else if (isBottom) {
- startDegree = HyperView.bottomQuadrantStart;
- }
- double degree = 0;
- Point cPoint = new Point(); // center of figure
- Point nwPoint = new Point();
- ArrayList<HyperViewItem> orderedHvis = new ArrayList<HyperViewItem>();
-
- // if bottomren, reverse order of figures
- if (isBottom) {
- for (int i = hvis.size() - 1; i >= 0; i--) {
- HyperViewItem hvi = hvis.get(i);
- if (hvi.isShow()) {
- orderedHvis.add(hvis.get(i));
- }
- }
- } else {
- for (HyperViewItem hvi : hvis) {
- if (hvi.isShow()) {
- orderedHvis.add(hvi);
- }
- }
- }
- final double degreeDiff = quadrant / (orderedHvis.size() + 1);
- if (HyperView.debugOn) {
- System.out.println("quadrant *" + quadrant + "*");
- }
- if (HyperView.debugOn) {
- System.out.println("orderedHvis size *" + orderedHvis.size() + "*");
- }
- if (HyperView.debugOn) {
- System.out.println("degreeDiff *" + degreeDiff + "*");
- }
-
- // what is sent into constraint as the nw corner
- int myRadius;
- if (isBottom || isTop) {
- myRadius = zoom.pcRadius;
- } else {
- myRadius = zoom.uuRadius;
- }
- for (int i = 0; i < orderedHvis.size(); i++) {
- HyperViewItem hvi = orderedHvis.get(i);
- if (HyperView.debugOn) {
- System.out.println("\n");
- }
- if (HyperView.debugOn) {
- System.out.println("HIV " + hvi.getShortTitle());
- }
- degree = startDegree + degreeDiff + degreeDiff * i;
- if (HyperView.debugOn) {
- System.out.println("startDegree *" + startDegree + "*");
- }
- if (HyperView.debugOn) {
- System.out.println("degree *" + degree + "*");
- }
- NodeFigure figure = createFigure(hvi, false);
- cPoint.x = offsetPoint.x + (int) Math.round((myRadius * Math.cos(degree)));
- cPoint.y = offsetPoint.y + (int) Math.round((myRadius * Math.sin(degree)));
- if (HyperView.debugOn) {
- drawX(offsetPoint.x, offsetPoint.y - 5, "o");
- }
- if (HyperView.debugOn) {
- drawX(cPoint.x, cPoint.y - 5, "c");
- }
- Dimension dim = figure.getPreferredSize();
- if (HyperView.debugOn) {
- System.out.println("dim " + relType + " w: " + dim.width + " h:" + dim.height);
- }
- if (isLeft) {
- nwPoint.x = cPoint.x - dim.width;
- nwPoint.y = cPoint.y - dim.height / 2;
- } else if (isRight) {
- nwPoint.x = cPoint.x;
- nwPoint.y = cPoint.y - dim.height / 2;
- } else if (isBottom) {
- nwPoint.x = cPoint.x - dim.width / 2;
- nwPoint.y = cPoint.y;
- } else if (isTop) {
- nwPoint.x = cPoint.x - dim.width / 2;
- nwPoint.y = cPoint.y - dim.height;
- }
- if (orderedHvis.size() > 1 && (isTop || isBottom)) {
- if (i < orderedHvis.size() / 2) {
- myRadius += zoom.pcRadiusSeparation;
- if (isBottom) {
- nwPoint.x += zoom.xSeparation;
- }
- if (isTop) {
- nwPoint.x -= zoom.xSeparation;
- }
- } else if (i > orderedHvis.size() / 2) {
- myRadius -= zoom.pcRadiusSeparation;
- if (isBottom) {
- nwPoint.x -= zoom.xSeparation;
- }
- if (isTop) {
- nwPoint.x += zoom.xSeparation;
- }
- }
- }
- if (orderedHvis.size() > 1 && (isLeft || isRight)) {
- // int half = orderedFigures.size() / 2;
- if (i < orderedHvis.size() / 2) {
- myRadius += zoom.uuRadiusSeparation;
- } else {
- myRadius -= zoom.uuRadiusSeparation;
- }
- }
- contentsLayout.setConstraint(figure, new Rectangle(nwPoint.x, nwPoint.y, -1, -1));
- setMouseListener(figure);
- /* Draw line to left */
- ChopboxAnchor targetAnchor = new ChopboxAnchor(figure);
- drawLine(sourceAnchor, targetAnchor, figure.getHvi());
- // .getRelationToolTip(),
- // ((NodeFigure) figure).getHvi().getRelationLabel(), ((NodeFigure)
- // figure).getHvi().getRelationDirty());
-
- if (HyperView.debugOn) {
- System.out.println("cPoint *" + cPoint + "*");
- }
- if (HyperView.debugOn) {
- System.out.println("nwPoint *" + nwPoint + "*");
- }
- if (HyperView.debugOn) {
- System.out.println("offsetPoint *" + offsetPoint + "*");
- }
- ChopboxAnchor thisAnchor = new ChopboxAnchor(figure);
- if (hvi.getTop().size() > 0) {
- drawNodes(RelationEnum.TOP, hvi.getTop(), cPoint, thisAnchor);
- }
- if (hvi.getBottom().size() > 0) {
- drawNodes(RelationEnum.BOTTOM, hvi.getBottom(), new Point((nwPoint.x + dim.width / 2),
- (nwPoint.y + dim.height / 2)), thisAnchor);
- }
- if (hvi.getLeft().size() > 0) {
- drawNodes(RelationEnum.LEFT, hvi.getLeft(), cPoint, thisAnchor);
- }
- if (hvi.getRight().size() > 0) {
- drawNodes(RelationEnum.RIGHT, hvi.getRight(), cPoint, thisAnchor);
- }
- }
- }
-
- /*
- * Used for debug only drawQuadrant(leftQuadrantStart,quadrant);
- */
- // @SuppressWarnings("unused")
- // private void drawQuadrant(double start, double degrees) {
- // int cx = 100, cy = 100, r = 100;
- // int x, y;
- // double a;
- // for (a = start; a < start + degrees; a += 0.01) {
- // x = (int) Math.round(r * Math.cos(a)) + cx;
- // y = (int) Math.round(r * Math.sin(a)) + cy;
- // drawX(x, y, "x");
- // }
- // double degreeDiff = degrees / 4;
- // for (int t = 0; t < 3; t += 1) {
- // x = (int) Math.round(r * Math.cos(start + degreeDiff + (t * degreeDiff))) + cx;
- // y = (int) Math.round(r * Math.sin(start + degreeDiff + (t * degreeDiff))) + cy;
- // drawX(x, y + 20, "x");
- // }
- // }
- private void drawX(int x, int y, String str) {
- Label label = new Label(str, null);
- Figure figure = new NodeFigure(label, null, new HyperViewItem(""), false);
- container.add(figure);
- contentsLayout.setConstraint(figure, new Rectangle(x, y, -1, -1));
- }
-
- private void drawLine(ChopboxAnchor source, ChopboxAnchor target, HyperViewItem hvi) {
- PolylineConnection c = new PolylineConnection();
- c.setLineWidth(2);
- if (hvi.isRelationDirty()) {
- c.setForegroundColor(Displays.getSystemColor(SWT.COLOR_BLUE));
- }
- c.setSourceAnchor(source);
- c.setTargetAnchor(target);
- setConnectionMouseListener(c, hvi);
- // Add tooltip
- if (Strings.isValid(hvi.getRelationToolTip())) {
- c.setToolTip(new Label(hvi.getRelationToolTip()));
- // Add label
- }
-
- ConnectionEndpointLocator targetEndpointLocator = new ConnectionEndpointLocator(c, true);
- targetEndpointLocator.setVDistance(1);
- Label targetMultiplicityLabel = new Label(hvi.getRelationLabel());
- c.add(targetMultiplicityLabel, targetEndpointLocator);
-
- connectors.add(c);
- container.add(c);
- }
-
- protected void display() {
- // provided for subclass implementation
- }
-
- private void createConnectionMenuBar(final HyperViewItem hvi) {
- if (AtsUtil.isAtsAdmin()) {
- if (connectPopupMenu == null || !connectPopupMenu.isVisible()) {
- // final PolylineConnection c = connection;
- connectPopupMenu = new Menu(canvas.getShell(), SWT.POP_UP);
- MenuItem editItem = new MenuItem(connectPopupMenu, SWT.CASCADE);
- editItem.setText("Delete Link");
- editItem.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- try {
- if (MessageDialog.openQuestion(Displays.getActiveShell(), "Delete Link",
- "Delete Link\n\n" + hvi.getLink().toString() + "\n\nAre you sure?")) {
- Artifact artA = hvi.getLink().getArtifactA();
- hvi.getLink().delete(true);
- artA.persist();
- connectPopupMenu.dispose();
- connectPopupMenu = null;
- display();
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- });
- connectPopupMenu.setVisible(true);
- }
- }
- }
-
- private void setConnectionMouseListener(PolylineConnection c, final HyperViewItem hvi) {
- MouseListener mouseListener = new MouseListener() {
-
- @Override
- public void mouseDoubleClicked(MouseEvent e) {
- if (HyperView.debugOn) {
- System.out.println("DoubleClick");
- }
- }
-
- @Override
- public void mousePressed(MouseEvent e) {
- if (HyperView.debugOn) {
- System.out.println("mousePressed");
- }
- }
-
- @Override
- public void mouseReleased(MouseEvent e) {
- if (HyperView.debugOn) {
- System.out.println("mouseReleased");
- }
- if (e.button == 3) {
- if (e.getSource() instanceof PolylineConnection) {
- // PolylineConnection c = (PolylineConnection) e.getSource();
- createConnectionMenuBar(hvi);
- }
- return;
- }
- }
- };
- c.addMouseListener(mouseListener);
- }
-
- private NodeFigure createFigure(HyperViewItem hvi, boolean center) {
- Label infoLabel = null;
- String title = hvi.getShortTitle();
- if (!titleAction.isChecked()) {
- if (title.length() > 30) {
- title = title.substring(0, 30);
- }
- }
- Label nameLabel = null;
- try {
- nameLabel = new Label(title, hvi.getImage());
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- nameLabel = new Label(title, null);
- }
- Image markImage = hvi.getMarkImage();
- if (markImage != null) {
- infoLabel = new Label(null, markImage);
- }
-
- NodeFigure figure = new NodeFigure(nameLabel, infoLabel, hvi, center);
- // System.out.println(title + " " + figure.hashCode());
- container.add(figure);
- figure.setToolTip(new Label(hvi.getToolTip()));
- return figure;
- }
-
- private void setContainerMouseListener(Figure figure) {
- MouseListener mouseListener = new MouseListener() {
-
- @Override
- public void mouseDoubleClicked(MouseEvent e) {
- // do nothing
- }
-
- @Override
- public void mousePressed(MouseEvent e) {
- // do nothing
- }
-
- @Override
- public void mouseReleased(MouseEvent e) {
- if (e.button == 1) {
- if (dragCenter) {
- if (zoom.dragCenter == null) {
- zoom.dragCenter = new Point();
- }
- zoom.dragCenter.x = e.x;
- zoom.dragCenter.y = e.y;
- refresh();
- dragCenter = false;
- if (hCursor != null) {
- container.setCursor(null);
- centerFigure.setCursor(null);
- hCursor.dispose();
- }
- }
- }
- }
- };
- figure.addMouseListener(mouseListener);
- }
-
- private void setMouseListener(Figure figure) {
- MouseListener mouseListener = new MouseListener() {
-
- @Override
- public void mouseDoubleClicked(MouseEvent e) {
- if (e.button == 1 && e.getSource() instanceof NodeFigure) {
- NodeFigure nf = (NodeFigure) e.getSource();
- HyperViewItem si = nf.getSearchItem();
- handleItemDoubleClick(si);
- }
- }
-
- @Override
- public void mousePressed(MouseEvent e) {
- // do nothing
- }
-
- @Override
- public void mouseReleased(MouseEvent e) {
- // System.out.println("mouseReleased");
- if (hCursor != null) {
- container.setCursor(null);
- centerFigure.setCursor(null);
- hCursor.dispose();
- }
- if (e.getSource() instanceof NodeFigure) {
- NodeFigure nf = (NodeFigure) e.getSource();
- HyperViewItem si = nf.getSearchItem();
- if (HyperView.debugOn) {
- System.out.println("Click: " + si.getTitle());
- }
- if (e.button == 3) {
- createMenuBar(si);
- }
- }
- }
- };
- figure.addMouseListener(mouseListener);
- }
-
- public void handleItemDoubleClick(HyperViewItem hvi) {
- backListAddSearchItem(hvi);
- jumpTo(hvi);
- }
-
- public static void openActionEditor(Artifact artifact) {
- if (artifact instanceof StateMachineArtifact) {
- AtsUtil.openATSAction(artifact, AtsOpenOption.OpenOneOrPopupSelect);
- }
- }
-
- private void createMenuBar(HyperViewItem hvi) {
- if (popupMenu == null || !popupMenu.isVisible()) {
- final HyperViewItem fHvi = hvi;
- popupMenu = new Menu(canvas.getShell(), SWT.POP_UP);
-
- if (AtsUtil.isAtsAdmin()) {
- MenuItem editItem = new MenuItem(popupMenu, SWT.CASCADE);
- editItem.setText("Open in Artifact Editor");
- editItem.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- Artifact a = null;
- if (fHvi instanceof ArtifactHyperItem) {
- a = ((ArtifactHyperItem) fHvi).getArtifact();
- } else if (fHvi instanceof ActionHyperItem) {
- a = ((ActionHyperItem) fHvi).getArtifact();
- }
- if (a != null) {
- try {
- RendererManager.open(a, PresentationType.GENERALIZED_EDIT);
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
- popupMenu.dispose();
- popupMenu = null;
- }
- });
- MenuItem deleteItem = new MenuItem(popupMenu, SWT.CASCADE);
- deleteItem.setText("Delete Artifact");
- deleteItem.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- Artifact art = null;
- if (fHvi instanceof ArtifactHyperItem) {
- art = ((ArtifactHyperItem) fHvi).getArtifact();
- } else {
- art = ((ActionHyperItem) fHvi).getArtifact();
- }
- String dialogTitle = "Confirm Artifact Deletion?";
- StringBuilder dialogText = new StringBuilder();
- dialogText.append("\"" + art.getName() + "\"\nguid: " + art.getGuid());
- dialogText.append("\n\n Are you sure you want to delete this artifact and its default-hierarchy children?");
- if (MessageDialog.openQuestion(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
- dialogTitle, dialogText.toString())) {
- if (art instanceof StateMachineArtifact) {
- SMAEditor.close(Collections.singleton((StateMachineArtifact) art), false);
- }
- try {
- art.deleteAndPersist();
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
- popupMenu.dispose();
- popupMenu = null;
- }
- });
- }
-
- MenuItem previewItem = new MenuItem(popupMenu, SWT.CASCADE);
- previewItem.setText("Open in ATS");
- previewItem.setEnabled(fHvi instanceof ArtifactHyperItem && ((ArtifactHyperItem) fHvi).getArtifact() instanceof StateMachineArtifact || fHvi instanceof ActionHyperItem && ((ActionHyperItem) fHvi).getArtifact() instanceof StateMachineArtifact);
- previewItem.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- Artifact a = null;
- if (fHvi instanceof ArtifactHyperItem) {
- a = ((ArtifactHyperItem) fHvi).getArtifact();
- } else if (fHvi instanceof ActionHyperItem) {
- a = ((ActionHyperItem) fHvi).getArtifact();
- }
- if (a != null) {
- openActionEditor(a);
- }
- }
- });
- popupMenu.setVisible(true);
- }
- }
-
- public void jumpTo(HyperViewItem si) {
- if (homeSearchItem == null) {
- return;
- }
- centerSearchItem = si;
- refresh();
- }
-
- protected void center() {
- zoom = defaultZoom;
- vsb.setSelection(verticalSelection);
- hsb.setSelection(40);
- refresh();
- }
-
- protected void createActions() {
-
- // Reset Action
- Action centerAction = new Action() {
-
- @Override
- public void run() {
- center();
- }
- };
- centerAction.setText("Center");
- centerAction.setToolTipText("Center");
- centerAction.setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.CENTER));
-
- if (provideBackForwardActions()) {
- // Back Action
- backAction = new Action() {
-
- @Override
- public void run() {
- printBackList("pre backSelected");
- if (backList.isEmpty()) {
- return;
- }
- if (backListIndex > 0) {
- backListIndex--;
- }
- jumpTo(backList.get(backListIndex));
- printBackList("post backSelected");
- }
- };
-
- backAction.setText("Back");
- backAction.setToolTipText("Back");
- backAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(
- ISharedImages.IMG_TOOL_BACK));
- // Forward Action
- forwardAction = new Action() {
-
- @Override
- public void run() {
- printBackList("pre forwardSelected");
- if (backList.size() - 1 > backListIndex) {
- backListIndex++;
- jumpTo(backList.get(backListIndex));
- }
- printBackList("post forwardSelected");
- }
- };
- forwardAction.setText("Forward");
- forwardAction.setToolTipText("Forward");
- forwardAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(
- ISharedImages.IMG_TOOL_FORWARD));
- }
- // // Home
- // Action homeAction = new Action() {
- //
- // public void run() {
- // if (homeSearchItem == null) {
- // return;
- // }
- // vsb.setSelection(verticalSelection);
- // hsb.setSelection(40);
- // backListAddSearchItem(homeSearchItem);
- // jumpTo(homeSearchItem);
- // }
- // };
- // homeAction.setText("Home");
- // homeAction.setToolTipText("Home");
- // homeAction.setImageDescriptor(AtsPlugin.getImageDescriptor("home.gif"));
- // Zoom in
- Action zoomInAction = new Action() {
-
- @Override
- public void run() {
- if (homeSearchItem == null) {
- return;
- }
- if (HyperView.debugOn) {
- System.out.println("zoomInAction");
- }
- zoom.pcRadius += zoom.pcRadiusFactor;
- zoom.uuRadius += zoom.uuRadiusFactor;
- zoom.xSeparation += zoom.xSeparationFactor;
- refresh();
-
- }
- };
- zoomInAction.setText("Zoom In");
- zoomInAction.setToolTipText("Zoom In");
- zoomInAction.setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.ZOOM_IN));
- // Zoom Out
- Action zoomOutAction = new Action() {
-
- @Override
- public void run() {
- if (homeSearchItem == null) {
- return;
- }
- if (HyperView.debugOn) {
- System.out.println("zoomOutAction");
- }
- if (zoom.pcRadius >= zoom.pcRadiusFactor) {
- zoom.pcRadius -= zoom.pcRadiusFactor;
- }
- if (zoom.uuRadius >= zoom.uuRadiusFactor) {
- zoom.uuRadius -= zoom.uuRadiusFactor;
- }
- if (zoom.xSeparation >= zoom.xSeparationFactor) {
- zoom.xSeparation -= zoom.xSeparationFactor;
- }
- refresh();
- }
- };
- zoomOutAction.setText("Zoom Out");
- zoomOutAction.setToolTipText("Zoom Out");
- zoomOutAction.setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.ZOOM_OUT));
-
- titleAction = new Action("Expand Titles", IAction.AS_CHECK_BOX) {
-
- @Override
- public void run() {
- if (HyperView.debugOn) {
- System.out.println("expandTitles");
- }
- refresh();
- }
- };
- titleAction.setToolTipText("Expand Titles");
-
- Action refreshAction = new Action("Refresh") {
-
- @Override
- public void run() {
- if (homeSearchItem == null) {
- MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
- "Refresh Error", "Viewer not loaded, nothing to refresh.");
- return;
- }
- handleRefreshButton();
- }
- };
- refreshAction.setToolTipText("Refresh");
- ImageManager.getImageDescriptor(PluginUiImage.REFRESH);
- refreshAction.setImageDescriptor(ImageManager.getImageDescriptor(PluginUiImage.REFRESH));
-
- IActionBars bars = getViewSite().getActionBars();
- IMenuManager mm = bars.getMenuManager();
- mm.add(new Separator());
- mm.add(titleAction);
-
- IToolBarManager tbm = bars.getToolBarManager();
- tbm.add(new Separator());
- // tbm.add(homeAction);
- tbm.add(centerAction);
- tbm.add(zoomInAction);
- tbm.add(zoomOutAction);
- if (provideBackForwardActions()) {
- tbm.add(backAction);
- tbm.add(forwardAction);
- }
- tbm.add(refreshAction);
-
- }
-
- protected void handleRefreshButton() {
- refresh();
- }
-
- /**
- * Passing the focus request to the viewer's control.
- */
- @Override
- public void setFocus() {
- // viewer.getControl().setFocus();
- }
-
- public Color getCenterColor() {
- return HyperView.centerColor;
- }
-
- public static void setCenterColor(Color color) {
- centerColor = color;
- }
-
- public Color getNodeColor() {
- return HyperView.nodeColor;
- }
-
- public static void setNodeColor(Color color) {
- nodeColor = color;
- }
-
- public int getVerticalSelection() {
- return verticalSelection;
- }
-
- public void setVerticalSelection(int verticalSelection) {
- this.verticalSelection = verticalSelection;
- if (vsb != null) {
- vsb.setSelection(verticalSelection);
- }
- }
-
- @Override
- public void dispose() {
- // do nothing
- }
-
- @Override
- public void partActivated(IWorkbenchPart part) {
- // do nothing
- }
-
- @Override
- public void partBroughtToTop(IWorkbenchPart part) {
- // do nothing
- }
-
- @Override
- public void partClosed(IWorkbenchPart part) {
- if (part.equals(this)) {
- dispose();
- }
- }
-
- @Override
- public void partDeactivated(IWorkbenchPart part) {
- // do nothing
- }
-
- @Override
- public void partOpened(IWorkbenchPart part) {
- // do nothing
- }
-
- public Figure getContainer() {
- return container;
- }
+/******************************************************************************* + * 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.hyper; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Vector; +import java.util.logging.Level; +import org.eclipse.draw2d.ChopboxAnchor; +import org.eclipse.draw2d.ColorConstants; +import org.eclipse.draw2d.ConnectionEndpointLocator; +import org.eclipse.draw2d.Figure; +import org.eclipse.draw2d.FigureCanvas; +import org.eclipse.draw2d.Label; +import org.eclipse.draw2d.LightweightSystem; +import org.eclipse.draw2d.LineBorder; +import org.eclipse.draw2d.MouseEvent; +import org.eclipse.draw2d.MouseListener; +import org.eclipse.draw2d.PolylineConnection; +import org.eclipse.draw2d.ToolbarLayout; +import org.eclipse.draw2d.XYLayout; +import org.eclipse.draw2d.geometry.Dimension; +import org.eclipse.draw2d.geometry.Point; +import org.eclipse.draw2d.geometry.Rectangle; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.AtsOpenOption; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.editor.SMAEditor; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.Strings; +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.ui.plugin.PluginUiImage; +import org.eclipse.osee.framework.ui.skynet.OseeContributionItem; +import org.eclipse.osee.framework.ui.skynet.render.PresentationType; +import org.eclipse.osee.framework.ui.skynet.render.RendererManager; +import org.eclipse.osee.framework.ui.swt.Displays; +import org.eclipse.osee.framework.ui.swt.ImageManager; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Cursor; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.MenuItem; +import org.eclipse.swt.widgets.ScrollBar; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.IPartListener; +import org.eclipse.ui.ISharedImages; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.part.ViewPart; + +public class HyperView extends ViewPart implements IPartListener { + + private static final boolean debugOn = false; + public static String VIEW_ID = "org.eclipse.osee.ats.hyper.HyperView"; + private LightweightSystem lws; + private HyperViewItem centerSearchItem; + private NodeFigure centerFigure; + protected Composite composite; + private Figure container; // main container Figure to hold others + private XYLayout contentsLayout; + private final Vector<PolylineConnection> connectors = new Vector<PolylineConnection>(); // PolylineConnection + private final Vector<HyperViewItem> backList = new Vector<HyperViewItem>(); + // List of SearchItems visited + private int backListIndex = 0; // Index we are on in backList + private HyperViewItem homeSearchItem = null; + // private static Canvas canvas; + private FigureCanvas canvas; + private final Cursor hCursor = null; + private Menu popupMenu; + private Menu connectPopupMenu; + /* Full circle is (2*Math.PI) */ + private static final double quadrant = 2 * Math.PI / 4; + /* Each quadrant is 90 degrees */ + private static final double oneEighthCircle = quadrant / 2; /* Start 45 degrees off 0 */ + private static final double bottomQuadrantStart = oneEighthCircle; + private static final double topQuadrantStart = oneEighthCircle + 2 * quadrant; + private static final double leftQuadrantStart = oneEighthCircle + quadrant; + private static final double rightQuadrantStart = oneEighthCircle + 3 * quadrant; + // private ChopboxAnchor sourceAnchor = null; + private boolean dragCenter = false; + protected static Color nodeColor = new Color(null, 255, 255, 206); + protected static Color centerColor = new Color(null, 106, 219, 255); + protected static final Color cyanColor = ColorConstants.cyan; + protected static final Color blackColor = ColorConstants.black; + protected static final Color whiteColor = ColorConstants.white; + private ScrollBar vsb; + private ScrollBar hsb; + private Action titleAction, backAction, forwardAction; + private Zoom zoom; + protected Zoom defaultZoom = new Zoom(); + private int verticalSelection = 40; + protected ArrayList<String> onlyShowRelations = new ArrayList<String>(); + + public static class Zoom { + + int pcRadius = 50; + int pcRadiusFactor = 5; + int uuRadius = 60; + int uuRadiusFactor = 20; + int uuRadiusSeparation = 13; // left/right + int pcRadiusSeparation = 13; // top/bottom + int xSeparation = 27; + int xSeparationFactor = 20; + int ySeparation = 5; + Point dragCenter = null; + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("xR:" + pcRadius); + builder.append("yR:" + uuRadius); + builder.append(" xRF:" + pcRadiusFactor); + builder.append(" yRF:" + uuRadiusFactor); + builder.append(" pcRS: " + pcRadiusSeparation); + builder.append(" uuRS: " + uuRadiusSeparation); + builder.append(" xS: " + xSeparation); + builder.append(" yS: " + ySeparation); + return builder.toString(); + } + } + + enum RelationEnum { + TOP, + BOTTOM, + BOTTOM2, + LEFT, + RIGHT + }; + + public boolean provideBackForwardActions() { + return true; + } + + public static class NodeFigure extends Figure { + + HyperViewItem hvi = null; + + public HyperViewItem getSearchItem() { + return hvi; + } + + public NodeFigure(Label name, Label infoLabel, HyperViewItem hvi, boolean center) { + ToolbarLayout layout = new ToolbarLayout(); + layout.setVertical(false); + setLayoutManager(layout); + if (hvi.isCurrent()) { + setBorder(new LineBorder(cyanColor, 3)); + } else { + setBorder(new LineBorder(blackColor, 1)); + } + if (center) { + setBackgroundColor(centerColor); + } else { + setBackgroundColor(nodeColor); + } + setOpaque(true); + this.hvi = hvi; + if (name != null) { + add(name); + } + if (infoLabel != null) { + add(infoLabel); + } + } + + public HyperViewItem getHvi() { + return hvi; + } + + } + + public HyperView() { + zoom = defaultZoom; + } + + public void create(HyperViewItem hvi) { + clear(); + gridLoad(hvi); + } + + private void gridLoad(HyperViewItem hvi) { + if (HyperView.debugOn) { + System.out.println("gridLoad"); + } + /* + * If grid already loaded and it was a collection, remove old home and all links associated with it. + */ + if (homeSearchItem != null) { + for (HyperViewItem hyperItem : homeSearchItem.getBottom()) { + hyperItem.removeTop(homeSearchItem); + } + } + homeSearchItem = hvi; + centerSearchItem = hvi; + backListAddSearchItem(homeSearchItem); + jumpTo(homeSearchItem); + } + + /** + * This is a callback that will allow us to create the viewer and initialize it. + */ + @Override + public void createPartControl(Composite parent) { + if (HyperView.debugOn) { + System.out.println("createPartControl"); + } + OseeContributionItem.addTo(this, true); + + canvas = new FigureCanvas(parent); + canvas.setScrollBarVisibility(FigureCanvas.ALWAYS); + vsb = canvas.getVerticalBar(); + vsb.setIncrement(1); + vsb.setSelection(verticalSelection); + vsb.addListener(SWT.Selection, new Listener() { + + @Override + public void handleEvent(Event event) { + refresh(); + // System.out.println("vScroll " + event); + // int v = canvas.getVerticalBar().getSelection(); + // System.out.println("v *" + v + "*"); + } + }); + hsb = canvas.getHorizontalBar(); + hsb.setIncrement(1); + hsb.setSelection(40); + hsb.addListener(SWT.Selection, new Listener() { + + @Override + public void handleEvent(Event event) { + refresh(); + // System.out.println("hScroll " + event); + // int h = canvas.getVerticalBar().getSelection(); + // System.out.println("h *" + h + "*"); + } + }); + // canvas = new Canvas(top, SWT.NONE); + composite = parent; + canvas.setBackground(composite.getDisplay().getSystemColor(SWT.COLOR_WHITE)); + lws = new LightweightSystem(canvas); + container = new Figure(); + setContainerMouseListener(container); + setMouseListener(container); + contentsLayout = new XYLayout(); + container.setLayoutManager(contentsLayout); + lws.setContents(container); + // canvas.addPaintListener(new PaintListener() { + // + // public void paintControl(PaintEvent e) { + // if (centerSearchItem == null || centerSearchItem.getArtifact() == null + // || centerSearchItem.getArtifact().isDeleted()) + // return; + // // refresh(); + // } + // }); + canvas.layout(); + composite.layout(); + createActions(); + + } + + private void printBackList(String inStr) { + final boolean debug = false; + if (debug) { + StringBuilder builder = new StringBuilder(); + builder.append(inStr + "backList : ["); + for (int i = 0; i < backList.size(); i++) { + builder.append(i + " "); + } + builder.append("] index: " + backListIndex); + System.err.println(builder.toString()); + } + } + + private void backListClearToIndex() { + printBackList("pre backListClearToIndex"); + // Remove any extra items after where we are in backList + for (int i = backListIndex + 1; i < backList.size(); i++) { + backList.remove(i); + } + printBackList("post backListClearToIndex"); + } + + private void backListAddSearchItem(HyperViewItem hvi) { + // If we are adding, then any items past backListIndex are + // invalid and should be removed + printBackList("pre backListAddSearchItem"); + backListClearToIndex(); + if (backList.size() > 0) { + if (backList.get(backList.size() - 1).equals(hvi)) { + // System.out.println("same as last; skip"); + return; + } + } + backList.add(hvi); + backListIndex = backList.size() - 1; + printBackList("post backListAddSearchItem"); + } + + // private void backListClear() { + // backList.clear(); + // backListIndex = 0; + // } + + public void refresh() { + gridDrawCenterItem(); + } + + protected void clear() { + if (HyperView.debugOn) { + System.out.println("gridClear"); + } + if (connectors != null) { + for (int i = 0; i < connectors.size(); i++) { + connectors.get(i).erase(); + } + connectors.clear(); + } + if (container != null) { + container.removeAll(); + } + } + + private void gridDrawCenterItem() { + clear(); + Rectangle grid = container.getClientArea(); + // System.out.println("grid w: " + grid.width + " h:" + grid.height); + gridDraw(centerSearchItem, new Point(grid.width / 2, grid.height / 2)); + } + + private void gridDraw(HyperViewItem hvi, Point center) { + if (HyperView.debugOn) { + System.out.println("zoom *" + zoom + "*"); + } + // Draw center node + if (hvi != null) { + if (HyperView.debugOn) { + System.out.println("center x: " + center.x + " y:" + center.y); + } + if (HyperView.debugOn) { + System.out.println("centerFigure *" + hvi.getTitle() + "*"); + } + Point useCenter; + if (zoom.dragCenter != null) { + useCenter = zoom.dragCenter.getCopy(); + } else { + useCenter = center.getCopy(); + } + // Offset by scroll + if (vsb != null) { + useCenter.y -= (vsb.getSelection() - 40) * 10; + } + if (hsb != null) { + useCenter.x -= (hsb.getSelection() - 40) * 10; + } + // System.out.println("zoom.dragCenter *" + zoom.dragCenter + "*"); + // System.out.println("center *" + center + "*"); + // System.out.println("vsb.getSelection() *" + vsb.getSelection() + + // "*"); + // System.out.println("hsb.getSelection() *" + hsb.getSelection() + + // "*"); + Point nwPoint; + Point cPoint; + centerFigure = createFigure(centerSearchItem, true); + Dimension dim = centerFigure.getPreferredSize(); + if (HyperView.debugOn) { + System.out.println("dim center w: " + dim.width + " h:" + dim.height); + } + nwPoint = new Point((useCenter.x - dim.width / 2), (useCenter.y - dim.height / 2)); + cPoint = new Point((nwPoint.x + dim.width / 2), (nwPoint.y + dim.height / 2)); + if (HyperView.debugOn) { + System.out.println("nwPoint *" + nwPoint + "*"); + } + if (HyperView.debugOn) { + System.out.println("cPoint *" + cPoint + "*"); + } + contentsLayout.setConstraint(centerFigure, new Rectangle(nwPoint.x, nwPoint.y, -1, -1)); + // centerFigure.repaint(); + ChopboxAnchor sourceAnchor = new ChopboxAnchor(centerFigure); + setMouseListener(centerFigure); + // debug only + // drawQuadrant(topQuadrantStart, quadrant); + // drawQuadrant(bottomQuadrantStart, quadrant); + // drawQuadrant(leftQuadrantStart, quadrant); + // drawQuadrant(rightQuadrantStart, quadrant); + /* + * Bottomren draw from right to left Tops draw from left to right Left draws from low to high Usedby draws from + * high to low + */ + // Draw other nodes + drawNodes(RelationEnum.TOP, hvi.getTop(), cPoint, sourceAnchor); + drawNodes(RelationEnum.BOTTOM, hvi.getBottom(), cPoint, sourceAnchor); + drawNodes(RelationEnum.LEFT, hvi.getLeft(), cPoint, sourceAnchor); + drawNodes(RelationEnum.RIGHT, hvi.getRight(), cPoint, sourceAnchor); + } + container.repaint(); + canvas.layout(); + composite.layout(); + } + + /** + * Draw figures around center offsetPoint #param relType - relation + * + * @param hvis - HyperViewItems to show. + * @param offsetPoint - x,y to offset figures + */ + private void drawNodes(RelationEnum relType, ArrayList<HyperViewItem> hvis, Point offsetPoint, ChopboxAnchor sourceAnchor) { + if (HyperView.debugOn) { + System.out.println("drawNodes"); + } + if (hvis.isEmpty()) { + return; + } + final boolean isRight = relType == RelationEnum.RIGHT; + final boolean isLeft = relType == RelationEnum.LEFT; + final boolean isBottom = relType == RelationEnum.BOTTOM; + final boolean isTop = relType == RelationEnum.TOP; + if (HyperView.debugOn) { + System.out.println("offsetPoint *" + offsetPoint + "*"); + } + double startDegree = 0; + if (isRight) { + startDegree = HyperView.rightQuadrantStart; + } else if (isLeft) { + startDegree = HyperView.leftQuadrantStart; + } else if (isTop) { + startDegree = HyperView.topQuadrantStart; + } else if (isBottom) { + startDegree = HyperView.bottomQuadrantStart; + } + double degree = 0; + Point cPoint = new Point(); // center of figure + Point nwPoint = new Point(); + ArrayList<HyperViewItem> orderedHvis = new ArrayList<HyperViewItem>(); + + // if bottomren, reverse order of figures + if (isBottom) { + for (int i = hvis.size() - 1; i >= 0; i--) { + HyperViewItem hvi = hvis.get(i); + if (hvi.isShow()) { + orderedHvis.add(hvis.get(i)); + } + } + } else { + for (HyperViewItem hvi : hvis) { + if (hvi.isShow()) { + orderedHvis.add(hvi); + } + } + } + final double degreeDiff = quadrant / (orderedHvis.size() + 1); + if (HyperView.debugOn) { + System.out.println("quadrant *" + quadrant + "*"); + } + if (HyperView.debugOn) { + System.out.println("orderedHvis size *" + orderedHvis.size() + "*"); + } + if (HyperView.debugOn) { + System.out.println("degreeDiff *" + degreeDiff + "*"); + } + + // what is sent into constraint as the nw corner + int myRadius; + if (isBottom || isTop) { + myRadius = zoom.pcRadius; + } else { + myRadius = zoom.uuRadius; + } + for (int i = 0; i < orderedHvis.size(); i++) { + HyperViewItem hvi = orderedHvis.get(i); + if (HyperView.debugOn) { + System.out.println("\n"); + } + if (HyperView.debugOn) { + System.out.println("HIV " + hvi.getShortTitle()); + } + degree = startDegree + degreeDiff + degreeDiff * i; + if (HyperView.debugOn) { + System.out.println("startDegree *" + startDegree + "*"); + } + if (HyperView.debugOn) { + System.out.println("degree *" + degree + "*"); + } + NodeFigure figure = createFigure(hvi, false); + cPoint.x = offsetPoint.x + (int) Math.round((myRadius * Math.cos(degree))); + cPoint.y = offsetPoint.y + (int) Math.round((myRadius * Math.sin(degree))); + if (HyperView.debugOn) { + drawX(offsetPoint.x, offsetPoint.y - 5, "o"); + } + if (HyperView.debugOn) { + drawX(cPoint.x, cPoint.y - 5, "c"); + } + Dimension dim = figure.getPreferredSize(); + if (HyperView.debugOn) { + System.out.println("dim " + relType + " w: " + dim.width + " h:" + dim.height); + } + if (isLeft) { + nwPoint.x = cPoint.x - dim.width; + nwPoint.y = cPoint.y - dim.height / 2; + } else if (isRight) { + nwPoint.x = cPoint.x; + nwPoint.y = cPoint.y - dim.height / 2; + } else if (isBottom) { + nwPoint.x = cPoint.x - dim.width / 2; + nwPoint.y = cPoint.y; + } else if (isTop) { + nwPoint.x = cPoint.x - dim.width / 2; + nwPoint.y = cPoint.y - dim.height; + } + if (orderedHvis.size() > 1 && (isTop || isBottom)) { + if (i < orderedHvis.size() / 2) { + myRadius += zoom.pcRadiusSeparation; + if (isBottom) { + nwPoint.x += zoom.xSeparation; + } + if (isTop) { + nwPoint.x -= zoom.xSeparation; + } + } else if (i > orderedHvis.size() / 2) { + myRadius -= zoom.pcRadiusSeparation; + if (isBottom) { + nwPoint.x -= zoom.xSeparation; + } + if (isTop) { + nwPoint.x += zoom.xSeparation; + } + } + } + if (orderedHvis.size() > 1 && (isLeft || isRight)) { + // int half = orderedFigures.size() / 2; + if (i < orderedHvis.size() / 2) { + myRadius += zoom.uuRadiusSeparation; + } else { + myRadius -= zoom.uuRadiusSeparation; + } + } + contentsLayout.setConstraint(figure, new Rectangle(nwPoint.x, nwPoint.y, -1, -1)); + setMouseListener(figure); + /* Draw line to left */ + ChopboxAnchor targetAnchor = new ChopboxAnchor(figure); + drawLine(sourceAnchor, targetAnchor, figure.getHvi()); + // .getRelationToolTip(), + // ((NodeFigure) figure).getHvi().getRelationLabel(), ((NodeFigure) + // figure).getHvi().getRelationDirty()); + + if (HyperView.debugOn) { + System.out.println("cPoint *" + cPoint + "*"); + } + if (HyperView.debugOn) { + System.out.println("nwPoint *" + nwPoint + "*"); + } + if (HyperView.debugOn) { + System.out.println("offsetPoint *" + offsetPoint + "*"); + } + ChopboxAnchor thisAnchor = new ChopboxAnchor(figure); + if (hvi.getTop().size() > 0) { + drawNodes(RelationEnum.TOP, hvi.getTop(), cPoint, thisAnchor); + } + if (hvi.getBottom().size() > 0) { + drawNodes(RelationEnum.BOTTOM, hvi.getBottom(), new Point((nwPoint.x + dim.width / 2), + (nwPoint.y + dim.height / 2)), thisAnchor); + } + if (hvi.getLeft().size() > 0) { + drawNodes(RelationEnum.LEFT, hvi.getLeft(), cPoint, thisAnchor); + } + if (hvi.getRight().size() > 0) { + drawNodes(RelationEnum.RIGHT, hvi.getRight(), cPoint, thisAnchor); + } + } + } + + /* + * Used for debug only drawQuadrant(leftQuadrantStart,quadrant); + */ + // @SuppressWarnings("unused") + // private void drawQuadrant(double start, double degrees) { + // int cx = 100, cy = 100, r = 100; + // int x, y; + // double a; + // for (a = start; a < start + degrees; a += 0.01) { + // x = (int) Math.round(r * Math.cos(a)) + cx; + // y = (int) Math.round(r * Math.sin(a)) + cy; + // drawX(x, y, "x"); + // } + // double degreeDiff = degrees / 4; + // for (int t = 0; t < 3; t += 1) { + // x = (int) Math.round(r * Math.cos(start + degreeDiff + (t * degreeDiff))) + cx; + // y = (int) Math.round(r * Math.sin(start + degreeDiff + (t * degreeDiff))) + cy; + // drawX(x, y + 20, "x"); + // } + // } + private void drawX(int x, int y, String str) { + Label label = new Label(str, null); + Figure figure = new NodeFigure(label, null, new HyperViewItem(""), false); + container.add(figure); + contentsLayout.setConstraint(figure, new Rectangle(x, y, -1, -1)); + } + + private void drawLine(ChopboxAnchor source, ChopboxAnchor target, HyperViewItem hvi) { + PolylineConnection c = new PolylineConnection(); + c.setLineWidth(2); + if (hvi.isRelationDirty()) { + c.setForegroundColor(Displays.getSystemColor(SWT.COLOR_BLUE)); + } + c.setSourceAnchor(source); + c.setTargetAnchor(target); + setConnectionMouseListener(c, hvi); + // Add tooltip + if (Strings.isValid(hvi.getRelationToolTip())) { + c.setToolTip(new Label(hvi.getRelationToolTip())); + // Add label + } + + ConnectionEndpointLocator targetEndpointLocator = new ConnectionEndpointLocator(c, true); + targetEndpointLocator.setVDistance(1); + Label targetMultiplicityLabel = new Label(hvi.getRelationLabel()); + c.add(targetMultiplicityLabel, targetEndpointLocator); + + connectors.add(c); + container.add(c); + } + + protected void display() { + // provided for subclass implementation + } + + private void createConnectionMenuBar(final HyperViewItem hvi) { + if (AtsUtil.isAtsAdmin()) { + if (connectPopupMenu == null || !connectPopupMenu.isVisible()) { + // final PolylineConnection c = connection; + connectPopupMenu = new Menu(canvas.getShell(), SWT.POP_UP); + MenuItem editItem = new MenuItem(connectPopupMenu, SWT.CASCADE); + editItem.setText("Delete Link"); + editItem.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent e) { + try { + if (MessageDialog.openQuestion(Displays.getActiveShell(), "Delete Link", + "Delete Link\n\n" + hvi.getLink().toString() + "\n\nAre you sure?")) { + Artifact artA = hvi.getLink().getArtifactA(); + hvi.getLink().delete(true); + artA.persist(); + connectPopupMenu.dispose(); + connectPopupMenu = null; + display(); + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + }); + connectPopupMenu.setVisible(true); + } + } + } + + private void setConnectionMouseListener(PolylineConnection c, final HyperViewItem hvi) { + MouseListener mouseListener = new MouseListener() { + + @Override + public void mouseDoubleClicked(MouseEvent e) { + if (HyperView.debugOn) { + System.out.println("DoubleClick"); + } + } + + @Override + public void mousePressed(MouseEvent e) { + if (HyperView.debugOn) { + System.out.println("mousePressed"); + } + } + + @Override + public void mouseReleased(MouseEvent e) { + if (HyperView.debugOn) { + System.out.println("mouseReleased"); + } + if (e.button == 3) { + if (e.getSource() instanceof PolylineConnection) { + // PolylineConnection c = (PolylineConnection) e.getSource(); + createConnectionMenuBar(hvi); + } + return; + } + } + }; + c.addMouseListener(mouseListener); + } + + private NodeFigure createFigure(HyperViewItem hvi, boolean center) { + Label infoLabel = null; + String title = hvi.getShortTitle(); + if (!titleAction.isChecked()) { + if (title.length() > 30) { + title = title.substring(0, 30); + } + } + Label nameLabel = null; + try { + nameLabel = new Label(title, hvi.getImage()); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + nameLabel = new Label(title, null); + } + Image markImage = hvi.getMarkImage(); + if (markImage != null) { + infoLabel = new Label(null, markImage); + } + + NodeFigure figure = new NodeFigure(nameLabel, infoLabel, hvi, center); + // System.out.println(title + " " + figure.hashCode()); + container.add(figure); + figure.setToolTip(new Label(hvi.getToolTip())); + return figure; + } + + private void setContainerMouseListener(Figure figure) { + MouseListener mouseListener = new MouseListener() { + + @Override + public void mouseDoubleClicked(MouseEvent e) { + // do nothing + } + + @Override + public void mousePressed(MouseEvent e) { + // do nothing + } + + @Override + public void mouseReleased(MouseEvent e) { + if (e.button == 1) { + if (dragCenter) { + if (zoom.dragCenter == null) { + zoom.dragCenter = new Point(); + } + zoom.dragCenter.x = e.x; + zoom.dragCenter.y = e.y; + refresh(); + dragCenter = false; + if (hCursor != null) { + container.setCursor(null); + centerFigure.setCursor(null); + hCursor.dispose(); + } + } + } + } + }; + figure.addMouseListener(mouseListener); + } + + private void setMouseListener(Figure figure) { + MouseListener mouseListener = new MouseListener() { + + @Override + public void mouseDoubleClicked(MouseEvent e) { + if (e.button == 1 && e.getSource() instanceof NodeFigure) { + NodeFigure nf = (NodeFigure) e.getSource(); + HyperViewItem si = nf.getSearchItem(); + handleItemDoubleClick(si); + } + } + + @Override + public void mousePressed(MouseEvent e) { + // do nothing + } + + @Override + public void mouseReleased(MouseEvent e) { + // System.out.println("mouseReleased"); + if (hCursor != null) { + container.setCursor(null); + centerFigure.setCursor(null); + hCursor.dispose(); + } + if (e.getSource() instanceof NodeFigure) { + NodeFigure nf = (NodeFigure) e.getSource(); + HyperViewItem si = nf.getSearchItem(); + if (HyperView.debugOn) { + System.out.println("Click: " + si.getTitle()); + } + if (e.button == 3) { + createMenuBar(si); + } + } + } + }; + figure.addMouseListener(mouseListener); + } + + public void handleItemDoubleClick(HyperViewItem hvi) { + backListAddSearchItem(hvi); + jumpTo(hvi); + } + + public static void openActionEditor(Artifact artifact) { + if (artifact instanceof StateMachineArtifact) { + AtsUtil.openATSAction(artifact, AtsOpenOption.OpenOneOrPopupSelect); + } + } + + private void createMenuBar(HyperViewItem hvi) { + if (popupMenu == null || !popupMenu.isVisible()) { + final HyperViewItem fHvi = hvi; + popupMenu = new Menu(canvas.getShell(), SWT.POP_UP); + + if (AtsUtil.isAtsAdmin()) { + MenuItem editItem = new MenuItem(popupMenu, SWT.CASCADE); + editItem.setText("Open in Artifact Editor"); + editItem.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent e) { + Artifact a = null; + if (fHvi instanceof ArtifactHyperItem) { + a = ((ArtifactHyperItem) fHvi).getArtifact(); + } else if (fHvi instanceof ActionHyperItem) { + a = ((ActionHyperItem) fHvi).getArtifact(); + } + if (a != null) { + try { + RendererManager.open(a, PresentationType.GENERALIZED_EDIT); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } + popupMenu.dispose(); + popupMenu = null; + } + }); + MenuItem deleteItem = new MenuItem(popupMenu, SWT.CASCADE); + deleteItem.setText("Delete Artifact"); + deleteItem.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent e) { + Artifact art = null; + if (fHvi instanceof ArtifactHyperItem) { + art = ((ArtifactHyperItem) fHvi).getArtifact(); + } else { + art = ((ActionHyperItem) fHvi).getArtifact(); + } + String dialogTitle = "Confirm Artifact Deletion?"; + StringBuilder dialogText = new StringBuilder(); + dialogText.append("\"" + art.getName() + "\"\nguid: " + art.getGuid()); + dialogText.append("\n\n Are you sure you want to delete this artifact and its default-hierarchy children?"); + if (MessageDialog.openQuestion(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), + dialogTitle, dialogText.toString())) { + if (art instanceof StateMachineArtifact) { + SMAEditor.close(Collections.singleton((StateMachineArtifact) art), false); + } + try { + art.deleteAndPersist(); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + popupMenu.dispose(); + popupMenu = null; + } + }); + } + + MenuItem previewItem = new MenuItem(popupMenu, SWT.CASCADE); + previewItem.setText("Open in ATS"); + previewItem.setEnabled(fHvi instanceof ArtifactHyperItem && ((ArtifactHyperItem) fHvi).getArtifact() instanceof StateMachineArtifact || fHvi instanceof ActionHyperItem && ((ActionHyperItem) fHvi).getArtifact() instanceof StateMachineArtifact); + previewItem.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent e) { + Artifact a = null; + if (fHvi instanceof ArtifactHyperItem) { + a = ((ArtifactHyperItem) fHvi).getArtifact(); + } else if (fHvi instanceof ActionHyperItem) { + a = ((ActionHyperItem) fHvi).getArtifact(); + } + if (a != null) { + openActionEditor(a); + } + } + }); + popupMenu.setVisible(true); + } + } + + public void jumpTo(HyperViewItem si) { + if (homeSearchItem == null) { + return; + } + centerSearchItem = si; + refresh(); + } + + protected void center() { + zoom = defaultZoom; + vsb.setSelection(verticalSelection); + hsb.setSelection(40); + refresh(); + } + + protected void createActions() { + + // Reset Action + Action centerAction = new Action() { + + @Override + public void run() { + center(); + } + }; + centerAction.setText("Center"); + centerAction.setToolTipText("Center"); + centerAction.setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.CENTER)); + + if (provideBackForwardActions()) { + // Back Action + backAction = new Action() { + + @Override + public void run() { + printBackList("pre backSelected"); + if (backList.isEmpty()) { + return; + } + if (backListIndex > 0) { + backListIndex--; + } + jumpTo(backList.get(backListIndex)); + printBackList("post backSelected"); + } + }; + + backAction.setText("Back"); + backAction.setToolTipText("Back"); + backAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor( + ISharedImages.IMG_TOOL_BACK)); + // Forward Action + forwardAction = new Action() { + + @Override + public void run() { + printBackList("pre forwardSelected"); + if (backList.size() - 1 > backListIndex) { + backListIndex++; + jumpTo(backList.get(backListIndex)); + } + printBackList("post forwardSelected"); + } + }; + forwardAction.setText("Forward"); + forwardAction.setToolTipText("Forward"); + forwardAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor( + ISharedImages.IMG_TOOL_FORWARD)); + } + // // Home + // Action homeAction = new Action() { + // + // public void run() { + // if (homeSearchItem == null) { + // return; + // } + // vsb.setSelection(verticalSelection); + // hsb.setSelection(40); + // backListAddSearchItem(homeSearchItem); + // jumpTo(homeSearchItem); + // } + // }; + // homeAction.setText("Home"); + // homeAction.setToolTipText("Home"); + // homeAction.setImageDescriptor(AtsPlugin.getImageDescriptor("home.gif")); + // Zoom in + Action zoomInAction = new Action() { + + @Override + public void run() { + if (homeSearchItem == null) { + return; + } + if (HyperView.debugOn) { + System.out.println("zoomInAction"); + } + zoom.pcRadius += zoom.pcRadiusFactor; + zoom.uuRadius += zoom.uuRadiusFactor; + zoom.xSeparation += zoom.xSeparationFactor; + refresh(); + + } + }; + zoomInAction.setText("Zoom In"); + zoomInAction.setToolTipText("Zoom In"); + zoomInAction.setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.ZOOM_IN)); + // Zoom Out + Action zoomOutAction = new Action() { + + @Override + public void run() { + if (homeSearchItem == null) { + return; + } + if (HyperView.debugOn) { + System.out.println("zoomOutAction"); + } + if (zoom.pcRadius >= zoom.pcRadiusFactor) { + zoom.pcRadius -= zoom.pcRadiusFactor; + } + if (zoom.uuRadius >= zoom.uuRadiusFactor) { + zoom.uuRadius -= zoom.uuRadiusFactor; + } + if (zoom.xSeparation >= zoom.xSeparationFactor) { + zoom.xSeparation -= zoom.xSeparationFactor; + } + refresh(); + } + }; + zoomOutAction.setText("Zoom Out"); + zoomOutAction.setToolTipText("Zoom Out"); + zoomOutAction.setImageDescriptor(ImageManager.getImageDescriptor(AtsImage.ZOOM_OUT)); + + titleAction = new Action("Expand Titles", IAction.AS_CHECK_BOX) { + + @Override + public void run() { + if (HyperView.debugOn) { + System.out.println("expandTitles"); + } + refresh(); + } + }; + titleAction.setToolTipText("Expand Titles"); + + Action refreshAction = new Action("Refresh") { + + @Override + public void run() { + if (homeSearchItem == null) { + MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), + "Refresh Error", "Viewer not loaded, nothing to refresh."); + return; + } + handleRefreshButton(); + } + }; + refreshAction.setToolTipText("Refresh"); + ImageManager.getImageDescriptor(PluginUiImage.REFRESH); + refreshAction.setImageDescriptor(ImageManager.getImageDescriptor(PluginUiImage.REFRESH)); + + IActionBars bars = getViewSite().getActionBars(); + IMenuManager mm = bars.getMenuManager(); + mm.add(new Separator()); + mm.add(titleAction); + + IToolBarManager tbm = bars.getToolBarManager(); + tbm.add(new Separator()); + // tbm.add(homeAction); + tbm.add(centerAction); + tbm.add(zoomInAction); + tbm.add(zoomOutAction); + if (provideBackForwardActions()) { + tbm.add(backAction); + tbm.add(forwardAction); + } + tbm.add(refreshAction); + + } + + protected void handleRefreshButton() { + refresh(); + } + + /** + * Passing the focus request to the viewer's control. + */ + @Override + public void setFocus() { + // viewer.getControl().setFocus(); + } + + public Color getCenterColor() { + return HyperView.centerColor; + } + + public static void setCenterColor(Color color) { + centerColor = color; + } + + public Color getNodeColor() { + return HyperView.nodeColor; + } + + public static void setNodeColor(Color color) { + nodeColor = color; + } + + public int getVerticalSelection() { + return verticalSelection; + } + + public void setVerticalSelection(int verticalSelection) { + this.verticalSelection = verticalSelection; + if (vsb != null) { + vsb.setSelection(verticalSelection); + } + } + + @Override + public void dispose() { + // do nothing + } + + @Override + public void partActivated(IWorkbenchPart part) { + // do nothing + } + + @Override + public void partBroughtToTop(IWorkbenchPart part) { + // do nothing + } + + @Override + public void partClosed(IWorkbenchPart part) { + if (part.equals(this)) { + dispose(); + } + } + + @Override + public void partDeactivated(IWorkbenchPart part) { + // do nothing + } + + @Override + public void partOpened(IWorkbenchPart part) { + // do nothing + } + + public Figure getContainer() { + return container; + } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/HyperViewItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/HyperViewItem.java index b9195ad8937..be4b1e0cde3 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/HyperViewItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/HyperViewItem.java @@ -1,196 +1,196 @@ -/*******************************************************************************
- * 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.hyper;
-
-import java.util.ArrayList;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.skynet.core.relation.RelationLink;
-import org.eclipse.swt.graphics.Image;
-
-public class HyperViewItem {
-
- private final ArrayList<HyperViewItem> bottoms = new ArrayList<HyperViewItem>(); // bottom
- private final ArrayList<HyperViewItem> tops = new ArrayList<HyperViewItem>(); // top
- private final ArrayList<HyperViewItem> lefts = new ArrayList<HyperViewItem>(); // left
- private final ArrayList<HyperViewItem> rights = new ArrayList<HyperViewItem>(); // right
- private String guid;
- private final String title;
- private Image image;
- private String toolTip;
- private String relationToolTip;
- private String relationLabel;
- private boolean relationDirty = false;
- private boolean highlight = false;
- private boolean current = false;
- private boolean show = true;
- private RelationLink link;
-
- public HyperViewItem(String title) {
- this(title, null);
- }
-
- public HyperViewItem(String title, Image image) {
- this.title = title;
- this.image = image;
- this.toolTip = title;
- }
-
- // lastModified
- public void clearAllSearchItemLinks() {
- bottoms.clear();
- tops.clear();
- lefts.clear();
- rights.clear();
- }
-
- public Image getMarkImage() {
- return null;
- }
-
- public void addBottom(HyperViewItem si) {
- bottoms.add(si);
- }
-
- public void addTop(HyperViewItem si) {
- tops.add(si);
- }
-
- public void removeTop(HyperViewItem si) {
- if (tops.contains(si)) {
- tops.remove(si);
- }
- }
-
- public String getShortTitle() {
- return title;
- }
-
- public void addLeft(HyperViewItem si) {
- lefts.add(si);
- }
-
- public void addRight(HyperViewItem si) {
- rights.add(si);
- }
-
- /**
- * @return ArrayList of HyperViewItems
- */
- public ArrayList<HyperViewItem> getBottom() {
- return bottoms;
- }
-
- /**
- * @return ArrayList of HyperViewItems
- */
- public ArrayList<HyperViewItem> getTop() {
- return tops;
- }
-
- /**
- * @return ArrayList of HyperViewItems
- */
- public ArrayList<HyperViewItem> getLeft() {
- return lefts;
- }
-
- /**
- * @return ArrayList of HyperViewItems
- */
- public ArrayList<HyperViewItem> getRight() {
- return rights;
- }
-
- @SuppressWarnings("unused")
- public Image getImage() throws OseeCoreException {
- return image;
- }
-
- public String getTitle() {
- return title;
- }
-
- public String getToolTip() {
- return toolTip;
- }
-
- public void setToolTip(String toolTip) {
- this.toolTip = toolTip;
- }
-
- public boolean isShow() {
- return show;
- }
-
- public void setShow(boolean show) {
- this.show = show;
- }
-
- public void setImage(Image image) {
- this.image = image;
- }
-
- public boolean isHighlight() {
- return highlight;
- }
-
- public void setHighlight(boolean highlight) {
- this.highlight = highlight;
- }
-
- public boolean isCurrent() {
- return current;
- }
-
- public void setCurrent(boolean current) {
- this.current = current;
- }
-
- public void setGuid(String guid) {
- this.guid = guid;
- }
-
- public String getGuid() {
- return guid;
- }
-
- public String getRelationToolTip() {
- return relationToolTip;
- }
-
- public void setRelationToolTip(String relationToolTip) {
- this.relationToolTip = relationToolTip;
- }
-
- public String getRelationLabel() {
- return relationLabel;
- }
-
- public boolean isRelationDirty() {
- return relationDirty;
- }
-
- public void setRelationLabel(String relationLabel) {
- this.relationLabel = relationLabel;
- }
-
- public void setRelationDirty(boolean relationDirty) {
- this.relationDirty = relationDirty;
- }
-
- public RelationLink getLink() {
- return link;
- }
-
- public void setLink(RelationLink link) {
- this.link = link;
- }
+/******************************************************************************* + * 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.hyper; + +import java.util.ArrayList; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.skynet.core.relation.RelationLink; +import org.eclipse.swt.graphics.Image; + +public class HyperViewItem { + + private final ArrayList<HyperViewItem> bottoms = new ArrayList<HyperViewItem>(); // bottom + private final ArrayList<HyperViewItem> tops = new ArrayList<HyperViewItem>(); // top + private final ArrayList<HyperViewItem> lefts = new ArrayList<HyperViewItem>(); // left + private final ArrayList<HyperViewItem> rights = new ArrayList<HyperViewItem>(); // right + private String guid; + private final String title; + private Image image; + private String toolTip; + private String relationToolTip; + private String relationLabel; + private boolean relationDirty = false; + private boolean highlight = false; + private boolean current = false; + private boolean show = true; + private RelationLink link; + + public HyperViewItem(String title) { + this(title, null); + } + + public HyperViewItem(String title, Image image) { + this.title = title; + this.image = image; + this.toolTip = title; + } + + // lastModified + public void clearAllSearchItemLinks() { + bottoms.clear(); + tops.clear(); + lefts.clear(); + rights.clear(); + } + + public Image getMarkImage() { + return null; + } + + public void addBottom(HyperViewItem si) { + bottoms.add(si); + } + + public void addTop(HyperViewItem si) { + tops.add(si); + } + + public void removeTop(HyperViewItem si) { + if (tops.contains(si)) { + tops.remove(si); + } + } + + public String getShortTitle() { + return title; + } + + public void addLeft(HyperViewItem si) { + lefts.add(si); + } + + public void addRight(HyperViewItem si) { + rights.add(si); + } + + /** + * @return ArrayList of HyperViewItems + */ + public ArrayList<HyperViewItem> getBottom() { + return bottoms; + } + + /** + * @return ArrayList of HyperViewItems + */ + public ArrayList<HyperViewItem> getTop() { + return tops; + } + + /** + * @return ArrayList of HyperViewItems + */ + public ArrayList<HyperViewItem> getLeft() { + return lefts; + } + + /** + * @return ArrayList of HyperViewItems + */ + public ArrayList<HyperViewItem> getRight() { + return rights; + } + + @SuppressWarnings("unused") + public Image getImage() throws OseeCoreException { + return image; + } + + public String getTitle() { + return title; + } + + public String getToolTip() { + return toolTip; + } + + public void setToolTip(String toolTip) { + this.toolTip = toolTip; + } + + public boolean isShow() { + return show; + } + + public void setShow(boolean show) { + this.show = show; + } + + public void setImage(Image image) { + this.image = image; + } + + public boolean isHighlight() { + return highlight; + } + + public void setHighlight(boolean highlight) { + this.highlight = highlight; + } + + public boolean isCurrent() { + return current; + } + + public void setCurrent(boolean current) { + this.current = current; + } + + public void setGuid(String guid) { + this.guid = guid; + } + + public String getGuid() { + return guid; + } + + public String getRelationToolTip() { + return relationToolTip; + } + + public void setRelationToolTip(String relationToolTip) { + this.relationToolTip = relationToolTip; + } + + public String getRelationLabel() { + return relationLabel; + } + + public boolean isRelationDirty() { + return relationDirty; + } + + public void setRelationLabel(String relationLabel) { + this.relationLabel = relationLabel; + } + + public void setRelationDirty(boolean relationDirty) { + this.relationDirty = relationDirty; + } + + public RelationLink getLink() { + return link; + } + + public void setLink(RelationLink link) { + this.link = link; + } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/TasksActionHyperItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/TasksActionHyperItem.java index a19a00a7a82..46c14bd37d3 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/TasksActionHyperItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/TasksActionHyperItem.java @@ -1,54 +1,54 @@ -/*******************************************************************************
- * 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.hyper;
-
-import java.util.Collection;
-import org.eclipse.osee.ats.artifact.TaskArtifact;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.ats.world.WorldEditor;
-import org.eclipse.osee.ats.world.WorldEditorSimpleProvider;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
-import org.eclipse.osee.framework.ui.skynet.ArtifactImageManager;
-import org.eclipse.swt.graphics.Image;
-
-/**
- * @author Donald G. Dunne
- */
-public class TasksActionHyperItem extends ActionHyperItem {
-
- private final Collection<TaskArtifact> taskArtifacts;
-
- public TasksActionHyperItem(Collection<TaskArtifact> taskArtifacts) {
- super(new TasksHyperViewArtifact(taskArtifacts));
- this.taskArtifacts = taskArtifacts;
- setRelationToolTip("Task");
- }
-
- @Override
- public void handleDoubleClick(HyperViewItem hyperViewItem) {
- super.handleDoubleClick(hyperViewItem);
- WorldEditor.open(new WorldEditorSimpleProvider("Tasks", taskArtifacts));
- }
-
- @Override
- public void calculateCurrent(Artifact currentArtifact) {
- setCurrent(taskArtifacts.contains(currentArtifact));
- }
-
- @Override
- public Image getImage() throws OseeCoreException {
- return ArtifactImageManager.getImage(ArtifactTypeManager.getType(AtsArtifactTypes.Task));
-
- }
-
-}
+/******************************************************************************* + * 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.hyper; + +import java.util.Collection; +import org.eclipse.osee.ats.artifact.TaskArtifact; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.ats.world.WorldEditor; +import org.eclipse.osee.ats.world.WorldEditorSimpleProvider; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager; +import org.eclipse.osee.framework.ui.skynet.ArtifactImageManager; +import org.eclipse.swt.graphics.Image; + +/** + * @author Donald G. Dunne + */ +public class TasksActionHyperItem extends ActionHyperItem { + + private final Collection<TaskArtifact> taskArtifacts; + + public TasksActionHyperItem(Collection<TaskArtifact> taskArtifacts) { + super(new TasksHyperViewArtifact(taskArtifacts)); + this.taskArtifacts = taskArtifacts; + setRelationToolTip("Task"); + } + + @Override + public void handleDoubleClick(HyperViewItem hyperViewItem) { + super.handleDoubleClick(hyperViewItem); + WorldEditor.open(new WorldEditorSimpleProvider("Tasks", taskArtifacts)); + } + + @Override + public void calculateCurrent(Artifact currentArtifact) { + setCurrent(taskArtifacts.contains(currentArtifact)); + } + + @Override + public Image getImage() throws OseeCoreException { + return ArtifactImageManager.getImage(ArtifactTypeManager.getType(AtsArtifactTypes.Task)); + + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/TasksHyperViewArtifact.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/TasksHyperViewArtifact.java index c8e28b0b36e..9159a008339 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/TasksHyperViewArtifact.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/hyper/TasksHyperViewArtifact.java @@ -1,75 +1,75 @@ -/*******************************************************************************
- * 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.hyper;
-
-import java.util.Collection;
-import org.eclipse.osee.ats.artifact.TaskArtifact;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.swt.graphics.Image;
-
-/**
- * @author Donald G. Dunne
- */
-public class TasksHyperViewArtifact implements IHyperArtifact {
-
- private final Collection<? extends TaskArtifact> taskArts;
-
- public TasksHyperViewArtifact(Collection<? extends TaskArtifact> taskArts) {
- this.taskArts = taskArts;
- }
-
- @Override
- public String getGuid() {
- return null;
- }
-
- @Override
- public Artifact getHyperArtifact() {
- return null;
- }
-
- @Override
- public String getHyperAssignee() {
- return null;
- }
-
- @Override
- public Image getHyperAssigneeImage() {
- return null;
- }
-
- @Override
- public String getHyperName() {
- return taskArts.size() + " Tasks";
- }
-
- @Override
- public String getHyperState() {
- return null;
- }
-
- @Override
- public String getHyperType() {
- return AtsArtifactTypes.Task.getName();
- }
-
- @Override
- public String getHyperTargetVersion() {
- return null;
- }
-
- @Override
- public boolean isDeleted() {
- return false;
- }
-
-}
+/******************************************************************************* + * 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.hyper; + +import java.util.Collection; +import org.eclipse.osee.ats.artifact.TaskArtifact; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.swt.graphics.Image; + +/** + * @author Donald G. Dunne + */ +public class TasksHyperViewArtifact implements IHyperArtifact { + + private final Collection<? extends TaskArtifact> taskArts; + + public TasksHyperViewArtifact(Collection<? extends TaskArtifact> taskArts) { + this.taskArts = taskArts; + } + + @Override + public String getGuid() { + return null; + } + + @Override + public Artifact getHyperArtifact() { + return null; + } + + @Override + public String getHyperAssignee() { + return null; + } + + @Override + public Image getHyperAssigneeImage() { + return null; + } + + @Override + public String getHyperName() { + return taskArts.size() + " Tasks"; + } + + @Override + public String getHyperState() { + return null; + } + + @Override + public String getHyperType() { + return AtsArtifactTypes.Task.getName(); + } + + @Override + public String getHyperTargetVersion() { + return null; + } + + @Override + public boolean isDeleted() { + return false; + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/AtsActionReportingServiceImpl.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/AtsActionReportingServiceImpl.java index 71aed83216d..4650afa6253 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/AtsActionReportingServiceImpl.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/AtsActionReportingServiceImpl.java @@ -1,25 +1,25 @@ -/*******************************************************************************
- * 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.internal;
-
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.plugin.core.IActionReportingService;
-
-/**
- * @author Roberto E. Escobar
- */
-public class AtsActionReportingServiceImpl implements IActionReportingService {
-
- @Override
- public void report(String actionableItem, String desc) throws Exception {
- AtsUtil.createATSAction(desc, actionableItem);
- }
-}
+/******************************************************************************* + * 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.internal; + +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.plugin.core.IActionReportingService; + +/** + * @author Roberto E. Escobar + */ +public class AtsActionReportingServiceImpl implements IActionReportingService { + + @Override + public void report(String actionableItem, String desc) throws Exception { + AtsUtil.createATSAction(desc, actionableItem); + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/AtsPlugin.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/AtsPlugin.java index 51d81175e5f..ba03676e051 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/AtsPlugin.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/AtsPlugin.java @@ -1,91 +1,91 @@ -/*******************************************************************************
- * 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.internal;
-
-import org.eclipse.osee.ats.config.AtsCacheManager;
-import org.eclipse.osee.ats.util.AtsNotifyUsers;
-import org.eclipse.osee.ats.util.AtsPreSaveCacheRemoteEventHandler;
-import org.eclipse.osee.framework.core.services.CmAccessControl;
-import org.eclipse.osee.framework.core.util.ServiceDependencyTracker;
-import org.eclipse.osee.framework.jdk.core.util.Lib;
-import org.eclipse.osee.framework.plugin.core.IActionReportingService;
-import org.eclipse.osee.framework.ui.plugin.OseeUiActivator;
-import org.eclipse.osee.framework.ui.skynet.ats.IOseeAtsService;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
-
-/**
- * The main plugin class to be used in the desktop.
- *
- * @author Donald G. Dunne
- */
-public class AtsPlugin extends OseeUiActivator {
- public static final String PLUGIN_ID = "org.eclipse.osee.ats";
-
- private static AtsPlugin pluginInstance;
-
- private ServiceRegistration service1;
- private ServiceRegistration service2;
-
- private ServiceDependencyTracker tracker;
- private AtsCmAccessControlRegHandler cmAccessHandler;
-
- public AtsPlugin() {
- super();
- AtsPlugin.pluginInstance = this;
- AtsPreSaveCacheRemoteEventHandler.start();
- AtsCacheManager.start();
- AtsNotifyUsers.getInstance();
- }
-
- @Override
- public void start(BundleContext context) throws Exception {
- super.start(context);
- service1 =
- context.registerService(IActionReportingService.class.getName(), new AtsActionReportingServiceImpl(), null);
- service2 = context.registerService(IOseeAtsService.class.getName(), new OseeAtsServiceImpl(), null);
-
- // TODO Uncomment to re-enable ATS CM Access providing
- // if (OseeInfo.isEnabled("atsAccessEnabled")) {
- cmAccessHandler = new AtsCmAccessControlRegHandler();
- // tracker = new ServiceDependencyTracker(context, cmAccessHandler);
- // tracker.open();
- // }
- }
-
- @Override
- public void stop(BundleContext context) throws Exception {
- if (tracker != null) {
- Lib.close(tracker);
- }
- if (service1 != null) {
- service1.unregister();
- }
- if (service2 != null) {
- service2.unregister();
- }
- super.stop(context);
- }
-
- @Override
- protected String getPluginName() {
- return PLUGIN_ID;
- }
-
- public static AtsPlugin getInstance() {
- return pluginInstance;
- }
-
- public CmAccessControl getCmService() {
- return cmAccessHandler.getCmService();
- }
-}
+/******************************************************************************* + * 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.internal; + +import org.eclipse.osee.ats.config.AtsCacheManager; +import org.eclipse.osee.ats.util.AtsNotifyUsers; +import org.eclipse.osee.ats.util.AtsPreSaveCacheRemoteEventHandler; +import org.eclipse.osee.framework.core.services.CmAccessControl; +import org.eclipse.osee.framework.core.util.ServiceDependencyTracker; +import org.eclipse.osee.framework.jdk.core.util.Lib; +import org.eclipse.osee.framework.plugin.core.IActionReportingService; +import org.eclipse.osee.framework.ui.plugin.OseeUiActivator; +import org.eclipse.osee.framework.ui.skynet.ats.IOseeAtsService; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceRegistration; + +/** + * The main plugin class to be used in the desktop. + * + * @author Donald G. Dunne + */ +public class AtsPlugin extends OseeUiActivator { + public static final String PLUGIN_ID = "org.eclipse.osee.ats"; + + private static AtsPlugin pluginInstance; + + private ServiceRegistration service1; + private ServiceRegistration service2; + + private ServiceDependencyTracker tracker; + private AtsCmAccessControlRegHandler cmAccessHandler; + + public AtsPlugin() { + super(); + AtsPlugin.pluginInstance = this; + AtsPreSaveCacheRemoteEventHandler.start(); + AtsCacheManager.start(); + AtsNotifyUsers.getInstance(); + } + + @Override + public void start(BundleContext context) throws Exception { + super.start(context); + service1 = + context.registerService(IActionReportingService.class.getName(), new AtsActionReportingServiceImpl(), null); + service2 = context.registerService(IOseeAtsService.class.getName(), new OseeAtsServiceImpl(), null); + + // TODO Uncomment to re-enable ATS CM Access providing + // if (OseeInfo.isEnabled("atsAccessEnabled")) { + cmAccessHandler = new AtsCmAccessControlRegHandler(); + // tracker = new ServiceDependencyTracker(context, cmAccessHandler); + // tracker.open(); + // } + } + + @Override + public void stop(BundleContext context) throws Exception { + if (tracker != null) { + Lib.close(tracker); + } + if (service1 != null) { + service1.unregister(); + } + if (service2 != null) { + service2.unregister(); + } + super.stop(context); + } + + @Override + protected String getPluginName() { + return PLUGIN_ID; + } + + public static AtsPlugin getInstance() { + return pluginInstance; + } + + public CmAccessControl getCmService() { + return cmAccessHandler.getCmService(); + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/OseeDslProviderUpdateListener.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/OseeDslProviderUpdateListener.java index 2e1543bfa09..2e71de8d25c 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/OseeDslProviderUpdateListener.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/OseeDslProviderUpdateListener.java @@ -1,60 +1,60 @@ -/*******************************************************************************
- * Copyright (c) 2010 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.internal;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.logging.Level;
-import org.eclipse.osee.framework.core.dsl.integration.OseeDslProvider;
-import org.eclipse.osee.framework.core.enums.CoreArtifactTypes;
-import org.eclipse.osee.framework.core.enums.CoreBranches;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.event.Sender;
-import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent;
-import org.eclipse.osee.framework.skynet.core.event2.artifact.IArtifactEventListener;
-import org.eclipse.osee.framework.skynet.core.event2.filter.ArtifactTypeEventFilter;
-import org.eclipse.osee.framework.skynet.core.event2.filter.BranchGuidEventFilter;
-import org.eclipse.osee.framework.skynet.core.event2.filter.IEventFilter;
-
-/**
- * @author Roberto E. Escobar
- */
-public final class OseeDslProviderUpdateListener implements IArtifactEventListener {
-
- //@formatter:off
- private static final List<? extends IEventFilter> eventFilters =
- Arrays.asList(
- new ArtifactTypeEventFilter(CoreArtifactTypes.AccessControlModel),
- new BranchGuidEventFilter(CoreBranches.COMMON)
- );
- //@formatter:on
-
- private final OseeDslProvider dslProvider;
-
- public OseeDslProviderUpdateListener(OseeDslProvider dslProvider) {
- this.dslProvider = dslProvider;
- }
-
- @Override
- public List<? extends IEventFilter> getEventFilters() {
- return eventFilters;
- }
-
- @Override
- public void handleArtifactEvent(ArtifactEvent artifactEvent, Sender sender) {
- try {
- dslProvider.loadDsl();
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- }
+/******************************************************************************* + * Copyright (c) 2010 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.internal; + +import java.util.Arrays; +import java.util.List; +import java.util.logging.Level; +import org.eclipse.osee.framework.core.dsl.integration.OseeDslProvider; +import org.eclipse.osee.framework.core.enums.CoreArtifactTypes; +import org.eclipse.osee.framework.core.enums.CoreBranches; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.event.Sender; +import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent; +import org.eclipse.osee.framework.skynet.core.event2.artifact.IArtifactEventListener; +import org.eclipse.osee.framework.skynet.core.event2.filter.ArtifactTypeEventFilter; +import org.eclipse.osee.framework.skynet.core.event2.filter.BranchGuidEventFilter; +import org.eclipse.osee.framework.skynet.core.event2.filter.IEventFilter; + +/** + * @author Roberto E. Escobar + */ +public final class OseeDslProviderUpdateListener implements IArtifactEventListener { + + //@formatter:off + private static final List<? extends IEventFilter> eventFilters = + Arrays.asList( + new ArtifactTypeEventFilter(CoreArtifactTypes.AccessControlModel), + new BranchGuidEventFilter(CoreBranches.COMMON) + ); + //@formatter:on + + private final OseeDslProvider dslProvider; + + public OseeDslProviderUpdateListener(OseeDslProvider dslProvider) { + this.dslProvider = dslProvider; + } + + @Override + public List<? extends IEventFilter> getEventFilters() { + return eventFilters; + } + + @Override + public void handleArtifactEvent(ArtifactEvent artifactEvent, Sender sender) { + try { + dslProvider.loadDsl(); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/ArtifactImpactToActionSearchItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/ArtifactImpactToActionSearchItem.java index f4a52ea6e4e..b6218a1d721 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/ArtifactImpactToActionSearchItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/ArtifactImpactToActionSearchItem.java @@ -1,179 +1,182 @@ -/*******************************************************************************
- * 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.navigate;
-
-import static org.eclipse.osee.framework.skynet.core.artifact.DeletionFlag.INCLUDE_DELETED;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.logging.Level;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.framework.core.data.SystemUser;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.core.model.TransactionRecord;
-import org.eclipse.osee.framework.jdk.core.type.HashCollection;
-import org.eclipse.osee.framework.jdk.core.util.AHTML;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.UserManager;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
-import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
-import org.eclipse.osee.framework.skynet.core.revision.ChangeManager;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction;
-import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
-import org.eclipse.osee.framework.ui.skynet.results.XResultData;
-import org.eclipse.osee.framework.ui.skynet.widgets.dialog.ArtifactCheckTreeDialog;
-import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialogWithBranchSelect;
-import org.eclipse.osee.framework.ui.swt.Displays;
-
-/**
- * @author Donald G. Dunne
- */
-public class ArtifactImpactToActionSearchItem extends XNavigateItemAction {
-
- private static String TITLE = "Search Artifact Impact to Action";
-
- /**
- * @param parent
- */
- public ArtifactImpactToActionSearchItem(XNavigateItem parent) {
- super(parent, TITLE, FrameworkImage.FLASHLIGHT);
- }
-
- @Override
- public void run(TableLoadOption... tableLoadOptions) {
- EntryDialogWithBranchSelect ed =
- new EntryDialogWithBranchSelect(getName(), "Enter Artifact Name (or string) to search (no wildcards)");
- if (ed.open() == 0) {
- ActionToArtifactImpactJob job = new ActionToArtifactImpactJob(ed.getEntry(), ed.getBranch());
- job.setUser(true);
- job.setPriority(Job.LONG);
- job.schedule();
- }
- }
-
- public static class ActionToArtifactImpactJob extends Job {
- private IProgressMonitor monitor;
- private final String artifactName;
- private final XResultData rd = new XResultData();
- private final Branch branch;
-
- public ActionToArtifactImpactJob(String artifactName, Branch branch) {
- super("Searching \"" + artifactName + "\"...");
- this.artifactName = artifactName;
- this.branch = branch;
- }
-
- @Override
- public IStatus run(IProgressMonitor monitor) {
- this.monitor = monitor;
- try {
- getMatrixItems();
- rd.report(TITLE + " - \"" + artifactName + "\"");
- return Status.OK_STATUS;
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, -1, ex.getMessage(), ex);
- }
- }
-
- private void getMatrixItems() throws OseeCoreException {
- final Collection<Artifact> srchArts =
- ArtifactQuery.getArtifactListFromName("%" + artifactName + "%", branch, INCLUDE_DELETED);
- final Set<Artifact> processArts = new HashSet<Artifact>();
- if (srchArts.isEmpty()) {
- return;
- }
- if (srchArts.size() > 1) {
- Displays.pendInDisplayThread(new Runnable() {
- @Override
- public void run() {
- ArtifactCheckTreeDialog dialog = new ArtifactCheckTreeDialog(srchArts);
- dialog.setTitle(TITLE);
- dialog.setMessage("Select Artifacts to Search");
- if (dialog.open() == 0) {
- processArts.addAll(dialog.getSelection());
- }
- }
- });
-
- } else {
- processArts.addAll(srchArts);
- }
- int x = 1;
- rd.log("Artifact Impact to Action for artifact(s) on branch \"" + branch.getShortName() + "\"");
-
- HashCollection<Artifact, TransactionRecord> transactionMap =
- ChangeManager.getModifingTransactions(processArts);
- HashCollection<Artifact, Branch> branchMap = ChangeManager.getModifingBranches(processArts);
- for (Artifact srchArt : processArts) {
- String str = String.format("Processing %d/%d - %s ", x++, processArts.size(), srchArt.getName());
- System.out.println(str);
- rd.log("\n" + AHTML.bold(srchArt.getName()));
- monitor.subTask(str);
- int y = 1;
- rd.addRaw(AHTML.beginMultiColumnTable(95, 1));
- rd.addRaw(AHTML.addHeaderRowMultiColumnTable(new String[] {"Type", "Status", "HRID", "Title"}));
-
- // Check for changes on working branches
- boolean workingBranchesFound = false;
-
- Collection<Branch> branches = branchMap.getValues(srchArt);
- if (branches != null) {
- for (Branch branch : branches) {
- Artifact assocArt = BranchManager.getAssociatedArtifact(branch);
- if (assocArt != null && !assocArt.equals(UserManager.getUser(SystemUser.OseeSystem))) {
- rd.addRaw(AHTML.addRowMultiColumnTable(new String[] {assocArt.getArtifactTypeName(), "Working",
- XResultData.getHyperlink(assocArt), assocArt.getName()}));
- } else {
- rd.addRaw(AHTML.addRowMultiColumnTable(new String[] {"Branch", "", branch.getName()}));
- }
- workingBranchesFound = true;
- }
- }
- if (!workingBranchesFound) {
- rd.addRaw(AHTML.addRowSpanMultiColumnTable("No Impacting Working Branches Found", 3));
- }
- // Add committed changes
- boolean committedChanges = false;
- Collection<TransactionRecord> transactions = transactionMap.getValues(srchArt);
- if (transactions != null) {
- for (TransactionRecord transactionId : transactions) {
- String transStr = String.format("Tranaction %d/%d", y++, transactions.size());
- System.out.println(transStr);
- monitor.subTask(transStr);
- if (transactionId.getCommit() > 0) {
- Artifact assocArt =
- ArtifactQuery.getArtifactFromId(transactionId.getCommit(), BranchManager.getCommonBranch());
- if (assocArt instanceof TeamWorkFlowArtifact) {
- rd.addRaw(AHTML.addRowMultiColumnTable(new String[] {assocArt.getArtifactTypeName(),
- "Committed", assocArt.getHumanReadableId(), assocArt.getName()}));
- committedChanges = true;
- }
- }
- }
- }
- if (!committedChanges) {
- rd.addRaw(AHTML.addRowSpanMultiColumnTable("No Impacting Actions Found", 3));
- }
- rd.addRaw(AHTML.endMultiColumnTable());
- }
- }
- }
-}
+/******************************************************************************* + * 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.navigate; + +import static org.eclipse.osee.framework.skynet.core.artifact.DeletionFlag.INCLUDE_DELETED; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.logging.Level; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.framework.core.data.SystemUser; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.TransactionRecord; +import org.eclipse.osee.framework.jdk.core.type.HashCollection; +import org.eclipse.osee.framework.jdk.core.util.AHTML; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.UserManager; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.BranchManager; +import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; +import org.eclipse.osee.framework.skynet.core.revision.ChangeManager; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction; +import org.eclipse.osee.framework.ui.skynet.FrameworkImage; +import org.eclipse.osee.framework.ui.skynet.results.XResultData; +import org.eclipse.osee.framework.ui.skynet.widgets.dialog.ArtifactCheckTreeDialog; +import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialogWithBranchSelect; +import org.eclipse.osee.framework.ui.swt.Displays; + +/** + * @author Donald G. Dunne + */ +public class ArtifactImpactToActionSearchItem extends XNavigateItemAction { + + private static String TITLE = "Search Artifact Impact to Action"; + + public ArtifactImpactToActionSearchItem(XNavigateItem parent) { + super(parent, TITLE, FrameworkImage.FLASHLIGHT); + } + + @Override + public void run(TableLoadOption... tableLoadOptions) { + EntryDialogWithBranchSelect ed = + new EntryDialogWithBranchSelect(getName(), "Enter Artifact Name (or string) to search (no wildcards)"); + if (ed.open() == 0) { + ActionToArtifactImpactJob job = new ActionToArtifactImpactJob(ed.getEntry(), ed.getBranch()); + job.setUser(true); + job.setPriority(Job.LONG); + job.schedule(); + } + } + + public static class ActionToArtifactImpactJob extends Job { + private IProgressMonitor monitor; + private final String artifactName; + private final XResultData rd = new XResultData(); + private final Branch branch; + + public ActionToArtifactImpactJob(String artifactName, Branch branch) { + super("Searching \"" + artifactName + "\"..."); + this.artifactName = artifactName; + this.branch = branch; + } + + @Override + public IStatus run(IProgressMonitor monitor) { + this.monitor = monitor; + try { + getMatrixItems(); + rd.report(TITLE + " - \"" + artifactName + "\""); + return Status.OK_STATUS; + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, -1, ex.getMessage(), ex); + } + } + + private void getMatrixItems() throws OseeCoreException { + final Collection<Artifact> srchArts = + ArtifactQuery.getArtifactListFromName("%" + artifactName + "%", branch, INCLUDE_DELETED); + final Set<Artifact> processArts = new HashSet<Artifact>(); + if (srchArts.isEmpty()) { + return; + } + if (srchArts.size() > 1) { + Displays.pendInDisplayThread(new Runnable() { + @Override + public void run() { + ArtifactCheckTreeDialog dialog = new ArtifactCheckTreeDialog(srchArts); + dialog.setTitle(TITLE); + dialog.setMessage("Select Artifacts to Search"); + if (dialog.open() == 0) { + processArts.addAll(dialog.getSelection()); + } + } + }); + + } else { + processArts.addAll(srchArts); + } + int x = 1; + rd.log("Artifact Impact to Action for artifact(s) on branch \"" + branch.getShortName() + "\""); + + HashCollection<Artifact, TransactionRecord> transactionMap = + ChangeManager.getModifingTransactions(processArts); + HashCollection<Artifact, Branch> branchMap = ChangeManager.getModifingBranches(processArts); + for (Artifact srchArt : processArts) { + String str = String.format("Processing %d/%d - %s ", x++, processArts.size(), srchArt.getName()); + System.out.println(str); + rd.log("\n" + AHTML.bold(srchArt.getName())); + monitor.subTask(str); + int y = 1; + rd.addRaw(AHTML.beginMultiColumnTable(95, 1)); + rd.addRaw(AHTML.addHeaderRowMultiColumnTable(new String[] {"Type", "Status", "HRID", "Title"})); + + // Check for changes on working branches + boolean workingBranchesFound = false; + + Collection<Branch> branches = branchMap.getValues(srchArt); + if (branches != null) { + for (Branch branch : branches) { + Artifact assocArt = BranchManager.getAssociatedArtifact(branch); + if (assocArt != null && !assocArt.equals(UserManager.getUser(SystemUser.OseeSystem))) { + rd.addRaw(AHTML.addRowMultiColumnTable(new String[] { + assocArt.getArtifactTypeName(), + "Working", + XResultData.getHyperlink(assocArt), + assocArt.getName()})); + } else { + rd.addRaw(AHTML.addRowMultiColumnTable(new String[] {"Branch", "", branch.getName()})); + } + workingBranchesFound = true; + } + } + if (!workingBranchesFound) { + rd.addRaw(AHTML.addRowSpanMultiColumnTable("No Impacting Working Branches Found", 3)); + } + // Add committed changes + boolean committedChanges = false; + Collection<TransactionRecord> transactions = transactionMap.getValues(srchArt); + if (transactions != null) { + for (TransactionRecord transactionId : transactions) { + String transStr = String.format("Tranaction %d/%d", y++, transactions.size()); + System.out.println(transStr); + monitor.subTask(transStr); + if (transactionId.getCommit() > 0) { + Artifact assocArt = + ArtifactQuery.getArtifactFromId(transactionId.getCommit(), BranchManager.getCommonBranch()); + if (assocArt instanceof TeamWorkFlowArtifact) { + rd.addRaw(AHTML.addRowMultiColumnTable(new String[] { + assocArt.getArtifactTypeName(), + "Committed", + assocArt.getHumanReadableId(), + assocArt.getName()})); + committedChanges = true; + } + } + } + } + if (!committedChanges) { + rd.addRaw(AHTML.addRowSpanMultiColumnTable("No Impacting Actions Found", 3)); + } + rd.addRaw(AHTML.endMultiColumnTable()); + } + } + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsNavigateComposite.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsNavigateComposite.java index ee6d1e7ba4f..66c00f866a9 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsNavigateComposite.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsNavigateComposite.java @@ -1,69 +1,69 @@ -/*******************************************************************************
- * 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.navigate;
-
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.ui.plugin.OseeUiActivator;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateViewItems;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-
-/**
- * @author Donald G. Dunne
- */
-public class AtsNavigateComposite extends XNavigateComposite {
-
- public AtsNavigateComposite(XNavigateViewItems navigateViewItems, Composite parent, int style) {
- super(navigateViewItems, parent, style);
- Result result = OseeUiActivator.areOSEEServicesAvailable();
- if (result.isFalse()) {
- new Label(parent, SWT.NONE).setText(result.getText());
- return;
- }
- }
-
- @Override
- protected void handleDoubleClick() throws OseeCoreException {
- IStructuredSelection sel = (IStructuredSelection) filteredTree.getViewer().getSelection();
- if (!sel.iterator().hasNext()) {
- return;
- }
- XNavigateItem item = (XNavigateItem) sel.iterator().next();
- handleDoubleClick(item);
- }
-
- @Override
- protected void handleDoubleClick(XNavigateItem item, TableLoadOption... tableLoadOptions) throws OseeCoreException {
- super.disposeTooltip();
- if (item.getChildren().size() > 0) {
- filteredTree.getViewer().setExpandedState(item, true);
- }
- AtsXNavigateItemLauncher.handleDoubleClick(item, tableLoadOptions);
- }
-
- @Override
- public void refresh() {
- super.refresh();
- if (AtsUtil.isAtsAdmin()) {
- for (XNavigateItem item : getItems()) {
- if (item.getName().equals("Admin")) {
- filteredTree.getViewer().expandToLevel(item, 1);
- }
- }
- }
- }
-}
+/******************************************************************************* + * 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.navigate; + +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.ui.plugin.OseeUiActivator; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateViewItems; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; + +/** + * @author Donald G. Dunne + */ +public class AtsNavigateComposite extends XNavigateComposite { + + public AtsNavigateComposite(XNavigateViewItems navigateViewItems, Composite parent, int style) { + super(navigateViewItems, parent, style); + Result result = OseeUiActivator.areOSEEServicesAvailable(); + if (result.isFalse()) { + new Label(parent, SWT.NONE).setText(result.getText()); + return; + } + } + + @Override + protected void handleDoubleClick() throws OseeCoreException { + IStructuredSelection sel = (IStructuredSelection) filteredTree.getViewer().getSelection(); + if (!sel.iterator().hasNext()) { + return; + } + XNavigateItem item = (XNavigateItem) sel.iterator().next(); + handleDoubleClick(item); + } + + @Override + protected void handleDoubleClick(XNavigateItem item, TableLoadOption... tableLoadOptions) throws OseeCoreException { + super.disposeTooltip(); + if (item.getChildren().size() > 0) { + filteredTree.getViewer().setExpandedState(item, true); + } + AtsXNavigateItemLauncher.handleDoubleClick(item, tableLoadOptions); + } + + @Override + public void refresh() { + super.refresh(); + if (AtsUtil.isAtsAdmin()) { + for (XNavigateItem item : getItems()) { + if (item.getName().equals("Admin")) { + filteredTree.getViewer().expandToLevel(item, 1); + } + } + } + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsNavigateViewItems.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsNavigateViewItems.java index ffe80fd508e..3da099f744d 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsNavigateViewItems.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsNavigateViewItems.java @@ -1,367 +1,367 @@ -/*******************************************************************************
- * 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.navigate;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.ats.actions.NewAction;
-import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact;
-import org.eclipse.osee.ats.health.ValidateAtsDatabase;
-import org.eclipse.osee.ats.health.ValidateChangeReportByHrid;
-import org.eclipse.osee.ats.health.ValidateChangeReports;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.navigate.EmailTeamsItem.MemberType;
-import org.eclipse.osee.ats.notify.AtsNotificationNavigateItem;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.ats.util.AtsEditor;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.ats.util.DoesNotWorkItemAts;
-import org.eclipse.osee.ats.world.search.ActionableItemWorldSearchItem;
-import org.eclipse.osee.ats.world.search.ArtifactTypeSearchItem;
-import org.eclipse.osee.ats.world.search.ArtifactTypeWithInheritenceSearchItem;
-import org.eclipse.osee.ats.world.search.GoalSearchItem;
-import org.eclipse.osee.ats.world.search.GroupWorldSearchItem;
-import org.eclipse.osee.ats.world.search.MultipleHridSearchData;
-import org.eclipse.osee.ats.world.search.MultipleHridSearchOperation;
-import org.eclipse.osee.ats.world.search.MyFavoritesGoalsSearchItem;
-import org.eclipse.osee.ats.world.search.MyFavoritesSearchItem;
-import org.eclipse.osee.ats.world.search.MyGoalWorkflowItem;
-import org.eclipse.osee.ats.world.search.MyGoalWorkflowItem.GoalSearchState;
-import org.eclipse.osee.ats.world.search.MyReviewWorkflowItem;
-import org.eclipse.osee.ats.world.search.MyReviewWorkflowItem.ReviewState;
-import org.eclipse.osee.ats.world.search.MySubscribedSearchItem;
-import org.eclipse.osee.ats.world.search.MyWorldSearchItem;
-import org.eclipse.osee.ats.world.search.NextVersionSearchItem;
-import org.eclipse.osee.ats.world.search.ShowOpenWorkflowsByArtifactType;
-import org.eclipse.osee.ats.world.search.StateWorldSearchItem;
-import org.eclipse.osee.ats.world.search.TaskSearchWorldSearchItem;
-import org.eclipse.osee.ats.world.search.UserCommunitySearchItem;
-import org.eclipse.osee.ats.world.search.UserRelatedToAtsObjectSearch;
-import org.eclipse.osee.ats.world.search.VersionTargetedForTeamSearchItem;
-import org.eclipse.osee.ats.world.search.WorldSearchItem.LoadView;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.core.operation.IOperation;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.UserManager;
-import org.eclipse.osee.framework.ui.plugin.OseeUiActivator;
-import org.eclipse.osee.framework.ui.plugin.PluginUiImage;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.IOperationFactory;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateContributionManager;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateExtensionPointData;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemFolder;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemOperation;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateViewItems;
-import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
-import org.eclipse.osee.framework.ui.skynet.action.CompareTwoStringsAction;
-import org.eclipse.osee.framework.ui.skynet.artifact.MassEditDirtyArtifactOperation;
-import org.eclipse.osee.framework.ui.skynet.blam.BlamContributionManager;
-import org.eclipse.osee.framework.ui.skynet.results.example.ResultsEditorExample;
-import org.eclipse.osee.framework.ui.skynet.results.example.XResultDataExample;
-import org.eclipse.osee.framework.ui.skynet.results.example.XViewerExample;
-import org.eclipse.osee.framework.ui.skynet.util.email.EmailUserGroups;
-import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryCheckDialog;
-import org.osgi.framework.Bundle;
-
-/**
- * @author Donald G. Dunne
- */
-public class AtsNavigateViewItems extends XNavigateViewItems {
- private static AtsNavigateViewItems navigateItems = new AtsNavigateViewItems();
- private List<XNavigateItem> items;
-
- public AtsNavigateViewItems() {
- super();
- }
-
- public static AtsNavigateViewItems getInstance() {
- return navigateItems;
- }
-
- @Override
- public List<XNavigateItem> getSearchNavigateItems() {
- if (items == null) {
- items = getItems();
- }
- return items;
- }
-
- private List<XNavigateItem> getItems() {
- List<XNavigateItem> items = new ArrayList<XNavigateItem>();
-
- if (OseeUiActivator.areOSEEServicesAvailable().isFalse()) {
- return items;
- }
-
- try {
- User user = UserManager.getUser();
-
- items.add(new SearchNavigateItem(null, new MyWorldSearchItem("My World", user)));
- items.add(new SearchNavigateItem(null, new MyFavoritesSearchItem("My Favorites", user)));
- items.add(new SearchNavigateItem(null, new MySubscribedSearchItem("My Subscribed", user)));
- items.add(new SearchNavigateItem(null, new MyGoalWorkflowItem("My Goals", user, GoalSearchState.InWork)));
- items.add(new SearchNavigateItem(null, new MyReviewWorkflowItem("My Reviews", user, ReviewState.InWork)));
- items.add(new VisitedItems(null));
- items.add(new XNavigateItemAction(null, new NewAction(), AtsImage.NEW_ACTION));
- items.add(new SearchNavigateItem(null, new MyWorldSearchItem("User's World")));
-
- items.add(new SearchNavigateItem(null, new UserSearchWorkflowSearchItem()));
- items.add(new SearchNavigateItem(null, new TaskSearchWorldSearchItem()));
- items.add(new SearchNavigateItem(null, new GroupWorldSearchItem((Branch) null)));
- items.add(new SearchNavigateItem(null, new TeamWorkflowSearchWorkflowSearchItem()));
- items.add(new SearchNavigateItem(null, new UserCommunitySearchItem()));
- items.add(new SearchNavigateItem(null, new ActionableItemWorldSearchItem(null, "Actionable Item Search",
- false, false, false)));
-
- createGoalsSection(items);
- createVersionsSection(items);
- addExtensionPointItems(items);
- createReviewsSection(items);
-
- XNavigateItem stateItems = new XNavigateItem(null, "States", AtsImage.STATE);
- new SearchNavigateItem(stateItems, new StateWorldSearchItem());
- new SearchNavigateItem(stateItems, new StateWorldSearchItem("Search for Authorize Actions", "Authorize"));
- items.add(stateItems);
-
- // Search Items
- items.add(new XNavigateItemOperation(null, FrameworkImage.BRANCH_CHANGE, "Open Change Report(s) by ID(s)",
- new MultipleHridSearchOperationFactory("Open Change Report(s) by ID(s)", AtsEditor.ChangeReport)));
- items.add(new XNavigateItemOperation(null, AtsImage.OPEN_BY_ID, "Search by ID(s) - Open World Editor",
- new MultipleHridSearchOperationFactory("Search by ID(s) - Open World Editor", AtsEditor.WorldEditor)));
- items.add(new XNavigateItemOperation(null, AtsImage.WORKFLOW_CONFIG, "Search by ID(s) - Open Workflow Editor",
- new MultipleHridSearchOperationFactory("Search by ID(s) - Open Workflow Editor", AtsEditor.WorkflowEditor)));
- items.add(new XNavigateItemOperation(null, AtsImage.GLOBE, "Quick Search", new IOperationFactory() {
-
- @Override
- public IOperation createOperation() {
- EntryCheckDialog dialog =
- new EntryCheckDialog("Search by Strings", "Enter search strings",
- "Include Completed/Cancelled Workflows");
- if (dialog.open() == 0) {
- return new AtsQuickSearchOperation(new AtsQuickSearchData("Search by Strings", dialog.getEntry(),
- dialog.isChecked()));
- }
- return null;
- }
- }));
-
- items.add(new ArtifactImpactToActionSearchItem(null));
-
- XNavigateItem reportItems = new XNavigateItem(null, "Reports", AtsImage.REPORT);
- new FirstTimeQualityMetricReportItem(reportItems);
- new XNavigateItem(reportItems, "ATS World Reports - Input from Actions in ATS World", AtsImage.REPORT);
- new BarChartExample(reportItems);
- new ResultsEditorExample(reportItems);
- new CompareEditorExample(reportItems);
- new XViewerExample(reportItems);
- new XResultDataExample(reportItems);
- // new ExtendedStatusReportItem(atsReportItems, "ATS World Extended Status Report");
-
- XNavigateItem emailItems = new XNavigateItem(null, "Email & Notifications", FrameworkImage.EMAIL);
- new EmailTeamsItem(emailItems, null, MemberType.Both);
- new EmailTeamsItem(emailItems, null, MemberType.Leads);
- new EmailTeamsItem(emailItems, null, MemberType.Members);
- new EmailUserGroups(emailItems);
- new SubscribeByActionableItem(emailItems);
- new SubscribeByTeamDefinition(emailItems);
- items.add(emailItems);
-
- items.add(reportItems);
-
- XNavigateItem utilItems = new XNavigateItem(null, "Util", FrameworkImage.GEAR);
- new ImportActionsViaSpreadsheet(utilItems);
- new XNavigateItemAction(utilItems, new CompareTwoStringsAction(), FrameworkImage.EDIT);
- new GenerateGuid(utilItems);
- new XNavigateItemOperation(utilItems, FrameworkImage.GEAR, MassEditDirtyArtifactOperation.NAME,
- new MassEditDirtyArtifactOperation());
-
- items.add(utilItems);
-
- BlamContributionManager.addBlamOperationsToNavigator(items);
-
- if (AtsUtil.isAtsAdmin()) {
- XNavigateItem adminItems = new XNavigateItem(null, "Admin", PluginUiImage.ADMIN);
-
- new AtsNotificationNavigateItem(adminItems);
- new AtsNotificationNavigateItem(adminItems, true);
- new UpdateAtsWorkItemDefinitions(adminItems);
- new DisplayCurrentOseeEventListeners(adminItems);
- new AtsRemoteEventTestItem(adminItems);
-
- new SearchNavigateItem(adminItems, new UserRelatedToAtsObjectSearch(
- "User's All Related Objects - Admin Only", null, false, LoadView.WorldEditor));
- new SearchNavigateItem(adminItems, new UserRelatedToAtsObjectSearch(
- "User's All Active Related Objects - Admin Only", null, true, LoadView.WorldEditor));
-
- new SearchNavigateItem(adminItems, new ArtifactTypeSearchItem("Show all Actions", AtsArtifactTypes.Action));
- new SearchNavigateItem(adminItems, new ArtifactTypeSearchItem("Show all Decision Review",
- AtsArtifactTypes.DecisionReview));
- new SearchNavigateItem(adminItems, new ArtifactTypeSearchItem("Show all PeerToPeer Review",
- AtsArtifactTypes.PeerToPeerReview));
- new SearchNavigateItem(adminItems, new ArtifactTypeWithInheritenceSearchItem("Show all Team Workflows",
- AtsArtifactTypes.TeamWorkflow));
- new SearchNavigateItem(adminItems, new ArtifactTypeSearchItem("Show all Tasks", AtsArtifactTypes.Task));
- new CreateGoalTestArtifacts(adminItems);
-
- new DoesNotWorkItemAts(adminItems);
-
- XNavigateItem healthItems = new XNavigateItemFolder(adminItems, "Health");
- new ValidateAtsDatabase(healthItems);
- new ValidateChangeReports(healthItems);
- new ValidateChangeReportByHrid(healthItems);
-
- // new ActionNavigateItem(adminItems, new XViewerViewAction());
- // new ActionNavigateItem(adminItems, new OpenEditorAction());
- // new CreateBugFixesItem(adminItems);
-
- XNavigateItem extra = new XNavigateItemFolder(adminItems, "Other");
- Set<XNavigateExtensionPointData> extraItems =
- XNavigateContributionManager.getNavigateItems(NavigateView.VIEW_ID);
- for (XNavigateExtensionPointData extraItem : extraItems) {
- for (XNavigateItem navigateItem : extraItem.getNavigateItems()) {
- extra.addChild(navigateItem);
- }
- }
-
- items.add(adminItems);
- }
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return items;
- }
-
- return items;
- }
-
- public void createReviewsSection(List<XNavigateItem> items) {
- try {
- XNavigateItem reviewItem = new XNavigateItem(null, "Reviews", AtsImage.REVIEW);
- new SearchNavigateItem(reviewItem, new ShowOpenWorkflowsByArtifactType(
- "Show Open " + AtsArtifactTypes.DecisionReview.getName() + "s", AtsArtifactTypes.DecisionReview, false,
- false, AtsImage.REVIEW));
- new SearchNavigateItem(reviewItem, new ShowOpenWorkflowsByArtifactType(
- "Show Workflows Waiting " + AtsArtifactTypes.DecisionReview.getName() + "s",
- AtsArtifactTypes.DecisionReview, false, true, AtsImage.REVIEW));
- new SearchNavigateItem(reviewItem, new ShowOpenWorkflowsByArtifactType(
- "Show Open " + AtsArtifactTypes.PeerToPeerReview.getName() + "s", AtsArtifactTypes.PeerToPeerReview, false,
- false, AtsImage.REVIEW));
- new SearchNavigateItem(reviewItem, new ShowOpenWorkflowsByArtifactType(
- "Show Workflows Waiting " + AtsArtifactTypes.PeerToPeerReview.getName() + "s",
- AtsArtifactTypes.PeerToPeerReview, false, true, AtsImage.REVIEW));
- new NewPeerToPeerReviewItem(reviewItem);
- new GenerateReviewParticipationReport(reviewItem);
- items.add(reviewItem);
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, "Can't create Goals section");
- }
- }
-
- public void createVersionsSection(List<XNavigateItem> items) {
- try {
- XNavigateItem releaseItems = new XNavigateItem(null, "Versions", FrameworkImage.VERSION);
- new MassEditTeamVersionItem("Team Versions", releaseItems, (TeamDefinitionArtifact) null,
- FrameworkImage.VERSION);
- new SearchNavigateItem(releaseItems, new VersionTargetedForTeamSearchItem(null, null, false,
- LoadView.WorldEditor));
- new SearchNavigateItem(releaseItems, new NextVersionSearchItem(null, LoadView.WorldEditor));
- new ReleaseVersionItem(releaseItems, null);
- new CreateNewVersionItem(releaseItems, null);
- new GenerateVersionReportItem(releaseItems);
- new GenerateFullVersionReportItem(releaseItems);
- items.add(releaseItems);
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, "Can't create Goals section");
- }
- }
-
- public void createGoalsSection(List<XNavigateItem> items) {
- try {
- XNavigateItem goalItem = new XNavigateItem(null, "Goals", AtsImage.GOAL);
- new SearchNavigateItem(goalItem, new GoalSearchItem("InWork Goals", new ArrayList<TeamDefinitionArtifact>(),
- false, null));
- new SearchNavigateItem(goalItem, new GoalSearchWorkflowSearchItem());
- new SearchNavigateItem(goalItem, new MyFavoritesGoalsSearchItem("Favorites", UserManager.getUser()));
- items.add(goalItem);
- } catch (OseeCoreException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, "Can't create Goals section");
- }
- }
-
- public void addExtensionPointItems(List<XNavigateItem> items) {
- IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.osee.ats.AtsNavigateItem");
- if (point == null) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Can't access AtsNavigateItem extension point");
- return;
- }
- IExtension[] extensions = point.getExtensions();
- Map<String, XNavigateItem> nameToNavItem = new HashMap<String, XNavigateItem>();
- for (IExtension extension : extensions) {
- IConfigurationElement[] elements = extension.getConfigurationElements();
- String classname = null;
- String bundleName = null;
- for (IConfigurationElement el : elements) {
- if (el.getName().equals("AtsNavigateItem")) {
- classname = el.getAttribute("classname");
- bundleName = el.getContributor().getName();
- }
- }
- if (classname != null && bundleName != null) {
- Bundle bundle = Platform.getBundle(bundleName);
- try {
- Object obj = bundle.loadClass(classname).newInstance();
- IAtsNavigateItem task = (IAtsNavigateItem) obj;
- for (XNavigateItem navItem : task.getNavigateItems()) {
- nameToNavItem.put(navItem.getName(), navItem);
- }
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, "Error loading AtsNavigateItem extension", ex);
- }
- }
- }
- // Put in alpha order
- String[] names = nameToNavItem.keySet().toArray(new String[nameToNavItem.size()]);
- Arrays.sort(names);
- for (String name : names) {
- items.add(nameToNavItem.get(name));
- }
- }
-
- private static final class MultipleHridSearchOperationFactory implements IOperationFactory {
-
- private final AtsEditor atsEditor;
- private final String operationName;
-
- public MultipleHridSearchOperationFactory(String operationName, AtsEditor atsEditor) {
- this.operationName = operationName;
- this.atsEditor = atsEditor;
- }
-
- @Override
- public IOperation createOperation() {
- return new MultipleHridSearchOperation(new MultipleHridSearchData(operationName, atsEditor));
- }
- }
-}
+/******************************************************************************* + * 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.navigate; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.logging.Level; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExtension; +import org.eclipse.core.runtime.IExtensionPoint; +import org.eclipse.core.runtime.Platform; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.actions.NewAction; +import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact; +import org.eclipse.osee.ats.health.ValidateAtsDatabase; +import org.eclipse.osee.ats.health.ValidateChangeReportByHrid; +import org.eclipse.osee.ats.health.ValidateChangeReports; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.navigate.EmailTeamsItem.MemberType; +import org.eclipse.osee.ats.notify.AtsNotificationNavigateItem; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.ats.util.AtsEditor; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.ats.util.DoesNotWorkItemAts; +import org.eclipse.osee.ats.world.search.ActionableItemWorldSearchItem; +import org.eclipse.osee.ats.world.search.ArtifactTypeSearchItem; +import org.eclipse.osee.ats.world.search.ArtifactTypeWithInheritenceSearchItem; +import org.eclipse.osee.ats.world.search.GoalSearchItem; +import org.eclipse.osee.ats.world.search.GroupWorldSearchItem; +import org.eclipse.osee.ats.world.search.MultipleHridSearchData; +import org.eclipse.osee.ats.world.search.MultipleHridSearchOperation; +import org.eclipse.osee.ats.world.search.MyFavoritesGoalsSearchItem; +import org.eclipse.osee.ats.world.search.MyFavoritesSearchItem; +import org.eclipse.osee.ats.world.search.MyGoalWorkflowItem; +import org.eclipse.osee.ats.world.search.MyGoalWorkflowItem.GoalSearchState; +import org.eclipse.osee.ats.world.search.MyReviewWorkflowItem; +import org.eclipse.osee.ats.world.search.MyReviewWorkflowItem.ReviewState; +import org.eclipse.osee.ats.world.search.MySubscribedSearchItem; +import org.eclipse.osee.ats.world.search.MyWorldSearchItem; +import org.eclipse.osee.ats.world.search.NextVersionSearchItem; +import org.eclipse.osee.ats.world.search.ShowOpenWorkflowsByArtifactType; +import org.eclipse.osee.ats.world.search.StateWorldSearchItem; +import org.eclipse.osee.ats.world.search.TaskSearchWorldSearchItem; +import org.eclipse.osee.ats.world.search.UserCommunitySearchItem; +import org.eclipse.osee.ats.world.search.UserRelatedToAtsObjectSearch; +import org.eclipse.osee.ats.world.search.VersionTargetedForTeamSearchItem; +import org.eclipse.osee.ats.world.search.WorldSearchItem.LoadView; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.operation.IOperation; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.UserManager; +import org.eclipse.osee.framework.ui.plugin.OseeUiActivator; +import org.eclipse.osee.framework.ui.plugin.PluginUiImage; +import org.eclipse.osee.framework.ui.plugin.xnavigate.IOperationFactory; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateContributionManager; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateExtensionPointData; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemFolder; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemOperation; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateViewItems; +import org.eclipse.osee.framework.ui.skynet.FrameworkImage; +import org.eclipse.osee.framework.ui.skynet.action.CompareTwoStringsAction; +import org.eclipse.osee.framework.ui.skynet.artifact.MassEditDirtyArtifactOperation; +import org.eclipse.osee.framework.ui.skynet.blam.BlamContributionManager; +import org.eclipse.osee.framework.ui.skynet.results.example.ResultsEditorExample; +import org.eclipse.osee.framework.ui.skynet.results.example.XResultDataExample; +import org.eclipse.osee.framework.ui.skynet.results.example.XViewerExample; +import org.eclipse.osee.framework.ui.skynet.util.email.EmailUserGroups; +import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryCheckDialog; +import org.osgi.framework.Bundle; + +/** + * @author Donald G. Dunne + */ +public class AtsNavigateViewItems extends XNavigateViewItems { + private static AtsNavigateViewItems navigateItems = new AtsNavigateViewItems(); + private List<XNavigateItem> items; + + public AtsNavigateViewItems() { + super(); + } + + public static AtsNavigateViewItems getInstance() { + return navigateItems; + } + + @Override + public List<XNavigateItem> getSearchNavigateItems() { + if (items == null) { + items = getItems(); + } + return items; + } + + private List<XNavigateItem> getItems() { + List<XNavigateItem> items = new ArrayList<XNavigateItem>(); + + if (OseeUiActivator.areOSEEServicesAvailable().isFalse()) { + return items; + } + + try { + User user = UserManager.getUser(); + + items.add(new SearchNavigateItem(null, new MyWorldSearchItem("My World", user))); + items.add(new SearchNavigateItem(null, new MyFavoritesSearchItem("My Favorites", user))); + items.add(new SearchNavigateItem(null, new MySubscribedSearchItem("My Subscribed", user))); + items.add(new SearchNavigateItem(null, new MyGoalWorkflowItem("My Goals", user, GoalSearchState.InWork))); + items.add(new SearchNavigateItem(null, new MyReviewWorkflowItem("My Reviews", user, ReviewState.InWork))); + items.add(new VisitedItems(null)); + items.add(new XNavigateItemAction(null, new NewAction(), AtsImage.NEW_ACTION)); + items.add(new SearchNavigateItem(null, new MyWorldSearchItem("User's World"))); + + items.add(new SearchNavigateItem(null, new UserSearchWorkflowSearchItem())); + items.add(new SearchNavigateItem(null, new TaskSearchWorldSearchItem())); + items.add(new SearchNavigateItem(null, new GroupWorldSearchItem((Branch) null))); + items.add(new SearchNavigateItem(null, new TeamWorkflowSearchWorkflowSearchItem())); + items.add(new SearchNavigateItem(null, new UserCommunitySearchItem())); + items.add(new SearchNavigateItem(null, new ActionableItemWorldSearchItem(null, "Actionable Item Search", + false, false, false))); + + createGoalsSection(items); + createVersionsSection(items); + addExtensionPointItems(items); + createReviewsSection(items); + + XNavigateItem stateItems = new XNavigateItem(null, "States", AtsImage.STATE); + new SearchNavigateItem(stateItems, new StateWorldSearchItem()); + new SearchNavigateItem(stateItems, new StateWorldSearchItem("Search for Authorize Actions", "Authorize")); + items.add(stateItems); + + // Search Items + items.add(new XNavigateItemOperation(null, FrameworkImage.BRANCH_CHANGE, "Open Change Report(s) by ID(s)", + new MultipleHridSearchOperationFactory("Open Change Report(s) by ID(s)", AtsEditor.ChangeReport))); + items.add(new XNavigateItemOperation(null, AtsImage.OPEN_BY_ID, "Search by ID(s) - Open World Editor", + new MultipleHridSearchOperationFactory("Search by ID(s) - Open World Editor", AtsEditor.WorldEditor))); + items.add(new XNavigateItemOperation(null, AtsImage.WORKFLOW_CONFIG, "Search by ID(s) - Open Workflow Editor", + new MultipleHridSearchOperationFactory("Search by ID(s) - Open Workflow Editor", AtsEditor.WorkflowEditor))); + items.add(new XNavigateItemOperation(null, AtsImage.GLOBE, "Quick Search", new IOperationFactory() { + + @Override + public IOperation createOperation() { + EntryCheckDialog dialog = + new EntryCheckDialog("Search by Strings", "Enter search strings", + "Include Completed/Cancelled Workflows"); + if (dialog.open() == 0) { + return new AtsQuickSearchOperation(new AtsQuickSearchData("Search by Strings", dialog.getEntry(), + dialog.isChecked())); + } + return null; + } + })); + + items.add(new ArtifactImpactToActionSearchItem(null)); + + XNavigateItem reportItems = new XNavigateItem(null, "Reports", AtsImage.REPORT); + new FirstTimeQualityMetricReportItem(reportItems); + new XNavigateItem(reportItems, "ATS World Reports - Input from Actions in ATS World", AtsImage.REPORT); + new BarChartExample(reportItems); + new ResultsEditorExample(reportItems); + new CompareEditorExample(reportItems); + new XViewerExample(reportItems); + new XResultDataExample(reportItems); + // new ExtendedStatusReportItem(atsReportItems, "ATS World Extended Status Report"); + + XNavigateItem emailItems = new XNavigateItem(null, "Email & Notifications", FrameworkImage.EMAIL); + new EmailTeamsItem(emailItems, null, MemberType.Both); + new EmailTeamsItem(emailItems, null, MemberType.Leads); + new EmailTeamsItem(emailItems, null, MemberType.Members); + new EmailUserGroups(emailItems); + new SubscribeByActionableItem(emailItems); + new SubscribeByTeamDefinition(emailItems); + items.add(emailItems); + + items.add(reportItems); + + XNavigateItem utilItems = new XNavigateItem(null, "Util", FrameworkImage.GEAR); + new ImportActionsViaSpreadsheet(utilItems); + new XNavigateItemAction(utilItems, new CompareTwoStringsAction(), FrameworkImage.EDIT); + new GenerateGuid(utilItems); + new XNavigateItemOperation(utilItems, FrameworkImage.GEAR, MassEditDirtyArtifactOperation.NAME, + new MassEditDirtyArtifactOperation()); + + items.add(utilItems); + + BlamContributionManager.addBlamOperationsToNavigator(items); + + if (AtsUtil.isAtsAdmin()) { + XNavigateItem adminItems = new XNavigateItem(null, "Admin", PluginUiImage.ADMIN); + + new AtsNotificationNavigateItem(adminItems); + new AtsNotificationNavigateItem(adminItems, true); + new UpdateAtsWorkItemDefinitions(adminItems); + new DisplayCurrentOseeEventListeners(adminItems); + new AtsRemoteEventTestItem(adminItems); + + new SearchNavigateItem(adminItems, new UserRelatedToAtsObjectSearch( + "User's All Related Objects - Admin Only", null, false, LoadView.WorldEditor)); + new SearchNavigateItem(adminItems, new UserRelatedToAtsObjectSearch( + "User's All Active Related Objects - Admin Only", null, true, LoadView.WorldEditor)); + + new SearchNavigateItem(adminItems, new ArtifactTypeSearchItem("Show all Actions", AtsArtifactTypes.Action)); + new SearchNavigateItem(adminItems, new ArtifactTypeSearchItem("Show all Decision Review", + AtsArtifactTypes.DecisionReview)); + new SearchNavigateItem(adminItems, new ArtifactTypeSearchItem("Show all PeerToPeer Review", + AtsArtifactTypes.PeerToPeerReview)); + new SearchNavigateItem(adminItems, new ArtifactTypeWithInheritenceSearchItem("Show all Team Workflows", + AtsArtifactTypes.TeamWorkflow)); + new SearchNavigateItem(adminItems, new ArtifactTypeSearchItem("Show all Tasks", AtsArtifactTypes.Task)); + new CreateGoalTestArtifacts(adminItems); + + new DoesNotWorkItemAts(adminItems); + + XNavigateItem healthItems = new XNavigateItemFolder(adminItems, "Health"); + new ValidateAtsDatabase(healthItems); + new ValidateChangeReports(healthItems); + new ValidateChangeReportByHrid(healthItems); + + // new ActionNavigateItem(adminItems, new XViewerViewAction()); + // new ActionNavigateItem(adminItems, new OpenEditorAction()); + // new CreateBugFixesItem(adminItems); + + XNavigateItem extra = new XNavigateItemFolder(adminItems, "Other"); + Set<XNavigateExtensionPointData> extraItems = + XNavigateContributionManager.getNavigateItems(NavigateView.VIEW_ID); + for (XNavigateExtensionPointData extraItem : extraItems) { + for (XNavigateItem navigateItem : extraItem.getNavigateItems()) { + extra.addChild(navigateItem); + } + } + + items.add(adminItems); + } + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + return items; + } + + return items; + } + + public void createReviewsSection(List<XNavigateItem> items) { + try { + XNavigateItem reviewItem = new XNavigateItem(null, "Reviews", AtsImage.REVIEW); + new SearchNavigateItem(reviewItem, new ShowOpenWorkflowsByArtifactType( + "Show Open " + AtsArtifactTypes.DecisionReview.getName() + "s", AtsArtifactTypes.DecisionReview, false, + false, AtsImage.REVIEW)); + new SearchNavigateItem(reviewItem, new ShowOpenWorkflowsByArtifactType( + "Show Workflows Waiting " + AtsArtifactTypes.DecisionReview.getName() + "s", + AtsArtifactTypes.DecisionReview, false, true, AtsImage.REVIEW)); + new SearchNavigateItem(reviewItem, new ShowOpenWorkflowsByArtifactType( + "Show Open " + AtsArtifactTypes.PeerToPeerReview.getName() + "s", AtsArtifactTypes.PeerToPeerReview, false, + false, AtsImage.REVIEW)); + new SearchNavigateItem(reviewItem, new ShowOpenWorkflowsByArtifactType( + "Show Workflows Waiting " + AtsArtifactTypes.PeerToPeerReview.getName() + "s", + AtsArtifactTypes.PeerToPeerReview, false, true, AtsImage.REVIEW)); + new NewPeerToPeerReviewItem(reviewItem); + new GenerateReviewParticipationReport(reviewItem); + items.add(reviewItem); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, "Can't create Goals section"); + } + } + + public void createVersionsSection(List<XNavigateItem> items) { + try { + XNavigateItem releaseItems = new XNavigateItem(null, "Versions", FrameworkImage.VERSION); + new MassEditTeamVersionItem("Team Versions", releaseItems, (TeamDefinitionArtifact) null, + FrameworkImage.VERSION); + new SearchNavigateItem(releaseItems, new VersionTargetedForTeamSearchItem(null, null, false, + LoadView.WorldEditor)); + new SearchNavigateItem(releaseItems, new NextVersionSearchItem(null, LoadView.WorldEditor)); + new ReleaseVersionItem(releaseItems, null); + new CreateNewVersionItem(releaseItems, null); + new GenerateVersionReportItem(releaseItems); + new GenerateFullVersionReportItem(releaseItems); + items.add(releaseItems); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, "Can't create Goals section"); + } + } + + public void createGoalsSection(List<XNavigateItem> items) { + try { + XNavigateItem goalItem = new XNavigateItem(null, "Goals", AtsImage.GOAL); + new SearchNavigateItem(goalItem, new GoalSearchItem("InWork Goals", new ArrayList<TeamDefinitionArtifact>(), + false, null)); + new SearchNavigateItem(goalItem, new GoalSearchWorkflowSearchItem()); + new SearchNavigateItem(goalItem, new MyFavoritesGoalsSearchItem("Favorites", UserManager.getUser())); + items.add(goalItem); + } catch (OseeCoreException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, "Can't create Goals section"); + } + } + + public void addExtensionPointItems(List<XNavigateItem> items) { + IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.osee.ats.AtsNavigateItem"); + if (point == null) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, "Can't access AtsNavigateItem extension point"); + return; + } + IExtension[] extensions = point.getExtensions(); + Map<String, XNavigateItem> nameToNavItem = new HashMap<String, XNavigateItem>(); + for (IExtension extension : extensions) { + IConfigurationElement[] elements = extension.getConfigurationElements(); + String classname = null; + String bundleName = null; + for (IConfigurationElement el : elements) { + if (el.getName().equals("AtsNavigateItem")) { + classname = el.getAttribute("classname"); + bundleName = el.getContributor().getName(); + } + } + if (classname != null && bundleName != null) { + Bundle bundle = Platform.getBundle(bundleName); + try { + Object obj = bundle.loadClass(classname).newInstance(); + IAtsNavigateItem task = (IAtsNavigateItem) obj; + for (XNavigateItem navItem : task.getNavigateItems()) { + nameToNavItem.put(navItem.getName(), navItem); + } + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, "Error loading AtsNavigateItem extension", ex); + } + } + } + // Put in alpha order + String[] names = nameToNavItem.keySet().toArray(new String[nameToNavItem.size()]); + Arrays.sort(names); + for (String name : names) { + items.add(nameToNavItem.get(name)); + } + } + + private static final class MultipleHridSearchOperationFactory implements IOperationFactory { + + private final AtsEditor atsEditor; + private final String operationName; + + public MultipleHridSearchOperationFactory(String operationName, AtsEditor atsEditor) { + this.operationName = operationName; + this.atsEditor = atsEditor; + } + + @Override + public IOperation createOperation() { + return new MultipleHridSearchOperation(new MultipleHridSearchData(operationName, atsEditor)); + } + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsQuickSearchData.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsQuickSearchData.java index 1e26d01f0f0..15d275ef5ec 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsQuickSearchData.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsQuickSearchData.java @@ -1,44 +1,44 @@ -/*******************************************************************************
- * 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.navigate;
-
-/**
- * @author Donald G. Dunne
- */
-public class AtsQuickSearchData {
- private final String searchStr;
- private boolean includeCompleteCancelled = false;
- private final String name;
-
- public AtsQuickSearchData(String name, String searchStr, boolean includeCompleteCancelled) {
- this.name = name;
- this.searchStr = searchStr;
- this.includeCompleteCancelled = includeCompleteCancelled;
- }
-
- public boolean isIncludeCompleteCancelled() {
- return includeCompleteCancelled;
- }
-
- public void setIncludeCompleteCancelled(boolean includeCompleteCancelled) {
- this.includeCompleteCancelled = includeCompleteCancelled;
- }
-
- public String getSearchStr() {
- return searchStr;
- }
-
- @Override
- public String toString() {
- return String.format("%s - [%s]%s", name, searchStr,
- includeCompleteCancelled ? " - Include Completed/Cancelled" : "");
- }
-}
+/******************************************************************************* + * 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.navigate; + +/** + * @author Donald G. Dunne + */ +public class AtsQuickSearchData { + private final String searchStr; + private boolean includeCompleteCancelled = false; + private final String name; + + public AtsQuickSearchData(String name, String searchStr, boolean includeCompleteCancelled) { + this.name = name; + this.searchStr = searchStr; + this.includeCompleteCancelled = includeCompleteCancelled; + } + + public boolean isIncludeCompleteCancelled() { + return includeCompleteCancelled; + } + + public void setIncludeCompleteCancelled(boolean includeCompleteCancelled) { + this.includeCompleteCancelled = includeCompleteCancelled; + } + + public String getSearchStr() { + return searchStr; + } + + @Override + public String toString() { + return String.format("%s - [%s]%s", name, searchStr, + includeCompleteCancelled ? " - Include Completed/Cancelled" : ""); + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsQuickSearchOperation.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsQuickSearchOperation.java index 37962035aee..378d6ac7a9d 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsQuickSearchOperation.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsQuickSearchOperation.java @@ -1,109 +1,109 @@ -/*******************************************************************************
- * 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.navigate;
-
-import static org.eclipse.osee.framework.skynet.core.artifact.DeletionFlag.EXCLUDE_DELETED;
-import java.util.HashSet;
-import java.util.Set;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.ats.world.IWorldEditorConsumer;
-import org.eclipse.osee.ats.world.WorldEditor;
-import org.eclipse.osee.ats.world.WorldEditorOperationProvider;
-import org.eclipse.osee.framework.core.exception.ArtifactDoesNotExist;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.operation.AbstractOperation;
-import org.eclipse.osee.framework.jdk.core.util.HumanReadableId;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
-import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
-
-/**
- * @author Donald G. Dunne
- */
-public class AtsQuickSearchOperation extends AbstractOperation implements IWorldEditorConsumer {
- Set<Artifact> allArtifacts = new HashSet<Artifact>();
- private final AtsQuickSearchData data;
- private WorldEditor worldEditor;
-
- public AtsQuickSearchOperation(AtsQuickSearchData data) {
- super(data.toString(), AtsPlugin.PLUGIN_ID);
- this.data = data;
- }
-
- @Override
- protected void doWork(IProgressMonitor monitor) throws OseeCoreException {
- if (!Strings.isValid(data.getSearchStr())) {
- AWorkbench.popup("Must Enter Search String");
- return;
- }
- if (worldEditor == null) {
- WorldEditor.open(new WorldEditorOperationProvider(new AtsQuickSearchOperation(data)));
- return;
- }
- for (String str : data.getSearchStr().split(", ")) {
- if (HumanReadableId.isValid(str)) {
- try {
- Artifact art = ArtifactQuery.getArtifactFromId(str, AtsUtil.getAtsBranch());
- if (art != null) {
- allArtifacts.add(art);
- }
- } catch (ArtifactDoesNotExist ex) {
- // do nothing
- }
- }
- }
- for (Artifact art : ArtifactQuery.getArtifactListFromAttributeKeywords(AtsUtil.getAtsBranch(),
- data.getSearchStr(), false, EXCLUDE_DELETED, false)) {
- // only ATS Artifacts
- if (art instanceof StateMachineArtifact) {
- StateMachineArtifact sma = (StateMachineArtifact) art;
- // default excludes canceled/completed
- if (data.isIncludeCompleteCancelled() == false) {
- if (!sma.isCancelledOrCompleted()) {
- allArtifacts.add(art);
- }
- } else {
- allArtifacts.add(art);
- }
- }
- }
- if (allArtifacts.isEmpty()) {
- AWorkbench.popup(getName(), getName() + "\n\nNo Results Found");
- } else if (worldEditor != null) {
- worldEditor.getWorldComposite().load(getName(), allArtifacts, TableLoadOption.None);
- }
- }
-
- @Override
- public String getName() {
- return data.toString();
- }
-
- public Set<Artifact> getAllArtifacts() {
- return allArtifacts;
- }
-
- @Override
- public WorldEditor getWorldEditor() {
- return worldEditor;
- }
-
- @Override
- public void setWorldEditor(WorldEditor worldEditor) {
- this.worldEditor = worldEditor;
- }
-
-}
+/******************************************************************************* + * 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.navigate; + +import static org.eclipse.osee.framework.skynet.core.artifact.DeletionFlag.EXCLUDE_DELETED; +import java.util.HashSet; +import java.util.Set; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.ats.world.IWorldEditorConsumer; +import org.eclipse.osee.ats.world.WorldEditor; +import org.eclipse.osee.ats.world.WorldEditorOperationProvider; +import org.eclipse.osee.framework.core.exception.ArtifactDoesNotExist; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.operation.AbstractOperation; +import org.eclipse.osee.framework.jdk.core.util.HumanReadableId; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; +import org.eclipse.osee.framework.ui.plugin.util.AWorkbench; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption; + +/** + * @author Donald G. Dunne + */ +public class AtsQuickSearchOperation extends AbstractOperation implements IWorldEditorConsumer { + Set<Artifact> allArtifacts = new HashSet<Artifact>(); + private final AtsQuickSearchData data; + private WorldEditor worldEditor; + + public AtsQuickSearchOperation(AtsQuickSearchData data) { + super(data.toString(), AtsPlugin.PLUGIN_ID); + this.data = data; + } + + @Override + protected void doWork(IProgressMonitor monitor) throws OseeCoreException { + if (!Strings.isValid(data.getSearchStr())) { + AWorkbench.popup("Must Enter Search String"); + return; + } + if (worldEditor == null) { + WorldEditor.open(new WorldEditorOperationProvider(new AtsQuickSearchOperation(data))); + return; + } + for (String str : data.getSearchStr().split(", ")) { + if (HumanReadableId.isValid(str)) { + try { + Artifact art = ArtifactQuery.getArtifactFromId(str, AtsUtil.getAtsBranch()); + if (art != null) { + allArtifacts.add(art); + } + } catch (ArtifactDoesNotExist ex) { + // do nothing + } + } + } + for (Artifact art : ArtifactQuery.getArtifactListFromAttributeKeywords(AtsUtil.getAtsBranch(), + data.getSearchStr(), false, EXCLUDE_DELETED, false)) { + // only ATS Artifacts + if (art instanceof StateMachineArtifact) { + StateMachineArtifact sma = (StateMachineArtifact) art; + // default excludes canceled/completed + if (data.isIncludeCompleteCancelled() == false) { + if (!sma.isCancelledOrCompleted()) { + allArtifacts.add(art); + } + } else { + allArtifacts.add(art); + } + } + } + if (allArtifacts.isEmpty()) { + AWorkbench.popup(getName(), getName() + "\n\nNo Results Found"); + } else if (worldEditor != null) { + worldEditor.getWorldComposite().load(getName(), allArtifacts, TableLoadOption.None); + } + } + + @Override + public String getName() { + return data.toString(); + } + + public Set<Artifact> getAllArtifacts() { + return allArtifacts; + } + + @Override + public WorldEditor getWorldEditor() { + return worldEditor; + } + + @Override + public void setWorldEditor(WorldEditor worldEditor) { + this.worldEditor = worldEditor; + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsRemoteEventTestItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsRemoteEventTestItem.java index 0480abe0a87..f5941874e28 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsRemoteEventTestItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsRemoteEventTestItem.java @@ -1,285 +1,288 @@ -/*******************************************************************************
- * 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.navigate;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.logging.Level;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.osee.ats.AtsOpenOption;
-import org.eclipse.osee.ats.actions.wizard.NewActionJob;
-import org.eclipse.osee.ats.artifact.ActionArtifact;
-import org.eclipse.osee.ats.artifact.ActionableItemArtifact;
-import org.eclipse.osee.ats.artifact.AtsAttributeTypes;
-import org.eclipse.osee.ats.artifact.StateMachineArtifact.TransitionOption;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact.DefaultTeamState;
-import org.eclipse.osee.ats.artifact.VersionArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.ats.util.AtsPriority.PriorityType;
-import org.eclipse.osee.ats.util.AtsRelationTypes;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.ats.world.WorldXNavigateItemAction;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.UserManager;
-import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
-import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
-import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
-import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
-import org.eclipse.osee.framework.ui.skynet.results.XResultData;
-import org.eclipse.osee.framework.ui.skynet.util.ChangeType;
-import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
-import org.eclipse.osee.framework.ui.swt.Displays;
-
-/**
- * @author Donald G. Dunne
- */
-public class AtsRemoteEventTestItem extends WorldXNavigateItemAction {
-
- XResultData resultData;
-
- public AtsRemoteEventTestItem(XNavigateItem parent) {
- super(parent, "ATS Remote Event Test");
- }
-
- @Override
- public void run(TableLoadOption... tableLoadOptions) throws OseeCoreException {
- if (AtsUtil.isProductionDb()) {
- AWorkbench.popup("ERROR", "This should not to be run on production DB");
- return;
- }
- MessageDialog dialog =
- new MessageDialog(Displays.getActiveShell(), getName(), null,
- getName() + "\n\nSelect Source or Destination Client", MessageDialog.QUESTION, new String[] {
- "Source Client", "Destination Client - Start", "Destination Client - End", "Cancel"}, 2);
- int result = dialog.open();
- resultData = new XResultData();
- if (result == 0) {
- runClientTest();
- } else if (result == 1) {
- EntryDialog diag = new EntryDialog(getName(), "Enter tt number of Source Client created Action");
- if (diag.open() == 0) {
- runDestinationTestStart(diag.getEntry());
- }
- } else if (result == 2) {
- EntryDialog diag = new EntryDialog(getName(), "Enter tt number of Source Client created Action");
- if (diag.open() == 0) {
- runDestinationTestEnd(diag.getEntry());
- }
- }
- }
-
- private void runClientTest() throws OseeCoreException {
- String title = getName() + " - Destination Client Test";
- resultData.log("Running " + title);
- NewActionJob job = null;
- job =
- new NewActionJob("tt", "description", ChangeType.Improvement, PriorityType.Priority_1, null, false,
- ActionableItemArtifact.getActionableItems(Arrays.asList("ATS")), null);
- job.setUser(true);
- job.setPriority(Job.LONG);
- job.schedule();
- try {
- job.join();
- } catch (InterruptedException ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
-
- ActionArtifact actionArt = job.getActionArt();
- resultData.log("Created Action " + actionArt);
- TeamWorkFlowArtifact teamArt = actionArt.getTeamWorkFlowArtifacts().iterator().next();
-
- // Make current user assignee for convenience to developer
- teamArt.getStateMgr().addAssignee(UserManager.getUser());
- teamArt.persist();
-
- validateActionAtStart(actionArt);
-
- // Wait for destination client to start
- if (!MessageDialog.openConfirm(
- Displays.getActiveShell(),
- getName(),
- "Launch \"Destination Client - Start\" test, enter \"" + actionArt.getName().replaceFirst("tt ", "") + "\" and press Ok")) {
- return;
- }
-
- // Make changes and persist
- SkynetTransaction transaction = new SkynetTransaction(AtsUtil.getAtsBranch(), "Remote Event Test");
- teamArt.setSoleAttributeFromString(AtsAttributeTypes.Description, "description 2");
- teamArt.setSoleAttributeFromString(AtsAttributeTypes.ChangeType, ChangeType.Problem.name());
- teamArt.setSoleAttributeFromString(AtsAttributeTypes.PriorityType, PriorityType.Priority_2.getShortName());
- teamArt.setSoleAttributeFromString(AtsAttributeTypes.ValidationRequired, "yes");
- teamArt.addRelation(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version, getVersion256());
- teamArt.persist(transaction);
- transaction.execute();
-
- // Make changes and persist
- teamArt.setSoleAttributeFromString(AtsAttributeTypes.Description, "description 3");
- teamArt.setSoleAttributeFromString(AtsAttributeTypes.ProposedResolution, "this is resolution");
- teamArt.persist();
-
- // Make changes and persist
- teamArt.deleteRelation(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version, getVersion256());
- teamArt.addRelation(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version, getVersion257());
- teamArt.setSoleAttributeFromString(AtsAttributeTypes.ValidationRequired, "no");
- teamArt.persist();
-
- // Make changes and persist
- transaction = new SkynetTransaction(AtsUtil.getAtsBranch(), "Remote Event Test");
- teamArt.deleteAttributes(AtsAttributeTypes.ValidationRequired);
- teamArt.deleteAttributes(AtsAttributeTypes.Resolution);
- teamArt.setSoleAttributeFromString(AtsAttributeTypes.Description, "description 4");
- teamArt.setSoleAttributeFromString(AtsAttributeTypes.ChangeType, ChangeType.Support.name());
- teamArt.setSoleAttributeFromString(AtsAttributeTypes.PriorityType, PriorityType.Priority_3.getShortName());
- teamArt.setRelations(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version,
- Collections.singleton(getVersion258()));
- teamArt.persist(transaction);
- transaction.execute();
-
- // Make changes and persist
- teamArt.setSoleAttributeFromString(AtsAttributeTypes.ValidationRequired, "yes");
- teamArt.persist();
-
- // Make changes and transition
- transaction = new SkynetTransaction(AtsUtil.getAtsBranch(), "Remote Event Test");
- teamArt.setRelations(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version,
- Collections.singleton(getVersion257()));
- teamArt.setSoleAttributeFromString(AtsAttributeTypes.ValidationRequired, "no");
- teamArt.persist(transaction);
- transaction.execute();
-
- transaction = new SkynetTransaction(AtsUtil.getAtsBranch(), "Remote Event Test");
- teamArt.transition(DefaultTeamState.Analyze.name(), Collections.singleton(UserManager.getUser()), transaction,
- TransitionOption.Persist);
- teamArt.persist(transaction);
- transaction.execute();
-
- validateActionAtEnd(actionArt);
-
- // Wait for destination client to end
- if (!MessageDialog.openConfirm(
- Displays.getActiveShell(),
- getName(),
- "Launch \"Destination Client - End\" test, enter \"" + actionArt.getName().replaceFirst("tt ", "") + "\" and press Ok")) {
- return;
- }
-
- resultData.report(title);
- }
-
- private VersionArtifact getVersion256() throws OseeCoreException {
- return (VersionArtifact) ArtifactQuery.getArtifactFromTypeAndName(AtsArtifactTypes.Version, "2.5.6",
- AtsUtil.getAtsBranch());
- }
-
- private VersionArtifact getVersion257() throws OseeCoreException {
- return (VersionArtifact) ArtifactQuery.getArtifactFromTypeAndName(AtsArtifactTypes.Version, "2.5.7",
- AtsUtil.getAtsBranch());
- }
-
- private VersionArtifact getVersion258() throws OseeCoreException {
- return (VersionArtifact) ArtifactQuery.getArtifactFromTypeAndName(AtsArtifactTypes.Version, "2.5.8",
- AtsUtil.getAtsBranch());
- }
-
- private void validateActionAtStart(ActionArtifact actionArt) throws OseeCoreException {
- resultData.log("\nValidating Start...");
- // Ensure event service is connected
- if (!OseeEventManager.isEventManagerConnected()) {
- resultData.logError("Remote Event Service is not connected");
- return;
- }
- resultData.log("Remote Event Service connected");
-
- // Validate values
- TeamWorkFlowArtifact teamArt = actionArt.getTeamWorkFlowArtifacts().iterator().next();
- testEquals("Description", "description", teamArt.getSoleAttributeValue(AtsAttributeTypes.Description, null));
- testEquals("Change Type", ChangeType.Improvement.name(),
- teamArt.getSoleAttributeValue(AtsAttributeTypes.ChangeType, null));
- testEquals("Priority", PriorityType.Priority_1.getShortName(),
- teamArt.getSoleAttributeValue(AtsAttributeTypes.PriorityType, null));
- }
-
- private void validateActionAtEnd(ActionArtifact actionArt) throws OseeCoreException {
- resultData.log("\nValidating End...");
- // Ensure event service is connected
- if (!OseeEventManager.isEventManagerConnected()) {
- resultData.logError("Remote Event Service is not connected");
- return;
- }
- resultData.log("Remote Event Service connected");
-
- // Validate values
- TeamWorkFlowArtifact teamArt = actionArt.getTeamWorkFlowArtifacts().iterator().next();
- testEquals("Description", "description 4", teamArt.getSoleAttributeValue(AtsAttributeTypes.Description, null));
- testEquals("Change Type", ChangeType.Support.name(),
- teamArt.getSoleAttributeValue(AtsAttributeTypes.ChangeType, null));
- testEquals("Priority", PriorityType.Priority_3.getShortName(),
- teamArt.getSoleAttributeValue(AtsAttributeTypes.PriorityType, null));
- testEquals("Validation Required", "false",
- String.valueOf(teamArt.getSoleAttributeValue(AtsAttributeTypes.ValidationRequired, null)));
- testEquals("Targeted Version",
- (teamArt.getTargetedForVersion() != null ? teamArt.getTargetedForVersion().toString() : "not set"), "2.5.7");
- testEquals("State", DefaultTeamState.Analyze.name(), teamArt.getStateMgr().getCurrentStateName());
- }
-
- private void testEquals(String name, Object expected, Object actual) {
- if (!expected.equals(actual)) {
- resultData.logError(String.format("Error: [%s] - expected [%s] actual[%s]", name, expected, actual));
- } else {
- resultData.log(String.format("Valid: [%s] - expected [%s] actual[%s]", name, expected, actual));
- }
- }
-
- private void runDestinationTestStart(String ttNum) throws OseeCoreException {
- String title = getName() + " - Destination Client Test - Start";
- String actionTitle = "tt " + ttNum;
- resultData.log("Running " + title);
-
- ActionArtifact actionArt =
- (ActionArtifact) ArtifactQuery.getArtifactFromTypeAndName(AtsArtifactTypes.Action, actionTitle,
- AtsUtil.getAtsBranch());
-
- if (actionArt == null) {
- resultData.logError(String.format("Couldn't load Action named [%s]", actionTitle));
- } else {
- resultData.log("Loaded Action " + actionArt);
- AtsUtil.openATSAction(actionArt, AtsOpenOption.OpenOneOrPopupSelect);
- }
- validateActionAtStart(actionArt);
- resultData.report(title);
- }
-
- private void runDestinationTestEnd(String ttNum) throws OseeCoreException {
- String title = getName() + " - Destination Client Test - End";
- String actionTitle = "tt " + ttNum;
- resultData.log("Running " + title);
-
- ActionArtifact actionArt =
- (ActionArtifact) ArtifactQuery.getArtifactFromTypeAndName(AtsArtifactTypes.Action, actionTitle,
- AtsUtil.getAtsBranch());
-
- if (actionArt == null) {
- resultData.logError(String.format("Couldn't load Action named [%s]", actionTitle));
- } else {
- resultData.log("Loaded Action " + actionArt);
- AtsUtil.openATSAction(actionArt, AtsOpenOption.OpenOneOrPopupSelect);
- }
- validateActionAtEnd(actionArt);
- resultData.report(title);
- }
-
-}
+/******************************************************************************* + * 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.navigate; + +import java.util.Arrays; +import java.util.Collections; +import java.util.logging.Level; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.osee.ats.AtsOpenOption; +import org.eclipse.osee.ats.actions.wizard.NewActionJob; +import org.eclipse.osee.ats.artifact.ActionArtifact; +import org.eclipse.osee.ats.artifact.ActionableItemArtifact; +import org.eclipse.osee.ats.artifact.AtsAttributeTypes; +import org.eclipse.osee.ats.artifact.StateMachineArtifact.TransitionOption; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact.DefaultTeamState; +import org.eclipse.osee.ats.artifact.VersionArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.ats.util.AtsPriority.PriorityType; +import org.eclipse.osee.ats.util.AtsRelationTypes; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.ats.world.WorldXNavigateItemAction; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.UserManager; +import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; +import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; +import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction; +import org.eclipse.osee.framework.ui.plugin.util.AWorkbench; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem; +import org.eclipse.osee.framework.ui.skynet.results.XResultData; +import org.eclipse.osee.framework.ui.skynet.util.ChangeType; +import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog; +import org.eclipse.osee.framework.ui.swt.Displays; + +/** + * @author Donald G. Dunne + */ +public class AtsRemoteEventTestItem extends WorldXNavigateItemAction { + + XResultData resultData; + + public AtsRemoteEventTestItem(XNavigateItem parent) { + super(parent, "ATS Remote Event Test"); + } + + @Override + public void run(TableLoadOption... tableLoadOptions) throws OseeCoreException { + if (AtsUtil.isProductionDb()) { + AWorkbench.popup("ERROR", "This should not to be run on production DB"); + return; + } + MessageDialog dialog = + new MessageDialog(Displays.getActiveShell(), getName(), null, + getName() + "\n\nSelect Source or Destination Client", MessageDialog.QUESTION, new String[] { + "Source Client", + "Destination Client - Start", + "Destination Client - End", + "Cancel"}, 2); + int result = dialog.open(); + resultData = new XResultData(); + if (result == 0) { + runClientTest(); + } else if (result == 1) { + EntryDialog diag = new EntryDialog(getName(), "Enter tt number of Source Client created Action"); + if (diag.open() == 0) { + runDestinationTestStart(diag.getEntry()); + } + } else if (result == 2) { + EntryDialog diag = new EntryDialog(getName(), "Enter tt number of Source Client created Action"); + if (diag.open() == 0) { + runDestinationTestEnd(diag.getEntry()); + } + } + } + + private void runClientTest() throws OseeCoreException { + String title = getName() + " - Destination Client Test"; + resultData.log("Running " + title); + NewActionJob job = null; + job = + new NewActionJob("tt", "description", ChangeType.Improvement, PriorityType.Priority_1, null, false, + ActionableItemArtifact.getActionableItems(Arrays.asList("ATS")), null); + job.setUser(true); + job.setPriority(Job.LONG); + job.schedule(); + try { + job.join(); + } catch (InterruptedException ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + + ActionArtifact actionArt = job.getActionArt(); + resultData.log("Created Action " + actionArt); + TeamWorkFlowArtifact teamArt = actionArt.getTeamWorkFlowArtifacts().iterator().next(); + + // Make current user assignee for convenience to developer + teamArt.getStateMgr().addAssignee(UserManager.getUser()); + teamArt.persist(); + + validateActionAtStart(actionArt); + + // Wait for destination client to start + if (!MessageDialog.openConfirm( + Displays.getActiveShell(), + getName(), + "Launch \"Destination Client - Start\" test, enter \"" + actionArt.getName().replaceFirst("tt ", "") + "\" and press Ok")) { + return; + } + + // Make changes and persist + SkynetTransaction transaction = new SkynetTransaction(AtsUtil.getAtsBranch(), "Remote Event Test"); + teamArt.setSoleAttributeFromString(AtsAttributeTypes.Description, "description 2"); + teamArt.setSoleAttributeFromString(AtsAttributeTypes.ChangeType, ChangeType.Problem.name()); + teamArt.setSoleAttributeFromString(AtsAttributeTypes.PriorityType, PriorityType.Priority_2.getShortName()); + teamArt.setSoleAttributeFromString(AtsAttributeTypes.ValidationRequired, "yes"); + teamArt.addRelation(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version, getVersion256()); + teamArt.persist(transaction); + transaction.execute(); + + // Make changes and persist + teamArt.setSoleAttributeFromString(AtsAttributeTypes.Description, "description 3"); + teamArt.setSoleAttributeFromString(AtsAttributeTypes.ProposedResolution, "this is resolution"); + teamArt.persist(); + + // Make changes and persist + teamArt.deleteRelation(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version, getVersion256()); + teamArt.addRelation(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version, getVersion257()); + teamArt.setSoleAttributeFromString(AtsAttributeTypes.ValidationRequired, "no"); + teamArt.persist(); + + // Make changes and persist + transaction = new SkynetTransaction(AtsUtil.getAtsBranch(), "Remote Event Test"); + teamArt.deleteAttributes(AtsAttributeTypes.ValidationRequired); + teamArt.deleteAttributes(AtsAttributeTypes.Resolution); + teamArt.setSoleAttributeFromString(AtsAttributeTypes.Description, "description 4"); + teamArt.setSoleAttributeFromString(AtsAttributeTypes.ChangeType, ChangeType.Support.name()); + teamArt.setSoleAttributeFromString(AtsAttributeTypes.PriorityType, PriorityType.Priority_3.getShortName()); + teamArt.setRelations(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version, + Collections.singleton(getVersion258())); + teamArt.persist(transaction); + transaction.execute(); + + // Make changes and persist + teamArt.setSoleAttributeFromString(AtsAttributeTypes.ValidationRequired, "yes"); + teamArt.persist(); + + // Make changes and transition + transaction = new SkynetTransaction(AtsUtil.getAtsBranch(), "Remote Event Test"); + teamArt.setRelations(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version, + Collections.singleton(getVersion257())); + teamArt.setSoleAttributeFromString(AtsAttributeTypes.ValidationRequired, "no"); + teamArt.persist(transaction); + transaction.execute(); + + transaction = new SkynetTransaction(AtsUtil.getAtsBranch(), "Remote Event Test"); + teamArt.transition(DefaultTeamState.Analyze.name(), Collections.singleton(UserManager.getUser()), transaction, + TransitionOption.Persist); + teamArt.persist(transaction); + transaction.execute(); + + validateActionAtEnd(actionArt); + + // Wait for destination client to end + if (!MessageDialog.openConfirm( + Displays.getActiveShell(), + getName(), + "Launch \"Destination Client - End\" test, enter \"" + actionArt.getName().replaceFirst("tt ", "") + "\" and press Ok")) { + return; + } + + resultData.report(title); + } + + private VersionArtifact getVersion256() throws OseeCoreException { + return (VersionArtifact) ArtifactQuery.getArtifactFromTypeAndName(AtsArtifactTypes.Version, "2.5.6", + AtsUtil.getAtsBranch()); + } + + private VersionArtifact getVersion257() throws OseeCoreException { + return (VersionArtifact) ArtifactQuery.getArtifactFromTypeAndName(AtsArtifactTypes.Version, "2.5.7", + AtsUtil.getAtsBranch()); + } + + private VersionArtifact getVersion258() throws OseeCoreException { + return (VersionArtifact) ArtifactQuery.getArtifactFromTypeAndName(AtsArtifactTypes.Version, "2.5.8", + AtsUtil.getAtsBranch()); + } + + private void validateActionAtStart(ActionArtifact actionArt) throws OseeCoreException { + resultData.log("\nValidating Start..."); + // Ensure event service is connected + if (!OseeEventManager.isEventManagerConnected()) { + resultData.logError("Remote Event Service is not connected"); + return; + } + resultData.log("Remote Event Service connected"); + + // Validate values + TeamWorkFlowArtifact teamArt = actionArt.getTeamWorkFlowArtifacts().iterator().next(); + testEquals("Description", "description", teamArt.getSoleAttributeValue(AtsAttributeTypes.Description, null)); + testEquals("Change Type", ChangeType.Improvement.name(), + teamArt.getSoleAttributeValue(AtsAttributeTypes.ChangeType, null)); + testEquals("Priority", PriorityType.Priority_1.getShortName(), + teamArt.getSoleAttributeValue(AtsAttributeTypes.PriorityType, null)); + } + + private void validateActionAtEnd(ActionArtifact actionArt) throws OseeCoreException { + resultData.log("\nValidating End..."); + // Ensure event service is connected + if (!OseeEventManager.isEventManagerConnected()) { + resultData.logError("Remote Event Service is not connected"); + return; + } + resultData.log("Remote Event Service connected"); + + // Validate values + TeamWorkFlowArtifact teamArt = actionArt.getTeamWorkFlowArtifacts().iterator().next(); + testEquals("Description", "description 4", teamArt.getSoleAttributeValue(AtsAttributeTypes.Description, null)); + testEquals("Change Type", ChangeType.Support.name(), + teamArt.getSoleAttributeValue(AtsAttributeTypes.ChangeType, null)); + testEquals("Priority", PriorityType.Priority_3.getShortName(), + teamArt.getSoleAttributeValue(AtsAttributeTypes.PriorityType, null)); + testEquals("Validation Required", "false", + String.valueOf(teamArt.getSoleAttributeValue(AtsAttributeTypes.ValidationRequired, null))); + testEquals("Targeted Version", + (teamArt.getTargetedForVersion() != null ? teamArt.getTargetedForVersion().toString() : "not set"), "2.5.7"); + testEquals("State", DefaultTeamState.Analyze.name(), teamArt.getStateMgr().getCurrentStateName()); + } + + private void testEquals(String name, Object expected, Object actual) { + if (!expected.equals(actual)) { + resultData.logError(String.format("Error: [%s] - expected [%s] actual[%s]", name, expected, actual)); + } else { + resultData.log(String.format("Valid: [%s] - expected [%s] actual[%s]", name, expected, actual)); + } + } + + private void runDestinationTestStart(String ttNum) throws OseeCoreException { + String title = getName() + " - Destination Client Test - Start"; + String actionTitle = "tt " + ttNum; + resultData.log("Running " + title); + + ActionArtifact actionArt = + (ActionArtifact) ArtifactQuery.getArtifactFromTypeAndName(AtsArtifactTypes.Action, actionTitle, + AtsUtil.getAtsBranch()); + + if (actionArt == null) { + resultData.logError(String.format("Couldn't load Action named [%s]", actionTitle)); + } else { + resultData.log("Loaded Action " + actionArt); + AtsUtil.openATSAction(actionArt, AtsOpenOption.OpenOneOrPopupSelect); + } + validateActionAtStart(actionArt); + resultData.report(title); + } + + private void runDestinationTestEnd(String ttNum) throws OseeCoreException { + String title = getName() + " - Destination Client Test - End"; + String actionTitle = "tt " + ttNum; + resultData.log("Running " + title); + + ActionArtifact actionArt = + (ActionArtifact) ArtifactQuery.getArtifactFromTypeAndName(AtsArtifactTypes.Action, actionTitle, + AtsUtil.getAtsBranch()); + + if (actionArt == null) { + resultData.logError(String.format("Couldn't load Action named [%s]", actionTitle)); + } else { + resultData.log("Loaded Action " + actionArt); + AtsUtil.openATSAction(actionArt, AtsOpenOption.OpenOneOrPopupSelect); + } + validateActionAtEnd(actionArt); + resultData.report(title); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/BarChartExample.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/BarChartExample.java index 1a7b502fae5..6b40fca82dc 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/BarChartExample.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/BarChartExample.java @@ -1,168 +1,164 @@ -/*******************************************************************************
- * 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.navigate;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.eclipse.birt.chart.model.Chart;
-import org.eclipse.birt.chart.model.ChartWithAxes;
-import org.eclipse.birt.chart.model.attribute.Anchor;
-import org.eclipse.birt.chart.model.attribute.AxisType;
-import org.eclipse.birt.chart.model.attribute.ChartDimension;
-import org.eclipse.birt.chart.model.attribute.IntersectionType;
-import org.eclipse.birt.chart.model.attribute.Position;
-import org.eclipse.birt.chart.model.attribute.TickStyle;
-import org.eclipse.birt.chart.model.attribute.impl.ColorDefinitionImpl;
-import org.eclipse.birt.chart.model.component.Axis;
-import org.eclipse.birt.chart.model.component.Series;
-import org.eclipse.birt.chart.model.component.impl.SeriesImpl;
-import org.eclipse.birt.chart.model.data.NumberDataSet;
-import org.eclipse.birt.chart.model.data.SeriesDefinition;
-import org.eclipse.birt.chart.model.data.TextDataSet;
-import org.eclipse.birt.chart.model.data.impl.NumberDataSetImpl;
-import org.eclipse.birt.chart.model.data.impl.SeriesDefinitionImpl;
-import org.eclipse.birt.chart.model.data.impl.TextDataSetImpl;
-import org.eclipse.birt.chart.model.impl.ChartWithAxesImpl;
-import org.eclipse.birt.chart.model.layout.Legend;
-import org.eclipse.birt.chart.model.layout.Plot;
-import org.eclipse.birt.chart.model.type.BarSeries;
-import org.eclipse.birt.chart.model.type.impl.BarSeriesImpl;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.framework.jdk.core.util.AHTML;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction;
-import org.eclipse.osee.framework.ui.skynet.results.IResultsEditorProvider;
-import org.eclipse.osee.framework.ui.skynet.results.IResultsEditorTab;
-import org.eclipse.osee.framework.ui.skynet.results.ResultsEditor;
-import org.eclipse.osee.framework.ui.skynet.results.chart.ResultsEditorChartTab;
-import org.eclipse.osee.framework.ui.skynet.results.html.ResultsEditorHtmlTab;
-
-public class BarChartExample extends XNavigateItemAction {
-
- /**
- * @param parent
- * @param action
- */
- public BarChartExample(XNavigateItem parent) {
- super(parent, "Bar Chart Example", AtsImage.REPORT);
- }
-
- @Override
- public void run(TableLoadOption... tableLoadOptions) throws Exception {
- ResultsEditor.open(new IResultsEditorProvider() {
-
- @Override
- public String getEditorName() {
- return "Example Bar Chart";
- }
-
- @Override
- public List<IResultsEditorTab> getResultsEditorTabs() {
- List<IResultsEditorTab> tabs = new ArrayList<IResultsEditorTab>();
- tabs.add(new ResultsEditorChartTab("Chart", createMyChart()));
- tabs.add(getReportHtmlTab());
- return tabs;
- }
-
- });
- }
-
- private IResultsEditorTab getReportHtmlTab() {
- StringBuffer sb = new StringBuffer();
- sb.append("Example Bar Chart Data");
- sb.append(AHTML.beginMultiColumnTable(95, 1));
- sb.append(AHTML.addHeaderRowMultiColumnTable(new String[] {"Type", "Title", "Status"}));
- for (int x = 0; x < 3; x++) {
- sb.append(AHTML.addRowMultiColumnTable(new String[] {"Type " + x, "Title " + x, x + ""}));
- }
- sb.append(AHTML.endMultiColumnTable());
- return new ResultsEditorHtmlTab("Example Bar Chart Data", "Report", AHTML.simplePage(sb.toString()));
- }
-
- @SuppressWarnings({"deprecation"})
- public static Chart createMyChart() {
- // bart charts are based on charts that contain axes
- ChartWithAxes cwaBar = ChartWithAxesImpl.create();
- cwaBar.getBlock().setBackground(ColorDefinitionImpl.WHITE());
- cwaBar.getBlock().getOutline().setVisible(true);
- cwaBar.setDimension(ChartDimension.TWO_DIMENSIONAL_WITH_DEPTH_LITERAL);
-
- // customize the plot
- Plot p = cwaBar.getPlot();
- p.getClientArea().setBackground(ColorDefinitionImpl.create(255, 255, 225));
- p.getOutline().setVisible(false);
-
- cwaBar.getTitle().getLabel().getCaption().setValue("Example Bar Chart");
-
- // customize the legend
- Legend lg = cwaBar.getLegend();
- lg.getText().getFont().setSize(16);
- lg.getInsets().set(10, 5, 0, 0);
- lg.setAnchor(Anchor.NORTH_LITERAL);
-
- // customize the X-axis
- Axis xAxisPrimary = cwaBar.getPrimaryBaseAxes()[0];
- xAxisPrimary.setType(AxisType.TEXT_LITERAL);
- xAxisPrimary.getMajorGrid().setTickStyle(TickStyle.BELOW_LITERAL);
- xAxisPrimary.getOrigin().setType(IntersectionType.VALUE_LITERAL);
- xAxisPrimary.getTitle().setVisible(false);
-
- // customize the Y-axis
- Axis yAxisPrimary = cwaBar.getPrimaryOrthogonalAxis(xAxisPrimary);
- yAxisPrimary.getMajorGrid().setTickStyle(TickStyle.LEFT_LITERAL);
- yAxisPrimary.setType(AxisType.LINEAR_LITERAL);
- yAxisPrimary.getLabel().getCaption().getFont().setRotation(90);
-
- // initialize a collection with the X-series data
- java.util.Vector<String> vs = new java.util.Vector<String>();
- vs.add("zero");
- vs.add("one");
- vs.add("two");
-
- TextDataSet categoryValues = TextDataSetImpl.create(vs);
-
- // initialize a collection with the Y-series data
- ArrayList<Double> vn1 = new ArrayList<Double>();
- vn1.add(new Double(25));
- vn1.add(new Double(35));
- vn1.add(new Double(-45));
-
- NumberDataSet orthoValues1 = NumberDataSetImpl.create(vn1);
-
- // create the category base series
- Series seCategory = SeriesImpl.create();
- seCategory.setDataSet(categoryValues);
-
- // create the value orthogonal series
- BarSeries bs1 = (BarSeries) BarSeriesImpl.create();
- bs1.setSeriesIdentifier("My Bar Series");
- bs1.setDataSet(orthoValues1);
- bs1.setRiserOutline(null);
- bs1.getLabel().setVisible(true);
- bs1.setLabelPosition(Position.INSIDE_LITERAL);
-
- // wrap the base series in the X-axis series definition
- SeriesDefinition sdX = SeriesDefinitionImpl.create();
- sdX.getSeriesPalette().update(0); // set the colors in the palette
- xAxisPrimary.getSeriesDefinitions().add(sdX);
- sdX.getSeries().add(seCategory);
-
- // wrap the orthogonal series in the X-axis series definition
- SeriesDefinition sdY = SeriesDefinitionImpl.create();
- sdY.getSeriesPalette().update(1); // set the color in the palette
- yAxisPrimary.getSeriesDefinitions().add(sdY);
- sdY.getSeries().add(bs1);
-
- return cwaBar;
- }
-
-}
+/******************************************************************************* + * 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.navigate; + +import java.util.ArrayList; +import java.util.List; +import org.eclipse.birt.chart.model.Chart; +import org.eclipse.birt.chart.model.ChartWithAxes; +import org.eclipse.birt.chart.model.attribute.Anchor; +import org.eclipse.birt.chart.model.attribute.AxisType; +import org.eclipse.birt.chart.model.attribute.ChartDimension; +import org.eclipse.birt.chart.model.attribute.IntersectionType; +import org.eclipse.birt.chart.model.attribute.Position; +import org.eclipse.birt.chart.model.attribute.TickStyle; +import org.eclipse.birt.chart.model.attribute.impl.ColorDefinitionImpl; +import org.eclipse.birt.chart.model.component.Axis; +import org.eclipse.birt.chart.model.component.Series; +import org.eclipse.birt.chart.model.component.impl.SeriesImpl; +import org.eclipse.birt.chart.model.data.NumberDataSet; +import org.eclipse.birt.chart.model.data.SeriesDefinition; +import org.eclipse.birt.chart.model.data.TextDataSet; +import org.eclipse.birt.chart.model.data.impl.NumberDataSetImpl; +import org.eclipse.birt.chart.model.data.impl.SeriesDefinitionImpl; +import org.eclipse.birt.chart.model.data.impl.TextDataSetImpl; +import org.eclipse.birt.chart.model.impl.ChartWithAxesImpl; +import org.eclipse.birt.chart.model.layout.Legend; +import org.eclipse.birt.chart.model.layout.Plot; +import org.eclipse.birt.chart.model.type.BarSeries; +import org.eclipse.birt.chart.model.type.impl.BarSeriesImpl; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.framework.jdk.core.util.AHTML; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction; +import org.eclipse.osee.framework.ui.skynet.results.IResultsEditorProvider; +import org.eclipse.osee.framework.ui.skynet.results.IResultsEditorTab; +import org.eclipse.osee.framework.ui.skynet.results.ResultsEditor; +import org.eclipse.osee.framework.ui.skynet.results.chart.ResultsEditorChartTab; +import org.eclipse.osee.framework.ui.skynet.results.html.ResultsEditorHtmlTab; + +public class BarChartExample extends XNavigateItemAction { + + public BarChartExample(XNavigateItem parent) { + super(parent, "Bar Chart Example", AtsImage.REPORT); + } + + @Override + public void run(TableLoadOption... tableLoadOptions) throws Exception { + ResultsEditor.open(new IResultsEditorProvider() { + + @Override + public String getEditorName() { + return "Example Bar Chart"; + } + + @Override + public List<IResultsEditorTab> getResultsEditorTabs() { + List<IResultsEditorTab> tabs = new ArrayList<IResultsEditorTab>(); + tabs.add(new ResultsEditorChartTab("Chart", createMyChart())); + tabs.add(getReportHtmlTab()); + return tabs; + } + + }); + } + + private IResultsEditorTab getReportHtmlTab() { + StringBuffer sb = new StringBuffer(); + sb.append("Example Bar Chart Data"); + sb.append(AHTML.beginMultiColumnTable(95, 1)); + sb.append(AHTML.addHeaderRowMultiColumnTable(new String[] {"Type", "Title", "Status"})); + for (int x = 0; x < 3; x++) { + sb.append(AHTML.addRowMultiColumnTable(new String[] {"Type " + x, "Title " + x, x + ""})); + } + sb.append(AHTML.endMultiColumnTable()); + return new ResultsEditorHtmlTab("Example Bar Chart Data", "Report", AHTML.simplePage(sb.toString())); + } + + @SuppressWarnings({"deprecation"}) + public static Chart createMyChart() { + // bart charts are based on charts that contain axes + ChartWithAxes cwaBar = ChartWithAxesImpl.create(); + cwaBar.getBlock().setBackground(ColorDefinitionImpl.WHITE()); + cwaBar.getBlock().getOutline().setVisible(true); + cwaBar.setDimension(ChartDimension.TWO_DIMENSIONAL_WITH_DEPTH_LITERAL); + + // customize the plot + Plot p = cwaBar.getPlot(); + p.getClientArea().setBackground(ColorDefinitionImpl.create(255, 255, 225)); + p.getOutline().setVisible(false); + + cwaBar.getTitle().getLabel().getCaption().setValue("Example Bar Chart"); + + // customize the legend + Legend lg = cwaBar.getLegend(); + lg.getText().getFont().setSize(16); + lg.getInsets().set(10, 5, 0, 0); + lg.setAnchor(Anchor.NORTH_LITERAL); + + // customize the X-axis + Axis xAxisPrimary = cwaBar.getPrimaryBaseAxes()[0]; + xAxisPrimary.setType(AxisType.TEXT_LITERAL); + xAxisPrimary.getMajorGrid().setTickStyle(TickStyle.BELOW_LITERAL); + xAxisPrimary.getOrigin().setType(IntersectionType.VALUE_LITERAL); + xAxisPrimary.getTitle().setVisible(false); + + // customize the Y-axis + Axis yAxisPrimary = cwaBar.getPrimaryOrthogonalAxis(xAxisPrimary); + yAxisPrimary.getMajorGrid().setTickStyle(TickStyle.LEFT_LITERAL); + yAxisPrimary.setType(AxisType.LINEAR_LITERAL); + yAxisPrimary.getLabel().getCaption().getFont().setRotation(90); + + // initialize a collection with the X-series data + java.util.Vector<String> vs = new java.util.Vector<String>(); + vs.add("zero"); + vs.add("one"); + vs.add("two"); + + TextDataSet categoryValues = TextDataSetImpl.create(vs); + + // initialize a collection with the Y-series data + ArrayList<Double> vn1 = new ArrayList<Double>(); + vn1.add(new Double(25)); + vn1.add(new Double(35)); + vn1.add(new Double(-45)); + + NumberDataSet orthoValues1 = NumberDataSetImpl.create(vn1); + + // create the category base series + Series seCategory = SeriesImpl.create(); + seCategory.setDataSet(categoryValues); + + // create the value orthogonal series + BarSeries bs1 = (BarSeries) BarSeriesImpl.create(); + bs1.setSeriesIdentifier("My Bar Series"); + bs1.setDataSet(orthoValues1); + bs1.setRiserOutline(null); + bs1.getLabel().setVisible(true); + bs1.setLabelPosition(Position.INSIDE_LITERAL); + + // wrap the base series in the X-axis series definition + SeriesDefinition sdX = SeriesDefinitionImpl.create(); + sdX.getSeriesPalette().update(0); // set the colors in the palette + xAxisPrimary.getSeriesDefinitions().add(sdX); + sdX.getSeries().add(seCategory); + + // wrap the orthogonal series in the X-axis series definition + SeriesDefinition sdY = SeriesDefinitionImpl.create(); + sdY.getSeriesPalette().update(1); // set the color in the palette + yAxisPrimary.getSeriesDefinitions().add(sdY); + sdY.getSeries().add(bs1); + + return cwaBar; + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/CreateNewVersionItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/CreateNewVersionItem.java index 3450b159ad6..829a222d696 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/CreateNewVersionItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/CreateNewVersionItem.java @@ -43,7 +43,6 @@ public class CreateNewVersionItem extends XNavigateItemAction { private final TeamDefinitionArtifact teamDefHoldingVersions; /** - * @param parent * @param teamDefHoldingVersions Team Definition Artifact that is related to versions or null for popup selection */ public CreateNewVersionItem(XNavigateItem parent, TeamDefinitionArtifact teamDefHoldingVersions) { diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/DisplayCurrentOseeEventListeners.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/DisplayCurrentOseeEventListeners.java index f04b972394b..1ba6ee172c9 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/DisplayCurrentOseeEventListeners.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/DisplayCurrentOseeEventListeners.java @@ -24,9 +24,6 @@ import org.eclipse.osee.framework.ui.skynet.results.html.XResultPage; */ public class DisplayCurrentOseeEventListeners extends XNavigateItemAction { - /** - * @param parent - */ public DisplayCurrentOseeEventListeners(XNavigateItem parent) { super(parent, "Display Current OSEE Event Listeners", PluginUiImage.ADMIN); } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/EmailTeamsItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/EmailTeamsItem.java index 59828cb0cec..42aebd52e34 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/EmailTeamsItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/EmailTeamsItem.java @@ -43,7 +43,6 @@ public class EmailTeamsItem extends XNavigateItemAction { }; /** - * @param parent * @param teamDefHoldingVersions Team Definition Artifact that is related to versions or null for popup selection */ public EmailTeamsItem(XNavigateItem parent, TeamDefinitionArtifact teamDef, MemberType... memberType) { diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/FirstTimeQualityMetricReportItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/FirstTimeQualityMetricReportItem.java index 4820e8e75f0..2d9637c3026 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/FirstTimeQualityMetricReportItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/FirstTimeQualityMetricReportItem.java @@ -1,195 +1,197 @@ -/*******************************************************************************
- * 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.navigate;
-
-import java.util.Collection;
-import java.util.Date;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.config.AtsCacheManager;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.ats.util.AtsPriority.PriorityType;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.ats.util.VersionMetrics;
-import org.eclipse.osee.ats.util.VersionTeamMetrics;
-import org.eclipse.osee.ats.util.widgets.dialog.TeamDefinitionDialog;
-import org.eclipse.osee.framework.core.enums.Active;
-import org.eclipse.osee.framework.core.exception.MultipleAttributesExist;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.jdk.core.util.AHTML;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
-import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction;
-import org.eclipse.osee.framework.ui.skynet.results.XResultData;
-import org.eclipse.osee.framework.ui.skynet.results.html.XResultPage.Manipulations;
-import org.eclipse.osee.framework.ui.skynet.util.ChangeType;
-import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
-import org.eclipse.osee.framework.ui.swt.Displays;
-
-/**
- * @author Donald G. Dunne
- */
-public class FirstTimeQualityMetricReportItem extends XNavigateItemAction {
-
- private final TeamDefinitionArtifact teamDef;
- private final String teamDefName;
-
- public FirstTimeQualityMetricReportItem(XNavigateItem parent, String name, String teamDefName) {
- super(parent, name, AtsImage.REPORT);
- this.teamDefName = teamDefName;
- this.teamDef = null;
- }
-
- public FirstTimeQualityMetricReportItem(XNavigateItem parent) {
- this(parent, "First Time Quality Metric Report", null);
- }
-
- @Override
- public String getDescription() {
- return "This report will genereate a metric comprised of:\n\n# of priority 1 and 2 OSEE problem actions orginated between release\n__________________________________\n# of non-support actions in that released";
- }
-
- @Override
- public void run(TableLoadOption... tableLoadOptions) throws OseeCoreException {
- TeamDefinitionArtifact useTeamDef = teamDef;
- if (useTeamDef == null && teamDefName != null) {
- useTeamDef =
- (TeamDefinitionArtifact) AtsCacheManager.getSoleArtifactByName(
- ArtifactTypeManager.getType(AtsArtifactTypes.TeamDefinition), teamDefName);
- }
- if (useTeamDef == null) {
- TeamDefinitionDialog ld = new TeamDefinitionDialog("Select Team", "Select Team");
- ld.setTitle(getName());
- try {
- ld.setInput(TeamDefinitionArtifact.getTeamReleaseableDefinitions(Active.Both));
- } catch (MultipleAttributesExist ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- int result = ld.open();
- if (result == 0) {
- if (ld.getResult().length == 0) {
- AWorkbench.popup("ERROR", "You must select a team to operate against.");
- return;
- }
- useTeamDef = (TeamDefinitionArtifact) ld.getResult()[0];
- } else {
- return;
- }
- } else if (!MessageDialog.openConfirm(Displays.getActiveShell(), getName(), getName())) {
- return;
- }
-
- ReportJob job = new ReportJob(getName(), useTeamDef);
- job.setUser(true);
- job.setPriority(Job.LONG);
- job.schedule();
- }
-
- private static class ReportJob extends Job {
-
- private final TeamDefinitionArtifact teamDef;
-
- public ReportJob(String title, TeamDefinitionArtifact teamDef) {
- super(title);
- this.teamDef = teamDef;
- }
-
- @Override
- public IStatus run(IProgressMonitor monitor) {
- try {
- XResultData resultData = new XResultData();
- String html = getTeamWorkflowReport(getName(), teamDef, monitor);
- resultData.addRaw(html);
- resultData.report(getName(), Manipulations.RAW_HTML);
- } catch (Exception ex) {
- return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, -1, ex.toString(), ex);
- }
- monitor.done();
- return Status.OK_STATUS;
- }
- }
-
- private static String[] HEADER_STRINGS =
- new String[] {"Version", "StartDate", "RelDate", "Num 1 + 2 Orig During Next Release Cycle",
- "Num Non-Support Released", "Ratio Orig 1 and 2 Bugs/Number Released"};
-
- /**
- * Ratio of # of priority 1 and 2 OSEE problem actions (non-cancelled) that were orginated between a release and the
- * next release / # of non-support actions released in that release
- *
- * @param teamDef
- * @param monitor
- * @return report
- */
- public static String getTeamWorkflowReport(String title, TeamDefinitionArtifact teamDef, IProgressMonitor monitor) throws OseeCoreException {
- StringBuilder sb = new StringBuilder();
- sb.append(AHTML.heading(3, title));
- sb.append(AHTML.beginMultiColumnTable(100, 1));
- sb.append(AHTML.addRowSpanMultiColumnTable(
- "This report shows the ratio of 1+2 problem workflows created during next release cycle due to current release over the total non-support workflows during this release.",
- HEADER_STRINGS.length));
- sb.append(AHTML.addHeaderRowMultiColumnTable(HEADER_STRINGS));
- VersionTeamMetrics teamMet = new VersionTeamMetrics(teamDef);
- Collection<VersionMetrics> verMets = teamMet.getReleasedOrderedVersions();
- monitor.beginTask("Processing Versions", verMets.size());
- for (VersionMetrics verMet : verMets) {
- Date thisReleaseStartDate = verMet.getReleaseStartDate();
- Date thisReleaseEndDate = verMet.getVerArt().getReleaseDate();
- Date nextReleaseStartDate = null;
- Date nextReleaseEndDate = null;
- VersionMetrics nextVerMet = verMet.getNextVerMetViaReleaseDate();
- if (nextVerMet != null) {
- nextReleaseStartDate = nextVerMet.getReleaseStartDate();
- nextReleaseEndDate = nextVerMet.getVerArt().getReleaseDate();
- }
- Integer numOrigDurningNextReleaseCycle = 0;
- if (nextReleaseStartDate != null && nextReleaseEndDate != null) {
- Collection<TeamWorkFlowArtifact> arts =
- teamMet.getWorkflowsOriginatedBetween(nextReleaseStartDate, nextReleaseEndDate);
- for (TeamWorkFlowArtifact team : arts) {
- if (!team.isCancelled() && team.getChangeType() == ChangeType.Problem && (team.getPriority() == PriorityType.Priority_1 || team.getPriority() == PriorityType.Priority_2)) {
- numOrigDurningNextReleaseCycle++;
- }
- }
- }
- Integer numNonSupportReleased = null;
- if (thisReleaseEndDate != null) {
- numNonSupportReleased = 0;
- for (TeamWorkFlowArtifact team : verMet.getTeamWorkFlows(ChangeType.Problem, ChangeType.Improvement)) {
- if (!team.isCancelled()) {
- numNonSupportReleased++;
- }
- }
- }
- sb.append(AHTML.addRowMultiColumnTable(new String[] {
- verMet.getVerArt().getName(),
- XDate.getDateStr(thisReleaseStartDate, XDate.MMDDYY),
- XDate.getDateStr(thisReleaseEndDate, XDate.MMDDYY),
- numOrigDurningNextReleaseCycle == 0 ? "N/A" : String.valueOf(numOrigDurningNextReleaseCycle),
- numNonSupportReleased == null ? "N/A" : String.valueOf(numNonSupportReleased),
- numOrigDurningNextReleaseCycle == 0 || numNonSupportReleased == null || numNonSupportReleased == 0 ? "N/A" : AtsUtil.doubleToI18nString((double) numOrigDurningNextReleaseCycle / (double) numNonSupportReleased)}));
- monitor.worked(1);
- }
- sb.append(AHTML.endMultiColumnTable());
- return sb.toString();
- }
-}
+/******************************************************************************* + * 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.navigate; + +import java.util.Collection; +import java.util.Date; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.config.AtsCacheManager; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.ats.util.AtsPriority.PriorityType; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.ats.util.VersionMetrics; +import org.eclipse.osee.ats.util.VersionTeamMetrics; +import org.eclipse.osee.ats.util.widgets.dialog.TeamDefinitionDialog; +import org.eclipse.osee.framework.core.enums.Active; +import org.eclipse.osee.framework.core.exception.MultipleAttributesExist; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.AHTML; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager; +import org.eclipse.osee.framework.ui.plugin.util.AWorkbench; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction; +import org.eclipse.osee.framework.ui.skynet.results.XResultData; +import org.eclipse.osee.framework.ui.skynet.results.html.XResultPage.Manipulations; +import org.eclipse.osee.framework.ui.skynet.util.ChangeType; +import org.eclipse.osee.framework.ui.skynet.widgets.XDate; +import org.eclipse.osee.framework.ui.swt.Displays; + +/** + * @author Donald G. Dunne + */ +public class FirstTimeQualityMetricReportItem extends XNavigateItemAction { + + private final TeamDefinitionArtifact teamDef; + private final String teamDefName; + + public FirstTimeQualityMetricReportItem(XNavigateItem parent, String name, String teamDefName) { + super(parent, name, AtsImage.REPORT); + this.teamDefName = teamDefName; + this.teamDef = null; + } + + public FirstTimeQualityMetricReportItem(XNavigateItem parent) { + this(parent, "First Time Quality Metric Report", null); + } + + @Override + public String getDescription() { + return "This report will genereate a metric comprised of:\n\n# of priority 1 and 2 OSEE problem actions orginated between release\n__________________________________\n# of non-support actions in that released"; + } + + @Override + public void run(TableLoadOption... tableLoadOptions) throws OseeCoreException { + TeamDefinitionArtifact useTeamDef = teamDef; + if (useTeamDef == null && teamDefName != null) { + useTeamDef = + (TeamDefinitionArtifact) AtsCacheManager.getSoleArtifactByName( + ArtifactTypeManager.getType(AtsArtifactTypes.TeamDefinition), teamDefName); + } + if (useTeamDef == null) { + TeamDefinitionDialog ld = new TeamDefinitionDialog("Select Team", "Select Team"); + ld.setTitle(getName()); + try { + ld.setInput(TeamDefinitionArtifact.getTeamReleaseableDefinitions(Active.Both)); + } catch (MultipleAttributesExist ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + int result = ld.open(); + if (result == 0) { + if (ld.getResult().length == 0) { + AWorkbench.popup("ERROR", "You must select a team to operate against."); + return; + } + useTeamDef = (TeamDefinitionArtifact) ld.getResult()[0]; + } else { + return; + } + } else if (!MessageDialog.openConfirm(Displays.getActiveShell(), getName(), getName())) { + return; + } + + ReportJob job = new ReportJob(getName(), useTeamDef); + job.setUser(true); + job.setPriority(Job.LONG); + job.schedule(); + } + + private static class ReportJob extends Job { + + private final TeamDefinitionArtifact teamDef; + + public ReportJob(String title, TeamDefinitionArtifact teamDef) { + super(title); + this.teamDef = teamDef; + } + + @Override + public IStatus run(IProgressMonitor monitor) { + try { + XResultData resultData = new XResultData(); + String html = getTeamWorkflowReport(getName(), teamDef, monitor); + resultData.addRaw(html); + resultData.report(getName(), Manipulations.RAW_HTML); + } catch (Exception ex) { + return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, -1, ex.toString(), ex); + } + monitor.done(); + return Status.OK_STATUS; + } + } + + private static String[] HEADER_STRINGS = new String[] { + "Version", + "StartDate", + "RelDate", + "Num 1 + 2 Orig During Next Release Cycle", + "Num Non-Support Released", + "Ratio Orig 1 and 2 Bugs/Number Released"}; + + /** + * Ratio of # of priority 1 and 2 OSEE problem actions (non-cancelled) that were orginated between a release and the + * next release / # of non-support actions released in that release + * + * @return report + */ + public static String getTeamWorkflowReport(String title, TeamDefinitionArtifact teamDef, IProgressMonitor monitor) throws OseeCoreException { + StringBuilder sb = new StringBuilder(); + sb.append(AHTML.heading(3, title)); + sb.append(AHTML.beginMultiColumnTable(100, 1)); + sb.append(AHTML.addRowSpanMultiColumnTable( + "This report shows the ratio of 1+2 problem workflows created during next release cycle due to current release over the total non-support workflows during this release.", + HEADER_STRINGS.length)); + sb.append(AHTML.addHeaderRowMultiColumnTable(HEADER_STRINGS)); + VersionTeamMetrics teamMet = new VersionTeamMetrics(teamDef); + Collection<VersionMetrics> verMets = teamMet.getReleasedOrderedVersions(); + monitor.beginTask("Processing Versions", verMets.size()); + for (VersionMetrics verMet : verMets) { + Date thisReleaseStartDate = verMet.getReleaseStartDate(); + Date thisReleaseEndDate = verMet.getVerArt().getReleaseDate(); + Date nextReleaseStartDate = null; + Date nextReleaseEndDate = null; + VersionMetrics nextVerMet = verMet.getNextVerMetViaReleaseDate(); + if (nextVerMet != null) { + nextReleaseStartDate = nextVerMet.getReleaseStartDate(); + nextReleaseEndDate = nextVerMet.getVerArt().getReleaseDate(); + } + Integer numOrigDurningNextReleaseCycle = 0; + if (nextReleaseStartDate != null && nextReleaseEndDate != null) { + Collection<TeamWorkFlowArtifact> arts = + teamMet.getWorkflowsOriginatedBetween(nextReleaseStartDate, nextReleaseEndDate); + for (TeamWorkFlowArtifact team : arts) { + if (!team.isCancelled() && team.getChangeType() == ChangeType.Problem && (team.getPriority() == PriorityType.Priority_1 || team.getPriority() == PriorityType.Priority_2)) { + numOrigDurningNextReleaseCycle++; + } + } + } + Integer numNonSupportReleased = null; + if (thisReleaseEndDate != null) { + numNonSupportReleased = 0; + for (TeamWorkFlowArtifact team : verMet.getTeamWorkFlows(ChangeType.Problem, ChangeType.Improvement)) { + if (!team.isCancelled()) { + numNonSupportReleased++; + } + } + } + sb.append(AHTML.addRowMultiColumnTable(new String[] { + verMet.getVerArt().getName(), + XDate.getDateStr(thisReleaseStartDate, XDate.MMDDYY), + XDate.getDateStr(thisReleaseEndDate, XDate.MMDDYY), + numOrigDurningNextReleaseCycle == 0 ? "N/A" : String.valueOf(numOrigDurningNextReleaseCycle), + numNonSupportReleased == null ? "N/A" : String.valueOf(numNonSupportReleased), + numOrigDurningNextReleaseCycle == 0 || numNonSupportReleased == null || numNonSupportReleased == 0 ? "N/A" : AtsUtil.doubleToI18nString((double) numOrigDurningNextReleaseCycle / (double) numNonSupportReleased)})); + monitor.worked(1); + } + sb.append(AHTML.endMultiColumnTable()); + return sb.toString(); + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GenerateFullVersionReportItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GenerateFullVersionReportItem.java index 62142aa7d29..c3a3c314407 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GenerateFullVersionReportItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GenerateFullVersionReportItem.java @@ -1,138 +1,138 @@ -/*******************************************************************************
- * 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.navigate;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact;
-import org.eclipse.osee.ats.config.AtsCacheManager;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.ats.util.VersionReportJob;
-import org.eclipse.osee.ats.util.widgets.dialog.TeamDefinitionDialog;
-import org.eclipse.osee.framework.core.enums.Active;
-import org.eclipse.osee.framework.core.exception.ArtifactDoesNotExist;
-import org.eclipse.osee.framework.core.exception.MultipleAttributesExist;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction;
-import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
-import org.eclipse.osee.framework.ui.skynet.results.XResultData;
-import org.eclipse.osee.framework.ui.skynet.results.html.XResultPage.Manipulations;
-import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
-import org.eclipse.osee.framework.ui.swt.Displays;
-
-/**
- * @author Donald G. Dunne
- */
-public class GenerateFullVersionReportItem extends XNavigateItemAction {
-
- private final TeamDefinitionArtifact teamDef;
- private final String teamDefName;
-
- public GenerateFullVersionReportItem(XNavigateItem parent) {
- super(parent, "Generate Full Version Report", FrameworkImage.VERSION);
- this.teamDefName = null;
- this.teamDef = null;
- }
-
- public GenerateFullVersionReportItem(XNavigateItem parent, TeamDefinitionArtifact teamDef) {
- super(parent, "Generate Full Version Report", FrameworkImage.VERSION);
- this.teamDefName = null;
- this.teamDef = teamDef;
- }
-
- public GenerateFullVersionReportItem(XNavigateItem parent, String teamDefName) {
- super(parent, "Generate Full Version Report", FrameworkImage.VERSION);
- this.teamDefName = teamDefName;
- this.teamDef = null;
- }
-
- @Override
- public void run(TableLoadOption... tableLoadOptions) throws OseeCoreException {
- TeamDefinitionArtifact teamDef = getTeamDefinition();
- if (teamDef == null) {
- return;
- }
- if (!MessageDialog.openConfirm(Displays.getActiveShell(), getName(), getName())) {
- return;
- }
- PublishReportJob job = new PublishReportJob(teamDef);
- job.setUser(true);
- job.setPriority(Job.LONG);
- job.schedule();
- }
-
- public TeamDefinitionArtifact getTeamDefinition() throws OseeCoreException {
- if (teamDef != null) {
- return teamDef;
- }
- if (Strings.isValid(teamDefName)) {
- try {
- TeamDefinitionArtifact teamDef =
- (TeamDefinitionArtifact) AtsCacheManager.getSoleArtifactByName(
- ArtifactTypeManager.getType(AtsArtifactTypes.TeamDefinition), teamDefName);
-
- if (teamDef != null) {
- return teamDef;
- }
- } catch (ArtifactDoesNotExist ex) {
- // do nothing, going to get team below
- }
- }
- TeamDefinitionDialog ld = new TeamDefinitionDialog("Select Team", "Select Team");
- try {
- ld.setInput(TeamDefinitionArtifact.getTeamReleaseableDefinitions(Active.Active));
- } catch (MultipleAttributesExist ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- int result = ld.open();
- if (result == 0) {
- return (TeamDefinitionArtifact) ld.getResult()[0];
- }
- return null;
- }
-
- private static class PublishReportJob extends Job {
-
- private final TeamDefinitionArtifact teamDef;
-
- public PublishReportJob(TeamDefinitionArtifact teamDef) {
- super(teamDef.getName() + " as of " + XDate.getDateNow());
- this.teamDef = teamDef;
- }
-
- @Override
- public IStatus run(IProgressMonitor monitor) {
- try {
- String html = VersionReportJob.getFullReleaseReport(teamDef, monitor);
- XResultData rd = new XResultData();
- rd.addRaw(html);
- rd.report(getName(), Manipulations.RAW_HTML);
- } catch (Exception ex) {
- return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, -1, ex.toString(), ex);
- }
-
- monitor.done();
- return Status.OK_STATUS;
- }
- }
-
-}
+/******************************************************************************* + * 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.navigate; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact; +import org.eclipse.osee.ats.config.AtsCacheManager; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.ats.util.VersionReportJob; +import org.eclipse.osee.ats.util.widgets.dialog.TeamDefinitionDialog; +import org.eclipse.osee.framework.core.enums.Active; +import org.eclipse.osee.framework.core.exception.ArtifactDoesNotExist; +import org.eclipse.osee.framework.core.exception.MultipleAttributesExist; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction; +import org.eclipse.osee.framework.ui.skynet.FrameworkImage; +import org.eclipse.osee.framework.ui.skynet.results.XResultData; +import org.eclipse.osee.framework.ui.skynet.results.html.XResultPage.Manipulations; +import org.eclipse.osee.framework.ui.skynet.widgets.XDate; +import org.eclipse.osee.framework.ui.swt.Displays; + +/** + * @author Donald G. Dunne + */ +public class GenerateFullVersionReportItem extends XNavigateItemAction { + + private final TeamDefinitionArtifact teamDef; + private final String teamDefName; + + public GenerateFullVersionReportItem(XNavigateItem parent) { + super(parent, "Generate Full Version Report", FrameworkImage.VERSION); + this.teamDefName = null; + this.teamDef = null; + } + + public GenerateFullVersionReportItem(XNavigateItem parent, TeamDefinitionArtifact teamDef) { + super(parent, "Generate Full Version Report", FrameworkImage.VERSION); + this.teamDefName = null; + this.teamDef = teamDef; + } + + public GenerateFullVersionReportItem(XNavigateItem parent, String teamDefName) { + super(parent, "Generate Full Version Report", FrameworkImage.VERSION); + this.teamDefName = teamDefName; + this.teamDef = null; + } + + @Override + public void run(TableLoadOption... tableLoadOptions) throws OseeCoreException { + TeamDefinitionArtifact teamDef = getTeamDefinition(); + if (teamDef == null) { + return; + } + if (!MessageDialog.openConfirm(Displays.getActiveShell(), getName(), getName())) { + return; + } + PublishReportJob job = new PublishReportJob(teamDef); + job.setUser(true); + job.setPriority(Job.LONG); + job.schedule(); + } + + public TeamDefinitionArtifact getTeamDefinition() throws OseeCoreException { + if (teamDef != null) { + return teamDef; + } + if (Strings.isValid(teamDefName)) { + try { + TeamDefinitionArtifact teamDef = + (TeamDefinitionArtifact) AtsCacheManager.getSoleArtifactByName( + ArtifactTypeManager.getType(AtsArtifactTypes.TeamDefinition), teamDefName); + + if (teamDef != null) { + return teamDef; + } + } catch (ArtifactDoesNotExist ex) { + // do nothing, going to get team below + } + } + TeamDefinitionDialog ld = new TeamDefinitionDialog("Select Team", "Select Team"); + try { + ld.setInput(TeamDefinitionArtifact.getTeamReleaseableDefinitions(Active.Active)); + } catch (MultipleAttributesExist ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + int result = ld.open(); + if (result == 0) { + return (TeamDefinitionArtifact) ld.getResult()[0]; + } + return null; + } + + private static class PublishReportJob extends Job { + + private final TeamDefinitionArtifact teamDef; + + public PublishReportJob(TeamDefinitionArtifact teamDef) { + super(teamDef.getName() + " as of " + XDate.getDateNow()); + this.teamDef = teamDef; + } + + @Override + public IStatus run(IProgressMonitor monitor) { + try { + String html = VersionReportJob.getFullReleaseReport(teamDef, monitor); + XResultData rd = new XResultData(); + rd.addRaw(html); + rd.report(getName(), Manipulations.RAW_HTML); + } catch (Exception ex) { + return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, -1, ex.toString(), ex); + } + + monitor.done(); + return Status.OK_STATUS; + } + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GenerateGuid.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GenerateGuid.java index 05b4902d3fd..58e95ea716d 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GenerateGuid.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GenerateGuid.java @@ -1,35 +1,35 @@ -/*******************************************************************************
- * 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.navigate;
-
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.framework.jdk.core.util.GUID;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction;
-import org.eclipse.osee.framework.ui.skynet.results.XResultData;
-
-public class GenerateGuid extends XNavigateItemAction {
-
- public GenerateGuid(XNavigateItem parent) {
- super(parent, "Generate Guid", AtsImage.REPORT);
- }
-
- @Override
- public void run(TableLoadOption... tableLoadOptions) throws Exception {
- XResultData resultData = new XResultData();
- for (int x = 0; x < 20; x++) {
- resultData.log(GUID.create());
- }
- resultData.report("GUIDs");
- }
-
-}
+/******************************************************************************* + * 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.navigate; + +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.framework.jdk.core.util.GUID; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction; +import org.eclipse.osee.framework.ui.skynet.results.XResultData; + +public class GenerateGuid extends XNavigateItemAction { + + public GenerateGuid(XNavigateItem parent) { + super(parent, "Generate Guid", AtsImage.REPORT); + } + + @Override + public void run(TableLoadOption... tableLoadOptions) throws Exception { + XResultData resultData = new XResultData(); + for (int x = 0; x < 20; x++) { + resultData.log(GUID.create()); + } + resultData.report("GUIDs"); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GenerateReviewParticipationReport.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GenerateReviewParticipationReport.java index fa6ee755330..9b209257a12 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GenerateReviewParticipationReport.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GenerateReviewParticipationReport.java @@ -1,116 +1,116 @@ -/*******************************************************************************
- * 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.navigate;
-
-import java.util.Collection;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.xviewer.column.XViewerReviewRoleColumn;
-import org.eclipse.osee.ats.util.xviewer.column.XViewerSmaCompletedDateColumn;
-import org.eclipse.osee.ats.util.xviewer.column.XViewerSmaStateColumn;
-import org.eclipse.osee.ats.world.WorldXViewerFactory;
-import org.eclipse.osee.ats.world.search.MyReviewWorkflowItem;
-import org.eclipse.osee.ats.world.search.MyReviewWorkflowItem.ReviewState;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction;
-import org.eclipse.osee.framework.ui.skynet.artifact.massEditor.MassArtifactEditor;
-import org.eclipse.osee.framework.ui.skynet.artifact.massEditor.MassArtifactEditorInput;
-import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
-import org.eclipse.osee.framework.ui.skynet.widgets.dialog.UserListDialog;
-import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.SkynetXViewerFactory;
-import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column.XViewerArtifactNameColumn;
-import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column.XViewerArtifactTypeColumn;
-import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column.XViewerGuidColumn;
-import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column.XViewerHridColumn;
-import org.eclipse.osee.framework.ui.swt.Displays;
-
-/**
- * Donald G. Dunne
- */
-public class GenerateReviewParticipationReport extends XNavigateItemAction {
-
- private static final String MASS_XVIEWER_CUSTOMIZE_NAMESPACE = "org.eclipse.osee.ats.ReviewParticipationReport";
-
- public GenerateReviewParticipationReport(XNavigateItem parent) {
- super(parent, "Generate Review Participation Report", AtsImage.REPORT);
- }
-
- @Override
- public void run(TableLoadOption... tableLoadOptions) throws OseeCoreException {
- UserListDialog ld = new UserListDialog(Displays.getActiveShell());
- int result = ld.open();
- if (result == 0) {
- if (ld.getResult().length == 0) {
- AWorkbench.popup("ERROR", "Must select user");
- return;
- }
- User selectedUser = ld.getSelection();
- ParticipationReportJob job =
- new ParticipationReportJob("Review Participation Report - " + selectedUser, selectedUser);
- job.setUser(true);
- job.setPriority(Job.LONG);
- job.schedule();
- }
- }
-
- private static class ParticipationReportJob extends Job {
-
- private final User user;
-
- public ParticipationReportJob(String title, User user) {
- super(title);
- this.user = user;
- }
-
- @Override
- public IStatus run(IProgressMonitor monitor) {
- try {
- MyReviewWorkflowItem srch = new MyReviewWorkflowItem("", user, ReviewState.All);
- Collection<Artifact> reviewArts = srch.performSearchGetResults();
- MassArtifactEditorInput input =
- new MassArtifactEditorInput(getName() + " as of " + XDate.getDateNow(), reviewArts,
- new ReviewParticipationXViewerFactory(user));
- MassArtifactEditor.editArtifacts(input);
- } catch (Exception ex) {
- return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, -1, ex.toString(), ex);
- }
- monitor.done();
- return Status.OK_STATUS;
- }
- }
-
- public static class ReviewParticipationXViewerFactory extends SkynetXViewerFactory {
-
- public ReviewParticipationXViewerFactory(User user) {
- super(MASS_XVIEWER_CUSTOMIZE_NAMESPACE);
- registerColumns(new XViewerArtifactTypeColumn(true));
- registerColumns(new XViewerHridColumn());
- registerColumns(WorldXViewerFactory.Legacy_PCR_Col);
- registerColumns(new XViewerSmaStateColumn());
- registerColumns(new XViewerSmaCompletedDateColumn("Completed"));
- registerColumns(new XViewerReviewRoleColumn(user));
- registerColumns(WorldXViewerFactory.Related_To_State_Col);
- registerColumns(new XViewerArtifactNameColumn(true));
- registerColumns(new XViewerGuidColumn(true));
- registerAllAttributeColumns();
- }
-
- }
-}
+/******************************************************************************* + * 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.navigate; + +import java.util.Collection; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.xviewer.column.XViewerReviewRoleColumn; +import org.eclipse.osee.ats.util.xviewer.column.XViewerSmaCompletedDateColumn; +import org.eclipse.osee.ats.util.xviewer.column.XViewerSmaStateColumn; +import org.eclipse.osee.ats.world.WorldXViewerFactory; +import org.eclipse.osee.ats.world.search.MyReviewWorkflowItem; +import org.eclipse.osee.ats.world.search.MyReviewWorkflowItem.ReviewState; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.ui.plugin.util.AWorkbench; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction; +import org.eclipse.osee.framework.ui.skynet.artifact.massEditor.MassArtifactEditor; +import org.eclipse.osee.framework.ui.skynet.artifact.massEditor.MassArtifactEditorInput; +import org.eclipse.osee.framework.ui.skynet.widgets.XDate; +import org.eclipse.osee.framework.ui.skynet.widgets.dialog.UserListDialog; +import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.SkynetXViewerFactory; +import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column.XViewerArtifactNameColumn; +import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column.XViewerArtifactTypeColumn; +import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column.XViewerGuidColumn; +import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column.XViewerHridColumn; +import org.eclipse.osee.framework.ui.swt.Displays; + +/** + * Donald G. Dunne + */ +public class GenerateReviewParticipationReport extends XNavigateItemAction { + + private static final String MASS_XVIEWER_CUSTOMIZE_NAMESPACE = "org.eclipse.osee.ats.ReviewParticipationReport"; + + public GenerateReviewParticipationReport(XNavigateItem parent) { + super(parent, "Generate Review Participation Report", AtsImage.REPORT); + } + + @Override + public void run(TableLoadOption... tableLoadOptions) throws OseeCoreException { + UserListDialog ld = new UserListDialog(Displays.getActiveShell()); + int result = ld.open(); + if (result == 0) { + if (ld.getResult().length == 0) { + AWorkbench.popup("ERROR", "Must select user"); + return; + } + User selectedUser = ld.getSelection(); + ParticipationReportJob job = + new ParticipationReportJob("Review Participation Report - " + selectedUser, selectedUser); + job.setUser(true); + job.setPriority(Job.LONG); + job.schedule(); + } + } + + private static class ParticipationReportJob extends Job { + + private final User user; + + public ParticipationReportJob(String title, User user) { + super(title); + this.user = user; + } + + @Override + public IStatus run(IProgressMonitor monitor) { + try { + MyReviewWorkflowItem srch = new MyReviewWorkflowItem("", user, ReviewState.All); + Collection<Artifact> reviewArts = srch.performSearchGetResults(); + MassArtifactEditorInput input = + new MassArtifactEditorInput(getName() + " as of " + XDate.getDateNow(), reviewArts, + new ReviewParticipationXViewerFactory(user)); + MassArtifactEditor.editArtifacts(input); + } catch (Exception ex) { + return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, -1, ex.toString(), ex); + } + monitor.done(); + return Status.OK_STATUS; + } + } + + public static class ReviewParticipationXViewerFactory extends SkynetXViewerFactory { + + public ReviewParticipationXViewerFactory(User user) { + super(MASS_XVIEWER_CUSTOMIZE_NAMESPACE); + registerColumns(new XViewerArtifactTypeColumn(true)); + registerColumns(new XViewerHridColumn()); + registerColumns(WorldXViewerFactory.Legacy_PCR_Col); + registerColumns(new XViewerSmaStateColumn()); + registerColumns(new XViewerSmaCompletedDateColumn("Completed")); + registerColumns(new XViewerReviewRoleColumn(user)); + registerColumns(WorldXViewerFactory.Related_To_State_Col); + registerColumns(new XViewerArtifactNameColumn(true)); + registerColumns(new XViewerGuidColumn(true)); + registerAllAttributeColumns(); + } + + } +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GoalSearchWorkflowSearchItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GoalSearchWorkflowSearchItem.java index e3d33a84ed9..35bea6bba66 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GoalSearchWorkflowSearchItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GoalSearchWorkflowSearchItem.java @@ -1,192 +1,192 @@ -/*******************************************************************************
- * 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.navigate;
-
-import java.util.Collection;
-import java.util.logging.Level;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact;
-import org.eclipse.osee.ats.artifact.VersionArtifact;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.widgets.XHyperlabelTeamDefinitionSelection;
-import org.eclipse.osee.ats.world.WorldEditor;
-import org.eclipse.osee.ats.world.WorldEditorParameterSearchItem;
-import org.eclipse.osee.ats.world.search.GoalSearchItem;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.skynet.widgets.XCheckBox;
-import org.eclipse.osee.framework.ui.skynet.widgets.XMembersCombo;
-import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
-import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayoutData;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.IDynamicWidgetLayoutListener;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-
-/**
- * @author Donald G. Dunne
- */
-public class GoalSearchWorkflowSearchItem extends WorldEditorParameterSearchItem {
-
- private XHyperlabelTeamDefinitionSelection teamCombo = null;
- private XMembersCombo assigneeCombo;
- private XCheckBox includeCompletedCancelledCheckbox;
-
- public GoalSearchWorkflowSearchItem(String name) {
- super(name, AtsImage.GOAL);
- }
-
- public GoalSearchWorkflowSearchItem() {
- this("Goal Search");
- }
-
- public GoalSearchWorkflowSearchItem(GoalSearchWorkflowSearchItem goalWorkflowSearchItem) {
- super(goalWorkflowSearchItem, AtsImage.GOAL);
- }
-
- @Override
- public GoalSearchWorkflowSearchItem copy() {
- return new GoalSearchWorkflowSearchItem(this);
- }
-
- @Override
- public GoalSearchWorkflowSearchItem copyProvider() {
- return new GoalSearchWorkflowSearchItem(this);
- }
-
- @Override
- public String getParameterXWidgetXml() {
- return "<xWidgets>" +
- //
- "<XWidget xwidgetType=\"XHyperlabelTeamDefinitionSelection\" displayName=\"Team Definitions(s)\" horizontalLabel=\"true\"/>" +
- //
- "<XWidget xwidgetType=\"XMembersCombo\" displayName=\"Assignee\" horizontalLabel=\"true\"/>" +
- //
- "<XWidget xwidgetType=\"XCheckBox\" displayName=\"Include Completed/Cancelled\" defaultValue=\"false\" labelAfter=\"true\" horizontalLabel=\"true\"/>" +
- //
- "</xWidgets>";
- }
-
- @Override
- public Collection<? extends Artifact> performSearchGetResults(SearchType searchType) throws OseeCoreException {
- return new GoalSearchItem("", getSelectedTeamDefinitions(), isIncludeCompletedCancelledCheckbox(),
- getSelectedUser()).performSearchGetResults(false);
- }
-
- @Override
- public String getSelectedName(SearchType searchType) {
- StringBuffer sb = new StringBuffer();
- Collection<TeamDefinitionArtifact> teamDefs = getSelectedTeamDefinitions();
- if (teamDefs.size() > 0) {
- sb.append(" - Teams: " + org.eclipse.osee.framework.jdk.core.util.Collections.toString(",", teamDefs));
- }
- if (getSelectedUser() != null) {
- sb.append(" - Assignee: " + getSelectedUser());
- }
- if (isIncludeCompletedCancelledCheckbox()) {
- sb.append(" - Include Completed/Cancelled");
- }
- return Strings.truncate("Goals" + sb.toString(), WorldEditor.TITLE_MAX_LENGTH, true);
- }
-
- @Override
- public void widgetCreated(XWidget widget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener modListener, boolean isEditable) {
- if (widget.getLabel().equals("Assignee")) {
- assigneeCombo = (XMembersCombo) widget;
- }
- if (widget.getLabel().equals("Include Completed/Cancelled")) {
- includeCompletedCancelledCheckbox = (XCheckBox) widget;
- }
- if (widget.getLabel().equals("Team Definitions(s)")) {
- teamCombo = (XHyperlabelTeamDefinitionSelection) widget;
- }
- }
-
- private User getSelectedUser() {
- if (assigneeCombo == null) {
- return null;
- }
- return assigneeCombo.getUser();
- }
-
- public void setSelectedUser(User user) {
- if (assigneeCombo != null) {
- assigneeCombo.set(user);
- }
- }
-
- private boolean isIncludeCompletedCancelledCheckbox() {
- if (includeCompletedCancelledCheckbox == null) {
- return false;
- }
- return includeCompletedCancelledCheckbox.isSelected();
- }
-
- public void includeCompletedCancelledCheckbox(boolean selected) {
- if (includeCompletedCancelledCheckbox != null) {
- includeCompletedCancelledCheckbox.set(selected);
- }
- }
-
- public Collection<TeamDefinitionArtifact> getSelectedTeamDefinitions() {
- if (teamCombo == null) {
- return java.util.Collections.emptyList();
- }
- return teamCombo.getSelectedTeamDefintions();
- }
-
- public void setSelectedTeamDefinitions(Collection<TeamDefinitionArtifact> selectedTeamDefs) {
- if (teamCombo != null) {
- teamCombo.setSelectedTeamDefs(selectedTeamDefs);
- teamCombo.notifyXModifiedListeners();
- }
- }
-
- @Override
- public void createXWidgetLayoutData(DynamicXWidgetLayoutData layoutData, XWidget widget, FormToolkit toolkit, Artifact art, XModifiedListener modListener, boolean isEditable) {
- // do nothing
- }
-
- @Override
- public void widgetCreating(XWidget widget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener modListener, boolean isEditable) {
- // do nothing
- }
-
- @Override
- public Result isParameterSelectionValid() {
- try {
- User user = getSelectedUser();
- boolean includeCompleted = isIncludeCompletedCancelledCheckbox();
- if (user != null && includeCompleted) {
- return new Result("Assignee and Include Completed are not compatible selections.");
- }
- return Result.TrueResult;
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return new Result("Exception: " + ex.getLocalizedMessage());
- }
- }
-
- @Override
- public IDynamicWidgetLayoutListener getDynamicWidgetLayoutListener() {
- return null;
- }
-
- @Override
- public VersionArtifact getTargetedVersionArtifact() {
- return null;
- }
-
-}
+/******************************************************************************* + * 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.navigate; + +import java.util.Collection; +import java.util.logging.Level; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact; +import org.eclipse.osee.ats.artifact.VersionArtifact; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.widgets.XHyperlabelTeamDefinitionSelection; +import org.eclipse.osee.ats.world.WorldEditor; +import org.eclipse.osee.ats.world.WorldEditorParameterSearchItem; +import org.eclipse.osee.ats.world.search.GoalSearchItem; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.skynet.widgets.XCheckBox; +import org.eclipse.osee.framework.ui.skynet.widgets.XMembersCombo; +import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener; +import org.eclipse.osee.framework.ui.skynet.widgets.XWidget; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayoutData; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.IDynamicWidgetLayoutListener; +import org.eclipse.ui.forms.widgets.FormToolkit; + +/** + * @author Donald G. Dunne + */ +public class GoalSearchWorkflowSearchItem extends WorldEditorParameterSearchItem { + + private XHyperlabelTeamDefinitionSelection teamCombo = null; + private XMembersCombo assigneeCombo; + private XCheckBox includeCompletedCancelledCheckbox; + + public GoalSearchWorkflowSearchItem(String name) { + super(name, AtsImage.GOAL); + } + + public GoalSearchWorkflowSearchItem() { + this("Goal Search"); + } + + public GoalSearchWorkflowSearchItem(GoalSearchWorkflowSearchItem goalWorkflowSearchItem) { + super(goalWorkflowSearchItem, AtsImage.GOAL); + } + + @Override + public GoalSearchWorkflowSearchItem copy() { + return new GoalSearchWorkflowSearchItem(this); + } + + @Override + public GoalSearchWorkflowSearchItem copyProvider() { + return new GoalSearchWorkflowSearchItem(this); + } + + @Override + public String getParameterXWidgetXml() { + return "<xWidgets>" + + // + "<XWidget xwidgetType=\"XHyperlabelTeamDefinitionSelection\" displayName=\"Team Definitions(s)\" horizontalLabel=\"true\"/>" + + // + "<XWidget xwidgetType=\"XMembersCombo\" displayName=\"Assignee\" horizontalLabel=\"true\"/>" + + // + "<XWidget xwidgetType=\"XCheckBox\" displayName=\"Include Completed/Cancelled\" defaultValue=\"false\" labelAfter=\"true\" horizontalLabel=\"true\"/>" + + // + "</xWidgets>"; + } + + @Override + public Collection<? extends Artifact> performSearchGetResults(SearchType searchType) throws OseeCoreException { + return new GoalSearchItem("", getSelectedTeamDefinitions(), isIncludeCompletedCancelledCheckbox(), + getSelectedUser()).performSearchGetResults(false); + } + + @Override + public String getSelectedName(SearchType searchType) { + StringBuffer sb = new StringBuffer(); + Collection<TeamDefinitionArtifact> teamDefs = getSelectedTeamDefinitions(); + if (teamDefs.size() > 0) { + sb.append(" - Teams: " + org.eclipse.osee.framework.jdk.core.util.Collections.toString(",", teamDefs)); + } + if (getSelectedUser() != null) { + sb.append(" - Assignee: " + getSelectedUser()); + } + if (isIncludeCompletedCancelledCheckbox()) { + sb.append(" - Include Completed/Cancelled"); + } + return Strings.truncate("Goals" + sb.toString(), WorldEditor.TITLE_MAX_LENGTH, true); + } + + @Override + public void widgetCreated(XWidget widget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener modListener, boolean isEditable) { + if (widget.getLabel().equals("Assignee")) { + assigneeCombo = (XMembersCombo) widget; + } + if (widget.getLabel().equals("Include Completed/Cancelled")) { + includeCompletedCancelledCheckbox = (XCheckBox) widget; + } + if (widget.getLabel().equals("Team Definitions(s)")) { + teamCombo = (XHyperlabelTeamDefinitionSelection) widget; + } + } + + private User getSelectedUser() { + if (assigneeCombo == null) { + return null; + } + return assigneeCombo.getUser(); + } + + public void setSelectedUser(User user) { + if (assigneeCombo != null) { + assigneeCombo.set(user); + } + } + + private boolean isIncludeCompletedCancelledCheckbox() { + if (includeCompletedCancelledCheckbox == null) { + return false; + } + return includeCompletedCancelledCheckbox.isSelected(); + } + + public void includeCompletedCancelledCheckbox(boolean selected) { + if (includeCompletedCancelledCheckbox != null) { + includeCompletedCancelledCheckbox.set(selected); + } + } + + public Collection<TeamDefinitionArtifact> getSelectedTeamDefinitions() { + if (teamCombo == null) { + return java.util.Collections.emptyList(); + } + return teamCombo.getSelectedTeamDefintions(); + } + + public void setSelectedTeamDefinitions(Collection<TeamDefinitionArtifact> selectedTeamDefs) { + if (teamCombo != null) { + teamCombo.setSelectedTeamDefs(selectedTeamDefs); + teamCombo.notifyXModifiedListeners(); + } + } + + @Override + public void createXWidgetLayoutData(DynamicXWidgetLayoutData layoutData, XWidget widget, FormToolkit toolkit, Artifact art, XModifiedListener modListener, boolean isEditable) { + // do nothing + } + + @Override + public void widgetCreating(XWidget widget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener modListener, boolean isEditable) { + // do nothing + } + + @Override + public Result isParameterSelectionValid() { + try { + User user = getSelectedUser(); + boolean includeCompleted = isIncludeCompletedCancelledCheckbox(); + if (user != null && includeCompleted) { + return new Result("Assignee and Include Completed are not compatible selections."); + } + return Result.TrueResult; + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + return new Result("Exception: " + ex.getLocalizedMessage()); + } + } + + @Override + public IDynamicWidgetLayoutListener getDynamicWidgetLayoutListener() { + return null; + } + + @Override + public VersionArtifact getTargetedVersionArtifact() { + return null; + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/ImportActionsViaSpreadsheet.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/ImportActionsViaSpreadsheet.java index c6257009a29..584140bf9ed 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/ImportActionsViaSpreadsheet.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/ImportActionsViaSpreadsheet.java @@ -25,9 +25,6 @@ public class ImportActionsViaSpreadsheet extends XNavigateItemAction { public static String strs[] = new String[] {}; - /** - * @param parent - */ public ImportActionsViaSpreadsheet(XNavigateItem parent) { super(parent, "Import Actions Via Spreadsheet", FrameworkImage.IMPORT); } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/NavigateView.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/NavigateView.java index 7f29dab8591..970efdd09c3 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/NavigateView.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/NavigateView.java @@ -1,304 +1,304 @@ -/*******************************************************************************
- * 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.navigate;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Level;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IRegistryEventListener;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.IJobChangeEvent;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.core.runtime.jobs.JobChangeAdapter;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.osee.ats.actions.MyFavoritesAction;
-import org.eclipse.osee.ats.actions.MyWorldAction;
-import org.eclipse.osee.ats.actions.NewAction;
-import org.eclipse.osee.ats.actions.NewGoal;
-import org.eclipse.osee.ats.actions.OpenChangeReportByIdAction;
-import org.eclipse.osee.ats.actions.OpenWorkflowByIdAction;
-import org.eclipse.osee.ats.actions.OpenWorldByIdAction;
-import org.eclipse.osee.ats.config.AtsBulkLoad;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsUtil;
-import org.eclipse.osee.framework.core.client.ClientSessionManager;
-import org.eclipse.osee.framework.core.operation.CompositeOperation;
-import org.eclipse.osee.framework.core.operation.IOperation;
-import org.eclipse.osee.framework.core.operation.Operations;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.plugin.core.IActionable;
-import org.eclipse.osee.framework.skynet.core.UserManager;
-import org.eclipse.osee.framework.ui.plugin.OseeUiActions;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
-import org.eclipse.osee.framework.ui.skynet.OseeContributionItem;
-import org.eclipse.osee.framework.ui.skynet.action.CollapseAllAction;
-import org.eclipse.osee.framework.ui.skynet.action.ExpandAllAction;
-import org.eclipse.osee.framework.ui.skynet.notify.OseeNotificationManager;
-import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite;
-import org.eclipse.osee.framework.ui.skynet.util.LoadingComposite;
-import org.eclipse.osee.framework.ui.swt.Displays;
-import org.eclipse.osee.framework.ui.swt.Widgets;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.IActionBars;
-import org.eclipse.ui.IMemento;
-import org.eclipse.ui.IViewSite;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.part.ViewPart;
-import org.eclipse.ui.progress.UIJob;
-
-/**
- * @author Donald G. Dunne
- */
-public class NavigateView extends ViewPart implements IActionable {
-
- public static final String VIEW_ID = "org.eclipse.osee.ats.navigate.NavigateView";
- public static final String HELP_CONTEXT_ID = "atsNavigator";
- private AtsNavigateComposite xNavComp;
- private final boolean includeCompleteCancelled = false;
- private Composite parent;
- private LoadingComposite loadingComposite;
-
- @Override
- public void createPartControl(Composite parent) {
- this.parent = parent;
- loadingComposite = new LoadingComposite(parent);
- refreshData();
- }
-
- public void refreshData() {
- List<IOperation> ops = new ArrayList<IOperation>();
- ops.add(AtsBulkLoad.getConfigLoadingOperation());
- ops.add(new AtsNavigateViewItemsOperation());
+/******************************************************************************* + * 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.navigate; + +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Level; +import org.eclipse.core.runtime.IExtension; +import org.eclipse.core.runtime.IExtensionPoint; +import org.eclipse.core.runtime.IExtensionRegistry; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IRegistryEventListener; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.IJobChangeEvent; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.core.runtime.jobs.JobChangeAdapter; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.osee.ats.actions.MyFavoritesAction; +import org.eclipse.osee.ats.actions.MyWorldAction; +import org.eclipse.osee.ats.actions.NewAction; +import org.eclipse.osee.ats.actions.NewGoal; +import org.eclipse.osee.ats.actions.OpenChangeReportByIdAction; +import org.eclipse.osee.ats.actions.OpenWorkflowByIdAction; +import org.eclipse.osee.ats.actions.OpenWorldByIdAction; +import org.eclipse.osee.ats.config.AtsBulkLoad; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.core.client.ClientSessionManager; +import org.eclipse.osee.framework.core.operation.CompositeOperation; +import org.eclipse.osee.framework.core.operation.IOperation; +import org.eclipse.osee.framework.core.operation.Operations; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.plugin.core.IActionable; +import org.eclipse.osee.framework.skynet.core.UserManager; +import org.eclipse.osee.framework.ui.plugin.OseeUiActions; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem; +import org.eclipse.osee.framework.ui.skynet.OseeContributionItem; +import org.eclipse.osee.framework.ui.skynet.action.CollapseAllAction; +import org.eclipse.osee.framework.ui.skynet.action.ExpandAllAction; +import org.eclipse.osee.framework.ui.skynet.notify.OseeNotificationManager; +import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite; +import org.eclipse.osee.framework.ui.skynet.util.LoadingComposite; +import org.eclipse.osee.framework.ui.swt.Displays; +import org.eclipse.osee.framework.ui.swt.Widgets; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.DisposeEvent; +import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.IMemento; +import org.eclipse.ui.IViewSite; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.part.ViewPart; +import org.eclipse.ui.progress.UIJob; + +/** + * @author Donald G. Dunne + */ +public class NavigateView extends ViewPart implements IActionable { + + public static final String VIEW_ID = "org.eclipse.osee.ats.navigate.NavigateView"; + public static final String HELP_CONTEXT_ID = "atsNavigator"; + private AtsNavigateComposite xNavComp; + private final boolean includeCompleteCancelled = false; + private Composite parent; + private LoadingComposite loadingComposite; + + @Override + public void createPartControl(Composite parent) { + this.parent = parent; + loadingComposite = new LoadingComposite(parent); + refreshData(); + } + + public void refreshData() { + List<IOperation> ops = new ArrayList<IOperation>(); + ops.add(AtsBulkLoad.getConfigLoadingOperation()); + ops.add(new AtsNavigateViewItemsOperation()); IOperation operation = new CompositeOperation("Load ATS Navigator", AtsPlugin.PLUGIN_ID, ops); - Operations.executeAsJob(operation, false, Job.LONG, new ReloadJobChangeAdapter(this));
- }
-
- private final class ReloadJobChangeAdapter extends JobChangeAdapter {
-
- private final NavigateView navView;
-
- private ReloadJobChangeAdapter(NavigateView navView) {
- this.navView = navView;
- }
-
- @Override
- public void scheduled(IJobChangeEvent event) {
- super.scheduled(event);
- }
-
- @Override
- public void aboutToRun(IJobChangeEvent event) {
- super.aboutToRun(event);
- }
-
- @Override
- public void done(IJobChangeEvent event) {
- super.done(event);
- Job job = new UIJob("Load ATS Navigator") {
-
- @Override
- public IStatus runInUIThread(IProgressMonitor monitor) {
- try {
- showBusy(false);
- if (!DbConnectionExceptionComposite.dbConnectionIsOk(parent)) {
- return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, "Navigate View - !dbConnectionIsOk");
- }
-
- if (Widgets.isAccessible(loadingComposite)) {
- loadingComposite.dispose();
- }
- xNavComp = new AtsNavigateComposite(AtsNavigateViewItems.getInstance(), parent, SWT.NONE);
-
- AtsPlugin.getInstance().setHelp(xNavComp, HELP_CONTEXT_ID, "org.eclipse.osee.ats.help.ui");
- createToolBar();
-
- // add search text box
- AtsQuickSearchComposite composite = new AtsQuickSearchComposite(xNavComp, SWT.NONE);
- composite.addDisposeListener(new DisposeListener() {
-
- @Override
- public void widgetDisposed(DisposeEvent e) {
- OseeNotificationManager.getInstance().sendNotifications();
- }
- });
-
- if (savedFilterStr != null) {
- xNavComp.getFilteredTree().getFilterControl().setText(savedFilterStr);
- }
- xNavComp.refresh();
- xNavComp.getFilteredTree().getFilterControl().setFocus();
-
- Label label = new Label(xNavComp, SWT.None);
- String str = getWhoAmI();
- if (AtsUtil.isAtsAdmin()) {
- str += " - Admin";
- }
- if (!str.equals("")) {
- if (AtsUtil.isAtsAdmin()) {
- label.setForeground(Displays.getSystemColor(SWT.COLOR_RED));
- } else {
- label.setForeground(Displays.getSystemColor(SWT.COLOR_BLUE));
- }
- }
- label.setText(str);
- label.setToolTipText(str);
- GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_CENTER | GridData.VERTICAL_ALIGN_CENTER);
- gridData.heightHint = 15;
- label.setLayoutData(gridData);
-
- OseeContributionItem.addTo(navView, false);
- xNavComp.layout();
-
- addExtensionPointListenerBecauseOfWorkspaceLoading();
-
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- }
- return Status.OK_STATUS;
- }
- };
- Operations.scheduleJob(job, false, Job.SHORT, null);
- }
- }
-
- private void addExtensionPointListenerBecauseOfWorkspaceLoading() {
- IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
- extensionRegistry.addListener(new IRegistryEventListener() {
- @Override
- public void added(IExtension[] extensions) {
- xNavComp.refresh();
- }
-
- @Override
- public void added(IExtensionPoint[] extensionPoints) {
- xNavComp.refresh();
- }
-
- @Override
- public void removed(IExtension[] extensions) {
- xNavComp.refresh();
- }
-
- @Override
- public void removed(IExtensionPoint[] extensionPoints) {
- xNavComp.refresh();
- }
- }, "org.eclipse.osee.framework.ui.skynet.BlamOperation");
- }
-
- public boolean isIncludeCompleteCancelled() {
- return includeCompleteCancelled;
- }
-
- private String getWhoAmI() {
- try {
- String userName = UserManager.getUser().getName();
- return String.format("%s - %s:%s", userName, ClientSessionManager.getDataStoreName(),
- ClientSessionManager.getDataStoreLoginName());
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return "Exception: " + ex.getLocalizedMessage();
- }
- }
-
- protected void createToolBar() {
- IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
- toolbarManager.add(new MyWorldAction());
- toolbarManager.add(new MyFavoritesAction());
- toolbarManager.add(new CollapseAllAction(xNavComp.getFilteredTree().getViewer()));
- toolbarManager.add(new ExpandAllAction(xNavComp.getFilteredTree().getViewer()));
- toolbarManager.add(new OpenChangeReportByIdAction());
- toolbarManager.add(new OpenWorldByIdAction());
- toolbarManager.add(new OpenWorkflowByIdAction());
- toolbarManager.add(new NewAction());
- getViewSite().getActionBars().updateActionBars();
-
- IActionBars bars = getViewSite().getActionBars();
- IMenuManager mm = bars.getMenuManager();
- mm.add(new NewAction());
- mm.add(new NewGoal());
- mm.add(OseeUiActions.createBugAction(AtsPlugin.getInstance(), this, VIEW_ID, "ATS Navigator"));
-
- toolbarManager.update(true);
- }
-
- public static NavigateView getNavigateView() {
- IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
- try {
- return (NavigateView) page.showView(NavigateView.VIEW_ID);
- } catch (PartInitException e1) {
- MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Launch Error",
- "Couldn't Launch OSEE ATS NavigateView " + e1.getMessage());
- }
- return null;
- }
-
- @Override
- public String getActionDescription() {
- IStructuredSelection sel = (IStructuredSelection) xNavComp.getFilteredTree().getViewer().getSelection();
- if (sel.iterator().hasNext()) {
- return String.format("Currently Selected - %s", ((XNavigateItem) sel.iterator().next()).getName());
- }
- return "";
- }
-
- private static final String INPUT = "filter";
- private static final String FILTER_STR = "filterStr";
-
- @Override
- public void saveState(IMemento memento) {
- super.saveState(memento);
- memento = memento.createChild(INPUT);
-
- if (xNavComp != null && xNavComp.getFilteredTree().getFilterControl() != null && !xNavComp.getFilteredTree().isDisposed()) {
- String filterStr = xNavComp.getFilteredTree().getFilterControl().getText();
- memento.putString(FILTER_STR, filterStr);
- }
- }
- private String savedFilterStr = null;
-
- @Override
- public void init(IViewSite site, IMemento memento) throws PartInitException {
- super.init(site, memento);
- try {
- if (memento != null) {
- memento = memento.getChild(INPUT);
- if (memento != null) {
- savedFilterStr = memento.getString(FILTER_STR);
- }
- }
- } catch (Exception ex) {
+ Operations.executeAsJob(operation, false, Job.LONG, new ReloadJobChangeAdapter(this)); + } + + private final class ReloadJobChangeAdapter extends JobChangeAdapter { + + private final NavigateView navView; + + private ReloadJobChangeAdapter(NavigateView navView) { + this.navView = navView; + } + + @Override + public void scheduled(IJobChangeEvent event) { + super.scheduled(event); + } + + @Override + public void aboutToRun(IJobChangeEvent event) { + super.aboutToRun(event); + } + + @Override + public void done(IJobChangeEvent event) { + super.done(event); + Job job = new UIJob("Load ATS Navigator") { + + @Override + public IStatus runInUIThread(IProgressMonitor monitor) { + try { + showBusy(false); + if (!DbConnectionExceptionComposite.dbConnectionIsOk(parent)) { + return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, "Navigate View - !dbConnectionIsOk"); + } + + if (Widgets.isAccessible(loadingComposite)) { + loadingComposite.dispose(); + } + xNavComp = new AtsNavigateComposite(AtsNavigateViewItems.getInstance(), parent, SWT.NONE); + + AtsPlugin.getInstance().setHelp(xNavComp, HELP_CONTEXT_ID, "org.eclipse.osee.ats.help.ui"); + createToolBar(); + + // add search text box + AtsQuickSearchComposite composite = new AtsQuickSearchComposite(xNavComp, SWT.NONE); + composite.addDisposeListener(new DisposeListener() { + + @Override + public void widgetDisposed(DisposeEvent e) { + OseeNotificationManager.getInstance().sendNotifications(); + } + }); + + if (savedFilterStr != null) { + xNavComp.getFilteredTree().getFilterControl().setText(savedFilterStr); + } + xNavComp.refresh(); + xNavComp.getFilteredTree().getFilterControl().setFocus(); + + Label label = new Label(xNavComp, SWT.None); + String str = getWhoAmI(); + if (AtsUtil.isAtsAdmin()) { + str += " - Admin"; + } + if (!str.equals("")) { + if (AtsUtil.isAtsAdmin()) { + label.setForeground(Displays.getSystemColor(SWT.COLOR_RED)); + } else { + label.setForeground(Displays.getSystemColor(SWT.COLOR_BLUE)); + } + } + label.setText(str); + label.setToolTipText(str); + GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_CENTER | GridData.VERTICAL_ALIGN_CENTER); + gridData.heightHint = 15; + label.setLayoutData(gridData); + + OseeContributionItem.addTo(navView, false); + xNavComp.layout(); + + addExtensionPointListenerBecauseOfWorkspaceLoading(); + + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + } + return Status.OK_STATUS; + } + }; + Operations.scheduleJob(job, false, Job.SHORT, null); + } + } + + private void addExtensionPointListenerBecauseOfWorkspaceLoading() { + IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry(); + extensionRegistry.addListener(new IRegistryEventListener() { + @Override + public void added(IExtension[] extensions) { + xNavComp.refresh(); + } + + @Override + public void added(IExtensionPoint[] extensionPoints) { + xNavComp.refresh(); + } + + @Override + public void removed(IExtension[] extensions) { + xNavComp.refresh(); + } + + @Override + public void removed(IExtensionPoint[] extensionPoints) { + xNavComp.refresh(); + } + }, "org.eclipse.osee.framework.ui.skynet.BlamOperation"); + } + + public boolean isIncludeCompleteCancelled() { + return includeCompleteCancelled; + } + + private String getWhoAmI() { + try { + String userName = UserManager.getUser().getName(); + return String.format("%s - %s:%s", userName, ClientSessionManager.getDataStoreName(), + ClientSessionManager.getDataStoreLoginName()); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + return "Exception: " + ex.getLocalizedMessage(); + } + } + + protected void createToolBar() { + IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager(); + toolbarManager.add(new MyWorldAction()); + toolbarManager.add(new MyFavoritesAction()); + toolbarManager.add(new CollapseAllAction(xNavComp.getFilteredTree().getViewer())); + toolbarManager.add(new ExpandAllAction(xNavComp.getFilteredTree().getViewer())); + toolbarManager.add(new OpenChangeReportByIdAction()); + toolbarManager.add(new OpenWorldByIdAction()); + toolbarManager.add(new OpenWorkflowByIdAction()); + toolbarManager.add(new NewAction()); + getViewSite().getActionBars().updateActionBars(); + + IActionBars bars = getViewSite().getActionBars(); + IMenuManager mm = bars.getMenuManager(); + mm.add(new NewAction()); + mm.add(new NewGoal()); + mm.add(OseeUiActions.createBugAction(AtsPlugin.getInstance(), this, VIEW_ID, "ATS Navigator")); + + toolbarManager.update(true); + } + + public static NavigateView getNavigateView() { + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + try { + return (NavigateView) page.showView(NavigateView.VIEW_ID); + } catch (PartInitException e1) { + MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Launch Error", + "Couldn't Launch OSEE ATS NavigateView " + e1.getMessage()); + } + return null; + } + + @Override + public String getActionDescription() { + IStructuredSelection sel = (IStructuredSelection) xNavComp.getFilteredTree().getViewer().getSelection(); + if (sel.iterator().hasNext()) { + return String.format("Currently Selected - %s", ((XNavigateItem) sel.iterator().next()).getName()); + } + return ""; + } + + private static final String INPUT = "filter"; + private static final String FILTER_STR = "filterStr"; + + @Override + public void saveState(IMemento memento) { + super.saveState(memento); + memento = memento.createChild(INPUT); + + if (xNavComp != null && xNavComp.getFilteredTree().getFilterControl() != null && !xNavComp.getFilteredTree().isDisposed()) { + String filterStr = xNavComp.getFilteredTree().getFilterControl().getText(); + memento.putString(FILTER_STR, filterStr); + } + } + private String savedFilterStr = null; + + @Override + public void init(IViewSite site, IMemento memento) throws PartInitException { + super.init(site, memento); + try { + if (memento != null) { + memento = memento.getChild(INPUT); + if (memento != null) { + savedFilterStr = memento.getString(FILTER_STR); + } + } + } catch (Exception ex) { OseeLog.log(AtsPlugin.class, Level.WARNING, "NavigateView error on init", ex); - }
- }
-
- @Override
- public void setFocus() {
- // do nothing
- }
-
+ } + } + + @Override + public void setFocus() { + // do nothing + } + }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/NewPeerToPeerReviewItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/NewPeerToPeerReviewItem.java index 51e43089fb7..67458917ddc 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/NewPeerToPeerReviewItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/NewPeerToPeerReviewItem.java @@ -34,9 +34,6 @@ import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog; */ public class NewPeerToPeerReviewItem extends XNavigateItemAction { - /** - * @param parent - */ public NewPeerToPeerReviewItem(XNavigateItem parent) { super(parent, "New Stand-alone Peer To Peer Review", AtsImage.REVIEW); } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/PublishFullVersionReportItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/PublishFullVersionReportItem.java index 3ded2b6fa3b..8f2d079dcac 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/PublishFullVersionReportItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/PublishFullVersionReportItem.java @@ -1,134 +1,134 @@ -/*******************************************************************************
- * 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.navigate;
-
-import java.io.File;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact;
-import org.eclipse.osee.ats.config.AtsCacheManager;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.AtsArtifactTypes;
-import org.eclipse.osee.ats.util.VersionReportJob;
-import org.eclipse.osee.ats.util.widgets.dialog.TeamDefinitionDialog;
-import org.eclipse.osee.framework.core.enums.Active;
-import org.eclipse.osee.framework.core.exception.ArtifactDoesNotExist;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.jdk.core.util.Lib;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
-import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction;
-import org.eclipse.osee.framework.ui.swt.Displays;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.program.Program;
-import org.eclipse.swt.widgets.FileDialog;
-
-/**
- * @author Donald G. Dunne
- */
-public class PublishFullVersionReportItem extends XNavigateItemAction {
-
- private final TeamDefinitionArtifact teamDef;
- private final String publishToFilename;
- private final String teamDefName;
-
- public PublishFullVersionReportItem(XNavigateItem parent, String name, TeamDefinitionArtifact teamDef, String publishToFilename) {
- super(parent, name);
- this.teamDef = teamDef;
- this.teamDefName = null;
- this.publishToFilename = publishToFilename;
- }
-
- public PublishFullVersionReportItem(XNavigateItem parent, String name, String teamDefName, String publishToFilename) {
- super(parent, name);
- this.teamDefName = teamDefName;
- this.teamDef = null;
- this.publishToFilename = publishToFilename;
- }
-
- public PublishFullVersionReportItem(XNavigateItem parent) {
- this(parent, "Publish Full Version Report", (String) null, null);
- }
-
- @Override
- public void run(TableLoadOption... tableLoadOptions) throws OseeCoreException {
- String usePublishToFilename = publishToFilename;
- if (usePublishToFilename == null) {
- final FileDialog dialog = new FileDialog(Displays.getActiveShell().getShell(), SWT.SAVE);
- dialog.setFilterExtensions(new String[] {"*.html"});
- usePublishToFilename = dialog.open();
- if (usePublishToFilename == null) {
- return;
- }
- }
- TeamDefinitionArtifact useTeamDef = teamDef;
- if (useTeamDef == null && teamDefName != null) {
- try {
- useTeamDef =
- (TeamDefinitionArtifact) AtsCacheManager.getSoleArtifactByName(
- ArtifactTypeManager.getType(AtsArtifactTypes.TeamDefinition), teamDefName);
- } catch (ArtifactDoesNotExist ex) {
- // do nothing, going to get team below
- }
- }
- if (useTeamDef == null) {
- TeamDefinitionDialog ld = new TeamDefinitionDialog("Select Team", "Select Team");
- ld.setInput(TeamDefinitionArtifact.getTeamDefinitions(Active.Both));
- int result = ld.open();
- if (result == 0) {
- useTeamDef = (TeamDefinitionArtifact) ld.getResult()[0];
- } else {
- return;
- }
- } else if (!MessageDialog.openConfirm(Displays.getActiveShell(), getName(), getName())) {
- return;
- }
-
- String title = useTeamDef.getName() + " Version Report";
- PublishReportJob job = new PublishReportJob(title, teamDef, usePublishToFilename);
- job.setUser(true);
- job.setPriority(Job.LONG);
- job.schedule();
- }
-
- private static class PublishReportJob extends Job {
-
- private final TeamDefinitionArtifact teamDef;
- private final String filename;
-
- public PublishReportJob(String title, TeamDefinitionArtifact teamDef, String filename) {
- super(title);
- this.teamDef = teamDef;
- this.filename = filename;
- }
-
- @Override
- public IStatus run(IProgressMonitor monitor) {
- try {
- String html = VersionReportJob.getFullReleaseReport(teamDef, monitor);
- Lib.writeStringToFile(html, new File(filename));
- Program.launch(filename);
- AWorkbench.popup("Publish Complete", "Data Published To \"" + filename + "\"");
- } catch (Exception ex) {
- return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, -1, ex.toString(), ex);
- }
-
- monitor.done();
- return Status.OK_STATUS;
- }
- }
-
-}
+/******************************************************************************* + * 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.navigate; + +import java.io.File; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact; +import org.eclipse.osee.ats.config.AtsCacheManager; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.AtsArtifactTypes; +import org.eclipse.osee.ats.util.VersionReportJob; +import org.eclipse.osee.ats.util.widgets.dialog.TeamDefinitionDialog; +import org.eclipse.osee.framework.core.enums.Active; +import org.eclipse.osee.framework.core.exception.ArtifactDoesNotExist; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.Lib; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager; +import org.eclipse.osee.framework.ui.plugin.util.AWorkbench; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction; +import org.eclipse.osee.framework.ui.swt.Displays; +import org.eclipse.swt.SWT; +import org.eclipse.swt.program.Program; +import org.eclipse.swt.widgets.FileDialog; + +/** + * @author Donald G. Dunne + */ +public class PublishFullVersionReportItem extends XNavigateItemAction { + + private final TeamDefinitionArtifact teamDef; + private final String publishToFilename; + private final String teamDefName; + + public PublishFullVersionReportItem(XNavigateItem parent, String name, TeamDefinitionArtifact teamDef, String publishToFilename) { + super(parent, name); + this.teamDef = teamDef; + this.teamDefName = null; + this.publishToFilename = publishToFilename; + } + + public PublishFullVersionReportItem(XNavigateItem parent, String name, String teamDefName, String publishToFilename) { + super(parent, name); + this.teamDefName = teamDefName; + this.teamDef = null; + this.publishToFilename = publishToFilename; + } + + public PublishFullVersionReportItem(XNavigateItem parent) { + this(parent, "Publish Full Version Report", (String) null, null); + } + + @Override + public void run(TableLoadOption... tableLoadOptions) throws OseeCoreException { + String usePublishToFilename = publishToFilename; + if (usePublishToFilename == null) { + final FileDialog dialog = new FileDialog(Displays.getActiveShell().getShell(), SWT.SAVE); + dialog.setFilterExtensions(new String[] {"*.html"}); + usePublishToFilename = dialog.open(); + if (usePublishToFilename == null) { + return; + } + } + TeamDefinitionArtifact useTeamDef = teamDef; + if (useTeamDef == null && teamDefName != null) { + try { + useTeamDef = + (TeamDefinitionArtifact) AtsCacheManager.getSoleArtifactByName( + ArtifactTypeManager.getType(AtsArtifactTypes.TeamDefinition), teamDefName); + } catch (ArtifactDoesNotExist ex) { + // do nothing, going to get team below + } + } + if (useTeamDef == null) { + TeamDefinitionDialog ld = new TeamDefinitionDialog("Select Team", "Select Team"); + ld.setInput(TeamDefinitionArtifact.getTeamDefinitions(Active.Both)); + int result = ld.open(); + if (result == 0) { + useTeamDef = (TeamDefinitionArtifact) ld.getResult()[0]; + } else { + return; + } + } else if (!MessageDialog.openConfirm(Displays.getActiveShell(), getName(), getName())) { + return; + } + + String title = useTeamDef.getName() + " Version Report"; + PublishReportJob job = new PublishReportJob(title, teamDef, usePublishToFilename); + job.setUser(true); + job.setPriority(Job.LONG); + job.schedule(); + } + + private static class PublishReportJob extends Job { + + private final TeamDefinitionArtifact teamDef; + private final String filename; + + public PublishReportJob(String title, TeamDefinitionArtifact teamDef, String filename) { + super(title); + this.teamDef = teamDef; + this.filename = filename; + } + + @Override + public IStatus run(IProgressMonitor monitor) { + try { + String html = VersionReportJob.getFullReleaseReport(teamDef, monitor); + Lib.writeStringToFile(html, new File(filename)); + Program.launch(filename); + AWorkbench.popup("Publish Complete", "Data Published To \"" + filename + "\""); + } catch (Exception ex) { + return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, -1, ex.toString(), ex); + } + + monitor.done(); + return Status.OK_STATUS; + } + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/ReleaseVersionItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/ReleaseVersionItem.java index dc0eab620e6..b53ee3d4c1f 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/ReleaseVersionItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/ReleaseVersionItem.java @@ -43,7 +43,6 @@ public class ReleaseVersionItem extends XNavigateItemAction { private final TeamDefinitionArtifact teamDefHoldingVersions; /** - * @param parent * @param teamDefHoldingVersions Team Definition Artifact that is related to versions or null for popup selection */ public ReleaseVersionItem(XNavigateItem parent, TeamDefinitionArtifact teamDefHoldingVersions) { diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/TeamWorkflowSearchWorkflowSearchItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/TeamWorkflowSearchWorkflowSearchItem.java index b11f540299a..174911d48de 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/TeamWorkflowSearchWorkflowSearchItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/TeamWorkflowSearchWorkflowSearchItem.java @@ -1,358 +1,358 @@ -/*******************************************************************************
- * 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.navigate;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.logging.Level;
-import org.eclipse.osee.ats.AtsImage;
-import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact;
-import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
-import org.eclipse.osee.ats.artifact.VersionArtifact;
-import org.eclipse.osee.ats.artifact.VersionArtifact.VersionReleaseType;
-import org.eclipse.osee.ats.internal.AtsPlugin;
-import org.eclipse.osee.ats.util.widgets.ReviewManager;
-import org.eclipse.osee.ats.util.widgets.XHyperlabelTeamDefinitionSelection;
-import org.eclipse.osee.ats.world.WorldEditor;
-import org.eclipse.osee.ats.world.WorldEditorParameterSearchItem;
-import org.eclipse.osee.ats.world.search.TeamWorldSearchItem;
-import org.eclipse.osee.ats.world.search.TeamWorldSearchItem.ReleasedOption;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.User;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
-import org.eclipse.osee.framework.ui.plugin.util.Result;
-import org.eclipse.osee.framework.ui.skynet.widgets.XCheckBox;
-import org.eclipse.osee.framework.ui.skynet.widgets.XCombo;
-import org.eclipse.osee.framework.ui.skynet.widgets.XMembersCombo;
-import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
-import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayoutData;
-import org.eclipse.osee.framework.ui.skynet.widgets.workflow.IDynamicWidgetLayoutListener;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-
-/**
- * @author Donald G. Dunne
- */
-public class TeamWorkflowSearchWorkflowSearchItem extends WorldEditorParameterSearchItem {
-
- protected XHyperlabelTeamDefinitionSelection teamCombo = null;
- protected XCombo releasedCombo = null;
- protected XCombo versionCombo = null;
- protected XMembersCombo assigneeCombo;
- protected XCheckBox includeCompletedCancelledCheckbox;
- protected XCheckBox showFlatCheckbox;
-
- public TeamWorkflowSearchWorkflowSearchItem(String name) {
- super(name, AtsImage.TEAM_WORKFLOW);
- }
-
- public TeamWorkflowSearchWorkflowSearchItem() {
- this("Team Workflow Search");
- }
-
- public TeamWorkflowSearchWorkflowSearchItem(TeamWorkflowSearchWorkflowSearchItem editTeamWorkflowSearchItem) {
- super(editTeamWorkflowSearchItem, AtsImage.TEAM_WORKFLOW);
- }
-
- @Override
- public TeamWorkflowSearchWorkflowSearchItem copy() {
- return new TeamWorkflowSearchWorkflowSearchItem(this);
- }
-
- @Override
- public TeamWorkflowSearchWorkflowSearchItem copyProvider() {
- return new TeamWorkflowSearchWorkflowSearchItem(this);
- }
-
- @SuppressWarnings("unused")
- @Override
- public String getParameterXWidgetXml() throws OseeCoreException {
- return "<xWidgets>" +
- //
- "<XWidget xwidgetType=\"XHyperlabelTeamDefinitionSelection\" displayName=\"Team Definitions(s)\" horizontalLabel=\"true\"/>" +
- //
- "<XWidget xwidgetType=\"XCombo()\" beginComposite=\"10\" displayName=\"Version\" horizontalLabel=\"true\"/>" +
- //
- "<XWidget xwidgetType=\"XCombo(Both,Released,UnReleased)\" displayName=\"Released\" horizontalLabel=\"true\"/>" +
- //
- "<XWidget xwidgetType=\"XMembersCombo\" displayName=\"Assignee\" horizontalLabel=\"true\"/>" +
- //
- "<XWidget xwidgetType=\"XCheckBox\" displayName=\"Include Completed/Cancelled\" defaultValue=\"false\" labelAfter=\"true\" horizontalLabel=\"true\"/>" +
- //
- "<XWidget xwidgetType=\"XCheckBox\" displayName=\"Show Flat\" defaultValue=\"false\" labelAfter=\"true\" horizontalLabel=\"true\" toolTip=\"Show Tasks/Reviews flattened instead of hierarchcial\"/>" +
- //
- "</xWidgets>";
- }
-
- @Override
- public Collection<? extends Artifact> performSearchGetResults(SearchType searchType) throws OseeCoreException {
- Collection<Artifact> artifacts =
- new TeamWorldSearchItem("", getSelectedTeamDefinitions(), isIncludeCompletedCancelledCheckbox(), false, false,
- getSelectedVersionArtifact(), getSelectedUser(), getSelectedReleased()).performSearchGetResults(false);
- return filterShowFlat(artifacts);
- }
-
- protected Collection<? extends Artifact> filterShowFlat(Collection<Artifact> artifacts) throws OseeCoreException {
- if (!isShowFlatCheckbox()) {
- return artifacts;
- }
- Set<Artifact> results = new HashSet<Artifact>(artifacts);
- for (Artifact artifact : artifacts) {
- if (artifact instanceof TaskableStateMachineArtifact) {
- results.addAll(((TaskableStateMachineArtifact) artifact).getTaskArtifacts());
- }
- if (artifact instanceof TeamWorkFlowArtifact) {
- results.addAll(ReviewManager.getReviews((TeamWorkFlowArtifact) artifact));
- }
- }
- return results;
- }
-
- @Override
- public String getSelectedName(SearchType searchType) throws OseeCoreException {
- StringBuffer sb = new StringBuffer();
- Collection<TeamDefinitionArtifact> teamDefs = getSelectedTeamDefinitions();
- if (teamDefs.size() > 0) {
- sb.append(" - Teams: " + org.eclipse.osee.framework.jdk.core.util.Collections.toString(",", teamDefs));
- }
- if (getSelectedVersionArtifact() != null) {
- sb.append(" - Version: " + getSelectedVersionArtifact());
- }
- ReleasedOption releaseOption = getSelectedReleased();
- if (releaseOption != null && releaseOption != ReleasedOption.Both) {
- sb.append(" - ReleasedOption: " + releaseOption);
- }
- if (getSelectedUser() != null) {
- sb.append(" - Assignee: " + getSelectedUser());
- }
- if (isIncludeCompletedCancelledCheckbox()) {
- sb.append(" - Include Completed/Cancelled");
- }
- return Strings.truncate(getName() + sb.toString(), WorldEditor.TITLE_MAX_LENGTH, true);
- }
-
- @SuppressWarnings("unused")
- @Override
- public void widgetCreated(XWidget widget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener modListener, boolean isEditable) throws OseeCoreException {
- if (widget.getLabel().equals("Assignee")) {
- assigneeCombo = (XMembersCombo) widget;
- }
- if (widget.getLabel().equals("Include Completed/Cancelled")) {
- includeCompletedCancelledCheckbox = (XCheckBox) widget;
- }
- if (widget.getLabel().equals("Show Flat")) {
- showFlatCheckbox = (XCheckBox) widget;
- }
- if (widget.getLabel().equals("Version")) {
- versionCombo = (XCombo) widget;
- versionCombo.getComboBox().setVisibleItemCount(25);
- widget.setToolTip("Select Team to populate Version list");
- }
- if (widget.getLabel().equals("Released")) {
- releasedCombo = (XCombo) widget;
- }
- if (widget.getLabel().equals("Team Definitions(s)")) {
- teamCombo = (XHyperlabelTeamDefinitionSelection) widget;
- teamCombo.addXModifiedListener(new XModifiedListener() {
- @Override
- public void widgetModified(XWidget widget) {
- if (versionCombo != null) {
- try {
- Collection<TeamDefinitionArtifact> teamDefArts = getSelectedTeamDefinitions();
- if (teamDefArts.isEmpty()) {
- versionCombo.setDataStrings(new String[] {});
- return;
- }
- TeamDefinitionArtifact teamDefHoldingVersions =
- teamDefArts.iterator().next().getTeamDefinitionHoldingVersions();
- if (teamDefHoldingVersions == null) {
- versionCombo.setDataStrings(new String[] {});
- return;
- }
- Collection<String> names =
- Artifacts.artNames(teamDefHoldingVersions.getVersionsArtifacts(VersionReleaseType.Both));
- if (names.isEmpty()) {
- versionCombo.setDataStrings(new String[] {});
- return;
- }
- versionCombo.setDataStrings(names.toArray(new String[names.size()]));
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
- }
- });
- }
- }
-
- protected User getSelectedUser() {
- if (assigneeCombo == null) {
- return null;
- }
- return assigneeCombo.getUser();
- }
-
- public void setSelectedUser(User user) {
- if (assigneeCombo != null) {
- assigneeCombo.set(user);
- }
- }
-
- protected boolean isIncludeCompletedCancelledCheckbox() {
- if (includeCompletedCancelledCheckbox == null) {
- return false;
- }
- return includeCompletedCancelledCheckbox.isSelected();
- }
-
- public void includeCompletedCancelledCheckbox(boolean selected) {
- if (includeCompletedCancelledCheckbox != null) {
- includeCompletedCancelledCheckbox.set(selected);
- }
- }
-
- protected boolean isShowFlatCheckbox() {
- if (showFlatCheckbox == null) {
- return false;
- }
- return showFlatCheckbox.isSelected();
- }
-
- public void includeShowFlatCheckbox(boolean selected) {
- if (showFlatCheckbox != null) {
- showFlatCheckbox.set(selected);
- }
- }
-
- protected VersionArtifact getSelectedVersionArtifact() throws OseeCoreException {
- if (versionCombo == null) {
- return null;
- }
- String versionStr = versionCombo.get();
- if (!Strings.isValid(versionStr)) {
- return null;
- }
- Collection<TeamDefinitionArtifact> teamDefs = getSelectedTeamDefinitions();
- if (teamDefs.size() > 0) {
- TeamDefinitionArtifact teamDefHoldingVersions = teamDefs.iterator().next().getTeamDefinitionHoldingVersions();
- if (teamDefHoldingVersions == null) {
- return null;
- }
- for (VersionArtifact versionArtifact : teamDefHoldingVersions.getVersionsArtifacts(VersionReleaseType.Both)) {
- if (versionArtifact.getName().equals(versionStr)) {
- return versionArtifact;
- }
- }
- }
- return null;
- }
-
- public void setVersion(String versionStr) {
- if (versionCombo != null && versionCombo.getInDataStrings() != null) {
- // should check if the version combo was populated
- if (versionCombo.getInDataStrings().length > 0) {
- versionCombo.set(versionStr);
- }
- }
- }
-
- public Collection<TeamDefinitionArtifact> getSelectedTeamDefinitions() {
- if (teamCombo == null) {
- return java.util.Collections.emptyList();
- }
- return teamCombo.getSelectedTeamDefintions();
- }
-
- public void setSelectedTeamDefinitions(Collection<TeamDefinitionArtifact> selectedTeamDefs) {
- if (teamCombo != null) {
- teamCombo.setSelectedTeamDefs(selectedTeamDefs);
- teamCombo.notifyXModifiedListeners();
- }
- }
-
- protected ReleasedOption getSelectedReleased() {
- if (releasedCombo == null || !Strings.isValid(releasedCombo.get())) {
- return ReleasedOption.Both;
- }
- return ReleasedOption.valueOf(releasedCombo.get());
- }
-
- public void setSelectedReleased(ReleasedOption option) {
- if (releasedCombo != null) {
- releasedCombo.set(option.toString());
- }
- }
-
- @Override
- public void createXWidgetLayoutData(DynamicXWidgetLayoutData layoutData, XWidget widget, FormToolkit toolkit, Artifact art, XModifiedListener modListener, boolean isEditable) {
- // do nothing
- }
-
- @Override
- public void widgetCreating(XWidget widget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener modListener, boolean isEditable) {
- // do nothing
- }
-
- @SuppressWarnings("unused")
- @Override
- public Result isParameterSelectionValid() throws OseeCoreException {
- try {
- boolean selected = false;
- Collection<TeamDefinitionArtifact> teamDefs = getSelectedTeamDefinitions();
- if (teamDefs.size() > 0) {
- selected = true;
- }
- VersionArtifact verArt = getSelectedVersionArtifact();
- if (verArt != null) {
- selected = true;
- }
- User user = getSelectedUser();
- if (user != null) {
- selected = true;
- }
- boolean includeCompleted = isIncludeCompletedCancelledCheckbox();
- if (!selected) {
- return new Result("You must select at least Team, Version or Assignee.");
- }
- if (user != null && includeCompleted) {
- return new Result("Assignee and Include Completed are not compatible selections.");
- }
- if (user != null && includeCompleted && verArt == null && teamDefs.isEmpty()) {
- return new Result("You must select at least Team or Version with Include Completed.");
- }
- return Result.TrueResult;
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return new Result("Exception: " + ex.getLocalizedMessage());
- }
- }
-
- @Override
- public IDynamicWidgetLayoutListener getDynamicWidgetLayoutListener() {
- return null;
- }
-
- @Override
- public VersionArtifact getTargetedVersionArtifact() throws OseeCoreException {
- if (versionCombo == null) {
- return null;
- }
- return getSelectedVersionArtifact();
- }
-
-}
+/******************************************************************************* + * 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.navigate; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.logging.Level; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.artifact.TaskableStateMachineArtifact; +import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.artifact.VersionArtifact; +import org.eclipse.osee.ats.artifact.VersionArtifact.VersionReleaseType; +import org.eclipse.osee.ats.internal.AtsPlugin; +import org.eclipse.osee.ats.util.widgets.ReviewManager; +import org.eclipse.osee.ats.util.widgets.XHyperlabelTeamDefinitionSelection; +import org.eclipse.osee.ats.world.WorldEditor; +import org.eclipse.osee.ats.world.WorldEditorParameterSearchItem; +import org.eclipse.osee.ats.world.search.TeamWorldSearchItem; +import org.eclipse.osee.ats.world.search.TeamWorldSearchItem.ReleasedOption; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.utility.Artifacts; +import org.eclipse.osee.framework.ui.plugin.util.Result; +import org.eclipse.osee.framework.ui.skynet.widgets.XCheckBox; +import org.eclipse.osee.framework.ui.skynet.widgets.XCombo; +import org.eclipse.osee.framework.ui.skynet.widgets.XMembersCombo; +import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener; +import org.eclipse.osee.framework.ui.skynet.widgets.XWidget; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayoutData; +import org.eclipse.osee.framework.ui.skynet.widgets.workflow.IDynamicWidgetLayoutListener; +import org.eclipse.ui.forms.widgets.FormToolkit; + +/** + * @author Donald G. Dunne + */ +public class TeamWorkflowSearchWorkflowSearchItem extends WorldEditorParameterSearchItem { + + protected XHyperlabelTeamDefinitionSelection teamCombo = null; + protected XCombo releasedCombo = null; + protected XCombo versionCombo = null; + protected XMembersCombo assigneeCombo; + protected XCheckBox includeCompletedCancelledCheckbox; + protected XCheckBox showFlatCheckbox; + + public TeamWorkflowSearchWorkflowSearchItem(String name) { + super(name, AtsImage.TEAM_WORKFLOW); + } + + public TeamWorkflowSearchWorkflowSearchItem() { + this("Team Workflow Search"); + } + + public TeamWorkflowSearchWorkflowSearchItem(TeamWorkflowSearchWorkflowSearchItem editTeamWorkflowSearchItem) { + super(editTeamWorkflowSearchItem, AtsImage.TEAM_WORKFLOW); + } + + @Override + public TeamWorkflowSearchWorkflowSearchItem copy() { + return new TeamWorkflowSearchWorkflowSearchItem(this); + } + + @Override + public TeamWorkflowSearchWorkflowSearchItem copyProvider() { + return new TeamWorkflowSearchWorkflowSearchItem(this); + } + + @SuppressWarnings("unused") + @Override + public String getParameterXWidgetXml() throws OseeCoreException { + return "<xWidgets>" + + // + "<XWidget xwidgetType=\"XHyperlabelTeamDefinitionSelection\" displayName=\"Team Definitions(s)\" horizontalLabel=\"true\"/>" + + // + "<XWidget xwidgetType=\"XCombo()\" beginComposite=\"10\" displayName=\"Version\" horizontalLabel=\"true\"/>" + + // + "<XWidget xwidgetType=\"XCombo(Both,Released,UnReleased)\" displayName=\"Released\" horizontalLabel=\"true\"/>" + + // + "<XWidget xwidgetType=\"XMembersCombo\" displayName=\"Assignee\" horizontalLabel=\"true\"/>" + + // + "<XWidget xwidgetType=\"XCheckBox\" displayName=\"Include Completed/Cancelled\" defaultValue=\"false\" labelAfter=\"true\" horizontalLabel=\"true\"/>" + + // + "<XWidget xwidgetType=\"XCheckBox\" displayName=\"Show Flat\" defaultValue=\"false\" labelAfter=\"true\" horizontalLabel=\"true\" toolTip=\"Show Tasks/Reviews flattened instead of hierarchcial\"/>" + + // + "</xWidgets>"; + } + + @Override + public Collection<? extends Artifact> performSearchGetResults(SearchType searchType) throws OseeCoreException { + Collection<Artifact> artifacts = + new TeamWorldSearchItem("", getSelectedTeamDefinitions(), isIncludeCompletedCancelledCheckbox(), false, false, + getSelectedVersionArtifact(), getSelectedUser(), getSelectedReleased()).performSearchGetResults(false); + return filterShowFlat(artifacts); + } + + protected Collection<? extends Artifact> filterShowFlat(Collection<Artifact> artifacts) throws OseeCoreException { + if (!isShowFlatCheckbox()) { + return artifacts; + } + Set<Artifact> results = new HashSet<Artifact>(artifacts); + for (Artifact artifact : artifacts) { + if (artifact instanceof TaskableStateMachineArtifact) { + results.addAll(((TaskableStateMachineArtifact) artifact).getTaskArtifacts()); + } + if (artifact instanceof TeamWorkFlowArtifact) { + results.addAll(ReviewManager.getReviews((TeamWorkFlowArtifact) artifact)); + } + } + return results; + } + + @Override + public String getSelectedName(SearchType searchType) throws OseeCoreException { + StringBuffer sb = new StringBuffer(); + Collection<TeamDefinitionArtifact> teamDefs = getSelectedTeamDefinitions(); + if (teamDefs.size() > 0) { + sb.append(" - Teams: " + org.eclipse.osee.framework.jdk.core.util.Collections.toString(",", teamDefs)); + } + if (getSelectedVersionArtifact() != null) { + sb.append(" - Version: " + getSelectedVersionArtifact()); + } + ReleasedOption releaseOption = getSelectedReleased(); + if (releaseOption != null && releaseOption != ReleasedOption.Both) { + sb.append(" - ReleasedOption: " + releaseOption); + } + if (getSelectedUser() != null) { + sb.append(" - Assignee: " + getSelectedUser()); + } + if (isIncludeCompletedCancelledCheckbox()) { + sb.append(" - Include Completed/Cancelled"); + } + return Strings.truncate(getName() + sb.toString(), WorldEditor.TITLE_MAX_LENGTH, true); + } + + @SuppressWarnings("unused") + @Override + public void widgetCreated(XWidget widget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener modListener, boolean isEditable) throws OseeCoreException { + if (widget.getLabel().equals("Assignee")) { + assigneeCombo = (XMembersCombo) widget; + } + if (widget.getLabel().equals("Include Completed/Cancelled")) { + includeCompletedCancelledCheckbox = (XCheckBox) widget; + } + if (widget.getLabel().equals("Show Flat")) { + showFlatCheckbox = (XCheckBox) widget; + } + if (widget.getLabel().equals("Version")) { + versionCombo = (XCombo) widget; + versionCombo.getComboBox().setVisibleItemCount(25); + widget.setToolTip("Select Team to populate Version list"); + } + if (widget.getLabel().equals("Released")) { + releasedCombo = (XCombo) widget; + } + if (widget.getLabel().equals("Team Definitions(s)")) { + teamCombo = (XHyperlabelTeamDefinitionSelection) widget; + teamCombo.addXModifiedListener(new XModifiedListener() { + @Override + public void widgetModified(XWidget widget) { + if (versionCombo != null) { + try { + Collection<TeamDefinitionArtifact> teamDefArts = getSelectedTeamDefinitions(); + if (teamDefArts.isEmpty()) { + versionCombo.setDataStrings(new String[] {}); + return; + } + TeamDefinitionArtifact teamDefHoldingVersions = + teamDefArts.iterator().next().getTeamDefinitionHoldingVersions(); + if (teamDefHoldingVersions == null) { + versionCombo.setDataStrings(new String[] {}); + return; + } + Collection<String> names = + Artifacts.artNames(teamDefHoldingVersions.getVersionsArtifacts(VersionReleaseType.Both)); + if (names.isEmpty()) { + versionCombo.setDataStrings(new String[] {}); + return; + } + versionCombo.setDataStrings(names.toArray(new String[names.size()])); + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex); + } + } + } + }); + } + } + + protected User getSelectedUser() { + if (assigneeCombo == null) { + return null; + } + return assigneeCombo.getUser(); + } + + public void setSelectedUser(User user) { + if (assigneeCombo != null) { + assigneeCombo.set(user); + } + } + + protected boolean isIncludeCompletedCancelledCheckbox() { + if (includeCompletedCancelledCheckbox == null) { + return false; + } + return includeCompletedCancelledCheckbox.isSelected(); + } + + public void includeCompletedCancelledCheckbox(boolean selected) { + if (includeCompletedCancelledCheckbox != null) { + includeCompletedCancelledCheckbox.set(selected); + } + } + + protected boolean isShowFlatCheckbox() { + if (showFlatCheckbox == null) { + return false; + } + return showFlatCheckbox.isSelected(); + } + + public void includeShowFlatCheckbox(boolean selected) { + if (showFlatCheckbox != null) { + showFlatCheckbox.set(selected); + } + } + + protected VersionArtifact getSelectedVersionArtifact() throws OseeCoreException { + if (versionCombo == null) { + return null; + } + String versionStr = versionCombo.get(); + if (!Strings.isValid(versionStr)) { + return null; + } + Collection<TeamDefinitionArtifact> teamDefs = getSelectedTeamDefinitions(); + if (teamDefs.size() > 0) { + TeamDefinitionArtifact teamDefHoldingVersions = teamDefs.iterator().next().getTeamDefinitionHoldingVersions(); + if (teamDefHoldingVersions == null) { + return null; + } + for (VersionArtifact versionArtifact : teamDefHoldingVersions.getVersionsArtifacts(VersionReleaseType.Both)) { + if (versionArtifact.getName().equals(versionStr)) { + return versionArtifact; + } + } + } + return null; + } + + public void setVersion(String versionStr) { + if (versionCombo != null && versionCombo.getInDataStrings() != null) { + // should check if the version combo was populated + if (versionCombo.getInDataStrings().length > 0) { + versionCombo.set(versionStr); + } + } + } + + public Collection<TeamDefinitionArtifact> getSelectedTeamDefinitions() { + if (teamCombo == null) { + return java.util.Collections.emptyList(); + } + return teamCombo.getSelectedTeamDefintions(); + } + + public void setSelectedTeamDefinitions(Collection<TeamDefinitionArtifact> selectedTeamDefs) { + if (teamCombo != null) { + teamCombo.setSelectedTeamDefs(selectedTeamDefs); + teamCombo.notifyXModifiedListeners(); + } + } + + protected ReleasedOption getSelectedReleased() { + if (releasedCombo == null || !Strings.isValid(releasedCombo.get())) { + return ReleasedOption.Both; + } + return ReleasedOption.valueOf(releasedCombo.get()); + } + + public void setSelectedReleased(ReleasedOption option) { + if (releasedCombo != null) { + releasedCombo.set(option.toString()); + } + } + + @Override + public void createXWidgetLayoutData(DynamicXWidgetLayoutData layoutData, XWidget widget, FormToolkit toolkit, Artifact art, XModifiedListener modListener, boolean isEditable) { + // do nothing + } + + @Override + public void widgetCreating(XWidget widget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener modListener, boolean isEditable) { + // do nothing + } + + @SuppressWarnings("unused") + @Override + public Result isParameterSelectionValid() throws OseeCoreException { + try { + boolean selected = false; + Collection<TeamDefinitionArtifact> teamDefs = getSelectedTeamDefinitions(); + if (teamDefs.size() > 0) { + selected = true; + } + VersionArtifact verArt = getSelectedVersionArtifact(); + if (verArt != null) { + selected = true; + } + User user = getSelectedUser(); + if (user != null) { + selected = true; + } + boolean includeCompleted = isIncludeCompletedCancelledCheckbox(); + if (!selected) { + return new Result("You must select at least Team, Version or Assignee."); + } + if (user != null && includeCompleted) { + return new Result("Assignee and Include Completed are not compatible selections."); + } + if (user != null && includeCompleted && verArt == null && teamDefs.isEmpty()) { + return new Result("You must select at least Team or Version with Include Completed."); + } + return Result.TrueResult; + } catch (Exception ex) { + OseeLog.log(AtsPlugin.class, Level.SEVERE, ex); + return new Result("Exception: " + ex.getLocalizedMessage()); + } + } + + @Override + public IDynamicWidgetLayoutListener getDynamicWidgetLayoutListener() { + return null; + } + + @Override + public VersionArtifact getTargetedVersionArtifact() throws OseeCoreException { + if (versionCombo == null) { + return null; + } + return getSelectedVersionArtifact(); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/UpdateAtsWorkItemDefinitions.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/UpdateAtsWorkItemDefinitions.java index ebd566d3042..fd686d1b4d3 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/UpdateAtsWorkItemDefinitions.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/UpdateAtsWorkItemDefinitions.java @@ -27,9 +27,6 @@ import org.eclipse.osee.framework.ui.swt.Displays; */ public class UpdateAtsWorkItemDefinitions extends XNavigateItemAction { - /** - * @param parent - */ public UpdateAtsWorkItemDefinitions(XNavigateItem parent) { super(parent, "Update Ats WorkItemDefinitions", PluginUiImage.ADMIN); } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/VisitedItems.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/VisitedItems.java index b33cb3df0a2..cd0bbd85a42 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/VisitedItems.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/VisitedItems.java @@ -57,9 +57,6 @@ public class VisitedItems extends XNavigateItemAction { } } - /** - * @param parent - */ public VisitedItems(XNavigateItem parent) { super(parent, "My Recently Visited", AtsImage.GLOBE); } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/operation/PurgeUser.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/operation/PurgeUser.java index 358a38734d0..567864ce254 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/operation/PurgeUser.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/operation/PurgeUser.java @@ -79,7 +79,7 @@ public class PurgeUser extends AbstractBlam { AWorkbench.popup("ERROR", "Please select To User"); return; } - //handle roll-backs and exception handling + //handle roll-backs and exception handling new DbTransaction() { @Override protected void handleTxWork(OseeConnection connection) throws OseeCoreException { @@ -118,7 +118,8 @@ public class PurgeUser extends AbstractBlam { ConnectionHandler.runPreparedQueryFetchInt(defaultUpdateValue, GET_AUTHORED_TRANSACTIONS, new Object[] {fromUser.getArtId()}); numOfUpdatedAuthoredTransactions = - ConnectionHandler.runPreparedUpdate(connection, UPDATE_AUTHORED_TRANSACTIONS, new Object[] {toUser.getArtId(), + ConnectionHandler.runPreparedUpdate(connection, UPDATE_AUTHORED_TRANSACTIONS, new Object[] { + toUser.getArtId(), fromUser.getArtId()}); } @@ -132,7 +133,8 @@ public class PurgeUser extends AbstractBlam { ConnectionHandler.runPreparedQueryFetchInt(defaultUpdateValue, GET_RELATIONS_ASIDE, new Object[] {fromUser.getArtId()}); numOfUpdatedASideRelations = - ConnectionHandler.runPreparedUpdate(connection, UPDATE_RELATIONS_ASIDE, new Object[] {toUser.getArtId(), + ConnectionHandler.runPreparedUpdate(connection, UPDATE_RELATIONS_ASIDE, new Object[] { + toUser.getArtId(), fromUser.getArtId()}); } @@ -141,7 +143,8 @@ public class PurgeUser extends AbstractBlam { ConnectionHandler.runPreparedQueryFetchInt(defaultUpdateValue, GET_RELATIONS_BSIDE, new Object[] {fromUser.getArtId()}); numOfUpdatedBSideRelations = - ConnectionHandler.runPreparedUpdate(connection, UPDATE_RELATIONS_BSIDE, new Object[] {toUser.getArtId(), + ConnectionHandler.runPreparedUpdate(connection, UPDATE_RELATIONS_BSIDE, new Object[] { + toUser.getArtId(), fromUser.getArtId()}); } @@ -154,16 +157,30 @@ public class PurgeUser extends AbstractBlam { XResultData rd = new XResultData(); try { String[] columnHeaders = - new String[] {"FromUser", "FromUser ArtId", "ToUser", "ToUser ArtId", "Authored Transaction Hits", - "Relation ASide Hits", "Relation BSide Hits", "Authored Transaction Updated", "Relation ASide Update", + new String[] { + "FromUser", + "FromUser ArtId", + "ToUser", + "ToUser ArtId", + "Authored Transaction Hits", + "Relation ASide Hits", + "Relation BSide Hits", + "Authored Transaction Updated", + "Relation ASide Update", "Relation BSide Updated"}; rd.addRaw(AHTML.beginMultiColumnTable(100, 1)); rd.addRaw(AHTML.addHeaderRowMultiColumnTable(columnHeaders)); - rd.addRaw(AHTML.addRowMultiColumnTable(new String[] {fromUser.getName(), - Integer.toString(fromUser.getArtId()), toUser.getName(), Integer.toString(toUser.getArtId()), - Integer.toString(numOfAuthoredTransactions), Integer.toString(numOfASideRelations), - Integer.toString(numOfBSideRelations), Integer.toString(numOfUpdatedAuthoredTransactions), - Integer.toString(numOfUpdatedASideRelations), Integer.toString(numOfUpdatedBSideRelations)})); + rd.addRaw(AHTML.addRowMultiColumnTable(new String[] { + fromUser.getName(), + Integer.toString(fromUser.getArtId()), + toUser.getName(), + Integer.toString(toUser.getArtId()), + Integer.toString(numOfAuthoredTransactions), + Integer.toString(numOfASideRelations), + Integer.toString(numOfBSideRelations), + Integer.toString(numOfUpdatedAuthoredTransactions), + Integer.toString(numOfUpdatedASideRelations), + Integer.toString(numOfUpdatedBSideRelations)})); rd.addRaw(AHTML.endMultiColumnTable()); } finally { rd.report(getName()); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/report/CreateActionArtifactChangeReportJob.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/report/CreateActionArtifactChangeReportJob.java index 9261e90ae26..c8699e85423 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/report/CreateActionArtifactChangeReportJob.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/report/CreateActionArtifactChangeReportJob.java @@ -102,8 +102,13 @@ public class CreateActionArtifactChangeReportJob extends Job { int x = 1; rd.addRaw(AHTML.beginMultiColumnTable(95)); - rd.addRaw(AHTML.addHeaderRowMultiColumnTable(new String[] {"HRID", "Bulld", "UI", attributeType.getName(), - "RPCR", "Change"})); + rd.addRaw(AHTML.addHeaderRowMultiColumnTable(new String[] { + "HRID", + "Bulld", + "UI", + attributeType.getName(), + "RPCR", + "Change"})); for (TeamWorkFlowArtifact teamArt : teamArts) { String rcprId = teamArt.getSoleAttributeValue(AtsAttributeTypes.LegacyPcrId, ""); String result = @@ -132,8 +137,13 @@ public class CreateActionArtifactChangeReportJob extends Job { attrStrs.add(EnumeratedAttribute.UNSPECIFIED_VALUE); } for (String attrStr : attrStrs) { - rd.addRaw(AHTML.addRowMultiColumnTable(new String[] {teamArt.getHumanReadableId(), buildId, - modArt.getName(), attrStr, rpcrNum, "Content"})); + rd.addRaw(AHTML.addRowMultiColumnTable(new String[] { + teamArt.getHumanReadableId(), + buildId, + modArt.getName(), + attrStr, + rpcrNum, + "Content"})); } } for (Artifact artChg : changeData.getArtifacts(KindType.Artifact, ModificationType.DELETED)) { @@ -142,8 +152,13 @@ public class CreateActionArtifactChangeReportJob extends Job { attrStrs.add(EnumeratedAttribute.UNSPECIFIED_VALUE); } for (String attrStr : attrStrs) { - rd.addRaw(AHTML.addRowMultiColumnTable(new String[] {teamArt.getHumanReadableId(), buildId, - artChg.getName(), attrStr, rpcrNum, "Deleted"})); + rd.addRaw(AHTML.addRowMultiColumnTable(new String[] { + teamArt.getHumanReadableId(), + buildId, + artChg.getName(), + attrStr, + rpcrNum, + "Deleted"})); } } for (Artifact artChg : changeData.getArtifacts(KindType.RelationOnly, ModificationType.NEW, @@ -153,8 +168,13 @@ public class CreateActionArtifactChangeReportJob extends Job { attrStrs.add(EnumeratedAttribute.UNSPECIFIED_VALUE); } for (String attrStr : attrStrs) { - rd.addRaw(AHTML.addRowMultiColumnTable(new String[] {teamArt.getHumanReadableId(), buildId, - artChg.getName(), attrStr, rpcrNum, "Relation"})); + rd.addRaw(AHTML.addRowMultiColumnTable(new String[] { + teamArt.getHumanReadableId(), + buildId, + artChg.getName(), + attrStr, + rpcrNum, + "Relation"})); } } } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/report/ExtendedStatusReportJob.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/report/ExtendedStatusReportJob.java index 128e25cdbf4..6b5d2762cf5 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/report/ExtendedStatusReportJob.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/report/ExtendedStatusReportJob.java @@ -168,8 +168,7 @@ public class ExtendedStatusReportJob extends Job { String desc = sma.getDescription(); if (sma instanceof TaskArtifact) { TaskArtifact taskArt = (TaskArtifact) sma; - desc = - taskArt.getDescription() + " " + taskArt.getSoleAttributeValue(AtsAttributeTypes.Resolution, ""); + desc = taskArt.getDescription() + " " + taskArt.getSoleAttributeValue(AtsAttributeTypes.Resolution, ""); } if (desc.matches("^ *$")) { values.add("."); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/task/TaskComposite.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/task/TaskComposite.java index 9d3f8c7ae3e..dcc623dea35 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/task/TaskComposite.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/task/TaskComposite.java @@ -269,7 +269,9 @@ public class TaskComposite extends Composite implements IWorldViewerEventHandler }); DropTarget target = new DropTarget(taskXViewer.getTree(), DND.DROP_COPY); - target.setTransfer(new Transfer[] {FileTransfer.getInstance(), TextTransfer.getInstance(), + target.setTransfer(new Transfer[] { + FileTransfer.getInstance(), + TextTransfer.getInstance(), ArtifactTransfer.getInstance()}); target.addDropListener(new DropTargetAdapter() { diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/task/TaskXViewer.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/task/TaskXViewer.java index ade002d5ff5..a5530239e3a 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/task/TaskXViewer.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/task/TaskXViewer.java @@ -238,8 +238,8 @@ public class TaskXViewer extends WorldXViewer { public void run() { try { boolean success = - PromptChangeUtil.promptChangeAttribute(getSelectedTaskArtifacts(), - AtsAttributeTypes.RelatedToState, false, true); + PromptChangeUtil.promptChangeAttribute(getSelectedTaskArtifacts(), AtsAttributeTypes.RelatedToState, + false, true); if (success) { editor.onDirtied(); update(getSelectedTaskArtifacts().toArray(), null); @@ -255,8 +255,8 @@ public class TaskXViewer extends WorldXViewer { public void run() { try { boolean success = - PromptChangeUtil.promptChangeAttribute(getSelectedTaskArtifacts(), AtsAttributeTypes.SmaNote, - false, true); + PromptChangeUtil.promptChangeAttribute(getSelectedTaskArtifacts(), AtsAttributeTypes.SmaNote, false, + true); if (success) { editor.onDirtied(); update(getSelectedTaskArtifacts().toArray(), null); @@ -343,7 +343,7 @@ public class TaskXViewer extends WorldXViewer { } public boolean handleChangeResolution() throws OseeCoreException { - // Ensure tasks are related to current state of workflow + // Ensure tasks are related to current state of workflow SMAPromptChangeStatus promptChangeStatus = new SMAPromptChangeStatus(getSelectedTaskArtifacts()); Result result = promptChangeStatus.isValidToChangeStatus(); if (result.isFalse()) { @@ -377,13 +377,11 @@ public class TaskXViewer extends WorldXViewer { boolean modified = false; if (isSelectedTaskArtifactsAreInWork() && xCol.equals(WorldXViewerFactory.Estimated_Hours_Col)) { - modified = - PromptChangeUtil.promptChangeAttribute(taskArt, AtsAttributeTypes.EstimatedHours, false, false); + modified = PromptChangeUtil.promptChangeAttribute(taskArt, AtsAttributeTypes.EstimatedHours, false, false); } else if (isSelectedTaskArtifactsAreInWork() && xCol.equals(WorldXViewerFactory.Title_Col)) { modified = PromptChangeUtil.promptChangeAttribute(taskArt, AtsAttributeTypes.Title, false, false); } else if (isSelectedTaskArtifactsAreInWork() && xCol.equals(WorldXViewerFactory.Related_To_State_Col)) { - modified = - PromptChangeUtil.promptChangeAttribute(taskArt, AtsAttributeTypes.RelatedToState, false, false); + modified = PromptChangeUtil.promptChangeAttribute(taskArt, AtsAttributeTypes.RelatedToState, false, false); } else if (isSelectedTaskArtifactsAreInWork() && xCol.equals(WorldXViewerFactory.Assignees_Col)) { modified = PromptChangeUtil.promptChangeAssignees(taskArt, false); } else if (isUsingTaskResolutionOptions() && (xCol.equals(WorldXViewerFactory.Hours_Spent_State_Col) || xCol.equals(WorldXViewerFactory.Hours_Spent_Total_Col) || xCol.equals(WorldXViewerFactory.Percent_Complete_State_Col) || xCol.equals(WorldXViewerFactory.Percent_Complete_Total_Col))) { diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/AtsBranchManager.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/AtsBranchManager.java index 5d56c7ba7f6..0491617c1fb 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/AtsBranchManager.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/AtsBranchManager.java @@ -117,7 +117,6 @@ public class AtsBranchManager { /** * Return true if merge branch exists in DB (whether archived or not) * - * @param destinationBranch * @return true * @throws OseeCoreException */ diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/AtsUtil.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/AtsUtil.java index 70726258c94..4366c3c614b 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/AtsUtil.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/AtsUtil.java @@ -238,7 +238,6 @@ public final class AtsUtil { /** * Only to be used by browser. Use open (artifact) instead. * - * @param guid * @throws OseeCoreException */ public static void openArtifact(String guid, OseeEditor view) { diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/DoesNotWorkItemAts.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/DoesNotWorkItemAts.java index 6b973436c76..66f41bef96c 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/DoesNotWorkItemAts.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/DoesNotWorkItemAts.java @@ -129,8 +129,7 @@ public class DoesNotWorkItemAts extends XNavigateItemAction { ElapsedTime time = new ElapsedTime("My World via Attribute Search"); List<Artifact> assignedList = - ArtifactQuery.getArtifactListFromAttribute(AtsAttributeTypes.CurrentState, "%727536%", - AtsUtil.getAtsBranch()); + ArtifactQuery.getArtifactListFromAttribute(AtsAttributeTypes.CurrentState, "%727536%", AtsUtil.getAtsBranch()); System.out.println("Returned " + assignedList.size() + " objects"); time.end(); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/Import/ActionImportPage.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/Import/ActionImportPage.java index 6fe78b49f25..4c43c191f6a 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/Import/ActionImportPage.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/Import/ActionImportPage.java @@ -45,10 +45,6 @@ public class ActionImportPage extends WizardDataTransferPage { private Label actionLabel; private Button emailPocs; - /** - * @param pageName - * @param selection - */ public ActionImportPage(String pageName, IStructuredSelection selection) { super(pageName); setTitle("Import Actions into ATS"); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/Overview.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/Overview.java index 577789b3396..244753e4d40 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/Overview.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/Overview.java @@ -86,8 +86,6 @@ public class Overview { /** * Return label with value converted to show html reserved characters * - * @param label - * @param value * @return string to embed into html */ public String getLabelValue(String label, String value) { @@ -98,8 +96,6 @@ public class Overview { /** * Return label and value WITHOUT conversion to handle html reserved characters. Value will be as-is * - * @param label - * @param value * @return string to embed into html */ public String getLabelValueNoConvert(String label, String value) { diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/SMAUtil.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/SMAUtil.java index b8bad90cebc..bc703ba6fdd 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/SMAUtil.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/SMAUtil.java @@ -150,8 +150,6 @@ public class SMAUtil { /** * Returns sma if change type, or parent team workflow's change type is in specified set * - * @param changeTypes - * @param artifacts * @throws OseeCoreException */ public static Collection<StateMachineArtifact> getChangeType(Collection<ChangeType> changeTypes, Collection<StateMachineArtifact> artifacts) throws OseeCoreException { @@ -169,8 +167,6 @@ public class SMAUtil { /** * Returns sma if priority type, or parent team workflow's priority type is in specified set * - * @param priorityTypes - * @param artifacts * @throws OseeCoreException */ public static Collection<StateMachineArtifact> getPriorityType(Collection<PriorityType> priorityTypes, Collection<StateMachineArtifact> artifacts) throws OseeCoreException { diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/StateManager.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/StateManager.java index d3cef956194..65642d837dc 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/StateManager.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/StateManager.java @@ -54,8 +54,6 @@ public class StateManager { /** * Get state and create if not there. * - * @param name - * @param create * @return state matching name */ private SMAState getSMAState(String name, boolean create) throws OseeCoreException { @@ -70,7 +68,6 @@ public class StateManager { * Discouraged Access. This method should not normally be called except in cases were state data is being manually * created. * - * @param name * @throws OseeCoreException */ public void internalCreateIfNotExists(String name) throws OseeCoreException { @@ -110,7 +107,6 @@ public class StateManager { /** * Return Hours Spent for State * - * @param stateName * @return hours spent or 0 if none */ public double getHoursSpent(String stateName) throws OseeCoreException { @@ -128,7 +124,6 @@ public class StateManager { /** * Return Percent Complete for State * - * @param stateName * @return percent complete or 0 if none */ public int getPercentComplete(String stateName) throws OseeCoreException { @@ -195,7 +190,6 @@ public class StateManager { /** * Sets the assignees as attributes and relations AND writes to SMA. Does not persist. * - * @param assignees * @throws Exception */ public void setAssignees(Collection<User> assignees) throws OseeCoreException { @@ -207,7 +201,6 @@ public class StateManager { /** * Sets the assignee AND writes to SMA. Does not persist. * - * @param assignee * @throws Exception */ public void setAssignee(String stateName, User assignee) throws OseeCoreException { @@ -222,7 +215,6 @@ public class StateManager { /** * Sets the assignee AND writes to SMA. Does not persist. * - * @param assignee * @throws Exception */ public void setAssignee(User assignee) throws OseeCoreException { @@ -234,8 +226,6 @@ public class StateManager { /** * Removes the assignee from stateName state AND writes to SMA. Does not persist. * - * @param stateName - * @param assignee * @throws Exception */ public void removeAssignee(String stateName, User assignee) throws OseeCoreException { @@ -250,7 +240,6 @@ public class StateManager { /** * Removes the assignee AND writes to SMA. Does not persist. * - * @param assignee * @throws Exception */ public void removeAssignee(User assignee) throws OseeCoreException { @@ -262,7 +251,6 @@ public class StateManager { /** * Adds the assignee AND writes to SMA. Does not persist. Will remove UnAssigned user if another assignee exists. * - * @param assignee * @throws Exception */ public void addAssignee(User assignee) throws OseeCoreException { @@ -277,7 +265,6 @@ public class StateManager { /** * Removes ALL assignees AND writes to SMA. Does not persist. * - * @param assignee * @throws Exception */ public void clearAssignees() throws OseeCoreException { @@ -309,7 +296,6 @@ public class StateManager { /** * Initializes state machine and sets the current state to stateName * - * @param stateName * @throws Exception */ public void initializeStateMachine(String stateName) throws OseeCoreException { @@ -319,8 +305,6 @@ public class StateManager { /** * Initializes state machine and sets the current state to stateName * - * @param stateName - * @param assignees * @throws Exception */ public void initializeStateMachine(String stateName, Collection<User> assignees) throws OseeCoreException { diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/VersionReportJob.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/VersionReportJob.java index cfc5dd1568a..bc4cdcc453c 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/VersionReportJob.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/VersionReportJob.java @@ -156,9 +156,13 @@ public class VersionReportJob extends Job { } System.out.println(str); sb.append(AHTML.addRowMultiColumnTable( - new String[] {"Action", team.getTeamName(), team.getWorldViewPriority(), - team.getWorldViewChangeTypeStr(), team.getName(), team.getHumanReadableId()}, null, - (x % 2 == 0 ? null : "#cccccc"))); + new String[] { + "Action", + team.getTeamName(), + team.getWorldViewPriority(), + team.getWorldViewChangeTypeStr(), + team.getName(), + team.getHumanReadableId()}, null, (x % 2 == 0 ? null : "#cccccc"))); for (TaskArtifact taskArt : team.getTaskArtifacts()) { sb.append(AHTML.addRowMultiColumnTable( diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/DecisionOption.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/DecisionOption.java index 3c4cf036026..0cfdd856279 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/DecisionOption.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/DecisionOption.java @@ -83,7 +83,6 @@ public class DecisionOption { /** * Sets the assigness but DOES NOT write to SMA. This method should NOT be called outside the StateMachineArtifact. * - * @param assignees */ public void setAssignees(Collection<User> assignees) { this.assignees.clear(); @@ -95,7 +94,6 @@ public class DecisionOption { /** * Sets the assignes but DOES NOT write to SMA. This method should NOT be called outside the StateMachineArtifact. * - * @param assignee */ public void setAssignee(User assignee) { this.assignees.clear(); @@ -104,9 +102,6 @@ public class DecisionOption { } } - /** - * @param assignee - */ public void addAssignee(User assignee) { if (assignee != null) { this.assignees.add(assignee); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/SMAState.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/SMAState.java index 660f7009696..44239defc51 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/SMAState.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/SMAState.java @@ -88,7 +88,6 @@ public class SMAState { /** * Sets the assignees but DOES NOT write to SMA. This method should NOT be called outside the StateMachineArtifact. * - * @param assignees * @throws OseeCoreException */ public void setAssignees(Collection<User> assignees) throws OseeCoreException { @@ -117,7 +116,6 @@ public class SMAState { /** * Sets the assignees but DOES NOT write to SMA. This method should NOT be called outside the StateMachineArtifact. * - * @param assignee * @throws OseeCoreException * @throws IllegalOseeArgumentException */ @@ -134,9 +132,6 @@ public class SMAState { } } - /** - * @param assignee - */ public void addAssignee(User assignee) throws OseeCoreException { if (assignee == UserManager.getUser(SystemUser.OseeSystem) || assignee == UserManager.getUser(SystemUser.Guest)) { throw new OseeArgumentException("Can not assign workflow to OseeSystem or Guest"); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/defect/DefectXViewer.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/defect/DefectXViewer.java index 5f1c9a5fa98..1eb69d69015 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/defect/DefectXViewer.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/defect/DefectXViewer.java @@ -57,10 +57,6 @@ public class DefectXViewer extends XViewer { private Action editLocationAction; private Action editResolutionAction; - /** - * @param parent - * @param style - */ DefectXViewer(Composite parent, int style, XDefectViewer xDefectViewer) { this(parent, style, new DefectXViewerFactory(), xDefectViewer); } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/defect/XDefectViewer.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/defect/XDefectViewer.java index e5abd02ac66..11f12c13f7f 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/defect/XDefectViewer.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/defect/XDefectViewer.java @@ -497,12 +497,27 @@ public class XDefectViewer extends XWidget implements IArtifactWidget, IArtifact try { html.append(AHTML.addSpace(1) + AHTML.getLabelStr(AHTML.LABEL_FONT, "Tasks")); html.append(AHTML.startBorderTable(100, normalColor, "")); - html.append(AHTML.addHeaderRowMultiColumnTable(new String[] {"Date", "User", "Location", "Description", - "Severity", "Disposition", "Injection Activity", "Resolution", "Location", "Closted"})); + html.append(AHTML.addHeaderRowMultiColumnTable(new String[] { + "Date", + "User", + "Location", + "Description", + "Severity", + "Disposition", + "Injection Activity", + "Resolution", + "Location", + "Closted"})); for (DefectItem item : reviewArt.getDefectManager().getDefectItems()) { - html.append(AHTML.addRowMultiColumnTable(new String[] {item.getCreatedDate(XDate.MMDDYY), - item.getUser().getName(), item.getLocation(), item.getDescription(), item.getSeverity().name(), - item.getDisposition().name(), item.getInjectionActivity().name(), item.getResolution(), + html.append(AHTML.addRowMultiColumnTable(new String[] { + item.getCreatedDate(XDate.MMDDYY), + item.getUser().getName(), + item.getLocation(), + item.getDescription(), + item.getSeverity().name(), + item.getDisposition().name(), + item.getInjectionActivity().name(), + item.getResolution(), item.isClosed() + ""})); } html.append(AHTML.endBorderTable()); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/ActionTeamVersionListDialog.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/ActionTeamVersionListDialog.java index a7ad3808496..cc111ed9484 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/ActionTeamVersionListDialog.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/ActionTeamVersionListDialog.java @@ -42,9 +42,6 @@ public class ActionTeamVersionListDialog extends ActionTeamListDialog { XListViewer versionList = new XListViewer("Version"); VersionArtifact selectedVersion = null; - /** - * @param active - */ public ActionTeamVersionListDialog(Active active) { super(active); } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/SimpleTaskResolutionOptionsRule.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/SimpleTaskResolutionOptionsRule.java index 7271330d931..bbd14408f3b 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/SimpleTaskResolutionOptionsRule.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/SimpleTaskResolutionOptionsRule.java @@ -49,11 +49,6 @@ public class SimpleTaskResolutionOptionsRule extends TaskResolutionOptionRule { // "</AtsTaskOptions>"; - /** - * @param name - * @param id - * @param value - */ public SimpleTaskResolutionOptionsRule() { super(ID, ID, resolutionOptionsXml); } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/StateListAndTitleDialog.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/StateListAndTitleDialog.java index d8d45abb7c6..b4be610c686 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/StateListAndTitleDialog.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/StateListAndTitleDialog.java @@ -30,11 +30,6 @@ public class StateListAndTitleDialog extends StateListDialog { String reviewTitle; XText titleText; - /** - * @param title - * @param message - * @param values - */ public StateListAndTitleDialog(String title, String message, Collection<String> values) { super(title, message, values); } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/TaskOptionStatusDialog.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/TaskOptionStatusDialog.java index 3632802be15..a54908addbe 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/TaskOptionStatusDialog.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/TaskOptionStatusDialog.java @@ -59,10 +59,10 @@ public class TaskOptionStatusDialog extends SMAStatusDialog { protected IStatus isComplete() { TaskResOptionDefinition trd = getSelectedOptionDef(); int percentComp = percent.getInt(); - if ((trd != null && trd.isCompleteable()) && percentComp != 100) { + if (trd != null && trd.isCompleteable() && percentComp != 100) { return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, "Completed resolution must have %Complete == 100"); } - if (percentComp == 100 && (trd != null && !trd.isCompleteable())) { + if (percentComp == 100 && trd != null && !trd.isCompleteable()) { return new Status(IStatus.ERROR, AtsPlugin.PLUGIN_ID, "Can't have 100% complete with a non-Completed resolution"); } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/TaskResOptionDefinition.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/TaskResOptionDefinition.java index e74555e9359..4447ed2a309 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/TaskResOptionDefinition.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/TaskResOptionDefinition.java @@ -69,8 +69,6 @@ public class TaskResOptionDefinition { } /** - * @param name - * @param desc * @param completeable true if option allows task to be transitioned to complete * @param color BLUE, RED, etc...; "" for black */ diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/TaskResolutionOptionRule.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/TaskResolutionOptionRule.java index 4c3c36ccfe9..5059aa7c6ca 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/TaskResolutionOptionRule.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/TaskResolutionOptionRule.java @@ -105,7 +105,6 @@ public class TaskResolutionOptionRule extends WorkRuleDefinition { * Return the order index number of the given option name. Used for comparisons of resolutions like < and > by * getting both indexes and doing a mathmatical comparison. * - * @param name * @return index number (starting at 1) or null if not found */ public Integer getResolutionOptionOrderIndex(String name) { diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/role/UserRoleXViewer.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/role/UserRoleXViewer.java index eec0ef63895..2da442e3d1f 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/role/UserRoleXViewer.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/role/UserRoleXViewer.java @@ -45,10 +45,6 @@ public class UserRoleXViewer extends XViewer { private final XUserRoleViewer xUserRoleViewer; - /** - * @param parent - * @param style - */ public UserRoleXViewer(Composite parent, int style, XUserRoleViewer xUserRoleViewer) { super(parent, style, new UserRoleXViewerFactory()); this.xUserRoleViewer = xUserRoleViewer; diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/role/XUserRoleViewer.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/role/XUserRoleViewer.java index 65722a8319f..b4449d37362 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/role/XUserRoleViewer.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/role/XUserRoleViewer.java @@ -407,11 +407,19 @@ public class XUserRoleViewer extends XWidget implements IArtifactWidget, IArtifa try { html.append(AHTML.addSpace(1) + AHTML.getLabelStr(AHTML.LABEL_FONT, "Tasks")); html.append(AHTML.startBorderTable(100, normalColor, "")); - html.append(AHTML.addHeaderRowMultiColumnTable(new String[] {"Role", "User", "Hours", "Major", "Minor", + html.append(AHTML.addHeaderRowMultiColumnTable(new String[] { + "Role", + "User", + "Hours", + "Major", + "Minor", "Issues"})); for (UserRole item : reviewArt.getUserRoleManager().getUserRoles()) { - html.append(AHTML.addRowMultiColumnTable(new String[] {item.getRole().name(), item.getUser().getName(), - item.getHoursSpentStr(), reviewArt.getUserRoleManager().getNumMajor(item.getUser()) + "", + html.append(AHTML.addRowMultiColumnTable(new String[] { + item.getRole().name(), + item.getUser().getName(), + item.getHoursSpentStr(), + reviewArt.getUserRoleManager().getNumMajor(item.getUser()) + "", reviewArt.getUserRoleManager().getNumMinor(item.getUser()) + "", reviewArt.getUserRoleManager().getNumIssues(item.getUser()) + ""})); } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/xviewer/column/XViewerReviewRoleColumn.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/xviewer/column/XViewerReviewRoleColumn.java index 29e5cf5ca1e..981d08c87df 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/xviewer/column/XViewerReviewRoleColumn.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/xviewer/column/XViewerReviewRoleColumn.java @@ -30,7 +30,6 @@ public class XViewerReviewRoleColumn extends XViewerValueColumn { * XViewer uses copies of column definitions so originals that are registered are not corrupted. Classes extending * XViewerValueColumn need to extend this constructor to copy extra stored fields * - * @param col */ @Override public XViewerReviewRoleColumn copy() { diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/xviewer/column/XViewerSmaCompletedDateColumn.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/xviewer/column/XViewerSmaCompletedDateColumn.java index 84422b7ccdf..033f0c9b94d 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/xviewer/column/XViewerSmaCompletedDateColumn.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/xviewer/column/XViewerSmaCompletedDateColumn.java @@ -40,7 +40,6 @@ public class XViewerSmaCompletedDateColumn extends XViewerValueColumn { * XViewer uses copies of column definitions so originals that are registered are not corrupted. Classes extending * XViewerValueColumn need to extend this constructor to copy extra stored fields * - * @param col */ @Override public XViewerSmaCompletedDateColumn copy() { diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/xviewer/column/XViewerSmaCreatedDateColumn.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/xviewer/column/XViewerSmaCreatedDateColumn.java index ce78569a257..c29334a9ffe 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/xviewer/column/XViewerSmaCreatedDateColumn.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/xviewer/column/XViewerSmaCreatedDateColumn.java @@ -40,7 +40,6 @@ public class XViewerSmaCreatedDateColumn extends XViewerValueColumn { * XViewer uses copies of column definitions so originals that are registered are not corrupted. Classes extending * XViewerValueColumn need to extend this constructor to copy extra stored fields * - * @param col */ @Override public XViewerSmaCreatedDateColumn copy() { diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/xviewer/column/XViewerSmaStateColumn.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/xviewer/column/XViewerSmaStateColumn.java index 7cd0ea73bc6..e2cd7f20964 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/xviewer/column/XViewerSmaStateColumn.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/xviewer/column/XViewerSmaStateColumn.java @@ -36,7 +36,6 @@ public class XViewerSmaStateColumn extends XViewerValueColumn { * XViewer uses copies of column definitions so originals that are registered are not corrupted. Classes extending * XViewerValueColumn need to extend this constructor to copy extra stored fields * - * @param col */ @Override public XViewerSmaStateColumn copy() { diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/ATSXWidgetOptionResolver.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/ATSXWidgetOptionResolver.java index 0eabcf3a582..c23ad7f1d8d 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/ATSXWidgetOptionResolver.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/ATSXWidgetOptionResolver.java @@ -26,9 +26,6 @@ public class ATSXWidgetOptionResolver extends DefaultXWidgetOptionResolver { private static ATSXWidgetOptionResolver instance = new ATSXWidgetOptionResolver(); public static String OPTIONS_FROM_ATTRIBUTE_VALIDITY = "OPTIONS_FROM_ATTRIBUTE_VALIDITY"; - /** - * - */ private ATSXWidgetOptionResolver() { instance = this; } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/AtsWorkflowConfigEditor.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/AtsWorkflowConfigEditor.java index 6e2e0bc558b..3c41376e7e6 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/AtsWorkflowConfigEditor.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/AtsWorkflowConfigEditor.java @@ -140,7 +140,7 @@ public class AtsWorkflowConfigEditor extends GraphicalEditorWithFlyoutPalette im super.configurePaletteViewer(viewer); // create a drag source listener for this palette viewer // together with an appropriate transfer drop target listener, this will enable - // model element creation by dragging a CombinatedTemplateCreationEntries + // model element creation by dragging a CombinatedTemplateCreationEntries // from the palette into the editor // @see ShapesEditor#createTransferDropTargetListener() viewer.addDragSourceListener(new TemplateTransferDragSourceListener(viewer)); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/actions/ValidateDiagramToolEntry.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/actions/ValidateDiagramToolEntry.java index f216c2c5e3d..97b0feb912a 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/actions/ValidateDiagramToolEntry.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/actions/ValidateDiagramToolEntry.java @@ -19,12 +19,6 @@ import org.eclipse.osee.framework.ui.swt.ImageManager; */ public class ValidateDiagramToolEntry extends ToolEntry { - /** - * @param label - * @param shortDesc - * @param iconSmall - * @param iconLarge - */ public ValidateDiagramToolEntry() { super("Validate Diagram", "Validate", ImageManager.getImageDescriptor(AtsImage.CHECK_BLUE), ImageManager.getImageDescriptor(AtsImage.CHECK_BLUE), ValidateDiagramTool.class); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/CancelledWorkPageShape.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/CancelledWorkPageShape.java index 65b45b100c3..cb353f9a3d2 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/CancelledWorkPageShape.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/CancelledWorkPageShape.java @@ -22,9 +22,6 @@ import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinition; */ public class CancelledWorkPageShape extends WorkPageShape { - /** - * @param workPageDefinition - */ public CancelledWorkPageShape(WorkPageDefinition workPageDefinition) { super(workPageDefinition); } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/CompletedWorkPageShape.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/CompletedWorkPageShape.java index 2cc6e3c089c..0ca2d546692 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/CompletedWorkPageShape.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/CompletedWorkPageShape.java @@ -38,9 +38,6 @@ public class CompletedWorkPageShape extends WorkPageShape { return super.equals(obj); } - /** - * @param workPageDefinition - */ public CompletedWorkPageShape(WorkPageDefinition workPageDefinition) { super(workPageDefinition); } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/DefaultTransitionConnection.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/DefaultTransitionConnection.java index 85f4c659ab7..94ad6a74043 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/DefaultTransitionConnection.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/DefaultTransitionConnection.java @@ -19,10 +19,6 @@ import org.eclipse.swt.graphics.Color; */ public class DefaultTransitionConnection extends TransitionConnection { - /** - * @param source - * @param target - */ public DefaultTransitionConnection(Shape source, Shape target) { super(source, target); } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/ReturnTransitionConnection.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/ReturnTransitionConnection.java index 26e4279f547..db8b9754b7f 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/ReturnTransitionConnection.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/ReturnTransitionConnection.java @@ -17,10 +17,6 @@ import org.eclipse.draw2d.Graphics; */ public class ReturnTransitionConnection extends TransitionConnection { - /** - * @param source - * @param target - */ public ReturnTransitionConnection(Shape source, Shape target) { super(source, target); } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/WorkPageShape.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/WorkPageShape.java index 0e7faee75af..2ffc3b7c662 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/WorkPageShape.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/WorkPageShape.java @@ -38,9 +38,9 @@ import org.eclipse.ui.views.properties.TextPropertyDescriptor; */
public class WorkPageShape extends RectangleShape {
private static final String[] attributeProperties = new String[] { //
- CoreAttributeTypes.WorkPageName.getName(), // - CoreAttributeTypes.WorkId.getName(), // - CoreAttributeTypes.WorkParentId.getName(),// + CoreAttributeTypes.WorkPageName.getName(), //
+ CoreAttributeTypes.WorkId.getName(), //
+ CoreAttributeTypes.WorkParentId.getName(),//
};
private final WorkPageDefinition workPageDefinition;
@@ -70,8 +70,8 @@ public class WorkPageShape extends RectangleShape { super.setWorkflowDiagram(workflowDiagram);
if (getId().equals("NEW")) {
setPropertyValue(
- CoreAttributeTypes.WorkId.getName(), - workflowDiagram.getWorkFlowDefinition().getId() + "." + getPropertyValue(CoreAttributeTypes.WorkPageName.getName())); + CoreAttributeTypes.WorkId.getName(),
+ workflowDiagram.getWorkFlowDefinition().getId() + "." + getPropertyValue(CoreAttributeTypes.WorkPageName.getName()));
}
}
@@ -81,7 +81,8 @@ public class WorkPageShape extends RectangleShape { for (String type : attributeProperties) {
descriptorList.add(new TextPropertyDescriptor(type, type)); // id and description pair
}
- descriptorList.add(new ComboBoxPropertyDescriptor(START_PAGE, START_PAGE, new String[] {StartPageEnum.Yes.name(),
+ descriptorList.add(new ComboBoxPropertyDescriptor(START_PAGE, START_PAGE, new String[] {
+ StartPageEnum.Yes.name(),
StartPageEnum.No.name()}));
}
@@ -89,9 +90,9 @@ public class WorkPageShape extends RectangleShape { protected void initializePropertyValues() throws OseeCoreException {
if (propertyValues == null) {
super.initializePropertyValues();
- super.setPropertyValue(CoreAttributeTypes.WorkPageName.getName(), workPageDefinition.getPageName()); - super.setPropertyValue(CoreAttributeTypes.WorkId.getName(), workPageDefinition.getId()); - super.setPropertyValue(CoreAttributeTypes.WorkParentId.getName(), + super.setPropertyValue(CoreAttributeTypes.WorkPageName.getName(), workPageDefinition.getPageName());
+ super.setPropertyValue(CoreAttributeTypes.WorkId.getName(), workPageDefinition.getId());
+ super.setPropertyValue(CoreAttributeTypes.WorkParentId.getName(),
workPageDefinition.getParentId() == null ? "" : workPageDefinition.getParentId());
}
}
@@ -131,15 +132,15 @@ public class WorkPageShape extends RectangleShape { @Override
public Result validForSave() {
try {
- String pageName = (String) getPropertyValue(CoreAttributeTypes.WorkPageName.getName()); + String pageName = (String) getPropertyValue(CoreAttributeTypes.WorkPageName.getName());
if (!Strings.isValid(pageName)) {
- return new Result(CoreAttributeTypes.WorkPageName.getName() + " can not be null"); + return new Result(CoreAttributeTypes.WorkPageName.getName() + " can not be null");
}
- String pageId = (String) getPropertyValue(CoreAttributeTypes.WorkId.getName()); + String pageId = (String) getPropertyValue(CoreAttributeTypes.WorkId.getName());
if (!Strings.isValid(pageId)) {
- return new Result(CoreAttributeTypes.WorkId.getName() + " can not be null"); + return new Result(CoreAttributeTypes.WorkId.getName() + " can not be null");
}
- String parentPageId = (String) getPropertyValue(CoreAttributeTypes.WorkParentId.getName()); + String parentPageId = (String) getPropertyValue(CoreAttributeTypes.WorkParentId.getName());
if (Strings.isValid(parentPageId)) {
if (WorkItemDefinitionFactory.getWorkItemDefinition(parentPageId) == null) {
return new Result("Parent Id " + parentPageId + " Work Page Definition must exist and does not.");
@@ -175,7 +176,7 @@ public class WorkPageShape extends RectangleShape { @Override
public String getName() {
- return (String) getPropertyValue(CoreAttributeTypes.WorkPageName.getName()); + return (String) getPropertyValue(CoreAttributeTypes.WorkPageName.getName());
}
@Override
@@ -189,7 +190,7 @@ public class WorkPageShape extends RectangleShape { }
public String getId() {
- return (String) getPropertyValue(CoreAttributeTypes.WorkId.getName()); + return (String) getPropertyValue(CoreAttributeTypes.WorkId.getName());
}
@Override
@@ -209,17 +210,17 @@ public class WorkPageShape extends RectangleShape { public void setPropertyValue(Object propertyId, Object value) {
try {
initializePropertyValues();
- if (CoreAttributeTypes.WorkPageName.getName().equals(propertyId)) { - super.setPropertyValue(CoreAttributeTypes.WorkPageName.getName(), value); - firePropertyChange(CoreAttributeTypes.WorkPageName.getName(), null, value); - setPropertyValue(CoreAttributeTypes.WorkId.getName(), + if (CoreAttributeTypes.WorkPageName.getName().equals(propertyId)) {
+ super.setPropertyValue(CoreAttributeTypes.WorkPageName.getName(), value);
+ firePropertyChange(CoreAttributeTypes.WorkPageName.getName(), null, value);
+ setPropertyValue(CoreAttributeTypes.WorkId.getName(),
getWorkflowDiagram().getWorkFlowDefinition().getId() + "." + value);
- } else if (CoreAttributeTypes.WorkId.getName().equals(propertyId)) { - super.setPropertyValue(CoreAttributeTypes.WorkId.getName(), value); - firePropertyChange(CoreAttributeTypes.WorkId.getName(), null, value); - } else if (CoreAttributeTypes.WorkParentId.getName().equals(propertyId)) { - super.setPropertyValue(CoreAttributeTypes.WorkParentId.getName(), value); - firePropertyChange(CoreAttributeTypes.WorkParentId.getName(), null, value); + } else if (CoreAttributeTypes.WorkId.getName().equals(propertyId)) {
+ super.setPropertyValue(CoreAttributeTypes.WorkId.getName(), value);
+ firePropertyChange(CoreAttributeTypes.WorkId.getName(), null, value);
+ } else if (CoreAttributeTypes.WorkParentId.getName().equals(propertyId)) {
+ super.setPropertyValue(CoreAttributeTypes.WorkParentId.getName(), value);
+ firePropertyChange(CoreAttributeTypes.WorkParentId.getName(), null, value);
} else if (START_PAGE.equals(propertyId)) {
super.setPropertyValue(START_PAGE, value);
firePropertyChange(START_PAGE, null, value);
@@ -233,9 +234,9 @@ public class WorkPageShape extends RectangleShape { @Override
public Result doSave(SkynetTransaction transaction) throws OseeCoreException {
- String name = (String) getPropertyValue(CoreAttributeTypes.WorkPageName.getName()); - String workId = (String) getPropertyValue(CoreAttributeTypes.WorkId.getName()); - String parentWorkId = (String) getPropertyValue(CoreAttributeTypes.WorkParentId.getName()); + String name = (String) getPropertyValue(CoreAttributeTypes.WorkPageName.getName());
+ String workId = (String) getPropertyValue(CoreAttributeTypes.WorkId.getName());
+ String parentWorkId = (String) getPropertyValue(CoreAttributeTypes.WorkParentId.getName());
workPageDefinition.setPageName(name);
workPageDefinition.setId(workId);
@@ -244,12 +245,12 @@ public class WorkPageShape extends RectangleShape { if (artifact == null) {
artifact = workPageDefinition.toArtifact(WriteType.New);
} else {
- artifact.setSoleAttributeValue(CoreAttributeTypes.WorkPageName, name); - artifact.setSoleAttributeValue(CoreAttributeTypes.WorkId, workId); + artifact.setSoleAttributeValue(CoreAttributeTypes.WorkPageName, name);
+ artifact.setSoleAttributeValue(CoreAttributeTypes.WorkId, workId);
if (!Strings.isValid(parentWorkId)) {
- artifact.deleteSoleAttribute(CoreAttributeTypes.WorkParentId); + artifact.deleteSoleAttribute(CoreAttributeTypes.WorkParentId);
} else {
- artifact.setSoleAttributeValue(CoreAttributeTypes.WorkParentId, parentWorkId); + artifact.setSoleAttributeValue(CoreAttributeTypes.WorkParentId, parentWorkId);
}
}
artifact.setName(workId);
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/WorkflowDiagram.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/WorkflowDiagram.java index 78216e70e0b..cfce5ce5365 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/WorkflowDiagram.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/WorkflowDiagram.java @@ -197,7 +197,7 @@ public class WorkflowDiagram extends ModelElement { List<String> stateNames = new ArrayList<String>();
for (Shape shape : getChildren()) {
if (WorkPageShape.class.isAssignableFrom(shape.getClass())) {
- String name = (String) ((WorkPageShape) shape).getPropertyValue(CoreAttributeTypes.WorkPageName); + String name = (String) ((WorkPageShape) shape).getPropertyValue(CoreAttributeTypes.WorkPageName);
if (stateNames.contains(name)) {
return new Result(
"Workflow can not have more than one state of same name. Multiples found of name " + name);
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/commands/ShapeDeleteCommand.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/commands/ShapeDeleteCommand.java index f7a11d53cf3..b95db14654d 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/commands/ShapeDeleteCommand.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/model/commands/ShapeDeleteCommand.java @@ -70,7 +70,7 @@ public class ShapeDeleteCommand extends Command { @Override
public void execute() {
- // store a copy of incoming & outgoing connections before proceeding
+ // store a copy of incoming & outgoing connections before proceeding
sourceConnections = child.getSourceConnections();
targetConnections = child.getTargetConnections();
redo();
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/parts/ConnectionEditPart.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/parts/ConnectionEditPart.java index 0de2df2d1a0..d7a34bfe64d 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/parts/ConnectionEditPart.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/parts/ConnectionEditPart.java @@ -51,7 +51,7 @@ class ConnectionEditPart extends AbstractConnectionEditPart implements PropertyC @Override
protected void createEditPolicies() {
- // Selection handle edit policy.
+ // Selection handle edit policy.
// Makes the connection show a feedback, when selected by the user.
installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE, new ConnectionEndpointEditPolicy());
// Allows the removal of the connection model element
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/parts/DiagramEditPart.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/parts/DiagramEditPart.java index cbafcf21bae..7b1e66fc63d 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/parts/DiagramEditPart.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/parts/DiagramEditPart.java @@ -110,7 +110,7 @@ public class DiagramEditPart extends AbstractGraphicalEditPart implements Proper @Override
public void propertyChange(PropertyChangeEvent evt) {
String prop = evt.getPropertyName();
- // these properties are fired when Shapes are added into or removed from
+ // these properties are fired when Shapes are added into or removed from
// the ShapeDiagram instance and must cause a call of refreshChildren()
// to update the diagram's contents.
if (WorkflowDiagram.CHILD_ADDED_PROP.equals(prop) || WorkflowDiagram.CHILD_REMOVED_PROP.equals(prop)) {
@@ -145,7 +145,7 @@ public class DiagramEditPart extends AbstractGraphicalEditPart implements Proper protected Command getCreateCommand(CreateRequest request) {
Object childClass = request.getNewObjectType();
if (childClass == EllipticalShape.class || WorkPageShape.class.isAssignableFrom(((Class<?>) childClass))) {
- // return a command that can add a Shape to a WorkflowDiagram
+ // return a command that can add a Shape to a WorkflowDiagram
return new ShapeCreateCommand((Shape) request.getNewObject(), (WorkflowDiagram) getHost().getModel(),
(Rectangle) getConstraintFor(request));
}
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/parts/ShapeEditPart.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/parts/ShapeEditPart.java index 19f5d4ca739..a73796ce52e 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/parts/ShapeEditPart.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/parts/ShapeEditPart.java @@ -72,7 +72,7 @@ class ShapeEditPart extends AbstractGraphicalEditPart implements PropertyChangeL protected void createEditPolicies() {
// allow removal of the associated model element
installEditPolicy(EditPolicy.COMPONENT_ROLE, new ShapeComponentEditPolicy());
- // allow the creation of connections and
+ // allow the creation of connections and
// and the reconnection of connections between Shape instances
installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new GraphicalNodeEditPolicy() {
@Override
@@ -234,7 +234,7 @@ class ShapeEditPart extends AbstractGraphicalEditPart implements PropertyChangeL @Override
protected void refreshVisuals() {
// notify parent container of changed position & location
- // if this line is removed, the XYLayoutManager used by the parent container
+ // if this line is removed, the XYLayoutManager used by the parent container
// (the Figure of the ShapesDiagramEditPart), will not know the bounds of this figure
// and will not draw it correctly.
Rectangle bounds = new Rectangle(getCastedModel().getLocation(), getCastedModel().getSize());
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/wizard/AtsWorkflowConfigCreationWizard.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/wizard/AtsWorkflowConfigCreationWizard.java index 66d2490993b..183c5ba703a 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/wizard/AtsWorkflowConfigCreationWizard.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/wizard/AtsWorkflowConfigCreationWizard.java @@ -126,8 +126,8 @@ public class AtsWorkflowConfigCreationWizard extends Wizard implements INewWizar WorkPageDefinition implementPage = new WorkPageDefinition("Implement", namespace + ".Implement", null);
implementPage.addWorkItem(RuleWorkItemId.atsRequireStateHourSpentPrompt.name());
- implementPage.addWorkItem(AtsAttributeTypes.WorkPackage); - implementPage.addWorkItem(AtsAttributeTypes.Resolution); + implementPage.addWorkItem(AtsAttributeTypes.WorkPackage);
+ implementPage.addWorkItem(AtsAttributeTypes.Resolution);
WorkPageDefinition completedPage =
new WorkPageDefinition("Completed", namespace + ".Completed", AtsCompletedWorkPageDefinition.ID);
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/wizard/NewWorkflowConfigPage1.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/wizard/NewWorkflowConfigPage1.java index b24ffc8ea92..86769697fbe 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/wizard/NewWorkflowConfigPage1.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/editor/wizard/NewWorkflowConfigPage1.java @@ -33,9 +33,6 @@ import org.eclipse.swt.widgets.Composite; public class NewWorkflowConfigPage1 extends WizardPage { private WorkPage page; - /** - * @param actionWizard - */ public NewWorkflowConfigPage1(AtsWorkflowConfigCreationWizard actionWizard) { super("Create new ATS Workflow Configuration", "Create ATS Workflow Configuration", null); setMessage("Enter workflow namespace."); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/flow/GoalWorkflowDefinition.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/flow/GoalWorkflowDefinition.java index 3597842367d..12033ef9a76 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/flow/GoalWorkflowDefinition.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/flow/GoalWorkflowDefinition.java @@ -57,11 +57,6 @@ public class GoalWorkflowDefinition extends WorkFlowDefinition { return workItems; } - /** - * @param name - * @param id - * @param parentId - */ public GoalWorkflowDefinition(String name, String id) { super(name, id, null); addPageTransition(GoalState.InWork.name(), GoalState.Completed.name(), TransitionType.ToPageAsDefault); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/flow/SimpleWorkflowDefinition.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/flow/SimpleWorkflowDefinition.java index 9761e69b496..38dad271536 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/flow/SimpleWorkflowDefinition.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/flow/SimpleWorkflowDefinition.java @@ -54,11 +54,6 @@ public class SimpleWorkflowDefinition extends WorkFlowDefinition { addWorkItem(AtsStatePercentCompleteWeightSimpleWorkflowRule.ID); } - /** - * @param name - * @param id - * @param parentId - */ public SimpleWorkflowDefinition(String name, String workflowId) { super(name, workflowId, null); addDefaultTransitions(this, workflowId); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/flow/TaskWorkflowDefinition.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/flow/TaskWorkflowDefinition.java index 88192180f1a..75ba55b6d5f 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/flow/TaskWorkflowDefinition.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/flow/TaskWorkflowDefinition.java @@ -61,11 +61,6 @@ public class TaskWorkflowDefinition extends WorkFlowDefinition { return workItems; } - /** - * @param name - * @param id - * @param parentId - */ public TaskWorkflowDefinition(String name, String id) { super(name, id, null); addPageTransition(TaskStates.InWork.name(), TaskStates.Completed.name(), TransitionType.ToPageAsDefault); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/flow/TeamWorkflowDefinition.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/flow/TeamWorkflowDefinition.java index 9574f4489d5..3a107394a81 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/flow/TeamWorkflowDefinition.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/flow/TeamWorkflowDefinition.java @@ -50,9 +50,6 @@ public class TeamWorkflowDefinition extends WorkFlowDefinition { * Instantiate workflow as inherited from parentWorkflowId. Default transitions and startPageId are not set as they * will most likely come from parent. * - * @param name - * @param workflowId - * @param parentWorkflowId */ public TeamWorkflowDefinition(String name, String workflowId, String parentWorkflowId) { super(name, workflowId, parentWorkflowId); @@ -65,9 +62,6 @@ public class TeamWorkflowDefinition extends WorkFlowDefinition { /** * Instantiate workflow as a TeamWorkflowDefinition with default transitions and startPageId set. * - * @param name - * @param id - * @param parentId */ public TeamWorkflowDefinition(String name, String workflowId) { super(name, workflowId, null); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/item/AtsAddDecisionReviewRule.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/item/AtsAddDecisionReviewRule.java index e6198b8bcad..f099c42d7f9 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/item/AtsAddDecisionReviewRule.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/item/AtsAddDecisionReviewRule.java @@ -82,8 +82,6 @@ public class AtsAddDecisionReviewRule extends WorkRuleDefinition { /** * Creates decision review if one of same name doesn't already exist * - * @param atsAddDecisionReviewRule - * @param sma * @return DecisionReviewArtifact * @throws OseeCoreException */ diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/item/AtsAddPeerToPeerReviewRule.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/item/AtsAddPeerToPeerReviewRule.java index 107ada4d128..86925978654 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/item/AtsAddPeerToPeerReviewRule.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/item/AtsAddPeerToPeerReviewRule.java @@ -74,9 +74,6 @@ public class AtsAddPeerToPeerReviewRule extends WorkRuleDefinition { /** * Creates PeerToPeer review if one of same name doesn't already exist * - * @param atsAddPeerToPeerReviewRule - * @param sma - * @param transaction * @return review * @throws OseeCoreException */ diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/item/AtsWorkDefinitions.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/item/AtsWorkDefinitions.java index 2e616bf5cd4..f5617e48cda 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/item/AtsWorkDefinitions.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/item/AtsWorkDefinitions.java @@ -66,8 +66,7 @@ import org.eclipse.osee.framework.ui.skynet.widgets.workflow.XWidgetFactory; public final class AtsWorkDefinitions implements IWorkDefinitionProvider { public static final String ATS_DESCRIPTION_NOT_REQUIRED_ID = AtsAttributeTypes.Description + ".notRequired"; - public static final String ATS_ESTIMATED_HOURS_NOT_REQUIRED_ID = - AtsAttributeTypes.EstimatedHours + ".notRequired"; + public static final String ATS_ESTIMATED_HOURS_NOT_REQUIRED_ID = AtsAttributeTypes.EstimatedHours + ".notRequired"; public static enum RuleWorkItemId { atsRequireStateHourSpentPrompt("Work Page Option: Will popup a dialog to prompt user for time spent in this state."), @@ -151,8 +150,7 @@ public final class AtsWorkDefinitions implements IWorkDefinitionProvider { workItems.add(new AtsAttributeXWidgetWorkItem("Decision", AtsDecisionDecisionWorkPageDefinition.DECISION_ANSWER_LABEL, AtsAttributeTypes.Decision, "XLabelDam")); - workItems.add(new AtsAttributeXWidgetWorkItem(AtsAttributeTypes.ProposedResolution, "XTextDam", - FILL_VERTICALLY)); + workItems.add(new AtsAttributeXWidgetWorkItem(AtsAttributeTypes.ProposedResolution, "XTextDam", FILL_VERTICALLY)); workItems.add(new AtsAttributeXWidgetWorkItem(AtsAttributeTypes.Description, "XTextDam", XOption.REQUIRED, FILL_VERTICALLY)); workItems.add(new AtsAttributeXWidgetWorkItem(AtsAttributeTypes.Description.getUnqualifiedName(), @@ -174,8 +172,8 @@ public final class AtsWorkDefinitions implements IWorkDefinitionProvider { "OPTIONS_FROM_ATTRIBUTE_VALIDITY", XOption.REQUIRED, XOption.BEGIN_COMPOSITE_6)); workItems.add(new AtsAttributeSoleComboXWidgetWorkItem(AtsAttributeTypes.PriorityType, "OPTIONS_FROM_ATTRIBUTE_VALIDITY", XOption.REQUIRED)); - workItems.add(new AtsAttributeXWidgetWorkItem(AtsAttributeTypes.NeedBy, "XDateDam", - XOption.HORIZONTAL_LABEL, XOption.END_COMPOSITE)); + workItems.add(new AtsAttributeXWidgetWorkItem(AtsAttributeTypes.NeedBy, "XDateDam", XOption.HORIZONTAL_LABEL, + XOption.END_COMPOSITE)); workItems.add(new AtsAttributeXWidgetWorkItem(AtsAttributeTypes.ValidationRequired, "XCheckBoxDam", XOption.HORIZONTAL_LABEL, XOption.LABEL_BEFORE)); workItems.add(new AtsAttributeXWidgetWorkItem(AtsAttributeTypes.UserCommunity, @@ -256,8 +254,11 @@ public final class AtsWorkDefinitions implements IWorkDefinitionProvider { SkynetTransaction transaction = new SkynetTransaction(AtsUtil.getAtsBranch(), "Import ATS Work Item Definitions"); // Items must be imported in order due to the relations that are created between items - for (Class<?> clazz : new Class[] {WorkRuleDefinition.class, WorkWidgetDefinition.class, - WorkPageDefinition.class, WorkFlowDefinition.class}) { + for (Class<?> clazz : new Class[] { + WorkRuleDefinition.class, + WorkWidgetDefinition.class, + WorkPageDefinition.class, + WorkFlowDefinition.class}) { for (WorkItemDefinition wid : workItemDefinitions) { if (clazz.isInstance(wid)) { // System.out.println("Adding " + wid.getId() + " as class " + clazz); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/vue/LoadAIsAndTeamsAction.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/vue/LoadAIsAndTeamsAction.java index b7d1981c507..99cb3e19212 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/vue/LoadAIsAndTeamsAction.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/workflow/vue/LoadAIsAndTeamsAction.java @@ -341,7 +341,7 @@ public class LoadAIsAndTeamsAction { // // /** // * We can use this method to dispose of any system resources we previously allocated. - // * + // * // * @see IWorkbenchWindowActionDelegate#dispose // */ // public void dispose() { @@ -349,7 +349,7 @@ public class LoadAIsAndTeamsAction { // // /** // * We will cache window object in order to be able to provide parent shell for the message dialog. - // * + // * // * @see IWorkbenchWindowActionDelegate#init // */ // public void init(IWorkbenchWindow window) { diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/IAtsWorldEditorItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/IAtsWorldEditorItem.java index 6515e96257a..71c54285697 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/IAtsWorldEditorItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/IAtsWorldEditorItem.java @@ -36,8 +36,6 @@ public interface IAtsWorldEditorItem { * Return menu item objects to add to the World Editor pull-down menu only if applicable for the given * worldSearchItem * - * @param worldEditorProvider - * @param worldComposite * @return applicable pull-down actions * @throws OseeCoreException */ diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldXViewerFactory.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldXViewerFactory.java index 2fce82f80b1..672df720ee1 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldXViewerFactory.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldXViewerFactory.java @@ -236,21 +236,80 @@ public class WorldXViewerFactory extends SkynetXViewerFactory { "Action's Initiating Workflow", 150, SWT.LEFT, false, SortDataType.String, false, "This is the first workflow(s) that created the initiation of the Action"); public static final XViewerColumn Artifact_Type_Col = new XViewerArtifactTypeColumn(true); - public static final XViewerColumn[] WorldViewColumns = new XViewerColumn[] {Type_Col, State_Col, Priority_Col, - Change_Type_Col, Assignees_Col, Title_Col, Actionable_Items_Col, User_Community_Col, new XViewerHridColumn(), - Created_Date_Col, Version_Target_Col, Team_Col, Notes_Col, Deadline_Col, Annual_Cost_Avoidance_Col, - Description_Col, Legacy_PCR_Col, Decision_Col, Resolution_Col, Groups_Col, Goals_Col, Estimated_Release_Date_Col, - Estimated_Completion_Date_Col, Release_Date_Col, Work_Package_Col, Category_Col, Category2_Col, Category3_Col, - Goal_Order, Goal_Order_Vote_Col, Related_To_State_Col, Estimated_Hours_Col, Weekly_Benefit_Hrs_Col, - Remaining_Hours_Col, Percent_Complete_State_Col, Percent_Complete_State_Task_Col, - Percent_Complete_State_Review_Col, Percent_Complete_Total_Col, Hours_Spent_State_Col, Hours_Spent_State_Task_Col, - Hours_Spent_State_Review_Col, Hours_Spent_Total_Col, Total_Hours_Spent_Col, Originator_Col, Implementor_Col, - Review_Author_Col, Review_Moderator_Col, Review_Reviewer_Col, Review_Decider_Col, Completed_Date_Col, - Cancelled_Date_Col, Work_Days_Needed_Col, Percent_Rework_Col, Branch_Status_Col, Number_of_Tasks_Col, - Number_of_Tasks_Remining_Col, new XViewerLastModifiedByColumn(false), new XViewerLastModifiedDateColumn(false), - Last_Statused_Col, Validation_Required_Col, Review_Major_Defects, Review_Minor_Defects, Review_Issues, - Actions_Initiating_Workflow_Col, Artifact_Type_Col, Originating_Workflow, Parent_ID_Col, Days_In_Current_State, - Parent_State_Col, Points_Col, Numeric1_Col, Numeric2_Col, new XViewerGuidColumn(false)}; + public static final XViewerColumn[] WorldViewColumns = new XViewerColumn[] { + Type_Col, + State_Col, + Priority_Col, + Change_Type_Col, + Assignees_Col, + Title_Col, + Actionable_Items_Col, + User_Community_Col, + new XViewerHridColumn(), + Created_Date_Col, + Version_Target_Col, + Team_Col, + Notes_Col, + Deadline_Col, + Annual_Cost_Avoidance_Col, + Description_Col, + Legacy_PCR_Col, + Decision_Col, + Resolution_Col, + Groups_Col, + Goals_Col, + Estimated_Release_Date_Col, + Estimated_Completion_Date_Col, + Release_Date_Col, + Work_Package_Col, + Category_Col, + Category2_Col, + Category3_Col, + Goal_Order, + Goal_Order_Vote_Col, + Related_To_State_Col, + Estimated_Hours_Col, + Weekly_Benefit_Hrs_Col, + Remaining_Hours_Col, + Percent_Complete_State_Col, + Percent_Complete_State_Task_Col, + Percent_Complete_State_Review_Col, + Percent_Complete_Total_Col, + Hours_Spent_State_Col, + Hours_Spent_State_Task_Col, + Hours_Spent_State_Review_Col, + Hours_Spent_Total_Col, + Total_Hours_Spent_Col, + Originator_Col, + Implementor_Col, + Review_Author_Col, + Review_Moderator_Col, + Review_Reviewer_Col, + Review_Decider_Col, + Completed_Date_Col, + Cancelled_Date_Col, + Work_Days_Needed_Col, + Percent_Rework_Col, + Branch_Status_Col, + Number_of_Tasks_Col, + Number_of_Tasks_Remining_Col, + new XViewerLastModifiedByColumn(false), + new XViewerLastModifiedDateColumn(false), + Last_Statused_Col, + Validation_Required_Col, + Review_Major_Defects, + Review_Minor_Defects, + Review_Issues, + Actions_Initiating_Workflow_Col, + Artifact_Type_Col, + Originating_Workflow, + Parent_ID_Col, + Days_In_Current_State, + Parent_State_Col, + Points_Col, + Numeric1_Col, + Numeric2_Col, + new XViewerGuidColumn(false)}; private static String NAMESPACE = "org.eclipse.osee.ats.WorldXViewer"; public WorldXViewerFactory() { diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldXViewerSorter.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldXViewerSorter.java index 9c9af52b3ea..985ee54d89f 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldXViewerSorter.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldXViewerSorter.java @@ -23,9 +23,6 @@ public class WorldXViewerSorter extends XViewerSorter { protected final XViewer xViewer; - /** - * @param xViewer - */ public WorldXViewerSorter(XViewer xViewer) { super(xViewer); this.xViewer = xViewer; diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/search/MultipleHridSearchUi.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/search/MultipleHridSearchUi.java index 9a4fb14b915..de7259ace9f 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/search/MultipleHridSearchUi.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/search/MultipleHridSearchUi.java @@ -72,7 +72,8 @@ public class MultipleHridSearchUi { } else { ed = new EntryDialog(Displays.getActiveShell(), data.getName(), null, - "Enter Legacy ID, Guid or HRID (comma separated)", MessageDialog.QUESTION, new String[] {"OK", + "Enter Legacy ID, Guid or HRID (comma separated)", MessageDialog.QUESTION, new String[] { + "OK", "Cancel"}, 0); } int response = ed.open(); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/search/TaskSearchWorldSearchItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/search/TaskSearchWorldSearchItem.java index c4794c6bdc4..b9170d36386 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/search/TaskSearchWorldSearchItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/search/TaskSearchWorldSearchItem.java @@ -64,17 +64,10 @@ public class TaskSearchWorldSearchItem extends TaskEditorParameterSearchItem { private XHyperlabelGroupSelection groupWidget = null; private XCombo versionCombo = null; - /** - * @param worldSearchItem - */ public TaskSearchWorldSearchItem(WorldSearchItem worldSearchItem) { super(worldSearchItem); } - /** - * @param name - * @param loadView - */ public TaskSearchWorldSearchItem() { super("Task Search"); } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/search/WorldSearchItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/search/WorldSearchItem.java index 16587ea41ab..5bc9d9e25be 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/search/WorldSearchItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/search/WorldSearchItem.java @@ -81,7 +81,6 @@ public abstract class WorldSearchItem { * Method called to display the current search in the view. Override to provide more information about selected * values (eg MyWorld) * - * @param searchType * @return selected name * @throws OseeCoreException */ |