/**
* Copyright (C) 2005 - 2013 Eric Van Dewoestine
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.eclim.installer.ant;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.tools.ant.types.PatternSet;
import org.formic.InstallContext;
import org.formic.Installer;
/**
* PatternSet built to include files based on selected features.
*
* @author Eric Van Dewoestine
*/
public class FeatureSet
extends PatternSet
{
private static final Pattern VERSIONED = Pattern.compile("\\d+$");
public FeatureSet()
{
super();
// standard includes
createInclude().setName("**/org.eclim/**/*");
createInclude().setName("**/org.eclim_*/**/*");
createInclude().setName("**/org.eclim.core/**/*");
createInclude().setName("**/org.eclim.core_*/**/*");
createInclude().setName("**/org.eclim.vimplugin/**/*");
createInclude().setName("**/org.eclim.vimplugin_*/**/*");
// feature based includes
InstallContext context = Installer.getContext();
String[] keys = context.getKeysByPrefix("featureList");
for (int ii = 0; ii < keys.length; ii++){
String key = keys[ii];
Boolean value = Boolean.valueOf(context.getValue(key).toString());
if(value.booleanValue()){
createFeatureIncludes(key);
// handle per version features by removing the version suffix.
Matcher matcher = VERSIONED.matcher(key);
if (matcher.find()){
createFeatureIncludes(matcher.replaceFirst(""));
}
}
}
}
private void createFeatureIncludes(String feature)
{
String name = "**/org.eclim." + feature.substring(feature.indexOf('.') + 1);
createInclude().setName(name + "/**/*");
createInclude().setName(name + "_*/**/*");
}
}