1 package com.android.ide.eclipse.adt.internal.resources.manager; 2 3 import com.android.ide.eclipse.adt.internal.resources.ResourceItem; 4 import com.android.ide.eclipse.adt.internal.resources.ResourceType; 5 import com.android.ide.eclipse.adt.internal.resources.configurations.FolderConfiguration; 6 7 import java.util.ArrayList; 8 import java.util.Collections; 9 import java.util.Comparator; 10 import java.util.List; 11 12 /** 13 * Base class for Resource Item coming from an Android Project. 14 */ 15 public abstract class ProjectResourceItem extends ResourceItem { 16 17 private final static Comparator<ResourceFile> sComparator = new Comparator<ResourceFile>() { 18 public int compare(ResourceFile file1, ResourceFile file2) { 19 // get both FolderConfiguration and compare them 20 FolderConfiguration fc1 = file1.getFolder().getConfiguration(); 21 FolderConfiguration fc2 = file2.getFolder().getConfiguration(); 22 23 return fc1.compareTo(fc2); 24 } 25 }; 26 27 /** 28 * List of files generating this ResourceItem. 29 */ 30 protected final ArrayList<ResourceFile> mFiles = new ArrayList<ResourceFile>(); 31 32 /** 33 * Constructs a new ResourceItem. 34 * @param name the name of the resource as it appears in the XML and R.java files. 35 */ ProjectResourceItem(String name)36 public ProjectResourceItem(String name) { 37 super(name); 38 } 39 40 /** 41 * Returns whether the resource item is editable directly. 42 * <p/> 43 * This is typically the case for resources that don't have alternate versions, or resources 44 * of type {@link ResourceType#ID} that aren't declared inline. 45 */ isEditableDirectly()46 public abstract boolean isEditableDirectly(); 47 48 /** 49 * Adds a new version of this resource item, by adding its {@link ResourceFile}. 50 * @param file the {@link ResourceFile} object. 51 */ add(ResourceFile file)52 protected void add(ResourceFile file) { 53 mFiles.add(file); 54 } 55 56 /** 57 * Reset the item by emptying its version list. 58 */ reset()59 protected void reset() { 60 mFiles.clear(); 61 } 62 63 /** 64 * Returns the sorted list of {@link ResourceItem} objects for this resource item. 65 */ getSourceFileArray()66 public ResourceFile[] getSourceFileArray() { 67 ArrayList<ResourceFile> list = new ArrayList<ResourceFile>(); 68 list.addAll(mFiles); 69 70 Collections.sort(list, sComparator); 71 72 return list.toArray(new ResourceFile[list.size()]); 73 } 74 75 /** 76 * Returns the list of {@link ResourceItem} objects for this resource item. 77 */ getSourceFileList()78 public List<ResourceFile> getSourceFileList() { 79 return Collections.unmodifiableList(mFiles); 80 } 81 82 83 /** 84 * Replaces the content of the receiver with the ResourceItem received as parameter. 85 * @param item 86 */ replaceWith(ProjectResourceItem item)87 protected void replaceWith(ProjectResourceItem item) { 88 mFiles.clear(); 89 mFiles.addAll(item.mFiles); 90 } 91 } 92