| author | kwilk | 2012-05-07 18:10:40 (EDT) |
|---|---|---|
| committer | Roberto E. Escobar | 2012-05-07 18:10:40 (EDT) |
| commit | 07a9f6e7d60f0391a947fd4cd41958450b79d92f (patch) (side-by-side diff) | |
| tree | bbf2b9c69f6af3df57fe951e3400b17c38fb2fce | |
| parent | 90e7f73deb3c4a125b9256695d041e329a9648a6 (diff) | |
| download | org.eclipse.osee-07a9f6e7d60f0391a947fd4cd41958450b79d92f.zip org.eclipse.osee-07a9f6e7d60f0391a947fd4cd41958450b79d92f.tar.gz org.eclipse.osee-07a9f6e7d60f0391a947fd4cd41958450b79d92f.tar.bz2 | |
feature: More storage changes
4 files changed, 232 insertions, 157 deletions
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/FilterVersionOperation.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/FilterVersionOperation.java new file mode 100644 index 0000000..7ff35a3 --- a/dev/null +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/FilterVersionOperation.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2012 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.HashSet; +import java.util.List; +import java.util.Set; +import java.util.logging.Level; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.nebula.widgets.xviewer.Activator; +import org.eclipse.osee.ats.core.client.config.TeamDefinitionArtifact; +import org.eclipse.osee.framework.core.enums.CoreRelationTypes; +import org.eclipse.osee.framework.core.operation.AbstractOperation; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; + +public class FilterVersionOperation extends AbstractOperation { + + private final Artifact teamDefinition; + private final Artifact[] additional; + + public FilterVersionOperation(String operationName, Set<Artifact> result, Artifact teamDefinition, Artifact... additionalToBeRemoved) { + super(operationName, Activator.PLUGIN_ID); + this.teamDefinition = teamDefinition; + this.additional = additionalToBeRemoved; + } + + @Override + protected void doWork(IProgressMonitor monitor) throws Exception { + final Set<Artifact> filteredVersions = new HashSet<Artifact>(getVersions(TaskConfiguration.this.program)); + try { + this.teamDefinition = (TeamDefinitionArtifact) iter.next(); + for (Artifact taskConf : this.teamDefinition.getRelatedArtifacts(CoreRelationTypes.Universal_Grouping__Group)) { + List<Artifact> keys = taskConf.getRelatedArtifacts(CoreRelationTypes.Universal_Grouping__Members); + for (int i = 0; i < keys.size(); i++) { + if (keys.get(i).equals(this.teamDefinition)) { + filteredVersions.remove(keys.get(keys.size() - 1 - i)); + break; + } + } + } + } catch (Exception ex) { + OseeLog.log(Activator.class, Level.SEVERE, + FilterVersionOperation.class.getSimpleName() + " unable to update versions. Ex: " + ex); + } + filteredVersions.remove(version); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/TaskConfiguration.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/TaskConfiguration.java index b41c96f..1ddcadf 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/TaskConfiguration.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/TaskConfiguration.java @@ -11,13 +11,11 @@ package org.eclipse.osee.ats.config; import java.rmi.activation.Activator; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import java.util.List; import java.util.Map; import java.util.Set; import java.util.logging.Level; @@ -34,10 +32,13 @@ import org.eclipse.osee.framework.core.enums.CoreAttributeTypes; import org.eclipse.osee.framework.core.enums.CoreRelationTypes; import org.eclipse.osee.framework.core.exception.OseeCoreException; import org.eclipse.osee.framework.core.exception.OseeStateException; +import org.eclipse.osee.framework.core.operation.NullOperationLogger; +import org.eclipse.osee.framework.core.operation.Operations; import org.eclipse.osee.framework.jdk.core.util.Collections; 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.ui.plugin.util.AWorkbench; import org.eclipse.osee.framework.ui.skynet.blam.AbstractBlam; import org.eclipse.osee.framework.ui.skynet.blam.VariableMap; import org.eclipse.osee.framework.ui.skynet.widgets.XComboViewer; @@ -66,6 +67,7 @@ public class TaskConfiguration extends AbstractBlam { "Delete mode (selected Task Configuration artifact(s) will be deleted)"; private XListViewer taskConfigurationArtifacts; + private XComboViewer programWidget; private XListViewer versionsWidget; private XListViewer availableTeamDefinitionsWidget; private XListViewer availableOtherVersionsWidget; @@ -77,13 +79,6 @@ public class TaskConfiguration extends AbstractBlam { private final Set<Artifact> selectedTaskConfigurationArtifacts; - private static Set<Class<?>> keyTypes; - static { - keyTypes = new HashSet<Class<?>>(2); - keyTypes.add(VersionArtifact.class); - keyTypes.add(TeamDefinitionArtifact.class); - } - public TaskConfiguration() { super(null, String.format( "Creates new %s artifact on selected Version artifacts, associates via Parent-Child relationship.", @@ -98,23 +93,28 @@ public class TaskConfiguration extends AbstractBlam { } boolean deleteTaskConfiguration = map.getBoolean(DELETE_CHECKBOX); + boolean success = false; if (version != null) { String workStatement = - String.format("%s \"%s\" artifact", deleteTaskConfiguration ? "Created" : "Deleted", TASK_CONFIGURATION); + String.format("%s \"%s\" artifact", deleteTaskConfiguration ? "Deleted" : "Created", TASK_CONFIGURATION); monitor.beginTask(workStatement, deleteTaskConfiguration ? 1 : 3); if (deleteTaskConfiguration) { + if (selectedTaskConfigurationArtifacts.isEmpty()) { + throw new IllegalArgumentException("You must select some task configuration artifacts to delete."); + } for (Artifact taskConfiguration : selectedTaskConfigurationArtifacts) { taskConfiguration.delete(); taskConfiguration.persist(String.format("[%s] removed Task configuration from [%s]", getClass().getSimpleName(), version)); } + success = true; } else { if (selectedTeamDefinition == null || selectedVersion == null) { monitor.setCanceled(true); - throw new OseeStateException("Missing selections of selectedVersion and selectedTeamDefinition"); + throw new IllegalArgumentException("Missing selections of Version and TeamDefinition"); } Artifact taskConfiguration = @@ -134,30 +134,37 @@ public class TaskConfiguration extends AbstractBlam { taskConfiguration.addRelation(CoreRelationTypes.Universal_Grouping__Members, selectedVersion); version.persist(String.format("[%s] added Task configuration to [%s]", getClass().getSimpleName(), version)); + success = true; } //redraw available option widgets Displays.ensureInDisplayThread(new Runnable() { @Override public void run() { - availableTeamDefinitionsWidget.setInput(null); + versionsWidget.setInput(null); + version = null; availableOtherVersionsWidget.setInput(null); selectedVersion = null; + availableTeamDefinitionsWidget.setInput(null); selectedTeamDefinition = null; + taskConfigurationArtifacts.setInput(null); + selectedTaskConfigurationArtifacts.clear(); } }); } else { throw new OseeStateException("Version artifact not selected"); } monitor.done(); + + AWorkbench.popup("Result", success ? "Added Task Configuration" : "Failed adding Task Configuration"); } @Override public void widgetCreated(XWidget xWidget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener modListener, boolean isEditable) { String label = xWidget.getLabel(); if (PROGRAM.equalsIgnoreCase(label)) { - XComboViewer viewer = (XComboViewer) xWidget; - viewer.addSelectionChangedListener(new ProgramChangedListener()); + programWidget = (XComboViewer) xWidget; + programWidget.addSelectionChangedListener(new ProgramChangedListener()); } else if (VERSION_ARTIFACTS.equalsIgnoreCase(label)) { versionsWidget = (XListViewer) xWidget; versionsWidget.addSelectionChangedListener(new VersionChangedListener()); @@ -196,28 +203,18 @@ public class TaskConfiguration extends AbstractBlam { if (iter.hasNext()) { program = (IAtsProgram) iter.next(); - final Collection<VersionArtifact> versionArtifacts = new ArrayList<VersionArtifact>(); - - try { - TeamDefinitionArtifact holdingTeamDef = program.getTeamDefHoldingVersions(); - if (holdingTeamDef != null) { - versionArtifacts.addAll(holdingTeamDef.getVersionsArtifacts()); - } - } catch (OseeCoreException ex) { - OseeLog.log( - - Activator.class, - Level.INFO, - String.format("Unable to retrieve artifacts in %s", - ProgramChangedListener.class.getSimpleName())); - } - + final Set<Artifact> versionArtifacts = getVersions(program); Displays.ensureInDisplayThread(new Runnable() { @Override public void run() { version = null; versionsWidget.setInput(versionArtifacts); taskConfigurationArtifacts.setInput(null); + + availableTeamDefinitionsWidget.setInput(null); + selectedTeamDefinition = null; + availableOtherVersionsWidget.setInput(null); + selectedVersion = null; } }); } @@ -237,63 +234,9 @@ public class TaskConfiguration extends AbstractBlam { if (iter.hasNext()) { version = (VersionArtifact) iter.next(); - //filter out from avail versions to assign once selected -- same as avail team definitions - final Collection<VersionArtifact> versionArtifacts = new ArrayList<VersionArtifact>(); - try { - TeamDefinitionArtifact holdingTeamDef = program.getTeamDefHoldingVersions(); - if (holdingTeamDef != null) { - versionArtifacts.addAll(holdingTeamDef.getVersionsArtifacts()); - } - versionArtifacts.remove(version); - } catch (OseeCoreException ex) { - OseeLog.log( - Activator.class, - Level.INFO, - String.format("Unable to retrieve artifacts in %s", - VersionChangedListener.class.getSimpleName())); - } - - //insert all team definitions -- same as versions - final List<Artifact> teamDefs = new ArrayList<Artifact>(); - try { - TeamDefinitionArtifact holdingTeamDef = program.getTeamDefHoldingVersions(); - if (holdingTeamDef != null) { - teamDefs.addAll(holdingTeamDef.getDescendants()); - } - } catch (OseeCoreException ex) { - OseeLog.log( - Activator.class, - Level.INFO, - String.format("Unable to retrieve artifacts in %s", - ProgramChangedListener.class.getSimpleName())); - } - - //show currently stored task configuration artifacts - show their keys final Map<String, Artifact> stringTotaskCreationMap = new HashMap<String, Artifact>(); - try { - for (Artifact taskCreationNode : version.getChildren()) { - if (taskCreationNode.isOfType(CoreArtifactTypes.UniversalGroup)) { - List<Artifact> allKeyNodes = - taskCreationNode.getRelatedArtifacts(CoreRelationTypes.Universal_Grouping__Members); - - Set<Artifact> result = getKeys(allKeyNodes.iterator(), new HashSet<Artifact>(2)); - Artifact[] nodes = result.toArray(new Artifact[result.size()]); - if (nodes.length == 2) { - Artifact key1 = nodes[0]; - Artifact key2 = nodes[1]; - - String guiName = - String.format("[%s]:[%s] --- [%s]:[%s]", key1.getArtifactTypeName(), key1.getName(), - key2.getArtifactTypeName(), key2.getName()); - - stringTotaskCreationMap.put(guiName, taskCreationNode); - } - } - } - } catch (OseeCoreException ex) { - OseeLog.log(Activator.class, Level.INFO, - String.format("Unable to retrieve %s artifacts", TASK_CONFIGURATION)); - } + Operations.executeAsJob(new TaskConfigurationQuery("Search for task configuration setup...", + NullOperationLogger.getSingleton(), version, stringTotaskCreationMap), true); final ISelectionChangedListener taskCreationListener = new ISelectionChangedListener() { private final Map<String, Artifact> map = stringTotaskCreationMap; @@ -313,11 +256,15 @@ public class TaskConfiguration extends AbstractBlam { } }; + final Set<Artifact> versionArtifacts = getVersions(TaskConfiguration.this.program); + versionArtifacts.remove(version); + final Set<Artifact> teamDefinitons = getTeamDefinitions(TaskConfiguration.this.program); + Displays.ensureInDisplayThread(new Runnable() { @Override public void run() { taskConfigurationArtifacts.setInput(stringTotaskCreationMap.keySet()); - availableTeamDefinitionsWidget.setInput(teamDefs); + availableTeamDefinitionsWidget.setInput(teamDefinitons); availableOtherVersionsWidget.setInput(versionArtifacts); taskConfigurationArtifacts.addSelectionChangedListener(taskCreationListener); } @@ -333,93 +280,55 @@ public class TaskConfiguration extends AbstractBlam { public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection selection = (IStructuredSelection) event.getSelectionProvider().getSelection(); final Iterator<?> iter = selection.iterator(); - new Thread(new Runnable() { - @Override - public void run() { - if (iter.hasNext()) { - final Set<Artifact> filteredVersions = - new HashSet<Artifact>(getVersionsSet(TaskConfiguration.this.program)); - try { - selectedTeamDefinition = (TeamDefinitionArtifact) iter.next(); - for (Artifact taskConf : selectedTeamDefinition.getRelatedArtifacts(CoreRelationTypes.Universal_Grouping__Group)) { - List<Artifact> keys = - taskConf.getRelatedArtifacts(CoreRelationTypes.Universal_Grouping__Members); - for (int i = 0; i < keys.size(); i++) { - if (keys.get(i).equals(selectedTeamDefinition)) { - filteredVersions.remove(keys.get(keys.size() - 1 - i)); - break; - } - } - } - } catch (Exception ex) { - OseeLog.log( - Activator.class, - Level.SEVERE, - AvailTeamDefinitionSelectedListener.class.getSimpleName() + " unable to update versions. Ex: " + ex); - } - filteredVersions.remove(version); + if (iter.hasNext()) { + final Set<Artifact> result = new HashSet<Artifact>(); + new Thread(new Runnable() { + @Override + public void run() { + selectedTeamDefinition = (TeamDefinitionArtifact) iter.next(); + + Operations.executeAsJob(new FilterVersionOperation("Filtering Version Artifacts", result, + selectedTeamDefinition, version), true); Displays.ensureInDisplayThread(new Runnable() { @Override public void run() { - availableOtherVersionsWidget.setInput(filteredVersions); + availableOtherVersionsWidget.setInput(result); + selectedVersion = null; } }); } - } - }).start(); + }); + } } - }; + } private class AvailableVersionArtifacts implements ISelectionChangedListener { @Override public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection selection = (IStructuredSelection) event.getSelectionProvider().getSelection(); final Iterator<?> iter = selection.iterator(); - new Thread(new Runnable() { - @Override - public void run() { - if (iter.hasNext()) { - selectedVersion = (VersionArtifact) iter.next(); - } - } - }).start(); - } - }; - - /** - * Pulls first found keys from child node and returns it as a set. <br/> - * Will loop till it finds first 2 or runs out of member nodes. - * - * <pre> - * (Key 1) Version Artifact - * / - * (Task Creation) child ---.` - * \ \ - * | (Key 2) Team Definition - * | - * \ - * (Key n) Artifact - * </pre> - * - * TODO protect against loops & seen elements - * - * @throws OseeCoreException - */ - private Set<Artifact> getKeys(Iterator<Artifact> nodeIter, Set<Artifact> foundNodes) { - if (nodeIter.hasNext()) { - handleNode(nodeIter.next(), foundNodes); + if (iter.hasNext()) { + selectedVersion = (VersionArtifact) iter.next(); + } } - return nodeIter.hasNext() && foundNodes.size() < 3 ? getKeys(nodeIter, foundNodes) : foundNodes; } - private void handleNode(Artifact artifact, Set<Artifact> storage) { - if (keyTypes.contains(artifact.getClass())) { - storage.add(artifact); + private Set<Artifact> getTeamDefinitions(IAtsProgram program) { + final Set<Artifact> teamDefs = new HashSet<Artifact>(); + try { + TeamDefinitionArtifact holdingTeamDef = program.getTeamDefHoldingVersions(); + if (holdingTeamDef != null) { + teamDefs.addAll(holdingTeamDef.getDescendants()); + } + } catch (OseeCoreException ex) { + OseeLog.log(Activator.class, Level.INFO, + String.format("Unable to retrieve artifacts in %s", ProgramChangedListener.class.getSimpleName())); } + return teamDefs; } - private Set<Artifact> getVersionsSet(IAtsProgram program) { + private Set<Artifact> getVersions(IAtsProgram program) { Set<Artifact> versions = new HashSet<Artifact>(); try { Collection<VersionArtifact> pulled = program.getTeamDefHoldingVersions().getVersionsArtifacts(); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/TaskConfigurationQuery.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/TaskConfigurationQuery.java new file mode 100644 index 0000000..46ffc8b --- a/dev/null +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/config/TaskConfigurationQuery.java @@ -0,0 +1,111 @@ +/******************************************************************************* + * Copyright (c) 2012 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.rmi.activation.Activator; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Iterator; +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.NullProgressMonitor; +import org.eclipse.osee.ats.core.client.config.TeamDefinitionArtifact; +import org.eclipse.osee.ats.core.client.version.VersionArtifact; +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.operation.AbstractOperation; +import org.eclipse.osee.framework.core.operation.OperationLogger; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; + +public class TaskConfigurationQuery extends AbstractOperation { + private final Class<?>[] KEYS = {VersionArtifact.class, TeamDefinitionArtifact.class}; + + private final Set<Class<?>> keyTypes; + private final Artifact version; + private final Map<String, Artifact> taskConfigurationStorage; + + public TaskConfigurationQuery(String operationName, OperationLogger logger, Artifact versionArtifact, Map<String, Artifact> storage) { + super(operationName, "org.eclipse.osee.ats.config.TaskConfigurationQuery", logger); + this.version = versionArtifact; + this.keyTypes = new HashSet<Class<?>>(Arrays.asList(KEYS)); + this.taskConfigurationStorage = storage; + } + + @Override + protected void doWork(IProgressMonitor monitor) throws Exception { + if (monitor == null) { + monitor = new NullProgressMonitor(); + } + + try { + for (Artifact taskCreationNode : version.getChildren()) { + if (CoreArtifactTypes.UniversalGroup.equals(taskCreationNode.getArtifactType())) { + List<Artifact> allKeyNodes = + taskCreationNode.getRelatedArtifacts(CoreRelationTypes.Universal_Grouping__Members); + + Set<Artifact> firstFoundPair = getKeys(allKeyNodes.iterator(), new HashSet<Artifact>(2)); + if (firstFoundPair.size() == 2) { + Artifact[] nodes = firstFoundPair.toArray(new Artifact[firstFoundPair.size()]); + Artifact key1 = nodes[0]; + Artifact key2 = nodes[1]; + + String guiName = + String.format("[%s]:[%s] --- [%s]:[%s]", key1.getArtifactTypeName(), key1.getName(), + key2.getArtifactTypeName(), key2.getName()); + + taskConfigurationStorage.put(guiName, taskCreationNode); + } + } + } + } catch (OseeCoreException ex) { + OseeLog.log(Activator.class, Level.INFO, "Unable to retrieve TASK_CONFIGURATION artifacts"); + } + + monitor.done(); + } + + /** + * Pulls first found keys from child node and returns it as a set. <br/> + * Will loop till it finds first 2 or runs out of member nodes. + * + * <pre> + * (Key 1) Version Artifact + * / + * (Task Creation) child ---.` + * \ \ + * | (Key 2) Team Definition + * | + * \ + * (Key n) Artifact + * </pre> + * + * TODO protect against loops & seen elements + * + * @throws OseeCoreException + */ + private Set<Artifact> getKeys(Iterator<Artifact> nodeIter, Set<Artifact> foundNodes) { + if (nodeIter.hasNext()) { + handleNode(nodeIter.next(), foundNodes); + } + return nodeIter.hasNext() && foundNodes.size() < 3 ? getKeys(nodeIter, foundNodes) : foundNodes; + } + + private void handleNode(Artifact artifact, Set<Artifact> storage) { + if (keyTypes.contains(artifact.getClass())) { + storage.add(artifact); + } + } +} diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListViewer.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListViewer.java index e17a94b..744ac45 100644 --- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListViewer.java +++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListViewer.java @@ -125,9 +125,7 @@ public class XListViewer extends GenericXWidget { } public void setInputArtifacts(Collection<? extends Artifact> arts) { - ArrayList<Object> objs = new ArrayList<Object>(); - objs.addAll(arts); - setInput(objs); + setInput(new ArrayList<Object>(arts)); } public void addSelectionChangedListener(ISelectionChangedListener listener) { |

