blob: 44ad1cb5b521d2b9631e6f4241922b3b8896c482 [file] [log] [blame]
/*
* 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);
}
}
}
}
}
}