package com.android.ide.eclipse.editors.resources.manager; import com.android.ide.eclipse.common.resources.ResourceItem; import com.android.ide.eclipse.common.resources.ResourceType; import com.android.ide.eclipse.editors.resources.configurations.FolderConfiguration; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * Base class for Resource Item coming from an Android Project. */ public abstract class ProjectResourceItem extends ResourceItem { private final static Comparator<ResourceFile> sComparator = new Comparator<ResourceFile>() { public int compare(ResourceFile file1, ResourceFile file2) { // get both FolderConfiguration and compare them FolderConfiguration fc1 = file1.getFolder().getConfiguration(); FolderConfiguration fc2 = file2.getFolder().getConfiguration(); return fc1.compareTo(fc2); } }; /** * List of files generating this ResourceItem. */ protected final ArrayList<ResourceFile> mFiles = new ArrayList<ResourceFile>(); /** * Constructs a new ResourceItem. * @param name the name of the resource as it appears in the XML and R.java files. */ public ProjectResourceItem(String name) { super(name); } /** * Returns whether the resource item is editable directly. * <p/> * This is typically the case for resources that don't have alternate versions, or resources * of type {@link ResourceType#ID} that aren't declared inline. */ public abstract boolean isEditableDirectly(); /** * Adds a new version of this resource item, by adding its {@link ResourceFile}. * @param file the {@link ResourceFile} object. */ protected void add(ResourceFile file) { mFiles.add(file); } /** * Reset the item by emptying its version list. */ protected void reset() { mFiles.clear(); } /** * Returns the sorted list of {@link ResourceItem} objects for this resource item. */ public ResourceFile[] getSourceFileArray() { ArrayList<ResourceFile> list = new ArrayList<ResourceFile>(); list.addAll(mFiles); Collections.sort(list, sComparator); return list.toArray(new ResourceFile[list.size()]); } /** * Returns the list of {@link ResourceItem} objects for this resource item. */ public List<ResourceFile> getSourceFileList() { return Collections.unmodifiableList(mFiles); } /** * Replaces the content of the receiver with the ResourceItem received as parameter. * @param item */ protected void replaceWith(ProjectResourceItem item) { mFiles.clear(); mFiles.addAll(item.mFiles); } }