1 /* 2 * Copyright (C) 2007 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.internal.ui; 18 19 import com.android.ide.common.resources.ResourceFile; 20 import com.android.ide.common.resources.ResourceItem; 21 import com.android.ide.common.resources.ResourceRepository; 22 import com.android.resources.ResourceType; 23 24 import org.eclipse.jface.viewers.ITreeContentProvider; 25 import org.eclipse.jface.viewers.Viewer; 26 27 import java.util.Arrays; 28 import java.util.Collections; 29 import java.util.List; 30 31 /** 32 * Content provider for the Resource Explorer TreeView. 33 * Each level of the tree is represented by a different class. 34 * <ul> 35 * <li>{@link ResourceType}. This represents the list of existing Resource Type present 36 * in the resources. This can be matched to the subclasses inside the class <code>R</code> 37 * </li> 38 * <ul> 39 * <li>{@link ResourceItem}. This represents one resource (which can existing in various alternate 40 * versions). This is similar to the resource Ids defined as <code>R.sometype.id</code>. 41 * </li> 42 * <ul> 43 * <li>{@link ResourceFile}. (optional) This represents a particular version of the 44 * {@link ResourceItem}. It is displayed as a list of resource qualifier. 45 * </li> 46 * </ul> 47 * </ul> 48 * </ul> 49 * 50 * @see ResourceLabelProvider 51 */ 52 public class ResourceContentProvider implements ITreeContentProvider { 53 54 /** 55 * The current ProjectResources being displayed. 56 */ 57 private ResourceRepository mResources; 58 59 private boolean mFullLevels; 60 61 /** 62 * Constructs a new content providers for resource display. 63 * @param fullLevels if <code>true</code> the content provider will suppport all 3 levels. If 64 * <code>false</code>, only two levels are provided. 65 */ 66 public ResourceContentProvider(boolean fullLevels) { 67 mFullLevels = fullLevels; 68 } 69 70 @Override 71 public Object[] getChildren(Object parentElement) { 72 if (parentElement instanceof ResourceType) { 73 Object[] array = mResources.getResourceItemsOfType( 74 (ResourceType)parentElement).toArray(); 75 Arrays.sort(array); 76 return array; 77 } else if (mFullLevels && parentElement instanceof ResourceItem) { 78 return ((ResourceItem)parentElement).getSourceFileArray(); 79 } 80 return null; 81 } 82 83 @Override 84 public Object getParent(Object element) { 85 // pass 86 return null; 87 } 88 89 @Override 90 public boolean hasChildren(Object element) { 91 if (element instanceof ResourceType) { 92 return mResources.hasResourcesOfType((ResourceType)element); 93 } else if (mFullLevels && element instanceof ResourceItem) { 94 return ((ResourceItem)element).hasAlternates(); 95 } 96 return false; 97 } 98 99 @Override 100 public Object[] getElements(Object inputElement) { 101 if (inputElement instanceof ResourceRepository) { 102 if ((ResourceRepository)inputElement == mResources) { 103 // get the top level resources. 104 List<ResourceType> types = mResources.getAvailableResourceTypes(); 105 Collections.sort(types); 106 return types.toArray(); 107 } 108 } 109 110 return new Object[0]; 111 } 112 113 @Override 114 public void dispose() { 115 // pass 116 } 117 118 @Override 119 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { 120 if (newInput instanceof ResourceRepository) { 121 mResources = (ResourceRepository)newInput; 122 } 123 } 124 } 125