/*
* JBoss, Home of Professional Open Source
* Copyright 2011, Red Hat, Inc., and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.forge.validation;
import java.io.File;
import org.jboss.forge.project.dependencies.Dependency;
import org.jboss.forge.project.dependencies.DependencyBuilder;
import org.jboss.forge.project.facets.BaseFacet;
import org.jboss.forge.project.facets.DependencyFacet;
import org.jboss.forge.project.facets.ResourceFacet;
import org.jboss.forge.resources.FileResource;
import org.jboss.forge.shell.plugins.Alias;
import org.jboss.forge.shell.plugins.RequiresFacet;
import org.jboss.forge.validation.api.ValidationDescriptor;
import org.jboss.forge.validation.api.ValidationFacet;
import org.jboss.shrinkwrap.descriptor.api.DescriptorImporter;
import org.jboss.shrinkwrap.descriptor.api.Descriptors;
import static org.jboss.forge.project.dependencies.ScopeType.PROVIDED;
/**
* @author Kevin Pollet
*/
@Alias("forge.spec.validation")
@RequiresFacet({ResourceFacet.class, DependencyFacet.class})
public class ValidationFacetImpl extends BaseFacet implements ValidationFacet
{
private final Dependency javaee6SpecAPI;
public ValidationFacetImpl()
{
this.javaee6SpecAPI = DependencyBuilder.create()
.setGroupId("org.jboss.spec")
.setArtifactId("jboss-javaee-6.0")
.setVersion("1.0.0.Final")
.setScopeType(PROVIDED);
}
@Override
public ValidationDescriptor getConfig()
{
final FileResource<?> fileResource = getConfigFile();
if (!fileResource.exists())
{
final DescriptorImporter<ValidationDescriptor> importer = Descriptors.importAs(ValidationDescriptor.class);
return importer.from(getConfigFile().getResourceInputStream());
}
return null;
}
@Override
public FileResource<?> getConfigFile()
{
final ResourceFacet facet = project.getFacet(ResourceFacet.class);
return facet.getResource("META-INF" + File.separator + "validation.xml");
}
@Override
public void saveConfig(ValidationDescriptor descriptor)
{
final FileResource<?> fileResource = getConfigFile();
fileResource.createNewFile();
fileResource.setContents(descriptor.exportAsString());
}
@Override
public boolean install()
{
if (!isInstalled())
{
final DependencyFacet facet = project.getFacet(DependencyFacet.class);
if (!facet.hasDependency(javaee6SpecAPI))
{
facet.addDependency(javaee6SpecAPI);
}
saveConfig(Descriptors.create(ValidationDescriptor.class));
}
return true;
}
@Override
public boolean isInstalled()
{
final DependencyFacet facet = project.getFacet(DependencyFacet.class);
return getConfigFile().exists() && facet.hasDependency(javaee6SpecAPI);
}
}