package com.fancl.iloyalty.service.impl; import java.util.ArrayList; import java.util.List; import com.fancl.iloyalty.AndroidProjectApplication; import com.fancl.iloyalty.Constants.HTTP_CALLING_METHOD; import com.fancl.iloyalty.asynctask.callback.DatabaseDownloadAsyncTaskCallback; import com.fancl.iloyalty.asynctask.callback.TillIdDatabaseDownloadAsyncTaskCallback; import com.fancl.iloyalty.exception.GeneralException; import com.fancl.iloyalty.factory.CustomServiceFactory; import com.fancl.iloyalty.factory.GeneralServiceFactory; import com.fancl.iloyalty.parser.DatabaseCheckingParser; import com.fancl.iloyalty.pojo.DatabaseVersionCheckResult; import com.fancl.iloyalty.pojo.Version; import com.fancl.iloyalty.service.DatabaseDownloadService; import com.fancl.iloyalty.service.HttpConnectionService; import com.fancl.iloyalty.service.callback.HttpDownloadFileCallback; import com.fancl.iloyalty.util.HttpUtil; import com.fancl.iloyalty.util.LogController; import com.longevitysoft.android.xml.plist.domain.PList; public class DatabaseDownloadServiceImpl implements DatabaseDownloadService, HttpDownloadFileCallback { /** * Read Me: * NEED TO IMPLEMENT classes/methods * 1. com.[package].pojo.DatabaseVersionCheckResult - [parameters] * 2. com.[package].service.impl.DatabaseDownloadServiceImpl - isNeedDownloadDb(DatabaseVersionCheckResult databaseVersionCheckResult) * 3. com.[package].parser.DatabaseCheckingParser - parseDatabaseChecking(Document document) */ private List<DatabaseDownloadAsyncTaskCallback> callbackList = new ArrayList<DatabaseDownloadAsyncTaskCallback>(); private List<TillIdDatabaseDownloadAsyncTaskCallback> tillIdcallbackList = new ArrayList<TillIdDatabaseDownloadAsyncTaskCallback>(); @Override public DatabaseVersionCheckResult dbVersionChecking(String link) throws GeneralException { if(link != null) { String[] keys = new String[]{}; String[] values = new String[]{}; HttpConnectionService httpConnectionService = GeneralServiceFactory.getHttpConnectionService(AndroidProjectApplication.application); PList plist = httpConnectionService.downloadPList(link, keys, values, HTTP_CALLING_METHOD.POST); if(plist != null) { DatabaseCheckingParser databaseCheckingParser = new DatabaseCheckingParser(); return databaseCheckingParser.parseDatabaseChecking(plist); } else { throw new GeneralException("Failed to parser database checking."); } } return null; } @Override public boolean isNeedDownloadDb(DatabaseVersionCheckResult databaseVersionCheckResult) { /** * Need to implement the logic of checking download new database or not */ boolean updateDatabase = false; Version version = this.loadDatabaseVersionFromDatabase(); if (version != null) { LogController.log("check-(device)version issue: " + version.getIssue()); LogController.log("check-(device)version version: " + version.getVersionMajor() + "." + version.getVersionMinor() + "." + version.getVersionRevision()); LogController.log("check-latest version issue: " + databaseVersionCheckResult.getIssue()); LogController.log("check-latest version version: " + databaseVersionCheckResult.getVersion()); if (!(databaseVersionCheckResult.getIssue().equals(version.getIssue()))) { updateDatabase = true; } else { String dbVersion = (version.getVersionMajor() + "." + version.getVersionMinor() + "." + version.getVersionRevision()); if (!(databaseVersionCheckResult.getVersion().equals(dbVersion))) { updateDatabase = true; } } } else { LogController.log("0. version = null"); updateDatabase = true; } return updateDatabase; } private Version loadDatabaseVersionFromDatabase() { Version version = null; try { version = CustomServiceFactory.getSettingService() .currentDatabaseVersion(); } catch (GeneralException e) { // TODO Auto-generated catch block e.printStackTrace(); } return version; } @Override public boolean databaseDownloadProcessing(String dbLink, String savePath) { //inform all callback download database is starting for(DatabaseDownloadAsyncTaskCallback callback : callbackList) { if(callback != null) { callback.databaseStartDownloading(); } } boolean isSuccess = HttpUtil.downloadFile(dbLink, savePath, this); return isSuccess; } @Override public void addDatabaseDownloadServiceCallback(DatabaseDownloadAsyncTaskCallback callback) { if(callback != null) { callbackList.add(callback); } } @Override public void removeDatabaseDownloadServiceCallback(DatabaseDownloadAsyncTaskCallback callback) { if(callback != null) { callbackList.remove(callback); } } @Override public void currentProgress(int progress) { for(DatabaseDownloadAsyncTaskCallback callback : callbackList) { if(callback != null) { callback.databaseDownloadingProgress(progress); } } for(TillIdDatabaseDownloadAsyncTaskCallback callback : tillIdcallbackList) { if(callback != null) { callback.tillIdDatabaseDownloadingProgress(progress); } } } @Override public boolean isNeedDownloadTillIdDb( DatabaseVersionCheckResult databaseVersionCheckResult) { // TODO Auto-generated method stub boolean updateDatabase = false; Version version = this.loadTillIdDatabaseVersionFromDatabase(); if (version != null) { LogController.log("0. version issue: " + version.getIssue()); LogController.log("0. version version: " + version.getVersionMajor() + "." + version.getVersionMinor() + "." + version.getVersionRevision()); if (!(databaseVersionCheckResult.getIssue().equals(version.getIssue()))) { updateDatabase = true; } else { String dbVersion = (version.getVersionMajor() + "." + version.getVersionMinor() + "." + version.getVersionRevision()); if (!(databaseVersionCheckResult.getVersion().equals(dbVersion))) { updateDatabase = true; } } } else { LogController.log("0. version = null"); updateDatabase = true; } return updateDatabase; } private Version loadTillIdDatabaseVersionFromDatabase() { Version version = null; try { version = CustomServiceFactory.getSettingService() .currentDatabaseVersion(); } catch (GeneralException e) { // TODO Auto-generated catch block e.printStackTrace(); } return version; } @Override public boolean tillIdDatabaseDownloadProcessing(String dbLink, String savePath) { //inform all callback download database is starting for(TillIdDatabaseDownloadAsyncTaskCallback callback : tillIdcallbackList) { if(callback != null) { callback.tillIdDatabaseStartDownloading(); } } boolean isSuccess = HttpUtil.downloadFile(dbLink, savePath, this); return isSuccess; } @Override public void addTillIdDatabaseDownloadServiceCallback( TillIdDatabaseDownloadAsyncTaskCallback callback) { if(callback != null) { tillIdcallbackList.add(callback); } } @Override public void removeTillIdDatabaseDownloadServiceCallback( TillIdDatabaseDownloadAsyncTaskCallback callback) { if(callback != null) { tillIdcallbackList.remove(callback); } } }