3m9 compatible;
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / core / ClasspathEntry.java
index df61b62..d634382 100644 (file)
  *******************************************************************************/
 package net.sourceforge.phpdt.internal.core;
 
+import java.util.HashMap;
+
 import net.sourceforge.phpdt.core.IClasspathEntry;
 import net.sourceforge.phpdt.core.IJavaProject;
 import net.sourceforge.phpdt.core.IPackageFragmentRoot;
-import net.sourceforge.phpdt.core.JavaModelException;
 import net.sourceforge.phpdt.core.JavaCore;
+import net.sourceforge.phpdt.core.JavaModelException;
 import net.sourceforge.phpdt.core.compiler.CharOperation;
+import net.sourceforge.phpdt.internal.core.util.Util;
 import net.sourceforge.phpdt.internal.corext.Assert;
 
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
+import net.sourceforge.phpdt.internal.core.XMLWriter;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
@@ -584,4 +588,70 @@ public class ClasspathEntry implements IClasspathEntry {
        
                return JavaCore.getResolvedClasspathEntry(this);
        }
+       /**
+        * Returns the XML encoding of the class path.
+        */
+       public void elementEncode(XMLWriter writer, IPath projectPath, boolean indent, boolean newLine) {
+               HashMap parameters = new HashMap();
+               
+               parameters.put("kind", ClasspathEntry.kindToString(this.entryKind));//$NON-NLS-1$
+               
+               IPath xmlPath = this.path;
+               if (this.entryKind != IClasspathEntry.CPE_VARIABLE && this.entryKind != IClasspathEntry.CPE_CONTAINER) {
+                       // translate to project relative from absolute (unless a device path)
+                       if (xmlPath.isAbsolute()) {
+                               if (projectPath != null && projectPath.isPrefixOf(xmlPath)) {
+                                       if (xmlPath.segment(0).equals(projectPath.segment(0))) {
+                                               xmlPath = xmlPath.removeFirstSegments(1);
+                                               xmlPath = xmlPath.makeRelative();
+                                       } else {
+                                               xmlPath = xmlPath.makeAbsolute();
+                                       }
+                               }
+                       }
+               }
+               parameters.put("path", String.valueOf(xmlPath));//$NON-NLS-1$
+               
+               if (this.sourceAttachmentPath != null) {
+                       xmlPath = this.sourceAttachmentPath;
+                       // translate to project relative from absolute 
+                       if (this.entryKind != IClasspathEntry.CPE_VARIABLE && projectPath != null && projectPath.isPrefixOf(xmlPath)) {
+                               if (xmlPath.segment(0).equals(projectPath.segment(0))) {
+                                       xmlPath = xmlPath.removeFirstSegments(1);
+                                       xmlPath = xmlPath.makeRelative();
+                               }
+                       }
+                       parameters.put("sourcepath", String.valueOf(xmlPath));//$NON-NLS-1$
+               }
+               if (this.sourceAttachmentRootPath != null) {
+                       parameters.put("rootpath", String.valueOf(this.sourceAttachmentRootPath));//$NON-NLS-1$
+               }
+               if (this.isExported) {
+                       parameters.put("exported", "true");//$NON-NLS-1$//$NON-NLS-2$
+               }
+//             if (this.inclusionPatterns != null && this.inclusionPatterns.length > 0) {
+//                     StringBuffer includeRule = new StringBuffer(10);
+//                     for (int i = 0, max = this.inclusionPatterns.length; i < max; i++){
+//                             if (i > 0) includeRule.append('|');
+//                             includeRule.append(this.inclusionPatterns[i]);
+//                     }
+//                     parameters.put("including", String.valueOf(includeRule));//$NON-NLS-1$
+//             }
+               if (this.exclusionPatterns != null && this.exclusionPatterns.length > 0) {
+                       StringBuffer excludeRule = new StringBuffer(10);
+                       for (int i = 0, max = this.exclusionPatterns.length; i < max; i++){
+                               if (i > 0) excludeRule.append('|');
+                               excludeRule.append(this.exclusionPatterns[i]);
+                       }
+                       parameters.put("excluding", String.valueOf(excludeRule));//$NON-NLS-1$
+               }
+               
+               if (this.specificOutputLocation != null) {
+                       IPath outputLocation = this.specificOutputLocation.removeFirstSegments(1);
+                       outputLocation = outputLocation.makeRelative();
+                       parameters.put("output", String.valueOf(outputLocation));//$NON-NLS-1$
+               }
+
+               writer.printTag("classpathentry", parameters, indent, newLine, true);//$NON-NLS-1$
+       }
 }