/*
* Copyright (C) 2014 Red Hat, Inc. and/or its affiliates.
*
* 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.jboss.errai.forge.constant;
import org.jboss.errai.forge.facet.base.AbstractBaseFacet;
import org.jboss.forge.addon.dependencies.Dependency;
import java.util.*;
/**
* @author Max Barkley <mbarkley@redhat.com>
*/
public final class ArtifactVault {
public static final String ERRAI_GROUP_ID = "org.jboss.errai";
/**
* An enumeration of Maven dependency artifacts used by various facets.
*
* @author Max Barkley <mbarkley@redhat.com>
*/
public static enum DependencyArtifact {
// Non-errai
GwtUser("gwt-user", "com.google.gwt"),
GwtDev("gwt-dev", "com.google.gwt"),
Guava("guava", "com.google.guava"),
GuavaGwt("guava-gwt", "com.google.guava"),
Hsq("hsqldb", "org.hsqldb"),
JUnit("junit", "junit"),
GwtSlf4j("gwt-slf4j", "de.benediktmeurer.gwt-slf4j"),
JavaxInject("javax.inject", "javax.inject"),
CdiApi("cdi-api", "javax.enterprise"),
Jetty("jetty", "org.mortbay.jetty"),
JettyPlus("jetty-plus", "org.mortbay.jetty"),
JettyNaming("jetty-naming", "org.mortbay.jetty"),
JsrApi("jsr250-api", "javax.annotation"),
JavaxValidation("validation-api", "javax.validation"),
JavaxValidationSources("validation-api", "javax.validation", "sources", null),
HibernateAnnotations("hibernate-commons-annotations", "org.hibernate.common"),
HibernateJpa("hibernate-jpa-2.1-api", "org.hibernate.javax.persistence"),
HibernateCore("hibernate-core", "org.hibernate"),
HibernateEntityManager("hibernate-entitymanager", "org.hibernate"),
HibernateValidator("hibernate-validator", "org.hibernate"),
HibernateValidatorSources("hibernate-validator", "org.hibernate", "sources", null),
JbossLogging("jboss-logging", "org.jboss.logging"),
JaxrsApi("jaxrs-api", "org.jboss.resteasy"),
JbossInterceptors("jboss-interceptors-api_1.1_spec", "org.jboss.spec.javax.interceptor"),
JbossTransaction("jboss-transaction-api_1.1_spec", "org.jboss.spec.javax.transaction"),
WildflyDist("wildfly-dist", "org.wildfly"),
WeldServletCore("weld-servlet-core", "org.jboss.weld.servlet"),
WeldSeCore("weld-se-core", "org.jboss.weld.se"),
WeldCore("weld-core", "org.jboss.weld"),
WeldApi("weld-api", "org.jboss.weld"),
WeldSpi("weld-spi", "org.jboss.weld"),
XmlApis("xml-apis", "xml-apis"),
RestEasyCdi("resteasy-cdi", "org.jboss.resteasy"),
// tests
GwtMockito("gwtmockito", "com.google.gwt.gwtmockito"),
// plugins
Clean("maven-clean-plugin", "org.apache.maven.plugins"),
Dependency("maven-dependency-plugin", "org.apache.maven.plugins"),
Compiler("maven-compiler-plugin", "org.apache.maven.plugins"),
GwtPlugin("gwt-maven-plugin", "org.codehaus.mojo"),
War("maven-war-plugin", "org.apache.maven.plugins"),
WildflyPlugin("wildfly-maven-plugin", "org.wildfly.plugins"),
Surefire("maven-surefire-plugin", "org.apache.maven.plugins"),
EclipseMavenPlugin("lifecycle-mapping", "org.eclipse.m2e"),
// errai
ErraiVersionMaster("errai-version-master", "org.jboss.errai.bom"),
ErraiBom("errai-bom", "org.jboss.errai.bom"),
ErraiParent("errai-parent"),
ErraiNetty("netty", "org.jboss.errai.io.netty"),
ErraiJboss("errai-cdi-jboss"),
JbossSupport("errai-jboss-as-support"),
ErraiCommon("errai-common"),
ErraiTools("errai-tools"),
ErraiBus("errai-bus"),
ErraiCdiClient("errai-cdi-client"),
ErraiCdiClientTest("errai-cdi-client", "org.jboss.errai", null, "test-jar"),
ErraiCdiServer("errai-cdi-server"),
ErraiCdiJetty("errai-cdi-jetty"),
ErraiCodegenGwt("errai-codegen-gwt"),
ErraiIoc("errai-ioc"),
ErraiDataBinding("errai-data-binding"),
ErraiJavaxEnterprise("errai-javax-enterprise"),
ErraiJaxrsClient("errai-jaxrs-client"),
ErraiJaxrsProvider("errai-jaxrs-provider"),
ErraiJpaClient("errai-jpa-client"),
ErraiJpaDatasync("errai-jpa-datasync"),
ErraiNavigation("errai-navigation"),
ErraiUi("errai-ui"),
ErraiCordova("errai-cordova"),
ErraiSecurityClient("errai-security-client"),
ErraiSecurityServer("errai-security-server"),
ErraiSecurityPicketlink("errai-security-picketlink"),
CordovaPlugin("cordova-maven-plugin"),
ErraiHtml5("errai-html5");
private final String artifactId;
private final String groupId;
private final String classifier;
private final String type;
private DependencyArtifact(final String artifactId, final String groupId, final String classifier, final String type) {
this.artifactId = artifactId;
this.groupId = groupId;
this.classifier = classifier;
this.type = type;
}
private DependencyArtifact(final String artifactId, final String groupId) {
this(artifactId, groupId, null, null);
}
private DependencyArtifact(final String id) {
this(id, ERRAI_GROUP_ID);
}
/**
* @return The artifact id of this dependency.
*/
public String getArtifactId() {
return artifactId;
}
/**
* @return The group id of this dependency.
*/
public String getGroupId() {
return groupId;
}
/**
* Returns the string {@code groupId} + ":" + {@code artifactId}.
*/
@Override
public String toString() {
return String.format("%s:%s", groupId, artifactId);
}
private static Map<String, DependencyArtifact> artifacts = new HashMap<String, ArtifactVault.DependencyArtifact>();
static {
for (final DependencyArtifact artifact : DependencyArtifact.values()) {
artifacts.put(artifact.getGroupId() + ":" + artifact.getArtifactId(), artifact);
}
}
/**
* Lookup a {@link DependencyArtifact} by the unique combination of it's
* group id and artifact id.
*/
public static DependencyArtifact valueOf(String groupId, String artifactId) {
return artifacts.get(groupId + ":" + artifactId);
}
public String getClassifier() {
return classifier;
}
public String getType() {
return type;
}
}
/**
* Blacklist of Maven dependencies which cannot be deployed in various
* profiles.
*/
private static final Map<String, Set<DependencyArtifact>> blacklist = new HashMap<String, Set<DependencyArtifact>>();
static {
// Wildfly/Jboss blacklist
blacklist.put(AbstractBaseFacet.MAIN_PROFILE, new HashSet<DependencyArtifact>());
final Set<DependencyArtifact> mainProfileBlacklist = blacklist.get(AbstractBaseFacet.MAIN_PROFILE);
mainProfileBlacklist.add(DependencyArtifact.ErraiTools);
mainProfileBlacklist.add(DependencyArtifact.ErraiSecurityClient);
mainProfileBlacklist.add(DependencyArtifact.ErraiJboss);
mainProfileBlacklist.add(DependencyArtifact.Hsq);
mainProfileBlacklist.add(DependencyArtifact.JUnit);
mainProfileBlacklist.add(DependencyArtifact.ErraiNetty);
mainProfileBlacklist.add(DependencyArtifact.GwtSlf4j);
mainProfileBlacklist.add(DependencyArtifact.ErraiCodegenGwt);
mainProfileBlacklist.add(DependencyArtifact.JavaxInject);
mainProfileBlacklist.add(DependencyArtifact.CdiApi);
mainProfileBlacklist.add(DependencyArtifact.ErraiCdiJetty);
mainProfileBlacklist.add(DependencyArtifact.GuavaGwt);
mainProfileBlacklist.add(DependencyArtifact.JsrApi);
mainProfileBlacklist.add(DependencyArtifact.JavaxValidation);
mainProfileBlacklist.add(DependencyArtifact.HibernateAnnotations);
mainProfileBlacklist.add(DependencyArtifact.HibernateJpa);
mainProfileBlacklist.add(DependencyArtifact.HibernateCore);
mainProfileBlacklist.add(DependencyArtifact.HibernateEntityManager);
mainProfileBlacklist.add(DependencyArtifact.HibernateValidator);
mainProfileBlacklist.add(DependencyArtifact.ErraiDataBinding);
mainProfileBlacklist.add(DependencyArtifact.ErraiJavaxEnterprise);
mainProfileBlacklist.add(DependencyArtifact.ErraiJaxrsClient);
mainProfileBlacklist.add(DependencyArtifact.ErraiJpaClient);
mainProfileBlacklist.add(DependencyArtifact.ErraiNavigation);
mainProfileBlacklist.add(DependencyArtifact.ErraiUi);
mainProfileBlacklist.add(DependencyArtifact.JbossLogging);
mainProfileBlacklist.add(DependencyArtifact.JaxrsApi);
mainProfileBlacklist.add(DependencyArtifact.JbossInterceptors);
mainProfileBlacklist.add(DependencyArtifact.JbossTransaction);
mainProfileBlacklist.add(DependencyArtifact.WeldServletCore);
mainProfileBlacklist.add(DependencyArtifact.WeldCore);
mainProfileBlacklist.add(DependencyArtifact.WeldApi);
mainProfileBlacklist.add(DependencyArtifact.WeldSpi);
mainProfileBlacklist.add(DependencyArtifact.XmlApis);
mainProfileBlacklist.add(DependencyArtifact.JettyNaming);
mainProfileBlacklist.add(DependencyArtifact.RestEasyCdi);
mainProfileBlacklist.add(DependencyArtifact.ErraiCordova);
mainProfileBlacklist.add(DependencyArtifact.ErraiHtml5);
// Source Dependencies
mainProfileBlacklist.add(DependencyArtifact.JavaxValidationSources);
mainProfileBlacklist.add(DependencyArtifact.HibernateValidatorSources);
}
public static boolean isBlacklisted(final String identifier) {
for (final String profile : blacklist.keySet()) {
if (blacklist.get(profile).contains(identifier))
return true;
}
return false;
}
public static boolean isBlacklisted(final Dependency dep) {
return isBlacklisted(dep.getCoordinate().getGroupId() + ":" + dep.getCoordinate().getArtifactId());
}
public static String getBlacklistedProfile(final String identifier) {
for (final String profile : blacklist.keySet()) {
if (blacklist.get(profile).contains(identifier))
return profile;
}
return null;
}
public static String getBlacklistedProfile(final Dependency dep) {
return getBlacklistedProfile(dep.getCoordinate().getGroupId() + ":" + dep.getCoordinate().getArtifactId());
}
public static Collection<String> getBlacklistProfiles() {
return blacklist.keySet();
}
public static Collection<DependencyArtifact> getBlacklistedArtifacts(final String profileId) {
final Set<DependencyArtifact> artifacts = blacklist.get(profileId);
return (artifacts != null ? artifacts : new ArrayList<DependencyArtifact>(0));
}
}