com.google.gwt.query.vm.JsonFactoryJre Maven / Gradle / Ivy
The newest version!
/*
* Copyright 2014, The gwtquery team.
*
* 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. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.query.vm;
import com.google.gwt.query.client.Function;
import com.google.gwt.query.client.IsProperties;
import com.google.gwt.query.client.builders.JsonBuilder;
import com.google.gwt.query.client.builders.JsonFactory;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import elemental.json.JsonObject;
import elemental.json.impl.JreJsonNull;
/**
* Factory class to create JsonBuilders in the JVM.
*
* It uses java.util.reflect.Proxy to implement JsonBuilders
* and elemental light weight json to handle json data.
*/
public class JsonFactoryJre implements JsonFactory {
/**
* Although functions cannot be serialized to json we use JsonBuilders
* or IsProperties objects which can be used as settings in Ajax.
* Since Ajax and Promises are server side compatible, we need to handle
* Functions in JVM.
*/
static class JreJsonFunction extends JreJsonNull {
private final Function function;
public JreJsonFunction(Function f) {
function = f;
}
@Override
public String toJson() {
return function.toString();
}
public Function getFunction() {
return function;
}
}
@SuppressWarnings("unchecked")
public T create(Class clz, JsonObject jso) {
InvocationHandler handler = new JsonBuilderHandler(jso);
return (T) Proxy.newProxyInstance(clz.getClassLoader(), new Class[] {clz}, handler);
}
@SuppressWarnings("unchecked")
public T create(Class clz) {
InvocationHandler handler = new JsonBuilderHandler();
return (T) Proxy.newProxyInstance(clz.getClassLoader(), new Class[] {clz}, handler);
}
public IsProperties createBinder() {
InvocationHandler handler = new JsonBuilderHandler();
return (IsProperties) Proxy.newProxyInstance(IsProperties.class.getClassLoader(),
new Class[] {IsProperties.class}, handler);
}
public IsProperties createBinder(JsonObject jso) {
InvocationHandler handler = new JsonBuilderHandler(jso);
return (IsProperties) Proxy.newProxyInstance(IsProperties.class.getClassLoader(),
new Class[] {IsProperties.class}, handler);
}
@Override
public IsProperties create(String s) {
IsProperties ret = createBinder();
ret.parse(s);
return ret;
}
@Override
public IsProperties create() {
return createBinder();
}
}