Index: src/java/org/apache/ivyde/eclipse/revdepexplorer/EditableDependencyDescriptor.java
===================================================================
--- src/java/org/apache/ivyde/eclipse/revdepexplorer/EditableDependencyDescriptor.java (revision 822319)
+++ src/java/org/apache/ivyde/eclipse/revdepexplorer/EditableDependencyDescriptor.java (working copy)
@@ -1,169 +0,0 @@
-/*
- * 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.revdepexplorer;
-
-import java.util.Map;
-
-import org.apache.ivy.core.module.descriptor.DependencyArtifactDescriptor;
-import org.apache.ivy.core.module.descriptor.DependencyDescriptor;
-import org.apache.ivy.core.module.descriptor.ExcludeRule;
-import org.apache.ivy.core.module.descriptor.IncludeRule;
-import org.apache.ivy.core.module.id.ArtifactId;
-import org.apache.ivy.core.module.id.ModuleId;
-import org.apache.ivy.core.module.id.ModuleRevisionId;
-import org.apache.ivy.plugins.namespace.Namespace;
-
-/**
- * Delegate dependency descriptor that makes the descriptor mutable.
- */
-public class EditableDependencyDescriptor implements DependencyDescriptor {
-
- private DependencyDescriptor descriptor;
-
- private ModuleRevisionId revisionId;
-
- public EditableDependencyDescriptor(DependencyDescriptor dd) {
- descriptor = dd;
- revisionId = dd.getDependencyRevisionId();
- }
-
- public void setRevision(String revision) {
- revisionId = new ModuleRevisionId(getDependencyId(), revision);
- }
-
- public ModuleRevisionId getDynamicConstraintDependencyRevisionId() {
- return revisionId;
- }
-
- public ModuleRevisionId getDependencyRevisionId() {
- return revisionId;
- }
-
- public DependencyDescriptor asSystem() {
- return descriptor.asSystem();
- }
-
- public boolean canExclude() {
- return descriptor.canExclude();
- }
-
- public DependencyDescriptor clone(ModuleRevisionId revision) {
- return descriptor.clone(revision);
- }
-
- public boolean doesExclude(String[] moduleConfigurations, ArtifactId artifactId) {
- return descriptor.doesExclude(moduleConfigurations, artifactId);
- }
-
- public DependencyArtifactDescriptor[] getAllDependencyArtifacts() {
- return descriptor.getAllDependencyArtifacts();
- }
-
- public ExcludeRule[] getAllExcludeRules() {
- return descriptor.getAllExcludeRules();
- }
-
- public IncludeRule[] getAllIncludeRules() {
- return descriptor.getAllIncludeRules();
- }
-
- public String getAttribute(String attName) {
- return descriptor.getAttribute(attName);
- }
-
- public Map getAttributes() {
- return descriptor.getAttributes();
- }
-
- public DependencyArtifactDescriptor[] getDependencyArtifacts(String moduleConfigurations) {
- return descriptor.getDependencyArtifacts(moduleConfigurations);
- }
-
- public DependencyArtifactDescriptor[] getDependencyArtifacts(String[] moduleConfigurations) {
- return descriptor.getDependencyArtifacts(moduleConfigurations);
- }
-
- public String[] getDependencyConfigurations(String moduleConfiguration,
- String requestedConfiguration) {
- return descriptor.getDependencyConfigurations(moduleConfiguration, requestedConfiguration);
- }
-
- public String[] getDependencyConfigurations(String moduleConfiguration) {
- return descriptor.getDependencyConfigurations(moduleConfiguration);
- }
-
- public String[] getDependencyConfigurations(String[] moduleConfigurations) {
- return descriptor.getDependencyConfigurations(moduleConfigurations);
- }
-
- public ModuleId getDependencyId() {
- return descriptor.getDependencyId();
- }
-
- public ExcludeRule[] getExcludeRules(String moduleConfigurations) {
- return descriptor.getExcludeRules(moduleConfigurations);
- }
-
- public ExcludeRule[] getExcludeRules(String[] moduleConfigurations) {
- return descriptor.getExcludeRules(moduleConfigurations);
- }
-
- public String getExtraAttribute(String attName) {
- return descriptor.getExtraAttribute(attName);
- }
-
- public Map getExtraAttributes() {
- return descriptor.getExtraAttributes();
- }
-
- public IncludeRule[] getIncludeRules(String moduleConfigurations) {
- return descriptor.getIncludeRules(moduleConfigurations);
- }
-
- public IncludeRule[] getIncludeRules(String[] moduleConfigurations) {
- return descriptor.getIncludeRules(moduleConfigurations);
- }
-
- public String[] getModuleConfigurations() {
- return descriptor.getModuleConfigurations();
- }
-
- public Namespace getNamespace() {
- return descriptor.getNamespace();
- }
-
- public ModuleRevisionId getParentRevisionId() {
- return descriptor.getParentRevisionId();
- }
-
- public Map getQualifiedExtraAttributes() {
- return descriptor.getQualifiedExtraAttributes();
- }
-
- public boolean isChanging() {
- return descriptor.isChanging();
- }
-
- public boolean isForce() {
- return descriptor.isForce();
- }
-
- public boolean isTransitive() {
- return descriptor.isTransitive();
- }
-}
Index: src/java/org/apache/ivyde/eclipse/revdepexplorer/EditableModuleDescriptor.java
===================================================================
--- src/java/org/apache/ivyde/eclipse/revdepexplorer/EditableModuleDescriptor.java (revision 822319)
+++ src/java/org/apache/ivyde/eclipse/revdepexplorer/EditableModuleDescriptor.java (working copy)
@@ -1,354 +0,0 @@
-/*
- * 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.revdepexplorer;
-
-import java.io.File;
-import java.io.IOException;
-import java.text.ParseException;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
-import org.apache.ivy.core.module.descriptor.Artifact;
-import org.apache.ivy.core.module.descriptor.Configuration;
-import org.apache.ivy.core.module.descriptor.DependencyDescriptor;
-import org.apache.ivy.core.module.descriptor.ExcludeRule;
-import org.apache.ivy.core.module.descriptor.License;
-import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
-import org.apache.ivy.core.module.id.ArtifactId;
-import org.apache.ivy.core.module.id.ModuleId;
-import org.apache.ivy.core.module.id.ModuleRevisionId;
-import org.apache.ivy.core.module.id.ModuleRules;
-import org.apache.ivy.plugins.conflict.ConflictManager;
-import org.apache.ivy.plugins.parser.ModuleDescriptorParser;
-import org.apache.ivy.plugins.parser.xml.XmlModuleDescriptorWriter;
-import org.apache.ivy.plugins.repository.Resource;
-import org.apache.ivy.plugins.version.VersionMatcher;
-
-/**
- * This is a editable implementation of a module descriptor; this was created so a module descriptor
- * could be modified. This could go away if ivy ever exposes a descriptor where dependencies can be
- * added/removed.
- */
-public class EditableModuleDescriptor implements ModuleDescriptor {
- private ModuleDescriptor descriptor;
-
- private Set/* */dependencies;
-
- private DependencyDescriptorDelta delta = new DependencyDescriptorDelta();
-
- private static final Comparator/* */DEFAULT_DEPENDENCY_COMPARATOR = new Comparator() {
- public int compare(Object o1, Object o2) {
- int result = 0;
-
- DependencyDescriptor desc1 = (DependencyDescriptor) o1;
- DependencyDescriptor desc2 = (DependencyDescriptor) o2;
-
- result = desc1.getDependencyId().getOrganisation().compareTo(
- desc2.getDependencyId().getOrganisation());
-
- if (result == 0) {
- result = desc1.getDependencyId().getName().compareTo(
- desc2.getDependencyId().getName());
- }
-
- return result;
- }
- };
-
- public EditableModuleDescriptor(ModuleDescriptor descriptor) {
- this.descriptor = descriptor;
- dependencies = new TreeSet/* */(DEFAULT_DEPENDENCY_COMPARATOR);
- dependencies.addAll(Arrays.asList(descriptor.getDependencies()));
- }
-
- public void removeDependency(DependencyDescriptor remove) {
- DependencyDescriptor ddToRemove;
- if ((ddToRemove = findDependencyDescriptor(dependencies, remove)) != null) {
- delta.remove(ddToRemove);
- dependencies.remove(ddToRemove);
- }
- }
-
- public void addDependency(DependencyDescriptor add) {
- add.getDependencyConfigurations(add.getModuleConfigurations());
-
- if (findDependencyDescriptor(dependencies, add) == null) {
- delta.add(add);
- dependencies.add(add);
- }
- }
-
- public void removeDependencies(DependencyDescriptor[] removes) {
- for (int i = 0; i < removes.length; i++) {
- removeDependency(removes[i]);
- }
- }
-
- public void removeDependencies(Collection/* */removes) {
- removeDependencies((DependencyDescriptor[]) removes
- .toArray(new DependencyDescriptor[removes.size()]));
- }
-
- public void addDependencies(DependencyDescriptor[] additions) {
- for (int i = 0; i < additions.length; i++)
- addDependency(additions[i]);
- }
-
- public void addDependencies(Collection/* */additions) {
- addDependencies((DependencyDescriptor[]) additions
- .toArray(new DependencyDescriptor[additions.size()]));
- }
-
- public DependencyDescriptor[] getDependencies() {
- return (DependencyDescriptor[]) dependencies.toArray(new DependencyDescriptor[dependencies
- .size()]);
- }
-
- public boolean isEdited() {
- return !delta.isEmpty();
- }
-
- public boolean dependsOn(VersionMatcher matcher, ModuleDescriptor md) {
- for (Iterator iter = dependencies.iterator(); iter.hasNext();) {
- DependencyDescriptor dd = (DependencyDescriptor) iter.next();
- if (dd.getDependencyId().equals(md.getModuleRevisionId().getModuleId())) {
- if (md.getResolvedModuleRevisionId().getRevision() == null) {
- return true;
- }
- if (matcher.accept(dd.getDependencyRevisionId(), md)) {
- return true;
- }
- }
- }
-
- return false;
- }
-
- /**
- * Careful - This method bypasses the module descriptor Parser and Resource and delegates
- * directly to XmlModuleDescriptorWriter.
- *
- * @see org.apache.ivy.core.module.descriptor.ModuleDescriptor#toIvyFile(java.io.File)
- */
- public void toIvyFile(File destFile) throws ParseException, IOException {
- XmlModuleDescriptorWriter.write(this, destFile);
- }
-
- private DependencyDescriptor findDependencyDescriptor(
- Collection/* */findIn, DependencyDescriptor find) {
- Iterator iter = findIn.iterator();
- while (iter.hasNext()) {
- DependencyDescriptor dependency = (DependencyDescriptor) iter.next();
- if (dependency.getDependencyRevisionId().equals(find.getDependencyRevisionId())) {
- return dependency;
- }
- }
-
- return null;
- }
-
- // Delegate all of the interface methods ---------------------------------
-
- public Artifact[] getAllArtifacts() {
- return descriptor.getAllArtifacts();
- }
-
- public Artifact[] getArtifacts(String s) {
- return descriptor.getArtifacts(s);
- }
-
- public String getAttribute(String s) {
- return descriptor.getAttribute(s);
- }
-
- public Map getAttributes() {
- return descriptor.getAttributes();
- }
-
- public Configuration getConfiguration(String s) {
- return descriptor.getConfiguration(s);
- }
-
- public Configuration[] getConfigurations() {
- return descriptor.getConfigurations();
- }
-
- public String[] getConfigurationsNames() {
- return descriptor.getConfigurationsNames();
- }
-
- public ConflictManager getConflictManager(ModuleId moduleid) {
- return descriptor.getConflictManager(moduleid);
- }
-
- public String getExtraAttribute(String s) {
- return descriptor.getExtraAttribute(s);
- }
-
- public Map getExtraAttributes() {
- return descriptor.getExtraAttributes();
- }
-
- public String getHomePage() {
- return descriptor.getHomePage();
- }
-
- public long getLastModified() {
- return descriptor.getLastModified();
- }
-
- public License[] getLicenses() {
- return descriptor.getLicenses();
- }
-
- public ModuleRevisionId getModuleRevisionId() {
- return descriptor.getModuleRevisionId();
- }
-
- public ModuleDescriptorParser getParser() {
- return descriptor.getParser();
- }
-
- public Date getPublicationDate() {
- return descriptor.getPublicationDate();
- }
-
- public String[] getPublicConfigurationsNames() {
- return descriptor.getPublicConfigurationsNames();
- }
-
- public ModuleRevisionId getResolvedModuleRevisionId() {
- return ModuleRevisionId.newInstance(descriptor.getResolvedModuleRevisionId()
- .getOrganisation(), descriptor.getResolvedModuleRevisionId().getName(), "revision");
- }
-
- public Date getResolvedPublicationDate() {
- return descriptor.getResolvedPublicationDate();
- }
-
- public Resource getResource() {
- return descriptor.getResource();
- }
-
- public String getStatus() {
- return descriptor.getStatus();
- }
-
- public boolean isDefault() {
- return descriptor.isDefault();
- }
-
- public boolean canExclude() {
- return descriptor.canExclude();
- }
-
- public boolean doesExclude(String[] as, ArtifactId artifactid) {
- return descriptor.doesExclude(as, artifactid);
- }
-
- public ExcludeRule[] getAllExcludeRules() {
- return descriptor.getAllExcludeRules();
- }
-
- public void setResolvedModuleRevisionId(ModuleRevisionId modulerevisionid) {
- descriptor.setResolvedModuleRevisionId(modulerevisionid);
- }
-
- public void setResolvedPublicationDate(Date date) {
- descriptor.setResolvedPublicationDate(date);
- }
-
- protected class DependencyDescriptorDelta {
- private Set/* */added = new HashSet();
-
- private Set/* */deleted = new HashSet();
-
- public void add(DependencyDescriptor dependency) {
- DependencyDescriptor ddToRemove;
- if ((ddToRemove = findDependencyDescriptor(deleted, dependency)) != null) {
- deleted.remove(ddToRemove);
- } else {
- added.add(dependency);
- }
- }
-
- public void remove(DependencyDescriptor dependency) {
- DependencyDescriptor ddToRemove;
- if ((ddToRemove = findDependencyDescriptor(added, dependency)) != null) {
- added.remove(ddToRemove);
- } else {
- deleted.add(dependency);
- }
- }
-
- public void clear() {
- added = new HashSet/* */();
- deleted = new HashSet/* */();
- }
-
- public boolean isEmpty() {
- return added.size() == 0 && deleted.size() == 0;
- }
-
- public Collection/* */getDeletedDeltas() {
- return deleted;
- }
-
- public Collection/* */getAddedDeltas() {
- return added;
- }
- }
-
- public Map getExtraAttributesNamespaces() {
- return descriptor.getExtraAttributesNamespaces();
- }
-
- public Map getExtraInfo() {
- return descriptor.getExtraInfo();
- }
-
- public Artifact getMetadataArtifact() {
- return descriptor.getMetadataArtifact();
- }
-
- public Map getQualifiedExtraAttributes() {
- return descriptor.getQualifiedExtraAttributes();
- }
-
- public String getRevision() {
- return descriptor.getRevision();
- }
-
- public ModuleRules getAllDependencyDescriptorMediators() {
- return descriptor.getAllDependencyDescriptorMediators();
- }
- public String getDescription() {
- return descriptor.getDescription();
- }
-
- public DependencyDescriptor mediate(DependencyDescriptor arg0) {
- return descriptor.mediate(arg0);
- }
-}
Index: src/java/org/apache/ivyde/eclipse/revdepexplorer/SyncIvyFilesJob.java
===================================================================
--- src/java/org/apache/ivyde/eclipse/revdepexplorer/SyncIvyFilesJob.java (revision 822319)
+++ src/java/org/apache/ivyde/eclipse/revdepexplorer/SyncIvyFilesJob.java (working copy)
@@ -17,19 +17,32 @@
*/
package org.apache.ivyde.eclipse.revdepexplorer;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
import java.io.IOException;
-import java.text.ParseException;
-import java.util.ArrayList;
+import java.net.MalformedURLException;
import java.util.Arrays;
import java.util.Collection;
+import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
+import java.util.Map;
import org.apache.ivy.core.module.descriptor.DependencyDescriptor;
+import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
+import org.apache.ivy.core.module.id.ModuleId;
+import org.apache.ivy.core.module.id.ModuleRevisionId;
+import org.apache.ivy.plugins.namespace.Namespace;
+import org.apache.ivy.plugins.namespace.NamespaceTransformer;
+import org.apache.ivy.plugins.parser.xml.UpdateOptions;
+import org.apache.ivy.plugins.parser.xml.XmlModuleDescriptorUpdater;
import org.apache.ivyde.eclipse.IvyDEException;
import org.apache.ivyde.eclipse.IvyPlugin;
import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathContainer;
-import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathUtil;
+import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathContainerConfiguration;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.WorkspaceJob;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -37,6 +50,7 @@
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Status;
+import org.xml.sax.SAXException;
/**
* This job synchronizes all ivy files in a workspace according to the new revisions specified in
@@ -46,10 +60,47 @@
private MultiRevisionDependencyDescriptor[] multiRevisionDependencies;
+ /**
+ * FIXME Here we seriously abuse the Ivy core API to allow us to preserve an info element
+ * containing no revision attribute. Ivy code should be altered to allow us to preserve
+ * revision (including the lack of its definition!).
+ */
+ private class RevisionPreservingNamespace extends Namespace {
+ private class NullableRevisionModuleRevisionId extends ModuleRevisionId {
+ private String revision;
+
+ public NullableRevisionModuleRevisionId(ModuleId moduleId, String revision) {
+ super(moduleId, revision);
+ this.revision = revision;
+ }
+
+ public String getRevision() {
+ return revision;
+ }
+ }
+
+ private class RevisionPreservingNamespaceTransformer implements NamespaceTransformer {
+ public boolean isIdentity() {
+ return false;
+ }
+
+ public ModuleRevisionId transform(ModuleRevisionId mrid) {
+ if(mrid.getRevision().contains("working@")) {
+ return new NullableRevisionModuleRevisionId(mrid.getModuleId(), null);
+ }
+ return new ModuleRevisionId(mrid.getModuleId(), mrid.getRevision());
+ }
+ }
+
+ public NamespaceTransformer getToSystemTransformer() {
+ return new RevisionPreservingNamespaceTransformer();
+ }
+ }
+
public SyncIvyFilesJob(MultiRevisionDependencyDescriptor[] multiRevisionDependencies) {
super("Synchronizing Ivy Files");
this.multiRevisionDependencies = multiRevisionDependencies;
- }
+ }
protected IStatus executeJob(IProgressMonitor monitor) {
MultiStatus errorStatuses = new MultiStatus(IvyPlugin.ID, IStatus.ERROR,
@@ -59,10 +110,9 @@
for (int i = 0; i < containers.length; i++) {
IvyClasspathContainer container = containers[i];
- EditableModuleDescriptor moduleDescriptor;
+ ModuleDescriptor moduleDescriptor;
try {
- moduleDescriptor = new EditableModuleDescriptor(container.getState()
- .getModuleDescriptor());
+ moduleDescriptor = container.getState().getModuleDescriptor();
} catch (IvyDEException e) {
errorStatuses
.add(new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR,
@@ -70,36 +120,47 @@
+ container.getConf().getIvyXmlPath(), e));
continue;
}
- Collection/* */newRevisions = getNewRevisions(container);
-
- Iterator multiRevisionIter = newRevisions.iterator();
- while (multiRevisionIter.hasNext()) {
- MultiRevisionDependencyDescriptor newRevision = (MultiRevisionDependencyDescriptor) multiRevisionIter
- .next();
-
- DependencyDescriptor dependencyDescriptors[] = moduleDescriptor.getDependencies();
- for (int j = 0; j < dependencyDescriptors.length; j++) {
- DependencyDescriptor dependencyDescriptor = dependencyDescriptors[j];
- if (newRevision.getModuleId().equals(dependencyDescriptor.getDependencyId())) {
- EditableDependencyDescriptor editableDependencyDescriptor = new EditableDependencyDescriptor(
- dependencyDescriptor);
- editableDependencyDescriptor.setRevision(newRevision.getNewRevision());
- moduleDescriptor.removeDependency(dependencyDescriptor);
- moduleDescriptor.addDependency(editableDependencyDescriptor);
+
+ Map/* */ newRevisions = new HashMap/**/();
+
+ DependencyDescriptor[] dependencies = moduleDescriptor.getDependencies();
+ for(int j = 0; j < dependencies.length; j++) {
+ for (int k = 0; k < multiRevisionDependencies.length; k++) {
+ MultiRevisionDependencyDescriptor multiRevision = multiRevisionDependencies[k];
+ ModuleRevisionId dependencyRevisionId = dependencies[j].getDependencyRevisionId();
+ if (dependencies[j].getDependencyId().equals(multiRevision.getModuleId()) &&
+ multiRevision.hasNewRevision() && multiRevision.isForContainer(container)) {
+ newRevisions.put(dependencyRevisionId, multiRevisionDependencies[k].getNewRevision());
+ break; // move on to the next dependency
}
}
}
-
- try {
- IvyClasspathUtil.toIvyFile(moduleDescriptor, container);
- } catch (ParseException e) {
+
+ UpdateOptions updateOptions = new UpdateOptions()
+ .setResolvedRevisions(newRevisions)
+ .setReplaceInclude(false)
+ .setGenerateRevConstraint(false)
+ .setNamespace(new RevisionPreservingNamespace());
+ File ivyFile = container.getState().getIvyFile();
+
+ File ivyTempFile = new File(ivyFile.toString() + ".temp");
+ try {
+ XmlModuleDescriptorUpdater.update(ivyFile.toURI().toURL(), ivyTempFile, updateOptions);
+ saveChanges(container, ivyFile, ivyTempFile);
+ } catch (MalformedURLException e) {
errorStatuses.add(new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR,
- "Failed to write Ivy file " + container.getState().getIvyFile().getPath(),
- e));
+ "Failed to write Ivy file " + container.getState().getIvyFile().getPath()
+ + " (malformed URL)", e));
} catch (IOException e) {
errorStatuses.add(new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR,
"Failed to write Ivy file " + container.getState().getIvyFile().getPath(),
e));
+ } catch (SAXException e) {
+ errorStatuses.add(new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR,
+ "Failed to write Ivy file " + container.getState().getIvyFile().getPath(),
+ e));
+ } finally {
+ ivyTempFile.delete();
}
}
@@ -135,24 +196,20 @@
.size()]);
}
- /**
- * Return the new revision changes for a given project
- *
- * @param project
- * project
- * @return multiRevision descriptors
- */
- private Collection/* */getNewRevisions(
- IvyClasspathContainer container) {
- Collection/* */list = new ArrayList();
-
- for (int i = 0; i < multiRevisionDependencies.length; i++) {
- MultiRevisionDependencyDescriptor multiRevision = multiRevisionDependencies[i];
- if (multiRevision.hasNewRevision() && multiRevision.isForContainer(container)) {
- list.add(multiRevision);
+ private void saveChanges(IvyClasspathContainer container, File permanentSaveTarget, File temporaryChanges) throws IOException {
+ IvyClasspathContainerConfiguration conf = container.getConf();
+ IFile virtualIvyFile = conf.getJavaProject().getProject().getFile(conf.getIvyXmlPath());
+ IStatus writable = virtualIvyFile.getWorkspace().validateEdit(new IFile[] {virtualIvyFile},
+ IWorkspace.VALIDATE_PROMPT);
+ if (writable.isOK()) {
+ FileWriter writer = new FileWriter(permanentSaveTarget, false);
+ BufferedReader reader = new BufferedReader(new FileReader(temporaryChanges));
+ while(reader.ready()) {
+ writer.write(reader.readLine() + "\n");
}
+ writer.flush();
+ writer.close();
+ reader.close();
}
-
- return list;
- }
+ }
}