/*
* Copyright 2010 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.api.publication.maven.internal;
import groovy.lang.Closure;
import org.codehaus.groovy.runtime.DefaultGroovyMethods;
import org.gradle.api.InvalidUserDataException;
import org.gradle.api.artifacts.maven.MavenPom;
import org.gradle.api.artifacts.maven.PomFilterContainer;
import org.gradle.api.artifacts.maven.PublishFilter;
import org.gradle.internal.Factory;
import org.gradle.util.ConfigureUtil;
import org.gradle.util.WrapUtil;
import java.util.HashMap;
import java.util.Map;
public class BasePomFilterContainer implements PomFilterContainer {
private Map<String, PomFilter> pomFilters = new HashMap<String, PomFilter>();
private PomFilter defaultPomFilter;
private Factory<MavenPom> mavenPomFactory;
public BasePomFilterContainer(Factory<MavenPom> mavenPomFactory) {
this.mavenPomFactory = mavenPomFactory;
}
public PublishFilter getFilter() {
return getDefaultPomFilter().getFilter();
}
public void setFilter(PublishFilter defaultFilter) {
getDefaultPomFilter().setFilter(defaultFilter);
}
public MavenPom getPom() {
return getDefaultPomFilter().getPomTemplate();
}
public void setPom(MavenPom defaultPom) {
getDefaultPomFilter().setPomTemplate(defaultPom);
}
public void filter(Closure filter) {
setFilter(toFilter(filter));
}
public MavenPom addFilter(String name, Closure filter) {
return addFilter(name, toFilter(filter));
}
private PublishFilter toFilter(final Closure filter) {
return (PublishFilter) DefaultGroovyMethods.asType(filter, PublishFilter.class);
}
public MavenPom pom(Closure configureClosure) {
return ConfigureUtil.configure(configureClosure, getPom());
}
public MavenPom pom(String name, Closure configureClosure) {
return ConfigureUtil.configure(configureClosure, pom(name));
}
public MavenPom addFilter(String name, PublishFilter publishFilter) {
if (name == null || publishFilter == null) {
throw new InvalidUserDataException("Name and Filter must not be null.");
}
MavenPom pom = mavenPomFactory.create();
pomFilters.put(name, new DefaultPomFilter(name, pom, publishFilter));
return pom;
}
public PublishFilter filter(String name) {
if (name == null) {
throw new InvalidUserDataException("Name must not be null.");
}
return pomFilters.get(name).getFilter();
}
public MavenPom pom(String name) {
if (name == null) {
throw new InvalidUserDataException("Name must not be null.");
}
return pomFilters.get(name).getPomTemplate();
}
public Iterable<PomFilter> getActivePomFilters() {
Iterable<PomFilter> activeArtifactPoms;
if (pomFilters.size() == 0 && getDefaultPomFilter() != null) {
activeArtifactPoms = WrapUtil.toSet(getDefaultPomFilter());
} else {
activeArtifactPoms = pomFilters.values();
}
return activeArtifactPoms;
}
public Factory<MavenPom> getMavenPomFactory() {
return mavenPomFactory;
}
public PomFilter getDefaultPomFilter() {
if (defaultPomFilter == null) {
defaultPomFilter = new DefaultPomFilter(PomFilterContainer.DEFAULT_ARTIFACT_POM_NAME, mavenPomFactory.create(),
PublishFilter.ALWAYS_ACCEPT);
}
return defaultPomFilter;
}
public void setDefaultPomFilter(PomFilter defaultPomFilter) {
this.defaultPomFilter = defaultPomFilter;
}
public Map<String, PomFilter> getPomFilters() {
return pomFilters;
}
protected BasePomFilterContainer newInstance() {
return new BasePomFilterContainer(mavenPomFactory);
}
}