diff options
author | jmisinco | 2012-10-12 16:35:25 +0000 |
---|---|---|
committer | Roberto E. Escobar | 2012-10-12 16:35:25 +0000 |
commit | 83064d7951b512b06ac3697ec388aa4266f4d5dd (patch) | |
tree | aa2310908a8571aae47995b2cfdcf1bae3b11b92 | |
parent | 8a1867a96124be6d3f58cc5406757e2d6cb8523a (diff) | |
download | org.eclipse.osee-83064d7951b512b06ac3697ec388aa4266f4d5dd.tar.gz org.eclipse.osee-83064d7951b512b06ac3697ec388aa4266f4d5dd.tar.xz org.eclipse.osee-83064d7951b512b06ac3697ec388aa4266f4d5dd.zip |
bug[ats_G797P]: Updates to GoalArtifactMemberCache for scrambled order
2 files changed, 22 insertions, 19 deletions
diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/util/GoalArtifactMembersCache.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/util/GoalArtifactMembersCache.java index 383c50633b0..d1a6e4c3985 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/util/GoalArtifactMembersCache.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/util/GoalArtifactMembersCache.java @@ -11,12 +11,12 @@ package org.eclipse.osee.ats.core.client.util; import java.util.Arrays; +import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.WeakHashMap; import org.eclipse.osee.ats.api.data.AtsRelationTypes; import org.eclipse.osee.ats.core.client.artifact.GoalArtifact; import org.eclipse.osee.framework.core.enums.DeletionFlag; @@ -34,14 +34,14 @@ import org.eclipse.osee.framework.skynet.core.event.model.Sender; */ public class GoalArtifactMembersCache { - private static Map<GoalArtifact, List<Artifact>> cache; + private static Map<String, List<Artifact>> cache; private static Set<String> registered; + private static volatile boolean initialized = false; private static void initializeStructures() { - if (cache == null) { - cache = new WeakHashMap<GoalArtifact, List<Artifact>>(); - } - if (registered == null) { + if (!initialized) { + initialized = true; + cache = new HashMap<String, List<Artifact>>(); registered = new HashSet<String>(); } } @@ -57,25 +57,27 @@ public class GoalArtifactMembersCache { @Override public void handleArtifactEvent(ArtifactEvent artifactEvent, Sender sender) { - if (cache.remove(artifact) == null) { - OseeEventManager.removeListener(this); - registered.remove(artifact.getGuid()); + synchronized (cache) { + cache.remove(artifact.getGuid()); } } }; OseeEventManager.addListener(eventListener); - - registered.add(artifact.getGuid()); + synchronized (registered) { + registered.add(artifact.getGuid()); + } } } - public static synchronized List<Artifact> getMembers(GoalArtifact artifact) throws OseeCoreException { + public static List<Artifact> getMembers(GoalArtifact artifact) throws OseeCoreException { initializeStructures(); registerForEvents(artifact); - List<Artifact> toReturn = cache.get(artifact); + List<Artifact> toReturn = cache.get(artifact.getGuid()); if (toReturn == null) { toReturn = artifact.getRelatedArtifacts(AtsRelationTypes.Goal_Member, DeletionFlag.EXCLUDE_DELETED); - cache.put(artifact, toReturn); + synchronized (cache) { + cache.put(artifact.getGuid(), toReturn); + } } return new LinkedList<Artifact>(toReturn); } diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/filter/ArtifactEventFilter.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/filter/ArtifactEventFilter.java index 06f1b7dabf4..b4d2ec6b7f0 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/filter/ArtifactEventFilter.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/filter/ArtifactEventFilter.java @@ -21,22 +21,23 @@ import org.eclipse.osee.framework.skynet.core.artifact.Artifact; */ public class ArtifactEventFilter implements IEventFilter { - private final Artifact filterArtifact; + private final String filterArtifactGuid; + private final String filterBranchGuid; public ArtifactEventFilter(Artifact artifact) { - this.filterArtifact = artifact; + filterArtifactGuid = artifact.getGuid(); + filterBranchGuid = artifact.getBranchGuid(); } @Override public boolean isMatch(String branchGuid) { - return branchGuid.equals(filterArtifact.getBranchGuid()); + return branchGuid.equals(filterBranchGuid); } @Override public boolean isMatchArtifacts(List<? extends IBasicGuidArtifact> guidArts) { for (IBasicGuidArtifact art : guidArts) { - if (art.getGuid().equals(filterArtifact.getGuid()) && art.getBranchGuid().equals( - filterArtifact.getBranchGuid())) { + if (art.getGuid().equals(filterArtifactGuid) && art.getBranchGuid().equals(filterBranchGuid)) { return true; } } |