You are viewing a plain text version of this content. The canonical link for it is here.
Posted to easyant-commits@incubator.apache.org by jl...@apache.org on 2012/10/31 08:30:55 UTC
svn commit: r1404027 - in /incubator/easyant/core/trunk/src:
main/java/org/apache/easyant/core/descriptor/
main/java/org/apache/easyant/core/parser/
main/java/org/apache/easyant/tasks/ main/resources/org/apache/easyant/
test/java/org/apache/easyant/cor...
Author: jlboudart
Date: Wed Oct 31 08:30:54 2012
New Revision: 1404027
URL: http://svn.apache.org/viewvc?rev=1404027&view=rev
Log:
add a new easyant element : configure-project
this new element can define for the moment defaulttarget / basedir
Modified:
incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/descriptor/DefaultEasyAntDescriptor.java
incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/descriptor/EasyAntModuleDescriptor.java
incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/parser/DefaultEasyAntXmlModuleDescriptorParser.java
incubator/easyant/core/trunk/src/main/java/org/apache/easyant/tasks/LoadModule.java
incubator/easyant/core/trunk/src/main/resources/org/apache/easyant/antlib.xml
incubator/easyant/core/trunk/src/test/java/org/apache/easyant/core/PropertiesAsAttributesTest.java
incubator/easyant/core/trunk/src/test/resources/org/apache/easyant/core/propertiesAsAttributes.ivy
Modified: incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/descriptor/DefaultEasyAntDescriptor.java
URL: http://svn.apache.org/viewvc/incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/descriptor/DefaultEasyAntDescriptor.java?rev=1404027&r1=1404026&r2=1404027&view=diff
==============================================================================
--- incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/descriptor/DefaultEasyAntDescriptor.java (original)
+++ incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/descriptor/DefaultEasyAntDescriptor.java Wed Oct 31 08:30:54 2012
@@ -45,6 +45,8 @@ public class DefaultEasyAntDescriptor im
private List<ExtensionPointMappingDescriptor> extensionPointsMappings;
+ private ConfigureProjectDescriptor configureProjectDescriptor;
+
public PluginDescriptor getBuildType() {
return buildType;
}
@@ -106,4 +108,11 @@ public class DefaultEasyAntDescriptor im
this.extensionPointsMappings.add(extensionPointMappingDescriptor);
}
+ public ConfigureProjectDescriptor getConfigureProjectDescriptor() {
+ return configureProjectDescriptor;
+ }
+
+ public void setConfigureProjectDescriptor(ConfigureProjectDescriptor configureProjectDescriptor) {
+ this.configureProjectDescriptor = configureProjectDescriptor;
+ }
}
Modified: incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/descriptor/EasyAntModuleDescriptor.java
URL: http://svn.apache.org/viewvc/incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/descriptor/EasyAntModuleDescriptor.java?rev=1404027&r1=1404026&r2=1404027&view=diff
==============================================================================
--- incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/descriptor/EasyAntModuleDescriptor.java (original)
+++ incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/descriptor/EasyAntModuleDescriptor.java Wed Oct 31 08:30:54 2012
@@ -115,4 +115,18 @@ public interface EasyAntModuleDescriptor
*/
public void addExtensionPointMapping(ExtensionPointMappingDescriptor extensionPointMappingDescriptor);
-}
+ /**
+ * Get configure project descriptor (defining basedir/defaulttarget etc...)
+ *
+ * @return a {@link ConfigureProjectDescriptor}
+ */
+ public ConfigureProjectDescriptor getConfigureProjectDescriptor();
+
+ /**
+ * Set configure project descriptor (defining basedir/defaulttarget etc...)
+ *
+ * @param configureProjectDescriptor
+ * a {@link ConfigureProjectDescriptor}
+ */
+ public void setConfigureProjectDescriptor(ConfigureProjectDescriptor configureProjectDescriptor);
+}
\ No newline at end of file
Modified: incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/parser/DefaultEasyAntXmlModuleDescriptorParser.java
URL: http://svn.apache.org/viewvc/incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/parser/DefaultEasyAntXmlModuleDescriptorParser.java?rev=1404027&r1=1404026&r2=1404027&view=diff
==============================================================================
--- incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/parser/DefaultEasyAntXmlModuleDescriptorParser.java (original)
+++ incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/parser/DefaultEasyAntXmlModuleDescriptorParser.java Wed Oct 31 08:30:54 2012
@@ -30,6 +30,7 @@ import java.util.Map.Entry;
import org.apache.easyant.core.EasyAntConstants;
import org.apache.easyant.core.descriptor.AdvancedInheritableItem;
+import org.apache.easyant.core.descriptor.ConfigureProjectDescriptor;
import org.apache.easyant.core.descriptor.DefaultEasyAntDescriptor;
import org.apache.easyant.core.descriptor.EasyAntModuleDescriptor;
import org.apache.easyant.core.descriptor.ExtensionPointMappingDescriptor;
@@ -99,7 +100,7 @@ public class DefaultEasyAntXmlModuleDesc
}
private enum EasyAntState {
- NONE, EASYANT, PLUGIN, PLUGIN_DEPENDENCY
+ NONE, BUILDTYPE, PLUGIN, PLUGIN_DEPENDENCY, CONFIGURE_PROJECT
}
public class EasyAntParser extends Parser {
@@ -134,6 +135,12 @@ public class DefaultEasyAntXmlModuleDesc
if (name.equals(easyantPrefix + ":bindtarget") && State.EXTRA_INFO == getState()) {
bindTargetStarted(attributes);
}
+ if (name.equals(easyantPrefix + ":configure-project") && State.EXTRA_INFO == getState()) {
+ if (easyAntState != EasyAntState.NONE) {
+ throw new SAXException("configure-project is not supported as a nested element");
+ }
+ configureProjectStarted(attributes);
+ }
if (name.equals(easyantPrefix + ":dependency") && easyAntState == EasyAntState.PLUGIN) {
pluginDependencyStarted(attributes);
@@ -169,6 +176,10 @@ public class DefaultEasyAntXmlModuleDesc
if (name.equals(easyantPrefix + ":dependency") && easyAntState == EasyAntState.PLUGIN_DEPENDENCY) {
endPluginDependency();
}
+
+ if (name.equals(easyantPrefix + ":configure-project") && easyAntState == EasyAntState.CONFIGURE_PROJECT) {
+ easyAntState = EasyAntState.NONE;
+ }
}
protected void endPlugin() {
@@ -193,7 +204,6 @@ public class DefaultEasyAntXmlModuleDesc
easyantPrefix = (String) namespace.getKey();
}
}
-
}
@Override
@@ -214,6 +224,25 @@ public class DefaultEasyAntXmlModuleDesc
}
/**
+ * Parses configure-project tag
+ *
+ * @param attributes
+ * represents configure project attributes
+ */
+ protected void configureProjectStarted(Attributes attributes) {
+ easyAntState = EasyAntState.CONFIGURE_PROJECT;
+ ConfigureProjectDescriptor configureProjectDescriptor = new ConfigureProjectDescriptor();
+ String basedir = getSettings().substitute(attributes.getValue("basedir"));
+ String defaultTarget = getSettings().substitute(attributes.getValue("defaulttarget"));
+ configureProjectDescriptor.setBasedir(basedir);
+ configureProjectDescriptor.setDefaultTarget(defaultTarget);
+ handlePropertyAsAttribute(attributes, Arrays.asList("basedir", "defaulttarget"),
+ configureProjectDescriptor, null);
+ handleInheritedScopeAttribute(attributes, configureProjectDescriptor);
+ easyAntModuleDescriptor.setConfigureProjectDescriptor(configureProjectDescriptor);
+ }
+
+ /**
* Parsing the plugin tag
*
* @param attributes
@@ -243,7 +272,7 @@ public class DefaultEasyAntXmlModuleDesc
* reprensents the easyant attributes
*/
protected void eaBuildStarted(Attributes attributes) {
- easyAntState = EasyAntState.EASYANT;
+ easyAntState = EasyAntState.BUILDTYPE;
PluginDescriptor buildtype = handleCommonPluginDescriptorAttributes(attributes, PluginType.BUILDTYPE);
// a build type cannot be skipped
buildtype.setMandatory(true);
@@ -291,7 +320,7 @@ public class DefaultEasyAntXmlModuleDesc
pluginDescriptor.setMode(getSettings().substitute(attributes.getValue("mode")));
pluginDescriptor.setAs(getSettings().substitute(attributes.getValue("as")));
- handlePropertyAsAttribute(attributes, conf);
+ handlePropertyAsAttribute(attributes, Arrays.asList(PLUGIN_REGULAR_ATTRIBUTES), pluginDescriptor, conf);
return pluginDescriptor;
}
@@ -374,19 +403,27 @@ public class DefaultEasyAntXmlModuleDesc
*
* @param attributes
* a set of attributes
- * @param conf
+ * @param ignoredAttributes
+ * a list of ignored attributes
+ * @param parentNode
+ * parent node used to apply some attributes to subelements (can be null)
+ * @param buildConf
* build configurations where this property should be applied (can be null)
+ *
*/
- protected void handlePropertyAsAttribute(Attributes attributes, String conf) {
- List<String> ignored = Arrays.asList(PLUGIN_REGULAR_ATTRIBUTES);
+ private void handlePropertyAsAttribute(Attributes attributes, List<String> ignoredAttributes,
+ AdvancedInheritableItem parentNode, String buildConf) {
for (int i = 0; i < attributes.getLength(); i++) {
- if (!ignored.contains(attributes.getQName(i))) {
+ if (!ignoredAttributes.contains(attributes.getQName(i))) {
String propertyName = attributes.getQName(i);
String value = IvyContext.getContext().getSettings().substitute(attributes.getValue(i));
PropertyDescriptor property = new PropertyDescriptor(propertyName);
property.setValue(value);
- property.setBuildConfigurations(conf);
- applyInheritableItemAttributesFromPlugin(property);
+ property.setBuildConfigurations(buildConf);
+ if (parentNode != null) {
+ property.setInheritScope(parentNode.getInheritScope());
+ property.setInheritable(parentNode.isInheritable());
+ }
easyAntModuleDescriptor.getProperties().put(propertyName, property);
}
}
@@ -487,7 +524,7 @@ public class DefaultEasyAntXmlModuleDesc
property.setValue(value);
property.setBuildConfigurations(conf);
- applyInheritableItemAttributesFromPlugin(property);
+ applyInheritableItemAttributesFromParentNode(property);
// override with explicit inherited scope attributes
handleInheritedScopeAttribute(attributes, property);
@@ -506,7 +543,7 @@ public class DefaultEasyAntXmlModuleDesc
property.setValue(value);
property.setBuildConfigurations(conf);
- applyInheritableItemAttributesFromPlugin(property);
+ applyInheritableItemAttributesFromParentNode(property);
// override with explicit inherited scope attributes
handleInheritedScopeAttribute(attributes, property);
@@ -517,12 +554,19 @@ public class DefaultEasyAntXmlModuleDesc
/**
* Apply {@link AdvancedInheritableItem} attributes from current plugin
*
- * @param property
+ * @param currentItem
*/
- private void applyInheritableItemAttributesFromPlugin(PropertyDescriptor property) {
- if (EasyAntState.PLUGIN == easyAntState) {
- property.setInheritable(currentPluginDescriptor.isInheritable());
- property.setInheritScope(currentPluginDescriptor.getInheritScope());
+ private void applyInheritableItemAttributesFromParentNode(AdvancedInheritableItem currentItem) {
+ AdvancedInheritableItem parentNode = null;
+ if (easyAntState == EasyAntState.PLUGIN) {
+ parentNode = currentPluginDescriptor;
+ } else if (easyAntState == EasyAntState.CONFIGURE_PROJECT) {
+ parentNode = easyAntModuleDescriptor.getConfigureProjectDescriptor();
+ }
+
+ if (parentNode != null) {
+ currentItem.setInheritable(parentNode.isInheritable());
+ currentItem.setInheritScope(parentNode.getInheritScope());
}
}
@@ -540,6 +584,7 @@ public class DefaultEasyAntXmlModuleDesc
mergeEasyantProperties(parser.getEasyAntModuleDescriptor().getProperties());
mergeEasyantPlugins(parser.getEasyAntModuleDescriptor().getPlugins());
mergeBindTargets(parser.getEasyAntModuleDescriptor().getExtensionPointsMappings());
+ mergeConfigureProject(parser.getEasyAntModuleDescriptor().getConfigureProjectDescriptor());
}
}
@@ -568,6 +613,9 @@ public class DefaultEasyAntXmlModuleDesc
if (extendTypes.contains("bindtarget")) {
mergeBindTargets(parser.getEasyAntModuleDescriptor().getExtensionPointsMappings());
}
+ if (extendTypes.contains("configure-project")) {
+ mergeConfigureProject(parser.getEasyAntModuleDescriptor().getConfigureProjectDescriptor());
+ }
}
}
@@ -631,6 +679,31 @@ public class DefaultEasyAntXmlModuleDesc
}
/**
+ * Merge configure project
+ *
+ * @param configureProjectDescriptor
+ * {@link ConfigureProjectDescriptor} that will be merged with current one
+ */
+ protected void mergeConfigureProject(ConfigureProjectDescriptor configureProjectDescriptor) {
+ if (configureProjectDescriptor != null && configureProjectDescriptor.isInheritable()) {
+ StringBuilder sb = new StringBuilder("Merging configure project : ");
+ sb.append(configureProjectDescriptor.toString());
+ if (configureProjectDescriptor.getSourceModule() != null) {
+ sb.append(" from ").append(configureProjectDescriptor.getSourceModule().toString());
+ }
+ Message.debug(sb.toString());
+
+ ConfigureProjectDescriptor currentDescriptor = easyAntModuleDescriptor.getConfigureProjectDescriptor();
+ if (currentDescriptor == null) {
+ currentDescriptor = new ConfigureProjectDescriptor();
+ easyAntModuleDescriptor.setConfigureProjectDescriptor(configureProjectDescriptor);
+ }
+ currentDescriptor.setDefaultTarget(configureProjectDescriptor.getDefaultTarget());
+ }
+
+ }
+
+ /**
* Get the default parent location
*
* @return a string that represents the default parent location
Modified: incubator/easyant/core/trunk/src/main/java/org/apache/easyant/tasks/LoadModule.java
URL: http://svn.apache.org/viewvc/incubator/easyant/core/trunk/src/main/java/org/apache/easyant/tasks/LoadModule.java?rev=1404027&r1=1404026&r2=1404027&view=diff
==============================================================================
--- incubator/easyant/core/trunk/src/main/java/org/apache/easyant/tasks/LoadModule.java (original)
+++ incubator/easyant/core/trunk/src/main/java/org/apache/easyant/tasks/LoadModule.java Wed Oct 31 08:30:54 2012
@@ -28,6 +28,7 @@ import org.apache.easyant.core.BuildConf
import org.apache.easyant.core.EasyAntConstants;
import org.apache.easyant.core.EasyAntMagicNames;
import org.apache.easyant.core.descriptor.AdvancedInheritableItem;
+import org.apache.easyant.core.descriptor.ConfigureProjectDescriptor;
import org.apache.easyant.core.descriptor.EasyAntModuleDescriptor;
import org.apache.easyant.core.descriptor.ExtensionPointMappingDescriptor;
import org.apache.easyant.core.descriptor.PluginDescriptor;
@@ -283,6 +284,16 @@ public class LoadModule extends Abstract
initTask(propTask).execute();
}
}
+ if (md.getConfigureProjectDescriptor() != null) {
+ ConfigureProjectDescriptor descriptor = md.getConfigureProjectDescriptor();
+ ConfigureProject configureProject = new ConfigureProject();
+ configureProject.setDefaultTarget(descriptor.getDefaultTarget());
+ configureProject.setBasedir(descriptor.getBasedir());
+ configureProject.setTaskType("antlib:org.apache.easyant:configure-project");
+ getOwningTarget().addTask(configureProject);
+ initTask(configureProject).execute();
+ }
+
if (md.getBuildType() != null) {
if (canInherit(md.getBuildType(), currentModule)) {
Import importTask = new Import();
@@ -385,7 +396,7 @@ public class LoadModule extends Abstract
ModuleDescriptorParser mdp = null;
EasyAntModuleDescriptorParser parser = null;
try {
- mdp = ModuleDescriptorParserRegistry.getInstance().getParser(new URLResource(file.toURL()));
+ mdp = ModuleDescriptorParserRegistry.getInstance().getParser(new URLResource(file.toURI().toURL()));
} catch (MalformedURLException e) {
throw new BuildException("Impossible to find a parser for " + file.getName());
}
Modified: incubator/easyant/core/trunk/src/main/resources/org/apache/easyant/antlib.xml
URL: http://svn.apache.org/viewvc/incubator/easyant/core/trunk/src/main/resources/org/apache/easyant/antlib.xml?rev=1404027&r1=1404026&r2=1404027&view=diff
==============================================================================
--- incubator/easyant/core/trunk/src/main/resources/org/apache/easyant/antlib.xml (original)
+++ incubator/easyant/core/trunk/src/main/resources/org/apache/easyant/antlib.xml Wed Oct 31 08:30:54 2012
@@ -30,6 +30,8 @@
<taskdef name="searchmodule" classname="org.apache.easyant.tasks.SearchModule"/>
<taskdef name="configure-build-scoped-repository" classname="org.apache.easyant.tasks.ConfigureBuildScopedRepository"/>
+ <taskdef name="configure-project" classname="org.apache.easyant.tasks.ConfigureProject"/>
+
<taskdef name="findclasspath" classname="org.apache.easyant.tasks.findclasspath.FindClasspathTask"/>
<typedef name="environment-strategy" classname="org.apache.easyant.tasks.findclasspath.EnvironmentStrategy"/>
Modified: incubator/easyant/core/trunk/src/test/java/org/apache/easyant/core/PropertiesAsAttributesTest.java
URL: http://svn.apache.org/viewvc/incubator/easyant/core/trunk/src/test/java/org/apache/easyant/core/PropertiesAsAttributesTest.java?rev=1404027&r1=1404026&r2=1404027&view=diff
==============================================================================
--- incubator/easyant/core/trunk/src/test/java/org/apache/easyant/core/PropertiesAsAttributesTest.java (original)
+++ incubator/easyant/core/trunk/src/test/java/org/apache/easyant/core/PropertiesAsAttributesTest.java Wed Oct 31 08:30:54 2012
@@ -17,6 +17,8 @@
*/
package org.apache.easyant.core;
+import junit.framework.Assert;
+
import org.apache.tools.ant.Project;
import org.junit.Before;
import org.junit.Test;
@@ -44,6 +46,12 @@ public class PropertiesAsAttributesTest
}
@Test
+ public void shouldHandlePropertiesInConfigureProject() {
+ Assert.assertEquals("package", project.getDefaultTarget());
+ assertPropertyEquals("my.property.inconfigureproject", "true");
+ }
+
+ @Test
public void shouldHandlePropertiesInBuildConfiguration() {
conf.getActiveBuildConfigurations().add("myBuild");
Modified: incubator/easyant/core/trunk/src/test/resources/org/apache/easyant/core/propertiesAsAttributes.ivy
URL: http://svn.apache.org/viewvc/incubator/easyant/core/trunk/src/test/resources/org/apache/easyant/core/propertiesAsAttributes.ivy?rev=1404027&r1=1404026&r2=1404027&view=diff
==============================================================================
--- incubator/easyant/core/trunk/src/test/resources/org/apache/easyant/core/propertiesAsAttributes.ivy (original)
+++ incubator/easyant/core/trunk/src/test/resources/org/apache/easyant/core/propertiesAsAttributes.ivy Wed Oct 31 08:30:54 2012
@@ -19,7 +19,7 @@
<ea:build mrid="org.apache.easyant.buildtypes#build-std-java;0.9" my.property.inbuildtype="true"/>
<ea:plugin module="javadoc" revision="0.9" my.property.inplugin="true"/>
<ea:plugin module="javadoc" revision="0.9" my-dashes="true" my.property.inconf="true" conf="myBuild"/>
-
+ <ea:configure-project defaulttarget="package" my.property.inconfigureproject="true"/>
</info>
<configurations>
<conf name="default" visibility="public" description="runtime dependencies and master artifact can be used with this conf"/>