Add an offline mode

git-svn-id: https://svn.apache.org/repos/asf/ant/ivy/ivyde/trunk@1028394 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/doc/release-notes.html b/doc/release-notes.html
index cbcbe28..24083ad 100644
--- a/doc/release-notes.html
+++ b/doc/release-notes.html
@@ -127,6 +127,7 @@
     <li>NEW: an IvyDE classpath can now be retrieved (IVYDE-56)</li>
     <li>NEW: Add branch comparison to workspace resolver (IVYDE-234) (thanks to Jeffrey M. Metcalf)</li>
     <li>NEW: Look for ivysettings.xml file in project root copying the behavior of ivy ant task (IVYDE-258)</li>
+    <li>NEW: IvyDE can now resolve in an offline mode, where Ivy use only the caches (Ivy 2.3 required)</li>
 </ul><ul>
     <li>IMPROVE: let IvyDE refresh workspace after a resolve (IVYDE-27) (thanks to Clint Burghduff)</li>
     <li>IMPROVE: IvyDE now resolve by batch, then preventing too many workspace build (IVYDE-177)</li>
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/resolve/IvyResolver.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/resolve/IvyResolver.java
index 0ef5b69..98e49fa 100644
--- a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/resolve/IvyResolver.java
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/resolve/IvyResolver.java
@@ -73,6 +73,8 @@
 
     private final String ivyXmlPath;
 
+    private boolean useCacheOnly = IvyPlugin.getPreferenceStoreHelper().isOffline();
+
     public IvyResolver(String ivyXmlPath, List confInput, IProject project) {
         this.ivyXmlPath = ivyXmlPath;
         this.confInput = confInput;
@@ -95,6 +97,10 @@
         this.retrieveTypes = retrieveTypes;
     }
 
+    public void setUseCacheOnly(boolean useCacheOnly) {
+        this.useCacheOnly = useCacheOnly;
+    }
+
     public String getIvyXmlPath() {
         return ivyXmlPath;
     }
@@ -205,8 +211,10 @@
 
     private ResolveResult doResolve(Ivy ivy, ModuleDescriptor md) throws ParseException,
             IOException {
-        ResolveOptions resolveOption = new ResolveOptions().setConfs(confs);
+        ResolveOptions resolveOption = new ResolveOptions();
+        resolveOption.setConfs(confs);
         resolveOption.setValidate(ivy.getSettings().doValidate());
+        resolveOption.setUseCacheOnly(useCacheOnly);
         ResolveReport report = ivy.resolve(md, resolveOption);
 
         ResolveResult result = new ResolveResult(report);
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/IvyDEPreferenceStoreHelper.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/IvyDEPreferenceStoreHelper.java
index d526828..2494d96 100644
--- a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/IvyDEPreferenceStoreHelper.java
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/IvyDEPreferenceStoreHelper.java
@@ -271,4 +271,12 @@
                 .getRetrieveTypes());
     }
 
+    public boolean isOffline() {
+        return prefStore.getBoolean(PreferenceConstants.OFFLINE);
+    }
+
+    public void setOffline(boolean offline) {
+        prefStore.setValue(PreferenceConstants.OFFLINE, offline);
+    }
+
 }
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/IvyPreferencePage.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/IvyPreferencePage.java
index a82268f..4e6c55e 100644
--- a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/IvyPreferencePage.java
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/IvyPreferencePage.java
@@ -65,6 +65,8 @@
 
     private Button doNothingOnChangeButton;
 
+    private Button offlineButton;
+
     public IvyPreferencePage() {
         setPreferenceStore(IvyPlugin.getDefault().getPreferenceStore());
         Object ivydeVersion = IvyPlugin.getDefault().getBundle().getHeaders().get(
@@ -87,6 +89,10 @@
         Label horizontalLine = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL);
         horizontalLine.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false));
 
+        offlineButton = new Button(composite, SWT.CHECK);
+        offlineButton.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false, 3, 1));
+        offlineButton.setText("Offline (use only the caches)");
+
         Group startupGroup = new Group(composite, SWT.NONE);
         startupGroup.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false));
         startupGroup.setLayout(new GridLayout());
@@ -170,6 +176,8 @@
 
         organizationText.setText(helper.getIvyOrg());
         organizationUrlText.setText(helper.getIvyOrgUrl());
+
+        offlineButton.setSelection(helper.isOffline());
     }
 
     public boolean performOk() {
@@ -191,6 +199,8 @@
 
         helper.setOrganization(organizationText.getText());
         helper.setOrganizationUrl(organizationUrlText.getText());
+        
+        helper.setOffline(offlineButton.getSelection());
         return true;
     }
 
@@ -218,5 +228,7 @@
 
         organizationText.setText(PreferenceInitializer.DEFAULT_ORGANISATION);
         organizationUrlText.setText(PreferenceInitializer.DEFAULT_ORGANISATION_URL);
+
+        offlineButton.setSelection(PreferenceInitializer.DEFAULT_OFFLINE);
     }
 }
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/PreferenceConstants.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/PreferenceConstants.java
index 7672e23..1bfe59a 100644
--- a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/PreferenceConstants.java
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/PreferenceConstants.java
@@ -110,4 +110,6 @@
 
     public static final String MAP_IF_ONLY_ONE_JAVADOC = "mapIfOnlyOneJavadoc";
 
+    public static final String OFFLINE = "offline";
+
 }
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/PreferenceInitializer.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/PreferenceInitializer.java
index 79699b8..f6eb20f 100644
--- a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/PreferenceInitializer.java
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/PreferenceInitializer.java
@@ -120,6 +120,8 @@
         DEFAULT_RETRIEVED_CLASSPATH_SETUP.setRetrieveTypes(DEFAULT_RETRIEVED_CLASSPATH_TYPES);
     }
 
+    public static final boolean DEFAULT_OFFLINE = false;
+
     public void initializeDefaultPreferences() {
         IPreferenceStore store = IvyPlugin.getDefault().getPreferenceStore();
         store.setDefault(PreferenceConstants.P_BOOLEAN, true);
@@ -179,6 +181,8 @@
             DEFAULT_RETRIEVED_CLASSPATH_SYNC);
         store.setDefault(PreferenceConstants.RETRIEVED_CLASSPATH_TYPES,
             DEFAULT_RETRIEVED_CLASSPATH_TYPES);
+
+        store.setDefault(PreferenceConstants.OFFLINE, DEFAULT_OFFLINE);
     }
 
 }