package com.topsun.posclient.system.service; import java.util.Stack; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import com.topsun.posclient.common.LoggerUtil; import com.topsun.posclient.common.POSClientApp; import com.topsun.posclient.common.POSException; import com.topsun.posclient.datamodel.SettingData; import com.topsun.posclient.system.MessageResources; import com.topsun.posclient.system.SyncProgress; import com.topsun.posclient.system.SystemActivator; import com.topsun.posclient.system.service.impl.SyncCardRuleServiceImpl; import com.topsun.posclient.system.service.impl.SyncCashierModeDataServiceImpl; import com.topsun.posclient.system.service.impl.SyncGoldPriceDataServiceImpl; import com.topsun.posclient.system.service.impl.SyncInvoiceDataServiceImpl; import com.topsun.posclient.system.service.impl.SyncItemDataServiceImpl; import com.topsun.posclient.system.service.impl.SyncMaterialDataServiceImpl; import com.topsun.posclient.system.service.impl.SyncPartSalesDataServiceImpl; import com.topsun.posclient.system.service.impl.SyncPointDataServiceImpl; import com.topsun.posclient.system.service.impl.SyncPromotionDataServiceImpl; import com.topsun.posclient.system.service.impl.SyncShopDataServiceImpl; import com.topsun.posclient.system.service.impl.SyncTemplateDataServiceImpl; import com.topsun.posclient.system.service.impl.SyncUserDataServiceImpl; import com.topsun.posclient.webservice.POSServerCaller; public class SyncDataManager implements ISyncDataListener{ public Stack<ISyncDataService> syncStack = new Stack<ISyncDataService>(); public SyncProgress progress; private static SyncDataManager dataManager; public static SyncDataManager getInstance(){ if(dataManager == null){ dataManager = new SyncDataManager(); return dataManager; } return dataManager; } private SyncDataManager(){ SyncDataListenerManager.getInstance().addKeyListener(this); } public void doSyncData(final SyncProgress progress) throws POSException{ if(POSServerCaller.isConnected()){ this.progress = progress; checkRegistrySyncType(); int size = syncStack.size(); int count = 0; progress.getInfoText().setText(""); progress.getBar().setVisible(true); for (int i = 0; i < syncStack.size(); i++) { count = count + (100/size); syncStack.get(i).syncData(progress,count); } syncStack.clear(); Display.getDefault().asyncExec(new Runnable() { public void run() { Shell shell = progress.getBar().getShell(); progress.getBar().setSelection(100); //更新最后一次同步时间 SettingData settingData = POSClientApp.get().getSysConfig(); settingData.setLastUpdateTime(String.valueOf(System.currentTimeMillis())); try { POSClientApp.get().updateSysConfig(settingData); } catch (Exception e) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, "同步时间保存出错", e); MessageDialog.openError(shell, "错误", "同步时间保存出错"); } MessageDialog.openInformation(shell, MessageResources.message_tips, "数据同步完成"); progress.getBar().setSelection(0); } }); }else{ throw new POSException(MessageResources.message_error_notconnection); } } private void regsitryService(ISyncDataService dataService){ syncStack.push(dataService); } public void checkRegistrySyncType(){ //upload regsitryService(new SyncPartSalesDataServiceImpl()); //dowload regsitryService(new SyncUserDataServiceImpl()); regsitryService(new SyncShopDataServiceImpl()); regsitryService(new SyncItemDataServiceImpl()); regsitryService(new SyncCashierModeDataServiceImpl()); regsitryService(new SyncMaterialDataServiceImpl()); regsitryService(new SyncPromotionDataServiceImpl()); regsitryService(new SyncGoldPriceDataServiceImpl()); regsitryService(new SyncCardRuleServiceImpl()); regsitryService(new SyncPointDataServiceImpl()); regsitryService(new SyncInvoiceDataServiceImpl()); regsitryService(new SyncTemplateDataServiceImpl()); } @Override public void onChange(final String message,int count) { String str = progress.getInfoText().getText() + "\r\n"; progress.getInfoText().setText(str + message); progress.getBar().setSelection(count); System.err.println(str + message + "::::::::::" + count); // Display.getDefault().asyncExec(new Runnable() { // @Override // public void run() { // // // } // }); } @Override public void onChange(String message) { String str = progress.getInfoText().getText() + "\r\n"; progress.getInfoText().setText(str + message); } }