/* 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.DirectoryReader; import com.gwtmobile.phonegap.client.FileMgr.Entry; import com.gwtmobile.phonegap.client.FileMgr.EntryCallback; 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.FileSystem; import com.gwtmobile.phonegap.client.FileMgr.FileSystemCallback; import com.gwtmobile.phonegap.client.FileMgr.FreeDiskSpaceCallback; import com.gwtmobile.phonegap.client.FileMgr.LocalFileSystem; import com.gwtmobile.phonegap.client.FileMgr.Metadata; import com.gwtmobile.phonegap.client.FileMgr.MetadataCallback; import com.gwtmobile.phonegap.client.FileMgr.ReaderCallback; import com.gwtmobile.ui.client.event.SelectionChangedEvent; import com.gwtmobile.ui.client.page.Page; import com.gwtmobile.ui.client.widgets.ScrollPanel; public class DirectoryUi extends Page { private static DirectoryUiUiBinder uiBinder = GWT.create(DirectoryUiUiBinder.class); @UiField HTML text; @UiField ScrollPanel scroller; interface DirectoryUiUiBinder extends UiBinder<Widget, DirectoryUi> { } public DirectoryUi() { initWidget(uiBinder.createAndBindUi(this)); } @UiHandler("list0") void onList0SelectionChanged(SelectionChangedEvent e) { switch (e.getSelection()) { case 0: getDirectory(); break; case 1: getMetadata(); break; case 2: isFile(); break; case 3: isDirectory(); break; case 4: getDirectory(); break; case 5: moveTo(); break; case 6: copyTo(); break; } } @UiHandler("list1") void onList1SelectionChanged(SelectionChangedEvent e) { switch (e.getSelection()) { case 0: toURI(); break; case 1: getDirParent(); break; case 2: createReader(); break; case 3: remove(); break; case 4: removeRecursively(); break; case 5: getFile(); break; case 6: getFreeDiskSpace(); break; } } private void getDirectory() { getDemoDirectory(new DemoCallback() { @Override public void onSuccess(DirectoryEntry dir) { console("succeed: directory full path -- " + dir.getFullPath()); } }); } private void getMetadata() { getDemoDirectory(new DemoCallback() { @Override public void onSuccess(DirectoryEntry dir) { dir.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() { getDemoDirectory(new DemoCallback() { @Override public void onSuccess(DirectoryEntry dir) { console("is file -- " + dir.isFile()); } }); } private void isDirectory() { getDemoDirectory(new DemoCallback() { @Override public void onSuccess(DirectoryEntry dir) { console("is directory -- " + dir.isDirectory()); } }); } private void moveTo() { getDemoDirectory(new DemoCallback() { @Override public void onSuccess(final DirectoryEntry dir) { dir.getParent(new EntryCallback() { @Override public void onSuccess(Entry entry) { DirectoryEntry parent = (DirectoryEntry) entry; dir.moveTo(parent, "backup-gwtmobile-phonegap", new EntryCallback() { @Override public void onSuccess(Entry entry) { console("succeed: moved 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() { getDemoDirectory(new DemoCallback() { @Override public void onSuccess(final DirectoryEntry dir) { dir.getParent(new EntryCallback() { @Override public void onSuccess(Entry entry) { DirectoryEntry parent = (DirectoryEntry) entry; dir.copyTo(parent, "backup-gwtmobile-phonegap", new EntryCallback() { @Override public void onSuccess(Entry entry) { console("succeed: copied 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() { getDemoDirectory(new DemoCallback() { @Override public void onSuccess(final DirectoryEntry dir) { console("URI --" + dir.toURI()); } }); } private void getDirParent() { getDemoDirectory(new DemoCallback() { @Override public void onSuccess(final DirectoryEntry dir) { dir.getParent(new EntryCallback() { @Override public void onSuccess(Entry entry) { console("succeed: parent --" + entry.getFullPath()); } @Override public void onError(FileError error) { console("error:" + error.getCode()); } }); } }); } private void createReader() { getDemoDirectory(".", new DemoCallback() { @Override public void onSuccess(final DirectoryEntry dir) { DirectoryReader reader = dir.createReader(); reader.readEntries(new ReaderCallback() { @Override public void onSuccess(Entry[] entries) { console("Directories reader: <br/>"); for (int i = 0; i < entries.length; i++) { Entry entry = entries[i]; console(text.getHTML() + entry.getFullPath() + "<br/>"); } } @Override public void onError(FileError error) { console("error:" + error.getCode()); } }); } }); } private void remove() { console(""); DemoCallback callback = new DemoCallback() { @Override public void onSuccess(final DirectoryEntry dir) { dir.remove(new FileMgrCallback() { @Override public void onSuccess(boolean success) { console(text.getHTML() + "remove " + dir.getFullPath() + " -- " + success + "<br/>"); } @Override public void onError(FileError error) { console("error:" + error.getCode()); } }); } }; getDemoDirectory("gwtmobile-phonegap", callback); getDemoDirectory("backup-gwtmobile-phonegap", callback); } private void removeRecursively() { console(""); DemoCallback callback = new DemoCallback() { @Override public void onSuccess(final DirectoryEntry dir) { dir.removeRecursively(new FileMgrCallback() { @Override public void onSuccess(boolean success) { console(text.getHTML() + "remove " + dir.getFullPath() + " -- " + success + "<br/>"); } @Override public void onError(FileError error) { console("error:" + error.getCode()); } }); } }; getDemoDirectory("gwtmobile-phonegap", callback); getDemoDirectory("backup-gwtmobile-phonegap", callback); } private void getFile() { getDemoDirectory(new DemoCallback() { @Override public void onSuccess(final DirectoryEntry dir) { dir.getFile("kitchensink.txt", new FileOptions().create(true), new EntryCallback() { @Override public void onSuccess(Entry entry) { console("success: get file --" + entry.getFullPath()); } @Override public void onError(FileError error) { console("error:" + error.getCode()); } }); } }); } public void getFreeDiskSpace() { FileMgr.getFreeDiskSpace(new FreeDiskSpaceCallback() { @Override public void onSuccess(double freeDiskSpace) { console("Free Disk Space: " + freeDiskSpace); } @Override public void onError(FileError error) { console(error + ""); } }); } private void getDemoDirectory(final DemoCallback callback) { getDemoDirectory("gwtmobile-phonegap", callback); } private void getDemoDirectory(final String dirName, final DemoCallback callback) { FileMgr.requestFileSystem(LocalFileSystem.PERSISTENT, new FileSystemCallback() { @Override public void onSuccess(FileSystem fs) { fs.getRoot().getDirectory(dirName, new FileOptions().create(true), new EntryCallback() { @Override public void onSuccess(Entry entry) { DirectoryEntry dir = (DirectoryEntry) entry; callback.onSuccess(dir); } @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(DirectoryEntry dir); } }