
com.blinkfox.jpack.consts.PlatformEnum Maven / Gradle / Ivy
package com.blinkfox.jpack.consts;
import com.blinkfox.jpack.entity.BaseConfig;
import com.blinkfox.jpack.entity.PackInfo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.lang3.ArrayUtils;
import org.codehaus.plexus.util.StringUtils;
/**
* 平台的枚举类.
*
* @author blinkfox on 2019-05-01.
*/
public enum PlatformEnum {
/**
* windows.
*/
WINDOWS("windows") {
@Override
public PackInfo mergeNewPackInfo(PackInfo packInfo) {
return newBaseConfigPackInfo(packInfo, packInfo.getWindows());
}
},
/**
* linux.
*/
LINUX("linux") {
@Override
public PackInfo mergeNewPackInfo(PackInfo packInfo) {
return newBaseConfigPackInfo(packInfo, packInfo.getLinux());
}
},
/**
* docker.
*/
DOCKER("docker") {
@Override
public PackInfo mergeNewPackInfo(PackInfo packInfo) {
return newBaseConfigPackInfo(packInfo, packInfo.getDocker());
}
};
/**
* 属性值.
*/
private String code;
/**
* 构造方法.
*
* @param code code值
*/
PlatformEnum(String code) {
this.code = code;
}
/**
* 根据 platform 的字符串值转换为 PlatformEnum 的值.
*
* @param platform 平台字符串
* @return PlatformEnum实例
*/
public static PlatformEnum of(String platform) {
for (PlatformEnum platformEnum : PlatformEnum.values()) {
if (platformEnum.code.equals(platform)) {
return platformEnum;
}
}
return null;
}
/**
* 获取所有平台的List集合.
*
* @return 集合
*/
public static List getPlatformList() {
List platformList = new ArrayList<>(PlatformEnum.values().length);
Collections.addAll(platformList, PlatformEnum.values());
return platformList;
}
/**
* 创建一个新的 PackInfo 实例,且赋予了各个平台自己的一些配置信息数据.
*
* @param packInfo PackInfo
* @param baseConfig baseConfig
* @return PackInfo 实例
*/
public static PackInfo newBaseConfigPackInfo(PackInfo packInfo, BaseConfig baseConfig) {
PackInfo newPackInfo = PackInfo.newCommonPackInfo(packInfo);
if (StringUtils.isNotBlank(baseConfig.getVmOptions())) {
newPackInfo.setVmOptions(baseConfig.getVmOptions());
}
if (StringUtils.isNotBlank(baseConfig.getProgramArgs())) {
newPackInfo.setProgramArgs(baseConfig.getProgramArgs());
}
if (ArrayUtils.isNotEmpty(baseConfig.getConfigFiles())) {
newPackInfo.setConfigFiles(ArrayUtils.addAll(packInfo.getConfigFiles(), baseConfig.getConfigFiles()));
}
if (ArrayUtils.isNotEmpty(baseConfig.getCopyResources())) {
newPackInfo.setCopyResources(
ArrayUtils.addAll(packInfo.getCopyResources(), baseConfig.getCopyResources()));
}
if (ArrayUtils.isNotEmpty(baseConfig.getExcludeFiles())) {
newPackInfo.setExcludeFiles(ArrayUtils.addAll(packInfo.getExcludeFiles(), baseConfig.getExcludeFiles()));
}
return newPackInfo;
}
/**
* 根据 PackInfo 对象信息合并出适合各个平台自己的一个新的 PackInfo 对象,用于覆盖通用的配置信息.
* 合并策略如下:
*
* - 针对配置项只有一个值的情况,使用"覆盖"的方式来合并配置项,各平台自己的配置项优先级最高,为空时使用公用的配置项.
* - 针对配置项有多个值的情况,使用取"并集"的方式来合并配置项,各平台自己的配置项和公用的配置项取并集.
*
*
* @param packInfo PackInfo对象
* @return PackInfo对象
*/
public abstract PackInfo mergeNewPackInfo(PackInfo packInfo);
/**
* 获取该平台的 code 值.
*
* @return code
*/
public String getCode() {
return code;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy