You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by st...@apache.org on 2014/05/16 13:33:09 UTC

svn commit: r1595162 - in /sling/trunk/tooling/ide: api/src/org/apache/sling/ide/transport/ eclipse-core/src/org/apache/sling/ide/eclipse/core/ eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ impl-resource/src/org/apache/sling/ide/impl/res...

Author: stefanegli
Date: Fri May 16 11:33:09 2014
New Revision: 1595162

URL: http://svn.apache.org/r1595162
Log:
SLING-3572 : Making RepositoryFactory stateful (adding a get/stop), since Repository is now stateful due to NodeTypeRegistry initialization

Modified:
    sling/trunk/tooling/ide/api/src/org/apache/sling/ide/transport/RepositoryFactory.java
    sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ServerUtil.java
    sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java
    sling/trunk/tooling/ide/impl-resource/src/org/apache/sling/ide/impl/resource/transport/RepositoryFactoryImpl.java
    sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepositoryFactory.java

Modified: sling/trunk/tooling/ide/api/src/org/apache/sling/ide/transport/RepositoryFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/api/src/org/apache/sling/ide/transport/RepositoryFactory.java?rev=1595162&r1=1595161&r2=1595162&view=diff
==============================================================================
--- sling/trunk/tooling/ide/api/src/org/apache/sling/ide/transport/RepositoryFactory.java (original)
+++ sling/trunk/tooling/ide/api/src/org/apache/sling/ide/transport/RepositoryFactory.java Fri May 16 11:33:09 2014
@@ -37,5 +37,7 @@ public interface RepositoryFactory {
      * @return
      * @throws RepositoryException
      */
-    Repository newRepository(RepositoryInfo repositoryInfo) throws RepositoryException;
+    Repository getRepository(RepositoryInfo repositoryInfo) throws RepositoryException;
+
+    void stopRepository(RepositoryInfo repositoryInfo);
 }

