You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2018/04/05 11:33:12 UTC
[sling-ide-tooling] 01/01: SLING-5648 - Make Non-Eclipse Module
regular Maven Packages
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to branch feature/intellij
in repository https://gitbox.apache.org/repos/asf/sling-ide-tooling.git
commit fa57700474bbe5bf7c0d3f19b7cd388a5ed82c51
Author: Robert Munteanu <ro...@apache.org>
AuthorDate: Tue Apr 3 17:23:23 2018 +0300
SLING-5648 - Make Non-Eclipse Module regular Maven Packages
Allow impl-vlt to contribute a PluginLogger without explicitly relying on eclipse-core.
---
eclipse/eclipse-core/META-INF/MANIFEST.MF | 1 +
.../eclipse/core/debug/PluginLoggerRegistrar.java | 92 ++++++++++++++++++++--
.../sling/ide/eclipse/core/debug/impl/Tracer.java | 15 ++--
.../sling/ide/eclipse/core/internal/Activator.java | 16 ++--
eclipse/eclipse-m2e-ui/META-INF/MANIFEST.MF | 1 +
.../sling/ide/eclipse/m2e/internal/Activator.java | 2 +-
eclipse/eclipse-sightly-core/META-INF/MANIFEST.MF | 1 +
.../ide/eclipse/sightly/internal/Activator.java | 3 +-
eclipse/eclipse-ui/META-INF/MANIFEST.MF | 1 +
.../sling/ide/eclipse/ui/internal/Activator.java | 2 +-
shared/modules/impl-vlt/bnd.bnd | 1 +
.../sling/ide/impl/vlt/VltRepositoryFactory.java | 4 +-
.../vlt/serialization/VltSerializationManager.java | 1 -
13 files changed, 113 insertions(+), 27 deletions(-)
diff --git a/eclipse/eclipse-core/META-INF/MANIFEST.MF b/eclipse/eclipse-core/META-INF/MANIFEST.MF
index d0c633c..8f1103a 100644
--- a/eclipse/eclipse-core/META-INF/MANIFEST.MF
+++ b/eclipse/eclipse-core/META-INF/MANIFEST.MF
@@ -57,3 +57,4 @@ Export-Package: org.apache.sling.ide.eclipse.core,
org.apache.sling.ide.eclipse.core.progress,
org.apache.sling.ide.eclipse.internal.validation;x-friends:="org.apache.sling.ide.eclipse-test"
Service-Component: OSGI-INF/TraceCommandExecutionEventsHandler.xml
+SlingIDE-PluginLoggerEnabled: true
diff --git a/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/debug/PluginLoggerRegistrar.java b/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/debug/PluginLoggerRegistrar.java
index 969a756..d76693a 100644
--- a/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/debug/PluginLoggerRegistrar.java
+++ b/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/debug/PluginLoggerRegistrar.java
@@ -18,38 +18,114 @@ package org.apache.sling.ide.eclipse.core.debug;
import java.util.Dictionary;
import java.util.Hashtable;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
import org.apache.sling.ide.eclipse.core.debug.impl.Tracer;
import org.apache.sling.ide.log.Logger;
-import org.eclipse.core.runtime.Plugin;
import org.eclipse.osgi.service.debug.DebugOptions;
import org.eclipse.osgi.service.debug.DebugOptionsListener;
+import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleEvent;
+import org.osgi.framework.BundleListener;
import org.osgi.framework.ServiceRegistration;
/**
* The <tt>PluginLoggerRegistrar</tt> registers {@link Logger} implementations for use for specific plugins
+ *
+ * <p>This implementation acts as an extender, looking for the header {@value #HEADER_NAME_LOGGER_ENABLED} in
+ * the bundle's manifest. If presented and with a value of <tt>true</tt>, a <tt>Logger</tt> instance is registered
+ * for that bundle.</p>
+ *
+ * <p>In turn, <tt>ServiceRegistration</tt> objects can be accessed using the {@link #getServiceRegistration(Bundle)}.
+ * This method and the static {@link #getInstance()}} method are present to make it easier to consume in Eclipse
+ * plug-ins, where working with declarative services is more complicated.</p>
*
*/
-public class PluginLoggerRegistrar {
+public class PluginLoggerRegistrar implements BundleListener {
+
+ private static final String HEADER_NAME_LOGGER_ENABLED = "SlingIDE-PluginLoggerEnabled";
+
+ private static final PluginLoggerRegistrar INSTANCE = new PluginLoggerRegistrar();
+
+ public static PluginLoggerRegistrar getInstance() {
+ return INSTANCE;
+ }
+
+ private final ConcurrentMap<Long, ServiceRegistration<Logger>> registrations = new ConcurrentHashMap<>();
+
+ private PluginLoggerRegistrar() {
+
+ }
+
+ public void init(Bundle[] bundles) {
+ for ( Bundle bundle : bundles )
+ if ( bundle.getState() == Bundle.ACTIVE || bundle.getState() == Bundle.STARTING)
+ registerIfEnabled(bundle);
+ }
+
+ public void shutdown() {
+ for ( ServiceRegistration<Logger> reg : registrations.values() )
+ reg.unregister();
+ }
+
+ /**
+ * Gets the service registartion of a <tt>Logger</tt> for the specified bundle
+ *
+ * <p>The client must <b>not</b> call <tt>unregister</tt> on the returned instance, as
+ * it is owned by the <tt>PluginLoggerRegistrar</tt>.</p>
+ *
+ * @param bundle the bundle to get the service registartion for for
+ * @return the service registration, or <code>null</code> if none was found for this bundle
+ */
+ public ServiceRegistration<Logger> getServiceRegistration(Bundle bundle) {
+ return registrations.get(bundle.getBundleId());
+ }
+
+ @Override
+ public void bundleChanged(BundleEvent evt) {
+ switch ( evt.getType() ) {
+ case BundleEvent.STARTED:
+ registerIfEnabled(evt.getBundle());
+ break;
+
+ case BundleEvent.STOPPING:
+ unregister(evt.getBundle());
+ break;
+ }
+ }
+ private void unregister(Bundle bundle) {
+ ServiceRegistration<Logger> reg = registrations.remove(bundle.getBundleId());
+ if ( reg != null )
+ reg.unregister();
+
+ }
+
+ private void registerIfEnabled(final Bundle bundle) {
+ if ( Boolean.parseBoolean(bundle.getHeaders().get(HEADER_NAME_LOGGER_ENABLED)) )
+ registrations.put(bundle.getBundleId(), register(bundle));
+ }
+
/**
- * Registers a new tracer for the specified plugin
+ * Registers a new tracer for the specified bundle
*
- * @param plugin the plugin to register for
+ * @param bundle the bundle to register for
* @return the service registration
*/
- public static ServiceRegistration<Logger> register(Plugin plugin) {
+ private ServiceRegistration<Logger> register(Bundle bundle) {
Dictionary<String, Object> props = new Hashtable<>();
- props.put(DebugOptions.LISTENER_SYMBOLICNAME, plugin.getBundle().getSymbolicName());
- BundleContext ctx = plugin.getBundle().getBundleContext();
+ props.put(DebugOptions.LISTENER_SYMBOLICNAME, bundle.getSymbolicName());
+ BundleContext ctx = bundle.getBundleContext();
// safe to downcast since we are registering the Tracer which implements Logger
@SuppressWarnings("unchecked")
ServiceRegistration<Logger> serviceRegistration = (ServiceRegistration<Logger>) ctx.registerService(new String[] { DebugOptionsListener.class.getName(), Logger.class.getName() },
- new Tracer(plugin), props);
+ new Tracer(bundle), props);
return serviceRegistration;
}
+
}
diff --git a/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/debug/impl/Tracer.java b/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/debug/impl/Tracer.java
index d5abe22..cea6f88 100644
--- a/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/debug/impl/Tracer.java
+++ b/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/debug/impl/Tracer.java
@@ -20,12 +20,13 @@ import java.util.Date;
import org.apache.sling.ide.log.Logger;
import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.osgi.service.debug.DebugOptions;
import org.eclipse.osgi.service.debug.DebugOptionsListener;
import org.eclipse.osgi.service.debug.DebugTrace;
import org.eclipse.osgi.util.NLS;
+import org.osgi.framework.Bundle;
/**
* The <tt>Tracer</tt> is the default implementation of the <tt>Logger</tt>
@@ -34,20 +35,20 @@ public class Tracer implements DebugOptionsListener, Logger {
private static final long PERF_IGNORE_THRESHOLD = 50;
- private final Plugin plugin;
+ private final Bundle bundle;
private boolean debugEnabled;
private boolean consoleEnabled;
private boolean performanceEnabled;
private DebugTrace trace;
- public Tracer(Plugin plugin) {
- this.plugin = plugin;
+ public Tracer(Bundle bundle) {
+ this.bundle = bundle;
}
@Override
public void optionsChanged(DebugOptions options) {
- String pluginId = plugin.getBundle().getSymbolicName();
+ String pluginId = bundle.getSymbolicName();
debugEnabled = options.getBooleanOption(pluginId + "/debug", false);
consoleEnabled = options.getBooleanOption(pluginId + "/debug/console", false) && debugEnabled;
@@ -73,7 +74,7 @@ public class Tracer implements DebugOptionsListener, Logger {
private void writeToConsole(String message, Throwable t) {
System.out.println("[" + Thread.currentThread().getName() + "] " + new Date() + " "
- + plugin.getBundle().getSymbolicName() + " : " + message);
+ + bundle.getSymbolicName() + " : " + message);
if (t != null)
t.printStackTrace(System.out);
}
@@ -130,6 +131,6 @@ public class Tracer implements DebugOptionsListener, Logger {
}
private void logInternal(int statusCode, String message, Throwable cause) {
- plugin.getLog().log(new Status(statusCode, plugin.getBundle().getSymbolicName(), message, cause));
+ Platform.getLog(bundle).log(new Status(statusCode, bundle.getSymbolicName(), message, cause));
}
}
diff --git a/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/Activator.java b/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/Activator.java
index f3671d5..c6d58c3 100644
--- a/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/Activator.java
+++ b/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/Activator.java
@@ -32,8 +32,6 @@ import org.apache.sling.ide.transport.BatcherFactory;
import org.apache.sling.ide.transport.CommandExecutionProperties;
import org.apache.sling.ide.transport.RepositoryFactory;
import org.eclipse.core.runtime.Plugin;
-import org.eclipse.core.runtime.preferences.InstanceScope;
-import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.event.Event;
@@ -73,8 +71,13 @@ public class Activator extends Plugin {
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
+
+ PluginLoggerRegistrar loggerRegistrar = PluginLoggerRegistrar.getInstance();
+
+ loggerRegistrar.init(context.getBundles());
+ context.addBundleListener(loggerRegistrar);
- tracerRegistration = PluginLoggerRegistrar.register(this);
+ tracerRegistration = loggerRegistrar.getServiceRegistration(context.getBundle());
eventAdmin = new ServiceTracker<>(context, EventAdmin.class, null);
eventAdmin.open();
@@ -111,8 +114,11 @@ public class Activator extends Plugin {
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
-
- tracerRegistration.unregister();
+
+ PluginLoggerRegistrar loggerRegistrar = PluginLoggerRegistrar.getInstance();
+
+ context.removeBundleListener(loggerRegistrar);
+ loggerRegistrar.shutdown();
repositoryFactory.close();
serializationManager.close();
diff --git a/eclipse/eclipse-m2e-ui/META-INF/MANIFEST.MF b/eclipse/eclipse-m2e-ui/META-INF/MANIFEST.MF
index d12fb8c..c06fad4 100644
--- a/eclipse/eclipse-m2e-ui/META-INF/MANIFEST.MF
+++ b/eclipse/eclipse-m2e-ui/META-INF/MANIFEST.MF
@@ -68,3 +68,4 @@ Import-Package: org.apache.commons.httpclient;version="3.1.0",
Bundle-ActivationPolicy: lazy
Export-Package: org.apache.sling.ide.eclipse.m2e,org.apache.sling.ide.
eclipse.ui.wizards.np
+SlingIDE-PluginLoggerEnabled: true
diff --git a/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/Activator.java b/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/Activator.java
index 10ef667..5720e10 100644
--- a/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/Activator.java
+++ b/eclipse/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/Activator.java
@@ -62,7 +62,7 @@ public class Activator extends Plugin {
null);
osgiClientFactory.open();
- tracerRegistration = PluginLoggerRegistrar.register(this);
+ tracerRegistration = PluginLoggerRegistrar.getInstance().getServiceRegistration(context.getBundle());
tracer = new ServiceTracker<>(context, tracerRegistration.getReference(), null);
tracer.open();
diff --git a/eclipse/eclipse-sightly-core/META-INF/MANIFEST.MF b/eclipse/eclipse-sightly-core/META-INF/MANIFEST.MF
index 337588f..c556dfc 100644
--- a/eclipse/eclipse-sightly-core/META-INF/MANIFEST.MF
+++ b/eclipse/eclipse-sightly-core/META-INF/MANIFEST.MF
@@ -37,3 +37,4 @@ Export-Package: org.apache.sling.ide.eclipse.sightly,
org.apache.sling.ide.eclipse.sightly.model,
org.apache.sling.ide.eclipse.sightly.validation,
org.apache.sling.ide.eclipse.sightly.internal;x-friends:="org.apache.sling.ide.eclipse-test"
+SlingIDE-PluginLoggerEnabled: true
diff --git a/eclipse/eclipse-sightly-core/src/org/apache/sling/ide/eclipse/sightly/internal/Activator.java b/eclipse/eclipse-sightly-core/src/org/apache/sling/ide/eclipse/sightly/internal/Activator.java
index 554c372..31cadd0 100644
--- a/eclipse/eclipse-sightly-core/src/org/apache/sling/ide/eclipse/sightly/internal/Activator.java
+++ b/eclipse/eclipse-sightly-core/src/org/apache/sling/ide/eclipse/sightly/internal/Activator.java
@@ -39,7 +39,7 @@ public class Activator extends Plugin {
public void start(BundleContext context) throws Exception {
- loggerRegistration = PluginLoggerRegistrar.register(this);
+ loggerRegistration = PluginLoggerRegistrar.getInstance().getServiceRegistration(context.getBundle());
loggerTracker = new ServiceTracker<>(context, loggerRegistration.getReference(), null);
loggerTracker.open();
@@ -54,7 +54,6 @@ public class Activator extends Plugin {
public void stop(BundleContext context) throws Exception {
plugin = null;
- loggerRegistration.unregister();
super.stop(context);
}
diff --git a/eclipse/eclipse-ui/META-INF/MANIFEST.MF b/eclipse/eclipse-ui/META-INF/MANIFEST.MF
index 019e27e..fb4de9b 100644
--- a/eclipse/eclipse-ui/META-INF/MANIFEST.MF
+++ b/eclipse/eclipse-ui/META-INF/MANIFEST.MF
@@ -101,3 +101,4 @@ Export-Package: org.apache.sling.ide.eclipse.ui,
org.apache.sling.ide.eclipse.ui.propertyPages,
org.apache.sling.ide.eclipse.ui.views,
org.apache.sling.ide.eclipse.ui.wizards
+SlingIDE-PluginLoggerEnabled: true
diff --git a/eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/Activator.java b/eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/Activator.java
index 27141be..28a3810 100644
--- a/eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/Activator.java
+++ b/eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/Activator.java
@@ -59,7 +59,7 @@ public class Activator extends AbstractUIPlugin {
public void start(BundleContext context) throws Exception {
super.start(context);
- tracerRegistration = PluginLoggerRegistrar.register(this);
+ tracerRegistration = PluginLoggerRegistrar.getInstance().getServiceRegistration(context.getBundle());
serializationManager = new ServiceTracker<>(context, SerializationManager.class, null);
serializationManager.open();
diff --git a/shared/modules/impl-vlt/bnd.bnd b/shared/modules/impl-vlt/bnd.bnd
index 9906412..398eae2 100644
--- a/shared/modules/impl-vlt/bnd.bnd
+++ b/shared/modules/impl-vlt/bnd.bnd
@@ -2,3 +2,4 @@ Bundle-ActivationPolicy: lazy
-exportcontents: ${packages;VERSIONED}
-includeresource: plugin.xml, .options
Bundle-SymbolicName: org.apache.sling.ide.impl-vlt;singleton:=true
+SlingIDE-PluginLoggerEnabled: true
\ No newline at end of file
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltRepositoryFactory.java b/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltRepositoryFactory.java
index fab8329..5b3dc00 100644
--- a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltRepositoryFactory.java
+++ b/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/VltRepositoryFactory.java
@@ -38,9 +38,9 @@ public class VltRepositoryFactory implements RepositoryFactory {
@Reference
private EventAdmin eventAdmin;
- @Reference
+ @Reference(target = "(listener.symbolic.name=org.apache.sling.ide.impl-vlt)")
private Logger logger;
-
+
private Map<String,VltRepository> repositoryMap = new HashMap<>();
@Override
diff --git a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java b/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java
index 42909a6..a68475f 100644
--- a/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java
+++ b/shared/modules/impl-vlt/src/main/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java
@@ -58,7 +58,6 @@ public class VltSerializationManager implements SerializationManager {
static final String EXTENSION_XML = ".xml";
- @Reference
private VltSerializationDataBuilder builder;
@Reference
--
To stop receiving notification emails like this one, please contact
rombert@apache.org.