org.gradle.plugins.ide.eclipse.model.EclipseWtpFacet Maven / Gradle / Ivy
Show all versions of gradle-api Show documentation
/*
* Copyright 2011 the original author or authors.
*
* 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.gradle.plugins.ide.eclipse.model;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import groovy.lang.Closure;
import org.gradle.plugins.ide.api.XmlFileContentMerger;
import org.gradle.util.ConfigureUtil;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* Enables fine-tuning wtp facet details of the Eclipse plugin
*
* Advanced configuration closures beforeMerged and whenMerged receive {@link WtpFacet} object as parameter.
*
*
* apply plugin: 'war' //or 'ear' or 'java'
* apply plugin: 'eclipse-wtp'
*
* eclipse {
* wtp {
* facet {
* //you can add some extra wtp facets; mandatory keys: 'name', 'version':
* facet name: 'someCoolFacet', version: '1.3'
*
* file {
* //if you want to mess with the resulting XML in whatever way you fancy
* withXml {
* def node = it.asNode()
* node.appendNode('xml', 'is what I love')
* }
*
* //beforeMerged and whenMerged closures are the highest voodoo for the tricky edge cases.
* //the type passed to the closures is {@link WtpFacet}
*
* //closure executed after wtp facet file content is loaded from existing file
* //but before gradle build information is merged
* beforeMerged { wtpFacet ->
* //tinker with {@link WtpFacet} here
* }
*
* //closure executed after wtp facet file content is loaded from existing file
* //and after gradle build information is merged
* whenMerged { wtpFacet ->
* //you can tinker with the {@link WtpFacet} here
* }
* }
* }
* }
* }
*
*
*/
public class EclipseWtpFacet {
private final XmlFileContentMerger file;
private List facets = Lists.newArrayList();
public EclipseWtpFacet(XmlFileContentMerger file) {
this.file = file;
}
/**
* See {@link #file(Closure) }
*/
public XmlFileContentMerger getFile() {
return file;
}
/**
* Enables advanced configuration like tinkering with the output XML
* or affecting the way existing wtp facet file content is merged with gradle build information
*
* The object passed to whenMerged{} and beforeMerged{} closures is of type {@link WtpFacet}
*
*
* For example see docs for {@link EclipseWtpFacet}
*/
public void file(Closure closure) {
ConfigureUtil.configure(closure, file);
}
/**
* The facets to be added as elements.
*
* For examples see docs for {@link EclipseWtpFacet}
*/
public List getFacets() {
return facets;
}
public void setFacets(List facets) {
this.facets = facets;
}
/**
* Adds a facet.
*
* For examples see docs for {@link EclipseWtpFacet}
*
* @param args A map that must contain a 'name' and 'version' key with corresponding values.
*/
public void facet(Map args) {
facets = Lists.newArrayList(Iterables.concat(
getFacets(),
Collections.singleton(ConfigureUtil.configureByMap(args, new Facet()))
));
}
public void mergeXmlFacet(WtpFacet xmlFacet) {
file.getBeforeMerged().execute(xmlFacet);
xmlFacet.configure(getFacets());
file.getWhenMerged().execute(xmlFacet);
}
}