blob: a7adbf847509cf01ffdff74beb1ab85e145ca913 [file] [log] [blame]
package de.ids_mannheim.korap.security;
import de.ids_mannheim.korap.config.Attributes;
import lombok.Getter;
import java.util.HashMap;
import java.util.Map;
/**
* User: hanl
* Date: 10/29/13
* Time: 4:30 PM
*/
@Getter
public class PolicyCondition implements Comparable<PolicyCondition> {
private static Map<String, Object> stats = new HashMap<>();
static {
stats.put(Attributes.SYM_USE, -1);
stats.put(Attributes.COMMERCIAL, false);
//fixme: doesnt query only and export infer the same thing?
stats.put(Attributes.QUERY_ONLY, false);
stats.put(Attributes.EXPORT, false);
stats.put(Attributes.LICENCE, null);
stats.put(Attributes.RANGE, null);
//fixme: range is valuable in this context, but time span should remain in the policy context!
stats.put(Attributes.TIME_SPANS, null);
}
//todo: loadSubTypes these from database or configuration --> use id reference, rather than variable declaration
//todo: old regex for format gr(2323): "(^[^\\(]+)\\((.*)\\)"
// private static final Pattern p = Pattern.compile("\\((.*)\\)");
private final String specifier;
private String description;
private static final String EX_PRE = "ex:";
private Map<String, Object> flags;
public PolicyCondition (String target) {
// pattern to map extensionally created groups
this.specifier = target;
this.flags = new HashMap<>(stats);
}
public PolicyCondition () {
this(EX_PRE + createGroupName());
}
@Deprecated
//todo: do this in crypto bean!
private static String createGroupName () {
// return Base64.encodeBase64String(SecureRGenerator
// .getNextSecureRandom(64));
return "<new group name>";
}
public void setDescription (String description) {
this.description = description;
}
public void setFlag (String key, Object value) {
Object f = this.flags.get(key);
if (f != null && f.getClass().equals(value.getClass()))
this.flags.put(key, value);
}
public String getSpecifier () {
return this.specifier;
}
public boolean isExtensional () {
return getSpecifier().startsWith(EX_PRE);
}
@Override
public String toString () {
return "(" + this.specifier + ")";
}
@Override
public int compareTo (PolicyCondition o) {
return this.getSpecifier().compareTo(o.getSpecifier());
}
@Override
public boolean equals (Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
PolicyCondition that = (PolicyCondition) o;
return specifier.equals(that.specifier);
}
@Override
public int hashCode () {
return specifier.hashCode();
}
}