/*******************************************************************************
* Copyright (c) 2010-2014 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.usage.internal.reporting;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import org.eclipse.core.runtime.IBundleGroup;
import org.eclipse.core.runtime.IBundleGroupProvider;
import org.eclipse.core.runtime.Platform;
/**
* @author Andre Dietisheim, Alexey Kazakov
*/
public class JBossToolsComponents {
/**
* The jboss tools features to check and report.
* <p>
* ATTENTION: the following features do not start with org.jboss.tools
* </p>
* <p>
* <ul>
* <li>org.hibernate.eclipse.feature</li>
* <li>org.jboss.ide.eclipse.freemarker.feature</li>
* <li>org.drools.eclipse.feature</li>
* <li>org.jboss.ide.eclipse.as.feature</li>
* <li>org.mozilla.xulrunner.feature</li>
* </ul>
* </p>
*
*/
public enum JBossToolsFeatureIdentifiers {
AEROGEAR("org.jboss.tools.aerogear.thym.feature", "org.jboss.tools.aerogear.thym"),
ARQUILLIAN("org.jboss.tools.arquillian.feature", "org.jboss.tools.arquillian.core"),
AS("org.jboss.ide.eclipse.as.feature", "org.jboss.ide.eclipse.as.core"),
//Archives is required by AS, will always show up.
//ARCHIVES("org.jboss.ide.eclipse.archives.feature", "org.jboss.ide.eclipse.archives.core"),
BIRT("org.jboss.tools.birt.feature", "org.jboss.tools.birt.core"),
BPEL("org.jboss.tools.bpel.feature", "org.jboss.tools.bpel.runtimes"),
BPMN2("org.eclipse.bpmn2.modeler", "org.eclipse.bpmn2.modeler.core"),
CDI("org.jboss.tools.cdi.feature", "org.jboss.tools.cdi.core"),
//We can detect central via the central event.
//CENTRAL("org.jboss.tools.central.feature", "org.jboss.tools.central"),
//Common is commong - will always be there part of something else.
//COMMON("org.jboss.tools.common.feature", "org.jboss.tools.common"),
//Delta cloud never really active.
//DELTACLOUD("org.jboss.tools.deltacloud.feature", "org.jboss.tools.deltacloud.core"),
DROOLS("org.drools.eclipse.feature", "org.drools.eclipse"),
ESB("org.jboss.tools.esb.feature", "org.jboss.tools.esb.core"),
//Examples is something installed together with others. Not informative to track on its own.
//EXAMPLES("org.jboss.tools.project.examples.feature", "org.jboss.tools.project.examples"),
FORGE("org.jboss.tools.forge.feature", "org.jboss.tools.forge.core"),
FUSE("org.fusesource.ide.camel.editor.feature", "org.fusesource.ide.camel.editor"),
FLOW("org.jboss.tools.flow.common.feature", "org.jboss.tools.flow.common"),
FREEMARKER("org.jboss.ide.eclipse.freemarker.feature", "org.jboss.ide.eclipse.freemarker"),
GWT("org.jboss.tools.gwt.feature", "org.jboss.tools.gwt.core"),
HIBERNATE("org.hibernate.eclipse.feature", "org.hibernate.eclipse"),
JBPM("org.jboss.tools.jbpm.common.feature", "org.jboss.tools.jbpm.common"),
//JMX is similar to archives, very unlikely installed on its own
//JMX("org.jboss.tools.jmx.feature", "org.jboss.tools.jmx.core"),
JSF("org.jboss.tools.jsf.feature", "org.jboss.tools.jsf"),
LIVERELOAD("org.jboss.tools.livereload.feature", "org.jboss.tools.livereload.core"),
MAVEN("org.jboss.tools.maven.feature", "org.jboss.tools.maven.core"),
MODESHAPE("org.jboss.tools.modeshape.rest.feature", "org.jboss.tools.modeshape.rest"),
OPENSHIFT("org.jboss.tools.openshift.express.feature", "org.jboss.tools.openshift.express.client"),
PORTLET("org.jboss.tools.portlet.feature", "org.jboss.tools.portlet.core"),
//Profiler was never really active.
//PROFILER("org.jboss.tools.profiler.feature", "org.jboss.tools.profiler.ui"),
RUNTIME("org.jboss.tools.runtime.feature", "org.jboss.tools.runtime.core"),
SEAM("org.jboss.tools.seam.feature", "org.jboss.tools.seam.core"),
SMOOKS("org.jboss.tools.smooks.feature", "org.jboss.tools.smooks.core"),
// Was until 28. August 2014 registered as SWTICHYARD
SY("org.switchyard.tools.feature", "org.switchyard.tools"),
TEIID("org.teiid.designer.feature", "org.teiid.core.designer"),
THYM("org.eclipse.thym.feature", "org.eclipse.thym.core"),
VPE("org.jboss.tools.vpe.feature", "org.jboss.tools.vpe"),
//Never really been active
//WORKINGSET("org.jboss.tools.workingset.feature", "org.jboss.tools.workingset.core"),
WS("org.jboss.tools.ws.feature", "org.jboss.tools.ws.core"), // includes jax-rs
XULRUNNER("org.mozilla.xulrunner.feature", "org.mozilla.xulrunner");
private String featureId;
private String pluginId;
JBossToolsFeatureIdentifiers(String featureIdentifier, String corePluginIdentifier) {
this.featureId = featureIdentifier;
this.pluginId = corePluginIdentifier;
}
public boolean corePluginInstalled() {
return Platform.getBundle(pluginId)!=null;
}
public String getComponentName() {
return name();
}
/**
* May return null
* @return
*/
public String getFeatureId() {
return featureId;
}
/**
* May return null
* @return
*/
public String getPluginId() {
return pluginId;
}
}
private JBossToolsComponents() {
// inhibit instantiation
}
/**
* Returns the jboss components that the given bundle group provider
* provides
*
* @param bundleGroupProviders
* the bundles group providers to check for jboss components
* @param bundleProvider
* an implementation that allows you to query for a bundle
* whether it's installed
*
* @return
*/
public static Collection<String> getComponentIds(IBundleGroupProvider[] bundleGroupProviders, IBundleProvider bundleProvider) {
Set<String> componentNames = new TreeSet<String>();
Map<String, String> features = new HashMap<String, String>();
for (JBossToolsFeatureIdentifiers identifier : JBossToolsFeatureIdentifiers.values()) {
if(identifier.featureId!=null) {
features.put(identifier.featureId, identifier.name());
}
if (identifier.pluginId!=null && bundleProvider.isInstalled(identifier.pluginId)) {
componentNames.add(identifier.name());
}
}
for (IBundleGroupProvider bundleGroupProvider : bundleGroupProviders) {
for (IBundleGroup group : bundleGroupProvider.getBundleGroups()) {
String name = features.get(group.getIdentifier());
if(name!=null) {
componentNames.add(name);
}
}
}
return componentNames;
}
/**
* An interface for classes that allow one to query for installable bundle(s).
*/
public interface IBundleProvider {
public boolean isInstalled(String symbolicName);
}
}