• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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