package org.aplikator.client.shared.rpc.marshaller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.aplikator.client.shared.descriptor.ClientDescriptorBase;
import org.jboss.errai.marshalling.client.api.Marshaller;
import org.jboss.errai.marshalling.client.api.MarshallingSession;
import org.jboss.errai.marshalling.client.api.json.EJArray;
import org.jboss.errai.marshalling.client.api.json.EJObject;
import org.jboss.errai.marshalling.client.api.json.EJValue;
@SuppressWarnings("unchecked")
public class DemarshallingUtils {
public static Map mapUnMarshall(EJValue o, MarshallingSession ctx, String encName) {
if (o.isObject() != null) {
Map map = new HashMap();
Marshaller<Object> marsh = ctx.getMarshallerInstance(encName);
EJObject object = o.isObject();
Set<String> ks = object.keySet();
for (String k : ks) {
EJValue ejval = object.get(k);
map.put(k, marsh.demarshall(ejval, ctx));
}
return map;
} else
return new HashMap();
}
public static void clientDescriptorBaseUnMarshall(EJObject object, ClientDescriptorBase cdb) {
String id = DemarshallingUtils.safeString(object, "id");
String localizedName = DemarshallingUtils.safeString(object, "localizedName");
cdb.marshallInitialization(id, localizedName);
}
public static List listUnMarshall(EJValue o, MarshallingSession ctx, String encName) {
if (o.isArray() != null) {
EJArray array = o.isArray();
List list = new ArrayList();
Marshaller<Object> marshaller = ctx.getMarshallerInstance(encName);
for (int i = 0, ll = array.size(); i < ll; i++) {
list.add(marshaller.demarshall(array.get(i), ctx));
}
return list;
} else
return new ArrayList();
}
public static boolean containsAndNotNull(EJObject obj, String key) {
return obj.containsKey(key) && (!obj.get(key).isNull());
}
public static String matchAndReplacePattern(char[] longString, int position, char[] pattern, String replaceString) {
for (int i = 0, j = position; i < pattern.length; i++, j++) {
if (longString[j] != pattern[i]) {
return null;
}
}
return replaceString;
}
public static String unescape(String strVal) {
StringBuilder builder = new StringBuilder();
char[] chars = strVal.toCharArray();
for (int i = 0; i < chars.length; i++) {
char ch = chars[i];
switch (ch) {
case '\\':
if (i < chars.length - 1) {
char nextChar = chars[++i];
switch (nextChar) {
case 'n':
builder.append('\n');
break;
case 'r':
builder.append('\r');
break;
case '"':
builder.append('\"');
break;
default:
builder.append(ch);
builder.append(nextChar);
break;
}
} else {
//last
builder.append(ch);
}
break;
default:
builder.append(ch);
break;
}
}
return builder.toString();
//return StringEscapeUtils.unescapeJson(strVal);
}
public static String safeString(EJObject obj, String key) {
if (containsAndNotNull(obj, key)) {
if (obj.get(key).isString() == null) {
throw new IllegalStateException("expect string type for the key '" + key + "'");
}
return obj.get(key).isString().stringValue();
}
return null;
}
public static int safeInteger(EJObject obj, String key) {
return containsAndNotNull(obj, key) ? obj.get(key).isNumber().intValue() : 0;
}
public static boolean safeBool(EJObject obj, String key) {
return containsAndNotNull(obj, key) ? obj.get(key).isBoolean().booleanValue() : false;
}
public static void main(String[] args) {
String strVal = "prvniradek \\n druhyradek \\\" \\ntreti \\r\\nradek \\n";
String string = unescape(strVal);
System.out.println(strVal);
System.out.println(string);
// String demString = unescape(strVal);
// System.out.println(demString);
}
}