jaroslav@1018: /** jaroslav@1018: * Back 2 Browser Bytecode Translator jaroslav@1018: * Copyright (C) 2012 Jaroslav Tulach jaroslav@1018: * jaroslav@1018: * This program is free software: you can redistribute it and/or modify jaroslav@1018: * it under the terms of the GNU General Public License as published by jaroslav@1018: * the Free Software Foundation, version 2 of the License. jaroslav@1018: * jaroslav@1018: * This program is distributed in the hope that it will be useful, jaroslav@1018: * but WITHOUT ANY WARRANTY; without even the implied warranty of jaroslav@1018: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the jaroslav@1018: * GNU General Public License for more details. jaroslav@1018: * jaroslav@1018: * You should have received a copy of the GNU General Public License jaroslav@1018: * along with this program. Look for COPYING file in the top folder. jaroslav@1018: * If not, see http://opensource.org/licenses/GPL-2.0. jaroslav@1018: */ jaroslav@1018: jaroslav@1018: package org.apidesign.bck2brwsr.htmlpage; jaroslav@1018: jaroslav@1018: import net.java.html.json.Context; jaroslav@1018: import org.apidesign.html.json.spi.ContextBuilder; jaroslav@1018: import org.apidesign.html.json.spi.FunctionBinding; jaroslav@1018: import org.apidesign.html.json.spi.JSONCall; jaroslav@1018: import org.apidesign.html.json.spi.PropertyBinding; jaroslav@1018: import org.apidesign.html.json.spi.Technology; jaroslav@1018: import org.apidesign.html.json.spi.Transfer; jaroslav@1018: jaroslav@1018: /** jaroslav@1018: * jaroslav@1018: * @author Jaroslav Tulach jaroslav@1018: */ jaroslav@1018: public final class BrwsrCntxt implements Technology, Transfer { jaroslav@1018: private BrwsrCntxt() {} jaroslav@1018: jaroslav@1018: public static final Context DEFAULT; jaroslav@1018: static { jaroslav@1018: BrwsrCntxt c = new BrwsrCntxt(); jaroslav@1018: DEFAULT = ContextBuilder.create().withTechnology(c).withTransfer(c).build(); jaroslav@1018: } jaroslav@1018: jaroslav@1018: @Override jaroslav@1018: public void extract(Object obj, String[] props, Object[] values) { jaroslav@1018: ConvertTypes.extractJSON(obj, props, values); jaroslav@1018: } jaroslav@1018: jaroslav@1018: @Override jaroslav@1018: public void loadJSON(final JSONCall call) { jaroslav@1018: class R implements Runnable { jaroslav@1018: Object[] arr = { null }; jaroslav@1018: @Override jaroslav@1018: public void run() { jaroslav@1018: call.notifySuccess(arr[0]); jaroslav@1018: } jaroslav@1018: } jaroslav@1018: R r = new R(); jaroslav@1018: if (call.isJSONP()) { jaroslav@1018: String me = ConvertTypes.createJSONP(r.arr, r); jaroslav@1018: ConvertTypes.loadJSON(call.composeURL(me), r.arr, r, me); jaroslav@1018: } else { jaroslav@1018: ConvertTypes.loadJSON(call.composeURL(null), r.arr, r, null); jaroslav@1018: } jaroslav@1018: } jaroslav@1018: jaroslav@1018: @Override jaroslav@1018: public Object wrapModel(Object model) { jaroslav@1018: return model; jaroslav@1018: } jaroslav@1018: jaroslav@1018: @Override jaroslav@1018: public void bind(PropertyBinding b, Object model, Object data) { jaroslav@1018: Knockout.bind(data, b, b.getPropertyName(), jaroslav@1018: "getValue__Ljava_lang_Object_2", jaroslav@1018: b.isReadOnly() ? null : "setValue__VLjava_lang_Object_2", jaroslav@1018: false, false jaroslav@1018: ); jaroslav@1018: } jaroslav@1018: jaroslav@1018: @Override jaroslav@1018: public void valueHasMutated(Object data, String propertyName) { jaroslav@1018: Knockout.valueHasMutated(data, propertyName); jaroslav@1018: } jaroslav@1018: jaroslav@1018: @Override jaroslav@1018: public void expose(FunctionBinding fb, Object model, Object d) { jaroslav@1018: Knockout.expose(d, fb, fb.getFunctionName(), "call__VLjava_lang_Object_2Ljava_lang_Object_2"); jaroslav@1018: } jaroslav@1018: jaroslav@1018: @Override jaroslav@1018: public void applyBindings(Object data) { jaroslav@1018: Knockout.applyBindings(data); jaroslav@1018: } jaroslav@1018: jaroslav@1018: @Override jaroslav@1018: public Object wrapArray(Object[] arr) { jaroslav@1018: return arr; jaroslav@1018: } jaroslav@1018: jaroslav@1018: }