You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by hi...@apache.org on 2012/08/19 17:32:02 UTC

svn commit: r1374771 - in /ant/ivy/ivyde/trunk: doc/ org.apache.ivyde.eclipse/META-INF/ org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/ org.apache.ivyde.eclipse/src/jav...

Author: hibou
Date: Sun Aug 19 15:32:02 2012
New Revision: 1374771

URL: http://svn.apache.org/viewvc?rev=1374771&view=rev
Log:
Source and Javadoc attachements can now be edited jar by jar

Added:
    ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyAttachementManager.java   (with props)
Removed:
    ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/fragmentinfo/
Modified:
    ant/ivy/ivyde/trunk/doc/release-notes.html
    ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/META-INF/MANIFEST.MF
    ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyPlugin.java
    ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerMapper.java
    ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerSerializer.java
    ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathInitializer.java
    ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathUtil.java

Modified: ant/ivy/ivyde/trunk/doc/release-notes.html
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/doc/release-notes.html?rev=1374771&r1=1374770&r2=1374771&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/doc/release-notes.html (original)
+++ ant/ivy/ivyde/trunk/doc/release-notes.html Sun Aug 19 15:32:02 2012
@@ -129,6 +129,7 @@ List of changes since <a href="/ivy/ivyd
     <li>NEW: Retrieve list does not resolve workspace projects (IVYDE-308) (thanks to Peter Oxenham)</li>
     <li>NEW: Allow to set the Ivy user directory globally or project by project (IVYDE-311)</li>
     <li>NEW: Add support for the OSGi access rules</li>
+    <li>NEW: Source and Javadoc attachements can now be edited jar by jar</li>
 </ul>
 <ul>
     <li>IMPROVE: The properties file paths can now be edited</li>

Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/META-INF/MANIFEST.MF?rev=1374771&r1=1374770&r2=1374771&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/META-INF/MANIFEST.MF (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/META-INF/MANIFEST.MF Sun Aug 19 15:32:02 2012
@@ -8,7 +8,6 @@ Bundle-Activator: org.apache.ivyde.eclip
 Bundle-Vendor: Apache Software Foundation
 Export-Package: org.apache.ivyde.eclipse,
  org.apache.ivyde.eclipse.cpcontainer,
- org.apache.ivyde.eclipse.cpcontainer.fragmentinfo,
  org.apache.ivyde.eclipse.ui.console,
  org.apache.ivyde.eclipse.ui.core,
  org.apache.ivyde.eclipse.ui.editors,

Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyPlugin.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyPlugin.java?rev=1374771&r1=1374770&r2=1374771&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyPlugin.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyPlugin.java Sun Aug 19 15:32:02 2012
@@ -26,11 +26,10 @@ import java.util.MissingResourceExceptio
 import java.util.ResourceBundle;
 
 import org.apache.ivyde.common.ivyfile.IvyFileResourceListener;
+import org.apache.ivyde.eclipse.cpcontainer.IvyAttachementManager;
 import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathContainer;
 import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathContainerSerializer;
 import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathUtil;
-import org.apache.ivyde.eclipse.cpcontainer.fragmentinfo.IPackageFragmentExtraInfo;
-import org.apache.ivyde.eclipse.cpcontainer.fragmentinfo.PreferenceStoreInfo;
 import org.apache.ivyde.eclipse.resolve.IvyResolveJob;
 import org.apache.ivyde.eclipse.retrieve.RetrieveSetupManager;
 import org.apache.ivyde.eclipse.ui.console.IvyConsole;
@@ -103,6 +102,8 @@ public class IvyPlugin extends AbstractU
 
     private IvyClasspathContainerSerializer ivyCpcSerializer;
 
+    private IvyAttachementManager ivyAttachementManager;
+
     /**
      * The constructor.
      */
@@ -166,11 +167,14 @@ public class IvyPlugin extends AbstractU
         ivyMarkerManager = new IvyMarkerManager();
 
         File stateLocation = getStateLocation().toFile();
+        ivyAttachementManager = new IvyAttachementManager(new File(stateLocation,
+                "attachements.properties"));
         File containersStateDir = new File(stateLocation, "cpstates");
         if (!containersStateDir.exists()) {
             containersStateDir.mkdirs();
         }
-        ivyCpcSerializer = new IvyClasspathContainerSerializer(containersStateDir);
+        ivyCpcSerializer = new IvyClasspathContainerSerializer(containersStateDir,
+                ivyAttachementManager);
 
         log(IStatus.INFO, "IvyDE plugin started", null);
 
@@ -188,6 +192,7 @@ public class IvyPlugin extends AbstractU
     public void stop(BundleContext context) throws Exception {
         super.stop(context);
         ivyCpcSerializer = null;
+        ivyAttachementManager = null;
         resourceBundle = null;
         IWorkspace workspace = ResourcesPlugin.getWorkspace();
         workspace.removeSaveParticipant(this);
@@ -368,8 +373,6 @@ public class IvyPlugin extends AbstractU
         return AbstractUIPlugin.imageDescriptorFromPlugin(ID, path);
     }
 
-    private PreferenceStoreInfo packageExtraInfo;
-
     /**
      * @return the helper around the plugin preference store
      */
@@ -381,13 +384,6 @@ public class IvyPlugin extends AbstractU
         return console;
     }
 
