diff options
author | Roberto E. Escobar | 2013-03-04 22:38:42 +0000 |
---|---|---|
committer | Roberto E. Escobar | 2013-03-08 19:09:43 +0000 |
commit | 3604f0893307927943897cde1de0b7f1d3615d7f (patch) | |
tree | c2f98f3d6b75f14bd55a285f76adf7a56a129779 /plugins/org.eclipse.osee.framework.access | |
parent | 6ba79b3ab94fd4ec29dea056bf459f3a20511aa1 (diff) | |
download | org.eclipse.osee-3604f0893307927943897cde1de0b7f1d3615d7f.tar.gz org.eclipse.osee-3604f0893307927943897cde1de0b7f1d3615d7f.tar.xz org.eclipse.osee-3604f0893307927943897cde1de0b7f1d3615d7f.zip |
bug[ats_ANG3F]: Use CacheBuilder instead of MapMaker
Change code to use com.google.common.cache.CacheBuilder
instead of com.google.common.collect.MapMaker.
Change-Id: I7c1659ac3c8565808253181001eb2d219d1685bd
Diffstat (limited to 'plugins/org.eclipse.osee.framework.access')
3 files changed, 32 insertions, 20 deletions
diff --git a/plugins/org.eclipse.osee.framework.access/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.framework.access/META-INF/MANIFEST.MF index 99c391e01fa..91fe3800670 100644 --- a/plugins/org.eclipse.osee.framework.access/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.osee.framework.access/META-INF/MANIFEST.MF @@ -5,7 +5,7 @@ Bundle-SymbolicName: org.eclipse.osee.framework.access;singleton:=true Bundle-Version: 0.11.0.qualifier Bundle-Vendor: Eclipse Open System Engineering Environment Bundle-RequiredExecutionEnvironment: JavaSE-1.6 -Import-Package: com.google.common.collect, +Import-Package: com.google.common.cache, org.eclipse.core.resources, org.eclipse.core.runtime, org.eclipse.osee.framework.core.data, @@ -41,3 +41,4 @@ Eclipse-ExtensibleAPI: true Export-Package: org.eclipse.osee.framework.access, org.eclipse.osee.framework.access.internal.data Service-Component: OSGI-INF/*.xml +Require-Bundle: com.google.guava;bundle-version="12.0.0" diff --git a/plugins/org.eclipse.osee.framework.access/build.properties b/plugins/org.eclipse.osee.framework.access/build.properties index 4a36e88a3c2..68b4bd4910b 100644 --- a/plugins/org.eclipse.osee.framework.access/build.properties +++ b/plugins/org.eclipse.osee.framework.access/build.properties @@ -4,4 +4,5 @@ bin.includes = META-INF/,\ OSGI-INF/ source.. = src/ additional.bundles = org.eclipse.osee.framework.skynet.core,\ - org.eclipse.osee.framework.core.model + org.eclipse.osee.framework.core.model,\ + com.google.guava diff --git a/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlService.java b/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlService.java index 1490641bb27..a9ee7456a16 100644 --- a/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlService.java +++ b/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlService.java @@ -18,8 +18,9 @@ import java.util.Collections; import java.util.HashSet; import java.util.LinkedList; import java.util.List; -import java.util.Map; import java.util.Set; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import org.eclipse.core.runtime.IStatus; @@ -35,6 +36,7 @@ import org.eclipse.osee.framework.core.enums.CoreRelationTypes; import org.eclipse.osee.framework.core.enums.PermissionEnum; import org.eclipse.osee.framework.core.exception.OseeAuthenticationRequiredException; import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.exception.OseeExceptions; import org.eclipse.osee.framework.core.model.Branch; import org.eclipse.osee.framework.core.model.IBasicArtifact; import org.eclipse.osee.framework.core.model.access.AccessData; @@ -79,7 +81,8 @@ import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; import org.osgi.framework.ServiceReference; -import com.google.common.collect.MapMaker; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; /** * @author Jeff C. Phillips @@ -121,8 +124,9 @@ public class AccessControlService implements IAccessControlService { private final HashCollection<Integer, PermissionEnum> subjectToPermissionCache = new HashCollection<Integer, PermissionEnum>(true); - private final Map<Collection<String>, AccessData> accessDataCache = - new MapMaker().expiration(1, TimeUnit.HOURS).makeMap(); + + private final Cache<Collection<String>, AccessData> accessDataCache = CacheBuilder.newBuilder().expireAfterAccess(1, + TimeUnit.HOURS).build(); private final IOseeCachingService cachingService; private final IOseeDatabaseService databaseService; @@ -186,7 +190,7 @@ public class AccessControlService implements IAccessControlService { } private void initializeCaches() { - accessDataCache.clear(); + accessDataCache.invalidateAll(); accessControlListCache.clear(); objectToSubjectCache.clear(); subjectToGroupCache.clear(); @@ -330,7 +334,7 @@ public class AccessControlService implements IAccessControlService { } @Override - public AccessDataQuery getAccessData(IBasicArtifact<?> userArtifact, Collection<?> objectsToCheck) throws OseeCoreException { + public AccessDataQuery getAccessData(final IBasicArtifact<?> userArtifact, final Collection<?> objectsToCheck) throws OseeCoreException { List<String> key = new LinkedList<String>(); for (Object o : objectsToCheck) { if (o instanceof Branch) { @@ -347,20 +351,26 @@ public class AccessControlService implements IAccessControlService { eventService.addListener(EventQosType.NORMAL, listener2); } - synchronized (accessDataCache) { - if (!accessDataCache.containsKey(key)) { - ILifecycleService service = getLifecycleService(); - AccessData accessData = new AccessData(); - if (!DbUtil.isDbInit()) { - AbstractLifecycleVisitor<?> visitor = - new AccessProviderVisitor(userArtifact, objectsToCheck, accessData); - IStatus status = service.dispatch(new NullProgressMonitor(), visitor, ACCESS_POINT_ID); - Operations.checkForErrorStatus(status); + AccessData accessData = null; + try { + accessData = accessDataCache.get(key, new Callable<AccessData>() { + + @Override + public AccessData call() throws Exception { + ILifecycleService service = getLifecycleService(); + AccessData accessData = new AccessData(); + if (!DbUtil.isDbInit()) { + AbstractLifecycleVisitor<?> visitor = + new AccessProviderVisitor(userArtifact, objectsToCheck, accessData); + IStatus status = service.dispatch(new NullProgressMonitor(), visitor, ACCESS_POINT_ID); + Operations.checkForErrorStatus(status); + } + return accessData; } - accessDataCache.put(key, accessData); - } + }); + } catch (ExecutionException ex) { + OseeExceptions.wrapAndThrow(ex); } - AccessData accessData = accessDataCache.get(key); addLockAccessControl(userArtifact, objectsToCheck, accessData); return new AccessDataQuery(accessData); } |