[jboss-svn-commits] JBL Code SVN: r23256 - in labs/jbossrules/trunk/drools-guvnor/src: main/java/org/drools/guvnor/server and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Oct 2 06:01:50 EDT 2008


Author: Rikkola
Date: 2008-10-02 06:01:50 -0400 (Thu, 02 Oct 2008)
New Revision: 23256

Added:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/AssetLockManager.java
   labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/util/AssetLockManagerTest.java
Modified:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryService.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryServiceAsync.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/RepositoryServiceServlet.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
Log:
JBRULES-1735: Optimistic lock warning when user opens an asset

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryService.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryService.java	2008-10-02 09:55:18 UTC (rev 23255)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryService.java	2008-10-02 10:01:50 UTC (rev 23256)
@@ -449,5 +449,25 @@
      * Removes user security data.
      */
     public void deleteUser(String userName);
+    
 
+    /**
+     * Returns the lockers user name
+     * @param uuid
+     * @return Lockers user name or null if there is no lock.
+     */
+    public String getAssetLockerUserName(String uuid);
+
+    /**
+     * Locks the asset, if a lock already exists this over writes it.
+     * @param uuid
+     */
+    public void lockAsset(String uuid);
+
+    /**
+     * Unlocks the asset.
+     * @param uuid
+     */
+    public void unLockAsset(String uuid);
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryServiceAsync.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryServiceAsync.java	2008-10-02 09:55:18 UTC (rev 23255)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryServiceAsync.java	2008-10-02 10:01:50 UTC (rev 23256)
@@ -97,9 +97,11 @@
 	public void updateUserPermissions(java.lang.String p0, java.util.Map p1, AsyncCallback cb);
 	public void listAvailablePermissionTypes(AsyncCallback cb);
 	public void deleteUser(java.lang.String p0, AsyncCallback cb);
+	public void getAssetLockerUserName(java.lang.String p0, AsyncCallback cb);
+    public void lockAsset(java.lang.String p0, AsyncCallback cb);
+    public void unLockAsset(java.lang.String p0, AsyncCallback cb);
 
 
 
 
-
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/RepositoryServiceServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/RepositoryServiceServlet.java	2008-10-02 09:55:18 UTC (rev 23255)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/RepositoryServiceServlet.java	2008-10-02 10:01:50 UTC (rev 23256)
@@ -243,10 +243,30 @@
 	public void deleteUser(String userName) {
 		getService().deleteUser(userName);
 	}
+	
+	/* (non-Javadoc)
+     * @see org.drools.guvnor.client.rpc.RepositoryService#getAssetLockerUserName(java.lang.String)
+     */
+    public String getAssetLockerUserName(String uuid) {
+        return getService().getAssetLockerUserName( uuid );
+    }
 
+    /* (non-Javadoc)
+     * @see org.drools.guvnor.client.rpc.RepositoryService#lockAsset(java.lang.String)
+     */
+    public void lockAsset(String uuid) {
+        getService().lockAsset( uuid );
+    }
 
+    /* (non-Javadoc)
+     * @see org.drools.guvnor.client.rpc.RepositoryService#unLockAsset(java.lang.String)
+     */
+    public void unLockAsset(String uuid) {
+        getService().unLockAsset( uuid );
+    }
 
 
 
 
+
 }

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2008-10-02 09:55:18 UTC (rev 23255)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2008-10-02 10:01:50 UTC (rev 23256)
@@ -89,6 +89,7 @@
 import org.drools.guvnor.server.security.PackageUUIDType;
 import org.drools.guvnor.server.security.RoleTypes;
 import org.drools.guvnor.server.util.AssetFormatHelper;
+import org.drools.guvnor.server.util.AssetLockManager;
 import org.drools.guvnor.server.util.BRMSSuggestionCompletionLoader;
 import org.drools.guvnor.server.util.LoggingHelper;
 import org.drools.guvnor.server.util.MetaDataMapper;
@@ -2013,7 +2014,49 @@
 		pm.removeUserPermissions(userName);
 		repository.save();
 	}
+	 /* (non-Javadoc)
+     * @see org.drools.guvnor.client.rpc.RepositoryService#getAssetLockerUserName(java.lang.String)
+     */
+    public String getAssetLockerUserName(String uuid) {
+        AssetLockManager alm = AssetLockManager.instance();
 
+        String userName = alm.getAssetLockerUserName( uuid );
+        
+        log.info( "Asset locked by [" + userName + "]" );
+        
+        return userName;
+    }
 
