/*
* Copyright 2010 Zhihua (Dennis) Jiang
*
* 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.gwtmobile.persistence.client;
import java.util.Date;
import java.util.Map;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;
public class Persistence {
private static Boolean _autoAdd = true;
static {
initializeConsole();
}
private static native void initializeConsole() /*-{
if (!$wnd.console) $wnd.console = {};
$wnd.console.log = $wnd.console.log || function(){};
$wnd.console.warn = $wnd.console.warn || function(){};
$wnd.console.error = $wnd.console.error || function(){};
$wnd.console.info = $wnd.console.info || function(){};
}-*/;
public static Boolean getAutoAdd() {
return _autoAdd;
}
public static void setAutoAdd(Boolean autoAdd) {
_autoAdd = autoAdd;
}
public static native void connect(String dbname, String description, int size) /*-{
$wnd.persistence.store.websql.config($wnd.persistence, dbname, description, size);
}-*/;
public static JavaScriptObject define(String entityName, Map<String, String> fields) {
JavaScriptObject assoArray = Map2AssociativeArray(fields);
return define(entityName, assoArray);
};
public static native void transaction(TransactionCallback callback) /*-{
$wnd.persistence.transaction(
function(transaction) {
callback.@com.gwtmobile.persistence.client.TransactionCallback::onSuccess(Lcom/gwtmobile/persistence/client/Transaction;)(transaction);
}
);
}-*/;
public static native void schemaSync(TransactionCallback callback) /*-{
$wnd.persistence.schemaSync(
function(transaction) {
callback.@com.gwtmobile.persistence.client.TransactionCallback::onSuccess(Lcom/gwtmobile/persistence/client/Transaction;)(transaction);
}
);
}-*/;
public static native void schemaSync(Callback callback) /*-{
$wnd.persistence.schemaSync(
function(transaction) {
callback.@com.gwtmobile.persistence.client.Callback::onSuccess()();
}
);
}-*/;
public static native void schemaSync() /*-{
$wnd.persistence.schemaSync();
}-*/;
public static void add(Persistable persistable) {
add(((PersistableInternal)persistable).getNativeObject());
}
private static native void add(JavaScriptObject obj) /*-{
$wnd.persistence.add(obj);
}-*/;
public static void remove(Persistable persistable) {
remove(((PersistableInternal)persistable).getNativeObject());
}
private static native void remove(JavaScriptObject obj) /*-{
$wnd.persistence.remove(obj);
}-*/;
public static native void flush(Transaction transaction, Callback callback) /*-{
$wnd.persistence.flush(transaction,
function() {
callback.@com.gwtmobile.persistence.client.Callback::onSuccess()();
}
);
}-*/;
public static native void flush(Callback callback) /*-{
$wnd.persistence.flush(null,
function() {
callback.@com.gwtmobile.persistence.client.Callback::onSuccess()();
}
);
}-*/;
public static native void flush() /*-{
$wnd.persistence.flush();
}-*/;
public static native void reset(Transaction transaction) /*-{
$wnd.persistence.reset(transaction);
}-*/;
public static native void reset() /*-{
$wnd.persistence.transaction(function (transaction) {
$wnd.persistence.reset(transaction);
});
}-*/;
public static native void reset(Callback callback) /*-{
$wnd.persistence.reset(
function() {
callback.@com.gwtmobile.persistence.client.Callback::onSuccess()();
}
);
}-*/;
@SuppressWarnings("unchecked")
public static void dumpToJson(Transaction transaction, Entity<?>[] entities, ScalarCallback<String> callback) {
JsArray<JavaScriptObject> entitiesArray = null;
if (entities != null) {
entitiesArray = (JsArray<JavaScriptObject>) JavaScriptObject.createArray();
for (int i = 0; i < entities.length; i++) {
EntityInternal<?> entity = (EntityInternal<?>) entities[i];
entitiesArray.set(i, entity.getNativeObject());
}
}
dumpToJsonNative(transaction, entitiesArray, callback);
}
public static void dumpToJson(Entity<?>[] entities, ScalarCallback<String> callback) {
dumpToJson(null, entities, callback);
}
private static native void dumpToJsonNative(Transaction transaction, JsArray<JavaScriptObject> entities, ScalarCallback<String> callback) /*-{
$wnd.persistence.dumpToJson(transaction, entities,
function(result) {
@com.gwtmobile.persistence.client.Persistence::processStringCallback(Ljava/lang/String;Lcom/gwtmobile/persistence/client/ScalarCallback;)(result, callback);
}
);
}-*/;
@SuppressWarnings("unused")
private static void processStringCallback(String result, ScalarCallback<String> callback) {
callback.onSuccess(result);
}
public static native void loadFromJson(Transaction transaction, String jsonDump, Callback callback) /*-{
$wnd.persistence.loadFromJson(transaction, jsonDump,
function() {
callback.@com.gwtmobile.persistence.client.Callback::onSuccess()();
}
);
}-*/;
private static JavaScriptObject Map2AssociativeArray(
Map<String, String> fields) {
JavaScriptObject assoArray = JavaScriptObject.createObject();
for (Map.Entry<String, String> field : fields.entrySet()) {
setAssoArray(assoArray, field.getKey(), field.getValue());
}
return assoArray;
}
private static native void setAssoArray(JavaScriptObject assoArray, String key,
String value) /*-{
assoArray[key] = value;
}-*/;
public static native JavaScriptObject define(String entityName, JavaScriptObject fields) /*-{
return $wnd.persistence.define(entityName, fields);
}-*/;
public static Filter newPropertyFilter(String property, String operator, char value) {
return newPropertyFilter(property, operator, new String(new char[] {value}));
}
public static native Filter newPropertyFilter(String property, String operator, String value) /*-{
return new $wnd.persistence.PropertyFilter(property, operator, value);
}-*/;
public static native Filter newPropertyFilter(String property, String operator, boolean value) /*-{
return new $wnd.persistence.PropertyFilter(property, operator, value);
}-*/;
public static native Filter newPropertyFilter(String property, String operator, int value) /*-{
return new $wnd.persistence.PropertyFilter(property, operator, value);
}-*/;
public static native Filter newPropertyFilter(String property, String operator, double value) /*-{
return new $wnd.persistence.PropertyFilter(property, operator, value);
}-*/;
public static Filter newPropertyFilter(String property, String operator, Date value) {
return newPropertyFilter(property, operator, (double)value.getTime());
}
public static native Filter newAndFilter(Filter filter1, Filter filter2) /*-{
return new $wnd.persistence.AndFilter(filter1, filter2);
}-*/;
public static native Filter newOrFilter(Filter filter1, Filter filter2) /*-{
return new $wnd.persistence.OrFilter(filter1, filter2);
}-*/;
}