Fix the way Ivy's extra info where used


git-svn-id: https://svn.apache.org/repos/asf/ant/ivy/ivyde/trunk@1593859 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/IvyPlugin.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/IvyPlugin.java
index 4a93121..9ef70d7 100644
--- a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/IvyPlugin.java
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/IvyPlugin.java
@@ -24,8 +24,12 @@
 import java.util.List;
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
+import org.apache.ivy.Ivy;
 import org.apache.ivyde.common.ivyfile.IvyFileResourceListener;
+import org.apache.ivyde.eclipse.cp.IvyClasspathContainer;
 import org.apache.ivyde.eclipse.cp.IvyClasspathContainerHelper;
 import org.apache.ivyde.internal.eclipse.cpcontainer.IvyAttachementManager;
 import org.apache.ivyde.internal.eclipse.cpcontainer.IvyClasspathContainerImpl;
@@ -67,6 +71,9 @@
  */
 public class IvyPlugin extends AbstractUIPlugin {
 
+    private static final Pattern IVY_VERSION_PATTERN = Pattern
+            .compile("([0-9]+)\\.([0-9]+)\\.([0-9]+).*");
+
     /** The ID of IvyDE plugin */
     public static final String ID = "org.apache.ivyde.eclipse";
 
@@ -107,6 +114,12 @@
 
     private IvyAttachementManager ivyAttachementManager;
 
+    private int ivyVersionMajor = 0;
+
+    private int ivyVersionMinor = 0;
+
+    private int ivyVersionPatch = 0;
+
     /**
      * The constructor.
      */
@@ -122,6 +135,14 @@
         super.start(context);
         this.bundleContext = context;
         logInfo("starting IvyDE plugin");
+
+        Matcher matcher = IVY_VERSION_PATTERN.matcher(Ivy.getIvyVersion());
+        if (matcher.matches()) {
+            ivyVersionMajor = Integer.parseInt(matcher.group(1));
+            ivyVersionMinor = Integer.parseInt(matcher.group(2));
+            ivyVersionPatch = Integer.parseInt(matcher.group(3));
+        }
+
         ivyResolveJob = new IvyResolveJob();
 
         retrieveSetupManager = new RetrieveSetupManager();
@@ -147,8 +168,8 @@
                 } catch (JavaModelException e) {
                     MessageDialog.openError(IvyPlugin.getDefault().getWorkbench()
                             .getActiveWorkbenchWindow().getShell(),
-                        "Unable to trigger the update the IvyDE classpath containers", e
-                                .getMessage());
+                        "Unable to trigger the update the IvyDE classpath containers",
+                        e.getMessage());
                 }
             }
         };
