/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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.apache.ivy.ant; import org.apache.ivy.Ivy; import org.apache.ivy.core.IvyPatternHelper; import org.apache.ivy.core.module.id.ModuleRevisionId; import org.apache.ivy.core.search.SearchEngine; import org.apache.ivy.core.settings.IvySettings; import org.apache.ivy.plugins.matcher.PatternMatcher; import org.apache.ivy.plugins.resolver.DependencyResolver; import org.apache.tools.ant.BuildException; /** * Look for modules in the repository matching the given criteria, and sets a set of properties * according to what was found. */ public class IvyListModules extends IvyTask { private String organisation; private String module; private String branch = PatternMatcher.ANY_EXPRESSION; private String revision; private String matcher = PatternMatcher.EXACT_OR_REGEXP; private String property; private String value; private String resolver; public String getMatcher() { return matcher; } public void setMatcher(String matcher) { this.matcher = matcher; } public String getModule() { return module; } public void setModule(String module) { this.module = module; } public String getProperty() { return property; } public void setProperty(String name) { this.property = name; } public String getOrganisation() { return organisation; } public void setOrganisation(String organisation) { this.organisation = organisation; } public String getRevision() { return revision; } public void setRevision(String revision) { this.revision = revision; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getBranch() { return branch; } public void setBranch(String branch) { this.branch = branch; } public void setResolver(String resolver) { this.resolver = resolver; } public String getResolver() { return resolver; } public void doExecute() throws BuildException { if (organisation == null) { throw new BuildException("no organisation provided for ivy listmodules task"); } if (module == null) { throw new BuildException("no module name provided for ivy listmodules task"); } if (revision == null) { throw new BuildException("no revision provided for ivy listmodules task"); } if (property == null) { throw new BuildException("no property provided for ivy listmodules task"); } if (value == null) { throw new BuildException("no value provided for ivy listmodules task"); } Ivy ivy = getIvyInstance(); IvySettings settings = ivy.getSettings(); SearchEngine searcher = new SearchEngine(settings); PatternMatcher patternMatcher = settings.getMatcher(matcher); ModuleRevisionId[] mrids; if (resolver == null) { mrids = searcher.listModules( ModuleRevisionId.newInstance(organisation, module, branch, revision), patternMatcher); } else { DependencyResolver depResolver = settings.getResolver(resolver); if (depResolver == null) { throw new BuildException("Unknown resolver: " + resolver); } mrids = searcher.listModules(depResolver, ModuleRevisionId.newInstance(organisation, module, branch, revision), patternMatcher); } for (int i = 0; i < mrids.length; i++) { String name = IvyPatternHelper.substitute(settings.substitute(property), mrids[i]); String value = IvyPatternHelper.substitute(settings.substitute(this.value), mrids[i]); getProject().setProperty(name, value); } } }