-    public IPackageFragmentExtraInfo getPackageFragmentExtraInfo() {
-        if (packageExtraInfo == null) {
-            packageExtraInfo = new PreferenceStoreInfo(getPreferenceStore());
-        }
-        return packageExtraInfo;
-    }
-
     public BundleContext getBundleContext() {
         return this.bundleContext;
     }
@@ -404,6 +400,10 @@ public class IvyPlugin extends AbstractU
         return ivyCpcSerializer;
     }
 
+    public IvyAttachementManager getIvyAttachementManager() {
+        return ivyAttachementManager;
+    }
+
     public IvyResolveJob getIvyResolveJob() {
         return ivyResolveJob;
     }

Added: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyAttachementManager.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyAttachementManager.java?rev=1374771&view=auto
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyAttachementManager.java (added)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyAttachementManager.java Sun Aug 19 15:32:02 2012
@@ -0,0 +1,195 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+package org.apache.ivyde.eclipse.cpcontainer;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Properties;
+
+import org.apache.ivyde.eclipse.IvyPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.IClasspathAttribute;
+import org.eclipse.jdt.core.IClasspathContainer;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+
+public class IvyAttachementManager {
+
+    private static final String SRC_SUFFIX = "-src";
+
+    private static final String SRCROOT_SUFFIX = "-srcroot";
+
+    private static final String DOC_SUFFIX = "-doc";
+
+    private Properties prop = new Properties();
+
+    private File containersAttachementFile;
+
+    public IvyAttachementManager(File containersAttachementFile) {
+        this.containersAttachementFile = containersAttachementFile;
+        try {
+            FileInputStream in = new FileInputStream(containersAttachementFile);
+            try {
+                prop.load(in);
+            } finally {
+                try {
+                    in.close();
+                } catch (IOException e) {
+                    // don't care
+                }
+            }
+        } catch (IOException ioe) {
+            IvyPlugin.log(IStatus.WARNING, "IvyDE attachement properties could not be loaded", ioe);
+        }
+    }
+
+    public void updateAttchements(IJavaProject project, IPath containerPath,
+            IClasspathContainer containerSuggestion) {
+        Properties newProps = new Properties();
+
+        IClasspathEntry[] newEntries = containerSuggestion.getClasspathEntries();
+        for (int i = 0; i < newEntries.length; i++) {
+            IClasspathEntry entry = newEntries[i];
+            if (IClasspathEntry.CPE_LIBRARY == entry.getEntryKind()) {
+                String path = entry.getPath().toPortableString();
+                if (entry.getSourceAttachmentPath() != null) {
+                    newProps.put(path + SRC_SUFFIX, entry.getSourceAttachmentPath()
+                            .toPortableString());
+                }
+                if (entry.getSourceAttachmentRootPath() != null) {
+                    newProps.put(path + SRCROOT_SUFFIX, entry.getSourceAttachmentRootPath()
+                            .toPortableString());
+                }
+                String javadocUrl = getJavadocLocation(entry);
+                if (javadocUrl != null) {
+                    newProps.put(path + DOC_SUFFIX, javadocUrl);
+                }
+            }
+        }
+
+        IvyClasspathContainer ivycp = IvyClasspathUtil.getIvyClasspathContainer(containerPath,
+            project);
+        if (ivycp == null) {
+            // something wrong happened, give up
+            return;
+        }
+        IClasspathEntry[] existingEntries = ivycp.getClasspathEntries();
+        for (int i = 0; i < existingEntries.length; i++) {
+            IClasspathEntry entry = existingEntries[i];
+            if (IClasspathEntry.CPE_LIBRARY == entry.getEntryKind()) {
+                String path = entry.getPath().toPortableString();
+                String value = (String) prop.get(path + SRC_SUFFIX);
+                if (value != null && entry.getSourceAttachmentPath() != null
+                        && value.equals(entry.getSourceAttachmentPath().toPortableString())) {
+                    newProps.remove(path + SRC_SUFFIX);
+                }
+                value = (String) prop.get(path + SRCROOT_SUFFIX);
+                if (value != null && entry.getSourceAttachmentRootPath() != null
+                        && value.equals(entry.getSourceAttachmentRootPath().toPortableString())) {
+                    newProps.remove(path + SRCROOT_SUFFIX);
+                }
+            }
+        }
+
+        // copy the actually new overrided properties
+        prop.putAll(newProps);
+
+        // now update the ivyde container for real
+        ivycp.updateClasspathEntries(newEntries);
+
+        // store the global result
+        try {
+            FileOutputStream out = new FileOutputStream(containersAttachementFile);
+            try {
+                prop.store(out, "");
+            } finally {
+                try {
+                    out.close();
+                } catch (IOException e) {
+                    // don't care
+                }
+            }
+        } catch (IOException ioe) {
+            IvyPlugin.log(IStatus.WARNING, "IvyDE attachement properties could not be saved", ioe);
+        }
+    }
+
+    public IPath getSourceAttachment(IPath path) {
+        String srcPath = prop.getProperty(path.toPortableString() + SRC_SUFFIX);
+        if (!"".equals(srcPath)) {
+            return new Path(srcPath);
+        }
+        return null;
+    }
+
+    public IPath getSourceAttachmentRoot(IPath path) {
+        String srcPath = prop.getProperty(path.toPortableString() + SRCROOT_SUFFIX);
+        if (!"".equals(srcPath)) {
+            return new Path(srcPath);
+        }
+        return null;
+    }
+
+    public URL getDocAttachment(IPath path) {
+        String srcPath = prop.getProperty(path.toPortableString() + DOC_SUFFIX);
+        if (!"".equals(srcPath)) {
+            try {
+                return new URL(srcPath);
+            } catch (MalformedURLException e) {
+                IvyPlugin.log(IStatus.WARNING,
+                    "The path for the doc attachement is not a valid URL", e);
+                return null;
+            }
+        }
+        return null;
+    }
+
+    public IPath getSourceAttachment(IPath classpathArtifact, IPath sourcesArtifact) {
+        IPath sourceAttachment = getSourceAttachment(classpathArtifact);
+        if (sourceAttachment == null) {
+            sourceAttachment = sourcesArtifact;
+        }
+        return sourceAttachment;
+    }
+
+    public IPath getSourceAttachmentRoot(IPath classpathArtifact, IPath sourcesArtifact) {
+        IPath sourceAttachment = getSourceAttachmentRoot(classpathArtifact);
+        if (sourceAttachment == null && sourcesArtifact != null) {
+            sourceAttachment = sourcesArtifact;
+        }
+        return sourceAttachment;
+    }
+
+    public String getJavadocLocation(IClasspathEntry entry) {
+        IClasspathAttribute[] attributes = entry.getExtraAttributes();
+        for (int j = 0; j < attributes.length; j++) {
+            IClasspathAttribute attribute = attributes[j];
+            if (IClasspathAttribute.JAVADOC_LOCATION_ATTRIBUTE_NAME.equals(attribute.getName())) {
+                return attribute.getValue();
+            }
+        }
+        return null;
+    }
+
+}

Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyAttachementManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyAttachementManager.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyAttachementManager.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerMapper.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerMapper.java?rev=1374771&r1=1374770&r2=1374771&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerMapper.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerMapper.java Sun Aug 19 15:32:02 2012
@@ -83,6 +83,9 @@ public class IvyClasspathContainerMapper
 
     private boolean osgiAvailable;
 
