/* * SK's Minecraft Launcher * Copyright (C) 2010-2014 Albert Pham <http://www.sk89q.com> and contributors * Please see LICENSE.txt for license information. */ package com.skcraft.launcher.builder; import com.skcraft.launcher.model.modpack.*; import lombok.Getter; import lombok.Setter; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class PropertiesApplicator { private final Manifest manifest; private final Set<Feature> used = new HashSet<Feature>(); private final List<FeaturePattern> features = new ArrayList<FeaturePattern>(); @Getter @Setter private FnPatternList userFiles; public PropertiesApplicator(Manifest manifest) { this.manifest = manifest; } public void apply(ManifestEntry entry) { if (entry instanceof FileInstall) { apply((FileInstall) entry); } } private void apply(FileInstall entry) { String path = entry.getTargetPath(); entry.setWhen(fromFeature(path)); entry.setUserFile(isUserFile(path)); } public boolean isUserFile(String path) { if (userFiles != null) { return userFiles.matches(path); } else { return false; } } public Condition fromFeature(String path) { List<Feature> found = new ArrayList<Feature>(); for (FeaturePattern pattern : features) { if (pattern.matches(path)) { used.add(pattern.getFeature()); found.add(pattern.getFeature()); } } if (!found.isEmpty()) { return new RequireAny(found); } else { return null; } } public void register(FeaturePattern component) { features.add(component); } public List<Feature> getFeaturesInUse() { return new ArrayList<Feature>(used); } }