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
00026 package org.openmobileis.module.profiles.terminal;
00027
00028 import org.openmobileis.common.user.profile.Profile;
00029 import org.openmobileis.common.util.codec.GeneralCoder;
00030 import org.openmobileis.common.util.log.*;
00031 import org.openmobileis.module.terminal.ModuleManager;
00032 import org.openmobileis.synchro.client.SynchroDescriptor;
00033 import org.openmobileis.synchro.journal.JournalEntry;
00034 import org.openmobileis.synchro.journal.JournalManager;
00035 import org.openmobileis.synchro.openmsp.OpenMSPException;
00036 import org.openmobileis.synchro.openmsp.client.DefaultOpenMSPSyncListener;
00037 import org.openmobileis.synchro.openmsp.client.OpenMSPDBSyncListener;
00038 import org.openmobileis.synchro.openmsp.client.core.NumSyncManagerDB;
00039 import org.openmobileis.synchro.openmsp.protocol.AbstractCommand;
00040 import org.openmobileis.synchro.openmsp.protocol.Command;
00041 import org.openmobileis.synchro.openmsp.protocol.ContainerMessage;
00042 import org.openmobileis.synchro.openmsp.protocol.DataItem;
00043 import org.openmobileis.synchro.openmsp.protocol.Element;
00044 import org.openmobileis.synchro.openmsp.protocol.Message;
00045 import org.openmobileis.synchro.openmsp.protocol.RequestCommand;
00046 import org.openmobileis.synchro.openmsp.protocol.Result;
00047 import org.openmobileis.synchro.openmsp.protocol.Status;
00048 import org.openmobileis.synchro.security.auth.Credential;
00049
00061 public class OpenMSPProfileSyncListener extends DefaultOpenMSPSyncListener {
00062
00063 public static final String profilSynchroSourceName = "ProfilSyncListener";
00064
00065 public static final String profilSynchroTargetName = "ProfilSynchroTarget";
00066
00067 private boolean firstSync = false;
00068
00069
00070
00071 public OpenMSPProfileSyncListener() {
00072 }
00073
00074 public void receiveResultCommand(ContainerMessage resultContainer, ContainerMessage initialCommand) throws OpenMSPException {
00075 Result result = (Result) resultContainer.getElement();
00076 if (result.getTargetRef().equals(profilSynchroSourceName)) {
00077
00078 try {
00079 String encodeddata = ((DataItem) (resultContainer.nextMessage().getElement())).getData();
00080 String data = new String(GeneralCoder.decodeBase64(encodeddata.getBytes()));
00081 Profile oldproffile = TerminalProfileManager.getManager().getProfil();
00082 TerminalProfileManager.getManager().saveProfilFile(data);
00083
00084
00085 Profile newproffile = TerminalProfileManager.getManager().getProfil();
00086 if (!newproffile.equals(oldproffile)) {
00087
00088 ModuleManager.getManager().initModule();
00089 }
00090
00091 } catch (Exception e) {
00092 LogManager.traceError(LogServices.WEBSERVICE, "Wrong result format for profile, impossible to read profile data");
00093 LogManager.traceError(LogServices.WEBSERVICE, e);
00094 }
00095 }
00096 }
00097
00098
00099
00100
00101 public void receiveStatusCommand(Status statusCommande, ContainerMessage initialContenaire) throws OpenMSPException {
00102 try {
00103
00104 int status = statusCommande.getStatus();
00105 if (initialContenaire != null) {
00106 AbstractCommand command = (AbstractCommand) initialContenaire.getElement();
00107 this.manageReturnStatusLog(status, command.getElementType(), initialContenaire);
00108 if (status != Status.STATUS_OK) {
00109
00110 this.notifySynchroFailure();
00111 }
00112 }
00113 } catch (Exception ex) {
00114 this.notifySynchroFailure();
00115 LogManager.traceError(0, ex);
00116 }
00117 }
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127 public void sendData(Message message) {
00128 if (firstSync) {
00129 try {
00130 Command getCommand = new Command(Element.GET, this.getSyncName(), profilSynchroTargetName);
00131 long ns = NumSyncManagerDB.getManager().getSyncNumberForService(this.getSyncName());
00132 getCommand.setSourceSessionID(ns);
00133 ContainerMessage getContainer = new ContainerMessage(getCommand);
00134
00135
00136 DataItem newItem = new DataItem(Element.ITEM, "", "", null, null);
00137
00138 getContainer.add(newItem);
00139 message.add(getContainer);
00140 } catch (OpenMSPException e) {
00141 LogManager.traceError(LogServices.WEBSERVICE, "Error during building syncML message for Sync Profil service : " + e.getMessage());
00142 }
00143 firstSync = false;
00144 }
00145 }
00146
00147
00148
00149
00150 public String getSyncName() {
00151 return profilSynchroSourceName;
00152 }
00153
00154 public void startSync(Credential cred, SynchroDescriptor synchrodescriptor) throws OpenMSPException {
00155 super.startSync(cred, synchrodescriptor);
00156 firstSync = true;
00157 }
00158
00163 protected void manageReturnStatusLog(int statusCode, int cmlType, ContainerMessage container) {
00164 this.setSynchroStatus(statusCode);
00165 if (statusCode != Status.STATUS_OK) {
00166 String message = null;
00167 short journalEntryType = JournalEntry.ERROR_SYNC_MOBILE;
00168 if (statusCode == Status.STATUS_UNAUTHORIZED) {
00169 message = OpenMSPDBSyncListener.SYNC_UNAUTHORIZED_MESSAGE;
00170 } else {
00171 message = OpenMSPDBSyncListener.SYNC_ERROR_MESSAGE;
00172 }
00173 if (message != null) {
00174 JournalManager.getManager().saveJournalEntry(
00175
00176 this.getSyncName()
00177
00178 , journalEntryType
00179
00180 , message
00181
00182 , statusCode
00183
00184 );
00185 }
00186 }
00187
00188 }
00189
00190 }