Newer
Older
sklauncher / launcher-builder / src / main / java / com / skcraft / launcher / builder / BuilderConfig.java
/*
 * 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.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.collect.Lists;
import com.skcraft.launcher.model.modpack.LaunchModifier;
import com.skcraft.launcher.model.modpack.Manifest;
import lombok.Data;

import java.util.List;

import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Strings.emptyToNull;

@Data
public class BuilderConfig {

    private String name;
    private String title;
    private String gameVersion;
    @JsonProperty("launch")
    private LaunchModifier launchModifier = new LaunchModifier();
    private List<FeaturePattern> features = Lists.newArrayList();
    private FnPatternList userFiles = new FnPatternList();

    public void setLaunchModifier(LaunchModifier launchModifier) {
        this.launchModifier = launchModifier != null ? launchModifier : new LaunchModifier();
    }

    public void setFeatures(List<FeaturePattern> features) {
        this.features = features != null ? features : Lists.<FeaturePattern>newArrayList();
    }

    public void setUserFiles(FnPatternList userFiles) {
        this.userFiles = userFiles != null ? userFiles : new FnPatternList();
    }

    public void update(Manifest manifest) {
        manifest.updateName(getName());
        manifest.updateTitle(getTitle());
        manifest.updateGameVersion(getGameVersion());
        manifest.setLaunchModifier(getLaunchModifier());
    }

    public void registerProperties(PropertiesApplicator applicator) {
        if (features != null) {
            for (FeaturePattern feature : features) {
                checkNotNull(emptyToNull(feature.getFeature().getName()),
                        "Empty feature name found");
                applicator.register(feature);
            }
        }

        applicator.setUserFiles(userFiles);
    }

}