You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sa...@apache.org on 2012/03/27 16:14:28 UTC

svn commit: r1305844 - /incubator/airavata/trunk/modules/commons/common-registry-api/src/main/java/org/apache/airavata/common/registry/api/impl/JCRRegistry.java

Author: samindaw
Date: Tue Mar 27 14:14:27 2012
New Revision: 1305844

URL: http://svn.apache.org/viewvc?rev=1305844&view=rev
Log:
fixing xbaya multiple refresh for single action issue

Modified:
    incubator/airavata/trunk/modules/commons/common-registry-api/src/main/java/org/apache/airavata/common/registry/api/impl/JCRRegistry.java

Modified: incubator/airavata/trunk/modules/commons/common-registry-api/src/main/java/org/apache/airavata/common/registry/api/impl/JCRRegistry.java
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/commons/common-registry-api/src/main/java/org/apache/airavata/common/registry/api/impl/JCRRegistry.java?rev=1305844&r1=1305843&r2=1305844&view=diff
==============================================================================
--- incubator/airavata/trunk/modules/commons/common-registry-api/src/main/java/org/apache/airavata/common/registry/api/impl/JCRRegistry.java (original)
+++ incubator/airavata/trunk/modules/commons/common-registry-api/src/main/java/org/apache/airavata/common/registry/api/impl/JCRRegistry.java Tue Mar 27 14:14:27 2012
@@ -76,6 +76,8 @@ public class JCRRegistry extends Observa
     private Map<Node,List<Node>> sessionNodeChildren;
     private Map<Session,Integer> currentSessionUseCount=new HashMap<Session, Integer>();
     private boolean threadRun = true;
+    private Boolean registryUpdated=false;
+    
     
     public JCRRegistry(URI repositoryURI, String className, String user, String pass, Map<String, String> map)
             throws RepositoryException {
@@ -93,41 +95,36 @@ public class JCRRegistry extends Observa
             setPassword(pass);
             credentials = new SimpleCredentials(getUsername(), new String(pass).toCharArray());
             definiteSessionTimeout();
-            workspaceChangeEventListener=new EventListener() {
-				
-				public void onEvent(EventIterator events) {
-					for(;events.hasNext();){
-						Event event=events.nextEvent();
-						boolean isPropertyChange = (event.getType()&(Event.PROPERTY_CHANGED|Event.PROPERTY_ADDED|Event.PROPERTY_REMOVED))>0;
-						try {
-							String path = event.getPath();
-							synchronized (sessionSynchronousObject) {
+            setupRegistryModifyHandler();
+        } catch (ClassNotFoundException e) {
+            log.error("Error class path settting", e);
+        } catch (RepositoryException e) {
+            log.error("Error connecting Remote Registry instance", e);
+            throw e;
+        } catch (Exception e) {
+            log.error("Error init", e);
+        }
+    }
+
+	private void setupRegistryModifyHandler() {
+		workspaceChangeEventListener=new EventListener() {
+			
+			public void onEvent(EventIterator events) {
+				for(;events.hasNext();){
+					Event event=events.nextEvent();
+					boolean isPropertyChange = (event.getType()&(Event.PROPERTY_CHANGED|Event.PROPERTY_ADDED|Event.PROPERTY_REMOVED))>0;
+					try {
+						String path = event.getPath();
+						synchronized (sessionSynchronousObject) {
 //								System.out.println("something happened: " + event.getType() + " " + path);
-								List<Node> nodesToRemove=new ArrayList<Node>();
-								Set<Node> nodeIterator = getSessionNodes().keySet();
-								for (Node node : nodeIterator) {
-									if (node == null) {
-										if (path.equals("/")) {
-											nodesToRemove.add(node);
-										}
-									} else {
-										if (node.getSession().isLive()) {
-											if (isPropertyChange){
-												if (node.getPath().equals(path)) {
-													nodesToRemove.add(node);
-												}
-											}else if (node.getPath().startsWith(path) || path.startsWith(node.getPath())) {
-												nodesToRemove.add(node);
-											}
-										}
+							List<Node> nodesToRemove=new ArrayList<Node>();
+							Set<Node> nodeIterator = getSessionNodes().keySet();
+							for (Node node : nodeIterator) {
+								if (node == null) {
+									if (path.equals("/")) {
+										nodesToRemove.add(node);
 									}
-								}
-								for(Node node:nodesToRemove){
-									getSessionNodes().remove(node);
-								}
-								nodeIterator = getSessionNodeChildren().keySet();
-								nodesToRemove.clear();
-								for (Node node : nodeIterator) {
+								} else {
 									if (node.getSession().isLive()) {
 										if (isPropertyChange){
 											if (node.getPath().equals(path)) {
@@ -138,27 +135,57 @@ public class JCRRegistry extends Observa
 										}
 									}
 								}
-								for(Node node:nodesToRemove){
-									getSessionNodeChildren().remove(node);
+							}
+							for(Node node:nodesToRemove){
+								getSessionNodes().remove(node);
+							}
+							nodeIterator = getSessionNodeChildren().keySet();
+							nodesToRemove.clear();
+							for (Node node : nodeIterator) {
+								if (node.getSession().isLive()) {
+									if (isPropertyChange){
+										if (node.getPath().equals(path)) {
+											nodesToRemove.add(node);
+										}
+									}else if (node.getPath().startsWith(path) || path.startsWith(node.getPath())) {
+										nodesToRemove.add(node);
+									}
 								}
 							}
-							triggerObservers(this);
-						} catch (RepositoryException e) {
-							e.printStackTrace();
+							for(Node node:nodesToRemove){
+								getSessionNodeChildren().remove(node);
+							}
 						}
+						triggerObservers(this);
+					} catch (RepositoryException e) {
+						e.printStackTrace();
 					}
-					
 				}
-			};
-        } catch (ClassNotFoundException e) {
-            log.error("Error class path settting", e);
-        } catch (RepositoryException e) {
-            log.error("Error connecting Remote Registry instance", e);
-            throw e;
-        } catch (Exception e) {
-            log.error("Error init", e);
-        }
-    }
+				
+			}
+		};
+		new Thread(){
+    		@Override
+    		public void run() {
+    			int sleep_time=1000;
+    			while(threadRun){
+    				if (isRegistryUpdated()){
+    					setRegistryUpdated(false);
+    	    	        setChanged();
+    	    	        notifyObservers(JCRRegistry.this);
+    	    	        sleep_time=3000;
+    				}else{
+    					sleep_time=1000;
+    				}
+    				try {
+						Thread.sleep(sleep_time);
+					} catch (InterruptedException e) {
+						e.printStackTrace();
+					}
+    			}
+    		}
+    	}.start();
+	}
     
     private void definiteSessionTimeout(){
     	Thread m=new Thread(new Runnable() {
@@ -386,8 +413,7 @@ public class JCRRegistry extends Observa
     }
 
     protected void triggerObservers(Object o) {
-        setChanged();
-        notifyObservers(o);
+    	setRegistryUpdated(true);
     }
 
     public String getPassword() {
@@ -455,4 +481,19 @@ public class JCRRegistry extends Observa
     public void closeConnection(){
         setThreadRun(false);
     }
+
+	public boolean isRegistryUpdated() {
+		boolean result;
+		synchronized (this.registryUpdated) {
+			result = registryUpdated;	
+		}
+		return result;
+	}
+
+	public void setRegistryUpdated(Boolean registryUpdated) {
+		synchronized (this.registryUpdated) {
+			this.registryUpdated = registryUpdated;	
+		}
+		
+	}
 }