/* Copyright (c) 2010 Zhihua (Dennis) Jiang
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.gwtmobile.phonegap.kitchensink.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Widget;
import com.gwtmobile.phonegap.client.FileMgr;
import com.gwtmobile.phonegap.client.FileMgr.DirectoryEntry;
import com.gwtmobile.phonegap.client.FileMgr.Entry;
import com.gwtmobile.phonegap.client.FileMgr.EntryCallback;
import com.gwtmobile.phonegap.client.FileMgr.Event;
import com.gwtmobile.phonegap.client.FileMgr.EventCallback;
import com.gwtmobile.phonegap.client.FileMgr.File;
import com.gwtmobile.phonegap.client.FileMgr.FileCallback;
import com.gwtmobile.phonegap.client.FileMgr.FileEntry;
import com.gwtmobile.phonegap.client.FileMgr.FileError;
import com.gwtmobile.phonegap.client.FileMgr.FileMgrCallback;
import com.gwtmobile.phonegap.client.FileMgr.FileOptions;
import com.gwtmobile.phonegap.client.FileMgr.FileReader;
import com.gwtmobile.phonegap.client.FileMgr.FileSystem;
import com.gwtmobile.phonegap.client.FileMgr.FileSystemCallback;
import com.gwtmobile.phonegap.client.FileMgr.FileWriter;
import com.gwtmobile.phonegap.client.FileMgr.FileWriterCallback;
import com.gwtmobile.phonegap.client.FileMgr.LocalFileSystem;
import com.gwtmobile.phonegap.client.FileMgr.Metadata;
import com.gwtmobile.phonegap.client.FileMgr.MetadataCallback;
import com.gwtmobile.ui.client.event.SelectionChangedEvent;
import com.gwtmobile.ui.client.page.Page;
import com.gwtmobile.ui.client.widgets.ScrollPanel;
public class FileUi extends Page {
private static FileUiUiBinder uiBinder = GWT.create(FileUiUiBinder.class);
@UiField HTML text;
@UiField ScrollPanel scroller;
interface FileUiUiBinder extends UiBinder<Widget, FileUi> {
}
public FileUi() {
initWidget(uiBinder.createAndBindUi(this));
}
@UiHandler("list0")
void onList0SelectionChanged(SelectionChangedEvent e) {
switch (e.getSelection()) {
case 0:
getFile();
break;
case 1:
getMetadata();
break;
case 2:
isFile();
break;
case 3:
isDirectory();
break;
case 4:
getFile();
break;
case 5:
getFileInfo();
break;
case 6:
moveTo();
break;
case 7:
copyTo();
break;
case 8:
toURI();
break;
}
}
@UiHandler("list1")
void onList1SelectionChanged(SelectionChangedEvent e) {
switch (e.getSelection()) {
case 0:
getFileParent();
break;
case 1:
createWriter();
break;
case 2:
write();
break;
case 3:
truncate();
break;
case 4:
seek();
break;
case 5:
abort();
break;
case 6:
readAsDataURL();
break;
case 7:
readAsText();
break;
case 8:
remove();
break;
}
}
private void getFile() {
getDemoFile(new DemoCallback() {
@Override
public void onSuccess(final FileEntry file) {
console("success: get file --" + file.getFullPath());
}
});
}
private void getMetadata() {
getDemoFile(new DemoCallback() {
@Override
public void onSuccess(FileEntry file) {
file.getMetadata(new MetadataCallback() {
@Override
public void onSuccess(Metadata metadata) {
console("succeed: last modification time -- " + metadata.getModificationTime().toString());
}
@Override
public void onError(FileError error) {
console("error:" + error.getCode());
}
});
}
});
}
private void isFile() {
getDemoFile(new DemoCallback() {
@Override
public void onSuccess(FileEntry file) {
console("is file -- " + file.isFile());
}
});
}
private void isDirectory() {
getDemoFile(new DemoCallback() {
@Override
public void onSuccess(FileEntry file) {
console("is directory -- " + file.isDirectory());
}
});
}
private void getFileInfo() {
getDemoFile(new DemoCallback() {
@Override
public void onSuccess(FileEntry file) {
file.file(new FileCallback() {
@Override
public void onSuccess(File file) {
console(
"Name -- " + file.getName() + "<br/>" +
"Full Path -- " + file.getFullPath() + "<br/>" +
//TODO: bug in phonegap. uncomment code below on 0.9.6.
// "Last Modified -- " + file.getLastModifiedDate().toString() + "<br/>" +
"Size -- " + file.getSize() + "<br/>"
);
}
@Override
public void onError(FileError error) {
console("error:" + error.getCode());
}
});
}
});
}
private void moveTo() {
getDemoFile(new DemoCallback() {
@Override
public void onSuccess(final FileEntry file) {
file.getParent(new EntryCallback() {
@Override
public void onSuccess(Entry entry) {
file.moveTo(entry, "backup-kitchensink.txt", new EntryCallback() {
@Override
public void onSuccess(Entry entry) {
console("success: move to -- " + entry.getFullPath());
}
@Override
public void onError(FileError error) {
console("error:" + error.getCode());
}
});
}
@Override
public void onError(FileError error) {
console("error:" + error.getCode());
}
});
}
});
}
private void copyTo() {
getDemoFile(new DemoCallback() {
@Override
public void onSuccess(final FileEntry file) {
file.getParent(new EntryCallback() {
@Override
public void onSuccess(Entry entry) {
file.copyTo(entry, "backup-kitchensink.txt", new EntryCallback() {
@Override
public void onSuccess(Entry entry) {
console("success: copy to -- " + entry.getFullPath());
}
@Override
public void onError(FileError error) {
console("error:" + error.getCode());
}
});
}
@Override
public void onError(FileError error) {
console("error:" + error.getCode());
}
});
}
});
}
private void toURI() {
getDemoFile(new DemoCallback() {
@Override
public void onSuccess(final FileEntry file) {
console("URI --" + file.toURI());
}
});
}
private void getFileParent() {
getDemoFile(new DemoCallback() {
@Override
public void onSuccess(final FileEntry file) {
file.getParent(new EntryCallback() {
@Override
public void onSuccess(Entry entry) {
console("success: get parent -- " + entry.getFullPath());
}
@Override
public void onError(FileError error) {
console("error:" + error.getCode());
}
});
}
});
}
private void createWriter() {
getDemoFile(new DemoCallback() {
@Override
public void onSuccess(final FileEntry file) {
file.createWriter(new FileWriterCallback() {
@Override
public void onSuccess(FileWriter writer) {
console("success: writer created -- " + writer.getFileName());
}
@Override
public void onError(FileError error) {
console("error:" + error.getCode());
}
});
}
});
}
private void write() {
getDemoFile(new DemoCallback() {
@Override
public void onSuccess(final FileEntry file) {
file.createWriter(new FileWriterCallback() {
@Override
public void onSuccess(FileWriter writer) {
writer.write("gwtmobile phonegap kitchen sink");
console("success: content writen to file-- " + writer.getReadyState());
}
@Override
public void onError(FileError error) {
console("error:" + error.getCode());
}
});
}
});
}
private void truncate() {
getDemoFile(new DemoCallback() {
@Override
public void onSuccess(final FileEntry file) {
file.createWriter(new FileWriterCallback() {
@Override
public void onSuccess(FileWriter writer) {
writer.truncate(10);
console("success: file truncated to -- " + writer.getLength());
}
@Override
public void onError(FileError error) {
console("error:" + error.getCode());
}
});
}
});
}
private void seek() {
getDemoFile(new DemoCallback() {
@Override
public void onSuccess(final FileEntry file) {
file.createWriter(new FileWriterCallback() {
@Override
public void onSuccess(FileWriter writer) {
writer.seek(10);
console("success: file positioned to -- " + writer.getPosition());
}
@Override
public void onError(FileError error) {
console("error:" + error.getCode());
}
});
}
});
}
private void abort() {
getDemoFile(new DemoCallback() {
@Override
public void onSuccess(final FileEntry file) {
file.createWriter(new FileWriterCallback() {
@Override
public void onSuccess(FileWriter writer) {
writer.write("some sample text");
writer.abort();
console("success: -- " + writer.getReadyState());
}
@Override
public void onError(FileError error) {
console("error:" + error.getCode());
}
});
}
});
}
private void readAsDataURL() {
getDemoFile(new DemoCallback() {
@Override
public void onSuccess(final FileEntry file) {
file.file(new FileCallback() {
@Override
public void onSuccess(File file) {
EventCallback callback = new EventCallback() {
@Override
public void onEvent(Event evt) {
console("Event Type: " + evt.getType() + "<br/>" +
"FileName: " + evt.getTarget().getFileName() + "<br/>" +
"Result: " + evt.getTarget().getResult() + "<br/>" +
(evt.getType().equals("error") ? ("Error: " + evt.getTarget().getError().getCode() + "<br/>") : "") +
text.getHTML());
}
};
text.setText("");
FileReader reader = FileMgr.newFileReader();
reader.onLoad(callback);
reader.onLoadStart(callback);
reader.onLoadEnd(callback);
reader.onProgress(callback);
reader.onAbort(callback);
reader.onError(callback);
reader.readAsDataURL(file);
}
@Override
public void onError(FileError error) {
console("error:" + error.getCode());
}
});
}
});
}
private void readAsText() {
getDemoFile(new DemoCallback() {
@Override
public void onSuccess(final FileEntry file) {
file.file(new FileCallback() {
@Override
public void onSuccess(File file) {
EventCallback callback = new EventCallback() {
@Override
public void onEvent(Event evt) {
console("Event Type: " + evt.getType() + "<br/>" +
"FileName: " + evt.getTarget().getFileName() + "<br/>" +
"Result: " + evt.getTarget().getResult() + "<br/>" +
(evt.getType().equals("error") ? ("Error: " + evt.getTarget().getError().getCode() + "<br/>") : "") +
text.getHTML());
}
};
text.setText("");
FileReader reader = FileMgr.newFileReader();
reader.onLoad(callback);
reader.onLoadStart(callback);
reader.onLoadEnd(callback);
reader.onProgress(callback);
reader.onAbort(callback);
reader.onError(callback);
reader.readAsText(file);
}
@Override
public void onError(FileError error) {
console("error:" + error.getCode());
}
});
}
});
}
private void remove() {
console("");
DemoCallback callback = new DemoCallback() {
@Override
public void onSuccess(final FileEntry file) {
file.remove(new FileMgrCallback() {
@Override
public void onSuccess(boolean success) {
console(text.getHTML() + "remove " + file.getFullPath() + " -- " + success + "<br/>");
}
@Override
public void onError(FileError error) {
console("error:" + error.getCode());
}
});
}
};
getDemoFile("kitchensink.txt", callback);
getDemoFile("backup-kitchensink.txt", callback);
}
private void getDemoFile(final DemoCallback callback) {
getDemoFile("kitchensink.txt", callback);
}
private void getDemoFile(final String fileName, final DemoCallback callback) {
FileMgr.requestFileSystem(LocalFileSystem.PERSISTENT, new FileSystemCallback() {
@Override
public void onSuccess(FileSystem fs) {
fs.getRoot().getDirectory("gwtmobile-phonegap", new FileOptions().create(true), new EntryCallback() {
@Override
public void onSuccess(Entry entry) {
DirectoryEntry dir = (DirectoryEntry) entry;
dir.getFile(fileName, new FileOptions().create(true), new EntryCallback() {
@Override
public void onSuccess(Entry entry) {
FileEntry file = (FileEntry) entry;
callback.onSuccess(file);
}
@Override
public void onError(FileError error) {
console("error:" + error.getCode());
}
});
}
@Override
public void onError(FileError error) {
console("error:" + error.getCode());
}
});
}
@Override
public void onError(FileError error) {
console("error:" + error.getCode());
}
});
}
private void console(String html) {
scroller.setPostionToTop();
text.setHTML(html);
}
interface DemoCallback {
void onSuccess(FileEntry file);
}
}