• 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.io.IAbstractFile;
20 import com.android.io.IAbstractFolder;
21 import com.android.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.NullProgressMonitor;
29 import org.eclipse.core.runtime.Path;
30 
31 import java.util.ArrayList;
32 
33 /**
34  * An implementation of {@link IAbstractFolder} on top of either an {@link IFolder} or an
35  * {@link IContainer} object.
36  */
37 public class IFolderWrapper implements IAbstractFolder {
38 
39     private final IFolder mFolder; // could be null.
40     private final IContainer mContainer; // never null.
41 
IFolderWrapper(IFolder folder)42     public IFolderWrapper(IFolder folder) {
43         mContainer = mFolder = folder;
44     }
45 
IFolderWrapper(IContainer container)46     public IFolderWrapper(IContainer container) {
47         mFolder = container instanceof IFolder ? (IFolder)container : null;
48         mContainer = container;
49     }
50 
getName()51     public String getName() {
52         return mContainer.getName();
53     }
54 
exists()55     public boolean exists() {
56         return mContainer.exists();
57     }
58 
delete()59     public boolean delete() {
60         try {
61             mContainer.delete(true /*force*/, new NullProgressMonitor());
62             return true;
63         } catch (CoreException e) {
64             return false;
65         }
66     }
67 
68 
listMembers()69     public IAbstractResource[] listMembers() {
70         try {
71             IResource[] members = mContainer.members();
72             final int count = members.length;
73             IAbstractResource[] afiles = new IAbstractResource[count];
74 
75             for (int i = 0 ; i < count ; i++) {
76                 IResource f = members[i];
77                 if (f instanceof IFile) {
78                     afiles[i] = new IFileWrapper((IFile) f);
79                 } else {
80                     afiles[i] = new IFolderWrapper((IContainer) f);
81                 }
82             }
83 
84             return afiles;
85         } catch (CoreException e) {
86             // return empty array below
87         }
88 
89         return new IAbstractResource[0];
90     }
91 
hasFile(String name)92     public boolean hasFile(String name) {
93         try {
94             IResource[] files = mContainer.members();
95             for (IResource file : files) {
96                 if (name.equals(file.getName())) {
97                     return true;
98                 }
99             }
100         } catch (CoreException e) {
101             // we'll return false below.
102         }
103 
104         return false;
105     }
106 
getFile(String name)107     public IAbstractFile getFile(String name) {
108         if (mFolder != null) {
109             IFile file = mFolder.getFile(name);
110             return new IFileWrapper(file);
111         }
112 
113         IFile file = mContainer.getFile(new Path(name));
114         return new IFileWrapper(file);
115     }
116 
117     /**
118      * Returns the {@link IFolder} object that the receiver could represent.
119      * Can be <code>null</code>
120      */
getIFolder()121     public IFolder getIFolder() {
122         return mFolder;
123     }
124 
125     @Override
equals(Object obj)126     public boolean equals(Object obj) {
127         if (obj instanceof IFolderWrapper) {
128             return mFolder.equals(((IFolderWrapper)obj).mFolder);
129         }
130 
131         if (obj instanceof IFolder) {
132             return mFolder.equals(obj);
133         }
134 
135         return super.equals(obj);
136     }
137 
138     @Override
hashCode()139     public int hashCode() {
140         return mContainer.hashCode();
141     }
142 
getFolder(String name)143     public IAbstractFolder getFolder(String name) {
144         if (mFolder != null) {
145             IFolder folder = mFolder.getFolder(name);
146             return new IFolderWrapper(folder);
147         }
148 
149         IFolder folder = mContainer.getFolder(new Path(name));
150         return new IFolderWrapper(folder);
151     }
152 
getOsLocation()153     public String getOsLocation() {
154         return mContainer.getLocation().toOSString();
155     }
156 
list(FilenameFilter filter)157     public String[] list(FilenameFilter filter) {
158         try {
159             IResource[] members = mContainer.members();
160             if (members.length > 0) {
161                 ArrayList<String> list = new ArrayList<String>();
162                 for (IResource res : members) {
163                     if (filter.accept(this, res.getName())) {
164                         list.add(res.getName());
165                     }
166                 }
167 
168                 return list.toArray(new String[list.size()]);
169             }
170         } catch (CoreException e) {
171             // can't read the members? return empty list below.
172         }
173 
174         return new String[0];
175     }
176 
getParentFolder()177     public IAbstractFolder getParentFolder() {
178         IContainer p = mContainer.getParent();
179         if (p != null) {
180             return new IFolderWrapper(p);
181         }
182 
183         return null;
184     }
185 
186     @Override
toString()187     public String toString() {
188         return mFolder.toString();
189     }
190 }
191