+    private IvyAttachementManager attachementManager = IvyPlugin.getDefault()
+            .getIvyAttachementManager();
+
     public IvyClasspathContainerMapper(IProgressMonitor monitor, Ivy ivy,
             IvyClasspathContainerConfiguration conf, ResolveResult resolveResult) {
         this.monitor = monitor;
@@ -113,16 +116,20 @@ public class IvyClasspathContainerMapper
                         null, true));
                 }
             } else if (artifact.getLocalFile() != null && accept(artifact.getArtifact())) {
-                Path classpathArtifact = getArtifactPath(artifact);
-                Path sourcesArtifact = getArtifactPath(artifact, sourceArtifactMatcher,
+                IPath classpathArtifact = getArtifactPath(artifact);
+                IPath sourcesArtifact = getArtifactPath(artifact, sourceArtifactMatcher,
                     mapping.isMapIfOnlyOneSource());
-                Path javadocArtifact = getArtifactPath(artifact, javadocArtifactMatcher,
+                IPath javadocArtifact = getArtifactPath(artifact, javadocArtifactMatcher,
                     mapping.isMapIfOnlyOneJavadoc());
                 IAccessRule[] rules = getAccessRules(classpathArtifact);
-                paths.add(JavaCore.newLibraryEntry(classpathArtifact,
-                    getSourceAttachment(classpathArtifact, sourcesArtifact),
-                    getSourceAttachmentRoot(classpathArtifact, sourcesArtifact), rules,
-                    getExtraAttribute(classpathArtifact, javadocArtifact), false));
+                IPath sources = attachementManager.getSourceAttachment(classpathArtifact,
+                    sourcesArtifact);
+                IPath sourcesRoot = attachementManager.getSourceAttachmentRoot(classpathArtifact,
+                    sourcesArtifact);
+                IClasspathAttribute[] att = getExtraAttribute(classpathArtifact, javadocArtifact);
+
+                paths.add(JavaCore.newLibraryEntry(classpathArtifact, sources, sourcesRoot, rules,
+                    att, false));
             }
 
         }
@@ -141,7 +148,7 @@ public class IvyClasspathContainerMapper
         return null;
     }
 
