00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 package org.openmobileis.database.fastobjectdb.db.test;
00026
00027 import org.odbms.ObjectSet;
00028 import org.odbms.Query;
00029 import org.openmobileis.common.user.UserNotFoundException;
00030 import org.openmobileis.common.util.collection.Array;
00031 import org.openmobileis.common.util.exception.ServiceException;
00032 import org.openmobileis.database.fastobjectdb.FastObjectDB;
00033 import org.openmobileis.database.fastobjectdb.FastObjectDBManager;
00034 import org.openmobileis.database.fastobjectdb.db.query.soda.FODBSodaObjectSet;
00035 import org.openmobileis.database.fastobjectdb.synchro.server.FODBSyncTarget;
00036 import org.openmobileis.synchro.algo.replication.AlwaysUpdateServerSynchroConflicResolver;
00037 import org.openmobileis.synchro.algo.replication.SynchroAtomicObject;
00038 import org.openmobileis.synchro.algo.replication.SynchroConflicResolver;
00039 import org.openmobileis.synchro.algo.replication.utils.DefaultSynchroAtomicObject;
00040 import org.openmobileis.synchro.openmsp.OpenMSPException;
00041 import org.openmobileis.synchro.security.auth.Credential;
00042
00050 public final class TestFODBSyncTarget implements FODBSyncTarget {
00051 private AlwaysUpdateServerSynchroConflicResolver conflicResolver;
00052
00056 public TestFODBSyncTarget() {
00057 super();
00058 conflicResolver = new AlwaysUpdateServerSynchroConflicResolver();
00059 }
00060
00061
00062
00063
00064 public String getCollectionName() {
00065 return "CLIENT";
00066 }
00067
00068 public void setSendSynchroMetaData(Object metadata)throws OpenMSPException {
00069
00070 }
00071
00072
00073
00074
00075 public Object getCollectionObjectWithId(String id) throws OpenMSPException {
00076 try {
00077 Query q = FastObjectDBManager.getCurrentFODB().query();
00078 q.constrain("SERVER");
00079 Query q2 = q.descend("getKey()");
00080 q2.constrain(id).equal();
00081 ObjectSet set = q.execute();
00082 if (set.hasNext()) {
00083 return (TestData) set.next();
00084 }
00085 return null;
00086 } catch (Throwable ex) {
00087 throw new OpenMSPException(ex);
00088 }
00089 }
00090
00091 public Array getAllCollectionObject() throws OpenMSPException {
00092 try {
00093 Query q = FastObjectDBManager.getCurrentFODB().query();
00094 q.constrain("SERVER");
00095 q.descend("getKey()");
00096 ObjectSet set = q.execute();
00097 return ((FODBSodaObjectSet)set).getArrayFromSet();
00098 } catch (Throwable ex) {
00099 throw new OpenMSPException(ex);
00100 }
00101 }
00102
00103
00104
00105
00106
00107 public void updateCollectionObject(Object obj) throws OpenMSPException {
00108 try {
00109 TestData test = (TestData)obj;
00110 Object dbobj = this.getCollectionObjectWithId(test.getKey());
00111 if (dbobj == null) {
00112 FastObjectDBManager.getCurrentFODB().add("SERVER", test);
00113 } else {
00114 FastObjectDBManager.getCurrentFODB().replace("SERVER", test);
00115 }
00116 } catch (Throwable ex) {
00117 throw new OpenMSPException(ex);
00118 }
00119 }
00120
00121
00122
00123
00124 public void deleteCollectionObject(String id) throws OpenMSPException {
00125 try {
00126 FastObjectDBManager.getCurrentFODB().deleteWithId("SERVER", id);
00127 } catch (Throwable ex) {
00128 throw new OpenMSPException(ex);
00129 }
00130 }
00131
00132
00133
00134
00135 public SynchroConflicResolver getConflicResolver() {
00136 return conflicResolver;
00137 }
00138
00139
00140
00141
00142 public SynchroAtomicObject[] getAllModifiedAtomicObjectSince(long syncnumber) throws OpenMSPException {
00143
00144 try {
00145 SynchroAtomicObject[] ret = new SynchroAtomicObject[0];
00146 if (syncnumber == 0) {
00147 ret = new SynchroAtomicObject[1];
00148 ret[0] = new DefaultSynchroAtomicObject("FIRSTS", "");
00149 ret[0].setModificationType(SynchroAtomicObject.ADD);
00150 }else if (syncnumber == 1) {
00151 TestData data = new TestData("FIRSTS");
00152 data.setToModify("1S");
00153 try {
00154 FastObjectDBManager.getCurrentFODB().replace("SERVER", data);
00155 } catch (Throwable ex) {
00156 throw new OpenMSPException(ex);
00157 }
00158 ret = new SynchroAtomicObject[1];
00159 ret[0] = new DefaultSynchroAtomicObject("FIRSTS", "");
00160 ret[0].setModificationType(SynchroAtomicObject.REPLACE);
00161 }else if (syncnumber == 2) {
00162 try {
00163 FastObjectDBManager.getCurrentFODB().deleteWithId("SERVER", "FIRSTS");
00164 } catch (Throwable ex) {
00165 throw new OpenMSPException(ex);
00166 }
00167 ret = new SynchroAtomicObject[1];
00168 ret[0] = new DefaultSynchroAtomicObject("FIRSTS", "");
00169 ret[0].setModificationType(SynchroAtomicObject.DELETE);
00170 }else if (syncnumber == 3) {
00171 TestData data = new TestData("THIRD");
00172 data.setToModify("0S");
00173 try {
00174 FastObjectDBManager.getCurrentFODB().add("SERVER", data);
00175 } catch (Throwable ex) {
00176 throw new OpenMSPException(ex);
00177 }
00178 data = new TestData("FOURTH");
00179 data.setToModify("0S");
00180 try {
00181 FastObjectDBManager.getCurrentFODB().add("SERVER", data);
00182 } catch (Throwable ex) {
00183 throw new OpenMSPException(ex);
00184 }
00185 ret = new SynchroAtomicObject[2];
00186 ret[0] = new DefaultSynchroAtomicObject("THIRD", "");
00187 ret[0].setModificationType(SynchroAtomicObject.ADD);
00188 ret[1] = new DefaultSynchroAtomicObject("FOURTH", "");
00189 ret[1].setModificationType(SynchroAtomicObject.ADD);
00190 }
00191 syncnumber++;
00192 return ret;
00193 } catch (Throwable ex) {
00194 throw new OpenMSPException(ex);
00195 }
00196 }
00197
00198
00199
00200
00201 public int getUpdateMaxNbRow() {
00202 return 1;
00203 }
00204
00205
00206
00207
00208 public void updateSynchroDB(FastObjectDB db) throws OpenMSPException {
00209 }
00210
00211
00212
00213
00214 public void connect(Credential cred) throws UserNotFoundException, ServiceException {
00215 }
00216
00217
00218
00219
00220 public void disconnect() {
00221 }
00222
00223 }