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