package water.license;
import water.util.Log;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class LicenseManager {
public static final String FEATURE_GLM_SCORING = "glm_scoring";
public static final String FEATURE_GBM_SCORING = "gbm_scoring";
public static final String FEATURE_RF_SCORING = "rf_scoring";
public static final String FEATURE_DEEPLEARNING_SCORING = "deeplearning_scoring";
public enum Result {
OK,
FILE_ERROR,
SIGNATURE_ERROR,
EXPIRED_ERROR
}
private String _license;
public LicenseManager() {}
private String readFile(String fileName) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(fileName));
try {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append("\n");
line = br.readLine();
}
return sb.toString();
} finally {
br.close();
}
}
public Result readLicenseFile(String fileName) {
// Check if there is a file issue.
String s;
try {
s = readFile(fileName);
}
catch (Exception e) {
Log.err("readFile failed", e);
return Result.FILE_ERROR;
}
// Check if license is not correctly signed.
// Check if license is expired.
_license = s;
return Result.OK;
}
public void logLicensedFeatures() {
ArrayList<String> featureNameList = new ArrayList<String>();
featureNameList.add(FEATURE_DEEPLEARNING_SCORING);
featureNameList.add(FEATURE_GBM_SCORING);
featureNameList.add(FEATURE_GLM_SCORING);
featureNameList.add(FEATURE_RF_SCORING);
boolean silent = true;
for (String featureName : featureNameList) {
boolean b = isFeatureAllowed(featureName, silent);
Log.info("isFeatureAllowed(" + featureName + "): " + b);
}
}
public boolean isFeatureAllowed(String featureName) {
boolean silent = false;
return isFeatureAllowed(featureName, silent);
}
public boolean isFeatureAllowed(String featureName, boolean silent) {
return true;
}
/*
public boolean isFeatureAllowed(String featureName, boolean silent) {
if (_license == null) {
if (! silent) {
Log.info("isFeatureAllowed(" + featureName + ") is false (no valid license found)");
}
return false;
}
Pattern p = Pattern.compile("Feature:\\s*(\\S*)\\s*");
Scanner scanner = new Scanner(_license);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
Matcher m = p.matcher(line);
boolean b = m.matches();
if (! b) {
continue;
}
String lineFeatureName = m.group(1);
if (featureName.equals(lineFeatureName)) {
return true;
}
}
scanner.close();
if (! silent) {
Log.info("isFeatureAllowed(" + featureName + ") is false (feature not licensed)");
}
return false;
}
*/
}