aboutsummaryrefslogtreecommitdiffstats
path: root/sdk_common/src/com/android/ide/common/resources/IdGeneratingResourceFile.java
diff options
context:
space:
mode:
Diffstat (limited to 'sdk_common/src/com/android/ide/common/resources/IdGeneratingResourceFile.java')
-rw-r--r--sdk_common/src/com/android/ide/common/resources/IdGeneratingResourceFile.java240
1 files changed, 0 insertions, 240 deletions
diff --git a/sdk_common/src/com/android/ide/common/resources/IdGeneratingResourceFile.java b/sdk_common/src/com/android/ide/common/resources/IdGeneratingResourceFile.java
deleted file mode 100644
index 9ff1748..0000000
--- a/sdk_common/src/com/android/ide/common/resources/IdGeneratingResourceFile.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.ide.common.resources;
-
-import com.android.ide.common.rendering.api.DensityBasedResourceValue;
-import com.android.ide.common.rendering.api.ResourceValue;
-import com.android.ide.common.resources.ValueResourceParser.IValueResourceRepository;
-import com.android.ide.common.resources.configuration.DensityQualifier;
-import com.android.io.IAbstractFile;
-import com.android.io.StreamException;
-import com.android.resources.ResourceType;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Represents a resource file that also generates ID resources.
- * <p/>
- * This is typically an XML file in res/layout or res/menu
- */
-public final class IdGeneratingResourceFile extends ResourceFile
- implements IValueResourceRepository {
-
- private final Map<String, ResourceValue> mIdResources =
- new HashMap<String, ResourceValue>();
-
- private final Collection<ResourceType> mResourceTypeList;
-
- private final String mFileName;
-
- private final ResourceType mFileType;
-
- private final ResourceValue mFileValue;
-
- public IdGeneratingResourceFile(IAbstractFile file, ResourceFolder folder, ResourceType type) {
- super(file, folder);
-
- mFileType = type;
-
- // Set up our resource types
- mResourceTypeList = new HashSet<ResourceType>();
- mResourceTypeList.add(mFileType);
- mResourceTypeList.add(ResourceType.ID);
-
- // compute the resource name
- mFileName = getFileName(type);
-
- // Get the resource value of this file as a whole layout
- mFileValue = getFileValue(file, folder);
- }
-
- @Override
- protected void load(ScanningContext context) {
- // Parse the file and look for @+id/ entries
- parseFileForIds(context);
-
- // create the resource items in the repository
- updateResourceItems(context);
- }
-
- @Override
- protected void update(ScanningContext context) {
- // Copy the previous list of ID names
- Set<String> oldIdNames = new HashSet<String>(mIdResources.keySet());
-
- // reset current content.
- mIdResources.clear();
-
- // need to parse the file and find the IDs.
- if (!parseFileForIds(context)) {
- context.requestFullAapt();
- // Continue through to updating the resource item here since it
- // will make for example layout rendering more accurate until
- // aapt is re-run
- }
-
- // We only need to update the repository if our IDs have changed
- Set<String> keySet = mIdResources.keySet();
- assert keySet != oldIdNames;
- if (oldIdNames.equals(keySet) == false) {
- updateResourceItems(context);
- }
- }
-
- @Override
- protected void dispose(ScanningContext context) {
- ResourceRepository repository = getRepository();
-
- // Remove declarations from this file from the repository
- repository.removeFile(mResourceTypeList, this);
-
- // Ask for an ID refresh since we'll be taking away ID generating items
- context.requestFullAapt();
- }
-
- @Override
- public Collection<ResourceType> getResourceTypes() {
- return mResourceTypeList;
- }
-
- @Override
- public boolean hasResources(ResourceType type) {
- return (type == mFileType) || (type == ResourceType.ID && !mIdResources.isEmpty());
- }
-
- @Override
- public ResourceValue getValue(ResourceType type, String name) {
- // Check to see if they're asking for one of the right types:
- if (type != mFileType && type != ResourceType.ID) {
- return null;
- }
-
- // If they're looking for a resource of this type with this name give them the whole file
- if (type == mFileType && name.equals(mFileName)) {
- return mFileValue;
- } else {
- // Otherwise try to return them an ID
- // the map will return null if it's not found
- return mIdResources.get(name);
- }
- }
-
- /**
- * Looks through the file represented for Ids and adds them to
- * our id repository
- *
- * @return true if parsing succeeds and false if it fails
- */
- private boolean parseFileForIds(ScanningContext context) {
- IdResourceParser parser = new IdResourceParser(this, context, isFramework());
- try {
- IAbstractFile file = getFile();
- return parser.parse(mFileType, file.getOsLocation(), file.getContents());
- } catch (IOException e) {
- // Pass
- } catch (StreamException e) {
- // Pass
- }
-
- return false;
- }
-
- /**
- * Add the resources represented by this file to the repository
- */
- private void updateResourceItems(ScanningContext context) {
- ResourceRepository repository = getRepository();
-
- // remove this file from all existing ResourceItem.
- repository.removeFile(mResourceTypeList, this);
-
- // First add this as a layout file
- ResourceItem item = repository.getResourceItem(mFileType, mFileName);
- item.add(this);
-
- // Now iterate through our IDs and add
- for (String idName : mIdResources.keySet()) {
- item = repository.getResourceItem(ResourceType.ID, idName);
- // add this file to the list of files generating ID resources.
- item.add(this);
- }
-
- // Ask the repository for an ID refresh
- context.requestFullAapt();
- }
-
- /**
- * Returns the resource value associated with this whole file as a layout resource
- * @param file the file handler that represents this file
- * @param folder the folder this file is under
- * @return a resource value associated with this layout
- */
- private ResourceValue getFileValue(IAbstractFile file, ResourceFolder folder) {
- // test if there's a density qualifier associated with the resource
- DensityQualifier qualifier = folder.getConfiguration().getDensityQualifier();
-
- ResourceValue value;
- if (qualifier == null) {
- value = new ResourceValue(mFileType, mFileName,
- file.getOsLocation(), isFramework());
- } else {
- value = new DensityBasedResourceValue(
- mFileType, mFileName,
- file.getOsLocation(),
- qualifier.getValue(),
- isFramework());
- }
- return value;
- }
-
-
- /**
- * Returns the name of this resource.
- */
- private String getFileName(ResourceType type) {
- // get the name from the filename.
- String name = getFile().getName();
-
- int pos = name.indexOf('.');
- if (pos != -1) {
- name = name.substring(0, pos);
- }
-
- return name;
- }
-
- @Override
- public void addResourceValue(ResourceValue value) {
- // Just overwrite collisions. We're only interested in the unique
- // IDs declared
- mIdResources.put(value.getName(), value);
- }
-
- @Override
- public boolean hasResourceValue(ResourceType type, String name) {
- if (type == ResourceType.ID) {
- return mIdResources.containsKey(name);
- }
-
- return false;
- }
-}