Repository: karaf
Updated Branches:
  refs/heads/master 9ec4442c6 -> e55fd0a05


http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/internal/Activator.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/internal/Activator.java
 
b/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/internal/Activator.java
new file mode 100644
index 0000000..c54eccb
--- /dev/null
+++ 
b/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/internal/Activator.java
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.karaf.diagnostic.internal;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+import org.apache.karaf.diagnostic.core.DumpProvider;
+import org.apache.karaf.diagnostic.management.internal.DiagnosticDumpMBeanImpl;
+import org.apache.karaf.diagnostic.common.FeaturesDumpProvider;
+import org.apache.karaf.diagnostic.common.LogDumpProvider;
+import org.apache.karaf.features.FeaturesService;
+import org.apache.karaf.util.tracker.SingleServiceTracker;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class Activator implements BundleActivator {
+
+    private List<ServiceRegistration<DumpProvider>> registrations;
+    private ServiceRegistration<DumpProvider> featuresProviderRegistration;
+    private ServiceRegistration mbeanRegistration;
+    private SingleServiceTracker<FeaturesService> featuresServiceTracker;
+    private ServiceTracker<DumpProvider, DumpProvider> providersTracker;
+
+    @Override
+    public void start(final BundleContext context) throws Exception {
+        registrations = new ArrayList<ServiceRegistration<DumpProvider>>();
+        registrations.add(context.registerService(DumpProvider.class, new 
LogDumpProvider(context), null));
+
+        featuresServiceTracker = new 
SingleServiceTracker<FeaturesService>(context, FeaturesService.class, new 
SingleServiceTracker.SingleServiceListener() {
+            @Override
+            public void serviceFound() {
+                featuresProviderRegistration =
+                        context.registerService(
+                                DumpProvider.class,
+                                new 
FeaturesDumpProvider(featuresServiceTracker.getService()),
+                                null);
+            }
+            @Override
+            public void serviceLost() {
+            }
+            @Override
+            public void serviceReplaced() {
+                featuresProviderRegistration.unregister();
+            }
+        });
+
+        final DiagnosticDumpMBeanImpl diagnostic = new 
DiagnosticDumpMBeanImpl();
+
+        Hashtable<String, Object> props = new Hashtable<String, Object>();
+        props.put("jmx.objectname", "org.apache.karaf:type=diagnostic,name=" + 
System.getProperty("karaf.name"));
+        mbeanRegistration = context.registerService(
+                getInterfaceNames(diagnostic),
+                diagnostic,
+                props
+        );
+    }
+
+    @Override
+    public void stop(BundleContext context) throws Exception {
+        mbeanRegistration.unregister();
+        featuresServiceTracker.close();
+        for (ServiceRegistration<DumpProvider> reg : registrations) {
+            reg.unregister();
+        }
+    }
+
+    private String[] getInterfaceNames(Object object) {
+        List<String> names = new ArrayList<String>();
+        for (Class cl = object.getClass(); cl != Object.class; cl = 
cl.getSuperclass()) {
+            addSuperInterfaces(names, cl);
+        }
+        return names.toArray(new String[names.size()]);
+    }
+
+    private void addSuperInterfaces(List<String> names, Class clazz) {
+        for (Class cl : clazz.getInterfaces()) {
+            names.add(cl.getName());
+            addSuperInterfaces(names, cl);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/management/DiagnosticDumpMBean.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/management/DiagnosticDumpMBean.java
 
b/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/management/DiagnosticDumpMBean.java
new file mode 100644
index 0000000..6713d65
--- /dev/null
+++ 
b/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/management/DiagnosticDumpMBean.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.karaf.diagnostic.management;
+
+import javax.management.MBeanException;
+
+/**
+ * Diagnostic MBean which allows to create dumps over JMX.
+ */
+public interface DiagnosticDumpMBean {
+
+    /**
+     * Creates dump over JMX.
+     * 
+     * @param name Name of the dump.
+     * @throws Exception In case of any problems.
+     */
+    void createDump(String name) throws MBeanException;
+
+    /**
+     * Create dump with directory switch and name.
+     * 
+     * @param directory Should dump be created in directory.
+     * @param name Name of the dump.
+     * @throws Exception In case of any problems.
+     */
+    void createDump(boolean directory, String name) throws MBeanException;
+
+}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/management/internal/DiagnosticDumpMBeanImpl.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/management/internal/DiagnosticDumpMBeanImpl.java
 
b/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/management/internal/DiagnosticDumpMBeanImpl.java
new file mode 100644
index 0000000..958e2ed
--- /dev/null
+++ 
b/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/management/internal/DiagnosticDumpMBeanImpl.java
@@ -0,0 +1,76 @@
+/*
+ * 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.apache.karaf.diagnostic.management.internal;
+
+import java.io.File;
+
+import javax.management.NotCompliantMBeanException;
+import javax.management.StandardMBean;
+
+import org.apache.karaf.diagnostic.core.Dump;
+import org.apache.karaf.diagnostic.core.DumpDestination;
+import org.apache.karaf.diagnostic.management.DiagnosticDumpMBean;
+import org.osgi.framework.BundleContext;
+
+/**
+ * Implementation of diagnostic mbean.
+ */
+public class DiagnosticDumpMBeanImpl extends StandardMBean implements 
DiagnosticDumpMBean {
+
+    /**
+     * Dump providers.
+     */
+    private BundleContext bundleContext;
+
+    /**
+     * Creates new diagnostic mbean.
+     *
+     * @throws NotCompliantMBeanException
+     */
+    public DiagnosticDumpMBeanImpl() throws NotCompliantMBeanException {
+        super(DiagnosticDumpMBean.class);
+    }
+
+    /**
+     * Creates dump witch given name
+     *
+     * @param name Name of the dump.
+     */
+    public void createDump(String name) {
+        createDump(false, name);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void createDump(boolean directory, String name) {
+        File target = new File(name);
+
+        DumpDestination destination;
+        if (directory) {
+            destination = Dump.directory(target);
+        } else {
+            destination = Dump.zip(target);
+        }
+
+        Dump.dump(bundleContext, destination);
+    }
+
+    /**
+     * Sets the bundle context
+     */
+    public void setBundleContext(BundleContext bundleContext) {
+        this.bundleContext = bundleContext;
+    }
+}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/core/src/main/resources/OSGI-INF/bundle.info
----------------------------------------------------------------------
diff --git a/diagnostic/core/src/main/resources/OSGI-INF/bundle.info 
b/diagnostic/core/src/main/resources/OSGI-INF/bundle.info
new file mode 100644
index 0000000..ad58e7c
--- /dev/null
+++ b/diagnostic/core/src/main/resources/OSGI-INF/bundle.info
@@ -0,0 +1,16 @@
+h1. Synopsis
+
+${project.name}
+
+${project.description}
+
+Maven URL:
+[mvn:${project.groupId}/${project.artifactId}/${project.version}]
+
+h1. Description
+
+The diagnostic core bundle contains the command and mbean for creating 
diagnostic dumps.
+
+h1. See also
+
+Diagnostic - section of the Karaf User Guide.

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/pom.xml
----------------------------------------------------------------------
diff --git a/diagnostic/pom.xml b/diagnostic/pom.xml
index cacb84f..2ffcfef 100644
--- a/diagnostic/pom.xml
+++ b/diagnostic/pom.xml
@@ -29,101 +29,13 @@
     </parent>
 
     <groupId>org.apache.karaf.diagnostic</groupId>
-    <artifactId>org.apache.karaf.diagnostic.core</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Diagnostic :: Core</name>
-    <description>Core implementation using Karaf diagnostic using the 
diagnostic common services</description>
-
-    <properties>
-        
<appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>org.apache.karaf.util</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.features</groupId>
-            <artifactId>org.apache.karaf.features.core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.core</artifactId>
-            <optional>true</optional>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.karaf.tooling</groupId>
-                <artifactId>karaf-services-maven-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                            org.apache.karaf.diagnostic.command,
-                               org.apache.karaf.diagnostic.core,
-                            org.apache.karaf.diagnostic.core.common
-                               </Export-Package>
-                        <Import-Package>
-                            com.sun.management*;resolution:=optional,
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.diagnostic.core.internal,
-                            org.apache.karaf.diagnostic.core.internal.osgi,
-                            org.apache.karaf.util,
-                            org.apache.karaf.util.tracker
-                        </Private-Package>
-                        <Provide-Capability>
-                            ${capabilities}
-                        </Provide-Capability>
-                        <Require-Capability>
-                            ${requirements}
-                        </Require-Capability>
-                        <Bundle-Activator>
-                            
org.apache.karaf.diagnostic.core.internal.osgi.Activator
-                        </Bundle-Activator>
-                        <Karaf-Commands>*</Karaf-Commands>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
+    <artifactId>diagnostic</artifactId>
+    <packaging>pom</packaging>
+    <name>Apache Karaf :: Diagnostic</name>
+
+    <modules>
+        <module>boot</module>
+        <module>core</module>
+    </modules>
 
 </project>

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/src/main/java/org/apache/karaf/diagnostic/command/DumpCommand.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/command/DumpCommand.java 
b/diagnostic/src/main/java/org/apache/karaf/diagnostic/command/DumpCommand.java
deleted file mode 100644
index 3f6c607..0000000
--- 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/command/DumpCommand.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.karaf.diagnostic.command;
-
-import java.io.File;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.apache.karaf.diagnostic.core.DumpDestination;
-import org.apache.karaf.diagnostic.core.DumpProvider;
-import org.apache.karaf.diagnostic.core.common.DirectoryDumpDestination;
-import org.apache.karaf.diagnostic.core.common.ZipDumpDestination;
-import org.apache.karaf.shell.api.action.Action;
-import org.apache.karaf.shell.api.action.Argument;
-import org.apache.karaf.shell.api.action.Command;
-import org.apache.karaf.shell.api.action.Option;
-import org.apache.karaf.shell.api.action.lifecycle.Reference;
-import org.apache.karaf.shell.api.action.lifecycle.Service;
-
-/**
- * Command to create dump from shell.
- */
-@Command(scope = "dev", name = "dump-create", description = "Creates zip 
archive with diagnostic info.")
-@Service
-public class DumpCommand implements Action {
-
-    /**
-     * Output format of the filename if not defined otherwise
-     */
-    private SimpleDateFormat dumpFormat = new 
SimpleDateFormat("yyyy-MM-dd_HHmmss");
-
-    /**
-     * Directory switch.
-     */
-    @Option(name = "-d", aliases = "--directory", description = "Creates dump 
in a directory in place of a ZIP archive")
-    boolean directory;
-
-    /**
-     * Name of created directory or archive.
-     */
-    @Argument(name = "name", description = "Name of created zip or directory", 
required = false)
-    String fileName;
-
-    @Reference
-    List<DumpProvider> providers;
-
-    @Override
-    public Object execute() throws Exception {
-        DumpDestination destination;
-
-        if (providers.isEmpty()) {
-            System.out.println("Unable to create dump. No providers were 
found");
-            return null;
-        }
-
-        // create default file name if none provided
-        if (fileName == null || fileName.trim().length() == 0) {
-            fileName = dumpFormat.format(new Date());
-            if (!directory) {
-                fileName += ".zip";
-            }
-        }
-        File target = new File(fileName);
-
-        // if directory switch is on, create dump in directory
-        if (directory) {
-            destination = new DirectoryDumpDestination(target);
-        } else {
-            destination = new ZipDumpDestination(target);
-        }
-
-        for (DumpProvider provider : providers) {
-            provider.createDump(destination);
-        }
-        destination.save();
-        System.out.println("Diagnostic dump created at " + 
target.getAbsolutePath() + ".");
-
-        return null;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/DiagnosticDumpMBean.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/DiagnosticDumpMBean.java
 
b/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/DiagnosticDumpMBean.java
deleted file mode 100644
index f59982a..0000000
--- 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/DiagnosticDumpMBean.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.karaf.diagnostic.core;
-
-import javax.management.MBeanException;
-
-/**
- * Diagnostic MBean which allows to create dumps over JMX.
- */
-public interface DiagnosticDumpMBean {
-
-    /**
-     * Creates dump over JMX.
-     * 
-     * @param name Name of the dump.
-     * @throws Exception In case of any problems.
-     */
-    void createDump(String name) throws MBeanException;
-
-    /**
-     * Create dump with directory switch and name.
-     * 
-     * @param directory Should dump be created in directory.
-     * @param name Name of the dump.
-     * @throws Exception In case of any problems.
-     */
-    void createDump(boolean directory, String name) throws MBeanException;
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/DumpDestination.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/DumpDestination.java
 
b/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/DumpDestination.java
deleted file mode 100644
index 39c4edc..0000000
--- 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/DumpDestination.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.karaf.diagnostic.core;
-
-import java.io.OutputStream;
-
-/**
- * Destination for created dumps.
- */
-public interface DumpDestination {
-
-    /**
-     * Creates new entry in dump destination.
-     * 
-     * Destination does not close returned output stream by default, dump
-     * provider should do this after completing write operation.
-     * 
-     * @param name Name of file in destination.
-     * @return Output stream ready to write.
-     * @throws Exception When entry cannot be added.
-     */
-    OutputStream add(String name) throws Exception;
-
-    /**
-     * Complete creation of the dump.
-     */
-    void save() throws Exception;
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/DumpProvider.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/DumpProvider.java 
b/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/DumpProvider.java
deleted file mode 100644
index ec7724c..0000000
--- 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/DumpProvider.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.karaf.diagnostic.core;
-
-/**
- * Interface which represents instance of tool which can provide dump
- * information.
- */
-public interface DumpProvider {
-
-    /**
-     * Creates dump in given entry.
-     */
-    void createDump(DumpDestination destination) throws Exception;
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/common/ClosingEntryOutputStreamWrapper.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/common/ClosingEntryOutputStreamWrapper.java
 
b/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/common/ClosingEntryOutputStreamWrapper.java
deleted file mode 100644
index 0c4f9db..0000000
--- 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/common/ClosingEntryOutputStreamWrapper.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.karaf.diagnostic.core.common;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.zip.ZipOutputStream;
-
-/**
- * Output stream which closes entry instead closing whole stream.
- */
-public class ClosingEntryOutputStreamWrapper extends OutputStream {
-
-    /**
-     * Wrapped ZIP output stream. 
-     */
-    private ZipOutputStream outputStream;
-
-    /**
-     * Creates new OutputStream.
-     * 
-     * @param outputStream Wrapped output stream.
-     */
-    public ClosingEntryOutputStreamWrapper(ZipOutputStream outputStream) {
-        this.outputStream = outputStream;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void write(int b) throws IOException {
-        outputStream.write(b);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void write(byte[] b) throws IOException {
-        outputStream.write(b);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void write(byte[] b, int off, int len)
-        throws IOException {
-        outputStream.write(b, off, len);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void close() throws IOException {
-        // close entry instead of closing zip stream.
-        outputStream.closeEntry();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/common/DirectoryDumpDestination.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/common/DirectoryDumpDestination.java
 
b/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/common/DirectoryDumpDestination.java
deleted file mode 100644
index 37ae72e..0000000
--- 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/common/DirectoryDumpDestination.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.karaf.diagnostic.core.common;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-
-import org.apache.karaf.diagnostic.core.DumpDestination;
-
-/**
- * Class which packages dumps to given directory.
- */
-public class DirectoryDumpDestination implements DumpDestination {
-
-       /**
-        * Directory where dump files will be created.
-        */
-       private File directory;
-
-       public DirectoryDumpDestination(File file) {
-               this.directory = file;
-
-               if (!file.exists()) {
-                       file.mkdirs();
-               } 
-       }
-
-       public OutputStream add(String name) throws Exception {
-               File destination = new File(directory, name);
-               if (name.contains("/") || name.contains("\\")) {
-                       // if name contains slashes we need to create sub 
directory
-                       destination.getParentFile().mkdirs();
-               }
-               return new FileOutputStream(destination);
-       }
-
-       public void save() throws Exception {
-               // do nothing, all should be written to output streams
-       }
-       
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/common/TextDumpProvider.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/common/TextDumpProvider.java
 
b/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/common/TextDumpProvider.java
deleted file mode 100644
index 0b97d6f..0000000
--- 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/common/TextDumpProvider.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.karaf.diagnostic.core.common;
-
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-
-import org.apache.karaf.diagnostic.core.DumpDestination;
-import org.apache.karaf.diagnostic.core.DumpProvider;
-
-/**
- * Base class for dump providers which writes text to destination.
- */
-public abstract class TextDumpProvider implements DumpProvider {
-
-    /**
-     * Name of the file.
-     */
-    private final String name;
-
-    /**
-     * Creates new dump provider.
-     * 
-     * @param name Name of the file.
-     */
-    protected TextDumpProvider(String name) {
-        this.name = name;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public final void createDump(DumpDestination destination) throws Exception 
{
-        OutputStream outputStream = destination.add(name);
-        OutputStreamWriter outputStreamWriter = new 
OutputStreamWriter(outputStream);
-        try {
-            writeDump(outputStreamWriter);
-        } finally {
-            outputStreamWriter.close();
-            outputStream.close();
-        }
-    }
-
-    /**
-     * This method should create output.
-     * 
-     * @param outputStreamWriter Stream which points to file specified in 
constructor.
-     * @throws Exception If any problem occur.
-     */
-    protected abstract void writeDump(OutputStreamWriter outputStreamWriter) 
throws Exception;
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/common/ZipDumpDestination.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/common/ZipDumpDestination.java
 
b/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/common/ZipDumpDestination.java
deleted file mode 100644
index bafd38d..0000000
--- 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/common/ZipDumpDestination.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.karaf.diagnostic.core.common;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
-import org.apache.karaf.diagnostic.core.DumpDestination;
-
-/**
- * Class which packages dumps to ZIP archive.
- */
-public class ZipDumpDestination implements DumpDestination {
-
-    /**
-     * Destination streem.
-     */
-    private ZipOutputStream outputStream;
-
-    /**
-     * Creates new dump in given directory.
-     * 
-     * @param directory Target directory.
-     * @param name Name of the archive.
-     */
-    public ZipDumpDestination(File directory, String name) {
-        this(new File(directory, name));
-    }
-
-    /**
-     * Creates new dump in given file (zip archive). 
-     * 
-     * @param file Destination file.
-     */
-    public ZipDumpDestination(File file) {
-        try {
-            outputStream = new ZipOutputStream(new FileOutputStream(
-                file));
-        } catch (FileNotFoundException e) {
-            // sometimes this can occur, but we simply re throw and let 
-            // caller handle exception
-            throw new RuntimeException("Unable to create dump destination", e);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public OutputStream add(String name) throws Exception {
-        ZipEntry zipEntry = new ZipEntry(name);
-        outputStream.putNextEntry(zipEntry);
-        return new ClosingEntryOutputStreamWrapper(outputStream);
-    }
-
-    /**
-     * Closes archive handle.
-     */
-    public void save() throws Exception {
-        outputStream.close();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/BundleDumpProvider.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/BundleDumpProvider.java
 
b/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/BundleDumpProvider.java
deleted file mode 100644
index 774dc1f..0000000
--- 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/BundleDumpProvider.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.karaf.diagnostic.core.internal;
-
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.karaf.diagnostic.core.common.TextDumpProvider;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-
-/**
- * Dump provider which produces file named bundles.txt with list of
- * installed bundles and it's state.
- */
-public class BundleDumpProvider extends TextDumpProvider {
-
-    /**
-     * Static map with state mask to string representation.
-     */
-    private static Map<Integer, String> stateMap = new HashMap<Integer, 
String>();
-
-    /**
-     * Map bundle states to string representation.
-     */
-    static {
-        stateMap.put(0x00000001, "UNINSTALLED");
-        stateMap.put(0x00000002, "INSTALLED");
-        stateMap.put(0x00000004, "RESOLVED");
-        stateMap.put(0x00000008, "STARTING");
-        stateMap.put(0x00000010, "STOPPING");
-        stateMap.put(0x00000020, "ACTIVE");
-    }
-
-    /**
-     * Bundle context.
-     */
-    private BundleContext bundleContext;
-
-    /**
-     * Creates new bundle information file.
-     *  
-     * @param context Bundle context to access framework state.
-     */
-    public BundleDumpProvider(BundleContext context) {
-        super("bundles.txt");
-        this.bundleContext = context;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    protected void writeDump(OutputStreamWriter writer) throws IOException {
-        // get bundle states
-        Bundle[] bundles = bundleContext.getBundles();
-
-        writer.write("Number of installed bundles " + bundles.length + "\n");
-
-        // create file header
-        writer.write("Id\tSymbolic name\tVersion\tState\n");
-        for (Bundle bundle : bundles) {
-            // write row :)
-            writer.write(bundle.getBundleId() + "\t" + 
bundle.getSymbolicName() + '\t' + bundle.getVersion()
-                + "\t" + stateMap.get(bundle.getState()) + "\n");
-        }
-
-        writer.flush();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/DiagnosticDumpMBeanImpl.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/DiagnosticDumpMBeanImpl.java
 
b/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/DiagnosticDumpMBeanImpl.java
deleted file mode 100644
index 22e09c9..0000000
--- 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/DiagnosticDumpMBeanImpl.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * 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.apache.karaf.diagnostic.core.internal;
-
-import java.io.File;
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-import javax.management.MBeanException;
-import javax.management.NotCompliantMBeanException;
-import javax.management.StandardMBean;
-
-import org.apache.karaf.diagnostic.core.DiagnosticDumpMBean;
-import org.apache.karaf.diagnostic.core.DumpDestination;
-import org.apache.karaf.diagnostic.core.DumpProvider;
-import org.apache.karaf.diagnostic.core.common.DirectoryDumpDestination;
-import org.apache.karaf.diagnostic.core.common.ZipDumpDestination;
-
-/**
- * Implementation of diagnostic MBean.
- */
-public class DiagnosticDumpMBeanImpl extends StandardMBean implements 
DiagnosticDumpMBean {
-
-    /**
-     * Dump providers.
-     */
-    private final List<DumpProvider> providers = new 
CopyOnWriteArrayList<DumpProvider>();
-
-    /**
-     * Creates new diagnostic mbean.
-     *
-     * @throws NotCompliantMBeanException
-     */
-    public DiagnosticDumpMBeanImpl() throws NotCompliantMBeanException {
-        super(DiagnosticDumpMBean.class);
-    }
-
-    /**
-     * Creates dump witch given name
-     *
-     * @param name Name of the dump.
-     */
-    public void createDump(String name) throws MBeanException {
-        createDump(false, name);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void createDump(boolean directory, String name) throws 
MBeanException {
-        try {
-            File target = new File(name);
-
-            DumpDestination destination;
-            if (directory) {
-                destination = new DirectoryDumpDestination(target);
-            } else {
-                destination = new ZipDumpDestination(target);
-            }
-
-            for (DumpProvider provider : providers) {
-                provider.createDump(destination);
-            }
-
-            destination.save();
-        } catch (Exception e) {
-            throw new MBeanException(null, e.getMessage());
-        }
-    }
-
-    public void registerProvider(DumpProvider provider) {
-        providers.add(provider);
-    }
-
-    public void unregisterProvider(DumpProvider provider) {
-        providers.add(provider);
-    }
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/EnvironmentDumpProvider.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/EnvironmentDumpProvider.java
 
b/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/EnvironmentDumpProvider.java
deleted file mode 100644
index 3328067..0000000
--- 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/EnvironmentDumpProvider.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.karaf.diagnostic.core.internal;
-
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.lang.management.ClassLoadingMXBean;
-import java.lang.management.CompilationMXBean;
-import java.lang.management.GarbageCollectorMXBean;
-import java.lang.management.ManagementFactory;
-import java.lang.management.MemoryMXBean;
-import java.lang.management.MemoryUsage;
-import java.lang.management.OperatingSystemMXBean;
-import java.lang.management.RuntimeMXBean;
-import java.lang.management.ThreadMXBean;
-import java.text.DateFormat;
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
-import java.text.NumberFormat;
-import java.util.Date;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.apache.karaf.diagnostic.core.common.TextDumpProvider;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Version;
-
-/**
- * Provider which dumps runtime environment information to file named 
environment.txt.
- */
-public class EnvironmentDumpProvider extends TextDumpProvider {
-    
-    private static final String KEY_VALUE_FORMAT = "%1$s\t: %2$s";
-    private static final String INDENT_KEY_VALUE_FORMAT = "    
"+KEY_VALUE_FORMAT;
-    private final BundleContext bundleContext;
-
-    /**
-     * Creates new dump entry which contains information about the runtime 
environment.
-     */
-    public EnvironmentDumpProvider(final BundleContext context) {
-        super("environment.txt");
-        this.bundleContext = context;
-    }
-
-    @Override
-    protected void writeDump(final OutputStreamWriter outputStream) throws 
Exception {
-    if( null == outputStream) {
-        return;
-    }
-    final PrintWriter outPW = new PrintWriter(outputStream);
-    // current date/time
-    final DateFormat dateTimeFormatInstance = 
DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, 
Locale.ENGLISH);
-    outPW.printf(KEY_VALUE_FORMAT,"Dump timestamp", 
dateTimeFormatInstance.format(new Date(System.currentTimeMillis()))).println();
-    outPW.println();
-    // karaf information
-    dumpKarafInformation(outPW);
-    outPW.println();
-    // OSGi information
-    dumpOSGiInformation(outPW);
-    outPW.println();
-    // OS information
-    dumpOSInformation(outPW);
-    outPW.println();
-    // general information about JVM
-    dumpVMInformation(outPW, dateTimeFormatInstance);
-    outPW.println();
-    // threads
-    dumpThreadsInformation(outPW);
-    outPW.println();
-    // classes
-    dumpClassesInformation(outPW);
-    outPW.println();
-    // memory
-    dumpMemoryInformation(outPW);
-    outPW.println();
-    // garbage collector
-    dumpGCInformation(outPW);
-    }
-
-    private void dumpKarafInformation(final PrintWriter outPW) {
-        outPW.printf(KEY_VALUE_FORMAT, "Karaf", 
System.getProperty("karaf.name", "root") + ' ' + 
System.getProperty("karaf.version", "")).println();
-        outPW.printf(INDENT_KEY_VALUE_FORMAT, "home", 
System.getProperty("karaf.home", "")).println();
-        outPW.printf(INDENT_KEY_VALUE_FORMAT, "base", 
System.getProperty("karaf.base", "")).println();
-    }
-
-    private void dumpOSGiInformation(final PrintWriter outPW) {
-        if( null == bundleContext ) {
-            return;
-        }
-        outPW.println("OSGi:");
-        final Bundle[] bundles = bundleContext.getBundles();
-        for (final Bundle bundle : bundles) {
-            if( null == bundle || 
!!!"osgi.core".equals(bundle.getSymbolicName())) {
-                continue;
-            }
-            outPW.printf(INDENT_KEY_VALUE_FORMAT, "version", 
bundle.getVersion()).println();
-            break;
-        }
-        outPW.printf(INDENT_KEY_VALUE_FORMAT, "framework", 
bundleContext.getBundle(0).getSymbolicName() + " - " +
-                bundleContext.getBundle(0).getVersion()).println();
-    }
-
-    private void dumpOSInformation(final PrintWriter outPW) {
-        final OperatingSystemMXBean mxBean = 
ManagementFactory.getOperatingSystemMXBean();
-        if( null == mxBean) {
-            return;
-        }
-        outPW.printf(KEY_VALUE_FORMAT, "Operating System", mxBean.getName() + 
' ' + mxBean.getVersion()).println();
-        outPW.printf(INDENT_KEY_VALUE_FORMAT, "architecture", 
mxBean.getArch()).println();
-        outPW.printf(INDENT_KEY_VALUE_FORMAT, "processors", 
mxBean.getAvailableProcessors()).println();
-//        outPW.printf(INDENT_KEY_VALUE_FORMAT, "current system load average", 
mxBean.getSystemLoadAverage()).println();
-    }
-
-    private void dumpVMInformation(final PrintWriter outPW,
-        final DateFormat dateTimeFormatInstance) {
-        final RuntimeMXBean mxBean = ManagementFactory.getRuntimeMXBean();
-        if( mxBean == null ) {
-            return;
-        }
-        outPW.printf(KEY_VALUE_FORMAT,"Instance name", 
mxBean.getName()).println();
-        outPW.printf(KEY_VALUE_FORMAT,"Start time", 
dateTimeFormatInstance.format(new Date(mxBean.getStartTime()))).println();
-        outPW.printf(KEY_VALUE_FORMAT,"Uptime", 
printDuration(mxBean.getUptime())).println();
-        outPW.println();
-        outPW.printf(KEY_VALUE_FORMAT, "Java VM", mxBean.getVmName() + " " + 
mxBean.getVmVersion()).println();
-        outPW.printf(INDENT_KEY_VALUE_FORMAT, "vendor", 
mxBean.getVmVendor()).println();
-        outPW.printf(INDENT_KEY_VALUE_FORMAT, "version", 
System.getProperty("java.version")).println();
-        outPW.println();
-        outPW.println("Input arguments:");
-        final List<String> inputArguments = mxBean.getInputArguments();
-        for (final String argument : inputArguments) {
-            if( argument != null && argument.contains("=")) {
-                final String[] split = argument.split("=");
-                outPW.printf(INDENT_KEY_VALUE_FORMAT, split[0], 
split[1]).println();
-            } else {
-                outPW.printf(INDENT_KEY_VALUE_FORMAT, argument,"").println();
-            }
-        }
-        outPW.println("Classpath:");
-        outPW.printf(INDENT_KEY_VALUE_FORMAT, "boot classpath", 
mxBean.getBootClassPath()).println();
-        outPW.printf(INDENT_KEY_VALUE_FORMAT, "library path", 
mxBean.getLibraryPath()).println();
-        outPW.printf(INDENT_KEY_VALUE_FORMAT, "classpath", 
mxBean.getClassPath()).println();
-        outPW.println("System properties:");
-        final Map<String, String> systemProperties = 
mxBean.getSystemProperties();
-        for (final Entry<String, String> property : 
systemProperties.entrySet()) {
-            outPW.printf(INDENT_KEY_VALUE_FORMAT, property.getKey(), 
property.getValue()).println();
-        }
-        outPW.println();
-        // JIT information
-        final CompilationMXBean compilationMXBean = 
ManagementFactory.getCompilationMXBean();
-        if( compilationMXBean != null ) {
-            outPW.printf(KEY_VALUE_FORMAT, "JIT compiler", 
compilationMXBean.getName()).println();
-            outPW.printf(INDENT_KEY_VALUE_FORMAT, "total compile time", 
printDuration(compilationMXBean.getTotalCompilationTime())).println();
-        }
-    }
-
-    private void dumpThreadsInformation(final PrintWriter outPW) {
-        final ThreadMXBean mxBean = ManagementFactory.getThreadMXBean();
-        if( null == mxBean) {
-            return;
-        }
-        outPW.println("Threads:");
-        outPW.printf(INDENT_KEY_VALUE_FORMAT, "live", 
formatLong(mxBean.getThreadCount())).println();
-        outPW.printf(INDENT_KEY_VALUE_FORMAT, "daemon", 
formatLong(mxBean.getDaemonThreadCount())).println();
-        outPW.printf(INDENT_KEY_VALUE_FORMAT, "peak", 
formatLong(mxBean.getPeakThreadCount())).println();
-        outPW.printf(INDENT_KEY_VALUE_FORMAT, "total", 
formatLong(mxBean.getTotalStartedThreadCount())).println();
-    }
-
-    private void dumpClassesInformation(final PrintWriter outPW) {
-        final ClassLoadingMXBean mxBean = 
ManagementFactory.getClassLoadingMXBean();
-        if( null == mxBean) {
-            return;
-        }
-        outPW.println("Classes:");
-        outPW.printf(INDENT_KEY_VALUE_FORMAT, "loaded", 
formatLong(mxBean.getLoadedClassCount())).println();
-        outPW.printf(INDENT_KEY_VALUE_FORMAT, "total", 
formatLong(mxBean.getTotalLoadedClassCount())).println();
-        outPW.printf(INDENT_KEY_VALUE_FORMAT, "unloaded", 
formatLong(mxBean.getUnloadedClassCount())).println();
-    }
-
-    private void dumpMemoryInformation(final PrintWriter outPW) {
-        final MemoryMXBean mxBean = ManagementFactory.getMemoryMXBean();
-        if( null == mxBean) {
-            return;
-        }
-        final MemoryUsage heapMemoryUsage = mxBean.getHeapMemoryUsage();
-        final MemoryUsage nonHeapMemoryUsage = mxBean.getNonHeapMemoryUsage();
-        if( heapMemoryUsage != null ) {
-            outPW.println("HEAP Memory:");
-            outPW.printf(INDENT_KEY_VALUE_FORMAT, "commited", 
printMemory(heapMemoryUsage.getCommitted())).println();
-            outPW.printf(INDENT_KEY_VALUE_FORMAT, "init", 
printMemory(heapMemoryUsage.getInit())).println();
-            outPW.printf(INDENT_KEY_VALUE_FORMAT, "used", 
printMemory(heapMemoryUsage.getUsed())).println();
-            outPW.printf(INDENT_KEY_VALUE_FORMAT, "maximal", 
printMemory(heapMemoryUsage.getMax())).println();
-        }
-        if( nonHeapMemoryUsage != null ) {
-            outPW.println("NON-HEAP Memory:");
-            outPW.printf(INDENT_KEY_VALUE_FORMAT, "commited", 
printMemory(nonHeapMemoryUsage.getCommitted())).println();
-            outPW.printf(INDENT_KEY_VALUE_FORMAT, "init", 
printMemory(nonHeapMemoryUsage.getInit())).println();
-            outPW.printf(INDENT_KEY_VALUE_FORMAT, "used", 
printMemory(nonHeapMemoryUsage.getUsed())).println();
-            outPW.printf(INDENT_KEY_VALUE_FORMAT, "maximal", 
printMemory(nonHeapMemoryUsage.getMax())).println();
-        }
-    }
-
-    private void dumpGCInformation(final PrintWriter outPW) {
-        final List<GarbageCollectorMXBean> mxBeans = 
ManagementFactory.getGarbageCollectorMXBeans();
-        if( null == mxBeans || mxBeans.isEmpty()) {
-            return;
-        }
-        final MemoryMXBean memoryMxBean = ManagementFactory.getMemoryMXBean();
-        if( memoryMxBean != null ) {
-            outPW.printf(INDENT_KEY_VALUE_FORMAT, "pending objects", 
formatLong(memoryMxBean.getObjectPendingFinalizationCount())).println();
-        }
-        final String gcFormat ="'%1$s' collections: %2$s\ttime: %3$s";
-        outPW.println();
-        for (final GarbageCollectorMXBean mxBean : mxBeans) {
-            if( null == mxBean) {
-                continue;
-            }
-            outPW.printf(KEY_VALUE_FORMAT, "Garbage Collectors", 
String.format(gcFormat, mxBean.getName(), 
formatLong(mxBean.getCollectionCount()), 
printDuration(mxBean.getCollectionTime()))).println();
-        }
-    }
-
-
-    private String formatLong(final long longValue) {
-        final NumberFormat fmtI = new DecimalFormat("###,###", new 
DecimalFormatSymbols(Locale.ENGLISH));
-        return fmtI.format(longValue);
-    }
-
-    private String printMemory(final long bytes) {
-        if( bytes <= 1024) {
-            return formatLong(bytes)+" bytes";
-        }
-        return formatLong(bytes/1024)+" kbytes";
-    }
-
-    /**
-     * Prints the duration in a human readable format as X days Y hours Z 
minutes etc.
-     *
-     * @param uptime the uptime in millis
-     * @return the time used for displaying on screen or in logs
-     */
-    private String printDuration(double uptime) {
-        // Code based on code taken from Karaf
-        // 
https://svn.apache.org/repos/asf/karaf/trunk/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/InfoAction.java
-
-        uptime /= 1000;
-        if (uptime < 60) {
-            final NumberFormat fmtD = new DecimalFormat("###,##0.000", new 
DecimalFormatSymbols(Locale.ENGLISH));
-            return fmtD.format(uptime) + " seconds";
-        }
-        uptime /= 60;
-        if (uptime < 60) {
-            final long minutes = (long) uptime;
-            final String s = formatLong(minutes) + (minutes > 1 ? " minutes" : 
" minute");
-            return s;
-        }
-        uptime /= 60;
-        if (uptime < 24) {
-            final long hours = (long) uptime;
-            final long minutes = (long) ((uptime - hours) * 60);
-            String s = formatLong(hours) + (hours > 1 ? " hours" : " hour");
-            if (minutes != 0) {
-                s += " " + formatLong(minutes) + (minutes > 1 ? " minutes" : " 
minute");
-            }
-            return s;
-        }
-        uptime /= 24;
-        final long days = (long) uptime;
-        final long hours = (long) ((uptime - days) * 24);
-        String s = formatLong(days) + (days > 1 ? " days" : " day");
-        if (hours != 0) {
-            s += " " + formatLong(hours) + (hours > 1 ? " hours" : " hour");
-        }
-        return s;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/FeaturesDumpProvider.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/FeaturesDumpProvider.java
 
b/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/FeaturesDumpProvider.java
deleted file mode 100644
index e5fa55e..0000000
--- 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/FeaturesDumpProvider.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.karaf.diagnostic.core.internal;
-
-import java.io.OutputStreamWriter;
-
-import org.apache.karaf.diagnostic.core.common.TextDumpProvider;
-import org.apache.karaf.features.BundleInfo;
-import org.apache.karaf.features.Feature;
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.features.Repository;
-
-/**
- * Dump provider which add file named features.txt with informations
- * about installed features and repositories.
- */
-public class FeaturesDumpProvider extends TextDumpProvider {
-
-    /**
-     * Feature service.
-     */
-    private final FeaturesService features;
-
-    /**
-     * Creates new dump entry witch contains information about
-     * karaf features.
-     * 
-     * @param features Feature service.
-     */
-    public FeaturesDumpProvider(FeaturesService features) {
-        super("features.txt");
-        this.features = features;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    protected void writeDump(OutputStreamWriter outputStreamWriter) throws 
Exception {
-        // creates header
-        outputStreamWriter.write("Repositories:\n");
-
-        // list repositories
-        for (Repository repo : features.listRepositories()) {
-            outputStreamWriter.write(repo.getURI() + " (" + repo.getName() + 
")\n");
-        }
-
-        // list features
-        outputStreamWriter.write("\nfeatures:\n");
-        for (Feature feature : features.listFeatures()) {
-            outputStreamWriter.write(feature.getName() + " " + 
feature.getVersion());
-            outputStreamWriter.write(" installed: " + 
features.isInstalled(feature));
-            outputStreamWriter.write("\nBundles:\n");
-            for (BundleInfo bundle : feature.getBundles()) {
-                outputStreamWriter.write("\t" + bundle.getLocation());
-                if (bundle.getStartLevel() != 0) {
-                    outputStreamWriter.write(" start level " + 
bundle.getStartLevel());
-                }
-                outputStreamWriter.write("\n\n");
-            }
-        }
-
-        // flush & close stream
-        outputStreamWriter.close();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/HeapDumpProvider.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/HeapDumpProvider.java
 
b/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/HeapDumpProvider.java
deleted file mode 100644
index 9e6cccd..0000000
--- 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/HeapDumpProvider.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.karaf.diagnostic.core.internal;
-
-import com.sun.management.HotSpotDiagnosticMXBean;
-import org.apache.karaf.diagnostic.core.DumpDestination;
-import org.apache.karaf.diagnostic.core.DumpProvider;
-import org.apache.karaf.util.StreamUtils;
-
-import javax.management.MBeanServer;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.OutputStream;
-import java.lang.management.ManagementFactory;
-
-/**
- * Create a heap dump.
- */
-public class HeapDumpProvider implements DumpProvider {
-
-    @Override
-    public void createDump(DumpDestination destination) throws Exception {
-        try {
-            MBeanServer mBeanServer = 
ManagementFactory.getPlatformMBeanServer();
-            HotSpotDiagnosticMXBean diagnosticMXBean = 
ManagementFactory.newPlatformMXBeanProxy(mBeanServer,
-                    "com.sun.management:type=HotSpotDiagnostic", 
HotSpotDiagnosticMXBean.class);
-            diagnosticMXBean.dumpHeap("heapdump.txt", false);
-            // copy the dump in the destination
-            File heapDumpFile = new File("heapdump.txt");
-            try (
-                FileInputStream in = new FileInputStream(heapDumpFile);
-                OutputStream out = destination.add("heapdump.txt")
-            ) {
-                StreamUtils.copy(in, out);
-            }
-            // remove the original dump
-            if (heapDumpFile.exists()) {
-                heapDumpFile.delete();
-            }
-        } catch (Exception e) {
-            // nothing to do
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/LogDumpProvider.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/LogDumpProvider.java
 
b/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/LogDumpProvider.java
deleted file mode 100644
index 412977a..0000000
--- 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/LogDumpProvider.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.karaf.diagnostic.core.internal;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Dictionary;
-import java.util.Enumeration;
-
-import org.apache.karaf.diagnostic.core.DumpDestination;
-import org.apache.karaf.diagnostic.core.DumpProvider;
-import org.apache.karaf.util.StreamUtils;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-
-/**
- * Dump provider which copies log files from data/log directory to
- * destination.
- */
-public class LogDumpProvider implements DumpProvider {
-
-    private final BundleContext bundleContext;
-
-    public LogDumpProvider(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-    /**
-     * Attach log entries from directory.
-     */
-    public void createDump(DumpDestination destination) throws Exception {
-        // get the ConfigAdmin service
-        ServiceReference ref = 
bundleContext.getServiceReference(ConfigurationAdmin.class.getName());
-        if (ref == null) {
-            return;
-        }
-
-        // get the PAX Logging configuration
-        ConfigurationAdmin configurationAdmin = (ConfigurationAdmin) 
bundleContext.getService(ref);
-        try {
-            Configuration configuration = 
configurationAdmin.getConfiguration("org.ops4j.pax.logging");
-
-            // get the ".file" Pax Logging properties
-            Dictionary dictionary = configuration.getProperties();
-            for (Enumeration e = dictionary.keys(); e.hasMoreElements(); ) {
-                String property = (String) e.nextElement();
-                if (property.endsWith(".file")) {
-                    // it's a file appender, get the file location
-                    String location = (String) dictionary.get(property);
-                    File file = new File(location);
-                    if (file.exists()) {
-                        FileInputStream inputStream = new 
FileInputStream(file);
-                        OutputStream outputStream = destination.add("log/" + 
file.getName());
-                        StreamUtils.copy(inputStream, outputStream);
-                    }
-                }
-            }
-        } catch (Exception e) {
-            throw e;
-        } finally {
-            bundleContext.ungetService(ref);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/MemoryDumpProvider.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/MemoryDumpProvider.java
 
b/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/MemoryDumpProvider.java
deleted file mode 100644
index ff23f9d..0000000
--- 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/MemoryDumpProvider.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.karaf.diagnostic.core.internal;
-
-import org.apache.karaf.diagnostic.core.common.TextDumpProvider;
-
-import java.io.OutputStreamWriter;
-import java.lang.management.ManagementFactory;
-import java.lang.management.MemoryMXBean;
-
-/**
- * Provider which dump the memory information in the memory.txt file.
- */
-public class MemoryDumpProvider extends TextDumpProvider {
-
-    public MemoryDumpProvider() {
-        super("memory.txt");
-    }
-
-    @Override
-    protected void writeDump(OutputStreamWriter outputStream) throws Exception 
{
-        MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
-
-        outputStream.write("Number of objects waiting finalization: " + 
memoryMXBean.getObjectPendingFinalizationCount() + "\n\n");
-
-        outputStream.write("Heap:\n");
-        outputStream.write("\tInit:      " + 
memoryMXBean.getHeapMemoryUsage().getInit() + "\n");
-        outputStream.write("\tUser:      " + 
memoryMXBean.getHeapMemoryUsage().getUsed() + "\n");
-        outputStream.write("\tCommitted: " + 
memoryMXBean.getHeapMemoryUsage().getCommitted() + "\n");
-        outputStream.write("\tMax:       " + 
memoryMXBean.getHeapMemoryUsage().getMax() + "\n");
-
-        outputStream.write("Non-Heap: \n");
-        outputStream.write("\tInit:      " + 
memoryMXBean.getNonHeapMemoryUsage().getInit() + "\n");
-        outputStream.write("\tUser:      " + 
memoryMXBean.getNonHeapMemoryUsage().getUsed() + "\n");
-        outputStream.write("\tCommitted: " + 
memoryMXBean.getNonHeapMemoryUsage().getCommitted() + "\n");
-        outputStream.write("\tMax:       " + 
memoryMXBean.getNonHeapMemoryUsage().getMax() + "\n");
-
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/ThreadDumpProvider.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/ThreadDumpProvider.java
 
b/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/ThreadDumpProvider.java
deleted file mode 100644
index 31edad6..0000000
--- 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/ThreadDumpProvider.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.karaf.diagnostic.core.internal;
-
-import java.io.OutputStreamWriter;
-import java.lang.management.LockInfo;
-import java.lang.management.ManagementFactory;
-import java.lang.management.MonitorInfo;
-import java.lang.management.ThreadInfo;
-import java.lang.management.ThreadMXBean;
-
-import org.apache.karaf.diagnostic.core.common.TextDumpProvider;
-
-/**
- * Provider which dumps thread info to file named threads.txt.
- */
-public class ThreadDumpProvider extends TextDumpProvider {
-
-    /**
-     * Creates new dump entry which contains information about threads.
-     */
-    public ThreadDumpProvider() {
-        super("threads.txt");
-    }
-
-    @Override
-    protected void writeDump(OutputStreamWriter outputStream) throws Exception 
{
-        ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
-
-        outputStream.write("Number of threads: " + 
threadMXBean.getThreadCount() + "\n");
-
-        for (ThreadInfo threadInfo : 
threadMXBean.getThreadInfo(threadMXBean.getAllThreadIds(), Integer.MAX_VALUE)) {
-            outputStream.write(getDumpThreadString(threadInfo) + "\n\n");
-        }
-
-    }
-
-    protected String getDumpThreadString(ThreadInfo threadInfo) {
-        StringBuilder sb = new StringBuilder("\"" + threadInfo.getThreadName() 
+ "\"" + " Id=" + threadInfo.getThreadId() + " "
-                                             + threadInfo.getThreadState());
-        if (threadInfo.getLockName() != null) {
-            sb.append(" on " + threadInfo.getLockName());
-        }
-        if (threadInfo.getLockOwnerName() != null) {
-            sb.append(" owned by \"" + threadInfo.getLockOwnerName() + "\" 
Id=" + threadInfo.getLockOwnerId());
-        }
-        if (threadInfo.isSuspended()) {
-            sb.append(" (suspended)");
-        }
-        if (threadInfo.isInNative()) {
-            sb.append(" (in native)");
-        }
-        sb.append('\n');
-        int i = 0;
-        StackTraceElement[] stackTrace = threadInfo.getStackTrace();
-        for (; i < stackTrace.length; i++) {
-            StackTraceElement ste = stackTrace[i];
-            sb.append("\tat " + ste.toString());
-            sb.append('\n');
-            if (i == 0 && threadInfo.getLockInfo() != null) {
-                Thread.State ts = threadInfo.getThreadState();
-                switch (ts) {
-                case BLOCKED:
-                    sb.append("\t-  blocked on " + threadInfo.getLockInfo());
-                    sb.append('\n');
-                    break;
-                case WAITING:
-                    sb.append("\t-  waiting on " + threadInfo.getLockInfo());
-                    sb.append('\n');
-                    break;
-                case TIMED_WAITING:
-                    sb.append("\t-  waiting on " + threadInfo.getLockInfo());
-                    sb.append('\n');
-                    break;
-                default:
-                }
-            }
-
-            for (MonitorInfo mi : threadInfo.getLockedMonitors()) {
-                if (mi.getLockedStackDepth() == i) {
-                    sb.append("\t-  locked " + mi);
-                    sb.append('\n');
-                }
-            }
-        }
-        if (i < stackTrace.length) {
-            sb.append("\t...");
-            sb.append('\n');
-        }
-
-        LockInfo[] locks = threadInfo.getLockedSynchronizers();
-        if (locks.length > 0) {
-            sb.append("\n\tNumber of locked synchronizers = " + locks.length);
-            sb.append('\n');
-            for (LockInfo li : locks) {
-                sb.append("\t- " + li);
-                sb.append('\n');
-            }
-        }
-        sb.append('\n');
-        return sb.toString();
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/osgi/Activator.java
----------------------------------------------------------------------
diff --git 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/osgi/Activator.java
 
b/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/osgi/Activator.java
deleted file mode 100644
index 7a01daf..0000000
--- 
a/diagnostic/src/main/java/org/apache/karaf/diagnostic/core/internal/osgi/Activator.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.karaf.diagnostic.core.internal.osgi;
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.List;
-
-import org.apache.karaf.diagnostic.core.DumpProvider;
-import org.apache.karaf.diagnostic.core.internal.BundleDumpProvider;
-import org.apache.karaf.diagnostic.core.internal.DiagnosticDumpMBeanImpl;
-import org.apache.karaf.diagnostic.core.internal.EnvironmentDumpProvider;
-import org.apache.karaf.diagnostic.core.internal.FeaturesDumpProvider;
-import org.apache.karaf.diagnostic.core.internal.HeapDumpProvider;
-import org.apache.karaf.diagnostic.core.internal.LogDumpProvider;
-import org.apache.karaf.diagnostic.core.internal.MemoryDumpProvider;
-import org.apache.karaf.diagnostic.core.internal.ThreadDumpProvider;
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.util.tracker.SingleServiceTracker;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-public class Activator implements BundleActivator {
-
-    private List<ServiceRegistration<DumpProvider>> registrations;
-    private ServiceRegistration<DumpProvider> featuresProviderRegistration;
-    private ServiceRegistration mbeanRegistration;
-    private SingleServiceTracker<FeaturesService> featuresServiceTracker;
-    private ServiceTracker<DumpProvider, DumpProvider> providersTracker;
-
-    @Override
-    public void start(final BundleContext context) throws Exception {
-        registrations = new ArrayList<ServiceRegistration<DumpProvider>>();
-        registrations.add(context.registerService(DumpProvider.class, new 
BundleDumpProvider(context), null));
-        registrations.add(context.registerService(DumpProvider.class, new 
EnvironmentDumpProvider(context), null));
-        registrations.add(context.registerService(DumpProvider.class, new 
HeapDumpProvider(), null));
-        registrations.add(context.registerService(DumpProvider.class, new 
LogDumpProvider(context), null));
-        registrations.add(context.registerService(DumpProvider.class, new 
MemoryDumpProvider(), null));
-        registrations.add(context.registerService(DumpProvider.class, new 
ThreadDumpProvider(), null));
-
-        featuresServiceTracker = new 
SingleServiceTracker<FeaturesService>(context, FeaturesService.class, new 
SingleServiceTracker.SingleServiceListener() {
-            @Override
-            public void serviceFound() {
-                featuresProviderRegistration =
-                        context.registerService(
-                                DumpProvider.class,
-                                new 
FeaturesDumpProvider(featuresServiceTracker.getService()),
-                                null);
-            }
-            @Override
-            public void serviceLost() {
-            }
-            @Override
-            public void serviceReplaced() {
-                featuresProviderRegistration.unregister();
-            }
-        });
-
-        final DiagnosticDumpMBeanImpl diagnostic = new 
DiagnosticDumpMBeanImpl();
-        providersTracker = new ServiceTracker<DumpProvider, DumpProvider>(
-                context, DumpProvider.class, new 
ServiceTrackerCustomizer<DumpProvider, DumpProvider>() {
-            @Override
-            public DumpProvider addingService(ServiceReference<DumpProvider> 
reference) {
-                DumpProvider service = context.getService(reference);
-                diagnostic.registerProvider(service);
-                return service;
-            }
-            @Override
-            public void modifiedService(ServiceReference<DumpProvider> 
reference, DumpProvider service) {
-            }
-            @Override
-            public void removedService(ServiceReference<DumpProvider> 
reference, DumpProvider service) {
-                diagnostic.unregisterProvider(service);
-                context.ungetService(reference);
-            }
-        });
-        providersTracker.open();
-
-        Hashtable<String, Object> props = new Hashtable<String, Object>();
-        props.put("jmx.objectname", "org.apache.karaf:type=diagnostic,name=" + 
System.getProperty("karaf.name"));
-        mbeanRegistration = context.registerService(
-                getInterfaceNames(diagnostic),
-                diagnostic,
-                props
-        );
-    }
-
-    @Override
-    public void stop(BundleContext context) throws Exception {
-        mbeanRegistration.unregister();
-        featuresServiceTracker.close();
-        providersTracker.close();
-        for (ServiceRegistration<DumpProvider> reg : registrations) {
-            reg.unregister();
-        }
-    }
-
-    private String[] getInterfaceNames(Object object) {
-        List<String> names = new ArrayList<String>();
-        for (Class cl = object.getClass(); cl != Object.class; cl = 
cl.getSuperclass()) {
-            addSuperInterfaces(names, cl);
-        }
-        return names.toArray(new String[names.size()]);
-    }
-
-    private void addSuperInterfaces(List<String> names, Class clazz) {
-        for (Class cl : clazz.getInterfaces()) {
-            names.add(cl.getName());
-            addSuperInterfaces(names, cl);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/diagnostic/src/main/resources/OSGI-INF/bundle.info
----------------------------------------------------------------------
diff --git a/diagnostic/src/main/resources/OSGI-INF/bundle.info 
b/diagnostic/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 15bc3cb..0000000
--- a/diagnostic/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,18 +0,0 @@
-h1. Synopsis
-
-${project.name}
-
-${project.description}
-
-Maven URL:
-[mvn:${project.groupId}/${project.artifactId}/${project.version}]
-
-h1. Description
-
-The diagnostic core bundle is the diagnostic core implementation.
-
-It's used by the diagnostic commands bundle and is responsible of the dump 
generation (environment, features, logs, bundles, threads).
-
-h1. See also
-
-Diagnostic - section of the Karaf User Guide.

http://git-wip-us.apache.org/repos/asf/karaf/blob/e55fd0a0/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 2a31628..68cd828 100644
--- a/pom.xml
+++ b/pom.xml
@@ -542,6 +542,12 @@
 
             <dependency>
                 <groupId>org.apache.karaf.diagnostic</groupId>
+                <artifactId>org.apache.karaf.diagnostic.boot</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.apache.karaf.diagnostic</groupId>
                 <artifactId>org.apache.karaf.diagnostic.core</artifactId>
                 <version>${project.version}</version>
             </dependency>

Reply via email to