/*******************************************************************************
* Copyright (c) 2008, 2009 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.buckminster.pde.tasks;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.equinox.internal.p2.core.helpers.FileUtils.IPathComputer;
import org.eclipse.equinox.internal.p2.publisher.FileSetDescriptor;
import org.eclipse.equinox.p2.metadata.Version;
import org.eclipse.equinox.p2.publisher.AbstractAdvice;
import org.eclipse.pde.internal.build.Config;
@SuppressWarnings("restriction")
public class FeatureRootAdvice extends AbstractAdvice {
public static class ConfigAdvice implements IPathComputer {
private Map<File, String> files;
private final FileSetDescriptor descriptor;
ConfigAdvice(String config) {
descriptor = (config.length() == 0 || config.equals(Config.ANY)) ? new FileSetDescriptor("root", null) //$NON-NLS-1$
: new FileSetDescriptor("root." + config, config); //$NON-NLS-1$
}
public void addRootfile(File sourceFile, String destDir) {
if (files == null)
files = new HashMap<File, String>();
files.put(sourceFile, destDir);
}
@Override
public IPath computePath(File source) {
if (files != null) {
String destDir = files.get(source);
if (destDir != null)
return Path.fromPortableString(destDir).append(source.getName());
}
return null;
}
public FileSetDescriptor getDescriptor() {
return descriptor;
}
public File[] getFiles() {
if (files != null) {
Set<File> fileSet = files.keySet();
return fileSet.toArray(new File[fileSet.size()]);
}
return noFiles;
}
@Override
public void reset() {
}
}
private static final File[] noFiles = new File[0];
private final Map<String, ConfigAdvice> advice = new HashMap<String, ConfigAdvice>();
private final String featureId;
public FeatureRootAdvice(String featureId) {
this.featureId = featureId;
}
public ConfigAdvice getConfigAdvice(String config) {
ConfigAdvice configAdvice = advice.get(config);
if (configAdvice == null) {
configAdvice = new ConfigAdvice(config);
advice.put(config, configAdvice);
}
return configAdvice;
}
public String[] getConfigs() {
return advice.keySet().toArray(new String[advice.size()]);
}
@Override
public boolean isApplicable(String configSpec, boolean includeDefault, String id, Version version) {
return (configSpec == null || advice.containsKey(configSpec)) && (id == null || featureId.equals(id));
}
}