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/08/15 12:47:34 UTC

svn commit: r1373376 - in /incubator/easyant/core/trunk/src/main/java/org/apache/easyant: core/EasyAntConstants.java core/EasyAntEngine.java core/EasyAntMagicNames.java tasks/LoadModule.java

Author: jlboudart
Date: Wed Aug 15 12:47:34 2012
New Revision: 1373376

URL: http://svn.apache.org/viewvc?rev=1373376&view=rev
Log:
Configure offline repository is done by easyant core itself

Modified:
    incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntConstants.java
    incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntEngine.java
    incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntMagicNames.java
    incubator/easyant/core/trunk/src/main/java/org/apache/easyant/tasks/LoadModule.java

Modified: incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntConstants.java
URL: http://svn.apache.org/viewvc/incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntConstants.java?rev=1373376&r1=1373375&r2=1373376&view=diff
==============================================================================
--- incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntConstants.java (original)
+++ incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntConstants.java Wed Aug 15 12:47:34 2012
@@ -84,4 +84,15 @@ public interface EasyAntConstants {
      */
     public static final String BUILD_SCOPE_REPOSITORY = "project-build";
 
+    /**
+     * Default offline project repository name
+     */
+    public static final String DEFAULT_OFFLINE_PROJECT_RESOLVER = "project.buildscope.repository";
+
+    /**
+     * Default offline easyant repository name
+     */
+    public static final String DEFAULT_OFFLINE_EASYANT_RESOLVER = "easyant.buildscope.repository";
+
+    
 }

Modified: incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntEngine.java
URL: http://svn.apache.org/viewvc/incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntEngine.java?rev=1373376&r1=1373375&r2=1373376&view=diff
==============================================================================
--- incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntEngine.java (original)
+++ incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntEngine.java Wed Aug 15 12:47:34 2012
@@ -37,6 +37,7 @@ import org.apache.easyant.core.factory.E
 import org.apache.easyant.core.ivy.IvyInstanceHelper;
 import org.apache.easyant.core.services.PluginService;
 import org.apache.easyant.core.services.impl.DefaultPluginServiceImpl;
+import org.apache.easyant.tasks.ConfigureBuildScopedRepository;
 import org.apache.easyant.tasks.Import;
 import org.apache.easyant.tasks.LoadModule;
 import org.apache.ivy.Ivy;
@@ -56,6 +57,7 @@ import org.apache.tools.ant.ProjectHelpe
 import org.apache.tools.ant.ProjectHelper.OnMissingExtensionPoint;
 import org.apache.tools.ant.PropertyHelper;
 import org.apache.tools.ant.Target;
+import org.apache.tools.ant.Task;
 import org.apache.tools.ant.input.DefaultInputHandler;
 import org.apache.tools.ant.input.InputHandler;
 import org.apache.tools.ant.util.ClasspathUtils;
