2 * Copyright (C) 2008 The Android Open Source Project
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
8 * http://www.eclipse.org/org/documents/epl-v10.php
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.
17 package com.android.ide.eclipse.adt.io;
19 import com.android.sdklib.io.IAbstractFile;
20 import com.android.sdklib.io.IAbstractFolder;
21 import com.android.sdklib.io.IAbstractResource;
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;
30 import java.util.ArrayList;
33 * An implementation of {@link IAbstractFolder} on top of either an {@link IFolder} or an
34 * {@link IContainer} object.
36 public class IFolderWrapper implements IAbstractFolder {
38 private final IFolder mFolder; // could be null.
39 private final IContainer mContainer; // never null.
41 public IFolderWrapper(IFolder folder) {
42 mContainer = mFolder = folder;
45 public IFolderWrapper(IContainer container) {
46 mFolder = container instanceof IFolder ? (IFolder)container : null;
47 mContainer = container;
50 public String getName() {
51 return mContainer.getName();
54 public boolean exists() {
55 return mContainer.exists();
58 public IAbstractResource[] listMembers() {
60 IResource[] members = mContainer.members();
61 final int count = members.length;
62 IAbstractResource[] afiles = new IAbstractResource[count];
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);
69 afiles[i] = new IFolderWrapper((IContainer) f);
74 } catch (CoreException e) {
75 // return empty array below
78 return new IAbstractResource[0];
81 public boolean hasFile(String name) {
83 IResource[] files = mContainer.members();
84 for (IResource file : files) {
85 if (name.equals(file.getName())) {
89 } catch (CoreException e) {
90 // we'll return false below.
96 public IAbstractFile getFile(String name) {
97 if (mFolder != null) {
98 IFile file = mFolder.getFile(name);
99 return new IFileWrapper(file);
102 IFile file = mContainer.getFile(new Path(name));
103 return new IFileWrapper(file);
107 * Returns the {@link IFolder} object that the receiver could represent.
108 * Can be <code>null</code>
110 public IFolder getIFolder() {
115 public boolean equals(Object obj) {
116 if (obj instanceof IFolderWrapper) {
117 return mFolder.equals(((IFolderWrapper)obj).mFolder);
120 if (obj instanceof IFolder) {
121 return mFolder.equals(obj);
124 return super.equals(obj);
128 public int hashCode() {
129 return mContainer.hashCode();
132 public IAbstractFolder getFolder(String name) {
133 if (mFolder != null) {
134 IFolder folder = mFolder.getFolder(name);
135 return new IFolderWrapper(folder);
138 IFolder folder = mContainer.getFolder(new Path(name));
139 return new IFolderWrapper(folder);
142 public String getOsLocation() {
143 return mContainer.getLocation().toOSString();
146 public String[] list(FilenameFilter filter) {
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());
157 return list.toArray(new String[list.size()]);
159 } catch (CoreException e) {
160 // can't read the members? return empty list below.
163 return new String[0];
166 public IAbstractFolder getParentFolder() {
167 IContainer p = mContainer.getParent();
169 return new IFolderWrapper(p);