* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
/**
* It would be nice if Java Enums were extensible, but they're not.
- *
+ *
* @author Jonathan
*
*/
public class Result<RV> {
private static final String SUCCESS = "Success";
- public static final String[] EMPTY_VARS = new String[0];
+ public static final Object[] EMPTY_VARS = new Object[0];
public final static int OK=0,
ERR_Security = 1,
ERR_ActionNotCompleted = 8,
ERR_Backend = 9,
ERR_General = 20;
-
- public final RV value;
+
+ public RV value;
public final int status;
public final String details;
- public final String[] variables;
-
- protected Result(RV value, int status, String details, String[] variables) {
+ public final Object[] variables;
+
+ public Result(RV value, int status, String details, Object ... variables) {
this.value = value;
- if(value==null) {
+ if (value==null) {
specialCondition|=EMPTY_LIST;
}
this.status = status;
this.details = details;
- if(variables==null) {
+ if (variables==null) {
this.variables = EMPTY_VARS;
} else {
this.variables=variables;
}
}
-
+
/**
* Create a Result class with "OK" status and "Success" for details
- *
+ *
* This is the easiest to use
- *
+ *
* @param value
* @param status
* @return
*/
public static<R> Result<R> ok(R value) {
- return new Result<R>(value,OK,SUCCESS,null);
+ return new Result<R>(value,OK,SUCCESS,EMPTY_VARS);
}
/**
* @return
*/
public static<R> Result<R[]> ok(R value[]) {
- return new Result<R[]>(value,OK,SUCCESS,null).emptyList(value.length==0);
+ return new Result<R[]>(value,OK,SUCCESS,EMPTY_VARS).emptyList(value.length==0);
}
/**
* @return
*/
public static<R> Result<Set<R>> ok(Set<R> value) {
- return new Result<Set<R>>(value,OK,SUCCESS,null).emptyList(value.size()==0);
+ return new Result<Set<R>>(value,OK,SUCCESS,EMPTY_VARS).emptyList(value.size()==0);
}
/**
* @return
*/
public static<R> Result<List<R>> ok(List<R> value) {
- return new Result<List<R>>(value,OK,SUCCESS,null).emptyList(value.size()==0);
+ return new Result<List<R>>(value,OK,SUCCESS,EMPTY_VARS).emptyList(value.size()==0);
}
/**
* @return
*/
public static<R> Result<Collection<R>> ok(Collection<R> value) {
- return new Result<Collection<R>>(value,OK,SUCCESS,null).emptyList(value.size()==0);
+ return new Result<Collection<R>>(value,OK,SUCCESS,EMPTY_VARS).emptyList(value.size()==0);
}
* @return
*/
public static Result<Void> ok() {
- return new Result<Void>(null,OK,SUCCESS,null);
+ return new Result<Void>(null,OK,SUCCESS,EMPTY_VARS);
}
/**
- * Create a Status (usually non OK, with a details statement
+ * Create a Status (usually non OK, with a details statement
* @param value
* @param status
* @param details
// public static<R> Result<R> err(int status, String details) {
// return new Result<R>(null,status,details,null);
// }
-
+
/**
* Create a Status (usually non OK, with a details statement and variables supported
* @param status
* @param variables
* @return
*/
- public static<R> Result<R> err(int status, String details, String ... variables) {
+ public static<R> Result<R> err(int status, String details, Object ... variables) {
return new Result<R>(null,status,details,variables);
}
}
/**
- * Create a Status (usually non OK, with a details statement
+ * Create a Status (usually non OK, with a details statement
* @param value
* @param status
* @param details
* @return
*/
- public static<R> Result<R> create(R value, int status, String details, String ... vars) {
+ public static<R> Result<R> create(R value, int status, String details, Object ... vars) {
return new Result<R>(value,status,details,vars);
}
/**
- * Create a Status from a previous status' result/details
+ * Create a Status from a previous status' result/details
* @param value
* @param status
* @param details
private static final int PARTIAL_CONTENT = 0x001;
private static final int EMPTY_LIST = 0x002;
-
+
/**
- * AAF Specific problems, etc
- *
+ * AAF Specific problems, etc
+ *
* @author Jonathan
*
*/
/**
* When Result is a List, you can check here to see if it's empty instead of looping
- *
+ *
* @return
*/
public boolean isEmpty() {
/**
* A common occurrence is that data comes back, but list is empty. If set, you can skip looking
* at list at the outset.
- *
+ *
* @param emptyList
* @return
*/
return this;
}
-
- /**
+
+ /**
* Convenience function. Checks OK, and also if List is not Empty
* Not valid if Data is not a List
* @return
return status == OK;
}
- /**
+ /**
* Convenience function. Checks OK, and also if List is not Empty
* Not valid if Data is not a List
* @return
return status != OK;
}
- /**
+ /**
* Convenience function. Checks OK, and also if List is not Empty
* Not valid if Data is not a List
* @return
}
- /**
+ /**
* Convenience function. Checks OK, and also if List is not Empty
* Not valid if Data is not a List
* @return
@Override
public String toString() {
- if(status==0) {
+ if (status==0) {
return details;
} else {
StringBuilder sb = new StringBuilder();
sb.append(status);
sb.append(':');
sb.append(String.format(details,((Object[])variables)));
- if(isEmpty()) {
+ if (isEmpty()) {
sb.append("{empty}");
}
- if(value!=null) {
+ if (value!=null) {
sb.append('-');
sb.append(value.toString());
}
return sb.toString();
}
}
-
+
public String errorString() {
StringBuilder sb = new StringBuilder();
switch(status) {
default: sb.append("Error");
}
sb.append(" - ");
- sb.append(String.format(details, (Object[])variables));
+ sb.append(String.format(details, variables));
return sb.toString();
}
}