[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