+    /* (non-Javadoc)
+     * @see org.drools.guvnor.client.rpc.RepositoryService#lockAsset(java.lang.String)
+     */
+    public void lockAsset(String uuid) {
+        AssetLockManager alm = AssetLockManager.instance();
 
+        String userName;
+        if ( Contexts.isApplicationContextActive() ) {
+            userName = Identity.instance().getUsername();
+        } else {
+            userName = "anonymous";
+        }
+
+        log.info( "Locking asset uuid=" + uuid + " for user [" + userName + "]" );
+        
+        alm.lockAsset( uuid,
+                       userName );
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.guvnor.client.rpc.RepositoryService#unLockAsset(java.lang.String)
+     */
+    public void unLockAsset(String uuid) {
+        AssetLockManager alm = AssetLockManager.instance();
+
+        log.info( "Unlocking asset [" + uuid + "]" );
+        
+        alm.unLockAsset( uuid );
+    }
+
+
+
 }

Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/AssetLockManager.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/AssetLockManager.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/AssetLockManager.java	2008-10-02 10:01:50 UTC (rev 23256)
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.guvnor.server.util;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.jboss.seam.Component;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Startup;
+
+/**
+ * Manages the locks for assets.
+ * 
+ * @author Toni Rikkola
+ *
+ */
+ at Scope(ScopeType.APPLICATION)
+ at Startup
+ at Name("assetLockManager")
+public class AssetLockManager {
+
+    private static final long LOCK_EXPIRATION_TIME = 1200000;
+
+    // UUID, Lock
+    private Map<String, Lock> map                  = new HashMap<String, Lock>();
+
+    class Lock {
+        String userName;
+        long   timeStamp;
+
+        Lock(String userName) {
+            this.userName = userName;
+            timeStamp = System.currentTimeMillis();
+        }
+    }
+    
+    public static AssetLockManager instance()
+    {
+        return (AssetLockManager) Component.getInstance("assetLockManager");
+    }
+    
+    public boolean isAssetLocked(String uuid) {
+        if ( map.keySet().contains( uuid ) ) {
+            long timeStamp = map.get( uuid ).timeStamp;
+            long currentTime = System.currentTimeMillis();
+
+            // Check if time expiration time has passed
+            if ( (currentTime - timeStamp) > LOCK_EXPIRATION_TIME ) {
+                // Remove the lock
+                map.remove( uuid );
+
+                return false;
+
+            } else {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Return the lockers user name.
+     * 
+     * @param uuid Id of the asset.
+     * @return Lockers user name or null  if there is no lock with this uuid.
+     */
+    public String getAssetLockerUserName(String uuid) {
+        if ( isAssetLocked( uuid ) ) {
+            return map.get( uuid ).userName;
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Locks the asset, if a lock already exists this over writes it.
+     * 
+     * @param uuid Id of the asset.
+     * @param userName User name of the user that is locking the asset.
+     */
+    public void lockAsset(String uuid,
+                          String userName) {
+        map.put( uuid,
+                 new Lock( userName ) );
+    }
+
+    public void unLockAsset(String uuid) {
+        map.remove( uuid );
+    }
+}

Added: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/util/AssetLockManagerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/util/AssetLockManagerTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/util/AssetLockManagerTest.java	2008-10-02 10:01:50 UTC (rev 23256)
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.guvnor.server.util;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Toni Rikkola
+ *
+ */
+public class AssetLockManagerTest extends TestCase {
+
+    public void testLockAndUnlock() throws Exception {
+        AssetLockManager alm = new AssetLockManager();
+
+        final String userName1 = "user1";
+
+        final String uuid = "uuid";
+
+        alm.lockAsset( uuid,
+                       userName1 );
+
+        assertTrue( alm.isAssetLocked( uuid ) );
+
+        assertEquals( alm.getAssetLockerUserName( uuid ),
+                      userName1 );
+
+        alm.unLockAsset( uuid );
+
+        assertFalse( alm.isAssetLocked( uuid ) );
+
+        assertNull( alm.getAssetLockerUserName( uuid ) );
+
+    }
+
+    public void testLockAndOverWritelock() throws Exception {
+        AssetLockManager alm = new AssetLockManager();
+
+        final String userName1 = "user1";
+        final String userName2 = "user2";
+
+        final String uuid = "uuid";
+
+        alm.lockAsset( uuid,
+                       userName1 );
+
+        assertTrue( alm.isAssetLocked( uuid ) );
+
+        assertEquals( alm.getAssetLockerUserName( uuid ),
+                      userName1 );
+
+        alm.lockAsset( uuid,
+                       userName2 );
+
+        assertTrue( alm.isAssetLocked( uuid ) );
+
+        assertEquals( alm.getAssetLockerUserName( uuid ),
+                      userName2 );
+
+    }
+}




More information about the jboss-svn-commits mailing list