diff options
author | donald.g.dunne | 2016-03-07 18:56:33 +0000 |
---|---|---|
committer | Megumi Telles | 2016-03-09 19:58:21 +0000 |
commit | 3a12002b35fed3078aafc746f97039a94c48c074 (patch) | |
tree | e89281f21c3180abb8b322666c1c4d866fe46996 | |
parent | 95f6bf99d9518c446347bc55ef741cb7785cb0e5 (diff) | |
download | org.eclipse.osee-3a12002b35fed3078aafc746f97039a94c48c074.tar.gz org.eclipse.osee-3a12002b35fed3078aafc746f97039a94c48c074.tar.xz org.eclipse.osee-3a12002b35fed3078aafc746f97039a94c48c074.zip |
bug[ats_ATS276451]: Sorting by Activity Id is slow
Change-Id: Ic564909ca59ee90952dfb3615a4e3789033d4f0d
8 files changed, 90 insertions, 52 deletions
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/ev/IAtsEarnedValueService.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/ev/IAtsEarnedValueService.java index 7646268f81c..320535db4e8 100644 --- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/ev/IAtsEarnedValueService.java +++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/ev/IAtsEarnedValueService.java @@ -24,4 +24,6 @@ public interface IAtsEarnedValueService { public Collection<IAtsWorkPackage> getWorkPackageOptions(IAtsObject object) throws OseeCoreException; + public String getWorkPackageId(IAtsWorkItem atsObject); + } diff --git a/plugins/org.eclipse.osee.ats.core.client/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.ats.core.client/META-INF/MANIFEST.MF index 77ef40dea26..9f9c2d723eb 100644 --- a/plugins/org.eclipse.osee.ats.core.client/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.osee.ats.core.client/META-INF/MANIFEST.MF @@ -7,7 +7,8 @@ Eclipse-ExtensibleAPI: true Bundle-Activator: org.eclipse.osee.ats.core.client.internal.Activator Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Import-Package: com.google.inject, +Import-Package: com.google.common.cache, + com.google.inject, javax.ws.rs.client;version="2.0.0", javax.ws.rs.core;version="2.0.0", org.eclipse.core.runtime, diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/ev/AtsEarnedValueImpl.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/ev/AtsEarnedValueImpl.java index dc4d0c111ae..ace3af2db0f 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/ev/AtsEarnedValueImpl.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/ev/AtsEarnedValueImpl.java @@ -39,17 +39,24 @@ import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; public class AtsEarnedValueImpl implements IAtsEarnedValueService { @Override - public IAtsWorkPackage getWorkPackage(IAtsWorkItem workItem) throws OseeCoreException { - WorkPackageArtifact wpa = null; + public String getWorkPackageId(IAtsWorkItem workItem) { + String guid = null; Artifact artifact = AtsClientService.get().getArtifact(workItem); - Conditions.checkNotNull(artifact, "workItem", "Can't Find Artifact matching [%s]", workItem.toString()); + Conditions.checkNotNull(artifact, "workItem", "Can't Find Work Package matching %s", workItem.toStringWithId()); if (artifact instanceof AbstractWorkflowArtifact) { AbstractWorkflowArtifact awa = (AbstractWorkflowArtifact) artifact; - String workPackageGuid = awa.getSoleAttributeValue(AtsAttributeTypes.WorkPackageGuid, null); - if (Strings.isValid(workPackageGuid)) { - Artifact workPkgArt = ArtifactQuery.getArtifactFromId(workPackageGuid, AtsUtilCore.getAtsBranch()); - wpa = new WorkPackageArtifact(workPkgArt); - } + guid = awa.getSoleAttributeValue(AtsAttributeTypes.WorkPackageGuid, null); + } + return guid; + } + + @Override + public IAtsWorkPackage getWorkPackage(IAtsWorkItem workItem) throws OseeCoreException { + WorkPackageArtifact wpa = null; + String workPackageGuid = getWorkPackageId(workItem); + if (Strings.isValid(workPackageGuid)) { + Artifact workPkgArt = ArtifactQuery.getArtifactFromId(workPackageGuid, AtsUtilCore.getAtsBranch()); + return new WorkPackageArtifact(workPkgArt); } return wpa; } @@ -101,4 +108,5 @@ public class AtsEarnedValueImpl implements IAtsEarnedValueService { } return workPackageOptions; } + } diff --git a/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/column/ActivityIdColumnTest.java b/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/column/ActivityIdColumnTest.java index c2eb0e39dfc..84ec9e75184 100644 --- a/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/column/ActivityIdColumnTest.java +++ b/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/column/ActivityIdColumnTest.java @@ -77,7 +77,7 @@ public class ActivityIdColumnTest { ActivityIdUtility col = new ActivityIdUtility(earnedValueServiceProvider); Set<IAtsWorkPackage> workPackages = new HashSet<>(); - col.getWorkPackages(teamWf1, workPackages); + col.getWorkPackage(teamWf1); Assert.assertEquals(1, workPackages.size()); Assert.assertEquals(workPkg1, workPackages.iterator().next()); @@ -88,7 +88,7 @@ public class ActivityIdColumnTest { ActivityIdUtility col = new ActivityIdUtility(earnedValueServiceProvider); Set<IAtsWorkPackage> workPackages = new HashSet<>(); - col.getWorkPackages(task1, workPackages); + col.getWorkPackage(task1); // Each work flow stores it's own work package, so none should be returned Assert.assertEquals(0, workPackages.size()); diff --git a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/column/IActivityIdUtility.java b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/column/IActivityIdUtility.java index a99b8fd9d2b..d318b0288b5 100644 --- a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/column/IActivityIdUtility.java +++ b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/column/IActivityIdUtility.java @@ -10,8 +10,6 @@ *******************************************************************************/ package org.eclipse.osee.ats.core.column; -import java.util.Collection; -import java.util.Set; import org.eclipse.osee.ats.api.IAtsObject; import org.eclipse.osee.ats.api.ev.IAtsWorkPackage; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; @@ -21,6 +19,10 @@ import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; */ public interface IActivityIdUtility extends IAtsColumnUtility { - public abstract Collection<IAtsWorkPackage> getWorkPackages(IAtsObject atsObject, Set<IAtsWorkPackage> workPackages) throws OseeCoreException; + IAtsWorkPackage getWorkPackage(IAtsObject atsObject) throws OseeCoreException; + + String getWorkPackageId(Object object); + + String getColumnText(IAtsWorkPackage workPackage); }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/internal/column/ev/ActivityIdUtility.java b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/internal/column/ev/ActivityIdUtility.java index 854145026ab..c53efa3a863 100644 --- a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/internal/column/ev/ActivityIdUtility.java +++ b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/internal/column/ev/ActivityIdUtility.java @@ -10,15 +10,10 @@ *******************************************************************************/ package org.eclipse.osee.ats.core.internal.column.ev; -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; import org.eclipse.osee.ats.api.IAtsObject; import org.eclipse.osee.ats.api.IAtsWorkItem; import org.eclipse.osee.ats.api.ev.IAtsEarnedValueServiceProvider; import org.eclipse.osee.ats.api.ev.IAtsWorkPackage; -import org.eclipse.osee.ats.api.team.IAtsTeamWorkflowProvider; -import org.eclipse.osee.ats.api.workflow.IAtsTeamWorkflow; import org.eclipse.osee.ats.core.column.IActivityIdUtility; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; @@ -36,19 +31,18 @@ public class ActivityIdUtility implements IActivityIdUtility { } @Override + public String getWorkPackageId(Object object) { + return earnedValueServiceProvider.getEarnedValueService().getWorkPackageId((IAtsWorkItem) object); + } + + @Override public String getColumnText(IAtsObject atsObject) { String result = ""; - StringBuilder sb = new StringBuilder(); try { - Collection<IAtsWorkPackage> workPackages = getWorkPackages(atsObject, new HashSet<IAtsWorkPackage>()); - if (!workPackages.isEmpty()) { - for (IAtsWorkPackage workPackage : workPackages) { - sb.append(workPackage.getActivityId()); - sb.append(" - "); - sb.append(workPackage.getActivityName()); - sb.append(", "); - } - result = sb.toString().replaceFirst(", $", ""); + IAtsWorkPackage workPackage = null; + if (atsObject instanceof IAtsWorkItem) { + workPackage = earnedValueServiceProvider.getEarnedValueService().getWorkPackage((IAtsWorkItem) atsObject); + result = getText(workPackage); } } catch (OseeCoreException ex) { return AtsColumnUtilities.CELL_ERROR_PREFIX + " - " + ex.getLocalizedMessage(); @@ -56,28 +50,30 @@ public class ActivityIdUtility implements IActivityIdUtility { return result; } + private String getText(IAtsWorkPackage workPackage) { + String result; + result = String.format("%s - %s", workPackage.getActivityId(), workPackage.getActivityName()); + return result; + } + @Override - public Collection<IAtsWorkPackage> getWorkPackages(IAtsObject atsObject, Set<IAtsWorkPackage> workPackages) throws OseeCoreException { - // If object has children team workflows, roll-up results of all work packages - if (atsObject instanceof IAtsTeamWorkflowProvider) { - for (IAtsTeamWorkflow team : ((IAtsTeamWorkflowProvider) atsObject).getTeamWorkflows()) { - getWorkPackages(team, workPackages); - } - } + public String getColumnText(IAtsWorkPackage workPackage) { + return getText(workPackage); + } + @Override + public IAtsWorkPackage getWorkPackage(IAtsObject atsObject) throws OseeCoreException { + IAtsWorkPackage workPackage = null; // Children work items inherit the work packages of their parent team workflow if (atsObject instanceof IAtsWorkItem) { - IAtsWorkPackage workPkg = - earnedValueServiceProvider.getEarnedValueService().getWorkPackage((IAtsWorkItem) atsObject); - if (workPkg != null) { - workPackages.add(workPkg); - } + workPackage = earnedValueServiceProvider.getEarnedValueService().getWorkPackage((IAtsWorkItem) atsObject); } - return workPackages; + return workPackage; } @Override public String getDescription() { return "Provides Activity Id and Name from the selected Work Package related to the selected workflow."; } + } diff --git a/plugins/org.eclipse.osee.ats/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.ats/META-INF/MANIFEST.MF index 9fa274c2fd3..31c62f821a1 100644 --- a/plugins/org.eclipse.osee.ats/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.osee.ats/META-INF/MANIFEST.MF @@ -58,7 +58,8 @@ Export-Package: org.eclipse.osee.ats, org.eclipse.osee.ats.workflow, org.eclipse.osee.ats.world, org.eclipse.osee.ats.world.search -Import-Package: com.google.gson, +Import-Package: com.google.common.cache, + com.google.gson, com.google.gson.reflect, com.google.inject, javax.mail, diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/column/ev/ActivityIdColumnUI.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/column/ev/ActivityIdColumnUI.java index 8d46608be1e..62a49720163 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/column/ev/ActivityIdColumnUI.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/column/ev/ActivityIdColumnUI.java @@ -10,11 +10,15 @@ *******************************************************************************/ package org.eclipse.osee.ats.column.ev; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.Set; +import java.util.concurrent.TimeUnit; import org.eclipse.jface.window.Window; import org.eclipse.nebula.widgets.xviewer.IAltLeftClickProvider; import org.eclipse.nebula.widgets.xviewer.IMultiColumnEditProvider; @@ -26,17 +30,22 @@ import org.eclipse.osee.ats.api.ev.IAtsWorkPackage; import org.eclipse.osee.ats.api.workflow.IAtsAction; import org.eclipse.osee.ats.column.WorkPackageFilterTreeDialog; import org.eclipse.osee.ats.core.client.action.ActionManager; +import org.eclipse.osee.ats.core.client.ev.WorkPackageArtifact; import org.eclipse.osee.ats.core.client.workflow.AbstractWorkflowArtifact; +import org.eclipse.osee.ats.core.util.AtsUtilCore; import org.eclipse.osee.ats.internal.Activator; import org.eclipse.osee.ats.internal.AtsClientService; import org.eclipse.osee.ats.util.xviewer.column.XViewerAtsColumn; import org.eclipse.osee.ats.world.WorldXViewerFactory; +import org.eclipse.osee.framework.core.exception.OseeWrappedException; import org.eclipse.osee.framework.core.util.Result; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.framework.jdk.core.util.Collections; +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.skynet.core.artifact.search.ArtifactQuery; import org.eclipse.osee.framework.skynet.core.utility.Artifacts; import org.eclipse.osee.framework.ui.plugin.util.AWorkbench; import org.eclipse.swt.SWT; @@ -77,12 +86,33 @@ public class ActivityIdColumnUI extends XViewerAtsColumn implements IMultiColumn public String getColumnText(Object element, XViewerColumn column, int columnIndex) { String result = ""; if (element instanceof IAtsObject) { - result = - AtsClientService.get().getColumnUtilities().getActivityIdUtility().getColumnText((IAtsObject) element); + String workPackageGuid = + AtsClientService.get().getColumnUtilities().getActivityIdUtility().getWorkPackageId(element); + if (Strings.isValid(workPackageGuid)) { + try { + IAtsWorkPackage workPackage = workPackageGuidToWorkPackage.get(workPackageGuid); + result = AtsClientService.get().getColumnUtilities().getActivityIdUtility().getColumnText(workPackage); + } catch (Exception ex) { + throw new OseeWrappedException(ex); + } + } } return result; } + // Cache work packages by guid so don't have to re search/create objects constantly. + private static final LoadingCache<String, IAtsWorkPackage> workPackageGuidToWorkPackage = + CacheBuilder.newBuilder().expireAfterWrite(10, TimeUnit.MINUTES).build( + new CacheLoader<String, IAtsWorkPackage>() { + + @Override + public IAtsWorkPackage load(String workPackageGuid) throws Exception { + Artifact workPkgArt = ArtifactQuery.getArtifactFromId(workPackageGuid, AtsUtilCore.getAtsBranch()); + return new WorkPackageArtifact(workPkgArt); + } + + }); + @Override public boolean handleAltLeftClick(TreeColumn treeColumn, TreeItem treeItem) { boolean modified = false; @@ -123,9 +153,8 @@ public class ActivityIdColumnUI extends XViewerAtsColumn implements IMultiColumn if (result.isFalse()) { AWorkbench.popup("Options Invalid", result.getText()); } else { - WorkPackageFilterTreeDialog dialog = - new WorkPackageFilterTreeDialog("Select Work Package", getMessage(awas, commonWorkPackageOptions, - uniqueWorkPackageOptions), commonWorkPackageOptions); + WorkPackageFilterTreeDialog dialog = new WorkPackageFilterTreeDialog("Select Work Package", + getMessage(awas, commonWorkPackageOptions, uniqueWorkPackageOptions), commonWorkPackageOptions); dialog.setInput(); if (dialog.open() == Window.OK) { IAtsWorkPackage workPackage = dialog.getSelection(); @@ -149,10 +178,9 @@ public class ActivityIdColumnUI extends XViewerAtsColumn implements IMultiColumn private static String getMessage(Collection<? extends AbstractWorkflowArtifact> awas, Set<IAtsWorkPackage> commonWorkPackageOptions, Set<IAtsWorkPackage> uniqueWorkPackageOptions) { String message = "Select Work Package"; if (awas.size() > 1) { - message = - String.format( - "Select Work Package Option from %d common option(s) out of %d unique options from selected Work Items", - commonWorkPackageOptions.size(), uniqueWorkPackageOptions.size()); + message = String.format( + "Select Work Package Option from %d common option(s) out of %d unique options from selected Work Items", + commonWorkPackageOptions.size(), uniqueWorkPackageOptions.size()); } return message; } |