From 0146f54e0f439de7174e7c2e5ee74cadd68aea60 Mon Sep 17 00:00:00 2001 From: Andrew Hind Date: Fri, 9 May 2008 14:27:41 +0000 Subject: [PATCH] Build fix - missing dependancy for previous build fix from DM ACL merge performance teaks git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@9058 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../impl/SimplePermissionReference.java | 56 ++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/source/java/org/alfresco/repo/security/permissions/impl/SimplePermissionReference.java b/source/java/org/alfresco/repo/security/permissions/impl/SimplePermissionReference.java index 32ea4c2a2d..f0c90dd007 100644 --- a/source/java/org/alfresco/repo/security/permissions/impl/SimplePermissionReference.java +++ b/source/java/org/alfresco/repo/security/permissions/impl/SimplePermissionReference.java @@ -24,6 +24,10 @@ */ package org.alfresco.repo.security.permissions.impl; +import java.util.HashMap; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + import org.alfresco.service.namespace.QName; /** @@ -32,12 +36,60 @@ import org.alfresco.service.namespace.QName; * @author andyh */ public final class SimplePermissionReference extends AbstractPermissionReference -{ +{ /** * */ private static final long serialVersionUID = 637302438293417818L; + private static ReadWriteLock lock = new ReentrantReadWriteLock(); + + private static HashMap> instances = new HashMap>(); + + public static SimplePermissionReference getPermissionReference(QName qName, String name) + { + lock.readLock().lock(); + try + { + HashMap typed = instances.get(qName); + if(typed != null) + { + SimplePermissionReference instance = typed.get(name); + if(instance != null) + { + return instance; + } + } + } + finally + { + lock.readLock().unlock(); + } + + lock.writeLock().lock(); + try + { + HashMap typed = instances.get(qName); + if(typed == null) + { + typed = new HashMap(); + instances.put(qName, typed); + } + SimplePermissionReference instance = typed.get(name); + if(instance == null) + { + instance = new SimplePermissionReference(qName, name); + typed.put(name, instance); + } + return instance; + } + finally + { + lock.writeLock().unlock(); + } + } + + /* * The type */ @@ -49,7 +101,7 @@ public final class SimplePermissionReference extends AbstractPermissionReference private String name; - public SimplePermissionReference(QName qName, String name) + protected SimplePermissionReference(QName qName, String name) { super(); this.qName = qName;