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) {