Modified: sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ServerUtil.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ServerUtil.java?rev=1595162&r1=1595161&r2=1595162&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ServerUtil.java (original)
+++ sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ServerUtil.java Fri May 16 11:33:09 2014
@@ -33,12 +33,10 @@ import org.eclipse.wst.server.core.IServ
 public abstract class ServerUtil {
 
     public static Repository getRepository(IServer server, IProgressMonitor monitor) throws CoreException {
-
-
         RepositoryFactory repository = Activator.getDefault().getRepositoryFactory();
         try {
             RepositoryInfo repositoryInfo = getRepositoryInfo(server, monitor);
-            return repository.newRepository(repositoryInfo);
+            return repository.getRepository(repositoryInfo);
         } catch (URISyntaxException e) {
             throw new CoreException(new Status(Status.ERROR, Activator.PLUGIN_ID, e.getMessage(), e));
         } catch (RuntimeException e) {
@@ -48,6 +46,19 @@ public abstract class ServerUtil {
         }
     }
 
+    public static void stopRepository(IServer server, IProgressMonitor monitor) throws CoreException {
+        RepositoryFactory repository = Activator.getDefault().getRepositoryFactory();
+        try {
+            RepositoryInfo repositoryInfo = getRepositoryInfo(server, monitor);
+            repository.stopRepository(repositoryInfo);
+        } catch (URISyntaxException e) {
+            throw new CoreException(new Status(Status.ERROR, Activator.PLUGIN_ID, e.getMessage(), e));
+        } catch (RuntimeException e) {
+            throw new CoreException(new Status(Status.ERROR, Activator.PLUGIN_ID, e.getMessage(), e));
+        }
+    }
+    
+    
     public static RepositoryInfo getRepositoryInfo(IServer server, IProgressMonitor monitor) throws URISyntaxException {
 
         ISlingLaunchpadServer launchpadServer = (ISlingLaunchpadServer) server.loadAdapter(SlingLaunchpadServer.class,

Modified: sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java?rev=1595162&r1=1595161&r2=1595162&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java (original)
+++ sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java Fri May 16 11:33:09 2014
@@ -41,6 +41,7 @@ import org.eclipse.core.runtime.CoreExce
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.debug.core.ILaunch;
 import org.eclipse.debug.core.ILaunchManager;
@@ -64,6 +65,11 @@ public class SlingLaunchpadBehaviour ext
     		debuggerConnection.stop(force);
     	}
         setServerState(IServer.STATE_STOPPED);
+        try {
+            ServerUtil.stopRepository(getServer(), new NullProgressMonitor());
+        } catch (CoreException e) {
+            Activator.getDefault().getPluginLogger().warn("Failed to stop repository", e);
+        }
     }
 
     public void start(IProgressMonitor monitor) throws CoreException {

Modified: sling/trunk/tooling/ide/impl-resource/src/org/apache/sling/ide/impl/resource/transport/RepositoryFactoryImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/impl-resource/src/org/apache/sling/ide/impl/resource/transport/RepositoryFactoryImpl.java?rev=1595162&r1=1595161&r2=1595162&view=diff
==============================================================================
--- sling/trunk/tooling/ide/impl-resource/src/org/apache/sling/ide/impl/resource/transport/RepositoryFactoryImpl.java (original)
+++ sling/trunk/tooling/ide/impl-resource/src/org/apache/sling/ide/impl/resource/transport/RepositoryFactoryImpl.java Fri May 16 11:33:09 2014
@@ -31,9 +31,15 @@ public class RepositoryFactoryImpl imple
     private EventAdmin eventAdmin;
 
     @Override
-    public Repository newRepository(RepositoryInfo repositoryInfo) throws RepositoryException {
+    public Repository getRepository(RepositoryInfo repositoryInfo) throws RepositoryException {
+        //TODO: currently not doing repository-caching
         return new RepositoryImpl(repositoryInfo, eventAdmin);
     }
+    
+    @Override
+    public void stopRepository(RepositoryInfo repositoryInfo) {
+        //TODO: not yet implemented
+    }
 
     protected void bindEventAdmin(EventAdmin eventAdmin) {
         this.eventAdmin = eventAdmin;

Modified: sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepositoryFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepositoryFactory.java?rev=1595162&r1=1595161&r2=1595162&view=diff
==============================================================================
--- sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepositoryFactory.java (original)
+++ sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepositoryFactory.java Fri May 16 11:33:09 2014
@@ -16,6 +16,9 @@
  */
 package org.apache.sling.ide.impl.vlt;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.apache.sling.ide.transport.Repository;
 import org.apache.sling.ide.transport.RepositoryException;
 import org.apache.sling.ide.transport.RepositoryFactory;
@@ -30,14 +33,41 @@ public class VltRepositoryFactory implem
 
     private EventAdmin eventAdmin;
 
+    private Map<String,VltRepository> repositoryMap = new HashMap<String,VltRepository>();
+    
     @Override
-    public Repository newRepository(RepositoryInfo repositoryInfo) throws RepositoryException {
-
-        VltRepository repo = new VltRepository(repositoryInfo, eventAdmin);
+    public Repository getRepository(RepositoryInfo repositoryInfo) throws RepositoryException {
 
-        repo.init();
+        final String key = getKey(repositoryInfo);
+        
+        synchronized(repositoryMap) {
+            VltRepository repo = repositoryMap.get(key);
+            if (repo!=null && !repo.isMarkedStopped()) {
+                return repo;
+            }
+            
+            repo = new VltRepository(repositoryInfo, eventAdmin);
+            repo.init();
+            
+            repositoryMap.put(key, repo);
+            return repo;
+        }
+    }
+    
+    @Override
+    public void stopRepository(RepositoryInfo repositoryInfo) {
+        final String key = getKey(repositoryInfo);
+        synchronized(repositoryMap) {
+            VltRepository r = repositoryMap.get(key);
+            // marking the repository as stopped allows us to keep using it
+            // (eg for node type registry lookups) although the server is stopped
+            //TODO we might come up with a proper online/offline handling here
+            r.markStopped();
+        }
+    }
 
-        return repo;
+    private String getKey(RepositoryInfo repositoryInfo) {
+        return repositoryInfo.getUsername()+":"+repositoryInfo.getPassword()+"@"+repositoryInfo.getUrl();
     }
 
     protected void bindEventAdmin(EventAdmin eventAdmin) {