package com.github.ompc.greys.core; import com.github.ompc.greys.core.util.FeatureCodec; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import static com.github.ompc.greys.core.util.GaReflectUtils.*; import static com.github.ompc.greys.core.util.GaStringUtils.newString; import static java.lang.reflect.Modifier.isStatic; /** * 配置类 * * @author oldmanpushcart@gmail.com */ public class Configure { private String targetIp; // 目标主机IP private int targetPort; // 目标进程号 private int javaPid; // 对方java进程号 private int connectTimeout = 6000; // 连接超时时间(ms) private String greysCore; private String greysAgent; public String getTargetIp() { return targetIp; } public void setTargetIp(String targetIp) { this.targetIp = targetIp; } public int getTargetPort() { return targetPort; } public void setTargetPort(int targetPort) { this.targetPort = targetPort; } public int getJavaPid() { return javaPid; } public void setJavaPid(int javaPid) { this.javaPid = javaPid; } public int getConnectTimeout() { return connectTimeout; } public void setConnectTimeout(int connectTimeout) { this.connectTimeout = connectTimeout; } public String getGreysAgent() { return greysAgent; } public void setGreysAgent(String greysAgent) { this.greysAgent = greysAgent; } public String getGreysCore() { return greysCore; } public void setGreysCore(String greysCore) { this.greysCore = greysCore; } // 对象的编码解码器 private final static FeatureCodec codec = new FeatureCodec(';', '='); /** * 序列化成字符串 * * @return 序列化字符串 */ @Override public String toString() { final Map<String, String> map = new HashMap<String, String>(); for (Field field : getFields(Configure.class)) { // 过滤掉静态类 if (isStatic(field.getModifiers())) { continue; } // 非静态的才需要纳入非序列化过程 try { map.put(field.getName(), newString(getValue(this, field))); } catch (Throwable t) { // } } return codec.toString(map); } /** * 反序列化字符串成对象 * * @param toString 序列化字符串 * @return 反序列化的对象 */ public static Configure toConfigure(String toString) { final Configure configure = new Configure(); final Map<String, String> map = codec.toMap(toString); for (Map.Entry<String, String> entry : map.entrySet()) { try { final Field field = getField(Configure.class, entry.getKey()); if (null != field && !isStatic(field.getModifiers())) { setValue(field, valueOf(field.getType(), entry.getValue()), configure); } } catch (Throwable t) { // } } return configure; } }