[294664] Classpath entry attributes lost when updating runtime classpath container
diff --git a/features/org.eclipse.jst.server_core.feature.patch/buildnotes_org.eclipse.jst.server_core.feature.patch.html b/features/org.eclipse.jst.server_core.feature.patch/buildnotes_org.eclipse.jst.server_core.feature.patch.html index b9dffd7..43743bd 100644 --- a/features/org.eclipse.jst.server_core.feature.patch/buildnotes_org.eclipse.jst.server_core.feature.patch.html +++ b/features/org.eclipse.jst.server_core.feature.patch/buildnotes_org.eclipse.jst.server_core.feature.patch.html
@@ -4,14 +4,14 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="Build" content="Build"> - <title>WTP 1.5.5 Patches</title> + <title>WTP 3.0.5 Patches</title> </head> <body> -<h1>WTP 1.5.5 Patches</h1> +<h1>WTP 3.0.5 Patches</h1> <h2>org.eclipse.jst.server_core.feature</h2> -<p>Bug <a href='https://bugs.eclipse.org/bugs/show_bug.cgi?id=274644'>274644</a>. JARs deployed wrongly within EAR</p> +<p>Bug <a href='https://bugs.eclipse.org/bugs/show_bug.cgi?id=294664'>294664</a>. Classpath entry attributes lost when updating runtime classpath container</p> </body></html> \ No newline at end of file
diff --git a/features/org.eclipse.jst.server_core.feature.patch/feature.properties b/features/org.eclipse.jst.server_core.feature.patch/feature.properties index d7f7e4e..06ef350 100644 --- a/features/org.eclipse.jst.server_core.feature.patch/feature.properties +++ b/features/org.eclipse.jst.server_core.feature.patch/feature.properties
@@ -30,7 +30,7 @@ \n\ The fixes are described in the following bugzilla entries:\n\ \n\ -Bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=274644 JARs deployed wrongly within EAR\n\ +Bug https://bugs.eclipse.org/294664 Classpath entry attributes lost when updating runtime classpath container\n\ \n\ # "copyright" property - text of the "Feature Update Copyright" copyright=\
diff --git a/features/org.eclipse.jst.server_core.feature.patch/feature.xml b/features/org.eclipse.jst.server_core.feature.patch/feature.xml index 7d2fd77..08ab969 100644 --- a/features/org.eclipse.jst.server_core.feature.patch/feature.xml +++ b/features/org.eclipse.jst.server_core.feature.patch/feature.xml
@@ -2,7 +2,7 @@ <feature id="org.eclipse.jst.server_core.feature.patch" label="%featureName" - version="1.5.5.qualifier" + version="3.0.5.qualifier" provider-name="%providerName"> <description> @@ -18,11 +18,11 @@ </license> <requires> - <import feature="org.eclipse.jst.server_core.feature" version="1.5.4.v200704150241--2PD88Q8PCH7787" patch="true"/> + <import feature="org.eclipse.jst.server_core.feature" version="3.0.4.v20090115-377Aq9oA55T5F8H35AC" patch="true"/> </requires> <plugin - id="org.eclipse.jst.server.generic.core" + id="org.eclipse.jst.server.core" download-size="0" install-size="0" version="0.0.0"
diff --git a/plugins/org.eclipse.jst.server.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.core/META-INF/MANIFEST.MF index bacd972..c51cbb4 100644 --- a/plugins/org.eclipse.jst.server.core/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.jst.server.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.jst.server.core; singleton:=true -Bundle-Version: 1.1.3.qualifier +Bundle-Version: 1.1.4.qualifier Bundle-Activator: org.eclipse.jst.server.core.internal.JavaServerPlugin Bundle-Vendor: %providerName Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.java b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.java index b1f40b0..f4f9509 100644 --- a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.java +++ b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2003, 2008 IBM Corporation and others. + * Copyright (c) 2003, 2009 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -11,17 +11,12 @@ package org.eclipse.jst.server.core; import java.io.File; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; -import org.eclipse.jdt.core.IAccessRule; import org.eclipse.jdt.core.IClasspathAttribute; import org.eclipse.jdt.core.IClasspathContainer; import org.eclipse.jdt.core.IClasspathEntry; @@ -151,7 +146,8 @@ for (int j = 0; j < size2; j++) { SourceAttachmentUpdate sau = sourceAttachments.get(j); if (sau.runtimeId.equals(runtime.getId()) && sau.entry.equals(entries[i].getPath())) { - entries[i] = JavaCore.newLibraryEntry(entries[i].getPath(), sau.sourceAttachmentPath, sau.sourceAttachmentRootPath, new IAccessRule[0], sau.attributes, false); + IClasspathAttribute[] consolidatedClasspathAttributes = consolidateClasspathAttributes(sau.attributes, entries[i].getExtraAttributes()); + entries[i] = JavaCore.newLibraryEntry(entries[i].getPath(), sau.sourceAttachmentPath, sau.sourceAttachmentRootPath, entries[i].getAccessRules(), consolidatedClasspathAttributes, false); } } } @@ -353,4 +349,23 @@ Trace.trace(Trace.SEVERE, "Error saving source path info", e); } } + + public IClasspathAttribute[] consolidateClasspathAttributes(IClasspathAttribute[] sourceAttachmentAttributes, IClasspathAttribute[] classpathEntryAttributes) { + List classpathAttributeList = new ArrayList(); + classpathAttributeList.addAll(Arrays.asList(sourceAttachmentAttributes)); + for (int i = 0; i < classpathEntryAttributes.length; i++) { + boolean attributeCollision = false; + for (int j = 0; j < sourceAttachmentAttributes.length; j++) { + String name = classpathEntryAttributes[i].getName(); + if(name != null && name.equals(sourceAttachmentAttributes[j].getName())) { + attributeCollision = true; + break; + } + } + if(!attributeCollision) { + classpathAttributeList.add(classpathEntryAttributes[i]); + } + } + return (IClasspathAttribute[]) classpathAttributeList.toArray(new IClasspathAttribute[classpathAttributeList.size()]); + } } \ No newline at end of file