| /* |
| * Copyright (C) 2013 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.res2; |
| |
| import com.android.annotations.NonNull; |
| import com.android.ide.common.packaging.PackagingUtils; |
| import com.android.utils.ILogger; |
| |
| import org.w3c.dom.Attr; |
| import org.w3c.dom.Node; |
| |
| import java.io.File; |
| |
| /** |
| * Represents a set of Assets. |
| */ |
| public class AssetSet extends DataSet<AssetItem, AssetFile> { |
| |
| /** |
| * Creates an asset set with a given configName. The name is used to identify the set |
| * across sessions. |
| * |
| * @param configName the name of the config this set is associated with. |
| */ |
| public AssetSet(String configName) { |
| super(configName); |
| } |
| |
| @Override |
| protected DataSet<AssetItem, AssetFile> createSet(String name) { |
| return new AssetSet(name); |
| } |
| |
| @Override |
| protected AssetFile createFileAndItems(File sourceFolder, File file, ILogger logger) { |
| // key is the relative path to the sourceFolder |
| // e.g. foo/icon.png |
| |
| return new AssetFile(file, AssetItem.create(sourceFolder, file)); |
| } |
| |
| @Override |
| protected AssetFile createFileAndItems(@NonNull File file, @NonNull Node fileNode) { |
| Attr nameAttr = (Attr) fileNode.getAttributes().getNamedItem(ATTR_NAME); |
| if (nameAttr == null) { |
| return null; |
| } |
| |
| AssetItem item = new AssetItem(nameAttr.getValue()); |
| return new AssetFile(file, item); |
| } |
| |
| @Override |
| protected boolean isValidSourceFile(@NonNull File sourceFolder, @NonNull File file) { |
| if (!super.isValidSourceFile(sourceFolder, file)) { |
| return false; |
| } |
| |
| // valid files are under the source folder, in any directory unless |
| // the directory is excluded from packaging. |
| File parent = file.getParentFile(); |
| while (parent != null && !parent.equals(sourceFolder)) { |
| if (isIgnored(parent)) { |
| return false; |
| } |
| parent = parent.getParentFile(); |
| } |
| |
| return parent != null; |
| } |
| |
| @Override |
| protected void readSourceFolder(@NonNull File sourceFolder, @NonNull ILogger logger) |
| throws MergingException { |
| readFiles(sourceFolder, sourceFolder, logger); |
| } |
| |
| private void readFiles(@NonNull File sourceFolder, @NonNull File folder, @NonNull ILogger logger) |
| throws MergingException { |
| File[] files = folder.listFiles(); |
| if (files != null && files.length > 0) { |
| for (File file : files) { |
| if (!isIgnored(file)) { |
| if (file.isFile()) { |
| handleNewFile(sourceFolder, file, logger); |
| } else if (file.isDirectory()) { |
| readFiles(sourceFolder, file, logger); |
| } |
| } |
| } |
| } |
| } |
| } |