public static final char ALT_START_INST_KEY_CHAR='/';
public static final char LIST_SEP = ',';
- public static final String INST_KEY_REGEX = new StringBuilder().append(START_INST_KEY_CHAR).toString();
public static final String ASTERIX = "*";
/**
if (sInst == null || pInst == null) {
return false;
}
- if (sInst == "" || pInst == "") {
+ if (sInst.equals("") || pInst.equals("")) {
return false;
}
if (ASTERIX.equals(sInst)) {
if (sInst.charAt(0)==startChar) { // To compare key-to-key, both strings must be keys
String[] skeys=Split.split(startChar,sInst);
String[] pkeys=Split.split(startChar,pInst);
- if (skeys.length!=pkeys.length) return false;
+ if (pkeys.length<skeys.length) {
+ return false;
+ } else if(pkeys.length > skeys.length &&
+ (skeys.length==0 || !ASTERIX.equals(skeys[skeys.length-1]))) {
+ return false;
+ }
boolean pass = true;
for (int i=1;pass && i<skeys.length;++i) { // We start at 1, because the first one, being ":" is always ""
- if (ASTERIX.equals(skeys[i]))continue; // Server data accepts all for this key spot
+ if (ASTERIX.equals(skeys[i])) {
+ if(i==skeys.length-1) {
+ // accept all after
+ return true;
+ }
+ continue; // Server data accepts all for this key spot
+ }
pass = false;
for (String sItem : Split.split(LIST_SEP,skeys[i])) { // allow for "," definition in Action
if (pkeys[i].length()==0) {
* Action is not quite as complex. But we write it in this function so it can be consistent
*/
public static boolean evalAction(String sAction,String pAction) {
- if (ASTERIX.equals(sAction))return true; // If Server's String is "*", then it accepts every Action
- if (pAction == "") return false;
+ if (ASTERIX.equals(sAction)) return true; // If Server's String is "*", then it accepts every Action
+ if (pAction.equals("")) return false;
for (String sItem : Split.split(LIST_SEP,sAction)) { // allow for "," definition in Action
if (pAction.charAt(0)==START_REGEX_CHAR? // First char
sItem.matches(pAction.substring(1)): // Evaluate as Regular Expression