package happy.research.pgp;
import java.io.FileInputStream;
import java.util.Properties;
import org.apache.log4j.Logger;
public class EnvironmentParams
{
private static EnvironmentParams params;
public int runTimes = 1;
public int numNodes;
public double ratInvalidCerts;
public double ratHonestIntros;
public double ratNeutralIntros;
public double ratMinHonestSigning;
public double ratMaxHonestSigning;
public double ratMinNeutralSigning;
public double ratMaxNeutralSigning;
public double ratMinDishonestSigning;
public double ratMaxDishonestSigning;
public double ratMinLittleSigning;
public double ratMaxLittleSigning;
public double ratMinNormalSigning;
public double ratMaxNormalSigning;
public double ratMinManySigning;
public double ratMaxManySigning;
public double ratExperiencedSigner;
public double ratMediumSigner;
public double ratNewbieSigner;
public double ratMinDirectlySpecified;
public double ratMaxDirectlySpecified;
public int completesNeeded;
public int marginalsNeeded;
public double confidence_threshold;
public double similarity_threshold;
public double ratCandidateVector;
public double complete_trust_threshold;
public double marginal_trust_threshold;
public double chain_trust_value_threshold;
public double ratNeutralMistakeSigner;
public double ratLittleMistakeSigner;
public double ratMinManyMistakeHappen;
public double ratMaxManyMistakeHappen;
public double ratMinNeutralMistakeHappen;
public double ratMaxNeutralMistakeHappen;
public double ratMinLittleMistakeHappen;
public double ratMaxLittleMistakeHappen;
// Entry keys
private final static String NODE_NUMBERS = "nodes.number";
private final static String CERTIFICATES_INVALID_RATIO = "certificates.invalid.ratio";
private final static String HONEST_RATIO = "honest.ratio";
private final static String NEUTRAL_RATIO = "neutral.ratio";
private final static String HONEST_HONEST_SIGNING_RATIO_MIN = "honest.honest.signing.ratio.min";
private final static String HONEST_HONEST_SIGNING_RATIO_MAX = "honest.honest.signing.ratio.max";
private final static String NEUTRAL_HONEST_SINGING_RATIO_MIN = "neutral.honest.singing.ratio.min";
private final static String NEUTRAL_HONEST_SINGING_RATIO_MAX = "neutral.honest.singing.ratio.max";
private final static String DISHONEST_HONEST_SINGING_RATIO_MIN = "dishonest.honest.singing.ratio.min";
private final static String DISHONEST_HONEST_SINGING_RATIO_MAX = "dishonest.honest.singing.ratio.max";
private final static String SIGNED_TARGETS_MANY_RATIO_MIN = "signed.targets.many.ratio.min";
private final static String SIGNED_TARGETS_MANY_RATIO_MAX = "signed.targets.many.ratio.max";
private final static String SIGNED_TARGETS_NORMAL_RATIO_MIN = "signed.targets.normal.ratio.min";
private final static String SIGNED_TARGETS_NORMAL_RATIO_MAX = "signed.targets.normal.ratio.max";
private final static String SIGNED_TARGETS_LITTLE_RATIO_MIN = "signed.targets.little.ratio.min";
private final static String SIGNED_TARGETS_LITTLE_RATIO_MAX = "signed.targets.little.ratio.max";
private final static String EXPERIENCED_SIGNER_RATIO = "experienced.signer.ratio";
private final static String MEDIUM_SIGNER_RATIO = "medium.signer.ratio";
private final static String NEWBIE_SIGNER_RATIO = "newbie.signer.ratio";
private final static String DIRECTLY_SPECIFIED_RATIO_MIN = "directly.specified.ratio.min";
private final static String DIRECTLY_SPECIFIED_RATIO_MAX = "directly.specified.ratio.max";
private static final String SIGNER_NEUTRAL_MISTAKE_RATIO = "signer.neutral.mistake.ratio";
private static final String SIGNER_LITTLE_MISTAKE_RATIO = "signer.little.mistake.ratio";
private static final String MANY_MISTAKE_HAPPEN_RATIO_MIN = "many.mistake.happen.ratio.min";
private static final String MANY_MISTAKE_HAPPEN_RATIO_MAX = "many.mistake.happen.ratio.max";
private static final String NEUTRAL_MISTAKE_HAPPEN_RATIO_MIN = "neutral.mistake.happen.ratio.min";
private static final String NEUTRAL_MISTAKE_HAPPEN_RATIO_MAX = "neutral.mistake.happen.ratio.max";
private static final String LITTLE_MISTAKE_HAPPEN_RATIO_MIN = "little.mistake.happen.ratio.min";
private static final String LITTLE_MISTAKE_HAPPEN_RATIO_MAX = "little.mistake.happen.ratio.max";
private final static String COMPLETES_NEEDED = "completes.needed";
private final static String MARGINALS_NEEDED = "marginals.needed";
private final static String CONFIDENCE_THRESHOLD = "confidence.threshold";
private final static String SIMILARITY_THRESHOLD = "similarity.threshold";
private final static String CANDIDATE_VECTOR_RATIO = "candidate.vector.ratio";
private final static String COMPLETE_TRUST_THRESHOLD = "complete.trust.threshold";
private final static String MARGINAL_TRUST_THRESHOLD = "marginal.trust.threshold";
private final static String RUN_TIMES = "run.times";
private static Logger logger = Logger.getLogger(EnvironmentParams.class);
private EnvironmentParams()
{
}
public static EnvironmentParams createInstance()
{
if (params == null) params = new EnvironmentParams();
return params;
}
public void loadConfigFile(String config)
{
Properties p = new Properties();
try
{
p.load(new FileInputStream(config));
numNodes = Integer.parseInt(p.getProperty(NODE_NUMBERS, "100"));
ratInvalidCerts = Double.parseDouble(p.getProperty(CERTIFICATES_INVALID_RATIO, "0.05"));
ratHonestIntros = Double.parseDouble(p.getProperty(HONEST_RATIO, "0.40"));
ratNeutralIntros = Double.parseDouble(p.getProperty(NEUTRAL_RATIO, "0.30"));
ratMinHonestSigning = Double.parseDouble(p.getProperty(HONEST_HONEST_SIGNING_RATIO_MIN, "0.80"));
ratMaxHonestSigning = Double.parseDouble(p.getProperty(HONEST_HONEST_SIGNING_RATIO_MAX, "0.10"));
ratMinNeutralSigning = Double.parseDouble(p.getProperty(NEUTRAL_HONEST_SINGING_RATIO_MIN, "0.40"));
ratMaxNeutralSigning = Double.parseDouble(p.getProperty(NEUTRAL_HONEST_SINGING_RATIO_MAX, "0.60"));
ratMinDishonestSigning = Double.parseDouble(p.getProperty(DISHONEST_HONEST_SINGING_RATIO_MIN, "0.0"));
ratMaxDishonestSigning = Double.parseDouble(p.getProperty(DISHONEST_HONEST_SINGING_RATIO_MAX, "0.20"));
ratMinManySigning = Double.parseDouble(p.getProperty(SIGNED_TARGETS_MANY_RATIO_MIN, "0.15"));
ratMaxManySigning = Double.parseDouble(p.getProperty(SIGNED_TARGETS_MANY_RATIO_MAX, "0.20"));
ratMinNormalSigning = Double.parseDouble(p.getProperty(SIGNED_TARGETS_NORMAL_RATIO_MIN, "0.08"));
ratMaxNormalSigning = Double.parseDouble(p.getProperty(SIGNED_TARGETS_NORMAL_RATIO_MAX, "0.13"));
ratMinLittleSigning = Double.parseDouble(p.getProperty(SIGNED_TARGETS_LITTLE_RATIO_MIN, "0.00"));
ratMaxLittleSigning = Double.parseDouble(p.getProperty(SIGNED_TARGETS_LITTLE_RATIO_MAX, "0.05"));
ratExperiencedSigner = Double.parseDouble(p.getProperty(EXPERIENCED_SIGNER_RATIO, "0.4"));
ratMediumSigner = Double.parseDouble(p.getProperty(MEDIUM_SIGNER_RATIO, "0.5"));
ratNewbieSigner = Double.parseDouble(p.getProperty(NEWBIE_SIGNER_RATIO, "0.1"));
ratMinDirectlySpecified = Double.parseDouble(p.getProperty(DIRECTLY_SPECIFIED_RATIO_MIN, "0.0"));
ratMaxDirectlySpecified = Double.parseDouble(p.getProperty(DIRECTLY_SPECIFIED_RATIO_MAX, "0.1"));
ratNeutralMistakeSigner = Double.parseDouble(p.getProperty(SIGNER_NEUTRAL_MISTAKE_RATIO, "0.4"));
ratLittleMistakeSigner = Double.parseDouble(p.getProperty(SIGNER_LITTLE_MISTAKE_RATIO, "0.4"));
ratMinManyMistakeHappen = Double.parseDouble(p.getProperty(MANY_MISTAKE_HAPPEN_RATIO_MIN, "0.78"));
ratMaxManyMistakeHappen = Double.parseDouble(p.getProperty(MANY_MISTAKE_HAPPEN_RATIO_MAX, "1.0"));
ratMinNeutralMistakeHappen = Double.parseDouble(p.getProperty(NEUTRAL_MISTAKE_HAPPEN_RATIO_MIN, "0.45"));
ratMaxNeutralMistakeHappen = Double.parseDouble(p.getProperty(NEUTRAL_MISTAKE_HAPPEN_RATIO_MAX, "0.65"));
ratMinLittleMistakeHappen = Double.parseDouble(p.getProperty(LITTLE_MISTAKE_HAPPEN_RATIO_MIN, "0.01"));
ratMaxLittleMistakeHappen = Double.parseDouble(p.getProperty(LITTLE_MISTAKE_HAPPEN_RATIO_MAX, "0.21"));
completesNeeded = Integer.parseInt(p.getProperty(COMPLETES_NEEDED, "1"));
marginalsNeeded = Integer.parseInt(p.getProperty(MARGINALS_NEEDED, "2"));
confidence_threshold = Double.parseDouble(p.getProperty(CONFIDENCE_THRESHOLD, "0.75"));
similarity_threshold = Double.parseDouble(p.getProperty(SIMILARITY_THRESHOLD, "0.90"));
ratCandidateVector = Double.parseDouble(p.getProperty(CANDIDATE_VECTOR_RATIO, "0.5"));
complete_trust_threshold = Double.parseDouble(p.getProperty(COMPLETE_TRUST_THRESHOLD, "0.78"));
marginal_trust_threshold = Double.parseDouble(p.getProperty(MARGINAL_TRUST_THRESHOLD, "0.48"));
runTimes = Integer.parseInt(p.getProperty(RUN_TIMES, "1"));
chain_trust_value_threshold = Double.parseDouble(p.getProperty("chain.trust.value.threshold", "0.55"));
} catch (Exception e)
{
logger.error("Cannot load config file " + config);
logger.error(e.getMessage());
}
}
}