Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoberto E. Escobar2013-03-04 22:38:42 +0000
committerRoberto E. Escobar2013-03-08 19:09:43 +0000
commit3604f0893307927943897cde1de0b7f1d3615d7f (patch)
treec2f98f3d6b75f14bd55a285f76adf7a56a129779 /plugins/org.eclipse.osee.framework.access
parent6ba79b3ab94fd4ec29dea056bf459f3a20511aa1 (diff)
downloadorg.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')
-rw-r--r--plugins/org.eclipse.osee.framework.access/META-INF/MANIFEST.MF3
-rw-r--r--plugins/org.eclipse.osee.framework.access/build.properties3
-rw-r--r--plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlService.java46
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);
}

Back to the top