-    private IAccessRule[] getAccessRules(Path artifact) {
+    private IAccessRule[] getAccessRules(IPath artifact) {
         if (!osgiAvailable || !classpathSetup.isReadOSGiMetadata()) {
             return null;
         }
@@ -301,28 +308,9 @@ public class IvyClasspathContainerMapper
         return false;
     }
 
-    static IPath getSourceAttachment(IPath classpathArtifact, IPath sourcesArtifact) {
-        IPath sourceAttachment = IvyPlugin.getDefault().getPackageFragmentExtraInfo()
-                .getSourceAttachment(classpathArtifact);
-        if (sourceAttachment == null) {
-            sourceAttachment = sourcesArtifact;
-        }
-        return sourceAttachment;
-    }
-
-    static IPath getSourceAttachmentRoot(IPath classpathArtifact, IPath sourcesArtifact) {
-        IPath sourceAttachment = IvyPlugin.getDefault().getPackageFragmentExtraInfo()
-                .getSourceAttachmentRoot(classpathArtifact);
-        if (sourceAttachment == null && sourcesArtifact != null) {
-            sourceAttachment = sourcesArtifact;
-        }
-        return sourceAttachment;
-    }
-
     private IClasspathAttribute[] getExtraAttribute(IPath classpathArtifact, IPath javadocArtifact) {
         List result = new ArrayList();
-        URL url = IvyPlugin.getDefault().getPackageFragmentExtraInfo()
-                .getDocAttachment(classpathArtifact);
+        URL url = attachementManager.getDocAttachment(classpathArtifact);
 
         if (url == null) {
             IPath path = javadocArtifact;

Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerSerializer.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerSerializer.java?rev=1374771&r1=1374770&r2=1374771&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerSerializer.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerSerializer.java Sun Aug 19 15:32:02 2012
@@ -92,8 +92,11 @@ public class IvyClasspathContainerSerial
 
     private File containersStateDir;
 
-    public IvyClasspathContainerSerializer(File containersStateDir) {
+    private IvyAttachementManager ivyAttachementManager;
+
+    public IvyClasspathContainerSerializer(File containersStateDir, IvyAttachementManager ivyAttachementManager) {
         this.containersStateDir = containersStateDir;
+        this.ivyAttachementManager = ivyAttachementManager;
     }
 
     public void save(IJavaProject project) {
@@ -371,11 +374,10 @@ public class IvyClasspathContainerSerial
                 entry = JavaCore.newProjectEntry(path, accessRules, true, cpAttrs, true);
                 break;
             case IClasspathEntry.CPE_LIBRARY:
-                sourcePath = IvyClasspathContainerMapper.getSourceAttachment(path, sourcePath);
-                IPath sourceRootPath = IvyClasspathContainerMapper.getSourceAttachmentRoot(path,
-                    sourcePath);
-                entry = JavaCore.newLibraryEntry(path, sourcePath, sourceRootPath, accessRules,
-                    cpAttrs, false);
+                IPath sources = ivyAttachementManager.getSourceAttachment(path, sourcePath);
+                IPath sourcesRoot = ivyAttachementManager.getSourceAttachmentRoot(path, sourcePath);
+                entry = JavaCore.newLibraryEntry(path, sources, sourcesRoot, accessRules, cpAttrs,
+                    false);
                 break;
             default:
                 return null;

Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathInitializer.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathInitializer.java?rev=1374771&r1=1374770&r2=1374771&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathInitializer.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathInitializer.java Sun Aug 19 15:32:02 2012
@@ -25,8 +25,10 @@ import java.util.Map;
 import org.apache.ivyde.eclipse.IvyPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jdt.core.ClasspathContainerInitializer;
 import org.eclipse.jdt.core.IClasspathAttribute;
 import org.eclipse.jdt.core.IClasspathContainer;
@@ -86,7 +88,8 @@ public class IvyClasspathInitializer ext
                 } else {
                     if (container == null) {
                         // try what the IvyDE plugin saved
-                        IvyClasspathContainerSerializer serializer = IvyPlugin.getDefault().getIvyClasspathContainerSerializer();
+                        IvyClasspathContainerSerializer serializer = IvyPlugin.getDefault()
+                                .getIvyClasspathContainerSerializer();
                         Map ivycps = serializer.read(project);
                         if (ivycps != null) {
                             ivycp = (IvyClasspathContainer) ivycps.get(containerPath);
@@ -164,7 +167,19 @@ public class IvyClasspathInitializer ext
     }
 
     public boolean canUpdateClasspathContainer(IPath containerPath, IJavaProject project) {
-        return false;
+        return true;
+    }
+
+    public void requestClasspathContainerUpdate(final IPath containerPath,
+            final IJavaProject project, final IClasspathContainer containerSuggestion)
+            throws CoreException {
+        new Job("IvyDE attachement updater") {
+            protected IStatus run(IProgressMonitor monitor) {
+                IvyPlugin.getDefault().getIvyAttachementManager()
+                        .updateAttchements(project, containerPath, containerSuggestion);
+                return Status.OK_STATUS;
+            }
+        }.schedule();
     }
 
     public Object getComparisonID(IPath containerPath, IJavaProject project) {

Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathUtil.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathUtil.java?rev=1374771&r1=1374770&r2=1374771&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathUtil.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathUtil.java Sun Aug 19 15:32:02 2012
@@ -279,6 +279,23 @@ public final class IvyClasspathUtil {
         return null;
     }
 
+    public static IvyClasspathContainer getIvyClasspathContainer(IPath containerPath,
+            IJavaProject javaProject) {
+        IClasspathContainer cp;
+        try {
+            cp = JavaCore.getClasspathContainer(containerPath, javaProject);
+        } catch (JavaModelException e) {
+            IvyPlugin.log(e);
+            return null;
+        }
+        if (!(cp instanceof IvyClasspathContainer)) {
+            IvyPlugin.log(IStatus.ERROR, "Expected an Ivy container but was "
+                    + cp.getClass().getName() + " for path " + containerPath, null);
+            return null;
+        }
+        return (IvyClasspathContainer) cp;
+    }
+
     /**
      * Search the Ivy classpath entry within the specified Java project with the specific path
      *