blob: 7c382d57a0fed1a881606c6450fc92f59f1c48a9 [file] [log] [blame]
package com.android.ide.eclipse.adt.internal.resources.manager;
import com.android.ide.eclipse.adt.internal.resources.ResourceItem;
import com.android.ide.eclipse.adt.internal.resources.ResourceType;
import com.android.ide.eclipse.adt.internal.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);
}
}