@@ -190,7 +211,8 @@
             Class.forName("org.apache.ivy.osgi.core.ManifestParser");
             osgiAvailable = true;
             try {
-                Class.forName("org.apache.ivy.osgi.core.BundleInfo").getDeclaredMethod("getClasspath");
+                Class.forName("org.apache.ivy.osgi.core.BundleInfo").getDeclaredMethod(
+                    "getClasspath");
                 osgiClasspathAvailable = true;
             } catch (Exception e) {
                 osgiClasspathAvailable = false;
@@ -236,9 +258,9 @@
         IJavaModel javaModel = JavaCore.create(workspace.getRoot());
         IJavaProject[] projects = javaModel.getJavaProjects();
         for (int i = 0; i < projects.length; i++) {
-            List/* <IvyClasspathContainer> */containers = IvyClasspathContainerHelper
+            List<IvyClasspathContainer> containers = IvyClasspathContainerHelper
                     .getContainers(projects[i]);
-            Iterator/* <IvyClasspathContainer> */itContainers = containers.iterator();
+            Iterator<IvyClasspathContainer> itContainers = containers.iterator();
             while (itContainers.hasNext()) {
                 IvyClasspathContainerImpl ivycp = (IvyClasspathContainerImpl) itContainers.next();
                 if (!ivycp.getConf().isSettingsProjectSpecific()) {
@@ -465,4 +487,24 @@
     public RetrieveSetupManager getRetrieveSetupManager() {
         return retrieveSetupManager;
     }
+
+    public boolean isIvyVersionGreaterOrEqual(int major, int minor, int patch) {
+        if (ivyVersionMajor > major) {
+            return true;
+        } else if (ivyVersionMajor < major) {
+            return false;
+        }
+        // ivyVersionMajor == major
+        if (ivyVersionMinor > minor) {
+            return true;
+        } else if (ivyVersionMinor < minor) {
+            return false;
+        }
+        // ivyVersionMinor == minor
+        if (ivyVersionPatch >= patch) {
+            return true;
+        } else {
+            return false;
+        }
+    }
 }
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/workspaceresolver/WorkspaceResolver.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/workspaceresolver/WorkspaceResolver.java
index d469580..787616d 100644
--- a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/workspaceresolver/WorkspaceResolver.java
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/workspaceresolver/WorkspaceResolver.java
@@ -117,6 +117,8 @@
 
     private boolean ignoreVersionOnWorkspaceProjects;
 
+    private boolean osgiResolveInWorkspaceAvailable;
+
     public WorkspaceResolver(IProject project, IvySettings ivySettings) {
         String projectName = project == null ? "<null>" : project.getName();
         setName(projectName + "-ivyde-workspace-resolver");
@@ -130,6 +132,9 @@
 
         ignoreVersionOnWorkspaceProjects = IvyPlugin.getPreferenceStoreHelper()
                 .getIgnoreVersionOnWorkspaceProjects();
+
+        osgiResolveInWorkspaceAvailable = IvyPlugin.getDefault()
+                .isIvyVersionGreaterOrEqual(2, 4, 0);
     }
 
     public DownloadReport download(Artifact[] artifacts, DownloadOptions options) {
@@ -211,17 +216,17 @@
                 ModuleRevisionId candidateMrid = md.getModuleRevisionId();
 
                 // search a match on the organization and the module name
-                
-                if (org.equals(BundleInfo.BUNDLE_TYPE)) {
+
+                if (osgiResolveInWorkspaceAvailable && org.equals(BundleInfo.BUNDLE_TYPE)) {
                     // looking for an OSGi bundle via its symbolic name
-                    String sn = (String) md.getExtraInfo().get("Bundle-SymbolicName");
+                    String sn = md.getExtraInfoContentByTagName("Bundle-SymbolicName");
                     if (sn == null || !module.equals(sn)) {
                         // not found, skip to next
                         continue;
                     }
-                } else if (org.equals(BundleInfo.PACKAGE_TYPE)) {
+                } else if (osgiResolveInWorkspaceAvailable && org.equals(BundleInfo.PACKAGE_TYPE)) {
                     // looking for an OSGi bundle via its exported package
-                    String exportedPackages = (String) md.getExtraInfo().get("Export-Package");
+                    String exportedPackages = md.getExtraInfoContentByTagName("Export-Package");
                     if (exportedPackages == null) {
                         // not found, skip to next
                         continue;
@@ -245,7 +250,8 @@
                         // setting the exact expected version
                         version = dependencyMrid.getRevision();
                     }
-                    md.setResolvedModuleRevisionId(ModuleRevisionId.newInstance(org, module, version));
+                    md.setResolvedModuleRevisionId(ModuleRevisionId.newInstance(org, module,
+                        version));
                 } else {
                     if (!candidateMrid.getModuleId().equals(dependencyMrid.getModuleId())) {
                         // it doesn't match org#module, skip to next
@@ -378,7 +384,7 @@
             newMd.addExcludeRule(allExcludeRules[k]);
         }
 
-        newMd.getExtraInfo().putAll(md.getExtraInfo());
+        newMd.getExtraInfos().addAll(md.getExtraInfos());
 
         License[] licenses = md.getLicenses();
         for (int k = 0; k < licenses.length; k++) {