package com.redhat.ceylon.ant; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import com.redhat.ceylon.common.config.CeylonConfig; import com.redhat.ceylon.common.config.Credentials; import com.redhat.ceylon.common.config.Repositories; import com.redhat.ceylon.common.config.Repositories.Repository; public class CeylonConfigRepositoryAntTask extends CeylonConfigBaseTask { public enum Type { system, output, cache, lookup, global, remote, other } public enum Key { name, url, user, password, keystore, alias } private String name; private Type type; private Key key; private String property; public String getName() { return name; } public void setName(String name) { this.name = name; } public Type getType() { return type; } public void setType(Type type) { this.type = type; } public Key getKey() { return key; } public void setKey(Key key) { this.key = key; } public String getProperty() { return property; } public void setProperty(String property) { this.property = property; } @Override public void execute() throws BuildException { Java7Checker.check(); if (name == null && type == null) { throw new BuildException("Either the 'name' or 'type' attribute has to be specified for 'ceylon-config-repository'"); } if (name != null && type != null) { throw new BuildException("The 'name' and 'type' attributes cannot both be specified for 'ceylon-config-repository'"); } if (key == null) { throw new BuildException("'key' is a required attribute for 'ceylon-config-repository'"); } if (property == null) { throw new BuildException("'property' is a required attribute for 'ceylon-config-value'"); } CeylonConfig config = getConfig(); Repositories reps = Repositories.withConfig(config); Repository rep; String repdesc; if (name != null) { rep = reps.getRepository(name); repdesc = "of name '" + name + "'"; } else { rep = reps.getRepositoryByTypeWithDefaults(type.name()); repdesc = "of type '" + type.name() + "'"; } if (rep != null) { String value = null; switch (key) { case name: value = rep.getName(); break; case url: value = rep.getUrl(); break; default: Credentials cred = rep.getCredentials(); if (cred != null) { switch (key) { case user: value = cred.getUser(); break; case password: value = cred.getPassword(); break; case keystore: value = cred.getKeystore(); break; case alias: value = cred.getAlias(); break; default: // Won't happen } } else { log("No credentials found for repository " + repdesc, Project.MSG_WARN); } } if (value != null) { setProjectProperty(property, value); } } else { log("Repository " + repdesc + " not found", Project.MSG_WARN); } } }