OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / sdk / eclipse / plugins / com.android.ide.eclipse.adt / src / com / android / ide / eclipse / adt / io / IFolderWrapper.java
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Eclipse Public License, Version 1.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.eclipse.org/org/documents/epl-v10.php
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.android.ide.eclipse.adt.io;
18
19 import com.android.sdklib.io.IAbstractFile;
20 import com.android.sdklib.io.IAbstractFolder;
21 import com.android.sdklib.io.IAbstractResource;
22
23 import org.eclipse.core.resources.IContainer;
24 import org.eclipse.core.resources.IFile;
25 import org.eclipse.core.resources.IFolder;
26 import org.eclipse.core.resources.IResource;
27 import org.eclipse.core.runtime.CoreException;
28 import org.eclipse.core.runtime.Path;
29
30 import java.util.ArrayList;
31
32 /**
33  * An implementation of {@link IAbstractFolder} on top of either an {@link IFolder} or an
34  * {@link IContainer} object.
35  */
36 public class IFolderWrapper implements IAbstractFolder {
37
38     private final IFolder mFolder; // could be null.
39     private final IContainer mContainer; // never null.
40
41     public IFolderWrapper(IFolder folder) {
42         mContainer = mFolder = folder;
43     }
44
45     public IFolderWrapper(IContainer container) {
46         mFolder = container instanceof IFolder ? (IFolder)container : null;
47         mContainer = container;
48     }
49
50     public String getName() {
51         return mContainer.getName();
52     }
53
54     public boolean exists() {
55         return mContainer.exists();
56     }
57
58     public IAbstractResource[] listMembers() {
59         try {
60             IResource[] members = mContainer.members();
61             final int count = members.length;
62             IAbstractResource[] afiles = new IAbstractResource[count];
63
64             for (int i = 0 ; i < count ; i++) {
65                 IResource f = members[i];
66                 if (f instanceof IFile) {
67                     afiles[i] = new IFileWrapper((IFile) f);
68                 } else {
69                     afiles[i] = new IFolderWrapper((IContainer) f);
70                 }
71             }
72
73             return afiles;
74         } catch (CoreException e) {
75             // return empty array below
76         }
77
78         return new IAbstractResource[0];
79     }
80
81     public boolean hasFile(String name) {
82         try {
83             IResource[] files = mContainer.members();
84             for (IResource file : files) {
85                 if (name.equals(file.getName())) {
86                     return true;
87                 }
88             }
89         } catch (CoreException e) {
90             // we'll return false below.
91         }
92
93         return false;
94     }
95
96     public IAbstractFile getFile(String name) {
97         if (mFolder != null) {
98             IFile file = mFolder.getFile(name);
99             return new IFileWrapper(file);
100         }
101
102         IFile file = mContainer.getFile(new Path(name));
103         return new IFileWrapper(file);
104     }
105
106     /**
107      * Returns the {@link IFolder} object that the receiver could represent.
108      * Can be <code>null</code>
109      */
110     public IFolder getIFolder() {
111         return mFolder;
112     }
113
114     @Override
115     public boolean equals(Object obj) {
116         if (obj instanceof IFolderWrapper) {
117             return mFolder.equals(((IFolderWrapper)obj).mFolder);
118         }
119
120         if (obj instanceof IFolder) {
121             return mFolder.equals(obj);
122         }
123
124         return super.equals(obj);
125     }
126
127     @Override
128     public int hashCode() {
129         return mContainer.hashCode();
130     }
131
132     public IAbstractFolder getFolder(String name) {
133         if (mFolder != null) {
134             IFolder folder = mFolder.getFolder(name);
135             return new IFolderWrapper(folder);
136         }
137
138         IFolder folder = mContainer.getFolder(new Path(name));
139         return new IFolderWrapper(folder);
140     }
141
142     public String getOsLocation() {
143         return mContainer.getLocation().toOSString();
144     }
145
146     public String[] list(FilenameFilter filter) {
147         try {
148             IResource[] members = mContainer.members();
149             if (members.length > 0) {
150                 ArrayList<String> list = new ArrayList<String>();
151                 for (IResource res : members) {
152                     if (filter.accept(this, res.getName())) {
153                         list.add(res.getName());
154                     }
155                 }
156
157                 return list.toArray(new String[list.size()]);
158             }
159         } catch (CoreException e) {
160             // can't read the members? return empty list below.
161         }
162
163         return new String[0];
164     }
165
166     public IAbstractFolder getParentFolder() {
167         IContainer p = mContainer.getParent();
168         if (p != null) {
169             return new IFolderWrapper(p);
170         }
171
172         return null;
173     }
174 }