package com.iambookmaster.client.iphone.data; import java.io.IOException; import java.util.ArrayList; import com.google.code.gwt.database.client.Database; import com.google.code.gwt.database.client.service.Callback; import com.google.code.gwt.database.client.service.DataServiceException; import com.google.code.gwt.database.client.service.ListCallback; import com.google.code.gwt.database.client.service.ScalarCallback; import com.google.code.gwt.database.client.service.VoidCallback; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.Window; import com.iambookmaster.client.common.FileExchangeClient; import com.iambookmaster.client.iphone.images.IPhoneImages; import com.iambookmaster.client.model.Model; public class IPhoneDataServiceStub extends IPhoneDataService { static final FileExchangeClient fileExchange = new FileExchangeClient(); private static final String STATE_FILE = "/_last_emulator_game_state.save"; /// private IPhoneDBDataService service; private String data; private static String basePath; public IPhoneDataServiceStub() { /* if (Database.isSupported()) { service = GWT.create(IPhoneDBDataService.class); service.initTable(new VoidCallback() { public void onFailure(DataServiceException error) { service = null; } public void onSuccess() { //ok } }); } */ } @Override public void loadLastState(Model model, final ScalarCallback<String> callback) { if (basePath==null) { basePath = fileExchange.selectFolder("Выберите папку с квестами","Выбрать"); if (basePath==null) { callback.onFailure(new DataServiceException("Отменено")); return; } } String state = fileExchange.loadFileByPath(basePath+STATE_FILE); if (state == null) { callback.onSuccess(null); } else { callback.onSuccess(state); } } private void notSupported(Callback callback) { callback.onFailure(new DataServiceException("not supported")); } @Override public void storeState(final String playerState) { if (basePath==null) { return; } try { fileExchange.writeFile(basePath+STATE_FILE,playerState); } catch (IOException e) { e.printStackTrace(); Window.alert(e.getMessage()); } } @Override public String getBackground() { return IPhoneImages.INSTANCE.backgoundOldBookEditor().getText(); } @Override public void donate(VoidCallback callback) { callback.onSuccess(); } @Override public void calculateDonate(ScalarCallback<String> callback) { notSupported(callback); } public boolean isInAppAvailable() { return true; } @Override public void selectAvailableFiles(String exention, final ListCallback<IPhoneFileBean> callback) { if (basePath==null) { basePath = fileExchange.selectFolder("Выберите папку с квестами","Выбрать"); if (basePath==null) { callback.onFailure(new DataServiceException("Отменено")); return; } } String[] files = fileExchange.selectFilesByExtention(basePath,exention); if (files != null) { ArrayList<IPhoneFileBean> result = new ArrayList<IPhoneFileBean>(files.length); for (String name : files) { int i = name.lastIndexOf('/'); if (i<0) { i = name.lastIndexOf('\\'); } if (i>0) { result.add(createFile(name.substring(i+1),name)); } else { result.add(createFile(name,name)); } } callback.onSuccess(result); } else { callback.onFailure(new DataServiceException("Ошибка чтения папки "+basePath)); } } private native IPhoneFileBean createFile(String name,String path)/*-{ var f = {}; f.name = name; f.path = path; return f; }-*/; @Override public void loadSingleFile(String name, ScalarCallback<String> callback) { String data = fileExchange.loadFileByPath(name); if (data==null) { callback.onFailure(new DataServiceException("Canceled")); } else { callback.onSuccess(data); } } @Override public void storeState(String state, String fileName, VoidCallback callback) { try { fileExchange.writeFile(fileName,state); callback.onSuccess(); } catch (IOException e) { callback.onFailure(new DataServiceException(e.getMessage())); } } }