Changes:
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / core / PackageFragment.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/PackageFragment.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/PackageFragment.java
new file mode 100644 (file)
index 0000000..2b559f5
--- /dev/null
@@ -0,0 +1,366 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.core;
+
+import net.sourceforge.phpdt.core.ICompilationUnit;
+import net.sourceforge.phpdt.core.IJavaElement;
+import net.sourceforge.phpdt.core.IJavaProject;
+import net.sourceforge.phpdt.core.IPackageFragment;
+import net.sourceforge.phpdt.core.IPackageFragmentRoot;
+import net.sourceforge.phpdt.core.JavaModelException;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+
+
+/**
+ * @see IPackageFragment
+ */
+public class PackageFragment extends Openable implements IPackageFragment {
+               /**
+        * Constant empty list of compilation units
+        */
+       protected static ICompilationUnit[] fgEmptyCompilationUnitList= new ICompilationUnit[] {};
+/**
+ * Constructs a handle for a package fragment
+ *
+ * @see IPackageFragment
+ */
+protected PackageFragment(IPackageFragmentRoot root, String name) {
+       super(PACKAGE_FRAGMENT, null, name);
+}
+/**
+ * Compute the children of this package fragment.
+ *
+ * <p>Package fragments which are folders recognize files based on the
+ * type of the fragment
+ * <p>Package fragments which are in a jar only recognize .class files (
+ * @see JarPackageFragment).
+ */
+//protected boolean computeChildren(OpenableElementInfo info, IResource resource) throws JavaModelException {
+//     ArrayList vChildren = new ArrayList();
+//     int kind = getKind();
+//     String extType;
+//     if (kind == IPackageFragmentRoot.K_SOURCE) {
+//             extType = "java"; //$NON-NLS-1$
+//     } else {
+//             extType = "class"; //$NON-NLS-1$
+//     }
+//     try {
+//             char[][] exclusionPatterns = ((PackageFragmentRoot)getPackageFragmentRoot()).fullExclusionPatternChars();
+//             IResource[] members = ((IContainer) resource).members();
+//             for (int i = 0, max = members.length; i < max; i++) {
+//                     IResource child = members[i];
+//                     if (child.getType() != IResource.FOLDER
+//                                     && !Util.isExcluded(child, exclusionPatterns)) {
+//                             String extension = child.getProjectRelativePath().getFileExtension();
+//                             if (extension != null) {
+//                                     if (extension.equalsIgnoreCase(extType)) {
+//                                             IJavaElement childElement;
+//                                             if (kind == IPackageFragmentRoot.K_SOURCE && Util.isValidCompilationUnitName(child.getName())) {
+//                                                     childElement = getCompilationUnit(child.getName());
+//                                                     vChildren.add(childElement);
+//                                             } else if (Util.isValidClassFileName(child.getName())) {
+//                                                     childElement = getClassFile(child.getName());
+//                                                     vChildren.add(childElement);
+//                                             }
+//                                     }
+//                             }
+//                     }
+//             }
+//     } catch (CoreException e) {
+//             throw new JavaModelException(e);
+//     }
+//     IJavaElement[] children = new IJavaElement[vChildren.size()];
+//     vChildren.toArray(children);
+//     info.setChildren(children);
+//     return true;
+//}
+/**
+ * Returns true if this fragment contains at least one java resource.
+ * Returns false otherwise.
+ */
+//public boolean containsJavaResources() throws JavaModelException {
+//     return ((PackageFragmentInfo) getElementInfo()).containsJavaResources();
+//}
+/**
+ * @see ISourceManipulation
+ */
+//public void copy(IJavaElement container, IJavaElement sibling, String rename, boolean force, IProgressMonitor monitor) throws JavaModelException {
+//     if (container == null) {
+//             throw new IllegalArgumentException(Util.bind("operation.nullContainer")); //$NON-NLS-1$
+//     }
+//     IJavaElement[] elements= new IJavaElement[] {this};
+//     IJavaElement[] containers= new IJavaElement[] {container};
+//     IJavaElement[] siblings= null;
+//     if (sibling != null) {
+//             siblings= new IJavaElement[] {sibling};
+//     }
+//     String[] renamings= null;
+//     if (rename != null) {
+//             renamings= new String[] {rename};
+//     }
+//     getJavaModel().copy(elements, containers, siblings, renamings, force, monitor);
+//}
+/**
+ * @see IPackageFragment
+ */
+public ICompilationUnit createCompilationUnit(String name, String contents, boolean force, IProgressMonitor monitor) throws JavaModelException {
+//     CreateCompilationUnitOperation op= new CreateCompilationUnitOperation(this, name, contents, force);
+//     runOperation(op, monitor);
+//     return getCompilationUnit(name);
+    return null;
+}
+/**
+ * @see JavaElement
+ */
+//protected OpenableElementInfo createElementInfo() {
+//     return new PackageFragmentInfo();
+//}
+/**
+ * @see ISourceManipulation
+ */
+//public void delete(boolean force, IProgressMonitor monitor) throws JavaModelException {
+//     IJavaElement[] elements = new IJavaElement[] {this};
+//     getJavaModel().delete(elements, force, monitor);
+//}
+/**
+ * @see Openable
+ */
+//protected boolean generateInfos(OpenableElementInfo info, IProgressMonitor pm, Map newElements, IResource underlyingResource) throws JavaModelException {
+//     
+//     return computeChildren(info, underlyingResource);
+//}
+///**
+// * @see IPackageFragment#getClassFile(String)
+// */
+//public IClassFile getClassFile(String name) {
+//     return new ClassFile(this, name);
+//}
+/**
+ * Returns a the collection of class files in this - a folder package fragment which has a root
+ * that has its kind set to <code>IPackageFragmentRoot.K_Source</code> does not
+ * recognize class files.
+ *
+ * @see IPackageFragment#getClassFiles()
+ */
+//public IClassFile[] getClassFiles() throws JavaModelException {
+//     if (getKind() == IPackageFragmentRoot.K_SOURCE) {
+//             return fgEmptyClassFileList;
+//     }
+//     
+//     ArrayList list = getChildrenOfType(CLASS_FILE);
+//     IClassFile[] array= new IClassFile[list.size()];
+//     list.toArray(array);
+//     return array;
+//}
+/**
+ * @see IPackageFragment#getCompilationUnit(String)
+ */
+public ICompilationUnit getCompilationUnit(String name) {
+       return new CompilationUnit(this, name);
+}
+/**
+ * @see IPackageFragment#getCompilationUnits()
+ */
+//public ICompilationUnit[] getCompilationUnits() throws JavaModelException {
+//     if (getKind() == IPackageFragmentRoot.K_BINARY) {
+//             return fgEmptyCompilationUnitList;
+//     }
+//     
+//     ArrayList list = getChildrenOfType(COMPILATION_UNIT);
+//     ICompilationUnit[] array= new ICompilationUnit[list.size()];
+//     list.toArray(array);
+//     return array;
+//}
+/**
+ * @see JavaElement#getHandleMementoDelimiter()
+ */
+protected char getHandleMementoDelimiter() {
+       return JavaElement.JEM_PACKAGEFRAGMENT;
+}
+/**
+ * @see IPackageFragment#getKind()
+ */
+//public int getKind() throws JavaModelException {
+//     return ((IPackageFragmentRoot)getParent()).getKind();
+//}
+/**
+ * Returns an array of non-java resources contained in the receiver.
+ */
+//public Object[] getNonJavaResources() throws JavaModelException {
+//     if (this.isDefaultPackage()) {
+//             // We don't want to show non java resources of the default package (see PR #1G58NB8)
+//             return JavaElementInfo.NO_NON_JAVA_RESOURCES;
+//     } else {
+//             return ((PackageFragmentInfo) getElementInfo()).getNonJavaResources(getResource(), (PackageFragmentRoot)getPackageFragmentRoot());
+//     }
+//}
+/**
+ * @see IJavaElement#getPath()
+ */
+//public IPath getPath() {
+//     PackageFragmentRoot root = this.getPackageFragmentRoot();
+//     if (root.isArchive()) {
+//             return root.getPath();
+//     } else {
+//             return root.getPath().append(this.getElementName().replace('.', '/'));
+//     }
+//}
+/**
+ * @see IJavaElement#getResource()
+ */
+public IResource getResource() {
+       PackageFragmentRoot root = this.getPackageFragmentRoot();
+       if (root.isArchive()) {
+               return root.getResource();
+       } else {
+               String elementName = this.getElementName();
+               if (elementName.length() == 0) {
+                       return root.getResource();
+               } else {
+                       return ((IContainer)root.getResource()).getFolder(new Path(this.getElementName().replace('.', '/')));
+               }
+       }
+}
+/**
+ * @see IJavaElement#getUnderlyingResource()
+ */
+public IResource getUnderlyingResource() throws JavaModelException {
+       IResource rootResource = fParent.getUnderlyingResource();
+       if (rootResource == null) {
+               //jar package fragment root that has no associated resource
+               return null;
+       }
+       // the underlying resource may be a folder or a project (in the case that the project folder
+       // is atually the package fragment root)
+//     if (rootResource.getType() == IResource.FOLDER || rootResource.getType() == IResource.PROJECT) {
+//             IContainer folder = (IContainer) rootResource;
+//             String[] segs = Signature.getSimpleNames(fName);
+//             for (int i = 0; i < segs.length; ++i) {
+//                     IResource child = folder.findMember(segs[i]);
+//                     if (child == null || child.getType() != IResource.FOLDER) {
+//                             throw newNotPresentException();
+//                     }
+//                     folder = (IFolder) child;
+//             }
+//             return folder;
+//     } else {
+               return rootResource;
+//     }
+}
+/**
+ * @see IPackageFragment#hasSubpackages()
+ */
+//public boolean hasSubpackages() throws JavaModelException {
+//     IJavaElement[] packages= ((IPackageFragmentRoot)getParent()).getChildren();
+//     String name = getElementName();
+//     int nameLength = name.length();
+//     String packageName = isDefaultPackage() ? name : name+"."; //$NON-NLS-1$
+//     for (int i= 0; i < packages.length; i++) {
+//             String otherName = packages[i].getElementName();
+//             if (otherName.length() > nameLength && otherName.startsWith(packageName)) {
+//                     return true;
+//             }
+//     }
+//     return false;
+//}
+/**
+ * @see IPackageFragment#isDefaultPackage()
+ */
+public boolean isDefaultPackage() {
+       return this.getElementName().length() == 0;
+}
+/**
+ * @see ISourceManipulation#move(IJavaElement, IJavaElement, String, boolean, IProgressMonitor)
+ */
+//public void move(IJavaElement container, IJavaElement sibling, String rename, boolean force, IProgressMonitor monitor) throws JavaModelException {
+//     if (container == null) {
+//             throw new IllegalArgumentException(Util.bind("operation.nullContainer")); //$NON-NLS-1$
+//     }
+//     IJavaElement[] elements= new IJavaElement[] {this};
+//     IJavaElement[] containers= new IJavaElement[] {container};
+//     IJavaElement[] siblings= null;
+//     if (sibling != null) {
+//             siblings= new IJavaElement[] {sibling};
+//     }
+//     String[] renamings= null;
+//     if (rename != null) {
+//             renamings= new String[] {rename};
+//     }
+//     getJavaModel().move(elements, containers, siblings, renamings, force, monitor);
+//}
+//protected void openWhenClosed(IProgressMonitor pm) throws JavaModelException {
+//     if (!this.resourceExists()) throw newNotPresentException();
+//     super.openWhenClosed(pm);
+//}
+/**
+ * Recomputes the children of this element, based on the current state
+ * of the workbench.
+ */
+//public void refreshChildren() {
+//     try {
+//             OpenableElementInfo info= (OpenableElementInfo)getElementInfo();
+//             computeChildren(info, getResource());
+//     } catch (JavaModelException e) {
+//             // do nothing.
+//     }
+//}
+/**
+ * @see ISourceManipulation#rename(String, boolean, IProgressMonitor)
+ */
+//public void rename(String name, boolean force, IProgressMonitor monitor) throws JavaModelException {
+//     if (name == null) {
+//             throw new IllegalArgumentException(Util.bind("element.nullName")); //$NON-NLS-1$
+//     }
+//     IJavaElement[] elements= new IJavaElement[] {this};
+//     IJavaElement[] dests= new IJavaElement[] {this.getParent()};
+//     String[] renamings= new String[] {name};
+//     getJavaModel().rename(elements, dests, renamings, force, monitor);
+//}
+/*
+ * @see JavaElement#rootedAt(IJavaProject)
+ */
+public IJavaElement rootedAt(IJavaProject project) {
+       return
+               new PackageFragment(
+                       (IPackageFragmentRoot)((JavaElement)fParent).rootedAt(project), 
+                       fName);
+}
+/**
+ * Debugging purposes
+ */
+protected void toStringChildren(int tab, StringBuffer buffer, Object info) {
+       if (tab == 0) {
+               super.toStringChildren(tab, buffer, info);
+       }
+}
+/**
+ * Debugging purposes
+ */
+protected void toStringInfo(int tab, StringBuffer buffer, Object info) {
+       buffer.append(this.tabString(tab));
+       if (getElementName().length() == 0) {
+               buffer.append("[default]"); //$NON-NLS-1$
+       } else {
+               buffer.append(getElementName());
+       }
+       if (info == null) {
+               buffer.append(" (not open)"); //$NON-NLS-1$
+       } else {
+               if (tab > 0) {
+                       buffer.append(" (...)"); //$NON-NLS-1$
+               }
+       }
+}
+}