@@ -63,8 +65,8 @@ import org.apache.tools.ant.util.FileUti
 import org.apache.tools.ant.util.ProxySetup;
 
 /**
- * This class provides everything you need to run easyant. This class should be
- * used to bootstrap easyant from IDE for example
+ * This class provides everything you need to run easyant. This class should be used to bootstrap easyant from IDE for
+ * example
  */
 public class EasyAntEngine {
 
@@ -78,8 +80,7 @@ public class EasyAntEngine {
      * Default constructor will initialize the default configuration
      */
     public EasyAntEngine() {
-        this(EasyantConfigurationFactory.getInstance()
-                .createDefaultConfiguration());
+        this(EasyantConfigurationFactory.getInstance().createDefaultConfiguration());
     }
 
     /**
@@ -100,66 +101,49 @@ public class EasyAntEngine {
      */
     public Ivy configureEasyAntIvyInstance(Project project) {
         IvyConfigure easyantIvyConfigure = new IvyConfigure();
-        easyantIvyConfigure
-                .setSettingsId(EasyAntMagicNames.EASYANT_IVY_INSTANCE);
+        easyantIvyConfigure.setSettingsId(EasyAntMagicNames.EASYANT_IVY_INSTANCE);
 
-        project
-                .setNewProperty(
-                        EasyAntMagicNames.EASYANT_DEFAULT_IVYSETTINGS,
-                        this
-                                .getClass()
-                                .getResource(
-                                        "/org/apache/easyant/core/default-easyant-ivysettings.xml")
-                                .toExternalForm());
-        project
-                .setNewProperty(
-                        EasyAntMagicNames.EASYANT_EXTRA_IVYSETTINGS,
-                        this
-                                .getClass()
-                                .getResource(
-                                        "/org/apache/easyant/core/extra-easyant-ivysettings.xml")
-                                .toExternalForm());
+        project.setNewProperty(EasyAntMagicNames.EASYANT_DEFAULT_IVYSETTINGS,
+                this.getClass().getResource("/org/apache/easyant/core/default-easyant-ivysettings.xml")
+                        .toExternalForm());
+        project.setNewProperty(EasyAntMagicNames.EASYANT_EXTRA_IVYSETTINGS,
+                this.getClass().getResource("/org/apache/easyant/core/extra-easyant-ivysettings.xml").toExternalForm());
 
         project.setNewProperty(EasyAntMagicNames.EASYANT_CORE_JAR_URL, guessEasyantCoreJarUrl().toExternalForm());
 
         File userSettings = getUserEasyAntIvySettings(project);
         String globalSettings = getGlobalEasyAntIvySettings(project);
-        boolean isIgnoringUserIvysettings=Project.toBoolean(project.getProperty(EasyAntMagicNames.IGNORE_USER_IVYSETTINGS));
+        boolean isIgnoringUserIvysettings = Project.toBoolean(project
+                .getProperty(EasyAntMagicNames.IGNORE_USER_IVYSETTINGS));
 
         if (userSettings.exists() && !isIgnoringUserIvysettings) {
-            project.log("loading user's easyant ivysettings file from "
-                    + userSettings.getAbsolutePath(),Project.MSG_DEBUG);
+            project.log("loading user's easyant ivysettings file from " + userSettings.getAbsolutePath(),
+                    Project.MSG_DEBUG);
             easyantIvyConfigure.setFile(userSettings);
         } else if (globalSettings != null) {
-            project.log("loading global easyant ivysettings file from "
-                    + globalSettings,Project.MSG_DEBUG);
+            project.log("loading global easyant ivysettings file from " + globalSettings, Project.MSG_DEBUG);
             try {
                 easyantIvyConfigure.setUrl(globalSettings);
             } catch (MalformedURLException malformedUrl) {
-                throw new BuildException(
-                        "Unable to parse easyant ivysettings from the following url : "
-                                + globalSettings, malformedUrl);
+                throw new BuildException("Unable to parse easyant ivysettings from the following url : "
+                        + globalSettings, malformedUrl);
             }
 
         } else {
-            project.log("using easyant default ivy settings file",
-                    Project.MSG_VERBOSE);
-            String url = project
-                    .getProperty(EasyAntMagicNames.EASYANT_DEFAULT_IVYSETTINGS);
+            project.log("using easyant default ivy settings file", Project.MSG_VERBOSE);
+            String url = project.getProperty(EasyAntMagicNames.EASYANT_DEFAULT_IVYSETTINGS);
             try {
                 easyantIvyConfigure.setUrl(url);
             } catch (MalformedURLException malformedUrl) {
-                throw new BuildException(
-                        "Unable to parse easyant ivysettings from the following url : "
-                                + url, malformedUrl);
+                throw new BuildException("Unable to parse easyant ivysettings from the following url : " + url,
+                        malformedUrl);
             }
         }
-        easyantIvyConfigure.setProject(project);
-        easyantIvyConfigure.setTaskName("configure-easyant");
-        easyantIvyConfigure.execute();
+        executeTask(easyantIvyConfigure, "configure-easyant", project);
 
-        IvyAntSettings ivyAntSettings = IvyInstanceHelper
-                .getEasyAntIvyAntSettings(project);
+        configureEasyAntOfflineRepository(project);
+
+        IvyAntSettings ivyAntSettings = IvyInstanceHelper.getEasyAntIvyAntSettings(project);
         return ivyAntSettings.getConfiguredIvyInstance(easyantIvyConfigure);
     }
 
@@ -208,15 +192,13 @@ public class EasyAntEngine {
      */
     private File getUserEasyAntIvySettings(Project project) {
         // path can be specified through a property
-        String path = project
-                .getProperty(EasyAntMagicNames.USER_EASYANT_IVYSETTINGS);
+        String path = project.getProperty(EasyAntMagicNames.USER_EASYANT_IVYSETTINGS);
         // if no property is set check the default location
         if (path == null) {
             path = PropertyHelper.getPropertyHelper(project).replaceProperties(
                     EasyAntConstants.DEFAULT_USER_EASYANT_IVYSETTINGS);
         }
-        project.log("user's easyant-ivysettings file : " + path,
-                Project.MSG_DEBUG);
+        project.log("user's easyant-ivysettings file : " + path, Project.MSG_DEBUG);
         return new File(path);
     }
 
@@ -228,56 +210,52 @@ public class EasyAntEngine {
      */
     private String getGlobalEasyAntIvySettings(Project project) {
         PropertyHelper helper = PropertyHelper.getPropertyHelper(project);
-        String path=null;
+        String path = null;
         if (configuration.getEasyantIvySettingsFile() != null) {
             File f = new File(helper.replaceProperties(configuration.getEasyantIvySettingsFile()));
             try {
-                path = f.toURL().toExternalForm();
+                path = f.toURI().toURL().toExternalForm();
             } catch (MalformedURLException e) {
-                throw new BuildException("Can't load easyant ivysettings file from "+ f.getAbsolutePath(),e);
+                throw new BuildException("Can't load easyant ivysettings file from " + f.getAbsolutePath(), e);
             }
         }
         if (configuration.getEasyantIvySettingsUrl() != null) {
             path = helper.replaceProperties(configuration.getEasyantIvySettingsUrl());
         }
         // path can be specified through a property
-        if (path==null && project.getProperty(EasyAntMagicNames.GLOBAL_EASYANT_IVYSETTINGS) != null) {
-            path = project
-                    .getProperty(EasyAntMagicNames.GLOBAL_EASYANT_IVYSETTINGS);
+        if (path == null && project.getProperty(EasyAntMagicNames.GLOBAL_EASYANT_IVYSETTINGS) != null) {
+            path = project.getProperty(EasyAntMagicNames.GLOBAL_EASYANT_IVYSETTINGS);
         }
         // if no property is set check the default location
         if (path == null) {
-        	File defaultGlboalEasyAntIvySettings =  new File(helper.replaceProperties(
-                    EasyAntConstants.DEFAULT_GLOBAL_EASYANT_IVYSETTINGS));
-        	if (!defaultGlboalEasyAntIvySettings.exists()) {
-        		return null;
-        	}
-        	try {
-				path = defaultGlboalEasyAntIvySettings.toURL().toExternalForm();
-			} catch (MalformedURLException e) {
-				throw new BuildException("Can't load easyant ivysettings file from "+ defaultGlboalEasyAntIvySettings.getAbsolutePath(),e);
-			}
+            File defaultGlboalEasyAntIvySettings = new File(
+                    helper.replaceProperties(EasyAntConstants.DEFAULT_GLOBAL_EASYANT_IVYSETTINGS));
+            if (!defaultGlboalEasyAntIvySettings.exists()) {
+                return null;
+            }
+            try {
+                path = defaultGlboalEasyAntIvySettings.toURL().toExternalForm();
+            } catch (MalformedURLException e) {
+                throw new BuildException("Can't load easyant ivysettings file from "
+                        + defaultGlboalEasyAntIvySettings.getAbsolutePath(), e);
+            }
         }
-        project.log("global easyant-ivysettings file : " + path,
-                Project.MSG_DEBUG);
+        project.log("global easyant-ivysettings file : " + path, Project.MSG_DEBUG);
         return path;
     }
 
-    public void configurePluginService(Project project,
-            Ivy easyantIvyInstance) {
+    public void configurePluginService(Project project, Ivy easyantIvyInstance) {
         pluginService = new DefaultPluginServiceImpl(easyantIvyInstance);
-        project.addReference(EasyAntMagicNames.PLUGIN_SERVICE_INSTANCE,
-                pluginService);
+        project.addReference(EasyAntMagicNames.PLUGIN_SERVICE_INSTANCE, pluginService);
 
     }
 
     /**
-     * Adds the listeners specified in the command line arguments, along with
-     * the default listener, to the specified project.
+     * Adds the listeners specified in the command line arguments, along with the default listener, to the specified
+     * project.
      * 
      * @param project
-     *            The project to add listeners to. Must not be <code>null</code>
-     *            .
+     *            The project to add listeners to. Must not be <code>null</code> .
      */
     protected void addBuildListeners(Project project) {
 
@@ -285,11 +263,9 @@ public class EasyAntEngine {
         project.addBuildListener(createLogger());
 
         for (int i = 0; i < configuration.getListeners().size(); i++) {
-            String className = (String) configuration.getListeners().elementAt(
-                    i);
-            BuildListener listener = (BuildListener) ClasspathUtils
-                    .newInstance(className, EasyAntEngine.class
-                            .getClassLoader(), BuildListener.class);
+            String className = (String) configuration.getListeners().elementAt(i);
+            BuildListener listener = (BuildListener) ClasspathUtils.newInstance(className,
+                    EasyAntEngine.class.getClassLoader(), BuildListener.class);
             project.setProjectReference(listener);
 
             project.addBuildListener(listener);
@@ -303,8 +279,7 @@ public class EasyAntEngine {
      *            the project instance.
      * 
      * @exception BuildException
-     *                if a specified InputHandler implementation could not be
-     *                loaded.
+     *                if a specified InputHandler implementation could not be loaded.
      */
     protected void addInputHandler(Project project) {
         InputHandler handler = null;
@@ -312,9 +287,8 @@ public class EasyAntEngine {
         if (configuration.getInputHandlerClassname() == null) {
             handler = new DefaultInputHandler();
         } else {
-            handler = (InputHandler) ClasspathUtils.newInstance(configuration
-                    .getInputHandlerClassname(), Main.class.getClassLoader(),
-                    InputHandler.class);
+            handler = (InputHandler) ClasspathUtils.newInstance(configuration.getInputHandlerClassname(),
+                    Main.class.getClassLoader(), InputHandler.class);
             project.setProjectReference(handler);
         }
         project.setInputHandler(handler);
@@ -329,12 +303,10 @@ public class EasyAntEngine {
         BuildLogger logger = null;
         if (configuration.getLoggerClassname() != null) {
             try {
-                logger = (BuildLogger) ClasspathUtils.newInstance(configuration
-                        .getLoggerClassname(), EasyAntEngine.class
-                        .getClassLoader(), BuildLogger.class);
+                logger = (BuildLogger) ClasspathUtils.newInstance(configuration.getLoggerClassname(),
+                        EasyAntEngine.class.getClassLoader(), BuildLogger.class);
             } catch (BuildException e) {
-                throw new RuntimeException("The specified logger class "
-                        + configuration.getLoggerClassname()
+                throw new RuntimeException("The specified logger class " + configuration.getLoggerClassname()
                         + " could not be used because " + e.getMessage(), e);
             }
         } else {
@@ -352,23 +324,20 @@ public class EasyAntEngine {
     /**
      * Search parent directories for the build file.
      * <p>
-     * Takes the given target as a suffix to append to each parent directory in
-     * search of a build file. Once the root of the file-system has been reached
-     * an exception is thrown.
+     * Takes the given target as a suffix to append to each parent directory in search of a build file. Once the root of
+     * the file-system has been reached an exception is thrown.
      * 
      * @param start
      *            Leaf directory of search. Must not be <code>null</code>.
      * @param suffix
-     *            Suffix filename to look for in parents. Must not be
-     *            <code>null</code>.
+     *            Suffix filename to look for in parents. Must not be <code>null</code>.
      * 
      * @return A handle to the build file if one is found
      * 
      * @exception BuildException
      *                if no build file is found
      */
-    protected File findBuildModule(String start, String suffix)
-            throws BuildException {
+    protected File findBuildModule(String start, String suffix) throws BuildException {
         if (configuration.getMsgOutputLevel() >= Project.MSG_INFO) {
             System.out.println("Searching for " + suffix + " ...");
         }
@@ -409,15 +378,12 @@ public class EasyAntEngine {
         // set the thread priorities
         if (configuration.getThreadPriority() != null) {
             try {
-                project.log("Setting Ant's thread priority to "
-                        + configuration.getThreadPriority(),
+                project.log("Setting Ant's thread priority to " + configuration.getThreadPriority(),
                         Project.MSG_VERBOSE);
-                Thread.currentThread().setPriority(
-                        configuration.getThreadPriority().intValue());
+                Thread.currentThread().setPriority(configuration.getThreadPriority().intValue());
             } catch (SecurityException swallowed) {
                 // we cannot set the priority here.
-                project
-                        .log("A security manager refused to set the -nice value");
+                project.log("A security manager refused to set the -nice value");
             }
         }
 
@@ -469,12 +435,9 @@ public class EasyAntEngine {
                 }
 
             }
-            project.log("Active build configurations : " + buildConfigurations,
-                    Project.MSG_INFO);
-            project.setProperty(EasyAntMagicNames.ACTIVE_BUILD_CONFIGURATIONS,
-                    buildConfigurations);
+            project.log("Active build configurations : " + buildConfigurations, Project.MSG_INFO);
+            project.setProperty(EasyAntMagicNames.ACTIVE_BUILD_CONFIGURATIONS, buildConfigurations);
         }
-
         // Load system plugins
         if (configuration.getSystemPlugins().size() > 0) {
             project.log("Loading System Plugins...");
@@ -489,102 +452,108 @@ public class EasyAntEngine {
             importTask.setAs(systemPlugin.getAs());
             importTask.setMode(systemPlugin.getMode());
             importTask.setMandatory(systemPlugin.isMandatory());
-            importTask.setProject(project);
-            importTask.setTaskName(EasyAntConstants.EASYANT_TASK_NAME);
-            importTask.setOwningTarget(ProjectUtils.createTopLevelTarget());
-            importTask.setLocation(mainscriptLocation);
-            importTask.execute();
+            executeTask(importTask, "configure-system-plugins", project);
         }
         File buildModule = configuration.getBuildModule();
         File buildFile = configuration.getBuildFile();
-        
-        if (project.getProperty("project.basedir")!=null) {
+
+        if (project.getProperty("project.basedir") != null) {
             project.setBaseDir(new File(project.getProperty("project.basedir")));
         }
 
         if (buildModule == null) {
-            buildModule = new File(project.getBaseDir(),EasyAntConstants.DEFAULT_BUILD_MODULE);
+            buildModule = new File(project.getBaseDir(), EasyAntConstants.DEFAULT_BUILD_MODULE);
         }
 
         if (!buildModule.exists() && configuration.isBuildModuleLookupEnabled()) {
-            buildModule = findBuildModule(System.getProperty("user.dir"),
-                    buildModule.toString());
+            buildModule = findBuildModule(System.getProperty("user.dir"), buildModule.toString());
         }
 
         // calculate buildFile location based on buildModule directory
         if (buildModule.exists() && buildFile == null) {
-            buildFile = new File(buildModule.getParentFile(),
-                    EasyAntConstants.DEFAULT_BUILD_FILE);
+            buildFile = new File(buildModule.getParentFile(), EasyAntConstants.DEFAULT_BUILD_FILE);
         }
 
         if (buildFile == null && configuration.isBuildModuleLookupEnabled()) {
-            buildFile = findBuildModule(System.getProperty("user.dir"),
-                    EasyAntConstants.DEFAULT_BUILD_FILE);
+            buildFile = findBuildModule(System.getProperty("user.dir"), EasyAntConstants.DEFAULT_BUILD_FILE);
         }
 
         // Normalize buildFile for re-import detection
         if (buildModule != null) {
-            buildModule = FileUtils.getFileUtils().normalize(
-                    buildModule.getAbsolutePath());
-            project.setNewProperty(EasyAntMagicNames.EASYANT_FILE, buildModule
-                    .getAbsolutePath());
+            buildModule = FileUtils.getFileUtils().normalize(buildModule.getAbsolutePath());
+            project.setNewProperty(EasyAntMagicNames.EASYANT_FILE, buildModule.getAbsolutePath());
 
         }
 
         if (buildFile != null) {
-            buildFile = FileUtils.getFileUtils().normalize(
-                    buildFile.getAbsolutePath());
-            project.setNewProperty(MagicNames.ANT_FILE, buildFile
-                    .getAbsolutePath());
+            buildFile = FileUtils.getFileUtils().normalize(buildFile.getAbsolutePath());
+            project.setNewProperty(MagicNames.ANT_FILE, buildFile.getAbsolutePath());
 
         }
 
         configuration.setBuildFile(buildFile);
         configuration.setBuildModule(buildModule);
 
-
-        if (configuration.getBuildModule() != null
-                || configuration.getBuildFile() != null) {
+        if (configuration.getBuildModule() != null || configuration.getBuildFile() != null) {
             LoadModule lm = new LoadModule();
             lm.setBuildModule(configuration.getBuildModule());
             lm.setBuildFile(configuration.getBuildFile());
-            lm.setTaskName(EasyAntConstants.EASYANT_TASK_NAME);
-            lm.setProject(project);
-            lm.setOwningTarget(ProjectUtils.createTopLevelTarget());
-            lm.setLocation(mainscriptLocation);
-            lm.execute();
+            executeTask(lm, "load-module", project);
         }
-        
-        
+
         // FIXME:resolve extensionOf attributes this should be exposed by Apache Ant
         injectTargetIntoExtensionPoint(project, helper);
     }
 
+    /**
+     * Configure easyant offline repository 
+     * If offline mode is enabled, it will acts as dictator resolver
+     * @param project {@link Project} where repositories will be configured
+     */
+    private void configureEasyAntOfflineRepository(Project project) {
+        //assign default value if not already set
+        project.setProperty(EasyAntMagicNames.OFFLINE_EASYANT_RESOLVER, EasyAntConstants.DEFAULT_OFFLINE_EASYANT_RESOLVER);
+        project.setProperty(EasyAntMagicNames.OFFLINE_BASE_DIRECTORY, project.getBaseDir().getAbsolutePath() + "/offline/");
+      
+        ConfigureBuildScopedRepository easyantOfflineRepository = new ConfigureBuildScopedRepository();
+        easyantOfflineRepository.setGenerateWrapperResoler(false);
+        easyantOfflineRepository.setName(project.getProperty(EasyAntMagicNames.OFFLINE_EASYANT_RESOLVER));
+        easyantOfflineRepository.setDictator(Project.toBoolean(project.getProperty(EasyAntMagicNames.EASYANT_OFFLINE)));
+        easyantOfflineRepository.setSettingsRef(IvyInstanceHelper.buildEasyAntIvyReference(project));
+        easyantOfflineRepository.setTarget(project.getProperty(EasyAntMagicNames.OFFLINE_BASE_DIRECTORY));
+        executeTask(easyantOfflineRepository, "configure-offline-easyant-resolver", project);
+    }
+
+    private void executeTask(Task task, String operationName, Project project) {
+        Location location = new Location(ProjectUtils.emulateMainScript(project).getAbsolutePath());
+        task.setLocation(location);
+        task.setOwningTarget(ProjectUtils.createTopLevelTarget());
+        task.setProject(project);
+        task.setTaskName(EasyAntConstants.EASYANT_TASK_NAME + "-" + operationName);
+        task.execute();
+
+    }
+
     private void injectTargetIntoExtensionPoint(Project project, ProjectHelper helper) {
         for (Object extensionInfos : helper.getExtensionStack()) {
-            String[] extensionInfo = (String[])extensionInfos;
+            String[] extensionInfo = (String[]) extensionInfos;
             String tgName = extensionInfo[0];
             String name = extensionInfo[1];
             OnMissingExtensionPoint missingBehaviour = OnMissingExtensionPoint.FAIL;
             Hashtable projectTargets = project.getTargets();
             if (!projectTargets.containsKey(tgName)) {
-                String message = "can't add target " + name
-                    + " to extension-point " + tgName
-                    + " because the extension-point is unknown.";
+                String message = "can't add target " + name + " to extension-point " + tgName
+                        + " because the extension-point is unknown.";
                 if (missingBehaviour == OnMissingExtensionPoint.FAIL) {
                     throw new BuildException(message);
                 } else if (missingBehaviour == OnMissingExtensionPoint.WARN) {
                     Target target = (Target) projectTargets.get(name);
-                    project.log(target,
-                                             "Warning: " + message,
-                                             Project.MSG_WARN);
+                    project.log(target, "Warning: " + message, Project.MSG_WARN);
                 }
             } else {
                 Target t = (Target) projectTargets.get(tgName);
                 if (!(t instanceof ExtensionPoint)) {
-                    throw new BuildException("referenced target "
-                                             + tgName
-                                             + " is not an extension-point");
+                    throw new BuildException("referenced target " + tgName + " is not an extension-point");
                 }
                 t.addDependency(name);
             }
@@ -601,7 +570,7 @@ public class EasyAntEngine {
         configureProject(project);
         initProject(project);
         doBuild(project);
-        
+
     }
 
     public void doBuild(final Project project) throws Error {
@@ -628,16 +597,13 @@ public class EasyAntEngine {
                     project.setDefaultInputStream(System.in);
                 }
                 System.setIn(new DemuxInputStream(project));
-                System.setOut(new PrintStream(new DemuxOutputStream(project,
-                        false)));
-                System.setErr(new PrintStream(new DemuxOutputStream(project,
-                        true)));
+                System.setOut(new PrintStream(new DemuxOutputStream(project, false)));
+                System.setErr(new PrintStream(new DemuxOutputStream(project, true)));
 
                 // make sure that we have a target to execute
                 if (configuration.getTargets().size() == 0) {
                     if (project.getDefaultTarget() != null) {
-                        configuration.getTargets().addElement(
-                                project.getDefaultTarget());
+                        configuration.getTargets().addElement(project.getDefaultTarget());
                     }
                 }
 
@@ -665,19 +631,16 @@ public class EasyAntEngine {
             } catch (Throwable t) {
                 // yes, I know it is bad style to catch Throwable,
                 // but if we don't, we lose valuable information
-                System.err.println("Caught an exception while logging the"
-                        + " end of the build.  Exception was:");
+                System.err.println("Caught an exception while logging the" + " end of the build.  Exception was:");
                 t.printStackTrace();
                 if (error != null) {
-                    System.err.println("There has been an error prior to"
-                            + " that:");
+                    System.err.println("There has been an error prior to" + " that:");
                     error.printStackTrace();
                 }
                 throw new BuildException(t);
             }
         }
-        if (configuration.isShowMemoryDetails()
-                || configuration.getMsgOutputLevel() >= Project.MSG_VERBOSE) {
+        if (configuration.isShowMemoryDetails() || configuration.getMsgOutputLevel() >= Project.MSG_VERBOSE) {
             printMemoryDetails(project);
         }
     }
@@ -689,15 +652,13 @@ public class EasyAntEngine {
      *            an easyant configuration
      * @throws BuildException
      */
-    public static void runBuild(EasyAntConfiguration eaConfig)
-            throws BuildException {
+    public static void runBuild(EasyAntConfiguration eaConfig) throws BuildException {
         EasyAntEngine eaEngine = new EasyAntEngine(eaConfig);
         eaEngine.doBuild();
     }
 
     /**
-     * This is a static method used to configure and initialize an existing
-     * project
+     * This is a static method used to configure and initialize an existing project
      * 
      * @param project
      *            a given project
@@ -706,8 +667,8 @@ public class EasyAntEngine {
      * @return configured project
      * @throws BuildException
      */
-    public static Project configureAndInitProject(Project project,
-            EasyAntConfiguration eaConfiguration) throws BuildException {
+    public static Project configureAndInitProject(Project project, EasyAntConfiguration eaConfiguration)
+            throws BuildException {
         EasyAntEngine eaEngine = new EasyAntEngine(eaConfiguration);
         eaEngine.configureProject(project);
         eaEngine.initProject(project);
@@ -723,13 +684,9 @@ public class EasyAntEngine {
     public static void printMemoryDetails(Project project) {
         project.log("---- Memory Details ----");
         project.log("  Used Memory  = "
-                + (Runtime.getRuntime().totalMemory() / MEGABYTE - Runtime
-                        .getRuntime().freeMemory()
-                        / MEGABYTE) + "MB");
-        project.log("  Free Memory  = "
-                + (Runtime.getRuntime().freeMemory() / MEGABYTE) + "MB");
-        project.log("  Total Memory = "
-                + (Runtime.getRuntime().totalMemory() / MEGABYTE) + "MB");
+                + (Runtime.getRuntime().totalMemory() / MEGABYTE - Runtime.getRuntime().freeMemory() / MEGABYTE) + "MB");
+        project.log("  Free Memory  = " + (Runtime.getRuntime().freeMemory() / MEGABYTE) + "MB");
+        project.log("  Total Memory = " + (Runtime.getRuntime().totalMemory() / MEGABYTE) + "MB");
         project.log("-----------------------");
     }
 
@@ -746,8 +703,7 @@ public class EasyAntEngine {
             Enumeration<?> e = configuration.getDefinedProps().keys();
             while (e.hasMoreElements()) {
                 String arg = (String) e.nextElement();
-                String value = (String) configuration.getDefinedProps()
-                        .get(arg);
+                String value = (String) configuration.getDefinedProps().get(arg);
                 project.setUserProperty(arg, value);
             }
             project.setName("EasyAnt");
@@ -765,12 +721,10 @@ public class EasyAntEngine {
     private static String easyantVersion = null;
 
     /**
-     * Returns the EasyAnt version information, if available. Once the
-     * information has been loaded once, it's cached and returned from the cache
-     * on future calls.
+     * Returns the EasyAnt version information, if available. Once the information has been loaded once, it's cached and
+     * returned from the cache on future calls.
      * 
-     * @return the Ant version information as a String (always non-
-     *         <code>null</code>)
+     * @return the Ant version information as a String (always non- <code>null</code>)
      * 
      * @exception BuildException
      *                if the version information is unavailable
@@ -780,8 +734,7 @@ public class EasyAntEngine {
         if (easyantVersion == null) {
             try {
                 Properties props = new Properties();
-                InputStream in = Main.class
-                        .getResourceAsStream("/META-INF/version.properties");
+                InputStream in = Main.class.getResourceAsStream("/META-INF/version.properties");
                 props.load(in);
                 in.close();
 
@@ -792,12 +745,9 @@ public class EasyAntEngine {
                 msg.append(props.getProperty("DATE"));
                 easyantVersion = msg.toString();
             } catch (IOException ioe) {
-                throw new BuildException(
-                        "Could not load the version information:"
-                                + ioe.getMessage());
+                throw new BuildException("Could not load the version information:" + ioe.getMessage());
             } catch (NullPointerException npe) {
-                throw new BuildException(
-                        "Could not load the version information.");
+                throw new BuildException("Could not load the version information.");
             }
         }
         return easyantVersion;

Modified: incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntMagicNames.java
URL: http://svn.apache.org/viewvc/incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntMagicNames.java?rev=1373376&r1=1373375&r2=1373376&view=diff
==============================================================================
--- incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntMagicNames.java (original)
+++ incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntMagicNames.java Wed Aug 15 12:47:34 2012
@@ -177,4 +177,21 @@ public interface EasyAntMagicNames {
      */
     public static final String IGNORE_USER_IVYSETTINGS = "ignore.user.ivysettings";
 
+    /***
+     * Property specifying offline project resolver name
+     * Value: {@value}
+     */
+    public static final String OFFLINE_PROJECT_RESOLVER = "project.buildscope.resolver";
+
+    /***
+     * Property specifying offline easyant resolver name
+     * Value: {@value}
+     */
+    public static final String OFFLINE_EASYANT_RESOLVER = "easyant.buildscope.resolver";
+
+    /**
+     * Property specifying offline base directory
+     * Value: {@value}
+     */
+    public static final String OFFLINE_BASE_DIRECTORY = "offline.base.directory";
 }

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=1373376&r1=1373375&r2=1373376&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 Aug 15 12:47:34 2012
@@ -155,7 +155,7 @@ public class LoadModule extends Abstract
         if (!EasyAntMagicNames.EASYANT_IVY_INSTANCE
                 .equals(projectIvyInstanceProp)) {
             configureProjectIvyinstance(projectIvyInstanceProp);
-
+            configureProjectOfflineResolver();
         }
 
         if (shouldUseBuildRepository()) {
@@ -171,6 +171,22 @@ public class LoadModule extends Abstract
     }
 
     /**
+     * Configure project offline repository 
+     * If offline mode is enabled, it will acts as dictator resolver
+     * @param project {@link Project} where repository will be configured
+     */
+    private void configureProjectOfflineResolver() {
+        getProject().setProperty(EasyAntMagicNames.OFFLINE_PROJECT_RESOLVER, EasyAntConstants.DEFAULT_OFFLINE_PROJECT_RESOLVER);
+        ConfigureBuildScopedRepository projectOfflineRepository = new ConfigureBuildScopedRepository();
+        projectOfflineRepository.setGenerateWrapperResoler(false);
+        projectOfflineRepository.setName(getProject().getProperty(EasyAntMagicNames.OFFLINE_PROJECT_RESOLVER));
+        projectOfflineRepository.setDictator(Project.toBoolean(getProject().getProperty(EasyAntMagicNames.EASYANT_OFFLINE)));
+        projectOfflineRepository.setSettingsRef(IvyInstanceHelper.buildProjectIvyReference(getProject()));
+        projectOfflineRepository.setTarget(getProject().getProperty(EasyAntMagicNames.OFFLINE_BASE_DIRECTORY));
+        initTask(projectOfflineRepository).execute();
+    }
+
+    /**
      * 
      */
     private void configureProjectIvyinstance(String projectIvyInstanceName) {