/*
* 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.facet.aggregate;
import org.jboss.errai.forge.config.ProjectConfig;
import org.jboss.errai.forge.config.ProjectProperty;
import org.jboss.errai.forge.facet.base.CoreBuildFacet;
import org.jboss.errai.forge.facet.dependency.ErraiBuildDependencyFacet;
import org.jboss.errai.forge.facet.module.ModuleCoreFacet;
import org.jboss.errai.forge.facet.plugin.*;
import org.jboss.errai.forge.facet.resource.ErraiAppPropertiesFacet;
import org.jboss.forge.addon.facets.FacetFactory;
import org.jboss.forge.addon.facets.constraints.FacetConstraint;
import org.jboss.forge.addon.projects.ProjectFacet;
import javax.inject.Inject;
/**
* Aggregates core facets required by all other facet aggregators. Installing
* this facet will add all the necessary dependencies, profile, and plugin
* configurations to run a GWT/Errai project in development mode or compile to
* production mode.
*
* @author Max Barkley <mbarkley@redhat.com>
*/
@FacetConstraint({ ErraiBuildDependencyFacet.class, ProjectConfig.class, CoreBuildFacet.class })
public class CoreFacet extends BaseAggregatorFacet {
@Inject
private FacetFactory facetFactory;
/*
* These core facets cannot be FacetConstraints because we want users to be
* able to modify maven plugin configurations after running errai-setup
* (ERRAI-715).
*/
@SuppressWarnings({ "unchecked" })
public static final Class<? extends ProjectFacet>[] coreFacets = new Class[] {
CleanPluginFacet.class, CompilerPluginFacet.class, DependencyPluginFacet.class, GwtPluginFacet.class,
WildflyPluginFacet.class, WarPluginFacet.class, ModuleCoreFacet.class, ErraiAppPropertiesFacet.class };
@Override
public String getFeatureName() {
return "Errai Build Setup";
}
@Override
public String getFeatureDescription() {
return "The core build setup required for running development mode or compiling for deployment.";
}
@Override
public String getShortName() {
return "core";
}
@Override
public boolean install() {
boolean installWasSuccessful = true;
for (int i = 0; i < coreFacets.length && installWasSuccessful; i++) {
try {
facetFactory.install(getProject(), coreFacets[i]);
}
catch (IllegalStateException e) {
installWasSuccessful = false;
}
}
if (installWasSuccessful) {
getProject().getFacet(ProjectConfig.class).setProjectProperty(ProjectProperty.CORE_IS_INSTALLED, true);
}
return installWasSuccessful;
}
@Override
public boolean isInstalled() {
if (!getProject().hasFacet(ProjectConfig.class))
return false;
final Boolean isCoreInstalled = getProject().getFacet(ProjectConfig.class).getProjectProperty(
ProjectProperty.CORE_IS_INSTALLED, Boolean.class);
return isCoreInstalled != null && isCoreInstalled;
}
}