• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
IFolderWrapper(IFolder folder)41     public IFolderWrapper(IFolder folder) {
42         mContainer = mFolder = folder;
43     }
44 
IFolderWrapper(IContainer container)45     public IFolderWrapper(IContainer container) {
46         mFolder = container instanceof IFolder ? (IFolder)container : null;
47         mContainer = container;
48     }
49 
getName()50     public String getName() {
51         return mContainer.getName();
52     }
53 
exists()54     public boolean exists() {
55         return mContainer.exists();
56     }
57 
listMembers()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 
hasFile(String name)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 
getFile(String name)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      */
getIFolder()110     public IFolder getIFolder() {
111         return mFolder;
112     }
113 
114     @Override
equals(Object obj)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
hashCode()128     public int hashCode() {
129         return mContainer.hashCode();
130     }
131 
getFolder(String name)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 
getOsLocation()142     public String getOsLocation() {
143         return mContainer.getLocation().toOSString();
144     }
145 
list(FilenameFilter filter)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 
getParentFolder()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 }
175