improved PHP parser
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / core / ImportContainer.java
1 /*******************************************************************************
2  * Copyright (c) 2000, 2004 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials 
4  * are made available under the terms of the Common Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v10.html
7  * 
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *******************************************************************************/
11 package net.sourceforge.phpdt.internal.core;
12
13 import net.sourceforge.phpdt.core.IImportContainer;
14 import net.sourceforge.phpdt.core.IImportDeclaration;
15 import net.sourceforge.phpdt.core.IJavaElement;
16 import net.sourceforge.phpdt.core.IParent;
17 import net.sourceforge.phpdt.core.ISourceRange;
18 import net.sourceforge.phpdt.core.ISourceReference;
19 import net.sourceforge.phpdt.core.JavaModelException;
20 import net.sourceforge.phpdt.core.WorkingCopyOwner;
21 import net.sourceforge.phpdt.internal.core.util.MementoTokenizer;
22
23 //import net.sourceforge.phpdt.internal.core.util.MementoTokenizer;
24
25 /**
26  * @see IImportContainer
27  */
28 public class ImportContainer extends SourceRefElement implements IImportContainer {
29   protected ImportContainer(CompilationUnit parent) {
30     super(parent, ""); //$NON-NLS-1$
31   }
32
33   public boolean equals(Object o) {
34     if (!(o instanceof ImportContainer))
35       return false;
36     return super.equals(o);
37   }
38
39   /**
40    * @see IJavaElement
41    */
42   public int getElementType() {
43     return IMPORT_CONTAINER;
44   }
45
46   /*
47    * @see JavaElement
48    */
49   public IJavaElement getHandleFromMemento(String token, MementoTokenizer memento, WorkingCopyOwner workingCopyOwner) {
50     switch (token.charAt(0)) {
51     case JEM_COUNT:
52       return getHandleUpdatingCountFromMemento(memento, workingCopyOwner);
53     case JEM_IMPORTDECLARATION:
54       if (memento.hasMoreTokens()) {
55         String importName = memento.nextToken();
56         JavaElement importDecl = (JavaElement) getImport(importName);
57         return importDecl.getHandleFromMemento(memento, workingCopyOwner);
58       } else {
59         return this;
60       }
61     }
62     return null;
63   }
64
65   /**
66    * @see JavaElement#getHandleMemento()
67    */
68   protected char getHandleMementoDelimiter() {
69     return JavaElement.JEM_IMPORTDECLARATION;
70   }
71
72   /**
73    * @see IImportContainer
74    */
75   public IImportDeclaration getImport(String importName) {
76     return new ImportDeclaration(this, importName);
77   }
78
79   /*
80    * @see JavaElement#getPrimaryElement(boolean)
81    */
82   public IJavaElement getPrimaryElement(boolean checkOwner) {
83     CompilationUnit cu = (CompilationUnit) this.parent;
84     if (checkOwner && cu.isPrimary())
85       return this;
86     return cu.getImportContainer();
87   }
88
89   /**
90    * @see ISourceReference
91    */
92   public ISourceRange getSourceRange() throws JavaModelException {
93     IJavaElement[] imports = getChildren();
94     ISourceRange firstRange = ((ISourceReference) imports[0]).getSourceRange();
95     ISourceRange lastRange = ((ISourceReference) imports[imports.length - 1]).getSourceRange();
96     SourceRange range = new SourceRange(firstRange.getOffset(), lastRange.getOffset() + lastRange.getLength()
97         - firstRange.getOffset());
98     return range;
99   }
100
101   /**
102    * Import containers only exist if they have children.
103    * 
104    * @see IParent
105    */
106   public boolean hasChildren() {
107     return true;
108   }
109
110   /**
111    */
112   public String readableName() {
113
114     return null;
115   }
116
117   /**
118    * @private Debugging purposes
119    */
120   protected void toString(int tab, StringBuffer buffer) {
121     Object info = JavaModelManager.getJavaModelManager().peekAtInfo(this);
122     if (info == null || !(info instanceof JavaElementInfo))
123       return;
124     IJavaElement[] children = ((JavaElementInfo) info).getChildren();
125     for (int i = 0; i < children.length; i++) {
126       if (i > 0)
127         buffer.append("\n"); //$NON-NLS-1$
128       ((JavaElement) children[i]).toString(tab, buffer);
129     }
130   }
131
132   /**
133    * Debugging purposes
134    */
135   protected void toStringInfo(int tab, StringBuffer buffer, Object info) {
136     buffer.append(this.tabString(tab));
137     buffer.append("<import container>"); //$NON-NLS-1$
138     if (info == null) {
139       buffer.append(" (not open)"); //$NON-NLS-1$
140     }
141   }
142 }