OSDN Git Service

T29489
authorYuji Konishi <yuji.k64613@gmail.com>
Mon, 10 Sep 2012 04:59:48 +0000 (13:59 +0900)
committerYuji Konishi <yuji.k64613@gmail.com>
Mon, 10 Sep 2012 04:59:48 +0000 (13:59 +0900)
T29494

209 files changed:
source/workspace/.metadata.bak/.lock [new file with mode: 0644]
source/workspace/.metadata.bak/.log [new file with mode: 0644]
source/workspace/.metadata.bak/.mylyn/.taskListIndex/segments.gen [new file with mode: 0644]
source/workspace/.metadata.bak/.mylyn/.taskListIndex/segments_1 [new file with mode: 0644]
source/workspace/.metadata.bak/.mylyn/.tasks.xml.zip [new file with mode: 0644]
source/workspace/.metadata.bak/.mylyn/repositories.xml.zip [new file with mode: 0644]
source/workspace/.metadata.bak/.mylyn/tasks.xml.zip [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/1/c0a702e87af9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/11/60cc6dc87ef9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/17/2012322c7ef9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/17/5048164679f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/19/307446817af9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/19/c0d4a7117ff9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/1e/701b842089f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/1f/708f7ceb7ef9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/25/f0f1082180f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/27/106d42fd7ef9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/28/b0a58a588af9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/29/10e2bcdb7ef9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/2d/303551b57af9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/2d/30efcf268af9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/2e/90e4d7b188f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/2f/b094f1897bf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/32/f07a983b89f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/34/700743a47df9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/34/c0aa215582f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/38/10fa5e7f7bf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/39/40edcee173f70011149392f0842c08d6 [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/3d/c06c455e7af9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/42/b0eb2b8720f800111341a60c8ca6b985 [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/44/a04ffb207bf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/45/c0e150ec91f60011156ab34f9ddbff8b [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/48/b050426188f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/5/501bf8207bf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/51/50f02bec20f800111341a60c8ca6b985 [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/52/20f033857cf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/53/a0de679484f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/55/a00e9f2d89f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/57/6099692b7bf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/59/40dd7b4c88f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/5c/d02da2bb22f800111341a60c8ca6b985 [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/5e/405cb4e37af9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/5f/c05915647bf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/6/40bd3ea07df9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/62/00ee5f2c80f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/63/7073c6177ff9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/64/1075340d7ff9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/66/8017abf27ef9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/6c/907f8c3d85f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/71/c0952149e8fa00111e7df5849a0f493e [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/73/a07a4bf77ef9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/7a/b07cf03f84f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/7f/8002d8c37cf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/80/403f4c8086f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/87/106dffab7cf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/8d/d08d49197bf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/8e/e0f507b5e8fa00111e7df5849a0f493e [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/8f/5013a1c486f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/9/904658cf7ef9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/92/60a1b67081f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/94/2004d1817ef9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/94/204e8ed389f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/97/701e04707af9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/99/b0725bfb80f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/9b/50c98aa786f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/9f/b0926e147bf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/a/b0060ea379f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/a1/30a0d33788f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/a1/509751a486f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/a9/1053908c89f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/a9/a0b43cf67cf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/ad/304a3be391f60011156ab34f9ddbff8b [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/af/60206e317bf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/b3/108aafbb7cf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/b6/40a0e9e37ef9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/b7/60c5a7da7af9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/b8/10218b3388f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/ba/101b9a7e89f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/ba/e0068a967af9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/bc/b0170b5c7bf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/bd/503aaec88af9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/c6/502bbdc57ef9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/c6/b008564723f800111341a60c8ca6b985 [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/c8/d06e66577bf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/ca/e05cfe207bf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/cd/405db5af89f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/cf/40ce1f7589f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/d8/e0d88ece7af9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/dd/70a4b5fc20f800111341a60c8ca6b985 [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/dd/a033a51981f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/dd/f0e4643c84f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/df/60b98599e8fa00111e7df5849a0f493e [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/e1/e0c84f728af9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/e2/4033478489f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/e4/60be9fdf7af9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/e8/20a92445e9fa00111e7df5849a0f493e [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/ec/206267af7af9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/f1/60784b2f84f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/f8/8048324f79f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/f9/104aeb207bf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/f9/506cfa907bf9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/f9/9086747820f800111341a60c8ca6b985 [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/fa/5051aece86f9001111279b9efb32d92f [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/a0/11/properties.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/a0/62/properties.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/a0/d6/properties.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/a0/de/properties.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/15/history.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/4f/history.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/85/history.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/94/history.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/b5/history.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/history.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/properties.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.markers [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.markers.snap [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.syncinfo.snap [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.root/.indexes/history.version [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.root/.markers.snap [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.root/20.tree [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.snap [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/com.android.ide.eclipse.adt.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/com.android.ide.eclipse.ddms.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.debug.ui.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.launching.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.java.ui.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.cvs.ui.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.core.prefs [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.debug.core/.launches/EverFolder.launch [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.debug.ui/dialog_settings.xml [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.debug.ui/launchConfigurationHistory.xml [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.e4.workbench/workbench.xmi [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/1019593440.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/1022983875.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/169955671.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/1914879154.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/2388837733.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/4204090549.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/4245375323.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/externalLibsTimeStamps [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/invalidArchivesCache [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/javaLikeNames.txt [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/nonChainingJarsCache [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/savedIndexNames.txt [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.debug.ui/dialog_settings.xml [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.launching/.install.xml [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.launching/libraryInfos.xml [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.ui/dialog_settings.xml [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/EverFolder/2012/9/35/refactorings.history [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/EverFolder/2012/9/35/refactorings.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/EverFolder/2012/9/36/refactorings.history [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/EverFolder/2012/9/36/refactorings.index [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.m2e.logback.configuration/0.log [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.m2e.logback.configuration/logback.1.1.0.20120530-0009.xml [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.completion.rcp.calls/call-models-0.5.json [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.completion.rcp.overrides/ovrm-models-0.1.json [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.fdt [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.fdx [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.fnm [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.frq [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.nrm [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.prx [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.tii [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.tis [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/segments.gen [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/segments_1 [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/repository/org/eclipse/recommenders/index/0.0.0/_maven.repositories [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/repository/org/eclipse/recommenders/index/0.0.0/index-0.0.0.pom [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/repository/org/eclipse/recommenders/index/0.0.0/index-0.0.0.pom.etag [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/repository/org/eclipse/recommenders/index/0.0.0/index-0.0.0.zip [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/repository/org/eclipse/recommenders/index/0.0.0/index-0.0.0.zip.etag [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/v0.5-package-root-infos.json [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.search/dialog_settings.xml [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.ui.ide/dialog_settings.xml [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.ui.workbench/dialog_settings.xml [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.ui.workbench/workingsets.xml [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkit_gwt.png [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkit_swing.png [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkit_swt.png [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkit_xwt.png [new file with mode: 0644]
source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkits.xml [new file with mode: 0644]
source/workspace/.metadata.bak/version.ini [new file with mode: 0644]
source/workspace/EverFolder/src/com/yuji/ef/EverFolderActivity.java
source/workspace/EverFolder/src/com/yuji/ef/Initialize.java
source/workspace/EverFolder/src/com/yuji/ef/SettingActivity.java
source/workspace/EverFolder/src/com/yuji/ef/common/Constant.java
source/workspace/EverFolder/src/com/yuji/ef/service/NoteUpdatorService.java
source/workspace/EverFolder/src/com/yuji/ef/task/NoteUpdateTask.java

diff --git a/source/workspace/.metadata.bak/.lock b/source/workspace/.metadata.bak/.lock
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/source/workspace/.metadata.bak/.log b/source/workspace/.metadata.bak/.log
new file mode 100644 (file)
index 0000000..e4f5b97
--- /dev/null
@@ -0,0 +1,626 @@
+!SESSION 2012-08-28 21:57:03.871 -----------------------------------------------
+eclipse.buildId=I20120608-1400
+java.version=1.7.0_05
+java.vendor=Oracle Corporation
+BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=ja_JP
+Framework arguments:  -product org.eclipse.epp.package.java.product
+Command-line arguments:  -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.java.product
+
+!ENTRY com.android.ide.eclipse.adt 4 0 2012-08-28 21:57:49.814
+!MESSAGE 
+!STACK 1
+org.eclipse.core.internal.resources.ResourceException: Resource '/EverFolder/res' does not exist.
+       at org.eclipse.core.internal.resources.Resource.checkExists(Resource.java:341)
+       at org.eclipse.core.internal.resources.Resource.checkAccessible(Resource.java:215)
+       at org.eclipse.core.internal.resources.Container.members(Container.java:266)
+       at org.eclipse.core.internal.resources.Container.members(Container.java:249)
+       at com.android.ide.eclipse.adt.internal.sdk.Sdk$6.run(Sdk.java:1307)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+!SUBENTRY 1 org.eclipse.core.resources 4 368 2012-08-28 21:57:49.815
+!MESSAGE Resource '/EverFolder/res' does not exist.
+!SESSION 2012-08-28 22:21:43.162 -----------------------------------------------
+eclipse.buildId=I20120608-1400
+java.version=1.7.0_05
+java.vendor=Oracle Corporation
+BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=ja_JP
+Framework arguments:  -product org.eclipse.epp.package.java.product
+Command-line arguments:  -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.java.product
+
+!ENTRY org.eclipse.core.resources 2 10035 2012-08-28 22:21:53.540
+!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes.
+
+!ENTRY org.eclipse.equinox.preferences 4 2 2012-08-28 22:22:00.654
+!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.equinox.preferences".
+!STACK 0
+java.lang.ExceptionInInitializerError
+       at org.eclipse.wb.internal.core.preferences.PreferenceInitializer.initializeDefaultPreferences(PreferenceInitializer.java:50)
+       at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper$1.run(PreferenceServiceRegistryHelper.java:300)
+       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
+       at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper.runInitializer(PreferenceServiceRegistryHelper.java:303)
+       at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper.applyRuntimeDefaults(PreferenceServiceRegistryHelper.java:131)
+       at org.eclipse.core.internal.preferences.PreferencesService.applyRuntimeDefaults(PreferencesService.java:368)
+       at org.eclipse.core.internal.preferences.DefaultPreferences.applyRuntimeDefaults(DefaultPreferences.java:166)
+       at org.eclipse.core.internal.preferences.DefaultPreferences.load(DefaultPreferences.java:237)
+       at org.eclipse.core.internal.preferences.EclipsePreferences.create(EclipsePreferences.java:410)
+       at org.eclipse.core.internal.preferences.EclipsePreferences.internalNode(EclipsePreferences.java:663)
+       at org.eclipse.core.internal.preferences.EclipsePreferences.node(EclipsePreferences.java:805)
+       at org.eclipse.core.internal.preferences.AbstractScope.getNode(AbstractScope.java:38)
+       at org.eclipse.core.runtime.preferences.DefaultScope.getNode(DefaultScope.java:76)
+       at org.eclipse.ui.preferences.ScopedPreferenceStore.getDefaultPreferences(ScopedPreferenceStore.java:250)
+       at org.eclipse.ui.preferences.ScopedPreferenceStore.getPreferenceNodes(ScopedPreferenceStore.java:285)
+       at org.eclipse.ui.preferences.ScopedPreferenceStore.internalGet(ScopedPreferenceStore.java:475)
+       at org.eclipse.ui.preferences.ScopedPreferenceStore.getBoolean(ScopedPreferenceStore.java:387)
+       at org.eclipse.wb.internal.core.preferences.PreferenceToSystemForwarder.<init>(PreferenceToSystemForwarder.java:38)
+       at org.eclipse.wb.internal.core.DesignerPlugin.installPreferenceForwarder(DesignerPlugin.java:439)
+       at org.eclipse.wb.internal.core.DesignerPlugin.start(DesignerPlugin.java:72)
+       at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
+       at java.security.AccessController.doPrivileged(Native Method)
+       at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
+       at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
+       at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
+       at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300)
+       at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440)
+       at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:263)
+       at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107)
+       at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:469)
+       at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
+       at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395)
+       at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:464)
+       at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
+       at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
+       at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
+       at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
+       at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:340)
+       at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:229)
+       at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1212)
+       at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:174)
+       at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
+       at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
+       at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
+       at org.eclipse.core.internal.content.ContentType.getDescriber(ContentType.java:271)
+       at org.eclipse.core.internal.content.ContentTypeCatalog.collectMatchingByContents(ContentTypeCatalog.java:184)
+       at org.eclipse.core.internal.content.ContentTypeCatalog.internalFindContentTypesFor(ContentTypeCatalog.java:403)
+       at org.eclipse.core.internal.content.ContentTypeCatalog.internalFindContentTypesFor(ContentTypeCatalog.java:450)
+       at org.eclipse.core.internal.content.ContentTypeCatalog.getDescriptionFor(ContentTypeCatalog.java:346)
+       at org.eclipse.core.internal.content.ContentTypeCatalog.getDescriptionFor(ContentTypeCatalog.java:360)
+       at org.eclipse.core.internal.content.ContentTypeMatcher.getDescriptionFor(ContentTypeMatcher.java:86)
+       at org.eclipse.core.internal.resources.ContentDescriptionManager.readDescription(ContentDescriptionManager.java:445)
+       at org.eclipse.core.internal.resources.ContentDescriptionManager.getDescriptionFor(ContentDescriptionManager.java:355)
+       at org.eclipse.core.internal.resources.File.internalGetCharset(File.java:246)
+       at org.eclipse.core.internal.resources.File.getCharset(File.java:207)
+       at org.eclipse.core.internal.resources.File.getCharset(File.java:194)
+       at org.eclipse.jdt.internal.core.util.Util.getResourceContentsAsCharArray(Util.java:1156)
+       at org.eclipse.jdt.internal.core.builder.SourceFile.getContents(SourceFile.java:79)
+       at org.eclipse.jdt.internal.compiler.ReadManager.run(ReadManager.java:173)
+       at java.lang.Thread.run(Thread.java:722)
+Caused by: org.eclipse.swt.SWTException: Invalid thread access
+       at org.eclipse.swt.SWT.error(SWT.java:4361)
+       at org.eclipse.swt.SWT.error(SWT.java:4276)
+       at org.eclipse.swt.SWT.error(SWT.java:4247)
+       at org.eclipse.swt.widgets.Display.error(Display.java:1157)
+       at org.eclipse.swt.widgets.Display.checkDevice(Display.java:749)
+       at org.eclipse.swt.widgets.Display.getSystemFont(Display.java:2275)
+       at org.eclipse.jface.preference.PreferenceConverter.<clinit>(PreferenceConverter.java:84)
+       ... 60 more
+
+!ENTRY org.eclipse.osgi 4 0 2012-08-28 22:22:02.903
+!MESSAGE Application error
+!STACK 1
+java.lang.NoClassDefFoundError: Could not initialize class org.eclipse.jface.preference.PreferenceConverter
+       at org.eclipse.ui.internal.themes.ThemeElementHelper.installFont(ThemeElementHelper.java:103)
+       at org.eclipse.ui.internal.themes.ThemeElementHelper.populateRegistry(ThemeElementHelper.java:59)
+       at org.eclipse.ui.internal.Workbench$27.runWithException(Workbench.java:1550)
+       at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
+       at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
+       at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
+       at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3529)
+       at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3182)
+       at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2478)
+       at org.eclipse.ui.internal.Workbench.access$7(Workbench.java:2386)
+       at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:583)
+       at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
+       at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:540)
+       at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
+       at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
+       at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
+       at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
+       at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
+       at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
+       at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
+       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
+       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+       at java.lang.reflect.Method.invoke(Method.java:601)
+       at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
+       at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
+       at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
+       at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
+!SESSION 2012-08-28 22:22:47.924 -----------------------------------------------
+eclipse.buildId=I20120608-1400
+java.version=1.7.0_05
+java.vendor=Oracle Corporation
+BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=ja_JP
+Framework arguments:  -product org.eclipse.epp.package.java.product
+Command-line arguments:  -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.java.product
+
+!ENTRY org.eclipse.core.resources 2 10035 2012-08-28 22:22:55.114
+!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes.
+!SESSION 2012-08-30 21:01:46.875 -----------------------------------------------
+eclipse.buildId=I20120608-1400
+java.version=1.7.0_05
+java.vendor=Oracle Corporation
+BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=ja_JP
+Framework arguments:  -product org.eclipse.epp.package.java.product
+Command-line arguments:  -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.java.product
+
+!ENTRY org.eclipse.jdt.debug 4 125 2012-08-30 21:21:24.272
+!MESSAGE Internal error logged from JDI Debug: 
+!STACK 1
+org.eclipse.debug.core.DebugException: Breakpoint does not have an associated marker.
+       at org.eclipse.debug.core.model.Breakpoint.ensureMarker(Breakpoint.java:274)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint.getLineNumber(JavaLineBreakpoint.java:254)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint.newRequests(JavaLineBreakpoint.java:293)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.createRequest(JavaBreakpoint.java:486)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.addToTargetForLocalType(JavaBreakpoint.java:656)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.createRequests(JavaBreakpoint.java:632)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.addToTarget(JavaBreakpoint.java:584)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint.addToTarget(JavaLineBreakpoint.java:178)
+       at org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget.breakpointAdded(JDIDebugTarget.java:1287)
+       at org.eclipse.debug.internal.core.BreakpointManager$BreakpointNotifier.run(BreakpointManager.java:992)
+       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
+       at org.eclipse.debug.internal.core.BreakpointManager$BreakpointNotifier.notify(BreakpointManager.java:1018)
+       at org.eclipse.debug.internal.core.BreakpointManager.fireUpdate(BreakpointManager.java:932)
+       at org.eclipse.debug.internal.core.BreakpointManager.addBreakpoints(BreakpointManager.java:610)
+       at org.eclipse.debug.internal.core.BreakpointManager.addBreakpoints(BreakpointManager.java:581)
+       at org.eclipse.debug.internal.core.BreakpointManager.addBreakpoint(BreakpointManager.java:574)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.register(JavaBreakpoint.java:205)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint$1.run(JavaLineBreakpoint.java:162)
+       at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344)
+       at org.eclipse.debug.core.model.Breakpoint.run(Breakpoint.java:341)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint.<init>(JavaLineBreakpoint.java:165)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint.<init>(JavaLineBreakpoint.java:138)
+       at org.eclipse.jdt.debug.core.JDIDebugModel.createLineBreakpoint(JDIDebugModel.java:324)
+       at org.eclipse.jdt.internal.debug.ui.actions.ToggleBreakpointAdapter.doLineBreakpointToggle(ToggleBreakpointAdapter.java:380)
+       at org.eclipse.jdt.internal.debug.ui.actions.ToggleBreakpointAdapter$2.run(ToggleBreakpointAdapter.java:208)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+!SUBENTRY 1 org.eclipse.debug.core 4 5012 2012-08-30 21:21:24.310
+!MESSAGE Breakpoint does not have an associated marker.
+
+!ENTRY org.eclipse.jdt.debug 4 125 2012-08-30 21:21:24.329
+!MESSAGE Internal error logged from JDI Debug: 
+!STACK 1
+org.eclipse.debug.core.DebugException: Breakpoint does not have an associated marker.
+       at org.eclipse.debug.core.model.Breakpoint.ensureMarker(Breakpoint.java:274)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.getTypeName(JavaBreakpoint.java:890)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.createRequests(JavaBreakpoint.java:594)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.addToTarget(JavaBreakpoint.java:584)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint.addToTarget(JavaLineBreakpoint.java:178)
+       at org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget.breakpointAdded(JDIDebugTarget.java:1287)
+       at org.eclipse.debug.internal.core.BreakpointManager$BreakpointNotifier.run(BreakpointManager.java:992)
+       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
+       at org.eclipse.debug.internal.core.BreakpointManager$BreakpointNotifier.notify(BreakpointManager.java:1018)
+       at org.eclipse.debug.internal.core.BreakpointManager.fireUpdate(BreakpointManager.java:932)
+       at org.eclipse.debug.internal.core.BreakpointManager.addBreakpoints(BreakpointManager.java:610)
+       at org.eclipse.debug.internal.core.BreakpointManager.addBreakpoints(BreakpointManager.java:581)
+       at org.eclipse.debug.internal.core.BreakpointManager.addBreakpoint(BreakpointManager.java:574)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.register(JavaBreakpoint.java:205)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint$1.run(JavaLineBreakpoint.java:162)
+       at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344)
+       at org.eclipse.debug.core.model.Breakpoint.run(Breakpoint.java:341)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint.<init>(JavaLineBreakpoint.java:165)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint.<init>(JavaLineBreakpoint.java:138)
+       at org.eclipse.jdt.debug.core.JDIDebugModel.createLineBreakpoint(JDIDebugModel.java:324)
+       at org.eclipse.jdt.internal.debug.ui.actions.ToggleBreakpointAdapter.doLineBreakpointToggle(ToggleBreakpointAdapter.java:380)
+       at org.eclipse.jdt.internal.debug.ui.actions.ToggleBreakpointAdapter$2.run(ToggleBreakpointAdapter.java:208)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+!SUBENTRY 1 org.eclipse.debug.core 4 5012 2012-08-30 21:21:24.330
+!MESSAGE Breakpoint does not have an associated marker.
+
+!ENTRY org.eclipse.debug.core 4 125 2012-08-30 21:21:24.331
+!MESSAGE Error logged from Debug Core: 
+!STACK 1
+org.eclipse.core.internal.resources.ResourceException: Marker id 826 not found.
+       at org.eclipse.core.internal.resources.Marker.checkInfo(Marker.java:57)
+       at org.eclipse.core.internal.resources.Marker.getAttribute(Marker.java:98)
+       at org.eclipse.debug.internal.ui.views.breakpoints.BreakpointSetOrganizer.getWorkingsetAttributeFromMarker(BreakpointSetOrganizer.java:377)
+       at org.eclipse.debug.internal.ui.views.breakpoints.BreakpointSetOrganizer.breakpointsAdded(BreakpointSetOrganizer.java:174)
+       at org.eclipse.debug.internal.core.BreakpointManager$BreakpointsNotifier.run(BreakpointManager.java:1056)
+       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
+       at org.eclipse.debug.internal.core.BreakpointManager$BreakpointsNotifier.notify(BreakpointManager.java:1081)
+       at org.eclipse.debug.internal.core.BreakpointManager.fireUpdate(BreakpointManager.java:935)
+       at org.eclipse.debug.internal.core.BreakpointManager.addBreakpoints(BreakpointManager.java:610)
+       at org.eclipse.debug.internal.core.BreakpointManager.addBreakpoints(BreakpointManager.java:581)
+       at org.eclipse.debug.internal.core.BreakpointManager.addBreakpoint(BreakpointManager.java:574)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.register(JavaBreakpoint.java:205)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint$1.run(JavaLineBreakpoint.java:162)
+       at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344)
+       at org.eclipse.debug.core.model.Breakpoint.run(Breakpoint.java:341)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint.<init>(JavaLineBreakpoint.java:165)
+       at org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint.<init>(JavaLineBreakpoint.java:138)
+       at org.eclipse.jdt.debug.core.JDIDebugModel.createLineBreakpoint(JDIDebugModel.java:324)
+       at org.eclipse.jdt.internal.debug.ui.actions.ToggleBreakpointAdapter.doLineBreakpointToggle(ToggleBreakpointAdapter.java:380)
+       at org.eclipse.jdt.internal.debug.ui.actions.ToggleBreakpointAdapter$2.run(ToggleBreakpointAdapter.java:208)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+!SUBENTRY 1 org.eclipse.core.resources 4 376 2012-08-30 21:21:24.339
+!MESSAGE Marker id 826 not found.
+
+!ENTRY org.eclipse.jdt.debug.ui 4 4 2012-08-30 21:21:24.340
+!MESSAGE Marker id 826 not found.
+!SESSION 2012-09-01 10:26:37.195 -----------------------------------------------
+eclipse.buildId=I20120608-1400
+java.version=1.7.0_05
+java.vendor=Oracle Corporation
+BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=ja_JP
+Framework arguments:  -product org.eclipse.epp.package.java.product
+Command-line arguments:  -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.java.product
+
+!ENTRY org.eclipse.m2e.logback.appender 4 0 2012-09-01 11:12:36.717
+!MESSAGE Failed to open search index.
+
+!ENTRY org.eclipse.m2e.logback.appender 4 0 2012-09-01 11:12:36.861
+!MESSAGE Error while extracting name and version from file: /home/yuji/prog/workspaces/FolderEver/source/workspace/EverFolder/libs/evernote-api-1.21.jar
+
+!ENTRY org.eclipse.m2e.logback.appender 4 0 2012-09-01 11:12:36.954
+!MESSAGE Error while extracting name and version from file: /home/yuji/prog/workspaces/FolderEver/source/workspace/EverFolder/libs/libthrift.jar
+
+!ENTRY org.eclipse.jface.text 4 0 2012-09-01 11:29:18.516
+!MESSAGE Unexpected runtime error while computing a text hover
+!STACK 0
+java.lang.ClassCastException: org.eclipse.jdt.internal.compiler.ast.FieldDeclaration cannot be cast to org.eclipse.jdt.internal.compiler.ast.TypeDeclaration
+       at org.eclipse.jdt.internal.compiler.parser.Parser.dispatchDeclarationInto(Parser.java:8474)
+       at org.eclipse.jdt.internal.compiler.parser.Parser.consumeClassDeclaration(Parser.java:2273)
+       at org.eclipse.jdt.internal.compiler.parser.Parser.consumeRule(Parser.java:5472)
+       at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9672)
+       at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9911)
+       at org.eclipse.jdt.internal.codeassist.select.SelectionParser.parse(SelectionParser.java:1313)
+       at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9868)
+       at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:8434)
+       at org.eclipse.jdt.internal.codeassist.select.SelectionParser.dietParse(SelectionParser.java:1164)
+       at org.eclipse.jdt.internal.codeassist.SelectionEngine.select(SelectionEngine.java:851)
+       at org.eclipse.jdt.internal.core.Openable.codeSelect(Openable.java:162)
+       at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:377)
+       at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:371)
+       at org.eclipse.jdt.internal.debug.ui.JavaDebugHover.getHoverInfo2(JavaDebugHover.java:277)
+       at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163)
+       at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129)
+       at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85)
+       at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166)
+
+!ENTRY org.eclipse.jface.text 4 0 2012-09-01 11:29:21.236
+!MESSAGE Unexpected runtime error while computing a text hover
+!STACK 0
+java.lang.ClassCastException: org.eclipse.jdt.internal.compiler.ast.FieldDeclaration cannot be cast to org.eclipse.jdt.internal.compiler.ast.TypeDeclaration
+       at org.eclipse.jdt.internal.compiler.parser.Parser.dispatchDeclarationInto(Parser.java:8474)
+       at org.eclipse.jdt.internal.compiler.parser.Parser.consumeClassDeclaration(Parser.java:2273)
+       at org.eclipse.jdt.internal.compiler.parser.Parser.consumeRule(Parser.java:5472)
+       at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9672)
+       at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9911)
+       at org.eclipse.jdt.internal.codeassist.select.SelectionParser.parse(SelectionParser.java:1313)
+       at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9868)
+       at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:8434)
+       at org.eclipse.jdt.internal.codeassist.select.SelectionParser.dietParse(SelectionParser.java:1164)
+       at org.eclipse.jdt.internal.codeassist.SelectionEngine.select(SelectionEngine.java:851)
+       at org.eclipse.jdt.internal.core.Openable.codeSelect(Openable.java:162)
+       at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:377)
+       at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:371)
+       at org.eclipse.jdt.internal.debug.ui.JavaDebugHover.getHoverInfo2(JavaDebugHover.java:277)
+       at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163)
+       at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129)
+       at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85)
+       at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166)
+!SESSION 2012-09-08 14:36:00.930 -----------------------------------------------
+eclipse.buildId=I20120608-1400
+java.version=1.7.0_05
+java.vendor=Oracle Corporation
+BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=ja_JP
+Framework arguments:  -product org.eclipse.epp.package.java.product
+Command-line arguments:  -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.java.product
+
+!ENTRY org.eclipse.ui 4 4 2012-09-08 14:42:29.374
+!MESSAGE Referenced part does not exist yet: org.eclipse.ui.views.ProblemView.
+!SESSION 2012-09-10 13:05:49.037 -----------------------------------------------
+eclipse.buildId=I20120608-1400
+java.version=1.7.0_05
+java.vendor=Oracle Corporation
+BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=ja_JP
+Framework arguments:  -product org.eclipse.epp.package.java.product
+Command-line arguments:  -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.java.product
+
+!ENTRY org.eclipse.core.resources 2 10035 2012-09-10 13:05:57.373
+!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes.
+
+!ENTRY org.eclipse.equinox.preferences 4 2 2012-09-10 13:06:05.172
+!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.equinox.preferences".
+!STACK 0
+java.lang.ExceptionInInitializerError
+       at org.eclipse.wb.internal.core.preferences.PreferenceInitializer.initializeDefaultPreferences(PreferenceInitializer.java:50)
+       at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper$1.run(PreferenceServiceRegistryHelper.java:300)
+       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
+       at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper.runInitializer(PreferenceServiceRegistryHelper.java:303)
+       at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper.applyRuntimeDefaults(PreferenceServiceRegistryHelper.java:131)
+       at org.eclipse.core.internal.preferences.PreferencesService.applyRuntimeDefaults(PreferencesService.java:368)
+       at org.eclipse.core.internal.preferences.DefaultPreferences.applyRuntimeDefaults(DefaultPreferences.java:166)
+       at org.eclipse.core.internal.preferences.DefaultPreferences.load(DefaultPreferences.java:237)
+       at org.eclipse.core.internal.preferences.EclipsePreferences.create(EclipsePreferences.java:410)
+       at org.eclipse.core.internal.preferences.EclipsePreferences.internalNode(EclipsePreferences.java:663)
+       at org.eclipse.core.internal.preferences.EclipsePreferences.node(EclipsePreferences.java:805)
+       at org.eclipse.core.internal.preferences.AbstractScope.getNode(AbstractScope.java:38)
+       at org.eclipse.core.runtime.preferences.DefaultScope.getNode(DefaultScope.java:76)
+       at org.eclipse.ui.preferences.ScopedPreferenceStore.getDefaultPreferences(ScopedPreferenceStore.java:250)
+       at org.eclipse.ui.preferences.ScopedPreferenceStore.getPreferenceNodes(ScopedPreferenceStore.java:285)
+       at org.eclipse.ui.preferences.ScopedPreferenceStore.internalGet(ScopedPreferenceStore.java:475)
+       at org.eclipse.ui.preferences.ScopedPreferenceStore.getBoolean(ScopedPreferenceStore.java:387)
+       at org.eclipse.wb.internal.core.preferences.PreferenceToSystemForwarder.<init>(PreferenceToSystemForwarder.java:38)
+       at org.eclipse.wb.internal.core.DesignerPlugin.installPreferenceForwarder(DesignerPlugin.java:439)
+       at org.eclipse.wb.internal.core.DesignerPlugin.start(DesignerPlugin.java:72)
+       at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
+       at java.security.AccessController.doPrivileged(Native Method)
+       at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
+       at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
+       at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
+       at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300)
+       at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440)
+       at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:263)
+       at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107)
+       at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:469)
+       at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
+       at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395)
+       at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:464)
+       at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
+       at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
+       at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
+       at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
+       at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:340)
+       at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:229)
+       at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1212)
+       at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:174)
+       at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
+       at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
+       at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
+       at org.eclipse.core.internal.content.ContentType.getDescriber(ContentType.java:271)
+       at org.eclipse.core.internal.content.ContentTypeCatalog.collectMatchingByContents(ContentTypeCatalog.java:184)
+       at org.eclipse.core.internal.content.ContentTypeCatalog.internalFindContentTypesFor(ContentTypeCatalog.java:403)
+       at org.eclipse.core.internal.content.ContentTypeCatalog.internalFindContentTypesFor(ContentTypeCatalog.java:450)
+       at org.eclipse.core.internal.content.ContentTypeCatalog.getDescriptionFor(ContentTypeCatalog.java:346)
+       at org.eclipse.core.internal.content.ContentTypeCatalog.getDescriptionFor(ContentTypeCatalog.java:360)
+       at org.eclipse.core.internal.content.ContentTypeMatcher.getDescriptionFor(ContentTypeMatcher.java:86)
+       at org.eclipse.core.internal.resources.ContentDescriptionManager.readDescription(ContentDescriptionManager.java:445)
+       at org.eclipse.core.internal.resources.ContentDescriptionManager.getDescriptionFor(ContentDescriptionManager.java:355)
+       at org.eclipse.core.internal.resources.File.internalGetCharset(File.java:246)
+       at org.eclipse.core.internal.resources.File.getCharset(File.java:207)
+       at org.eclipse.core.internal.resources.File.getCharset(File.java:194)
+       at org.eclipse.jdt.internal.core.util.Util.getResourceContentsAsCharArray(Util.java:1156)
+       at org.eclipse.jdt.internal.core.builder.SourceFile.getContents(SourceFile.java:79)
+       at org.eclipse.jdt.internal.compiler.ReadManager.getContents(ReadManager.java:144)
+       at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9896)
+       at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9868)
+       at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:8434)
+       at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:718)
+       at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:383)
+       at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:428)
+       at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:365)
+       at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:178)
+       at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:302)
+       at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:60)
+       at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:254)
+       at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:184)
+       at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728)
+       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
+       at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199)
+       at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239)
+       at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292)
+       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
+       at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295)
+       at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351)
+       at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374)
+       at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143)
+       at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+Caused by: org.eclipse.swt.SWTException: Invalid thread access
+       at org.eclipse.swt.SWT.error(SWT.java:4361)
+       at org.eclipse.swt.SWT.error(SWT.java:4276)
+       at org.eclipse.swt.SWT.error(SWT.java:4247)
+       at org.eclipse.swt.widgets.Display.error(Display.java:1157)
+       at org.eclipse.swt.widgets.Display.checkDevice(Display.java:749)
+       at org.eclipse.swt.widgets.Display.getSystemFont(Display.java:2275)
+       at org.eclipse.jface.preference.PreferenceConverter.<clinit>(PreferenceConverter.java:84)
+       ... 83 more
+
+!ENTRY org.eclipse.osgi 4 0 2012-09-10 13:06:10.975
+!MESSAGE Application error
+!STACK 1
+java.lang.NoClassDefFoundError: Could not initialize class org.eclipse.jface.preference.PreferenceConverter
+       at org.eclipse.ui.internal.themes.ThemeElementHelper.installFont(ThemeElementHelper.java:103)
+       at org.eclipse.ui.internal.themes.ThemeElementHelper.populateRegistry(ThemeElementHelper.java:59)
+       at org.eclipse.ui.internal.Workbench$27.runWithException(Workbench.java:1550)
+       at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
+       at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
+       at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
+       at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3529)
+       at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3182)
+       at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2478)
+       at org.eclipse.ui.internal.Workbench.access$7(Workbench.java:2386)
+       at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:583)
+       at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
+       at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:540)
+       at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
+       at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
+       at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
+       at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
+       at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
+       at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
+       at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
+       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
+       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+       at java.lang.reflect.Method.invoke(Method.java:601)
+       at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
+       at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
+       at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
+       at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
+
+!ENTRY com.android.ide.eclipse.adt 4 0 2012-09-10 13:06:12.352
+!MESSAGE parseSdkContent failed
+!STACK 0
+java.lang.NullPointerException
+       at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2350)
+       at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:793)
+       at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:5269)
+       at com.android.ide.eclipse.adt.internal.project.LibraryClasspathContainerInitializer.updateProjects(LibraryClasspathContainerInitializer.java:85)
+       at com.android.ide.eclipse.adt.internal.project.ProjectHelper.updateProjects(ProjectHelper.java:243)
+       at com.android.ide.eclipse.adt.AdtPlugin$7.run(AdtPlugin.java:1401)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+
+!ENTRY org.eclipse.core.jobs 2 2 2012-09-10 13:06:12.704
+!MESSAGE Job found still running after platform shutdown.  Jobs should be canceled by the plugin that scheduled them during shutdown: com.android.ide.eclipse.adt.internal.sdk.Sdk$5
+!SESSION 2012-09-10 13:08:04.412 -----------------------------------------------
+eclipse.buildId=I20120608-1400
+java.version=1.7.0_05
+java.vendor=Oracle Corporation
+BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=ja_JP
+Framework arguments:  -product org.eclipse.epp.package.java.product
+Command-line arguments:  -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.java.product
+
+!ENTRY org.eclipse.core.resources 2 10035 2012-09-10 13:08:08.494
+!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes.
+
+!ENTRY org.eclipse.equinox.preferences 4 2 2012-09-10 13:08:12.639
+!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.equinox.preferences".
+!STACK 0
+java.lang.ExceptionInInitializerError
+       at org.eclipse.wb.internal.core.preferences.PreferenceInitializer.initializeDefaultPreferences(PreferenceInitializer.java:50)
+       at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper$1.run(PreferenceServiceRegistryHelper.java:300)
+       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
+       at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper.runInitializer(PreferenceServiceRegistryHelper.java:303)
+       at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper.applyRuntimeDefaults(PreferenceServiceRegistryHelper.java:131)
+       at org.eclipse.core.internal.preferences.PreferencesService.applyRuntimeDefaults(PreferencesService.java:368)
+       at org.eclipse.core.internal.preferences.DefaultPreferences.applyRuntimeDefaults(DefaultPreferences.java:166)
+       at org.eclipse.core.internal.preferences.DefaultPreferences.load(DefaultPreferences.java:237)
+       at org.eclipse.core.internal.preferences.EclipsePreferences.create(EclipsePreferences.java:410)
+       at org.eclipse.core.internal.preferences.EclipsePreferences.internalNode(EclipsePreferences.java:663)
+       at org.eclipse.core.internal.preferences.EclipsePreferences.node(EclipsePreferences.java:805)
+       at org.eclipse.core.internal.preferences.AbstractScope.getNode(AbstractScope.java:38)
+       at org.eclipse.core.runtime.preferences.DefaultScope.getNode(DefaultScope.java:76)
+       at org.eclipse.ui.preferences.ScopedPreferenceStore.getDefaultPreferences(ScopedPreferenceStore.java:250)
+       at org.eclipse.ui.preferences.ScopedPreferenceStore.getPreferenceNodes(ScopedPreferenceStore.java:285)
+       at org.eclipse.ui.preferences.ScopedPreferenceStore.internalGet(ScopedPreferenceStore.java:475)
+       at org.eclipse.ui.preferences.ScopedPreferenceStore.getBoolean(ScopedPreferenceStore.java:387)
+       at org.eclipse.wb.internal.core.preferences.PreferenceToSystemForwarder.<init>(PreferenceToSystemForwarder.java:38)
+       at org.eclipse.wb.internal.core.DesignerPlugin.installPreferenceForwarder(DesignerPlugin.java:439)
+       at org.eclipse.wb.internal.core.DesignerPlugin.start(DesignerPlugin.java:72)
+       at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
+       at java.security.AccessController.doPrivileged(Native Method)
+       at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
+       at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
+       at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
+       at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300)
+       at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440)
+       at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:263)
+       at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107)
+       at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:469)
+       at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
+       at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395)
+       at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:464)
+       at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
+       at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
+       at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
+       at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
+       at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:340)
+       at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:229)
+       at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1212)
+       at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:174)
+       at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
+       at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
+       at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
+       at org.eclipse.core.internal.content.ContentType.getDescriber(ContentType.java:271)
+       at org.eclipse.core.internal.content.ContentTypeCatalog.collectMatchingByContents(ContentTypeCatalog.java:184)
+       at org.eclipse.core.internal.content.ContentTypeCatalog.internalFindContentTypesFor(ContentTypeCatalog.java:403)
+       at org.eclipse.core.internal.content.ContentTypeCatalog.internalFindContentTypesFor(ContentTypeCatalog.java:450)
+       at org.eclipse.core.internal.content.ContentTypeCatalog.getDescriptionFor(ContentTypeCatalog.java:346)
+       at org.eclipse.core.internal.content.ContentTypeCatalog.getDescriptionFor(ContentTypeCatalog.java:360)
+       at org.eclipse.core.internal.content.ContentTypeMatcher.getDescriptionFor(ContentTypeMatcher.java:86)
+       at org.eclipse.core.internal.resources.ContentDescriptionManager.readDescription(ContentDescriptionManager.java:445)
+       at org.eclipse.core.internal.resources.ContentDescriptionManager.getDescriptionFor(ContentDescriptionManager.java:355)
+       at org.eclipse.core.internal.resources.File.internalGetCharset(File.java:246)
+       at org.eclipse.core.internal.resources.File.getCharset(File.java:207)
+       at org.eclipse.core.internal.resources.File.getCharset(File.java:194)
+       at org.eclipse.jdt.internal.core.util.Util.getResourceContentsAsCharArray(Util.java:1156)
+       at org.eclipse.jdt.internal.core.builder.SourceFile.getContents(SourceFile.java:79)
+       at org.eclipse.jdt.internal.compiler.ReadManager.getContents(ReadManager.java:144)
+       at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9896)
+       at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9868)
+       at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:8434)
+       at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:718)
+       at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:383)
+       at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:428)
+       at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:365)
+       at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:178)
+       at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:302)
+       at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:60)
+       at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:254)
+       at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:173)
+       at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728)
+       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
+       at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199)
+       at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239)
+       at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292)
+       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
+       at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295)
+       at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351)
+       at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374)
+       at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143)
+       at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+Caused by: org.eclipse.swt.SWTException: Invalid thread access
+       at org.eclipse.swt.SWT.error(SWT.java:4361)
+       at org.eclipse.swt.SWT.error(SWT.java:4276)
+       at org.eclipse.swt.SWT.error(SWT.java:4247)
+       at org.eclipse.swt.widgets.Display.error(Display.java:1157)
+       at org.eclipse.swt.widgets.Display.checkDevice(Display.java:749)
+       at org.eclipse.swt.widgets.Display.getSystemFont(Display.java:2275)
+       at org.eclipse.jface.preference.PreferenceConverter.<clinit>(PreferenceConverter.java:84)
+       ... 83 more
+
+!ENTRY org.eclipse.osgi 4 0 2012-09-10 13:08:16.596
+!MESSAGE Application error
+!STACK 1
+java.lang.NoClassDefFoundError: Could not initialize class org.eclipse.jface.preference.PreferenceConverter
+       at org.eclipse.ui.internal.themes.ThemeElementHelper.installFont(ThemeElementHelper.java:103)
+       at org.eclipse.ui.internal.themes.ThemeElementHelper.populateRegistry(ThemeElementHelper.java:59)
+       at org.eclipse.ui.internal.Workbench$27.runWithException(Workbench.java:1550)
+       at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
+       at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
+       at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
+       at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3529)
+       at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3182)
+       at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2478)
+       at org.eclipse.ui.internal.Workbench.access$7(Workbench.java:2386)
+       at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:583)
+       at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
+       at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:540)
+       at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
+       at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
+       at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
+       at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
+       at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
+       at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
+       at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
+       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
+       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+       at java.lang.reflect.Method.invoke(Method.java:601)
+       at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
+       at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
+       at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
+       at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
+
+!ENTRY com.android.ide.eclipse.adt 4 0 2012-09-10 13:08:20.985
+!MESSAGE parseSdkContent failed
+!STACK 0
+java.lang.NullPointerException
+       at com.android.ide.eclipse.adt.AdtPlugin.getDisplay(AdtPlugin.java:334)
+       at com.android.ide.eclipse.adt.AdtPlugin$7.run(AdtPlugin.java:1422)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+
+!ENTRY org.eclipse.core.jobs 2 2 2012-09-10 13:08:21.905
+!MESSAGE Job found still running after platform shutdown.  Jobs should be canceled by the plugin that scheduled them during shutdown: com.android.ide.eclipse.adt.internal.sdk.Sdk$5
diff --git a/source/workspace/.metadata.bak/.mylyn/.taskListIndex/segments.gen b/source/workspace/.metadata.bak/.mylyn/.taskListIndex/segments.gen
new file mode 100644 (file)
index 0000000..63a7ec9
Binary files /dev/null and b/source/workspace/.metadata.bak/.mylyn/.taskListIndex/segments.gen differ
diff --git a/source/workspace/.metadata.bak/.mylyn/.taskListIndex/segments_1 b/source/workspace/.metadata.bak/.mylyn/.taskListIndex/segments_1
new file mode 100644 (file)
index 0000000..6748266
Binary files /dev/null and b/source/workspace/.metadata.bak/.mylyn/.taskListIndex/segments_1 differ
diff --git a/source/workspace/.metadata.bak/.mylyn/.tasks.xml.zip b/source/workspace/.metadata.bak/.mylyn/.tasks.xml.zip
new file mode 100644 (file)
index 0000000..94b5937
Binary files /dev/null and b/source/workspace/.metadata.bak/.mylyn/.tasks.xml.zip differ
diff --git a/source/workspace/.metadata.bak/.mylyn/repositories.xml.zip b/source/workspace/.metadata.bak/.mylyn/repositories.xml.zip
new file mode 100644 (file)
index 0000000..c7a5228
Binary files /dev/null and b/source/workspace/.metadata.bak/.mylyn/repositories.xml.zip differ
diff --git a/source/workspace/.metadata.bak/.mylyn/tasks.xml.zip b/source/workspace/.metadata.bak/.mylyn/tasks.xml.zip
new file mode 100644 (file)
index 0000000..5b1c3aa
Binary files /dev/null and b/source/workspace/.metadata.bak/.mylyn/tasks.xml.zip differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/1/c0a702e87af9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/1/c0a702e87af9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..7836779
--- /dev/null
@@ -0,0 +1,13 @@
+package com.yuji.ef.exception;
+
+public class EfException extends Exception {
+       private Error error;
+
+       public EfException(Error error){
+               this.error = error;
+       }
+       
+       public Error getError(){
+               return error;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/11/60cc6dc87ef9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/11/60cc6dc87ef9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..93c709f
--- /dev/null
@@ -0,0 +1,38 @@
+package com.yuji.ef;
+
+import android.content.Context;
+
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.pref.EditPrefUtil;
+import com.yuji.ef.service.NoteUpdatorService;
+import com.yuji.ef.utility.EvernoteUtil;
+
+public class Initialize {
+       public static Context context;
+       private static boolean isInit = true;
+       
+       public static void initialize(Context applicatonContext) {
+               if (!isInit) {
+                       return;
+               }
+
+               try {
+                       context = applicatonContext;
+                       
+                       EditPrefUtil pref = new EditPrefUtil(context);
+                       pref.getInt(Constant.PREF_UPDATE_TIME, 0);
+                       pref.update();
+                       
+                       EvernoteUtil util = EvernoteUtil.getInstance();
+                       util.setConfig("yuji-k64613", "TODO");
+                       DatabaseHelper.init(context);
+                       
+                       NoteUpdatorService.init(context);
+               } catch (Exception e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+               isInit = false;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/17/2012322c7ef9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/17/2012322c7ef9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..f28bfe1
--- /dev/null
@@ -0,0 +1,84 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.Debug;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+       private Context context;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+               if (activity != null) {
+                       context = activity.getApplicationContext();
+               }
+       }
+
+       public void doExecute() throws EfException {
+               try {
+//                     FolderUtil test = FolderUtil.getInstance();
+//                     test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e){
+                       EfError error = e.getError();
+                       Debug.d(this, null, e);
+                       throw e;
+               } catch (Exception e) {
+                       throw new EfException(EfError.SYSTEM);
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+//             if (context != null) {
+//                     Intent intent = new Intent(Constant.ACTION_UPDATE);
+//                     context.sendBroadcast(intent);
+//             }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/17/5048164679f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/17/5048164679f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/19/307446817af9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/19/307446817af9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/19/c0d4a7117ff9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/19/c0d4a7117ff9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..044888a
--- /dev/null
@@ -0,0 +1,84 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+
+import com.yuji.ef.Initialize;
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.Debug;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+       }
+
+       public void doExecute() throws EfException {
+               try {
+//                     FolderUtil test = FolderUtil.getInstance();
+//                     test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e){
+                       EfError error = e.getError();
+                       // TODO
+                       EfException.msg(Initialize.getContext(), "データの更新に失敗しました(a)");
+                       Debug.d(this, null, e);
+                       throw e;
+               } catch (Exception e) {
+                       e.msg(context, "データの更新に失敗しました(b)");
+                       throw new EfException(EfError.SYSTEM);
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+//             if (context != null) {
+//                     Intent intent = new Intent(Constant.ACTION_UPDATE);
+//                     context.sendBroadcast(intent);
+//             }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/1e/701b842089f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/1e/701b842089f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..f38ee54
--- /dev/null
@@ -0,0 +1,321 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.RollbackException;
+
+public class FolderUtil {
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               List<Notebook> noteBookList = util.getNoteBookList();
+
+               long id;
+               Node top = nodeDao.searchRoot(db);
+
+               for (Notebook notebook : noteBookList) {
+                       String guid = notebook.getGuid();
+                       String name = notebook.getName();
+
+                       Node oldBook = nodeDao.searchByGuid(db, guid);
+                       if (oldBook == null) {
+                               DirNode dirNode = new DirNode(name, null);
+                               guid = notebook.getGuid();
+                               dirNode.setGuid(guid);
+
+                               id = addDirNodeNT(top, dirNode);
+                       } else {
+                               String oldName = oldBook.getName();
+                               if (!name.equals(oldName)) {
+                                       // 名称が異なる
+                                       nodeDao.updateNameNT(oldBook, name);
+                               }
+                       }
+               }
+
+               // 削除
+               List<Node> list = nodeDao.searchBook(db);
+               for (Node node : list) {
+                       boolean isFound = false;
+                       for (Notebook book : noteBookList) {
+                               String guid = book.getGuid();
+                               if (node.getGuid().equals(guid)) {
+                                       isFound = true;
+                                       break;
+                               }
+                       }
+                       if (!isFound) {
+                               if (CommonUtil.isNull(node.getChildrenString())) {
+                                       // 子が無い場合は削除
+                                       nodeDao.deleteNT(node.getId());
+                               } else {
+                                       // フォルダに変更
+                                       nodeDao.updateGuidNT(node, null);
+                               }
+                       }
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db) throws RollbackException {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+               // TODO
+               // FOO
+               throw new RollbackException(EfError.NONE);
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) throws RollbackException {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) throws RollbackException {
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               if (!util.isLoggedIn()){
+                       throw new RollbackException(EfError.NO_LOGIN);
+               }
+               
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+
+               db.beginTransaction();
+               try {
+                       if (isRoot) {
+                               if (nodeDao.isEmpty()) {
+                                       Node top = new RootNode("/", null);
+                                       top.setStatus(Node.Status.OPEN);
+                                       long id = nodeDao.addNT(top);
+                                       top.setId(id);
+                               }
+                       }
+
+                       if (isBook) {
+                               updateNotebook(db);
+                       }
+                       if (isNote) {
+                               nodeDao.updateNoteFlag(0);
+                               updateNote(db);
+                               deleteNode(db);                 
+                       }
+                       
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/1f/708f7ceb7ef9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/1f/708f7ceb7ef9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..37a033a
--- /dev/null
@@ -0,0 +1,24 @@
+package com.yuji.ef.exception;
+
+import android.content.Context;
+import android.widget.Toast;
+
+public class EfException extends Exception {
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 2248123315072811891L;
+       private EfError error;
+
+       public EfException(EfError error){
+               this.error = error;
+       }
+       
+       public EfError getError(){
+               return error;
+       }
+       
+       public static void msg(Context context, String msg){
+               Toast.makeText(context, msg, Toast.LENGTH_LONG);                
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/25/f0f1082180f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/25/f0f1082180f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..8e8eeed
--- /dev/null
@@ -0,0 +1,318 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.RollbackException;
+
+public class FolderUtil {
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               List<Notebook> noteBookList = util.getNoteBookList();
+
+               long id;
+               Node top = nodeDao.searchRoot(db);
+
+               for (Notebook notebook : noteBookList) {
+                       String guid = notebook.getGuid();
+                       String name = notebook.getName();
+
+                       Node oldBook = nodeDao.searchByGuid(db, guid);
+                       if (oldBook == null) {
+                               DirNode dirNode = new DirNode(name, null);
+                               guid = notebook.getGuid();
+                               dirNode.setGuid(guid);
+
+                               id = addDirNodeNT(top, dirNode);
+                       } else {
+                               String oldName = oldBook.getName();
+                               if (!name.equals(oldName)) {
+                                       // 名称が異なる
+                                       nodeDao.updateNameNT(oldBook, name);
+                               }
+                       }
+               }
+
+               // 削除
+               List<Node> list = nodeDao.searchBook(db);
+               for (Node node : list) {
+                       boolean isFound = false;
+                       for (Notebook book : noteBookList) {
+                               String guid = book.getGuid();
+                               if (node.getGuid().equals(guid)) {
+                                       isFound = true;
+                                       break;
+                               }
+                       }
+                       if (!isFound) {
+                               if (CommonUtil.isNull(node.getChildrenString())) {
+                                       // 子が無い場合は削除
+                                       nodeDao.deleteNT(node.getId());
+                               } else {
+                                       // フォルダに変更
+                                       nodeDao.updateGuidNT(node, null);
+                               }
+                       }
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db) throws RollbackException {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) throws RollbackException {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) throws RollbackException {
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               if (!util.isLoggedIn()){
+                       throw new RollbackException(EfError.NO_LOGIN);
+               }
+               
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+
+               db.beginTransaction();
+               try {
+                       if (isRoot) {
+                               if (nodeDao.isEmpty()) {
+                                       Node top = new RootNode("/", null);
+                                       top.setStatus(Node.Status.OPEN);
+                                       long id = nodeDao.addNT(top);
+                                       top.setId(id);
+                               }
+                       }
+
+                       if (isBook) {
+                               updateNotebook(db);
+                       }
+                       if (isNote) {
+                               nodeDao.updateNoteFlag(0);
+                               updateNote(db);
+                               deleteNode(db);                 
+                       }
+                       
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/27/106d42fd7ef9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/27/106d42fd7ef9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..b0222ac
--- /dev/null
@@ -0,0 +1,83 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.Debug;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+       }
+
+       public void doExecute() throws EfException {
+               try {
+//                     FolderUtil test = FolderUtil.getInstance();
+//                     test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e){
+                       EfError error = e.getError();
+                       // TODO
+                       EfError.msg(context, "データの更新に失敗しました(a)");
+                       Debug.d(this, null, e);
+                       throw e;
+               } catch (Exception e) {
+                       e.msg(context, "データの更新に失敗しました(b)");
+                       throw new EfException(EfError.SYSTEM);
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+//             if (context != null) {
+//                     Intent intent = new Intent(Constant.ACTION_UPDATE);
+//                     context.sendBroadcast(intent);
+//             }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/28/b0a58a588af9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/28/b0a58a588af9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..3901957
--- /dev/null
@@ -0,0 +1,1003 @@
+package com.yuji.ef;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.database.sqlite.SQLiteDatabase;
+import android.graphics.Bitmap;
+import android.graphics.PixelFormat;
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.Gravity;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.WindowManager;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.Node.Status;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeComparator;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.NodeDaoImpl;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.utility.BaseActivity;
+import com.yuji.ef.utility.BitmapCacheFactory;
+import com.yuji.ef.utility.EvernoteIntentUtil;
+import com.yuji.ef.utility.FolderUtil;
+import com.yuji.ef.utility.LockHandler;
+import com.yuji.ef.utility.LockListener;
+import com.yuji.ef.utility.ScaleUtil;
+
+public class EverFolderActivity extends BaseActivity implements LockListener {
+       private enum ScreenStatus {
+               Normal, AddNode, DeleteNode, RenameNode
+       };
+
+       private LinearLayout msgLayout;
+       private LinearLayout msgButtonLayout;
+       private Button msgOkButton;
+       private Button msgCancelButton;
+       private EditText msgEditText;
+
+       private IconFrameLayout layout;
+       private TextView confirmMsg;
+       private IconScrollView scrollView;
+       private LinearLayout buttonLayout;
+       private Button leftButton;
+       private Button rightButton;
+       // private Button addButton;
+       // private Button deleteButton;
+
+       private ScreenStatus status;
+       private NodeComparator nodeComparator = new NodeComparator();
+       private BitmapCacheFactory bitmapFactory = BitmapCacheFactory.getInstance();
+       private Node top = null;
+       private int indent = 0;
+       private int bmpPaddingLeft;
+       private int bmpWidth;
+       private int viewY;
+       private boolean lock = false;
+       private boolean isInit = true;
+       private boolean isInCycle = false;
+       private boolean isResult = false;
+
+       private BroadcastReceiver receiver = new BroadcastReceiver() {
+               @Override
+               public void onReceive(Context context, Intent intent) {
+                       String action = intent.getAction();
+EfException.msg(EverFolderActivity.this, intent.getStringExtra("MESSAGE"));
+                       if (action.compareTo(Constant.ACTION_UPDATE) == 0) {
+                               if (isInCycle && !lock) {
+                                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                                       lock = lockDao.lock(EverFolderActivity.this,
+                                                       Constant.LOCK_UPDATE_NOTE);
+                                       if (lock) {
+                                               updateList();
+                                               // ほんとは、setStatus()に入れたい
+                                               layout.setVisibility(View.VISIBLE);
+                                       }
+                                       setStatus();
+                               }
+                       }
+               }
+       };
+
+       @Override
+       public void onCreate(Bundle savedInstanceState) {
+               super.onCreate(savedInstanceState);
+               setContentView(R.layout.main);
+
+               try {
+                       IntentFilter intentFilter = new IntentFilter();
+                       intentFilter.addAction(Constant.ACTION_UPDATE);
+                       intentFilter.addAction(Constant.ACTION_MESSAGE);
+                       registerReceiver(receiver, intentFilter);
+
+                       scrollView = (IconScrollView) findViewById(R.id.scrollView);
+                       layout = (IconFrameLayout) findViewById(R.id.frameLayout);
+                       layout.setActivity(this);
+                       layout.setScrollView(scrollView);
+
+                       buttonLayout = (LinearLayout) findViewById(R.id.mainButtonLayout);
+                       leftButton = (Button) findViewById(R.id.leftButton);
+                       rightButton = (Button) findViewById(R.id.rightButton);
+                       // addButton = (Button) findViewById(R.id.addButton);
+                       // deleteButton = (Button) findViewById(R.id.deleteButton);
+
+                       msgLayout = (LinearLayout) findViewById(R.id.mainMsgLayout);
+                       confirmMsg = (TextView) findViewById(R.id.mainConfirmMsg);
+                       msgEditText = (EditText) findViewById(R.id.mainMsgEditText);
+                       msgButtonLayout = (LinearLayout) findViewById(R.id.mainMsgButtonLayout);
+                       msgOkButton = (Button) findViewById(R.id.mainMsgOkButton);
+                       msgCancelButton = (Button) findViewById(R.id.mainMsgCancelButton);
+
+                       leftButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       leftButtonOnClick();
+                               }
+                       });
+                       rightButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       rightButtonOnClick();
+                               }
+                       });
+                       // addButton.setOnClickListener(new OnClickListener() {
+                       // @Override
+                       // public void onClick(View v) {
+                       // addButtonOnClick();
+                       // }
+                       // });
+                       // deleteButton.setOnClickListener(new OnClickListener() {
+                       // @Override
+                       // public void onClick(View v) {
+                       // deleteButtonOnClick();
+                       // }
+                       // });
+
+                       msgEditText.addTextChangedListener(new TextWatcher() {
+                               public void afterTextChanged(Editable s) {
+                                       if (status != ScreenStatus.DeleteNode) {
+                                               String text = s.toString();
+                                               msgOkButton.setEnabled(text.length() > 0);
+                                       } else {
+                                               msgOkButton.setEnabled(true);
+                                       }
+                               }
+
+                               public void beforeTextChanged(CharSequence s, int start,
+                                               int count, int after) {
+
+                               }
+
+                               public void onTextChanged(CharSequence s, int start,
+                                               int before, int count) {
+
+                               }
+                       });
+
+                       msgOkButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       msgOkButtonOnClick(v);
+                               }
+                       });
+                       msgCancelButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       msgCancelOnClick(v);
+                               }
+                       });
+
+                       ScaleUtil scaleUtil = ScaleUtil.getInstance();
+                       scaleUtil.init(this);
+
+                       bitmapFactory.init(this);
+                       Node node = new DirNode(null, null);
+                       Bitmap bmp = null;
+                       bmp = bitmapFactory.get(node.getStatusIconId());
+                       bmpPaddingLeft = bmp.getWidth();
+                       bmp = bitmapFactory.get(node.getIconId());
+                       bmpWidth = bmp.getWidth();
+
+                       float fSize = 48 * (1 / 2.0f);
+                       leftButton.setTextSize(fSize);
+                       rightButton.setTextSize(fSize);
+               } catch (Exception e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+       @Override
+       public boolean onCreateOptionsMenu(Menu menu) {
+               boolean ret = super.onCreateOptionsMenu(menu);
+               int index = 0;
+
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "カット");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "ペースト");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "追加");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "削除");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "リネーム");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "設定");
+               return ret;
+       }
+
+       @Override
+       public boolean onMenuOpened(int featureId, Menu menu) {
+               boolean ret = super.onMenuOpened(featureId, menu);
+
+               // #29304
+               if (menu == null) {
+                       return false;
+               }
+
+               MenuItem item;
+
+               boolean cutButtonFlag = false;
+               boolean pastButtonFlag = false;
+               boolean addButtonFlag = false;
+               boolean deleteButtonFlag = false;
+               boolean renameButtonFlag = false;
+               boolean confButtonFlag = true;
+
+               if (status == ScreenStatus.Normal) {
+                       LabelIconView target = layout.getSelectedTarget();
+                       NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+                       long id = -1;
+                       Node node = null;
+                       if (target != null) {
+                               id = target.getNodeId();
+                               node = dao.searchById(id);
+                       }
+
+                       if (isDirNode(target, node, false) || isFileNode(node)) {
+                               cutButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, true) && isCut()) {
+                               pastButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, true)) {
+                               addButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, false) && !isNoteBook(node)
+                                       && CommonUtil.isNull(node.getChildrenString())) {
+                               deleteButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, false) && !isNoteBook(node)) {
+                               renameButtonFlag = true;
+                       }
+               }
+
+               int index = 0;
+               item = menu.getItem(index++);
+               item.setVisible(cutButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(pastButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(addButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(deleteButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(renameButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(confButtonFlag);
+
+               return ret;
+       }
+
+       private boolean isFileNode(Node node) {
+               if (node == null || !(node instanceof FileNode)) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isDirNode(LabelIconView target, Node node,
+                       boolean containRoot) {
+               if (target == null) {
+                       return false;
+               }
+               if (node == null) {
+                       return false;
+               }
+               if (!containRoot && (node instanceof RootNode)) {
+                       return false;
+               }
+               if (!(node instanceof DirNode)) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isNoteBook(Node node) {
+               if (node == null) {
+                       return false;
+               }
+               if (CommonUtil.isNull(node.getGuid())) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isCut() {
+               LabelIconView srcTarget = layout.getCutTarget();
+               if (srcTarget == null) {
+                       return false;
+               }
+               return true;
+       }
+
+       @Override
+       public boolean onOptionsItemSelected(MenuItem item) {
+               Intent intent;
+               try {
+                       switch (item.getItemId()) {
+                       case Menu.FIRST + 0:
+                               selectMenuCut();
+                               break;
+                       case Menu.FIRST + 1:
+                               selectMenuPast();
+                               break;
+                       case Menu.FIRST + 2:
+                               selectMenuAdd();
+                               break;
+                       case Menu.FIRST + 3:
+                               selectMenuDelete();
+                               break;
+                       case Menu.FIRST + 4:
+                               selectMenuRename();
+                               break;
+                       case Menu.FIRST + 5:
+                               // dummy();
+                               // dummy2();
+                               intent = new Intent(this, (Class<?>) SettingActivity.class);
+                               startActivityForResult(intent, 0);
+                               break;
+                       default:
+                               break;
+                       }
+               } catch (Exception e) {
+                       terminate(e);
+               }
+               return super.onOptionsItemSelected(item);
+       }
+
+       private void dummy() {
+               NodeDaoImpl dao = (NodeDaoImpl) NodeCacheDao.getInstance();
+               List<Node> list = dao.search();
+               for (Node node : list) {
+                       System.out.println(node.toString());
+               }
+       }
+
+       private void dummy2() {
+               LockDao dao = (LockDao) LockDao.getInstance();
+               boolean b;
+
+               try {
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(new Object(), "key");
+                       dao.unlock(this, "key");
+                       b = dao.lock(new Object(), "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       dao.unlock(new Object(), "key");
+
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+
+       }
+
+       private void selectMenuAdd() {
+               setStatus(ScreenStatus.AddNode);
+       }
+
+       private void selectMenuDelete() {
+               setStatus(ScreenStatus.DeleteNode);
+       }
+
+       private void selectMenuRename() {
+               LabelIconView target = layout.getSelectedTarget();
+               if (target == null) {
+                       return;
+               }
+
+               long id = target.getNodeId();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               Node node = dao.searchById(id);
+               if (node != null) {
+                       String text = node.getName();
+                       msgEditText.setText(text);
+                       setStatus(ScreenStatus.RenameNode);
+               }
+       }
+
+       private void selectMenuCut() {
+               LabelIconView target = layout.getSelectedTarget();
+               if (target == null) {
+                       return;
+               }
+
+               layout.setCutTarget(target);
+               layout.refresh();
+       }
+
+       private void selectMenuPast() {
+               LabelIconView srcTarget = layout.getCutTarget();
+               if (srcTarget == null) {
+                       return;
+               }
+
+               LabelIconView dstTarget = layout.getSelectedTarget();
+               if (dstTarget == null) {
+                       return;
+               }
+
+               layout.setCutTarget(null);
+
+               long srcId = srcTarget.getNodeId();
+               long dstId = dstTarget.getNodeId();
+               execute(srcId, dstId);
+       }
+
+       private void updateList() {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               top = dao.searchRoot();
+               if (top == null) {
+                       // TODO
+               }
+               updateList(top);
+       }
+
+       private void updateList(Node parent) {
+               viewY = 10;
+
+               scrollView.setVisibility(View.GONE);            
+               layout.removeAllViews();
+               updateList(parent, 0);
+               layout.setMinimumHeight(viewY);
+               scrollView.setVisibility(View.VISIBLE);         
+               layout.refresh();
+
+               scrollView.invalidate();
+       }
+
+       private void updateList(Node node, int depth) {
+               int N = (int) (bmpWidth * 0.6);
+               int M = (int) (bmpWidth * 1.2);
+               int x = N * (depth - indent);
+
+               if (depth - indent >= 0
+                               && !(depth - indent == 0 && node instanceof FileNode)) {
+                       LabelIconView view = new LabelIconView(this);
+                       node.setView(view);
+
+                       Bitmap bmp1 = null;
+                       int id = node.getStatusIconId();
+                       if (id >= 0) {
+                               // DirNode
+                               bmp1 = bitmapFactory.get(node.getStatusIconId());
+                       } else {
+                               // FileNode
+                               x += bmpPaddingLeft;
+                       }
+                       Bitmap bmp2 = bitmapFactory.get(node.getIconId());
+                       createIconImageView(view, bmp1, bmp2, node.getName(), x, viewY);
+                       // LabelIconView s = view.getStatusImageView();
+                       // if (s != null) {
+                       // s.setNodeId(node.getId());
+                       // }
+                       view.setNodeId(node.getId());
+               }
+               viewY += M;
+
+               if (node.getStatus() != Node.Status.OPEN) {
+                       return;
+               }
+               List<Long> idList = node.getChildren();
+               if (idList == null) {
+                       return;
+               }
+
+               List<Node> list = new ArrayList<Node>();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               for (Long id : idList) {
+                       Node n = dao.searchById(id);
+                       if (n == null) {
+                               // TODO
+                               continue;
+                       }
+                       if (n instanceof DirNode) {
+                               DirNode d = (DirNode) n;
+                               if (isNoteBook(d) && !d.isSelected()) {
+                                       continue;
+                               }
+                       }
+                       list.add(n);
+               }
+               Collections.sort(list, nodeComparator);
+               for (Node n : list) {
+                       updateList(n, depth + 1);
+               }
+       }
+
+       private void createIconImageView(LabelIconView v, Bitmap bmp1, Bitmap bmp2,
+                       String text, int x, int y) {
+               v.init(x, y, bmp1, bmp2, text);
+
+               android.view.WindowManager.LayoutParams params = new WindowManager.LayoutParams();
+               params.gravity = Gravity.TOP | Gravity.LEFT;
+               params.height = WindowManager.LayoutParams.WRAP_CONTENT;
+               params.width = WindowManager.LayoutParams.WRAP_CONTENT;
+               params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
+                               | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
+                               | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
+                               | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
+               params.format = PixelFormat.TRANSLUCENT;
+               params.windowAnimations = 0;
+               params.x = x;
+               params.y = y;
+               v.setLayoutParams(params);
+
+               // LabelIconView siv = v.getStatusImageView();
+               // if (siv != null) {
+               // layout.addView(siv, false);
+               // }
+
+               layout.addView(v);
+               v.layout(x, y, x + v.getWidth(), y + v.getHeight());
+       }
+
+       @Override
+       public void sendLockResult(boolean b) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               if (isResult) {
+                       if (dao.isEmpty()) {
+                               finish();
+                               return;
+                       }
+               }
+               isResult = false;
+
+               if (dao.isEmpty()) {
+                       if (isInit) {
+                               Intent intent = new Intent(this,
+                                               (Class<?>) SettingActivity.class);
+                               startActivityForResult(intent, 0);
+
+                               isInit = false;
+                       } else {
+                               finish();
+                               isInit = true;
+                       }
+               }
+
+               if (isInCycle) {
+                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                       lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
+                       if (isInit) {
+                               status = ScreenStatus.Normal;
+
+                               if (lock) {
+                                       layout.setVisibility(View.VISIBLE);
+                                       updateList();
+                               } else {
+                                       layout.removeAllViews();
+                               }
+                               setStatus();
+                               isInit = false;
+                       } else {
+                               setStatus();
+                       }
+               } else {
+                       // TODO
+                       // lock解除
+               }
+       }
+
+       @Override
+       protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+               // TODO sendLockResult()、「lock解除」のため、とりあえずコメント
+               // NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               // if (dao.isEmpty()) {
+               // finish();
+               // }
+               isResult = true;
+               isInit = true;
+       }
+
+       @Override
+       protected void onStart() {
+               super.onStart();
+       }
+
+       @Override
+       protected void onResume() {
+               super.onResume();
+               isInCycle = true;
+
+               LockHandler handler = new LockHandler();
+               handler.lock(this, Constant.LOCK_UPDATE_NOTE);
+               lock = false;
+
+               if (isInit) {
+                       layout.setVisibility(View.INVISIBLE);
+                       setStatus();
+               }
+               else {
+                       // #29421
+                       updateList();
+               }
+               
+               // NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               // if (dao.isEmpty()) {
+               // if (isInit) {
+               // Intent intent = new Intent(this,
+               // (Class<?>) SettingActivity.class);
+               // startActivityForResult(intent, 0);
+               //
+               // isInit = false;
+               // } else {
+               // finish();
+               // isInit = true;
+               // }
+               // }
+               //
+               // LockDao lockDao = (LockDao) LockDao.getInstance();
+               // lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
+               //
+               // if (isInit) {
+               // status = ScreenStatus.Normal;
+               //
+               // if (lock) {
+               // updateList();
+               // } else {
+               // layout.removeAllViews();
+               // }
+               // setStatus();
+               // isInit = false;
+               // } else {
+               // setStatus();
+               // }
+       }
+
+       @Override
+       protected void onPause() {
+               // ロック未取得でも解除する(ゴミ掃除)
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(this, Constant.LOCK_UPDATE_NOTE);
+               lock = false;
+
+               super.onPause();
+               isInCycle = false;
+       }
+
+       private void leftButtonOnClick() {
+               moveButtonOnClick(-1);
+               setStatus();
+       }
+
+       private void rightButtonOnClick() {
+               moveButtonOnClick(1);
+               setStatus();
+       }
+
+       private void moveButtonOnClick(int dx) {
+               int mx = 0;
+
+               if (dx < 0) {
+                       if (indent > 0) {
+                               mx = -1;
+                       }
+               } else {
+                       mx = 1;
+               }
+               if (mx != 0) {
+                       indent += mx;
+                       removeAllNodeView();
+                       updateList();
+               }
+       }
+
+       // private void addButtonOnClick() {
+       // setStatus(ScreenStatus.AddNode);
+       // }
+       //
+       // private void deleteButtonOnClick() {
+       // FolderUtil util = FolderUtil.getInstance();
+       // LabelIconView target = layout.getSelectedTarget();
+       // long id = target.getNodeId();
+       // NodeDao dao = (NodeDao) NodeDao.getInstance();
+       // Node node = dao.searchById(id);
+       // if (node != null) {
+       // util.deleteNode(node);
+       // // TODO 三角マークも消さないといけないのでは
+       // layout.removeView(target);
+       // updateList();
+       // setStatus();
+       // }
+       // }
+
+       private void msgOkButtonOnClick(View v) {
+               FolderUtil util = FolderUtil.getInstance();
+               LabelIconView target = layout.getSelectedTarget();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               if (status == ScreenStatus.AddNode) {
+                       long id = target.getNodeId();
+                       Node parent = dao.searchById(id);
+                       if (parent != null) {
+                               String text = msgEditText.getText().toString();
+                               DirNode node = new DirNode(text, null);
+                               util.addDirNode(parent, node);
+                       }
+                       layout.setCutTarget(null, false);
+               } else if (status == ScreenStatus.DeleteNode) {
+                       long id = target.getNodeId();
+                       Node node = dao.searchById(id);
+                       if (node != null) {
+                               util.deleteNode(node);
+                               layout.removeView(target);
+                       }
+                       layout.setCutTarget(null, false);
+               } else if (status == ScreenStatus.RenameNode) {
+                       long id = target.getNodeId();
+                       Node node = dao.searchById(id);
+                       if (node != null) {
+                               String text = msgEditText.getText().toString();
+
+                               dao.updateName(node, text);
+                       }
+                       layout.setCutTarget(null, false);
+               }
+
+               closeIME(v);
+
+               layout.clearTarget();
+               updateList();
+               setStatus(ScreenStatus.Normal);
+       }
+
+       private void msgCancelOnClick(View v) {
+               closeIME(v);
+
+               setStatus(ScreenStatus.Normal);
+       }
+
+       private void closeIME(View v) {
+               InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+               imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
+       }
+
+       public void execute(long srcId, long dstId) {
+               try {
+                       removeAllNodeView();
+
+                       NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+                       if (srcId < 0) {
+                               // TODO
+                       }
+                       if (dstId < 0) {
+                               // TODO
+                       }
+
+                       Node src = dao.searchById(srcId);
+                       Node dst = null;
+                       if (srcId == dstId) {
+                               dst = src;
+                       } else {
+                               dst = dao.searchById(dstId);
+                       }
+
+                       if (dstId == src.getParent()) {
+                               // 同じ場所に移動
+                               return;
+                       }
+                       if (!isFileNode(src) && !isMovable(srcId, dstId)) {
+                               // 再帰的な移動
+                               return;
+                       }
+
+                       Node sp = dao.searchById(src.getParent());
+                       if (sp == null) {
+                               // TODO
+                       }
+                       Node dp = null;
+                       if (src.getParent() == dst.getParent()) {
+                               dp = sp;
+                       } else {
+                               dp = dao.searchById(dst.getParent());
+                       }
+                       if (dp == null) {
+                               // TODO
+                       }
+
+                       // TODO DBへのアクセス
+                       // sp.remove(src.getId());
+                       SQLiteDatabase db = DatabaseHelper.getInstance()
+                                       .getSQLiteDatabase();
+                       db.beginTransaction();
+                       try {
+                               dao.removeChildrenIdNT(sp, src.getId());
+                               if (dst instanceof DirNode) {
+                                       // dst.add(src.getId());
+                                       dao.updateParentNT(src, dst.getId());
+                                       dao.addChildrenIdNT(dst, src.getId());
+                               } else if (dst instanceof FileNode) {
+                                       // dp.add(src.getId());
+                                       dao.updateParentNT(src, dp.getId());
+                                       dao.addChildrenIdNT(dp, src.getId());
+                               }
+
+                               db.setTransactionSuccessful();
+                       } finally {
+                               db.endTransaction();
+                       }
+               } finally {
+                       updateList();
+               }
+       }
+
+       private boolean isMovable(long srcId, long dstId) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               while (dstId >= 0) {
+                       if (srcId == dstId) {
+                               return false;
+                       }
+                       Node node = dao.searchById(dstId);
+                       if (node == null) {
+                               // TODO エラー
+                               return false;
+                       }
+                       if (!(node instanceof DirNode)) {
+                               return true;
+                       }
+                       dstId = node.getParent();
+               }
+               return true;
+       }
+
+       public void execute(long id) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               Node node = dao.searchById(id);
+               if (node == null) {
+                       // TODO
+               }
+               node.toggleStatus();
+               Status status = node.getStatus();
+
+               dao.updateStatus(node, status);
+
+               // removeAllNodeView();
+               updateList();
+       }
+
+       public void executeView(long id) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               Node node = dao.searchById(id);
+               if (!isFileNode(node)) {
+                       return;
+               }
+               String guid = node.getGuid();
+
+               EvernoteIntentUtil util = EvernoteIntentUtil.getInstance();
+               util.viewNote(this, guid);
+       }
+
+       public void targetSelectedChanged(boolean status) {
+               setStatus();
+       }
+
+       public void removeAllNodeView() {
+               layout.removeAllViews();
+       }
+
+       private void setStatus() {
+               setStatus(status);
+       }
+
+       private void setStatus(ScreenStatus status) {
+               try {
+                       if (this.status != status) {
+                               this.status = status;
+                       }
+
+                       if (!lock) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainUpdateMsg));
+                               msgEditText.setVisibility(View.GONE);
+                               msgButtonLayout.setVisibility(View.GONE);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                               
+                               status = ScreenStatus.Normal;
+                               return;
+                       }
+
+                       if (status == ScreenStatus.Normal) {
+                               msgLayout.setVisibility(View.GONE);
+                               // mainMsgEditText.setText("");
+
+                               boolean leftButtonFlag = true;
+                               boolean rightButtonFlag = true;
+                               // boolean addButtonFlag = true;
+                               // boolean deleteButtonFlag = true;
+
+                               if (indent <= 0) {
+                                       leftButtonFlag = false;
+                               }
+
+                               // LabelIconView target = layout.getSelectedTarget();
+                               // NodeDao dao = (NodeDao) NodeDao.getInstance();
+                               // long id = -1;
+                               // Node node = null;
+                               // if (target != null) {
+                               // id = target.getNodeId();
+                               // node = dao.searchById(id);
+                               // }
+                               // if (target == null || node == null || !(node instanceof
+                               // DirNode))
+                               // {
+                               // addButtonFlag = false;
+                               // }
+                               // if (target == null || (node != null && node instanceof
+                               // RootNode))
+                               // {
+                               // deleteButtonFlag = false;
+                               // }
+                               layout.setElabledTouchEvent(true);
+
+                               leftButton.setEnabled(leftButtonFlag);
+                               rightButton.setEnabled(rightButtonFlag);
+                               // addButton.setEnabled(addButtonFlag);
+                               // deleteButton.setEnabled(deleteButtonFlag);
+                       } else if (status == ScreenStatus.AddNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.VISIBLE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainAddMsg));
+                               msgEditText.setText("");
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       } else if (status == ScreenStatus.DeleteNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.GONE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainDeleteMsg));
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       } else if (status == ScreenStatus.RenameNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.VISIBLE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainRenameMsg));
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       }
+               } catch (Throwable e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+}
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/29/10e2bcdb7ef9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/29/10e2bcdb7ef9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..06b6d1c
--- /dev/null
@@ -0,0 +1,38 @@
+package com.yuji.ef;
+
+import android.content.Context;
+
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.pref.EditPrefUtil;
+import com.yuji.ef.service.NoteUpdatorService;
+import com.yuji.ef.utility.EvernoteUtil;
+
+public class Initialize {
+       private static Context context;
+       private static boolean isInit = true;
+       
+       public static void initialize(Context applicatonContext) {
+               if (!isInit) {
+                       return;
+               }
+
+               try {
+                       context = applicatonContext;
+                       
+                       EditPrefUtil pref = new EditPrefUtil(context);
+                       pref.getInt(Constant.PREF_UPDATE_TIME, 0);
+                       pref.update();
+                       
+                       EvernoteUtil util = EvernoteUtil.getInstance();
+                       util.setConfig("yuji-k64613", "TODO");
+                       DatabaseHelper.init(context);
+                       
+                       NoteUpdatorService.init(context);
+               } catch (Exception e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+               isInit = false;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/2d/303551b57af9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/2d/303551b57af9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..9e6ef7f
--- /dev/null
@@ -0,0 +1,13 @@
+package com.yuji.ef.exception;
+
+public class EfException extends Exception {
+       private Error error;
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 1L;
+
+       public EfException(Error error){
+               this.error = error;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/2d/30efcf268af9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/2d/30efcf268af9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..0e10524
--- /dev/null
@@ -0,0 +1,1002 @@
+package com.yuji.ef;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.database.sqlite.SQLiteDatabase;
+import android.graphics.Bitmap;
+import android.graphics.PixelFormat;
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.Gravity;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.WindowManager;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.Node.Status;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeComparator;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.NodeDaoImpl;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.utility.BaseActivity;
+import com.yuji.ef.utility.BitmapCacheFactory;
+import com.yuji.ef.utility.EvernoteIntentUtil;
+import com.yuji.ef.utility.FolderUtil;
+import com.yuji.ef.utility.LockHandler;
+import com.yuji.ef.utility.LockListener;
+import com.yuji.ef.utility.ScaleUtil;
+
+public class EverFolderActivity extends BaseActivity implements LockListener {
+       private enum ScreenStatus {
+               Normal, AddNode, DeleteNode, RenameNode
+       };
+
+       private LinearLayout msgLayout;
+       private LinearLayout msgButtonLayout;
+       private Button msgOkButton;
+       private Button msgCancelButton;
+       private EditText msgEditText;
+
+       private IconFrameLayout layout;
+       private TextView confirmMsg;
+       private IconScrollView scrollView;
+       private LinearLayout buttonLayout;
+       private Button leftButton;
+       private Button rightButton;
+       // private Button addButton;
+       // private Button deleteButton;
+
+       private ScreenStatus status;
+       private NodeComparator nodeComparator = new NodeComparator();
+       private BitmapCacheFactory bitmapFactory = BitmapCacheFactory.getInstance();
+       private Node top = null;
+       private int indent = 0;
+       private int bmpPaddingLeft;
+       private int bmpWidth;
+       private int viewY;
+       private boolean lock = false;
+       private boolean isInit = true;
+       private boolean isInCycle = false;
+       private boolean isResult = false;
+
+       private BroadcastReceiver receiver = new BroadcastReceiver() {
+               @Override
+               public void onReceive(Context context, Intent intent) {
+                       String action = intent.getAction();
+EfException.msg(EverFolderActivity.this, intent.getStringExtra("MESSAGE"));
+                       if (action.compareTo(Constant.ACTION_UPDATE) == 0) {
+                               if (isInCycle && !lock) {
+                                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                                       lock = lockDao.lock(EverFolderActivity.this,
+                                                       Constant.LOCK_UPDATE_NOTE);
+                                       if (lock) {
+                                               updateList();
+                                               // ほんとは、setStatus()に入れたい
+                                               layout.setVisibility(View.VISIBLE);
+                                       }
+                                       setStatus();
+                               }
+                       }
+               }
+       };
+
+       @Override
+       public void onCreate(Bundle savedInstanceState) {
+               super.onCreate(savedInstanceState);
+               setContentView(R.layout.main);
+
+               try {
+                       IntentFilter intentFilter = new IntentFilter();
+                       intentFilter.addAction(Constant.ACTION_UPDATE);
+                       registerReceiver(receiver, intentFilter);
+
+                       scrollView = (IconScrollView) findViewById(R.id.scrollView);
+                       layout = (IconFrameLayout) findViewById(R.id.frameLayout);
+                       layout.setActivity(this);
+                       layout.setScrollView(scrollView);
+
+                       buttonLayout = (LinearLayout) findViewById(R.id.mainButtonLayout);
+                       leftButton = (Button) findViewById(R.id.leftButton);
+                       rightButton = (Button) findViewById(R.id.rightButton);
+                       // addButton = (Button) findViewById(R.id.addButton);
+                       // deleteButton = (Button) findViewById(R.id.deleteButton);
+
+                       msgLayout = (LinearLayout) findViewById(R.id.mainMsgLayout);
+                       confirmMsg = (TextView) findViewById(R.id.mainConfirmMsg);
+                       msgEditText = (EditText) findViewById(R.id.mainMsgEditText);
+                       msgButtonLayout = (LinearLayout) findViewById(R.id.mainMsgButtonLayout);
+                       msgOkButton = (Button) findViewById(R.id.mainMsgOkButton);
+                       msgCancelButton = (Button) findViewById(R.id.mainMsgCancelButton);
+
+                       leftButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       leftButtonOnClick();
+                               }
+                       });
+                       rightButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       rightButtonOnClick();
+                               }
+                       });
+                       // addButton.setOnClickListener(new OnClickListener() {
+                       // @Override
+                       // public void onClick(View v) {
+                       // addButtonOnClick();
+                       // }
+                       // });
+                       // deleteButton.setOnClickListener(new OnClickListener() {
+                       // @Override
+                       // public void onClick(View v) {
+                       // deleteButtonOnClick();
+                       // }
+                       // });
+
+                       msgEditText.addTextChangedListener(new TextWatcher() {
+                               public void afterTextChanged(Editable s) {
+                                       if (status != ScreenStatus.DeleteNode) {
+                                               String text = s.toString();
+                                               msgOkButton.setEnabled(text.length() > 0);
+                                       } else {
+                                               msgOkButton.setEnabled(true);
+                                       }
+                               }
+
+                               public void beforeTextChanged(CharSequence s, int start,
+                                               int count, int after) {
+
+                               }
+
+                               public void onTextChanged(CharSequence s, int start,
+                                               int before, int count) {
+
+                               }
+                       });
+
+                       msgOkButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       msgOkButtonOnClick(v);
+                               }
+                       });
+                       msgCancelButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       msgCancelOnClick(v);
+                               }
+                       });
+
+                       ScaleUtil scaleUtil = ScaleUtil.getInstance();
+                       scaleUtil.init(this);
+
+                       bitmapFactory.init(this);
+                       Node node = new DirNode(null, null);
+                       Bitmap bmp = null;
+                       bmp = bitmapFactory.get(node.getStatusIconId());
+                       bmpPaddingLeft = bmp.getWidth();
+                       bmp = bitmapFactory.get(node.getIconId());
+                       bmpWidth = bmp.getWidth();
+
+                       float fSize = 48 * (1 / 2.0f);
+                       leftButton.setTextSize(fSize);
+                       rightButton.setTextSize(fSize);
+               } catch (Exception e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+       @Override
+       public boolean onCreateOptionsMenu(Menu menu) {
+               boolean ret = super.onCreateOptionsMenu(menu);
+               int index = 0;
+
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "カット");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "ペースト");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "追加");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "削除");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "リネーム");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "設定");
+               return ret;
+       }
+
+       @Override
+       public boolean onMenuOpened(int featureId, Menu menu) {
+               boolean ret = super.onMenuOpened(featureId, menu);
+
+               // #29304
+               if (menu == null) {
+                       return false;
+               }
+
+               MenuItem item;
+
+               boolean cutButtonFlag = false;
+               boolean pastButtonFlag = false;
+               boolean addButtonFlag = false;
+               boolean deleteButtonFlag = false;
+               boolean renameButtonFlag = false;
+               boolean confButtonFlag = true;
+
+               if (status == ScreenStatus.Normal) {
+                       LabelIconView target = layout.getSelectedTarget();
+                       NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+                       long id = -1;
+                       Node node = null;
+                       if (target != null) {
+                               id = target.getNodeId();
+                               node = dao.searchById(id);
+                       }
+
+                       if (isDirNode(target, node, false) || isFileNode(node)) {
+                               cutButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, true) && isCut()) {
+                               pastButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, true)) {
+                               addButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, false) && !isNoteBook(node)
+                                       && CommonUtil.isNull(node.getChildrenString())) {
+                               deleteButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, false) && !isNoteBook(node)) {
+                               renameButtonFlag = true;
+                       }
+               }
+
+               int index = 0;
+               item = menu.getItem(index++);
+               item.setVisible(cutButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(pastButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(addButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(deleteButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(renameButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(confButtonFlag);
+
+               return ret;
+       }
+
+       private boolean isFileNode(Node node) {
+               if (node == null || !(node instanceof FileNode)) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isDirNode(LabelIconView target, Node node,
+                       boolean containRoot) {
+               if (target == null) {
+                       return false;
+               }
+               if (node == null) {
+                       return false;
+               }
+               if (!containRoot && (node instanceof RootNode)) {
+                       return false;
+               }
+               if (!(node instanceof DirNode)) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isNoteBook(Node node) {
+               if (node == null) {
+                       return false;
+               }
+               if (CommonUtil.isNull(node.getGuid())) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isCut() {
+               LabelIconView srcTarget = layout.getCutTarget();
+               if (srcTarget == null) {
+                       return false;
+               }
+               return true;
+       }
+
+       @Override
+       public boolean onOptionsItemSelected(MenuItem item) {
+               Intent intent;
+               try {
+                       switch (item.getItemId()) {
+                       case Menu.FIRST + 0:
+                               selectMenuCut();
+                               break;
+                       case Menu.FIRST + 1:
+                               selectMenuPast();
+                               break;
+                       case Menu.FIRST + 2:
+                               selectMenuAdd();
+                               break;
+                       case Menu.FIRST + 3:
+                               selectMenuDelete();
+                               break;
+                       case Menu.FIRST + 4:
+                               selectMenuRename();
+                               break;
+                       case Menu.FIRST + 5:
+                               // dummy();
+                               // dummy2();
+                               intent = new Intent(this, (Class<?>) SettingActivity.class);
+                               startActivityForResult(intent, 0);
+                               break;
+                       default:
+                               break;
+                       }
+               } catch (Exception e) {
+                       terminate(e);
+               }
+               return super.onOptionsItemSelected(item);
+       }
+
+       private void dummy() {
+               NodeDaoImpl dao = (NodeDaoImpl) NodeCacheDao.getInstance();
+               List<Node> list = dao.search();
+               for (Node node : list) {
+                       System.out.println(node.toString());
+               }
+       }
+
+       private void dummy2() {
+               LockDao dao = (LockDao) LockDao.getInstance();
+               boolean b;
+
+               try {
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(new Object(), "key");
+                       dao.unlock(this, "key");
+                       b = dao.lock(new Object(), "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       dao.unlock(new Object(), "key");
+
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+
+       }
+
+       private void selectMenuAdd() {
+               setStatus(ScreenStatus.AddNode);
+       }
+
+       private void selectMenuDelete() {
+               setStatus(ScreenStatus.DeleteNode);
+       }
+
+       private void selectMenuRename() {
+               LabelIconView target = layout.getSelectedTarget();
+               if (target == null) {
+                       return;
+               }
+
+               long id = target.getNodeId();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               Node node = dao.searchById(id);
+               if (node != null) {
+                       String text = node.getName();
+                       msgEditText.setText(text);
+                       setStatus(ScreenStatus.RenameNode);
+               }
+       }
+
+       private void selectMenuCut() {
+               LabelIconView target = layout.getSelectedTarget();
+               if (target == null) {
+                       return;
+               }
+
+               layout.setCutTarget(target);
+               layout.refresh();
+       }
+
+       private void selectMenuPast() {
+               LabelIconView srcTarget = layout.getCutTarget();
+               if (srcTarget == null) {
+                       return;
+               }
+
+               LabelIconView dstTarget = layout.getSelectedTarget();
+               if (dstTarget == null) {
+                       return;
+               }
+
+               layout.setCutTarget(null);
+
+               long srcId = srcTarget.getNodeId();
+               long dstId = dstTarget.getNodeId();
+               execute(srcId, dstId);
+       }
+
+       private void updateList() {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               top = dao.searchRoot();
+               if (top == null) {
+                       // TODO
+               }
+               updateList(top);
+       }
+
+       private void updateList(Node parent) {
+               viewY = 10;
+
+               scrollView.setVisibility(View.GONE);            
+               layout.removeAllViews();
+               updateList(parent, 0);
+               layout.setMinimumHeight(viewY);
+               scrollView.setVisibility(View.VISIBLE);         
+               layout.refresh();
+
+               scrollView.invalidate();
+       }
+
+       private void updateList(Node node, int depth) {
+               int N = (int) (bmpWidth * 0.6);
+               int M = (int) (bmpWidth * 1.2);
+               int x = N * (depth - indent);
+
+               if (depth - indent >= 0
+                               && !(depth - indent == 0 && node instanceof FileNode)) {
+                       LabelIconView view = new LabelIconView(this);
+                       node.setView(view);
+
+                       Bitmap bmp1 = null;
+                       int id = node.getStatusIconId();
+                       if (id >= 0) {
+                               // DirNode
+                               bmp1 = bitmapFactory.get(node.getStatusIconId());
+                       } else {
+                               // FileNode
+                               x += bmpPaddingLeft;
+                       }
+                       Bitmap bmp2 = bitmapFactory.get(node.getIconId());
+                       createIconImageView(view, bmp1, bmp2, node.getName(), x, viewY);
+                       // LabelIconView s = view.getStatusImageView();
+                       // if (s != null) {
+                       // s.setNodeId(node.getId());
+                       // }
+                       view.setNodeId(node.getId());
+               }
+               viewY += M;
+
+               if (node.getStatus() != Node.Status.OPEN) {
+                       return;
+               }
+               List<Long> idList = node.getChildren();
+               if (idList == null) {
+                       return;
+               }
+
+               List<Node> list = new ArrayList<Node>();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               for (Long id : idList) {
+                       Node n = dao.searchById(id);
+                       if (n == null) {
+                               // TODO
+                               continue;
+                       }
+                       if (n instanceof DirNode) {
+                               DirNode d = (DirNode) n;
+                               if (isNoteBook(d) && !d.isSelected()) {
+                                       continue;
+                               }
+                       }
+                       list.add(n);
+               }
+               Collections.sort(list, nodeComparator);
+               for (Node n : list) {
+                       updateList(n, depth + 1);
+               }
+       }
+
+       private void createIconImageView(LabelIconView v, Bitmap bmp1, Bitmap bmp2,
+                       String text, int x, int y) {
+               v.init(x, y, bmp1, bmp2, text);
+
+               android.view.WindowManager.LayoutParams params = new WindowManager.LayoutParams();
+               params.gravity = Gravity.TOP | Gravity.LEFT;
+               params.height = WindowManager.LayoutParams.WRAP_CONTENT;
+               params.width = WindowManager.LayoutParams.WRAP_CONTENT;
+               params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
+                               | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
+                               | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
+                               | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
+               params.format = PixelFormat.TRANSLUCENT;
+               params.windowAnimations = 0;
+               params.x = x;
+               params.y = y;
+               v.setLayoutParams(params);
+
+               // LabelIconView siv = v.getStatusImageView();
+               // if (siv != null) {
+               // layout.addView(siv, false);
+               // }
+
+               layout.addView(v);
+               v.layout(x, y, x + v.getWidth(), y + v.getHeight());
+       }
+
+       @Override
+       public void sendLockResult(boolean b) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               if (isResult) {
+                       if (dao.isEmpty()) {
+                               finish();
+                               return;
+                       }
+               }
+               isResult = false;
+
+               if (dao.isEmpty()) {
+                       if (isInit) {
+                               Intent intent = new Intent(this,
+                                               (Class<?>) SettingActivity.class);
+                               startActivityForResult(intent, 0);
+
+                               isInit = false;
+                       } else {
+                               finish();
+                               isInit = true;
+                       }
+               }
+
+               if (isInCycle) {
+                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                       lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
+                       if (isInit) {
+                               status = ScreenStatus.Normal;
+
+                               if (lock) {
+                                       layout.setVisibility(View.VISIBLE);
+                                       updateList();
+                               } else {
+                                       layout.removeAllViews();
+                               }
+                               setStatus();
+                               isInit = false;
+                       } else {
+                               setStatus();
+                       }
+               } else {
+                       // TODO
+                       // lock解除
+               }
+       }
+
+       @Override
+       protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+               // TODO sendLockResult()、「lock解除」のため、とりあえずコメント
+               // NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               // if (dao.isEmpty()) {
+               // finish();
+               // }
+               isResult = true;
+               isInit = true;
+       }
+
+       @Override
+       protected void onStart() {
+               super.onStart();
+       }
+
+       @Override
+       protected void onResume() {
+               super.onResume();
+               isInCycle = true;
+
+               LockHandler handler = new LockHandler();
+               handler.lock(this, Constant.LOCK_UPDATE_NOTE);
+               lock = false;
+
+               if (isInit) {
+                       layout.setVisibility(View.INVISIBLE);
+                       setStatus();
+               }
+               else {
+                       // #29421
+                       updateList();
+               }
+               
+               // NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               // if (dao.isEmpty()) {
+               // if (isInit) {
+               // Intent intent = new Intent(this,
+               // (Class<?>) SettingActivity.class);
+               // startActivityForResult(intent, 0);
+               //
+               // isInit = false;
+               // } else {
+               // finish();
+               // isInit = true;
+               // }
+               // }
+               //
+               // LockDao lockDao = (LockDao) LockDao.getInstance();
+               // lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
+               //
+               // if (isInit) {
+               // status = ScreenStatus.Normal;
+               //
+               // if (lock) {
+               // updateList();
+               // } else {
+               // layout.removeAllViews();
+               // }
+               // setStatus();
+               // isInit = false;
+               // } else {
+               // setStatus();
+               // }
+       }
+
+       @Override
+       protected void onPause() {
+               // ロック未取得でも解除する(ゴミ掃除)
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(this, Constant.LOCK_UPDATE_NOTE);
+               lock = false;
+
+               super.onPause();
+               isInCycle = false;
+       }
+
+       private void leftButtonOnClick() {
+               moveButtonOnClick(-1);
+               setStatus();
+       }
+
+       private void rightButtonOnClick() {
+               moveButtonOnClick(1);
+               setStatus();
+       }
+
+       private void moveButtonOnClick(int dx) {
+               int mx = 0;
+
+               if (dx < 0) {
+                       if (indent > 0) {
+                               mx = -1;
+                       }
+               } else {
+                       mx = 1;
+               }
+               if (mx != 0) {
+                       indent += mx;
+                       removeAllNodeView();
+                       updateList();
+               }
+       }
+
+       // private void addButtonOnClick() {
+       // setStatus(ScreenStatus.AddNode);
+       // }
+       //
+       // private void deleteButtonOnClick() {
+       // FolderUtil util = FolderUtil.getInstance();
+       // LabelIconView target = layout.getSelectedTarget();
+       // long id = target.getNodeId();
+       // NodeDao dao = (NodeDao) NodeDao.getInstance();
+       // Node node = dao.searchById(id);
+       // if (node != null) {
+       // util.deleteNode(node);
+       // // TODO 三角マークも消さないといけないのでは
+       // layout.removeView(target);
+       // updateList();
+       // setStatus();
+       // }
+       // }
+
+       private void msgOkButtonOnClick(View v) {
+               FolderUtil util = FolderUtil.getInstance();
+               LabelIconView target = layout.getSelectedTarget();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               if (status == ScreenStatus.AddNode) {
+                       long id = target.getNodeId();
+                       Node parent = dao.searchById(id);
+                       if (parent != null) {
+                               String text = msgEditText.getText().toString();
+                               DirNode node = new DirNode(text, null);
+                               util.addDirNode(parent, node);
+                       }
+                       layout.setCutTarget(null, false);
+               } else if (status == ScreenStatus.DeleteNode) {
+                       long id = target.getNodeId();
+                       Node node = dao.searchById(id);
+                       if (node != null) {
+                               util.deleteNode(node);
+                               layout.removeView(target);
+                       }
+                       layout.setCutTarget(null, false);
+               } else if (status == ScreenStatus.RenameNode) {
+                       long id = target.getNodeId();
+                       Node node = dao.searchById(id);
+                       if (node != null) {
+                               String text = msgEditText.getText().toString();
+
+                               dao.updateName(node, text);
+                       }
+                       layout.setCutTarget(null, false);
+               }
+
+               closeIME(v);
+
+               layout.clearTarget();
+               updateList();
+               setStatus(ScreenStatus.Normal);
+       }
+
+       private void msgCancelOnClick(View v) {
+               closeIME(v);
+
+               setStatus(ScreenStatus.Normal);
+       }
+
+       private void closeIME(View v) {
+               InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+               imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
+       }
+
+       public void execute(long srcId, long dstId) {
+               try {
+                       removeAllNodeView();
+
+                       NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+                       if (srcId < 0) {
+                               // TODO
+                       }
+                       if (dstId < 0) {
+                               // TODO
+                       }
+
+                       Node src = dao.searchById(srcId);
+                       Node dst = null;
+                       if (srcId == dstId) {
+                               dst = src;
+                       } else {
+                               dst = dao.searchById(dstId);
+                       }
+
+                       if (dstId == src.getParent()) {
+                               // 同じ場所に移動
+                               return;
+                       }
+                       if (!isFileNode(src) && !isMovable(srcId, dstId)) {
+                               // 再帰的な移動
+                               return;
+                       }
+
+                       Node sp = dao.searchById(src.getParent());
+                       if (sp == null) {
+                               // TODO
+                       }
+                       Node dp = null;
+                       if (src.getParent() == dst.getParent()) {
+                               dp = sp;
+                       } else {
+                               dp = dao.searchById(dst.getParent());
+                       }
+                       if (dp == null) {
+                               // TODO
+                       }
+
+                       // TODO DBへのアクセス
+                       // sp.remove(src.getId());
+                       SQLiteDatabase db = DatabaseHelper.getInstance()
+                                       .getSQLiteDatabase();
+                       db.beginTransaction();
+                       try {
+                               dao.removeChildrenIdNT(sp, src.getId());
+                               if (dst instanceof DirNode) {
+                                       // dst.add(src.getId());
+                                       dao.updateParentNT(src, dst.getId());
+                                       dao.addChildrenIdNT(dst, src.getId());
+                               } else if (dst instanceof FileNode) {
+                                       // dp.add(src.getId());
+                                       dao.updateParentNT(src, dp.getId());
+                                       dao.addChildrenIdNT(dp, src.getId());
+                               }
+
+                               db.setTransactionSuccessful();
+                       } finally {
+                               db.endTransaction();
+                       }
+               } finally {
+                       updateList();
+               }
+       }
+
+       private boolean isMovable(long srcId, long dstId) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               while (dstId >= 0) {
+                       if (srcId == dstId) {
+                               return false;
+                       }
+                       Node node = dao.searchById(dstId);
+                       if (node == null) {
+                               // TODO エラー
+                               return false;
+                       }
+                       if (!(node instanceof DirNode)) {
+                               return true;
+                       }
+                       dstId = node.getParent();
+               }
+               return true;
+       }
+
+       public void execute(long id) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               Node node = dao.searchById(id);
+               if (node == null) {
+                       // TODO
+               }
+               node.toggleStatus();
+               Status status = node.getStatus();
+
+               dao.updateStatus(node, status);
+
+               // removeAllNodeView();
+               updateList();
+       }
+
+       public void executeView(long id) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               Node node = dao.searchById(id);
+               if (!isFileNode(node)) {
+                       return;
+               }
+               String guid = node.getGuid();
+
+               EvernoteIntentUtil util = EvernoteIntentUtil.getInstance();
+               util.viewNote(this, guid);
+       }
+
+       public void targetSelectedChanged(boolean status) {
+               setStatus();
+       }
+
+       public void removeAllNodeView() {
+               layout.removeAllViews();
+       }
+
+       private void setStatus() {
+               setStatus(status);
+       }
+
+       private void setStatus(ScreenStatus status) {
+               try {
+                       if (this.status != status) {
+                               this.status = status;
+                       }
+
+                       if (!lock) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainUpdateMsg));
+                               msgEditText.setVisibility(View.GONE);
+                               msgButtonLayout.setVisibility(View.GONE);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                               
+                               status = ScreenStatus.Normal;
+                               return;
+                       }
+
+                       if (status == ScreenStatus.Normal) {
+                               msgLayout.setVisibility(View.GONE);
+                               // mainMsgEditText.setText("");
+
+                               boolean leftButtonFlag = true;
+                               boolean rightButtonFlag = true;
+                               // boolean addButtonFlag = true;
+                               // boolean deleteButtonFlag = true;
+
+                               if (indent <= 0) {
+                                       leftButtonFlag = false;
+                               }
+
+                               // LabelIconView target = layout.getSelectedTarget();
+                               // NodeDao dao = (NodeDao) NodeDao.getInstance();
+                               // long id = -1;
+                               // Node node = null;
+                               // if (target != null) {
+                               // id = target.getNodeId();
+                               // node = dao.searchById(id);
+                               // }
+                               // if (target == null || node == null || !(node instanceof
+                               // DirNode))
+                               // {
+                               // addButtonFlag = false;
+                               // }
+                               // if (target == null || (node != null && node instanceof
+                               // RootNode))
+                               // {
+                               // deleteButtonFlag = false;
+                               // }
+                               layout.setElabledTouchEvent(true);
+
+                               leftButton.setEnabled(leftButtonFlag);
+                               rightButton.setEnabled(rightButtonFlag);
+                               // addButton.setEnabled(addButtonFlag);
+                               // deleteButton.setEnabled(deleteButtonFlag);
+                       } else if (status == ScreenStatus.AddNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.VISIBLE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainAddMsg));
+                               msgEditText.setText("");
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       } else if (status == ScreenStatus.DeleteNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.GONE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainDeleteMsg));
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       } else if (status == ScreenStatus.RenameNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.VISIBLE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainRenameMsg));
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       }
+               } catch (Throwable e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+}
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/2e/90e4d7b188f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/2e/90e4d7b188f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..2b278e3
--- /dev/null
@@ -0,0 +1,322 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.RollbackException;
+
+public class FolderUtil {
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               List<Notebook> noteBookList = util.getNoteBookList();
+
+               long id;
+               Node top = nodeDao.searchRoot(db);
+
+               for (Notebook notebook : noteBookList) {
+                       String guid = notebook.getGuid();
+                       String name = notebook.getName();
+
+                       Node oldBook = nodeDao.searchByGuid(db, guid);
+                       if (oldBook == null) {
+                               DirNode dirNode = new DirNode(name, null);
+                               guid = notebook.getGuid();
+                               dirNode.setGuid(guid);
+
+                               id = addDirNodeNT(top, dirNode);
+                       } else {
+                               String oldName = oldBook.getName();
+                               if (!name.equals(oldName)) {
+                                       // 名称が異なる
+                                       nodeDao.updateNameNT(oldBook, name);
+                               }
+                       }
+               }
+
+               // 削除
+               List<Node> list = nodeDao.searchBook(db);
+               for (Node node : list) {
+                       boolean isFound = false;
+                       for (Notebook book : noteBookList) {
+                               String guid = book.getGuid();
+                               if (node.getGuid().equals(guid)) {
+                                       isFound = true;
+                                       break;
+                               }
+                       }
+                       if (!isFound) {
+                               if (CommonUtil.isNull(node.getChildrenString())) {
+                                       // 子が無い場合は削除
+                                       nodeDao.deleteNT(node.getId());
+                               } else {
+                                       // フォルダに変更
+                                       nodeDao.updateGuidNT(node, null);
+                               }
+                       }
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db) throws RollbackException {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) throws RollbackException {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) throws RollbackException {
+               // TODO
+               // FOO
+               throw new RollbackException(EfError.NONE);
+
+//             EvernoteUtil util = EvernoteUtil.getInstance();
+//             if (!util.isLoggedIn()){
+//                     throw new RollbackException(EfError.NO_LOGIN);
+//             }
+//             
+//             DatabaseHelper helper = DatabaseHelper.getInstance();
+//             SQLiteDatabase db = helper.getWritableDatabase();
+//
+//             db.beginTransaction();
+//             try {
+//                     if (isRoot) {
+//                             if (nodeDao.isEmpty()) {
+//                                     Node top = new RootNode("/", null);
+//                                     top.setStatus(Node.Status.OPEN);
+//                                     long id = nodeDao.addNT(top);
+//                                     top.setId(id);
+//                             }
+//                     }
+//
+//                     if (isBook) {
+//                             updateNotebook(db);
+//                     }
+//                     if (isNote) {
+//                             nodeDao.updateNoteFlag(0);
+//                             updateNote(db);
+//                             deleteNode(db);                 
+//                     }
+//                     
+//                     db.setTransactionSuccessful();
+//             } finally {
+//                     db.endTransaction();
+//             }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/2f/b094f1897bf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/2f/b094f1897bf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..d759a24
--- /dev/null
@@ -0,0 +1,83 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+import android.content.Intent;
+
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+       private Context context;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+               if (activity != null) {
+                       context = activity.getApplicationContext();
+               }
+       }
+
+       public void doExecute() {
+               // TODO
+               // 実行中は、画面操作禁止にする
+               try {
+//                     FolderUtil test = FolderUtil.getInstance();
+//                     test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e){
+
+               } catch (Exception e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+//             if (context != null) {
+//                     Intent intent = new Intent(Constant.ACTION_UPDATE);
+//                     context.sendBroadcast(intent);
+//             }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/32/f07a983b89f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/32/f07a983b89f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..8e8eeed
--- /dev/null
@@ -0,0 +1,318 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.RollbackException;
+
+public class FolderUtil {
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               List<Notebook> noteBookList = util.getNoteBookList();
+
+               long id;
+               Node top = nodeDao.searchRoot(db);
+
+               for (Notebook notebook : noteBookList) {
+                       String guid = notebook.getGuid();
+                       String name = notebook.getName();
+
+                       Node oldBook = nodeDao.searchByGuid(db, guid);
+                       if (oldBook == null) {
+                               DirNode dirNode = new DirNode(name, null);
+                               guid = notebook.getGuid();
+                               dirNode.setGuid(guid);
+
+                               id = addDirNodeNT(top, dirNode);
+                       } else {
+                               String oldName = oldBook.getName();
+                               if (!name.equals(oldName)) {
+                                       // 名称が異なる
+                                       nodeDao.updateNameNT(oldBook, name);
+                               }
+                       }
+               }
+
+               // 削除
+               List<Node> list = nodeDao.searchBook(db);
+               for (Node node : list) {
+                       boolean isFound = false;
+                       for (Notebook book : noteBookList) {
+                               String guid = book.getGuid();
+                               if (node.getGuid().equals(guid)) {
+                                       isFound = true;
+                                       break;
+                               }
+                       }
+                       if (!isFound) {
+                               if (CommonUtil.isNull(node.getChildrenString())) {
+                                       // 子が無い場合は削除
+                                       nodeDao.deleteNT(node.getId());
+                               } else {
+                                       // フォルダに変更
+                                       nodeDao.updateGuidNT(node, null);
+                               }
+                       }
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db) throws RollbackException {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) throws RollbackException {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) throws RollbackException {
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               if (!util.isLoggedIn()){
+                       throw new RollbackException(EfError.NO_LOGIN);
+               }
+               
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+
+               db.beginTransaction();
+               try {
+                       if (isRoot) {
+                               if (nodeDao.isEmpty()) {
+                                       Node top = new RootNode("/", null);
+                                       top.setStatus(Node.Status.OPEN);
+                                       long id = nodeDao.addNT(top);
+                                       top.setId(id);
+                               }
+                       }
+
+                       if (isBook) {
+                               updateNotebook(db);
+                       }
+                       if (isNote) {
+                               nodeDao.updateNoteFlag(0);
+                               updateNote(db);
+                               deleteNode(db);                 
+                       }
+                       
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/34/700743a47df9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/34/700743a47df9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..314bff2
--- /dev/null
@@ -0,0 +1,166 @@
+package com.yuji.ef.utility;
+
+import java.lang.ref.WeakReference;
+
+import android.app.Activity;
+import android.app.ProgressDialog;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnKeyListener;
+import android.os.AsyncTask;
+import android.view.KeyEvent;
+
+public class AsyncTaskCommand extends AsyncTask<String, Integer, String> {
+       private WeakReference<Activity> activityRef;
+       private AsyncTaskIF command;
+       private ProgressDialog dialog;
+       private boolean isCancel = false;
+       private boolean isDialog = true;
+       private int status = -1;
+
+       private String title = "";
+       private String buttonTitle = "";
+       private boolean cancelable = true;
+       private Exception exception = null;
+       
+       @SuppressWarnings({ "rawtypes", "unchecked" })
+       public AsyncTaskCommand(Activity activity, AsyncTaskIF command) {
+               this.activityRef = new WeakReference(activity);
+               this.command = command;
+       }
+
+       @Override
+       protected void onPreExecute() {
+               Debug.d(this, "onPreExecute start");
+
+               Activity activity = activityRef.get();
+               if (activity == null) {
+                       return;
+               }
+               if (isDialog) {
+                       dialog = new ProgressDialog(activity);
+                       dialog.setIndeterminate(true);
+                       dialog.setCancelable(cancelable);
+                       dialog.setTitle(title);
+                       if (cancelable) {
+                               dialog.setButton(buttonTitle,
+                                               new DialogInterface.OnClickListener() {
+                                                       public void onClick(DialogInterface dialog,
+                                                                       int which) {
+                                                               dialog.cancel();
+                                                               AsyncTaskCommand.this.cancel(true);
+                                                       }
+                                               });
+                               dialog.setOnKeyListener(new OnKeyListener() {
+                                       public boolean onKey(DialogInterface dialog, int keyCode,
+                                                       KeyEvent event) {
+                                               switch (event.getKeyCode()) {
+                                               case KeyEvent.KEYCODE_SEARCH:
+                                                       return true;
+                                               }
+                                               return false;
+                                       }
+                               });
+                       }
+                       dialog.show();
+               }
+               Debug.d(this, "onPreExecute end");
+       }
+
+       @Override
+       protected String doInBackground(String... arg0) {
+               try {
+                       Debug.d(this, "doInBackground start");
+                       command.doExecute();
+                       status = command.getStatus();
+                       Debug.d(this, "doInBackground end");
+               } catch (RuntimeException e) {
+                       exception = e;
+                       Debug.d(this, null, e);
+                       throw e;
+               } catch (Exception e) {
+                       exception = e;
+                       Debug.d(this, null, e);
+               }
+               return null;
+       }
+
+       @Override
+       protected void onCancelled() {
+               Debug.d(this, "onCancelled start");
+
+               isCancel = true;
+
+               if (command != null) {
+                       command.cancel();
+               }
+               onPostExecute(null);
+               Debug.d(this, "onCancelled end");
+       }
+
+       @Override
+       protected void onPostExecute(String result) {
+               Debug.d(this, "onPostExecute start");
+
+               try {
+                       if (command != null) {
+                               command.done(isCancel);
+                               command = null;
+                       }
+                       if (dialog != null) {
+                               try {
+                                       dialog.dismiss();
+                               } catch (IllegalArgumentException e) {
+                                       ;
+                               }
+                               dialog = null;
+                       }
+                       activityRef = null;
+               } catch (RuntimeException e) {
+                       Debug.d(this, null, e);
+                       throw e;
+               }
+               Debug.d(this, "onPostExecute end");
+       }
+
+       public void stop() {
+               Debug.d(this, "stop start");
+
+               if (command != null) {
+                       isCancel = true;
+                       command.cancel();
+               }
+               // onPostExecute()のdialog.dismiss();でエラーとなるため
+               // 本質的な解決策ではない
+               // dialog = null;
+               if (dialog != null) {
+                       dialog.dismiss();
+                       dialog = null;
+               }
+
+               Debug.d(this, "stop end");
+       }
+
+       public void setDialog(boolean b) {
+               isDialog = b;
+       }
+
+       public int getResultStatus() {
+               return status;
+       }
+
+       public void setTitle(String title) {
+               this.title = title;
+       }
+
+       public void setButtonTitle(String buttonTitle) {
+               this.buttonTitle = buttonTitle;
+       }
+
+       public void setCancelable(boolean cancelable) {
+               this.cancelable = cancelable;
+       }
+       
+       public void getException(){
+               return exception;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/34/c0aa215582f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/34/c0aa215582f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..ca07e3a
--- /dev/null
@@ -0,0 +1,85 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+
+import com.yuji.ef.Initialize;
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.Debug;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+       }
+
+       public void doExecute() throws EfException {
+               try {
+//                     FolderUtil test = FolderUtil.getInstance();
+//                     test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e){
+                       EfError error = e.getError();
+                       // TODO
+                       EfException.msg(Initialize.getContext(), "データの更新に失敗しました(a)");
+                       Debug.d(this, null, e);
+                       throw e;
+               } catch (Exception e) {
+                       // TODO
+                       EfException.msg(Initialize.getContext(), "データの更新に失敗しました(b)");
+                       throw new EfException(EfError.SYSTEM);
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+//             if (context != null) {
+//                     Intent intent = new Intent(Constant.ACTION_UPDATE);
+//                     context.sendBroadcast(intent);
+//             }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/38/10fa5e7f7bf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/38/10fa5e7f7bf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..f2c6205
--- /dev/null
@@ -0,0 +1,83 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+import android.content.Intent;
+
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+       private Context context;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+               if (activity != null) {
+                       context = activity.getApplicationContext();
+               }
+       }
+
+       public void doExecute() {
+               // TODO
+               // 実行中は、画面操作禁止にする
+               try {
+//                     FolderUtil test = FolderUtil.getInstance();
+//                     test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e){
+)
+               } catch (Exception e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+//             if (context != null) {
+//                     Intent intent = new Intent(Constant.ACTION_UPDATE);
+//                     context.sendBroadcast(intent);
+//             }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/39/40edcee173f70011149392f0842c08d6 b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/39/40edcee173f70011149392f0842c08d6
new file mode 100644 (file)
index 0000000..d4353f7
--- /dev/null
@@ -0,0 +1,453 @@
+package com.yuji.ef;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import android.content.Context;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnLongClickListener;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.AnimationUtils;
+import android.widget.FrameLayout;
+
+public class IconFrameLayout extends FrameLayout implements OnLongClickListener {
+       private EverFolderActivity activity = null;
+
+       private LabelIconView target = null;
+       private LabelIconView destTarget = null;
+       private LabelIconView selectedTarget = null;
+       private LabelIconView cutTarget = null;
+       private List<LabelIconView> labelIconViewList = new ArrayList<LabelIconView>();
+
+       private Animation anime;
+       private int currentX;
+       private int currentY;
+       private int offsetX;
+       private int offsetY;
+       private boolean longClickFlg = false;
+       private IconScrollView scrollView;
+       private Context context = this.getContext();
+       private boolean elabledTouchEvent = true;
+
+       public IconFrameLayout(Context context) {
+               super(context);
+       }
+
+       public IconFrameLayout(Context context, AttributeSet attrs) {
+               super(context, attrs);
+       }
+
+       public IconFrameLayout(Context context, AttributeSet attrs, int defStyle) {
+               super(context, attrs, defStyle);
+       }
+
+       public void setActivity(EverFolderActivity activity) {
+               this.activity = activity;
+       }
+
+       @Override
+       protected void onLayout(boolean changed, int left, int top, int right,
+                       int bottom) {
+               super.onLayout(changed, left, top, right, bottom);
+
+               int size = this.getChildCount();
+               for (int i = 0; i < size; i++) {
+                       LabelIconView vv = (LabelIconView) this.getChildAt(i);
+                       int x2 = vv.getInitX();
+                       int y2 = vv.getInitY();
+                       // vv.init(x2, y2);
+                       vv.layout(x2, y2, x2 + vv.getWidth(), y2 + vv.getHeight());
+               }
+       }
+
+       public LabelIconView getSelectedTarget() {
+               return selectedTarget;
+       }
+
+       public void addView(LabelIconView child) {
+               addView(child, true);
+       }
+
+       public void addView(LabelIconView child, boolean isAddView) {
+               if (isAddView) {
+                       super.addView(child);
+               }
+               labelIconViewList.add(child);
+       }
+
+       public void removeAllViews() {
+               super.removeAllViews();
+               labelIconViewList.clear();
+       }
+
+       public void moveTop(LabelIconView child) {
+               this.removeView(child);
+               this.addView(child);
+       }
+
+       private LabelIconView getView(int x, int y, LabelIconView v,
+                       List<LabelIconView> list, boolean flag) {
+               Rect rect = new Rect();
+
+               if (v != null) {
+                       if (flag) {
+                               v.getHitRect(rect);
+                               if (rect.contains(x, y)) {
+                                       return v;
+                               }
+                       }
+               }
+               for (LabelIconView view : list) {
+                       if (view != v) {
+                               view.getHitRect(rect);
+                               if (rect.contains(x, y)) {
+                                       return view;
+                               }
+                       }
+               }
+               return null;
+       }
+
+       public void setScrollView(final IconScrollView scrollView) {
+               this.scrollView = scrollView;
+               this.setOnLongClickListener(this);
+               // this.setLongClickable(true);
+
+               anime = AnimationUtils.loadAnimation(context, R.anim.sample);
+               anime.setAnimationListener(new AnimationListener() {
+                       public void onAnimationStart(Animation animation) {
+                       }
+
+                       public void onAnimationRepeat(Animation animation) {
+                       }
+
+                       public void onAnimationEnd(Animation animation) {
+                               // if (isBt2Click) {
+                               // bt2.performClick();
+                               // isBt2Click = false;
+                               // }
+                               clearTarget();
+                               target = null;
+                               destTarget = null;
+
+                               scrollView.setScrollable(true);
+                               scrollView.requestDisallowInterceptTouchEvent(false);
+                               scrollView.invalidate();
+                       }
+               });
+       }
+
+       public void refresh() {
+               if (selectedTarget != null) {
+                       boolean flag = false;
+                       long id = selectedTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       selectedTarget = view;
+                                       target = view;
+                                       setSelected(selectedTarget);
+                                       flag = true;
+                               }
+                       }
+                       if (!flag) {
+                               // 表示されなかった(CLOSEなど)
+                               selectedTarget = null;
+                               target = null;
+                       }
+               }
+               if (cutTarget != null) {
+                       boolean flag = false;
+                       long id = cutTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       cutTarget = view;
+                                       if (selectedTarget != cutTarget) {
+                                               clearColorFilter(cutTarget);
+                                       }
+                                       flag = true;
+                               }
+                       }
+                       if (!flag) {
+                               // 表示されなかった(CLOSEなど)
+                               cutTarget = null;
+                       }
+               }
+       }
+
+       public void clearTarget() {
+               if (selectedTarget != null) {
+                       clearColorFilter(selectedTarget);
+                       selectedTarget = null;
+               }
+               target = null;
+       }
+
+       public LabelIconView getCutTarget() {
+               return cutTarget;
+       }
+
+       public void setCutTarget(LabelIconView cutTarget) {
+               setCutTarget(cutTarget, true);
+       }
+
+       public void setCutTarget(LabelIconView cutTarget, boolean isUnselected) {
+               if (this.cutTarget != null){
+                       setAlpha(this.cutTarget);
+               }
+               this.cutTarget = cutTarget;
+               if (isUnselected) {
+                       selectedTarget = null;
+                       target = null;
+               }
+       }
+
+       private void setSelected(LabelIconView t) {
+               t.setAlpha(255);
+               t.setColorFilter(0x88ff0000, Mode.LIGHTEN);
+       }
+
+       private void setAlpha(LabelIconView v) {
+               v.setAlpha(255);
+       }
+
+       private void setGrayAlpha(LabelIconView v) {
+               v.setAlpha(128);
+       }
+
+       private void clearColorFilter(LabelIconView v) {
+               v.clearColorFilter();
+               if (v == cutTarget) {
+                       setGrayAlpha(v);
+               }
+       }
+
+       @Override
+       public boolean onTouchEvent(MotionEvent event) {
+               try {
+                       if (!isElabledTouchEvent()) {
+                               return super.onTouchEvent(event);
+                       }
+
+                       int x = (int) event.getRawX();
+                       int y = (int) event.getRawY();
+
+                       int dx = scrollView.getLeft();
+                       int dy = scrollView.getTop();
+
+                       x -= dx;
+                       y -= dy;
+
+                       int sx = x + scrollView.getScrollX();
+                       int sy = y + scrollView.getScrollY();
+                       LabelIconView v = getView(sx, sy, target, labelIconViewList, true);
+                       LabelIconView obj = (LabelIconView) v;
+
+                       // int size = labelIconViewList.size();
+                       if (target == null) {
+                               target = obj;
+                       }
+                       if (target == null) {
+                               return super.onTouchEvent(event);
+                       }
+
+                       // コメントにすると何が起きるか?
+                       // scrollView.requestDisallowInterceptTouchEvent(true);
+
+                       if (event.getAction() == MotionEvent.ACTION_MOVE) {
+                               if (!longClickFlg) {
+                                       return super.onTouchEvent(event);
+                               }
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                               }
+                               obj = target;
+
+                               int sh = scrollView.getHeight();
+                               int lh = this.getHeight();
+                               int maxY = lh - sh;
+                               int py = scrollView.getScrollY();
+                               int sdy = 10;
+                               int N = 100;
+                               if (y < N) {
+                                       if (py > 0) {
+                                               if (py < sdy) {
+                                                       sdy = py;
+                                               }
+                                               scrollView.smoothScrollTo(0, py - sdy);
+                                               currentY -= sdy;
+                                       }
+                               } else if (sh - y < N) {
+                                       if (py < maxY) {
+                                               if (maxY - py < sdy) {
+                                                       sdy = maxY - py;
+                                               }
+                                               scrollView.smoothScrollTo(0, py + sdy);
+                                               currentY += sdy;
+                                       }
+                               }
+
+                               int diffX = offsetX - x;
+                               int diffY = offsetY - y;
+
+                               currentX -= diffX;
+                               currentY -= diffY;
+                               obj.layout(currentX, currentY, currentX + obj.getWidth(),
+                                               currentY + obj.getHeight());
+
+                               offsetX = x;
+                               offsetY = y;
+
+                               v = getView(sx, sy, target, labelIconViewList, false);
+                               if (destTarget == null) {
+                                       if (v != null) {
+                                               destTarget = v;
+                                               setGrayAlpha(destTarget);
+                                       }
+                               } else {
+                                       if (v != destTarget) {
+                                               setAlpha(destTarget);
+                                               destTarget = v;
+                                               if (destTarget != null) {
+                                                       setGrayAlpha(destTarget);
+                                               }
+                                       }
+                               }
+                       } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
+                               // if (obj == target){
+                               if (obj != null) {
+                                       if (obj != target) {
+                                               clearColorFilter(target);
+                                               target = obj;
+                                       }
+                                       // if (target instanceof StatusIconView){
+                                       if (target.getSelectedView(sx - target.getLeft(), sy
+                                                       - target.getTop()) instanceof StatusIconView) {
+                                               // StatusIconView siv = (StatusIconView) target;
+                                               // LabelIconView rv = siv.getRoot();
+                                               // long id = rv.getNodeId();
+                                               long id = target.getNodeId();
+                                               target = null;
+
+                                               activity.execute(id);
+                                               return super.onTouchEvent(event);
+                                               // return true;
+                                       }
+
+                                       if (selectedTarget != null && selectedTarget == target) {
+                                               long id = selectedTarget.getNodeId();
+
+                                               clearColorFilter(target);
+                                               target = null;
+                                               selectedTarget = target;
+                                               activity.targetSelectedChanged(true);
+
+                                               activity.executeView(id);
+
+                                               return super.onTouchEvent(event);
+                                       }
+
+                                       // ここに移動
+                                       scrollView.requestDisallowInterceptTouchEvent(true);
+
+                                       offsetX = x;
+                                       offsetY = y;
+                                       // TODO
+                                       currentX = obj.getLeft();
+                                       currentY = obj.getTop();
+
+                                       setSelected(target);
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(true);
+                                       
+                                       // コメントにしたが、デグレードするかも
+                                       // scrollView.setScrollable(false);
+                               } else {
+                                       clearColorFilter(target);
+                                       target = null;
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(false);
+                               }
+                               // return false;
+                       } else if (event.getAction() == MotionEvent.ACTION_UP) {
+                               if (!longClickFlg) {
+                                       return super.onTouchEvent(event);
+                               }
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                                       // return true;
+                               }
+                               obj = target;
+
+                               // obj.setVisibility(View.GONE);
+                               if (destTarget == null || destTarget instanceof StatusIconView) {
+                                       obj.setAnimation(anime);
+                                       obj.startAnimation(anime);
+                                       // layout.removeView(obj);
+
+                                       int srcX = target.getInitX();
+                                       int srcY = target.getInitY();
+                                       target.layout(srcX, srcY, srcX + target.getWidth(), srcY
+                                                       + target.getHeight());
+                                       setAlpha(target);
+                               } else {
+                                       long src = target.getNodeId();
+                                       long dst = destTarget.getNodeId();
+                                       activity.execute(src, dst);
+
+                                       // TODO
+                                       target = null;
+                                       destTarget = null;
+
+                                       // T29171
+                                       clearTarget();
+
+                                       scrollView.setScrollable(true);
+                                       scrollView.requestDisallowInterceptTouchEvent(false);
+                                       scrollView.invalidate();
+                               }
+
+                               longClickFlg = false;
+                       }
+
+                       return super.onTouchEvent(event);
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       return false;
+               }
+       }
+
+       @Override
+       public boolean onLongClick(View view) {
+               if (!isElabledTouchEvent()) {
+                       return true;
+               }
+               if (target == null) {
+                       return false;
+               }
+               if (target instanceof StatusIconView) {
+                       return false;
+               }
+
+               LabelIconView v = (LabelIconView) target;
+               setGrayAlpha(v);
+               v.clearColorFilter();
+
+               moveTop(target);
+
+               longClickFlg = true;
+               return true;
+       }
+
+       public boolean isElabledTouchEvent() {
+               return elabledTouchEvent;
+       }
+
+       public void setElabledTouchEvent(boolean elabledTouchEvent) {
+               this.elabledTouchEvent = elabledTouchEvent;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/3d/c06c455e7af9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/3d/c06c455e7af9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..394a779
--- /dev/null
@@ -0,0 +1,320 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+
+public class FolderUtil {
+       public class Error extends com.yuji.ef.exception.Error {
+               NOT_LOGIN,
+               NOT_FOUND,
+       }
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               List<Notebook> noteBookList = util.getNoteBookList();
+
+               long id;
+               Node top = nodeDao.searchRoot(db);
+
+               for (Notebook notebook : noteBookList) {
+                       String guid = notebook.getGuid();
+                       String name = notebook.getName();
+
+                       Node oldBook = nodeDao.searchByGuid(db, guid);
+                       if (oldBook == null) {
+                               DirNode dirNode = new DirNode(name, null);
+                               guid = notebook.getGuid();
+                               dirNode.setGuid(guid);
+
+                               id = addDirNodeNT(top, dirNode);
+                       } else {
+                               String oldName = oldBook.getName();
+                               if (!name.equals(oldName)) {
+                                       // 名称が異なる
+                                       nodeDao.updateNameNT(oldBook, name);
+                               }
+                       }
+               }
+
+               // 削除
+               List<Node> list = nodeDao.searchBook(db);
+               for (Node node : list) {
+                       boolean isFound = false;
+                       for (Notebook book : noteBookList) {
+                               String guid = book.getGuid();
+                               if (node.getGuid().equals(guid)) {
+                                       isFound = true;
+                                       break;
+                               }
+                       }
+                       if (!isFound) {
+                               if (CommonUtil.isNull(node.getChildrenString())) {
+                                       // 子が無い場合は削除
+                                       nodeDao.deleteNT(node.getId());
+                               } else {
+                                       // フォルダに変更
+                                       nodeDao.updateGuidNT(node, null);
+                               }
+                       }
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               // TODO
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               // TODO
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       // TODO
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       // TODO
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       // TODO
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) {
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               if (!util.isLoggedIn()){
+                       return;
+               }
+               
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+
+               db.beginTransaction();
+               try {
+                       if (isRoot) {
+                               if (nodeDao.isEmpty()) {
+                                       Node top = new RootNode("/", null);
+                                       top.setStatus(Node.Status.OPEN);
+                                       long id = nodeDao.addNT(top);
+                                       top.setId(id);
+                               }
+                       }
+
+                       if (isBook) {
+                               updateNotebook(db);
+                       }
+                       if (isNote) {
+                               nodeDao.updateNoteFlag(0);
+                               updateNote(db);
+                               deleteNode(db);                 
+                       }
+                       
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/42/b0eb2b8720f800111341a60c8ca6b985 b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/42/b0eb2b8720f800111341a60c8ca6b985
new file mode 100644 (file)
index 0000000..74f1a81
--- /dev/null
@@ -0,0 +1,454 @@
+package com.yuji.ef;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import android.content.Context;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnLongClickListener;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.AnimationUtils;
+import android.widget.FrameLayout;
+
+public class IconFrameLayout extends FrameLayout implements OnLongClickListener {
+       private EverFolderActivity activity = null;
+
+       private LabelIconView target = null;
+       private LabelIconView destTarget = null;
+       private LabelIconView selectedTarget = null;
+       private LabelIconView cutTarget = null;
+       private List<LabelIconView> labelIconViewList = new ArrayList<LabelIconView>();
+
+       private Animation anime;
+       private int currentX;
+       private int currentY;
+       private int offsetX;
+       private int offsetY;
+       private boolean longClickFlg = false;
+       private IconScrollView scrollView;
+       private Context context = this.getContext();
+       private boolean elabledTouchEvent = true;
+
+       public IconFrameLayout(Context context) {
+               super(context);
+       }
+
+       public IconFrameLayout(Context context, AttributeSet attrs) {
+               super(context, attrs);
+       }
+
+       public IconFrameLayout(Context context, AttributeSet attrs, int defStyle) {
+               super(context, attrs, defStyle);
+       }
+
+       public void setActivity(EverFolderActivity activity) {
+               this.activity = activity;
+       }
+
+       @Override
+       protected void onLayout(boolean changed, int left, int top, int right,
+                       int bottom) {
+               super.onLayout(changed, left, top, right, bottom);
+
+               int size = this.getChildCount();
+               for (int i = 0; i < size; i++) {
+                       LabelIconView vv = (LabelIconView) this.getChildAt(i);
+                       int x2 = vv.getInitX();
+                       int y2 = vv.getInitY();
+                       // vv.init(x2, y2);
+                       vv.layout(x2, y2, x2 + vv.getWidth(), y2 + vv.getHeight());
+               }
+       }
+
+       public LabelIconView getSelectedTarget() {
+               return selectedTarget;
+       }
+
+       public void addView(LabelIconView child) {
+               addView(child, true);
+       }
+
+       public void addView(LabelIconView child, boolean isAddView) {
+               if (isAddView) {
+                       super.addView(child);
+               }
+               labelIconViewList.add(child);
+       }
+
+       public void removeAllViews() {
+               super.removeAllViews();
+               labelIconViewList.clear();
+       }
+
+       public void moveTop(LabelIconView child) {
+               this.removeView(child);
+               this.addView(child);
+       }
+
+       private LabelIconView getView(int x, int y, LabelIconView v,
+                       List<LabelIconView> list, boolean flag) {
+               Rect rect = new Rect();
+
+               if (v != null) {
+                       if (flag) {
+                               v.getHitRect(rect);
+                               if (rect.contains(x, y)) {
+                                       return v;
+                               }
+                       }
+               }
+               for (LabelIconView view : list) {
+                       if (view != v) {
+                               view.getHitRect(rect);
+                               if (rect.contains(x, y)) {
+                                       return view;
+                               }
+                       }
+               }
+               return null;
+       }
+
+       public void setScrollView(final IconScrollView scrollView) {
+               this.scrollView = scrollView;
+               this.setOnLongClickListener(this);
+               // this.setLongClickable(true);
+
+               anime = AnimationUtils.loadAnimation(context, R.anim.sample);
+               anime.setAnimationListener(new AnimationListener() {
+                       public void onAnimationStart(Animation animation) {
+                       }
+
+                       public void onAnimationRepeat(Animation animation) {
+                       }
+
+                       public void onAnimationEnd(Animation animation) {
+                               // if (isBt2Click) {
+                               // bt2.performClick();
+                               // isBt2Click = false;
+                               // }
+                               clearTarget();
+                               target = null;
+                               destTarget = null;
+
+                               scrollView.setScrollable(true);
+                               scrollView.requestDisallowInterceptTouchEvent(false);
+                               scrollView.invalidate();
+                       }
+               });
+       }
+
+       public void refresh() {
+               if (selectedTarget != null) {
+                       boolean flag = false;
+                       long id = selectedTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       selectedTarget = view;
+                                       target = view;
+                                       setSelected(selectedTarget);
+                                       flag = true;
+                               }
+                       }
+                       if (!flag) {
+                               // 表示されなかった(CLOSEなど)
+                               selectedTarget = null;
+                               target = null;
+                       }
+               }
+               if (cutTarget != null) {
+                       boolean flag = false;
+                       long id = cutTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       cutTarget = view;
+                                       if (selectedTarget != cutTarget) {
+                                               clearColorFilter(cutTarget);
+                                       }
+                                       flag = true;
+                               }
+                       }
+                       if (!flag) {
+                               // 表示されなかった(CLOSEなど)
+                               cutTarget = null;
+                       }
+               }
+       }
+
+       public void clearTarget() {
+               if (selectedTarget != null) {
+                       clearColorFilter(selectedTarget);
+                       selectedTarget = null;
+               }
+               target = null;
+       }
+
+       public LabelIconView getCutTarget() {
+               return cutTarget;
+       }
+
+       public void setCutTarget(LabelIconView cutTarget) {
+               setCutTarget(cutTarget, true);
+       }
+
+       public void setCutTarget(LabelIconView cutTarget, boolean isUnselected) {
+               if (this.cutTarget != null){
+                       setAlpha(this.cutTarget);
+               }
+               this.cutTarget = cutTarget;
+               if (isUnselected) {
+                       selectedTarget = null;
+                       target = null;
+               }
+       }
+
+       private void setSelected(LabelIconView t) {
+               t.setAlpha(255);
+               t.setColorFilter(0x88ff0000, Mode.LIGHTEN);
+       }
+
+       private void setAlpha(LabelIconView v) {
+               v.setAlpha(255);
+       }
+
+       private void setGrayAlpha(LabelIconView v) {
+               v.setAlpha(128);
+       }
+
+       private void clearColorFilter(LabelIconView v) {
+               v.clearColorFilter();
+               if (v == cutTarget) {
+                       setGrayAlpha(v);
+               }
+       }
+
+       @Override
+       public boolean onTouchEvent(MotionEvent event) {
+               try {
+                       if (!isElabledTouchEvent()) {
+                               return super.onTouchEvent(event);
+                       }
+
+                       int x = (int) event.getRawX();
+                       int y = (int) event.getRawY();
+
+                       int dx = scrollView.getLeft();
+                       int dy = scrollView.getTop();
+
+                       x -= dx;
+                       y -= dy;
+
+                       int sx = x + scrollView.getScrollX();
+                       int sy = y + scrollView.getScrollY();
+                       LabelIconView v = getView(sx, sy, target, labelIconViewList, true);
+                       LabelIconView obj = (LabelIconView) v;
+
+                       // int size = labelIconViewList.size();
+                       if (target == null) {
+                               target = obj;
+                       }
+                       if (target == null) {
+                               return super.onTouchEvent(event);
+                       }
+
+                       // コメントにすると何が起きるか?
+                       // scrollView.requestDisallowInterceptTouchEvent(true);
+
+                       if (event.getAction() == MotionEvent.ACTION_MOVE) {
+                               if (!longClickFlg) {
+                                       return super.onTouchEvent(event);
+                               }
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                               }
+                               obj = target;
+
+                               int sh = scrollView.getHeight();
+                               int lh = this.getHeight();
+                               int maxY = lh - sh;
+                               int py = scrollView.getScrollY();
+                               int sdy = 10;
+                               int N = 100;
+                               if (y < N) {
+                                       if (py > 0) {
+                                               if (py < sdy) {
+                                                       sdy = py;
+                                               }
+                                               scrollView.smoothScrollTo(0, py - sdy);
+                                               currentY -= sdy;
+                                       }
+                               } else if (sh - y < N) {
+                                       if (py < maxY) {
+                                               if (maxY - py < sdy) {
+                                                       sdy = maxY - py;
+                                               }
+                                               scrollView.smoothScrollTo(0, py + sdy);
+                                               currentY += sdy;
+                                       }
+                               }
+
+                               int diffX = offsetX - x;
+                               int diffY = offsetY - y;
+
+                               currentX -= diffX;
+                               currentY -= diffY;
+                               obj.layout(currentX, currentY, currentX + obj.getWidth(),
+                                               currentY + obj.getHeight());
+
+                               offsetX = x;
+                               offsetY = y;
+
+                               v = getView(sx, sy, target, labelIconViewList, false);
+                               if (destTarget == null) {
+                                       if (v != null) {
+                                               destTarget = v;
+                                               setGrayAlpha(destTarget);
+                                       }
+                               } else {
+                                       if (v != destTarget) {
+                                               setAlpha(destTarget);
+                                               destTarget = v;
+                                               if (destTarget != null) {
+                                                       setGrayAlpha(destTarget);
+                                               }
+                                       }
+                               }
+                       } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
+                               // if (obj == target){
+                               if (obj != null) {
+                                       if (obj != target) {
+                                               clearColorFilter(target);
+                                               target = obj;
+                                       }
+                                       // if (target instanceof StatusIconView){
+                                       if (target.getSelectedView(sx - target.getLeft(), sy
+                                                       - target.getTop()) instanceof StatusIconView) {
+                                               // StatusIconView siv = (StatusIconView) target;
+                                               // LabelIconView rv = siv.getRoot();
+                                               // long id = rv.getNodeId();
+                                               long id = target.getNodeId();
+                                               target = null;
+
+                                               activity.execute(id);
+                                               return super.onTouchEvent(event);
+                                               // return true;
+                                       }
+
+                                       if (selectedTarget != null && selectedTarget == target) {
+                                               long id = selectedTarget.getNodeId();
+
+                                               clearColorFilter(target);
+                                               target = null;
+                                               selectedTarget = target;
+                                               activity.targetSelectedChanged(true);
+
+                                               activity.executeView(id);
+
+                                               return super.onTouchEvent(event);
+                                       }
+
+                                       // ここに移動
+                                       scrollView.requestDisallowInterceptTouchEvent(true);
+
+                                       offsetX = x;
+                                       offsetY = y;
+                                       // TODO
+                                       currentX = obj.getLeft();
+                                       currentY = obj.getTop();
+
+                                       setSelected(target);
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(true);
+                                       
+                                       // コメントにしたが、デグレードするかも
+                                       // scrollView.setScrollable(false);
+                               } else {
+                                       clearColorFilter(target);
+                                       target = null;
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(false);
+                               }
+                               // return false;
+                       } else if (event.getAction() == MotionEvent.ACTION_UP) {
+                               if (!longClickFlg) {
+                                       return super.onTouchEvent(event);
+                               }
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                                       // return true;
+                               }
+                               obj = target;
+
+                               // obj.setVisibility(View.GONE);
+                               if (destTarget == null || destTarget instanceof StatusIconView) {
+                                       obj.setAnimation(anime);
+                                       obj.startAnimation(anime);
+                                       // layout.removeView(obj);
+
+                                       int srcX = target.getInitX();
+                                       int srcY = target.getInitY();
+                                       target.layout(srcX, srcY, srcX + target.getWidth(), srcY
+                                                       + target.getHeight());
+                                       setAlpha(target);
+
+                               } else {
+                                       long src = target.getNodeId();
+                                       long dst = destTarget.getNodeId();
+                                       activity.execute(src, dst);
+
+                                       // TODO
+                                       target = null;
+                                       destTarget = null;
+
+                                       // T29171
+                                       clearTarget();
+
+                                       scrollView.setScrollable(true);
+                                       scrollView.requestDisallowInterceptTouchEvent(false);
+                                       scrollView.invalidate();
+                               }
+
+                               longClickFlg = false;
+                       }
+
+                       return super.onTouchEvent(event);
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       return false;
+               }
+       }
+
+       @Override
+       public boolean onLongClick(View view) {
+               if (!isElabledTouchEvent()) {
+                       return true;
+               }
+               if (target == null) {
+                       return false;
+               }
+               if (target instanceof StatusIconView) {
+                       return false;
+               }
+
+               LabelIconView v = (LabelIconView) target;
+               setGrayAlpha(v);
+               v.clearColorFilter();
+
+               moveTop(target);
+
+               longClickFlg = true;
+               return true;
+       }
+
+       public boolean isElabledTouchEvent() {
+               return elabledTouchEvent;
+       }
+
+       public void setElabledTouchEvent(boolean elabledTouchEvent) {
+               this.elabledTouchEvent = elabledTouchEvent;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/44/a04ffb207bf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/44/a04ffb207bf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..18cb60f
--- /dev/null
@@ -0,0 +1,10 @@
+package com.yuji.ef.exception;
+
+public enum Error {
+       NONE,
+       
+       NOT_FOUND,
+       NO_LOGIN,       
+       
+       SYSTEM,
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/45/c0e150ec91f60011156ab34f9ddbff8b b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/45/c0e150ec91f60011156ab34f9ddbff8b
new file mode 100644 (file)
index 0000000..3cf2a5c
--- /dev/null
@@ -0,0 +1,454 @@
+package com.yuji.ef;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import android.content.Context;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnLongClickListener;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.AnimationUtils;
+import android.widget.FrameLayout;
+
+public class IconFrameLayout extends FrameLayout implements OnLongClickListener {
+       private EverFolderActivity activity = null;
+
+       private LabelIconView target = null;
+       private LabelIconView destTarget = null;
+       private LabelIconView selectedTarget = null;
+       private LabelIconView cutTarget = null;
+       private List<LabelIconView> labelIconViewList = new ArrayList<LabelIconView>();
+
+       private Animation anime;
+       private int currentX;
+       private int currentY;
+       private int offsetX;
+       private int offsetY;
+       private boolean longClickFlg = false;
+       private IconScrollView scrollView;
+       private Context context = this.getContext();
+       private boolean elabledTouchEvent = true;
+
+       public IconFrameLayout(Context context) {
+               super(context);
+       }
+
+       public IconFrameLayout(Context context, AttributeSet attrs) {
+               super(context, attrs);
+       }
+
+       public IconFrameLayout(Context context, AttributeSet attrs, int defStyle) {
+               super(context, attrs, defStyle);
+       }
+
+       public void setActivity(EverFolderActivity activity) {
+               this.activity = activity;
+       }
+
+       @Override
+       protected void onLayout(boolean changed, int left, int top, int right,
+                       int bottom) {
+               super.onLayout(changed, left, top, right, bottom);
+
+               int size = this.getChildCount();
+               for (int i = 0; i < size; i++) {
+                       LabelIconView vv = (LabelIconView) this.getChildAt(i);
+                       int x2 = vv.getInitX();
+                       int y2 = vv.getInitY();
+                       // vv.init(x2, y2);
+                       vv.layout(x2, y2, x2 + vv.getWidth(), y2 + vv.getHeight());
+               }
+       }
+
+       public LabelIconView getSelectedTarget() {
+               return selectedTarget;
+       }
+
+       public void addView(LabelIconView child) {
+               addView(child, true);
+       }
+
+       public void addView(LabelIconView child, boolean isAddView) {
+               if (isAddView) {
+                       super.addView(child);
+               }
+               labelIconViewList.add(child);
+       }
+
+       public void removeAllViews() {
+               super.removeAllViews();
+               labelIconViewList.clear();
+       }
+
+       public void moveTop(LabelIconView child) {
+               this.removeView(child);
+               this.addView(child);
+       }
+
+       private LabelIconView getView(int x, int y, LabelIconView v,
+                       List<LabelIconView> list, boolean flag) {
+               Rect rect = new Rect();
+
+               if (v != null) {
+                       if (flag) {
+                               v.getHitRect(rect);
+                               if (rect.contains(x, y)) {
+                                       return v;
+                               }
+                       }
+               }
+               for (LabelIconView view : list) {
+                       if (view != v) {
+                               view.getHitRect(rect);
+                               if (rect.contains(x, y)) {
+                                       return view;
+                               }
+                       }
+               }
+               return null;
+       }
+
+       public void setScrollView(final IconScrollView scrollView) {
+               this.scrollView = scrollView;
+               this.setOnLongClickListener(this);
+               // this.setLongClickable(true);
+
+               anime = AnimationUtils.loadAnimation(context, R.anim.sample);
+               anime.setAnimationListener(new AnimationListener() {
+                       public void onAnimationStart(Animation animation) {
+                       }
+
+                       public void onAnimationRepeat(Animation animation) {
+                       }
+
+                       public void onAnimationEnd(Animation animation) {
+                               // if (isBt2Click) {
+                               // bt2.performClick();
+                               // isBt2Click = false;
+                               // }
+                               clearTarget();
+                               target = null;
+                               destTarget = null;
+
+                               scrollView.setScrollable(true);
+                               scrollView.requestDisallowInterceptTouchEvent(false);
+                               scrollView.invalidate();
+                       }
+               });
+       }
+
+       public void refresh() {
+               if (selectedTarget != null) {
+                       boolean flag = false;
+                       long id = selectedTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       selectedTarget = view;
+                                       target = view;
+                                       setSelected(selectedTarget);
+                                       flag = true;
+                               }
+                       }
+                       if (!flag) {
+                               // 表示されなかった(CLOSEなど)
+                               selectedTarget = null;
+                               target = null;
+                       }
+               }
+               if (cutTarget != null) {
+                       boolean flag = false;
+                       long id = cutTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       cutTarget = view;
+                                       if (selectedTarget != cutTarget) {
+                                               clearColorFilter(cutTarget);
+                                       }
+                                       flag = true;
+                               }
+                       }
+                       if (!flag) {
+                               // 表示されなかった(CLOSEなど)
+                               cutTarget = null;
+                       }
+               }
+       }
+
+       public void clearTarget() {
+               if (selectedTarget != null) {
+                       clearColorFilter(selectedTarget);
+                       selectedTarget = null;
+               }
+               target = null;
+       }
+
+       public LabelIconView getCutTarget() {
+               return cutTarget;
+       }
+
+       public void setCutTarget(LabelIconView cutTarget) {
+               setCutTarget(cutTarget, true);
+       }
+
+       public void setCutTarget(LabelIconView cutTarget, boolean isUnselected) {
+               if (this.cutTarget != null){
+                       setAlpha(this.cutTarget);
+               }
+               this.cutTarget = cutTarget;
+               if (isUnselected) {
+                       selectedTarget = null;
+                       target = null;
+               }
+               target = null;
+       }
+
+       private void setSelected(LabelIconView t) {
+               t.setAlpha(255);
+               t.setColorFilter(0x88ff0000, Mode.LIGHTEN);
+       }
+
+       private void setAlpha(LabelIconView v) {
+               v.setAlpha(255);
+       }
+
+       private void setGrayAlpha(LabelIconView v) {
+               v.setAlpha(128);
+       }
+
+       private void clearColorFilter(LabelIconView v) {
+               v.clearColorFilter();
+               if (v == cutTarget) {
+                       setGrayAlpha(v);
+               }
+       }
+
+       @Override
+       public boolean onTouchEvent(MotionEvent event) {
+               try {
+                       if (!isElabledTouchEvent()) {
+                               return super.onTouchEvent(event);
+                       }
+
+                       int x = (int) event.getRawX();
+                       int y = (int) event.getRawY();
+
+                       int dx = scrollView.getLeft();
+                       int dy = scrollView.getTop();
+
+                       x -= dx;
+                       y -= dy;
+
+                       int sx = x + scrollView.getScrollX();
+                       int sy = y + scrollView.getScrollY();
+                       LabelIconView v = getView(sx, sy, target, labelIconViewList, true);
+                       LabelIconView obj = (LabelIconView) v;
+
+                       // int size = labelIconViewList.size();
+                       if (target == null) {
+                               target = obj;
+                       }
+                       if (target == null) {
+                               return super.onTouchEvent(event);
+                       }
+
+                       // コメントにすると何が起きるか?
+                       // scrollView.requestDisallowInterceptTouchEvent(true);
+
+                       if (event.getAction() == MotionEvent.ACTION_MOVE) {
+                               if (!longClickFlg) {
+                                       return super.onTouchEvent(event);
+                               }
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                               }
+                               obj = target;
+
+                               int sh = scrollView.getHeight();
+                               int lh = this.getHeight();
+                               int maxY = lh - sh;
+                               int py = scrollView.getScrollY();
+                               int sdy = 10;
+                               int N = 100;
+                               if (y < N) {
+                                       if (py > 0) {
+                                               if (py < sdy) {
+                                                       sdy = py;
+                                               }
+                                               scrollView.smoothScrollTo(0, py - sdy);
+                                               currentY -= sdy;
+                                       }
+                               } else if (sh - y < N) {
+                                       if (py < maxY) {
+                                               if (maxY - py < sdy) {
+                                                       sdy = maxY - py;
+                                               }
+                                               scrollView.smoothScrollTo(0, py + sdy);
+                                               currentY += sdy;
+                                       }
+                               }
+
+                               int diffX = offsetX - x;
+                               int diffY = offsetY - y;
+
+                               currentX -= diffX;
+                               currentY -= diffY;
+                               obj.layout(currentX, currentY, currentX + obj.getWidth(),
+                                               currentY + obj.getHeight());
+
+                               offsetX = x;
+                               offsetY = y;
+
+                               v = getView(sx, sy, target, labelIconViewList, false);
+                               if (destTarget == null) {
+                                       if (v != null) {
+                                               destTarget = v;
+                                               setGrayAlpha(destTarget);
+                                       }
+                               } else {
+                                       if (v != destTarget) {
+                                               setAlpha(destTarget);
+                                               destTarget = v;
+                                               if (destTarget != null) {
+                                                       setGrayAlpha(destTarget);
+                                               }
+                                       }
+                               }
+                       } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
+                               // if (obj == target){
+                               if (obj != null) {
+                                       if (obj != target) {
+                                               clearColorFilter(target);
+                                               target = obj;
+                                       }
+                                       // if (target instanceof StatusIconView){
+                                       if (target.getSelectedView(sx - target.getLeft(), sy
+                                                       - target.getTop()) instanceof StatusIconView) {
+                                               // StatusIconView siv = (StatusIconView) target;
+                                               // LabelIconView rv = siv.getRoot();
+                                               // long id = rv.getNodeId();
+                                               long id = target.getNodeId();
+                                               target = null;
+
+                                               activity.execute(id);
+                                               return super.onTouchEvent(event);
+                                               // return true;
+                                       }
+
+                                       if (selectedTarget != null && selectedTarget == target) {
+                                               long id = selectedTarget.getNodeId();
+
+                                               clearColorFilter(target);
+                                               target = null;
+                                               selectedTarget = target;
+                                               activity.targetSelectedChanged(true);
+
+                                               activity.executeView(id);
+
+                                               return super.onTouchEvent(event);
+                                       }
+
+                                       // ここに移動
+                                       scrollView.requestDisallowInterceptTouchEvent(true);
+
+                                       offsetX = x;
+                                       offsetY = y;
+                                       // TODO
+                                       currentX = obj.getLeft();
+                                       currentY = obj.getTop();
+
+                                       setSelected(target);
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(true);
+                                       
+                                       // コメントにしたが、デグレードするかも
+                                       // scrollView.setScrollable(false);
+                               } else {
+                                       clearColorFilter(target);
+                                       target = null;
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(false);
+                               }
+                               // return false;
+                       } else if (event.getAction() == MotionEvent.ACTION_UP) {
+                               if (!longClickFlg) {
+                                       return super.onTouchEvent(event);
+                               }
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                                       // return true;
+                               }
+                               obj = target;
+
+                               // obj.setVisibility(View.GONE);
+                               if (destTarget == null || destTarget instanceof StatusIconView) {
+                                       obj.setAnimation(anime);
+                                       obj.startAnimation(anime);
+                                       // layout.removeView(obj);
+
+                                       int srcX = target.getInitX();
+                                       int srcY = target.getInitY();
+                                       target.layout(srcX, srcY, srcX + target.getWidth(), srcY
+                                                       + target.getHeight());
+                                       setAlpha(target);
+                               } else {
+                                       long src = target.getNodeId();
+                                       long dst = destTarget.getNodeId();
+                                       activity.execute(src, dst);
+
+                                       // TODO
+                                       target = null;
+                                       destTarget = null;
+
+                                       // T29171
+                                       clearTarget();
+
+                                       scrollView.setScrollable(true);
+                                       scrollView.requestDisallowInterceptTouchEvent(false);
+                                       scrollView.invalidate();
+                               }
+
+                               longClickFlg = false;
+                       }
+
+                       return super.onTouchEvent(event);
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       return false;
+               }
+       }
+
+       @Override
+       public boolean onLongClick(View view) {
+               if (!isElabledTouchEvent()) {
+                       return true;
+               }
+               if (target == null) {
+                       return false;
+               }
+               if (target instanceof StatusIconView) {
+                       return false;
+               }
+
+               LabelIconView v = (LabelIconView) target;
+               setGrayAlpha(v);
+               v.clearColorFilter();
+
+               moveTop(target);
+
+               longClickFlg = true;
+               return true;
+       }
+
+       public boolean isElabledTouchEvent() {
+               return elabledTouchEvent;
+       }
+
+       public void setElabledTouchEvent(boolean elabledTouchEvent) {
+               this.elabledTouchEvent = elabledTouchEvent;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/48/b050426188f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/48/b050426188f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..4bd6f4a
--- /dev/null
@@ -0,0 +1,1002 @@
+package com.yuji.ef;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.database.sqlite.SQLiteDatabase;
+import android.graphics.Bitmap;
+import android.graphics.PixelFormat;
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.Gravity;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.WindowManager;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.Node.Status;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeComparator;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.NodeDaoImpl;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.utility.BaseActivity;
+import com.yuji.ef.utility.BitmapCacheFactory;
+import com.yuji.ef.utility.EvernoteIntentUtil;
+import com.yuji.ef.utility.FolderUtil;
+import com.yuji.ef.utility.LockHandler;
+import com.yuji.ef.utility.LockListener;
+import com.yuji.ef.utility.ScaleUtil;
+
+public class EverFolderActivity extends BaseActivity implements LockListener {
+       private enum ScreenStatus {
+               Normal, AddNode, DeleteNode, RenameNode
+       };
+
+       private LinearLayout msgLayout;
+       private LinearLayout msgButtonLayout;
+       private Button msgOkButton;
+       private Button msgCancelButton;
+       private EditText msgEditText;
+
+       private IconFrameLayout layout;
+       private TextView confirmMsg;
+       private IconScrollView scrollView;
+       private LinearLayout buttonLayout;
+       private Button leftButton;
+       private Button rightButton;
+       // private Button addButton;
+       // private Button deleteButton;
+
+       private ScreenStatus status;
+       private NodeComparator nodeComparator = new NodeComparator();
+       private BitmapCacheFactory bitmapFactory = BitmapCacheFactory.getInstance();
+       private Node top = null;
+       private int indent = 0;
+       private int bmpPaddingLeft;
+       private int bmpWidth;
+       private int viewY;
+       private boolean lock = false;
+       private boolean isInit = true;
+       private boolean isInCycle = false;
+       private boolean isResult = false;
+
+       private BroadcastReceiver receiver = new BroadcastReceiver() {
+               @Override
+               public void onReceive(Context context, Intent intent) {
+                       String action = intent.getAction();
+EfException.msg(EverFolderActivity.this, context.getString("MESSAGE"));
+                       if (action.compareTo(Constant.ACTION_UPDATE) == 0) {
+                               if (isInCycle && !lock) {
+                                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                                       lock = lockDao.lock(EverFolderActivity.this,
+                                                       Constant.LOCK_UPDATE_NOTE);
+                                       if (lock) {
+                                               updateList();
+                                               // ほんとは、setStatus()に入れたい
+                                               layout.setVisibility(View.VISIBLE);
+                                       }
+                                       setStatus();
+                               }
+                       }
+               }
+       };
+
+       @Override
+       public void onCreate(Bundle savedInstanceState) {
+               super.onCreate(savedInstanceState);
+               setContentView(R.layout.main);
+
+               try {
+                       IntentFilter intentFilter = new IntentFilter();
+                       intentFilter.addAction(Constant.ACTION_UPDATE);
+                       registerReceiver(receiver, intentFilter);
+
+                       scrollView = (IconScrollView) findViewById(R.id.scrollView);
+                       layout = (IconFrameLayout) findViewById(R.id.frameLayout);
+                       layout.setActivity(this);
+                       layout.setScrollView(scrollView);
+
+                       buttonLayout = (LinearLayout) findViewById(R.id.mainButtonLayout);
+                       leftButton = (Button) findViewById(R.id.leftButton);
+                       rightButton = (Button) findViewById(R.id.rightButton);
+                       // addButton = (Button) findViewById(R.id.addButton);
+                       // deleteButton = (Button) findViewById(R.id.deleteButton);
+
+                       msgLayout = (LinearLayout) findViewById(R.id.mainMsgLayout);
+                       confirmMsg = (TextView) findViewById(R.id.mainConfirmMsg);
+                       msgEditText = (EditText) findViewById(R.id.mainMsgEditText);
+                       msgButtonLayout = (LinearLayout) findViewById(R.id.mainMsgButtonLayout);
+                       msgOkButton = (Button) findViewById(R.id.mainMsgOkButton);
+                       msgCancelButton = (Button) findViewById(R.id.mainMsgCancelButton);
+
+                       leftButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       leftButtonOnClick();
+                               }
+                       });
+                       rightButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       rightButtonOnClick();
+                               }
+                       });
+                       // addButton.setOnClickListener(new OnClickListener() {
+                       // @Override
+                       // public void onClick(View v) {
+                       // addButtonOnClick();
+                       // }
+                       // });
+                       // deleteButton.setOnClickListener(new OnClickListener() {
+                       // @Override
+                       // public void onClick(View v) {
+                       // deleteButtonOnClick();
+                       // }
+                       // });
+
+                       msgEditText.addTextChangedListener(new TextWatcher() {
+                               public void afterTextChanged(Editable s) {
+                                       if (status != ScreenStatus.DeleteNode) {
+                                               String text = s.toString();
+                                               msgOkButton.setEnabled(text.length() > 0);
+                                       } else {
+                                               msgOkButton.setEnabled(true);
+                                       }
+                               }
+
+                               public void beforeTextChanged(CharSequence s, int start,
+                                               int count, int after) {
+
+                               }
+
+                               public void onTextChanged(CharSequence s, int start,
+                                               int before, int count) {
+
+                               }
+                       });
+
+                       msgOkButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       msgOkButtonOnClick(v);
+                               }
+                       });
+                       msgCancelButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       msgCancelOnClick(v);
+                               }
+                       });
+
+                       ScaleUtil scaleUtil = ScaleUtil.getInstance();
+                       scaleUtil.init(this);
+
+                       bitmapFactory.init(this);
+                       Node node = new DirNode(null, null);
+                       Bitmap bmp = null;
+                       bmp = bitmapFactory.get(node.getStatusIconId());
+                       bmpPaddingLeft = bmp.getWidth();
+                       bmp = bitmapFactory.get(node.getIconId());
+                       bmpWidth = bmp.getWidth();
+
+                       float fSize = 48 * (1 / 2.0f);
+                       leftButton.setTextSize(fSize);
+                       rightButton.setTextSize(fSize);
+               } catch (Exception e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+       @Override
+       public boolean onCreateOptionsMenu(Menu menu) {
+               boolean ret = super.onCreateOptionsMenu(menu);
+               int index = 0;
+
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "カット");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "ペースト");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "追加");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "削除");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "リネーム");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "設定");
+               return ret;
+       }
+
+       @Override
+       public boolean onMenuOpened(int featureId, Menu menu) {
+               boolean ret = super.onMenuOpened(featureId, menu);
+
+               // #29304
+               if (menu == null) {
+                       return false;
+               }
+
+               MenuItem item;
+
+               boolean cutButtonFlag = false;
+               boolean pastButtonFlag = false;
+               boolean addButtonFlag = false;
+               boolean deleteButtonFlag = false;
+               boolean renameButtonFlag = false;
+               boolean confButtonFlag = true;
+
+               if (status == ScreenStatus.Normal) {
+                       LabelIconView target = layout.getSelectedTarget();
+                       NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+                       long id = -1;
+                       Node node = null;
+                       if (target != null) {
+                               id = target.getNodeId();
+                               node = dao.searchById(id);
+                       }
+
+                       if (isDirNode(target, node, false) || isFileNode(node)) {
+                               cutButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, true) && isCut()) {
+                               pastButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, true)) {
+                               addButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, false) && !isNoteBook(node)
+                                       && CommonUtil.isNull(node.getChildrenString())) {
+                               deleteButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, false) && !isNoteBook(node)) {
+                               renameButtonFlag = true;
+                       }
+               }
+
+               int index = 0;
+               item = menu.getItem(index++);
+               item.setVisible(cutButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(pastButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(addButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(deleteButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(renameButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(confButtonFlag);
+
+               return ret;
+       }
+
+       private boolean isFileNode(Node node) {
+               if (node == null || !(node instanceof FileNode)) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isDirNode(LabelIconView target, Node node,
+                       boolean containRoot) {
+               if (target == null) {
+                       return false;
+               }
+               if (node == null) {
+                       return false;
+               }
+               if (!containRoot && (node instanceof RootNode)) {
+                       return false;
+               }
+               if (!(node instanceof DirNode)) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isNoteBook(Node node) {
+               if (node == null) {
+                       return false;
+               }
+               if (CommonUtil.isNull(node.getGuid())) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isCut() {
+               LabelIconView srcTarget = layout.getCutTarget();
+               if (srcTarget == null) {
+                       return false;
+               }
+               return true;
+       }
+
+       @Override
+       public boolean onOptionsItemSelected(MenuItem item) {
+               Intent intent;
+               try {
+                       switch (item.getItemId()) {
+                       case Menu.FIRST + 0:
+                               selectMenuCut();
+                               break;
+                       case Menu.FIRST + 1:
+                               selectMenuPast();
+                               break;
+                       case Menu.FIRST + 2:
+                               selectMenuAdd();
+                               break;
+                       case Menu.FIRST + 3:
+                               selectMenuDelete();
+                               break;
+                       case Menu.FIRST + 4:
+                               selectMenuRename();
+                               break;
+                       case Menu.FIRST + 5:
+                               // dummy();
+                               // dummy2();
+                               intent = new Intent(this, (Class<?>) SettingActivity.class);
+                               startActivityForResult(intent, 0);
+                               break;
+                       default:
+                               break;
+                       }
+               } catch (Exception e) {
+                       terminate(e);
+               }
+               return super.onOptionsItemSelected(item);
+       }
+
+       private void dummy() {
+               NodeDaoImpl dao = (NodeDaoImpl) NodeCacheDao.getInstance();
+               List<Node> list = dao.search();
+               for (Node node : list) {
+                       System.out.println(node.toString());
+               }
+       }
+
+       private void dummy2() {
+               LockDao dao = (LockDao) LockDao.getInstance();
+               boolean b;
+
+               try {
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(new Object(), "key");
+                       dao.unlock(this, "key");
+                       b = dao.lock(new Object(), "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       dao.unlock(new Object(), "key");
+
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+
+       }
+
+       private void selectMenuAdd() {
+               setStatus(ScreenStatus.AddNode);
+       }
+
+       private void selectMenuDelete() {
+               setStatus(ScreenStatus.DeleteNode);
+       }
+
+       private void selectMenuRename() {
+               LabelIconView target = layout.getSelectedTarget();
+               if (target == null) {
+                       return;
+               }
+
+               long id = target.getNodeId();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               Node node = dao.searchById(id);
+               if (node != null) {
+                       String text = node.getName();
+                       msgEditText.setText(text);
+                       setStatus(ScreenStatus.RenameNode);
+               }
+       }
+
+       private void selectMenuCut() {
+               LabelIconView target = layout.getSelectedTarget();
+               if (target == null) {
+                       return;
+               }
+
+               layout.setCutTarget(target);
+               layout.refresh();
+       }
+
+       private void selectMenuPast() {
+               LabelIconView srcTarget = layout.getCutTarget();
+               if (srcTarget == null) {
+                       return;
+               }
+
+               LabelIconView dstTarget = layout.getSelectedTarget();
+               if (dstTarget == null) {
+                       return;
+               }
+
+               layout.setCutTarget(null);
+
+               long srcId = srcTarget.getNodeId();
+               long dstId = dstTarget.getNodeId();
+               execute(srcId, dstId);
+       }
+
+       private void updateList() {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               top = dao.searchRoot();
+               if (top == null) {
+                       // TODO
+               }
+               updateList(top);
+       }
+
+       private void updateList(Node parent) {
+               viewY = 10;
+
+               scrollView.setVisibility(View.GONE);            
+               layout.removeAllViews();
+               updateList(parent, 0);
+               layout.setMinimumHeight(viewY);
+               scrollView.setVisibility(View.VISIBLE);         
+               layout.refresh();
+
+               scrollView.invalidate();
+       }
+
+       private void updateList(Node node, int depth) {
+               int N = (int) (bmpWidth * 0.6);
+               int M = (int) (bmpWidth * 1.2);
+               int x = N * (depth - indent);
+
+               if (depth - indent >= 0
+                               && !(depth - indent == 0 && node instanceof FileNode)) {
+                       LabelIconView view = new LabelIconView(this);
+                       node.setView(view);
+
+                       Bitmap bmp1 = null;
+                       int id = node.getStatusIconId();
+                       if (id >= 0) {
+                               // DirNode
+                               bmp1 = bitmapFactory.get(node.getStatusIconId());
+                       } else {
+                               // FileNode
+                               x += bmpPaddingLeft;
+                       }
+                       Bitmap bmp2 = bitmapFactory.get(node.getIconId());
+                       createIconImageView(view, bmp1, bmp2, node.getName(), x, viewY);
+                       // LabelIconView s = view.getStatusImageView();
+                       // if (s != null) {
+                       // s.setNodeId(node.getId());
+                       // }
+                       view.setNodeId(node.getId());
+               }
+               viewY += M;
+
+               if (node.getStatus() != Node.Status.OPEN) {
+                       return;
+               }
+               List<Long> idList = node.getChildren();
+               if (idList == null) {
+                       return;
+               }
+
+               List<Node> list = new ArrayList<Node>();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               for (Long id : idList) {
+                       Node n = dao.searchById(id);
+                       if (n == null) {
+                               // TODO
+                               continue;
+                       }
+                       if (n instanceof DirNode) {
+                               DirNode d = (DirNode) n;
+                               if (isNoteBook(d) && !d.isSelected()) {
+                                       continue;
+                               }
+                       }
+                       list.add(n);
+               }
+               Collections.sort(list, nodeComparator);
+               for (Node n : list) {
+                       updateList(n, depth + 1);
+               }
+       }
+
+       private void createIconImageView(LabelIconView v, Bitmap bmp1, Bitmap bmp2,
+                       String text, int x, int y) {
+               v.init(x, y, bmp1, bmp2, text);
+
+               android.view.WindowManager.LayoutParams params = new WindowManager.LayoutParams();
+               params.gravity = Gravity.TOP | Gravity.LEFT;
+               params.height = WindowManager.LayoutParams.WRAP_CONTENT;
+               params.width = WindowManager.LayoutParams.WRAP_CONTENT;
+               params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
+                               | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
+                               | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
+                               | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
+               params.format = PixelFormat.TRANSLUCENT;
+               params.windowAnimations = 0;
+               params.x = x;
+               params.y = y;
+               v.setLayoutParams(params);
+
+               // LabelIconView siv = v.getStatusImageView();
+               // if (siv != null) {
+               // layout.addView(siv, false);
+               // }
+
+               layout.addView(v);
+               v.layout(x, y, x + v.getWidth(), y + v.getHeight());
+       }
+
+       @Override
+       public void sendLockResult(boolean b) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               if (isResult) {
+                       if (dao.isEmpty()) {
+                               finish();
+                               return;
+                       }
+               }
+               isResult = false;
+
+               if (dao.isEmpty()) {
+                       if (isInit) {
+                               Intent intent = new Intent(this,
+                                               (Class<?>) SettingActivity.class);
+                               startActivityForResult(intent, 0);
+
+                               isInit = false;
+                       } else {
+                               finish();
+                               isInit = true;
+                       }
+               }
+
+               if (isInCycle) {
+                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                       lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
+                       if (isInit) {
+                               status = ScreenStatus.Normal;
+
+                               if (lock) {
+                                       layout.setVisibility(View.VISIBLE);
+                                       updateList();
+                               } else {
+                                       layout.removeAllViews();
+                               }
+                               setStatus();
+                               isInit = false;
+                       } else {
+                               setStatus();
+                       }
+               } else {
+                       // TODO
+                       // lock解除
+               }
+       }
+
+       @Override
+       protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+               // TODO sendLockResult()、「lock解除」のため、とりあえずコメント
+               // NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               // if (dao.isEmpty()) {
+               // finish();
+               // }
+               isResult = true;
+               isInit = true;
+       }
+
+       @Override
+       protected void onStart() {
+               super.onStart();
+       }
+
+       @Override
+       protected void onResume() {
+               super.onResume();
+               isInCycle = true;
+
+               LockHandler handler = new LockHandler();
+               handler.lock(this, Constant.LOCK_UPDATE_NOTE);
+               lock = false;
+
+               if (isInit) {
+                       layout.setVisibility(View.INVISIBLE);
+                       setStatus();
+               }
+               else {
+                       // #29421
+                       updateList();
+               }
+               
+               // NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               // if (dao.isEmpty()) {
+               // if (isInit) {
+               // Intent intent = new Intent(this,
+               // (Class<?>) SettingActivity.class);
+               // startActivityForResult(intent, 0);
+               //
+               // isInit = false;
+               // } else {
+               // finish();
+               // isInit = true;
+               // }
+               // }
+               //
+               // LockDao lockDao = (LockDao) LockDao.getInstance();
+               // lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
+               //
+               // if (isInit) {
+               // status = ScreenStatus.Normal;
+               //
+               // if (lock) {
+               // updateList();
+               // } else {
+               // layout.removeAllViews();
+               // }
+               // setStatus();
+               // isInit = false;
+               // } else {
+               // setStatus();
+               // }
+       }
+
+       @Override
+       protected void onPause() {
+               // ロック未取得でも解除する(ゴミ掃除)
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(this, Constant.LOCK_UPDATE_NOTE);
+               lock = false;
+
+               super.onPause();
+               isInCycle = false;
+       }
+
+       private void leftButtonOnClick() {
+               moveButtonOnClick(-1);
+               setStatus();
+       }
+
+       private void rightButtonOnClick() {
+               moveButtonOnClick(1);
+               setStatus();
+       }
+
+       private void moveButtonOnClick(int dx) {
+               int mx = 0;
+
+               if (dx < 0) {
+                       if (indent > 0) {
+                               mx = -1;
+                       }
+               } else {
+                       mx = 1;
+               }
+               if (mx != 0) {
+                       indent += mx;
+                       removeAllNodeView();
+                       updateList();
+               }
+       }
+
+       // private void addButtonOnClick() {
+       // setStatus(ScreenStatus.AddNode);
+       // }
+       //
+       // private void deleteButtonOnClick() {
+       // FolderUtil util = FolderUtil.getInstance();
+       // LabelIconView target = layout.getSelectedTarget();
+       // long id = target.getNodeId();
+       // NodeDao dao = (NodeDao) NodeDao.getInstance();
+       // Node node = dao.searchById(id);
+       // if (node != null) {
+       // util.deleteNode(node);
+       // // TODO 三角マークも消さないといけないのでは
+       // layout.removeView(target);
+       // updateList();
+       // setStatus();
+       // }
+       // }
+
+       private void msgOkButtonOnClick(View v) {
+               FolderUtil util = FolderUtil.getInstance();
+               LabelIconView target = layout.getSelectedTarget();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               if (status == ScreenStatus.AddNode) {
+                       long id = target.getNodeId();
+                       Node parent = dao.searchById(id);
+                       if (parent != null) {
+                               String text = msgEditText.getText().toString();
+                               DirNode node = new DirNode(text, null);
+                               util.addDirNode(parent, node);
+                       }
+                       layout.setCutTarget(null, false);
+               } else if (status == ScreenStatus.DeleteNode) {
+                       long id = target.getNodeId();
+                       Node node = dao.searchById(id);
+                       if (node != null) {
+                               util.deleteNode(node);
+                               layout.removeView(target);
+                       }
+                       layout.setCutTarget(null, false);
+               } else if (status == ScreenStatus.RenameNode) {
+                       long id = target.getNodeId();
+                       Node node = dao.searchById(id);
+                       if (node != null) {
+                               String text = msgEditText.getText().toString();
+
+                               dao.updateName(node, text);
+                       }
+                       layout.setCutTarget(null, false);
+               }
+
+               closeIME(v);
+
+               layout.clearTarget();
+               updateList();
+               setStatus(ScreenStatus.Normal);
+       }
+
+       private void msgCancelOnClick(View v) {
+               closeIME(v);
+
+               setStatus(ScreenStatus.Normal);
+       }
+
+       private void closeIME(View v) {
+               InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+               imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
+       }
+
+       public void execute(long srcId, long dstId) {
+               try {
+                       removeAllNodeView();
+
+                       NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+                       if (srcId < 0) {
+                               // TODO
+                       }
+                       if (dstId < 0) {
+                               // TODO
+                       }
+
+                       Node src = dao.searchById(srcId);
+                       Node dst = null;
+                       if (srcId == dstId) {
+                               dst = src;
+                       } else {
+                               dst = dao.searchById(dstId);
+                       }
+
+                       if (dstId == src.getParent()) {
+                               // 同じ場所に移動
+                               return;
+                       }
+                       if (!isFileNode(src) && !isMovable(srcId, dstId)) {
+                               // 再帰的な移動
+                               return;
+                       }
+
+                       Node sp = dao.searchById(src.getParent());
+                       if (sp == null) {
+                               // TODO
+                       }
+                       Node dp = null;
+                       if (src.getParent() == dst.getParent()) {
+                               dp = sp;
+                       } else {
+                               dp = dao.searchById(dst.getParent());
+                       }
+                       if (dp == null) {
+                               // TODO
+                       }
+
+                       // TODO DBへのアクセス
+                       // sp.remove(src.getId());
+                       SQLiteDatabase db = DatabaseHelper.getInstance()
+                                       .getSQLiteDatabase();
+                       db.beginTransaction();
+                       try {
+                               dao.removeChildrenIdNT(sp, src.getId());
+                               if (dst instanceof DirNode) {
+                                       // dst.add(src.getId());
+                                       dao.updateParentNT(src, dst.getId());
+                                       dao.addChildrenIdNT(dst, src.getId());
+                               } else if (dst instanceof FileNode) {
+                                       // dp.add(src.getId());
+                                       dao.updateParentNT(src, dp.getId());
+                                       dao.addChildrenIdNT(dp, src.getId());
+                               }
+
+                               db.setTransactionSuccessful();
+                       } finally {
+                               db.endTransaction();
+                       }
+               } finally {
+                       updateList();
+               }
+       }
+
+       private boolean isMovable(long srcId, long dstId) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               while (dstId >= 0) {
+                       if (srcId == dstId) {
+                               return false;
+                       }
+                       Node node = dao.searchById(dstId);
+                       if (node == null) {
+                               // TODO エラー
+                               return false;
+                       }
+                       if (!(node instanceof DirNode)) {
+                               return true;
+                       }
+                       dstId = node.getParent();
+               }
+               return true;
+       }
+
+       public void execute(long id) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               Node node = dao.searchById(id);
+               if (node == null) {
+                       // TODO
+               }
+               node.toggleStatus();
+               Status status = node.getStatus();
+
+               dao.updateStatus(node, status);
+
+               // removeAllNodeView();
+               updateList();
+       }
+
+       public void executeView(long id) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               Node node = dao.searchById(id);
+               if (!isFileNode(node)) {
+                       return;
+               }
+               String guid = node.getGuid();
+
+               EvernoteIntentUtil util = EvernoteIntentUtil.getInstance();
+               util.viewNote(this, guid);
+       }
+
+       public void targetSelectedChanged(boolean status) {
+               setStatus();
+       }
+
+       public void removeAllNodeView() {
+               layout.removeAllViews();
+       }
+
+       private void setStatus() {
+               setStatus(status);
+       }
+
+       private void setStatus(ScreenStatus status) {
+               try {
+                       if (this.status != status) {
+                               this.status = status;
+                       }
+
+                       if (!lock) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainUpdateMsg));
+                               msgEditText.setVisibility(View.GONE);
+                               msgButtonLayout.setVisibility(View.GONE);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                               
+                               status = ScreenStatus.Normal;
+                               return;
+                       }
+
+                       if (status == ScreenStatus.Normal) {
+                               msgLayout.setVisibility(View.GONE);
+                               // mainMsgEditText.setText("");
+
+                               boolean leftButtonFlag = true;
+                               boolean rightButtonFlag = true;
+                               // boolean addButtonFlag = true;
+                               // boolean deleteButtonFlag = true;
+
+                               if (indent <= 0) {
+                                       leftButtonFlag = false;
+                               }
+
+                               // LabelIconView target = layout.getSelectedTarget();
+                               // NodeDao dao = (NodeDao) NodeDao.getInstance();
+                               // long id = -1;
+                               // Node node = null;
+                               // if (target != null) {
+                               // id = target.getNodeId();
+                               // node = dao.searchById(id);
+                               // }
+                               // if (target == null || node == null || !(node instanceof
+                               // DirNode))
+                               // {
+                               // addButtonFlag = false;
+                               // }
+                               // if (target == null || (node != null && node instanceof
+                               // RootNode))
+                               // {
+                               // deleteButtonFlag = false;
+                               // }
+                               layout.setElabledTouchEvent(true);
+
+                               leftButton.setEnabled(leftButtonFlag);
+                               rightButton.setEnabled(rightButtonFlag);
+                               // addButton.setEnabled(addButtonFlag);
+                               // deleteButton.setEnabled(deleteButtonFlag);
+                       } else if (status == ScreenStatus.AddNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.VISIBLE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainAddMsg));
+                               msgEditText.setText("");
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       } else if (status == ScreenStatus.DeleteNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.GONE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainDeleteMsg));
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       } else if (status == ScreenStatus.RenameNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.VISIBLE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainRenameMsg));
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       }
+               } catch (Throwable e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+}
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/5/501bf8207bf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/5/501bf8207bf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..2e2798e
--- /dev/null
@@ -0,0 +1,12 @@
+package com.yuji.ef.exception;
+
+public class RollbackException extends EfException {
+       /**
+        * 
+        */
+       private static final long serialVersionUID = -6761432316684681251L;
+
+       public RollbackException(Error error) {
+               super(error);
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/51/50f02bec20f800111341a60c8ca6b985 b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/51/50f02bec20f800111341a60c8ca6b985
new file mode 100644 (file)
index 0000000..d4353f7
--- /dev/null
@@ -0,0 +1,453 @@
+package com.yuji.ef;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import android.content.Context;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnLongClickListener;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.AnimationUtils;
+import android.widget.FrameLayout;
+
+public class IconFrameLayout extends FrameLayout implements OnLongClickListener {
+       private EverFolderActivity activity = null;
+
+       private LabelIconView target = null;
+       private LabelIconView destTarget = null;
+       private LabelIconView selectedTarget = null;
+       private LabelIconView cutTarget = null;
+       private List<LabelIconView> labelIconViewList = new ArrayList<LabelIconView>();
+
+       private Animation anime;
+       private int currentX;
+       private int currentY;
+       private int offsetX;
+       private int offsetY;
+       private boolean longClickFlg = false;
+       private IconScrollView scrollView;
+       private Context context = this.getContext();
+       private boolean elabledTouchEvent = true;
+
+       public IconFrameLayout(Context context) {
+               super(context);
+       }
+
+       public IconFrameLayout(Context context, AttributeSet attrs) {
+               super(context, attrs);
+       }
+
+       public IconFrameLayout(Context context, AttributeSet attrs, int defStyle) {
+               super(context, attrs, defStyle);
+       }
+
+       public void setActivity(EverFolderActivity activity) {
+               this.activity = activity;
+       }
+
+       @Override
+       protected void onLayout(boolean changed, int left, int top, int right,
+                       int bottom) {
+               super.onLayout(changed, left, top, right, bottom);
+
+               int size = this.getChildCount();
+               for (int i = 0; i < size; i++) {
+                       LabelIconView vv = (LabelIconView) this.getChildAt(i);
+                       int x2 = vv.getInitX();
+                       int y2 = vv.getInitY();
+                       // vv.init(x2, y2);
+                       vv.layout(x2, y2, x2 + vv.getWidth(), y2 + vv.getHeight());
+               }
+       }
+
+       public LabelIconView getSelectedTarget() {
+               return selectedTarget;
+       }
+
+       public void addView(LabelIconView child) {
+               addView(child, true);
+       }
+
+       public void addView(LabelIconView child, boolean isAddView) {
+               if (isAddView) {
+                       super.addView(child);
+               }
+               labelIconViewList.add(child);
+       }
+
+       public void removeAllViews() {
+               super.removeAllViews();
+               labelIconViewList.clear();
+       }
+
+       public void moveTop(LabelIconView child) {
+               this.removeView(child);
+               this.addView(child);
+       }
+
+       private LabelIconView getView(int x, int y, LabelIconView v,
+                       List<LabelIconView> list, boolean flag) {
+               Rect rect = new Rect();
+
+               if (v != null) {
+                       if (flag) {
+                               v.getHitRect(rect);
+                               if (rect.contains(x, y)) {
+                                       return v;
+                               }
+                       }
+               }
+               for (LabelIconView view : list) {
+                       if (view != v) {
+                               view.getHitRect(rect);
+                               if (rect.contains(x, y)) {
+                                       return view;
+                               }
+                       }
+               }
+               return null;
+       }
+
+       public void setScrollView(final IconScrollView scrollView) {
+               this.scrollView = scrollView;
+               this.setOnLongClickListener(this);
+               // this.setLongClickable(true);
+
+               anime = AnimationUtils.loadAnimation(context, R.anim.sample);
+               anime.setAnimationListener(new AnimationListener() {
+                       public void onAnimationStart(Animation animation) {
+                       }
+
+                       public void onAnimationRepeat(Animation animation) {
+                       }
+
+                       public void onAnimationEnd(Animation animation) {
+                               // if (isBt2Click) {
+                               // bt2.performClick();
+                               // isBt2Click = false;
+                               // }
+                               clearTarget();
+                               target = null;
+                               destTarget = null;
+
+                               scrollView.setScrollable(true);
+                               scrollView.requestDisallowInterceptTouchEvent(false);
+                               scrollView.invalidate();
+                       }
+               });
+       }
+
+       public void refresh() {
+               if (selectedTarget != null) {
+                       boolean flag = false;
+                       long id = selectedTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       selectedTarget = view;
+                                       target = view;
+                                       setSelected(selectedTarget);
+                                       flag = true;
+                               }
+                       }
+                       if (!flag) {
+                               // 表示されなかった(CLOSEなど)
+                               selectedTarget = null;
+                               target = null;
+                       }
+               }
+               if (cutTarget != null) {
+                       boolean flag = false;
+                       long id = cutTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       cutTarget = view;
+                                       if (selectedTarget != cutTarget) {
+                                               clearColorFilter(cutTarget);
+                                       }
+                                       flag = true;
+                               }
+                       }
+                       if (!flag) {
+                               // 表示されなかった(CLOSEなど)
+                               cutTarget = null;
+                       }
+               }
+       }
+
+       public void clearTarget() {
+               if (selectedTarget != null) {
+                       clearColorFilter(selectedTarget);
+                       selectedTarget = null;
+               }
+               target = null;
+       }
+
+       public LabelIconView getCutTarget() {
+               return cutTarget;
+       }
+
+       public void setCutTarget(LabelIconView cutTarget) {
+               setCutTarget(cutTarget, true);
+       }
+
+       public void setCutTarget(LabelIconView cutTarget, boolean isUnselected) {
+               if (this.cutTarget != null){
+                       setAlpha(this.cutTarget);
+               }
+               this.cutTarget = cutTarget;
+               if (isUnselected) {
+                       selectedTarget = null;
+                       target = null;
+               }
+       }
+
+       private void setSelected(LabelIconView t) {
+               t.setAlpha(255);
+               t.setColorFilter(0x88ff0000, Mode.LIGHTEN);
+       }
+
+       private void setAlpha(LabelIconView v) {
+               v.setAlpha(255);
+       }
+
+       private void setGrayAlpha(LabelIconView v) {
+               v.setAlpha(128);
+       }
+
+       private void clearColorFilter(LabelIconView v) {
+               v.clearColorFilter();
+               if (v == cutTarget) {
+                       setGrayAlpha(v);
+               }
+       }
+
+       @Override
+       public boolean onTouchEvent(MotionEvent event) {
+               try {
+                       if (!isElabledTouchEvent()) {
+                               return super.onTouchEvent(event);
+                       }
+
+                       int x = (int) event.getRawX();
+                       int y = (int) event.getRawY();
+
+                       int dx = scrollView.getLeft();
+                       int dy = scrollView.getTop();
+
+                       x -= dx;
+                       y -= dy;
+
+                       int sx = x + scrollView.getScrollX();
+                       int sy = y + scrollView.getScrollY();
+                       LabelIconView v = getView(sx, sy, target, labelIconViewList, true);
+                       LabelIconView obj = (LabelIconView) v;
+
+                       // int size = labelIconViewList.size();
+                       if (target == null) {
+                               target = obj;
+                       }
+                       if (target == null) {
+                               return super.onTouchEvent(event);
+                       }
+
+                       // コメントにすると何が起きるか?
+                       // scrollView.requestDisallowInterceptTouchEvent(true);
+
+                       if (event.getAction() == MotionEvent.ACTION_MOVE) {
+                               if (!longClickFlg) {
+                                       return super.onTouchEvent(event);
+                               }
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                               }
+                               obj = target;
+
+                               int sh = scrollView.getHeight();
+                               int lh = this.getHeight();
+                               int maxY = lh - sh;
+                               int py = scrollView.getScrollY();
+                               int sdy = 10;
+                               int N = 100;
+                               if (y < N) {
+                                       if (py > 0) {
+                                               if (py < sdy) {
+                                                       sdy = py;
+                                               }
+                                               scrollView.smoothScrollTo(0, py - sdy);
+                                               currentY -= sdy;
+                                       }
+                               } else if (sh - y < N) {
+                                       if (py < maxY) {
+                                               if (maxY - py < sdy) {
+                                                       sdy = maxY - py;
+                                               }
+                                               scrollView.smoothScrollTo(0, py + sdy);
+                                               currentY += sdy;
+                                       }
+                               }
+
+                               int diffX = offsetX - x;
+                               int diffY = offsetY - y;
+
+                               currentX -= diffX;
+                               currentY -= diffY;
+                               obj.layout(currentX, currentY, currentX + obj.getWidth(),
+                                               currentY + obj.getHeight());
+
+                               offsetX = x;
+                               offsetY = y;
+
+                               v = getView(sx, sy, target, labelIconViewList, false);
+                               if (destTarget == null) {
+                                       if (v != null) {
+                                               destTarget = v;
+                                               setGrayAlpha(destTarget);
+                                       }
+                               } else {
+                                       if (v != destTarget) {
+                                               setAlpha(destTarget);
+                                               destTarget = v;
+                                               if (destTarget != null) {
+                                                       setGrayAlpha(destTarget);
+                                               }
+                                       }
+                               }
+                       } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
+                               // if (obj == target){
+                               if (obj != null) {
+                                       if (obj != target) {
+                                               clearColorFilter(target);
+                                               target = obj;
+                                       }
+                                       // if (target instanceof StatusIconView){
+                                       if (target.getSelectedView(sx - target.getLeft(), sy
+                                                       - target.getTop()) instanceof StatusIconView) {
+                                               // StatusIconView siv = (StatusIconView) target;
+                                               // LabelIconView rv = siv.getRoot();
+                                               // long id = rv.getNodeId();
+                                               long id = target.getNodeId();
+                                               target = null;
+
+                                               activity.execute(id);
+                                               return super.onTouchEvent(event);
+                                               // return true;
+                                       }
+
+                                       if (selectedTarget != null && selectedTarget == target) {
+                                               long id = selectedTarget.getNodeId();
+
+                                               clearColorFilter(target);
+                                               target = null;
+                                               selectedTarget = target;
+                                               activity.targetSelectedChanged(true);
+
+                                               activity.executeView(id);
+
+                                               return super.onTouchEvent(event);
+                                       }
+
+                                       // ここに移動
+                                       scrollView.requestDisallowInterceptTouchEvent(true);
+
+                                       offsetX = x;
+                                       offsetY = y;
+                                       // TODO
+                                       currentX = obj.getLeft();
+                                       currentY = obj.getTop();
+
+                                       setSelected(target);
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(true);
+                                       
+                                       // コメントにしたが、デグレードするかも
+                                       // scrollView.setScrollable(false);
+                               } else {
+                                       clearColorFilter(target);
+                                       target = null;
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(false);
+                               }
+                               // return false;
+                       } else if (event.getAction() == MotionEvent.ACTION_UP) {
+                               if (!longClickFlg) {
+                                       return super.onTouchEvent(event);
+                               }
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                                       // return true;
+                               }
+                               obj = target;
+
+                               // obj.setVisibility(View.GONE);
+                               if (destTarget == null || destTarget instanceof StatusIconView) {
+                                       obj.setAnimation(anime);
+                                       obj.startAnimation(anime);
+                                       // layout.removeView(obj);
+
+                                       int srcX = target.getInitX();
+                                       int srcY = target.getInitY();
+                                       target.layout(srcX, srcY, srcX + target.getWidth(), srcY
+                                                       + target.getHeight());
+                                       setAlpha(target);
+                               } else {
+                                       long src = target.getNodeId();
+                                       long dst = destTarget.getNodeId();
+                                       activity.execute(src, dst);
+
+                                       // TODO
+                                       target = null;
+                                       destTarget = null;
+
+                                       // T29171
+                                       clearTarget();
+
+                                       scrollView.setScrollable(true);
+                                       scrollView.requestDisallowInterceptTouchEvent(false);
+                                       scrollView.invalidate();
+                               }
+
+                               longClickFlg = false;
+                       }
+
+                       return super.onTouchEvent(event);
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       return false;
+               }
+       }
+
+       @Override
+       public boolean onLongClick(View view) {
+               if (!isElabledTouchEvent()) {
+                       return true;
+               }
+               if (target == null) {
+                       return false;
+               }
+               if (target instanceof StatusIconView) {
+                       return false;
+               }
+
+               LabelIconView v = (LabelIconView) target;
+               setGrayAlpha(v);
+               v.clearColorFilter();
+
+               moveTop(target);
+
+               longClickFlg = true;
+               return true;
+       }
+
+       public boolean isElabledTouchEvent() {
+               return elabledTouchEvent;
+       }
+
+       public void setElabledTouchEvent(boolean elabledTouchEvent) {
+               this.elabledTouchEvent = elabledTouchEvent;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/52/20f033857cf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/52/20f033857cf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..6255fd7
--- /dev/null
@@ -0,0 +1,17 @@
+package com.yuji.ef.exception;
+
+public class EfException extends Exception {
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 2248123315072811891L;
+       private EfError error;
+
+       public EfException(EfError error){
+               this.error = error;
+       }
+       
+       public EfError getError(){
+               return error;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/53/a0de679484f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/53/a0de679484f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..f38ee54
--- /dev/null
@@ -0,0 +1,321 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.RollbackException;
+
+public class FolderUtil {
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               List<Notebook> noteBookList = util.getNoteBookList();
+
+               long id;
+               Node top = nodeDao.searchRoot(db);
+
+               for (Notebook notebook : noteBookList) {
+                       String guid = notebook.getGuid();
+                       String name = notebook.getName();
+
+                       Node oldBook = nodeDao.searchByGuid(db, guid);
+                       if (oldBook == null) {
+                               DirNode dirNode = new DirNode(name, null);
+                               guid = notebook.getGuid();
+                               dirNode.setGuid(guid);
+
+                               id = addDirNodeNT(top, dirNode);
+                       } else {
+                               String oldName = oldBook.getName();
+                               if (!name.equals(oldName)) {
+                                       // 名称が異なる
+                                       nodeDao.updateNameNT(oldBook, name);
+                               }
+                       }
+               }
+
+               // 削除
+               List<Node> list = nodeDao.searchBook(db);
+               for (Node node : list) {
+                       boolean isFound = false;
+                       for (Notebook book : noteBookList) {
+                               String guid = book.getGuid();
+                               if (node.getGuid().equals(guid)) {
+                                       isFound = true;
+                                       break;
+                               }
+                       }
+                       if (!isFound) {
+                               if (CommonUtil.isNull(node.getChildrenString())) {
+                                       // 子が無い場合は削除
+                                       nodeDao.deleteNT(node.getId());
+                               } else {
+                                       // フォルダに変更
+                                       nodeDao.updateGuidNT(node, null);
+                               }
+                       }
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db) throws RollbackException {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+               // TODO
+               // FOO
+               throw new RollbackException(EfError.NONE);
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) throws RollbackException {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) throws RollbackException {
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               if (!util.isLoggedIn()){
+                       throw new RollbackException(EfError.NO_LOGIN);
+               }
+               
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+
+               db.beginTransaction();
+               try {
+                       if (isRoot) {
+                               if (nodeDao.isEmpty()) {
+                                       Node top = new RootNode("/", null);
+                                       top.setStatus(Node.Status.OPEN);
+                                       long id = nodeDao.addNT(top);
+                                       top.setId(id);
+                               }
+                       }
+
+                       if (isBook) {
+                               updateNotebook(db);
+                       }
+                       if (isNote) {
+                               nodeDao.updateNoteFlag(0);
+                               updateNote(db);
+                               deleteNode(db);                 
+                       }
+                       
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/55/a00e9f2d89f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/55/a00e9f2d89f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..274d956
--- /dev/null
@@ -0,0 +1,321 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.RollbackException;
+
+public class FolderUtil {
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               // TODO
+               // FOO
+               throw new RollbackException(EfError.NONE);
+//             List<Notebook> noteBookList = util.getNoteBookList();
+//
+//             long id;
+//             Node top = nodeDao.searchRoot(db);
+//
+//             for (Notebook notebook : noteBookList) {
+//                     String guid = notebook.getGuid();
+//                     String name = notebook.getName();
+//
+//                     Node oldBook = nodeDao.searchByGuid(db, guid);
+//                     if (oldBook == null) {
+//                             DirNode dirNode = new DirNode(name, null);
+//                             guid = notebook.getGuid();
+//                             dirNode.setGuid(guid);
+//
+//                             id = addDirNodeNT(top, dirNode);
+//                     } else {
+//                             String oldName = oldBook.getName();
+//                             if (!name.equals(oldName)) {
+//                                     // 名称が異なる
+//                                     nodeDao.updateNameNT(oldBook, name);
+//                             }
+//                     }
+//             }
+//
+//             // 削除
+//             List<Node> list = nodeDao.searchBook(db);
+//             for (Node node : list) {
+//                     boolean isFound = false;
+//                     for (Notebook book : noteBookList) {
+//                             String guid = book.getGuid();
+//                             if (node.getGuid().equals(guid)) {
+//                                     isFound = true;
+//                                     break;
+//                             }
+//                     }
+//                     if (!isFound) {
+//                             if (CommonUtil.isNull(node.getChildrenString())) {
+//                                     // 子が無い場合は削除
+//                                     nodeDao.deleteNT(node.getId());
+//                             } else {
+//                                     // フォルダに変更
+//                                     nodeDao.updateGuidNT(node, null);
+//                             }
+//                     }
+//             }
+       }
+
+       public void updateNote(SQLiteDatabase db) throws RollbackException {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) throws RollbackException {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) throws RollbackException {
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               if (!util.isLoggedIn()){
+                       throw new RollbackException(EfError.NO_LOGIN);
+               }
+               
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+
+               db.beginTransaction();
+               try {
+                       if (isRoot) {
+                               if (nodeDao.isEmpty()) {
+                                       Node top = new RootNode("/", null);
+                                       top.setStatus(Node.Status.OPEN);
+                                       long id = nodeDao.addNT(top);
+                                       top.setId(id);
+                               }
+                       }
+
+                       if (isBook) {
+                               updateNotebook(db);
+                       }
+                       if (isNote) {
+                               nodeDao.updateNoteFlag(0);
+                               updateNote(db);
+                               deleteNode(db);                 
+                       }
+                       
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/57/6099692b7bf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/57/6099692b7bf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..4bd7d1e
--- /dev/null
@@ -0,0 +1,317 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+
+public class FolderUtil {
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               List<Notebook> noteBookList = util.getNoteBookList();
+
+               long id;
+               Node top = nodeDao.searchRoot(db);
+
+               for (Notebook notebook : noteBookList) {
+                       String guid = notebook.getGuid();
+                       String name = notebook.getName();
+
+                       Node oldBook = nodeDao.searchByGuid(db, guid);
+                       if (oldBook == null) {
+                               DirNode dirNode = new DirNode(name, null);
+                               guid = notebook.getGuid();
+                               dirNode.setGuid(guid);
+
+                               id = addDirNodeNT(top, dirNode);
+                       } else {
+                               String oldName = oldBook.getName();
+                               if (!name.equals(oldName)) {
+                                       // 名称が異なる
+                                       nodeDao.updateNameNT(oldBook, name);
+                               }
+                       }
+               }
+
+               // 削除
+               List<Node> list = nodeDao.searchBook(db);
+               for (Node node : list) {
+                       boolean isFound = false;
+                       for (Notebook book : noteBookList) {
+                               String guid = book.getGuid();
+                               if (node.getGuid().equals(guid)) {
+                                       isFound = true;
+                                       break;
+                               }
+                       }
+                       if (!isFound) {
+                               if (CommonUtil.isNull(node.getChildrenString())) {
+                                       // 子が無い場合は削除
+                                       nodeDao.deleteNT(node.getId());
+                               } else {
+                                       // フォルダに変更
+                                       nodeDao.updateGuidNT(node, null);
+                               }
+                       }
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               // TODO
+//                                             throw new RollbackException()
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               // TODO
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       // TODO
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       // TODO
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       // TODO
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) {
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               if (!util.isLoggedIn()){
+                       return;
+               }
+               
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+
+               db.beginTransaction();
+               try {
+                       if (isRoot) {
+                               if (nodeDao.isEmpty()) {
+                                       Node top = new RootNode("/", null);
+                                       top.setStatus(Node.Status.OPEN);
+                                       long id = nodeDao.addNT(top);
+                                       top.setId(id);
+                               }
+                       }
+
+                       if (isBook) {
+                               updateNotebook(db);
+                       }
+                       if (isNote) {
+                               nodeDao.updateNoteFlag(0);
+                               updateNote(db);
+                               deleteNode(db);                 
+                       }
+                       
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/59/40dd7b4c88f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/59/40dd7b4c88f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..7002431
--- /dev/null
@@ -0,0 +1,1002 @@
+package com.yuji.ef;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.database.sqlite.SQLiteDatabase;
+import android.graphics.Bitmap;
+import android.graphics.PixelFormat;
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.Gravity;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.WindowManager;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.Node.Status;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeComparator;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.NodeDaoImpl;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.utility.BaseActivity;
+import com.yuji.ef.utility.BitmapCacheFactory;
+import com.yuji.ef.utility.EvernoteIntentUtil;
+import com.yuji.ef.utility.FolderUtil;
+import com.yuji.ef.utility.LockHandler;
+import com.yuji.ef.utility.LockListener;
+import com.yuji.ef.utility.ScaleUtil;
+
+public class EverFolderActivity extends BaseActivity implements LockListener {
+       private enum ScreenStatus {
+               Normal, AddNode, DeleteNode, RenameNode
+       };
+
+       private LinearLayout msgLayout;
+       private LinearLayout msgButtonLayout;
+       private Button msgOkButton;
+       private Button msgCancelButton;
+       private EditText msgEditText;
+
+       private IconFrameLayout layout;
+       private TextView confirmMsg;
+       private IconScrollView scrollView;
+       private LinearLayout buttonLayout;
+       private Button leftButton;
+       private Button rightButton;
+       // private Button addButton;
+       // private Button deleteButton;
+
+       private ScreenStatus status;
+       private NodeComparator nodeComparator = new NodeComparator();
+       private BitmapCacheFactory bitmapFactory = BitmapCacheFactory.getInstance();
+       private Node top = null;
+       private int indent = 0;
+       private int bmpPaddingLeft;
+       private int bmpWidth;
+       private int viewY;
+       private boolean lock = false;
+       private boolean isInit = true;
+       private boolean isInCycle = false;
+       private boolean isResult = false;
+
+       private BroadcastReceiver receiver = new BroadcastReceiver() {
+               @Override
+               public void onReceive(Context context, Intent intent) {
+                       String action = intent.getAction();
+EfException.msg(EverFolderActivity.this, "msg");
+                       if (action.compareTo(Constant.ACTION_UPDATE) == 0) {
+                               if (isInCycle && !lock) {
+                                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                                       lock = lockDao.lock(EverFolderActivity.this,
+                                                       Constant.LOCK_UPDATE_NOTE);
+                                       if (lock) {
+                                               updateList();
+                                               // ほんとは、setStatus()に入れたい
+                                               layout.setVisibility(View.VISIBLE);
+                                       }
+                                       setStatus();
+                               }
+                       }
+               }
+       };
+
+       @Override
+       public void onCreate(Bundle savedInstanceState) {
+               super.onCreate(savedInstanceState);
+               setContentView(R.layout.main);
+
+               try {
+                       IntentFilter intentFilter = new IntentFilter();
+                       intentFilter.addAction(Constant.ACTION_UPDATE);
+                       registerReceiver(receiver, intentFilter);
+
+                       scrollView = (IconScrollView) findViewById(R.id.scrollView);
+                       layout = (IconFrameLayout) findViewById(R.id.frameLayout);
+                       layout.setActivity(this);
+                       layout.setScrollView(scrollView);
+
+                       buttonLayout = (LinearLayout) findViewById(R.id.mainButtonLayout);
+                       leftButton = (Button) findViewById(R.id.leftButton);
+                       rightButton = (Button) findViewById(R.id.rightButton);
+                       // addButton = (Button) findViewById(R.id.addButton);
+                       // deleteButton = (Button) findViewById(R.id.deleteButton);
+
+                       msgLayout = (LinearLayout) findViewById(R.id.mainMsgLayout);
+                       confirmMsg = (TextView) findViewById(R.id.mainConfirmMsg);
+                       msgEditText = (EditText) findViewById(R.id.mainMsgEditText);
+                       msgButtonLayout = (LinearLayout) findViewById(R.id.mainMsgButtonLayout);
+                       msgOkButton = (Button) findViewById(R.id.mainMsgOkButton);
+                       msgCancelButton = (Button) findViewById(R.id.mainMsgCancelButton);
+
+                       leftButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       leftButtonOnClick();
+                               }
+                       });
+                       rightButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       rightButtonOnClick();
+                               }
+                       });
+                       // addButton.setOnClickListener(new OnClickListener() {
+                       // @Override
+                       // public void onClick(View v) {
+                       // addButtonOnClick();
+                       // }
+                       // });
+                       // deleteButton.setOnClickListener(new OnClickListener() {
+                       // @Override
+                       // public void onClick(View v) {
+                       // deleteButtonOnClick();
+                       // }
+                       // });
+
+                       msgEditText.addTextChangedListener(new TextWatcher() {
+                               public void afterTextChanged(Editable s) {
+                                       if (status != ScreenStatus.DeleteNode) {
+                                               String text = s.toString();
+                                               msgOkButton.setEnabled(text.length() > 0);
+                                       } else {
+                                               msgOkButton.setEnabled(true);
+                                       }
+                               }
+
+                               public void beforeTextChanged(CharSequence s, int start,
+                                               int count, int after) {
+
+                               }
+
+                               public void onTextChanged(CharSequence s, int start,
+                                               int before, int count) {
+
+                               }
+                       });
+
+                       msgOkButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       msgOkButtonOnClick(v);
+                               }
+                       });
+                       msgCancelButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       msgCancelOnClick(v);
+                               }
+                       });
+
+                       ScaleUtil scaleUtil = ScaleUtil.getInstance();
+                       scaleUtil.init(this);
+
+                       bitmapFactory.init(this);
+                       Node node = new DirNode(null, null);
+                       Bitmap bmp = null;
+                       bmp = bitmapFactory.get(node.getStatusIconId());
+                       bmpPaddingLeft = bmp.getWidth();
+                       bmp = bitmapFactory.get(node.getIconId());
+                       bmpWidth = bmp.getWidth();
+
+                       float fSize = 48 * (1 / 2.0f);
+                       leftButton.setTextSize(fSize);
+                       rightButton.setTextSize(fSize);
+               } catch (Exception e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+       @Override
+       public boolean onCreateOptionsMenu(Menu menu) {
+               boolean ret = super.onCreateOptionsMenu(menu);
+               int index = 0;
+
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "カット");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "ペースト");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "追加");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "削除");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "リネーム");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "設定");
+               return ret;
+       }
+
+       @Override
+       public boolean onMenuOpened(int featureId, Menu menu) {
+               boolean ret = super.onMenuOpened(featureId, menu);
+
+               // #29304
+               if (menu == null) {
+                       return false;
+               }
+
+               MenuItem item;
+
+               boolean cutButtonFlag = false;
+               boolean pastButtonFlag = false;
+               boolean addButtonFlag = false;
+               boolean deleteButtonFlag = false;
+               boolean renameButtonFlag = false;
+               boolean confButtonFlag = true;
+
+               if (status == ScreenStatus.Normal) {
+                       LabelIconView target = layout.getSelectedTarget();
+                       NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+                       long id = -1;
+                       Node node = null;
+                       if (target != null) {
+                               id = target.getNodeId();
+                               node = dao.searchById(id);
+                       }
+
+                       if (isDirNode(target, node, false) || isFileNode(node)) {
+                               cutButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, true) && isCut()) {
+                               pastButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, true)) {
+                               addButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, false) && !isNoteBook(node)
+                                       && CommonUtil.isNull(node.getChildrenString())) {
+                               deleteButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, false) && !isNoteBook(node)) {
+                               renameButtonFlag = true;
+                       }
+               }
+
+               int index = 0;
+               item = menu.getItem(index++);
+               item.setVisible(cutButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(pastButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(addButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(deleteButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(renameButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(confButtonFlag);
+
+               return ret;
+       }
+
+       private boolean isFileNode(Node node) {
+               if (node == null || !(node instanceof FileNode)) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isDirNode(LabelIconView target, Node node,
+                       boolean containRoot) {
+               if (target == null) {
+                       return false;
+               }
+               if (node == null) {
+                       return false;
+               }
+               if (!containRoot && (node instanceof RootNode)) {
+                       return false;
+               }
+               if (!(node instanceof DirNode)) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isNoteBook(Node node) {
+               if (node == null) {
+                       return false;
+               }
+               if (CommonUtil.isNull(node.getGuid())) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isCut() {
+               LabelIconView srcTarget = layout.getCutTarget();
+               if (srcTarget == null) {
+                       return false;
+               }
+               return true;
+       }
+
+       @Override
+       public boolean onOptionsItemSelected(MenuItem item) {
+               Intent intent;
+               try {
+                       switch (item.getItemId()) {
+                       case Menu.FIRST + 0:
+                               selectMenuCut();
+                               break;
+                       case Menu.FIRST + 1:
+                               selectMenuPast();
+                               break;
+                       case Menu.FIRST + 2:
+                               selectMenuAdd();
+                               break;
+                       case Menu.FIRST + 3:
+                               selectMenuDelete();
+                               break;
+                       case Menu.FIRST + 4:
+                               selectMenuRename();
+                               break;
+                       case Menu.FIRST + 5:
+                               // dummy();
+                               // dummy2();
+                               intent = new Intent(this, (Class<?>) SettingActivity.class);
+                               startActivityForResult(intent, 0);
+                               break;
+                       default:
+                               break;
+                       }
+               } catch (Exception e) {
+                       terminate(e);
+               }
+               return super.onOptionsItemSelected(item);
+       }
+
+       private void dummy() {
+               NodeDaoImpl dao = (NodeDaoImpl) NodeCacheDao.getInstance();
+               List<Node> list = dao.search();
+               for (Node node : list) {
+                       System.out.println(node.toString());
+               }
+       }
+
+       private void dummy2() {
+               LockDao dao = (LockDao) LockDao.getInstance();
+               boolean b;
+
+               try {
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(new Object(), "key");
+                       dao.unlock(this, "key");
+                       b = dao.lock(new Object(), "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       dao.unlock(new Object(), "key");
+
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+
+       }
+
+       private void selectMenuAdd() {
+               setStatus(ScreenStatus.AddNode);
+       }
+
+       private void selectMenuDelete() {
+               setStatus(ScreenStatus.DeleteNode);
+       }
+
+       private void selectMenuRename() {
+               LabelIconView target = layout.getSelectedTarget();
+               if (target == null) {
+                       return;
+               }
+
+               long id = target.getNodeId();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               Node node = dao.searchById(id);
+               if (node != null) {
+                       String text = node.getName();
+                       msgEditText.setText(text);
+                       setStatus(ScreenStatus.RenameNode);
+               }
+       }
+
+       private void selectMenuCut() {
+               LabelIconView target = layout.getSelectedTarget();
+               if (target == null) {
+                       return;
+               }
+
+               layout.setCutTarget(target);
+               layout.refresh();
+       }
+
+       private void selectMenuPast() {
+               LabelIconView srcTarget = layout.getCutTarget();
+               if (srcTarget == null) {
+                       return;
+               }
+
+               LabelIconView dstTarget = layout.getSelectedTarget();
+               if (dstTarget == null) {
+                       return;
+               }
+
+               layout.setCutTarget(null);
+
+               long srcId = srcTarget.getNodeId();
+               long dstId = dstTarget.getNodeId();
+               execute(srcId, dstId);
+       }
+
+       private void updateList() {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               top = dao.searchRoot();
+               if (top == null) {
+                       // TODO
+               }
+               updateList(top);
+       }
+
+       private void updateList(Node parent) {
+               viewY = 10;
+
+               scrollView.setVisibility(View.GONE);            
+               layout.removeAllViews();
+               updateList(parent, 0);
+               layout.setMinimumHeight(viewY);
+               scrollView.setVisibility(View.VISIBLE);         
+               layout.refresh();
+
+               scrollView.invalidate();
+       }
+
+       private void updateList(Node node, int depth) {
+               int N = (int) (bmpWidth * 0.6);
+               int M = (int) (bmpWidth * 1.2);
+               int x = N * (depth - indent);
+
+               if (depth - indent >= 0
+                               && !(depth - indent == 0 && node instanceof FileNode)) {
+                       LabelIconView view = new LabelIconView(this);
+                       node.setView(view);
+
+                       Bitmap bmp1 = null;
+                       int id = node.getStatusIconId();
+                       if (id >= 0) {
+                               // DirNode
+                               bmp1 = bitmapFactory.get(node.getStatusIconId());
+                       } else {
+                               // FileNode
+                               x += bmpPaddingLeft;
+                       }
+                       Bitmap bmp2 = bitmapFactory.get(node.getIconId());
+                       createIconImageView(view, bmp1, bmp2, node.getName(), x, viewY);
+                       // LabelIconView s = view.getStatusImageView();
+                       // if (s != null) {
+                       // s.setNodeId(node.getId());
+                       // }
+                       view.setNodeId(node.getId());
+               }
+               viewY += M;
+
+               if (node.getStatus() != Node.Status.OPEN) {
+                       return;
+               }
+               List<Long> idList = node.getChildren();
+               if (idList == null) {
+                       return;
+               }
+
+               List<Node> list = new ArrayList<Node>();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               for (Long id : idList) {
+                       Node n = dao.searchById(id);
+                       if (n == null) {
+                               // TODO
+                               continue;
+                       }
+                       if (n instanceof DirNode) {
+                               DirNode d = (DirNode) n;
+                               if (isNoteBook(d) && !d.isSelected()) {
+                                       continue;
+                               }
+                       }
+                       list.add(n);
+               }
+               Collections.sort(list, nodeComparator);
+               for (Node n : list) {
+                       updateList(n, depth + 1);
+               }
+       }
+
+       private void createIconImageView(LabelIconView v, Bitmap bmp1, Bitmap bmp2,
+                       String text, int x, int y) {
+               v.init(x, y, bmp1, bmp2, text);
+
+               android.view.WindowManager.LayoutParams params = new WindowManager.LayoutParams();
+               params.gravity = Gravity.TOP | Gravity.LEFT;
+               params.height = WindowManager.LayoutParams.WRAP_CONTENT;
+               params.width = WindowManager.LayoutParams.WRAP_CONTENT;
+               params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
+                               | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
+                               | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
+                               | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
+               params.format = PixelFormat.TRANSLUCENT;
+               params.windowAnimations = 0;
+               params.x = x;
+               params.y = y;
+               v.setLayoutParams(params);
+
+               // LabelIconView siv = v.getStatusImageView();
+               // if (siv != null) {
+               // layout.addView(siv, false);
+               // }
+
+               layout.addView(v);
+               v.layout(x, y, x + v.getWidth(), y + v.getHeight());
+       }
+
+       @Override
+       public void sendLockResult(boolean b) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               if (isResult) {
+                       if (dao.isEmpty()) {
+                               finish();
+                               return;
+                       }
+               }
+               isResult = false;
+
+               if (dao.isEmpty()) {
+                       if (isInit) {
+                               Intent intent = new Intent(this,
+                                               (Class<?>) SettingActivity.class);
+                               startActivityForResult(intent, 0);
+
+                               isInit = false;
+                       } else {
+                               finish();
+                               isInit = true;
+                       }
+               }
+
+               if (isInCycle) {
+                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                       lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
+                       if (isInit) {
+                               status = ScreenStatus.Normal;
+
+                               if (lock) {
+                                       layout.setVisibility(View.VISIBLE);
+                                       updateList();
+                               } else {
+                                       layout.removeAllViews();
+                               }
+                               setStatus();
+                               isInit = false;
+                       } else {
+                               setStatus();
+                       }
+               } else {
+                       // TODO
+                       // lock解除
+               }
+       }
+
+       @Override
+       protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+               // TODO sendLockResult()、「lock解除」のため、とりあえずコメント
+               // NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               // if (dao.isEmpty()) {
+               // finish();
+               // }
+               isResult = true;
+               isInit = true;
+       }
+
+       @Override
+       protected void onStart() {
+               super.onStart();
+       }
+
+       @Override
+       protected void onResume() {
+               super.onResume();
+               isInCycle = true;
+
+               LockHandler handler = new LockHandler();
+               handler.lock(this, Constant.LOCK_UPDATE_NOTE);
+               lock = false;
+
+               if (isInit) {
+                       layout.setVisibility(View.INVISIBLE);
+                       setStatus();
+               }
+               else {
+                       // #29421
+                       updateList();
+               }
+               
+               // NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               // if (dao.isEmpty()) {
+               // if (isInit) {
+               // Intent intent = new Intent(this,
+               // (Class<?>) SettingActivity.class);
+               // startActivityForResult(intent, 0);
+               //
+               // isInit = false;
+               // } else {
+               // finish();
+               // isInit = true;
+               // }
+               // }
+               //
+               // LockDao lockDao = (LockDao) LockDao.getInstance();
+               // lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
+               //
+               // if (isInit) {
+               // status = ScreenStatus.Normal;
+               //
+               // if (lock) {
+               // updateList();
+               // } else {
+               // layout.removeAllViews();
+               // }
+               // setStatus();
+               // isInit = false;
+               // } else {
+               // setStatus();
+               // }
+       }
+
+       @Override
+       protected void onPause() {
+               // ロック未取得でも解除する(ゴミ掃除)
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(this, Constant.LOCK_UPDATE_NOTE);
+               lock = false;
+
+               super.onPause();
+               isInCycle = false;
+       }
+
+       private void leftButtonOnClick() {
+               moveButtonOnClick(-1);
+               setStatus();
+       }
+
+       private void rightButtonOnClick() {
+               moveButtonOnClick(1);
+               setStatus();
+       }
+
+       private void moveButtonOnClick(int dx) {
+               int mx = 0;
+
+               if (dx < 0) {
+                       if (indent > 0) {
+                               mx = -1;
+                       }
+               } else {
+                       mx = 1;
+               }
+               if (mx != 0) {
+                       indent += mx;
+                       removeAllNodeView();
+                       updateList();
+               }
+       }
+
+       // private void addButtonOnClick() {
+       // setStatus(ScreenStatus.AddNode);
+       // }
+       //
+       // private void deleteButtonOnClick() {
+       // FolderUtil util = FolderUtil.getInstance();
+       // LabelIconView target = layout.getSelectedTarget();
+       // long id = target.getNodeId();
+       // NodeDao dao = (NodeDao) NodeDao.getInstance();
+       // Node node = dao.searchById(id);
+       // if (node != null) {
+       // util.deleteNode(node);
+       // // TODO 三角マークも消さないといけないのでは
+       // layout.removeView(target);
+       // updateList();
+       // setStatus();
+       // }
+       // }
+
+       private void msgOkButtonOnClick(View v) {
+               FolderUtil util = FolderUtil.getInstance();
+               LabelIconView target = layout.getSelectedTarget();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               if (status == ScreenStatus.AddNode) {
+                       long id = target.getNodeId();
+                       Node parent = dao.searchById(id);
+                       if (parent != null) {
+                               String text = msgEditText.getText().toString();
+                               DirNode node = new DirNode(text, null);
+                               util.addDirNode(parent, node);
+                       }
+                       layout.setCutTarget(null, false);
+               } else if (status == ScreenStatus.DeleteNode) {
+                       long id = target.getNodeId();
+                       Node node = dao.searchById(id);
+                       if (node != null) {
+                               util.deleteNode(node);
+                               layout.removeView(target);
+                       }
+                       layout.setCutTarget(null, false);
+               } else if (status == ScreenStatus.RenameNode) {
+                       long id = target.getNodeId();
+                       Node node = dao.searchById(id);
+                       if (node != null) {
+                               String text = msgEditText.getText().toString();
+
+                               dao.updateName(node, text);
+                       }
+                       layout.setCutTarget(null, false);
+               }
+
+               closeIME(v);
+
+               layout.clearTarget();
+               updateList();
+               setStatus(ScreenStatus.Normal);
+       }
+
+       private void msgCancelOnClick(View v) {
+               closeIME(v);
+
+               setStatus(ScreenStatus.Normal);
+       }
+
+       private void closeIME(View v) {
+               InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+               imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
+       }
+
+       public void execute(long srcId, long dstId) {
+               try {
+                       removeAllNodeView();
+
+                       NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+                       if (srcId < 0) {
+                               // TODO
+                       }
+                       if (dstId < 0) {
+                               // TODO
+                       }
+
+                       Node src = dao.searchById(srcId);
+                       Node dst = null;
+                       if (srcId == dstId) {
+                               dst = src;
+                       } else {
+                               dst = dao.searchById(dstId);
+                       }
+
+                       if (dstId == src.getParent()) {
+                               // 同じ場所に移動
+                               return;
+                       }
+                       if (!isFileNode(src) && !isMovable(srcId, dstId)) {
+                               // 再帰的な移動
+                               return;
+                       }
+
+                       Node sp = dao.searchById(src.getParent());
+                       if (sp == null) {
+                               // TODO
+                       }
+                       Node dp = null;
+                       if (src.getParent() == dst.getParent()) {
+                               dp = sp;
+                       } else {
+                               dp = dao.searchById(dst.getParent());
+                       }
+                       if (dp == null) {
+                               // TODO
+                       }
+
+                       // TODO DBへのアクセス
+                       // sp.remove(src.getId());
+                       SQLiteDatabase db = DatabaseHelper.getInstance()
+                                       .getSQLiteDatabase();
+                       db.beginTransaction();
+                       try {
+                               dao.removeChildrenIdNT(sp, src.getId());
+                               if (dst instanceof DirNode) {
+                                       // dst.add(src.getId());
+                                       dao.updateParentNT(src, dst.getId());
+                                       dao.addChildrenIdNT(dst, src.getId());
+                               } else if (dst instanceof FileNode) {
+                                       // dp.add(src.getId());
+                                       dao.updateParentNT(src, dp.getId());
+                                       dao.addChildrenIdNT(dp, src.getId());
+                               }
+
+                               db.setTransactionSuccessful();
+                       } finally {
+                               db.endTransaction();
+                       }
+               } finally {
+                       updateList();
+               }
+       }
+
+       private boolean isMovable(long srcId, long dstId) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               while (dstId >= 0) {
+                       if (srcId == dstId) {
+                               return false;
+                       }
+                       Node node = dao.searchById(dstId);
+                       if (node == null) {
+                               // TODO エラー
+                               return false;
+                       }
+                       if (!(node instanceof DirNode)) {
+                               return true;
+                       }
+                       dstId = node.getParent();
+               }
+               return true;
+       }
+
+       public void execute(long id) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               Node node = dao.searchById(id);
+               if (node == null) {
+                       // TODO
+               }
+               node.toggleStatus();
+               Status status = node.getStatus();
+
+               dao.updateStatus(node, status);
+
+               // removeAllNodeView();
+               updateList();
+       }
+
+       public void executeView(long id) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               Node node = dao.searchById(id);
+               if (!isFileNode(node)) {
+                       return;
+               }
+               String guid = node.getGuid();
+
+               EvernoteIntentUtil util = EvernoteIntentUtil.getInstance();
+               util.viewNote(this, guid);
+       }
+
+       public void targetSelectedChanged(boolean status) {
+               setStatus();
+       }
+
+       public void removeAllNodeView() {
+               layout.removeAllViews();
+       }
+
+       private void setStatus() {
+               setStatus(status);
+       }
+
+       private void setStatus(ScreenStatus status) {
+               try {
+                       if (this.status != status) {
+                               this.status = status;
+                       }
+
+                       if (!lock) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainUpdateMsg));
+                               msgEditText.setVisibility(View.GONE);
+                               msgButtonLayout.setVisibility(View.GONE);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                               
+                               status = ScreenStatus.Normal;
+                               return;
+                       }
+
+                       if (status == ScreenStatus.Normal) {
+                               msgLayout.setVisibility(View.GONE);
+                               // mainMsgEditText.setText("");
+
+                               boolean leftButtonFlag = true;
+                               boolean rightButtonFlag = true;
+                               // boolean addButtonFlag = true;
+                               // boolean deleteButtonFlag = true;
+
+                               if (indent <= 0) {
+                                       leftButtonFlag = false;
+                               }
+
+                               // LabelIconView target = layout.getSelectedTarget();
+                               // NodeDao dao = (NodeDao) NodeDao.getInstance();
+                               // long id = -1;
+                               // Node node = null;
+                               // if (target != null) {
+                               // id = target.getNodeId();
+                               // node = dao.searchById(id);
+                               // }
+                               // if (target == null || node == null || !(node instanceof
+                               // DirNode))
+                               // {
+                               // addButtonFlag = false;
+                               // }
+                               // if (target == null || (node != null && node instanceof
+                               // RootNode))
+                               // {
+                               // deleteButtonFlag = false;
+                               // }
+                               layout.setElabledTouchEvent(true);
+
+                               leftButton.setEnabled(leftButtonFlag);
+                               rightButton.setEnabled(rightButtonFlag);
+                               // addButton.setEnabled(addButtonFlag);
+                               // deleteButton.setEnabled(deleteButtonFlag);
+                       } else if (status == ScreenStatus.AddNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.VISIBLE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainAddMsg));
+                               msgEditText.setText("");
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       } else if (status == ScreenStatus.DeleteNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.GONE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainDeleteMsg));
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       } else if (status == ScreenStatus.RenameNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.VISIBLE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainRenameMsg));
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       }
+               } catch (Throwable e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+}
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/5c/d02da2bb22f800111341a60c8ca6b985 b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/5c/d02da2bb22f800111341a60c8ca6b985
new file mode 100644 (file)
index 0000000..913642c
--- /dev/null
@@ -0,0 +1,457 @@
+package com.yuji.ef;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import android.content.Context;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnLongClickListener;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.AnimationUtils;
+import android.widget.FrameLayout;
+
+public class IconFrameLayout extends FrameLayout implements OnLongClickListener {
+       private EverFolderActivity activity = null;
+
+       private LabelIconView target = null;
+       private LabelIconView destTarget = null;
+       private LabelIconView selectedTarget = null;
+       private LabelIconView cutTarget = null;
+       private List<LabelIconView> labelIconViewList = new ArrayList<LabelIconView>();
+
+       private Animation anime;
+       private int currentX;
+       private int currentY;
+       private int offsetX;
+       private int offsetY;
+       private boolean longClickFlg = false;
+       private IconScrollView scrollView;
+       private Context context = this.getContext();
+       private boolean elabledTouchEvent = true;
+
+       public IconFrameLayout(Context context) {
+               super(context);
+       }
+
+       public IconFrameLayout(Context context, AttributeSet attrs) {
+               super(context, attrs);
+       }
+
+       public IconFrameLayout(Context context, AttributeSet attrs, int defStyle) {
+               super(context, attrs, defStyle);
+       }
+
+       public void setActivity(EverFolderActivity activity) {
+               this.activity = activity;
+       }
+
+       @Override
+       protected void onLayout(boolean changed, int left, int top, int right,
+                       int bottom) {
+               super.onLayout(changed, left, top, right, bottom);
+
+               int size = this.getChildCount();
+               for (int i = 0; i < size; i++) {
+                       LabelIconView vv = (LabelIconView) this.getChildAt(i);
+                       int x2 = vv.getInitX();
+                       int y2 = vv.getInitY();
+                       // vv.init(x2, y2);
+                       vv.layout(x2, y2, x2 + vv.getWidth(), y2 + vv.getHeight());
+               }
+       }
+
+       public LabelIconView getSelectedTarget() {
+               return selectedTarget;
+       }
+
+       public void addView(LabelIconView child) {
+               addView(child, true);
+       }
+
+       public void addView(LabelIconView child, boolean isAddView) {
+               if (isAddView) {
+                       super.addView(child);
+               }
+               labelIconViewList.add(child);
+       }
+
+       public void removeAllViews() {
+               super.removeAllViews();
+               labelIconViewList.clear();
+       }
+
+       public void moveTop(LabelIconView child) {
+               this.removeView(child);
+               this.addView(child);
+       }
+
+       private LabelIconView getView(int x, int y, LabelIconView v,
+                       List<LabelIconView> list, boolean flag) {
+               Rect rect = new Rect();
+
+               if (v != null) {
+                       if (flag) {
+                               v.getHitRect(rect);
+                               if (rect.contains(x, y)) {
+                                       return v;
+                               }
+                       }
+               }
+               for (LabelIconView view : list) {
+                       if (view != v) {
+                               view.getHitRect(rect);
+                               if (rect.contains(x, y)) {
+                                       return view;
+                               }
+                       }
+               }
+               return null;
+       }
+
+       public void setScrollView(final IconScrollView scrollView) {
+               this.scrollView = scrollView;
+               this.setOnLongClickListener(this);
+               // this.setLongClickable(true);
+
+               anime = AnimationUtils.loadAnimation(context, R.anim.sample);
+               anime.setAnimationListener(new AnimationListener() {
+                       public void onAnimationStart(Animation animation) {
+                       }
+
+                       public void onAnimationRepeat(Animation animation) {
+                       }
+
+                       public void onAnimationEnd(Animation animation) {
+                               // if (isBt2Click) {
+                               // bt2.performClick();
+                               // isBt2Click = false;
+                               // }
+                               clearTarget();
+                               target = null;
+                               destTarget = null;
+
+                               scrollView.setScrollable(true);
+                               scrollView.requestDisallowInterceptTouchEvent(false);
+                               scrollView.invalidate();
+                       }
+               });
+       }
+
+       public void refresh() {
+               if (selectedTarget != null) {
+                       boolean flag = false;
+                       long id = selectedTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       selectedTarget = view;
+                                       target = view;
+                                       setSelected(selectedTarget);
+                                       flag = true;
+                               }
+                       }
+                       if (!flag) {
+                               // 表示されなかった(CLOSEなど)
+                               selectedTarget = null;
+                               target = null;
+                       }
+               }
+               if (cutTarget != null) {
+                       boolean flag = false;
+                       long id = cutTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       cutTarget = view;
+                                       if (selectedTarget != cutTarget) {
+                                               clearColorFilter(cutTarget);
+                                       }
+                                       flag = true;
+                               }
+                       }
+                       if (!flag) {
+                               // 表示されなかった(CLOSEなど)
+                               cutTarget = null;
+                       }
+               }
+       }
+
+       public void clearTarget() {
+               if (selectedTarget != null) {
+                       clearColorFilter(selectedTarget);
+                       selectedTarget = null;
+               }
+               target = null;
+       }
+
+       public LabelIconView getCutTarget() {
+               return cutTarget;
+       }
+
+       public void setCutTarget(LabelIconView cutTarget) {
+               setCutTarget(cutTarget, true);
+       }
+
+       public void setCutTarget(LabelIconView cutTarget, boolean isUnselected) {
+               if (this.cutTarget != null){
+                       setAlpha(this.cutTarget);
+               }
+               this.cutTarget = cutTarget;
+               if (isUnselected) {
+                       selectedTarget = null;
+                       target = null;
+               }
+       }
+
+       private void setSelected(LabelIconView t) {
+               t.setAlpha(255);
+               t.setColorFilter(0x88ff0000, Mode.LIGHTEN);
+       }
+
+       private void setAlpha(LabelIconView v) {
+               v.setAlpha(255);
+       }
+
+       private void setGrayAlpha(LabelIconView v) {
+               v.setAlpha(128);
+       }
+
+       private void clearColorFilter(LabelIconView v) {
+               v.clearColorFilter();
+               if (v == cutTarget) {
+                       setGrayAlpha(v);
+               }
+       }
+
+       @Override
+       public boolean onTouchEvent(MotionEvent event) {
+               try {
+                       if (!isElabledTouchEvent()) {
+                               return super.onTouchEvent(event);
+                       }
+
+                       int x = (int) event.getRawX();
+                       int y = (int) event.getRawY();
+
+                       int dx = scrollView.getLeft();
+                       int dy = scrollView.getTop();
+
+                       x -= dx;
+                       y -= dy;
+
+                       int sx = x + scrollView.getScrollX();
+                       int sy = y + scrollView.getScrollY();
+                       LabelIconView v = getView(sx, sy, target, labelIconViewList, true);
+                       LabelIconView obj = (LabelIconView) v;
+
+                       // int size = labelIconViewList.size();
+                       if (target == null) {
+                               target = obj;
+                       }
+                       if (target == null) {
+                               return super.onTouchEvent(event);
+                       }
+
+                       // コメントにすると何が起きるか?
+                       // scrollView.requestDisallowInterceptTouchEvent(true);
+
+                       if (event.getAction() == MotionEvent.ACTION_MOVE) {
+                               if (!longClickFlg) {
+                                       return super.onTouchEvent(event);
+                               }
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                               }
+                               obj = target;
+
+                               int sh = scrollView.getHeight();
+                               int lh = this.getHeight();
+                               int maxY = lh - sh;
+                               int py = scrollView.getScrollY();
+                               int sdy = 10;
+                               int N = 100;
+                               if (y < N) {
+                                       if (py > 0) {
+                                               if (py < sdy) {
+                                                       sdy = py;
+                                               }
+                                               scrollView.smoothScrollTo(0, py - sdy);
+                                               currentY -= sdy;
+                                       }
+                               } else if (sh - y < N) {
+                                       if (py < maxY) {
+                                               if (maxY - py < sdy) {
+                                                       sdy = maxY - py;
+                                               }
+                                               scrollView.smoothScrollTo(0, py + sdy);
+                                               currentY += sdy;
+                                       }
+                               }
+
+                               int diffX = offsetX - x;
+                               int diffY = offsetY - y;
+
+                               currentX -= diffX;
+                               currentY -= diffY;
+                               obj.layout(currentX, currentY, currentX + obj.getWidth(),
+                                               currentY + obj.getHeight());
+
+                               offsetX = x;
+                               offsetY = y;
+
+                               v = getView(sx, sy, target, labelIconViewList, false);
+                               if (destTarget == null) {
+                                       if (v != null) {
+                                               destTarget = v;
+                                               setGrayAlpha(destTarget);
+                                       }
+                               } else {
+                                       if (v != destTarget) {
+                                               setAlpha(destTarget);
+                                               destTarget = v;
+                                               if (destTarget != null) {
+                                                       setGrayAlpha(destTarget);
+                                               }
+                                       }
+                               }
+                       } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
+                               // if (obj == target){
+                               if (obj != null) {
+                                       if (obj != target) {
+                                               clearColorFilter(target);
+                                               target = obj;
+                                       }
+                                       // if (target instanceof StatusIconView){
+                                       if (target.getSelectedView(sx - target.getLeft(), sy
+                                                       - target.getTop()) instanceof StatusIconView) {
+                                               // StatusIconView siv = (StatusIconView) target;
+                                               // LabelIconView rv = siv.getRoot();
+                                               // long id = rv.getNodeId();
+                                               long id = target.getNodeId();
+                                               target = null;
+
+                                               activity.execute(id);
+                                               return super.onTouchEvent(event);
+                                               // return true;
+                                       }
+
+                                       if (selectedTarget != null && selectedTarget == target) {
+                                               long id = selectedTarget.getNodeId();
+
+                                               clearColorFilter(target);
+                                               target = null;
+                                               selectedTarget = target;
+                                               activity.targetSelectedChanged(true);
+destTarget = null;                                     
+
+                                               activity.executeView(id);
+
+                                               return super.onTouchEvent(event);
+                                       }
+
+                                       // ここに移動
+                                       scrollView.requestDisallowInterceptTouchEvent(true);
+
+                                       offsetX = x;
+                                       offsetY = y;
+                                       // TODO
+                                       currentX = obj.getLeft();
+                                       currentY = obj.getTop();
+
+                                       setSelected(target);
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(true);
+                                       
+                                       // コメントにしたが、デグレードするかも
+                                       // scrollView.setScrollable(false);
+                               } else {
+                                       clearColorFilter(target);
+                                       target = null;
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(false);
+                               }
+                               // return false;
+                       } else if (event.getAction() == MotionEvent.ACTION_UP) {
+                               if (!longClickFlg) {
+                                       return super.onTouchEvent(event);
+                               }
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                                       // return true;
+                               }
+                               obj = target;
+
+                               // obj.setVisibility(View.GONE);
+                               if (destTarget == null || destTarget instanceof StatusIconView) {
+                                       obj.setAnimation(anime);
+                                       obj.startAnimation(anime);
+                                       // layout.removeView(obj);
+
+                                       int srcX = target.getInitX();
+                                       int srcY = target.getInitY();
+                                       target.layout(srcX, srcY, srcX + target.getWidth(), srcY
+                                                       + target.getHeight());
+                                       setAlpha(target);
+                                       
+                                       target = null;
+                                       destTarget = null;                                      
+                               } else {
+                                       long src = target.getNodeId();
+                                       long dst = destTarget.getNodeId();
+                                       activity.execute(src, dst);
+
+                                       // TODO
+                                       target = null;
+                                       destTarget = null;
+
+                                       // T29171
+                                       clearTarget();
+
+                                       scrollView.setScrollable(true);
+                                       scrollView.requestDisallowInterceptTouchEvent(false);
+                                       scrollView.invalidate();
+                               }
+
+                               longClickFlg = false;
+                       }
+
+                       return super.onTouchEvent(event);
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       return false;
+               }
+       }
+
+       @Override
+       public boolean onLongClick(View view) {
+               if (!isElabledTouchEvent()) {
+                       return true;
+               }
+               if (target == null) {
+                       return false;
+               }
+               if (target instanceof StatusIconView) {
+                       return false;
+               }
+
+               LabelIconView v = (LabelIconView) target;
+               setGrayAlpha(v);
+               v.clearColorFilter();
+
+               moveTop(target);
+
+               longClickFlg = true;
+               return true;
+       }
+
+       public boolean isElabledTouchEvent() {
+               return elabledTouchEvent;
+       }
+
+       public void setElabledTouchEvent(boolean elabledTouchEvent) {
+               this.elabledTouchEvent = elabledTouchEvent;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/5e/405cb4e37af9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/5e/405cb4e37af9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..1b7abaf
--- /dev/null
@@ -0,0 +1,17 @@
+package com.yuji.ef.exception;
+
+public class EfException extends Exception {
+       private Error error;
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 1L;
+
+       public EfException(Error error){
+               this.error = error;
+       }
+       
+       public Error getError(){
+               return error;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/5f/c05915647bf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/5f/c05915647bf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..f1e832e
--- /dev/null
@@ -0,0 +1,318 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.RollbackException;
+
+public class FolderUtil {
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               List<Notebook> noteBookList = util.getNoteBookList();
+
+               long id;
+               Node top = nodeDao.searchRoot(db);
+
+               for (Notebook notebook : noteBookList) {
+                       String guid = notebook.getGuid();
+                       String name = notebook.getName();
+
+                       Node oldBook = nodeDao.searchByGuid(db, guid);
+                       if (oldBook == null) {
+                               DirNode dirNode = new DirNode(name, null);
+                               guid = notebook.getGuid();
+                               dirNode.setGuid(guid);
+
+                               id = addDirNodeNT(top, dirNode);
+                       } else {
+                               String oldName = oldBook.getName();
+                               if (!name.equals(oldName)) {
+                                       // 名称が異なる
+                                       nodeDao.updateNameNT(oldBook, name);
+                               }
+                       }
+               }
+
+               // 削除
+               List<Node> list = nodeDao.searchBook(db);
+               for (Node node : list) {
+                       boolean isFound = false;
+                       for (Notebook book : noteBookList) {
+                               String guid = book.getGuid();
+                               if (node.getGuid().equals(guid)) {
+                                       isFound = true;
+                                       break;
+                               }
+                       }
+                       if (!isFound) {
+                               if (CommonUtil.isNull(node.getChildrenString())) {
+                                       // 子が無い場合は削除
+                                       nodeDao.deleteNT(node.getId());
+                               } else {
+                                       // フォルダに変更
+                                       nodeDao.updateGuidNT(node, null);
+                               }
+                       }
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) throws RollbackException {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) throws RollbackException {
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               if (!util.isLoggedIn()){
+                       throw new RollbackException(EfError.NO_LOGIN);
+               }
+               
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+
+               db.beginTransaction();
+               try {
+                       if (isRoot) {
+                               if (nodeDao.isEmpty()) {
+                                       Node top = new RootNode("/", null);
+                                       top.setStatus(Node.Status.OPEN);
+                                       long id = nodeDao.addNT(top);
+                                       top.setId(id);
+                               }
+                       }
+
+                       if (isBook) {
+                               updateNotebook(db);
+                       }
+                       if (isNote) {
+                               nodeDao.updateNoteFlag(0);
+                               updateNote(db);
+                               deleteNode(db);                 
+                       }
+                       
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/6/40bd3ea07df9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/6/40bd3ea07df9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..a1f4912
--- /dev/null
@@ -0,0 +1,159 @@
+package com.yuji.ef.utility;
+
+import java.lang.ref.WeakReference;
+
+import android.app.Activity;
+import android.app.ProgressDialog;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnKeyListener;
+import android.os.AsyncTask;
+import android.view.KeyEvent;
+
+public class AsyncTaskCommand extends AsyncTask<String, Integer, String> {
+       private WeakReference<Activity> activityRef;
+       private AsyncTaskIF command;
+       private ProgressDialog dialog;
+       private boolean isCancel = false;
+       private boolean isDialog = true;
+       private int status = -1;
+
+       private String title = "";
+       private String buttonTitle = "";
+       private boolean cancelable = true;
+
+       @SuppressWarnings({ "rawtypes", "unchecked" })
+       public AsyncTaskCommand(Activity activity, AsyncTaskIF command) {
+               this.activityRef = new WeakReference(activity);
+               this.command = command;
+       }
+
+       @Override
+       protected void onPreExecute() {
+               Debug.d(this, "onPreExecute start");
+
+               Activity activity = activityRef.get();
+               if (activity == null) {
+                       return;
+               }
+               if (isDialog) {
+                       dialog = new ProgressDialog(activity);
+                       dialog.setIndeterminate(true);
+                       dialog.setCancelable(cancelable);
+                       dialog.setTitle(title);
+                       if (cancelable) {
+                               dialog.setButton(buttonTitle,
+                                               new DialogInterface.OnClickListener() {
+                                                       public void onClick(DialogInterface dialog,
+                                                                       int which) {
+                                                               dialog.cancel();
+                                                               AsyncTaskCommand.this.cancel(true);
+                                                       }
+                                               });
+                               dialog.setOnKeyListener(new OnKeyListener() {
+                                       public boolean onKey(DialogInterface dialog, int keyCode,
+                                                       KeyEvent event) {
+                                               switch (event.getKeyCode()) {
+                                               case KeyEvent.KEYCODE_SEARCH:
+                                                       return true;
+                                               }
+                                               return false;
+                                       }
+                               });
+                       }
+                       dialog.show();
+               }
+               Debug.d(this, "onPreExecute end");
+       }
+
+       @Override
+       protected String doInBackground(String... arg0) {
+               try {
+                       Debug.d(this, "doInBackground start");
+                       command.doExecute();
+                       status = command.getStatus();
+                       Debug.d(this, "doInBackground end");
+               } catch (RuntimeException e) {
+                       Debug.d(this, null, e);
+                       throw e;
+               } catch (Exception e) {
+                       Debug.d(this, null, e);
+               }
+               return null;
+       }
+
+       @Override
+       protected void onCancelled() {
+               Debug.d(this, "onCancelled start");
+
+               isCancel = true;
+
+               if (command != null) {
+                       command.cancel();
+               }
+               onPostExecute(null);
+               Debug.d(this, "onCancelled end");
+       }
+
+       @Override
+       protected void onPostExecute(String result) {
+               Debug.d(this, "onPostExecute start");
+
+               try {
+                       if (command != null) {
+                               command.done(isCancel);
+                               command = null;
+                       }
+                       if (dialog != null) {
+                               try {
+                                       dialog.dismiss();
+                               } catch (IllegalArgumentException e) {
+                                       ;
+                               }
+                               dialog = null;
+                       }
+                       activityRef = null;
+               } catch (RuntimeException e) {
+                       Debug.d(this, null, e);
+                       throw e;
+               }
+               Debug.d(this, "onPostExecute end");
+       }
+
+       public void stop() {
+               Debug.d(this, "stop start");
+
+               if (command != null) {
+                       isCancel = true;
+                       command.cancel();
+               }
+               // onPostExecute()のdialog.dismiss();でエラーとなるため
+               // 本質的な解決策ではない
+               // dialog = null;
+               if (dialog != null) {
+                       dialog.dismiss();
+                       dialog = null;
+               }
+
+               Debug.d(this, "stop end");
+       }
+
+       public void setDialog(boolean b) {
+               isDialog = b;
+       }
+
+       public int getResultStatus() {
+               return status;
+       }
+
+       public void setTitle(String title) {
+               this.title = title;
+       }
+
+       public void setButtonTitle(String buttonTitle) {
+               this.buttonTitle = buttonTitle;
+       }
+
+       public void setCancelable(boolean cancelable) {
+               this.cancelable = cancelable;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/62/00ee5f2c80f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/62/00ee5f2c80f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..97caf94
--- /dev/null
@@ -0,0 +1,320 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.RollbackException;
+
+public class FolderUtil {
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               List<Notebook> noteBookList = util.getNoteBookList();
+
+               long id;
+               Node top = nodeDao.searchRoot(db);
+
+               for (Notebook notebook : noteBookList) {
+                       String guid = notebook.getGuid();
+                       String name = notebook.getName();
+
+                       Node oldBook = nodeDao.searchByGuid(db, guid);
+                       if (oldBook == null) {
+                               DirNode dirNode = new DirNode(name, null);
+                               guid = notebook.getGuid();
+                               dirNode.setGuid(guid);
+
+                               id = addDirNodeNT(top, dirNode);
+                       } else {
+                               String oldName = oldBook.getName();
+                               if (!name.equals(oldName)) {
+                                       // 名称が異なる
+                                       nodeDao.updateNameNT(oldBook, name);
+                               }
+                       }
+               }
+
+               // 削除
+               List<Node> list = nodeDao.searchBook(db);
+               for (Node node : list) {
+                       boolean isFound = false;
+                       for (Notebook book : noteBookList) {
+                               String guid = book.getGuid();
+                               if (node.getGuid().equals(guid)) {
+                                       isFound = true;
+                                       break;
+                               }
+                       }
+                       if (!isFound) {
+                               if (CommonUtil.isNull(node.getChildrenString())) {
+                                       // 子が無い場合は削除
+                                       nodeDao.deleteNT(node.getId());
+                               } else {
+                                       // フォルダに変更
+                                       nodeDao.updateGuidNT(node, null);
+                               }
+                       }
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db) throws RollbackException {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+               // FOO
+               throw new RollbackException();
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) throws RollbackException {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) throws RollbackException {
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               if (!util.isLoggedIn()){
+                       throw new RollbackException(EfError.NO_LOGIN);
+               }
+               
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+
+               db.beginTransaction();
+               try {
+                       if (isRoot) {
+                               if (nodeDao.isEmpty()) {
+                                       Node top = new RootNode("/", null);
+                                       top.setStatus(Node.Status.OPEN);
+                                       long id = nodeDao.addNT(top);
+                                       top.setId(id);
+                               }
+                       }
+
+                       if (isBook) {
+                               updateNotebook(db);
+                       }
+                       if (isNote) {
+                               nodeDao.updateNoteFlag(0);
+                               updateNote(db);
+                               deleteNode(db);                 
+                       }
+                       
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/63/7073c6177ff9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/63/7073c6177ff9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..c470b38
--- /dev/null
@@ -0,0 +1,84 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+
+import com.yuji.ef.Initialize;
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.Debug;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+       }
+
+       public void doExecute() throws EfException {
+               try {
+//                     FolderUtil test = FolderUtil.getInstance();
+//                     test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e){
+                       EfError error = e.getError();
+                       // TODO
+                       EfException.msg(Initialize.getContext(), "データの更新に失敗しました(a)");
+                       Debug.d(this, null, e);
+                       throw e;
+               } catch (Exception e) {
+                       EfException.msg(Initialize.getContext(), "データの更新に失敗しました(b)");
+                       throw new EfException(EfError.SYSTEM);
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+//             if (context != null) {
+//                     Intent intent = new Intent(Constant.ACTION_UPDATE);
+//                     context.sendBroadcast(intent);
+//             }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/64/1075340d7ff9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/64/1075340d7ff9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..d015bd2
--- /dev/null
@@ -0,0 +1,84 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+
+import com.yuji.ef.Initialize;
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.Debug;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+       }
+
+       public void doExecute() throws EfException {
+               try {
+//                     FolderUtil test = FolderUtil.getInstance();
+//                     test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e){
+                       EfError error = e.getError();
+                       // TODO
+                       EfError.msg(Initialize.getContext(), "データの更新に失敗しました(a)");
+                       Debug.d(this, null, e);
+                       throw e;
+               } catch (Exception e) {
+                       e.msg(context, "データの更新に失敗しました(b)");
+                       throw new EfException(EfError.SYSTEM);
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+//             if (context != null) {
+//                     Intent intent = new Intent(Constant.ACTION_UPDATE);
+//                     context.sendBroadcast(intent);
+//             }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/66/8017abf27ef9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/66/8017abf27ef9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..589c0ed
--- /dev/null
@@ -0,0 +1,85 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.Debug;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+       private Context context;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+               this.context = context;
+       }
+
+       public void doExecute() throws EfException {
+               try {
+//                     FolderUtil test = FolderUtil.getInstance();
+//                     test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e){
+                       EfError error = e.getError();
+                       // TODO
+                       e.msg(context, "データの更新に失敗しました(a)");
+                       Debug.d(this, null, e);
+                       throw e;
+               } catch (Exception e) {
+                       e.msg(context, "データの更新に失敗しました(b)");
+                       throw new EfException(EfError.SYSTEM);
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+//             if (context != null) {
+//                     Intent intent = new Intent(Constant.ACTION_UPDATE);
+//                     context.sendBroadcast(intent);
+//             }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/6c/907f8c3d85f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/6c/907f8c3d85f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..67cd8af
--- /dev/null
@@ -0,0 +1,85 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+
+import com.yuji.ef.Initialize;
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.Debug;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+       }
+
+       public void doExecute() throws EfException {
+               try {
+                       // FolderUtil test = FolderUtil.getInstance();
+                       // test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e) {
+                       EfError error = e.getError();
+                       // TODO
+                       EfException.msg(Initialize.getContext(), "データの更新に失敗しました(a)");
+                       Debug.d(this, null, e);
+                       throw e;
+               } catch (Exception e) {
+                       // TODO
+                       EfException.msg(Initialize.getContext(), "データの更新に失敗しました(b)");
+                       throw new EfException(EfError.SYSTEM);
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+               // if (context != null) {
+               // Intent intent = new Intent(Constant.ACTION_UPDATE);
+               // context.sendBroadcast(intent);
+               // }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/71/c0952149e8fa00111e7df5849a0f493e b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/71/c0952149e8fa00111e7df5849a0f493e
new file mode 100644 (file)
index 0000000..fb96920
--- /dev/null
@@ -0,0 +1,53 @@
+package com.yuji.ef.common;
+
+import android.content.Intent;
+
+public class Constant {
+/*
+       public static final String PREF_USER = "USER";
+       public static final String PREF_PASSWORD = "PASSWORD";
+       public static final String PREF_NOTE_ITEM_TYPE = "NOTE_ITEM_TYPE";
+       public static final String PREF_NOTE_ITEM_GUID = "NOTE_ITEM_GUID";
+       public static final String PREF_NOTE_ITEM_TYPE_TMP = "NOTE_ITEM_TYPE_TMP";
+       public static final String PREF_NOTE_ITEM_GUID_TMP = "NOTE_ITEM_GUID_TMP";
+       public static final String PREF_NOTE_ITEM_GUID_TYPE_TMP = "NOTE_ITEM_GUID_TYPE_TMP";
+       public static final String PREF_NOTE_ITEM_TEXT = "NOTE_ITEM_TEXT";
+       public static final String PREF_NOTE_ORDER = "NOTE_ORDER";
+       public static final String PREF_NOTE_ORDER_BY = "NOTE_ORDER_BY";
+       public static final String PREF_AUTO_UPDATE = "AUTO_UPDATE";
+       public static final String PREF_UPDATE_TIME = "UPDATE_TIME";
+       
+       public static final String EXTRA_GUID = "GUID";
+       public static final String EXTRA_TITLE = "TITLE";
+
+       public static final int NOTE_ITEM_TYPE_NONE = -1;
+       public static final int NOTE_ITEM_TYPE_ALL = 0;
+       public static final int NOTE_ITEM_TYPE_NOTE_BOOK = 1;
+       public static final int NOTE_ITEM_TYPE_TAG = 2;
+       
+       public static final int NOTE_ORDER_NONE = -1;
+       public static final int NOTE_ORDER_CREATE = 0;
+       public static final int NOTE_ORDER_UPDATE = 1;
+       public static final int NOTE_ORDER_TEXT = 2;
+
+       public static final int NOTE_ORDER_BY_ASC = 0;
+       public static final int NOTE_ORDER_BY_DES = 1;
+
+       public static final int OFF = 0;
+       public static final int ON = 1;
+       
+       public static final String ACTION_UPDATE = "com.yuji.ec.UPDATE";
+*/
+       public static final int OFF = 0;
+       public static final int ON = 1;
+
+       public static final String ACTION_UPDATE = "com.yuji.ef.UPDATE";
+       public static final String ACTION_MESSAGE = "com.yuji.ef.MESSAGE";
+       public static final String ACTION_MESSAGE_MESSAGE = "MESSAGE";
+       
+       //public static final String PREF_UPDATE_TASK_STATUS = "UPDATE_TASK_STATUS";
+       public static final String PREF_UPDATE_TIME = "UPDATE_TIME";
+
+       public static final String LOCK_UPDATE_NOTE = "UPDATE_NOTE";
+
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/73/a07a4bf77ef9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/73/a07a4bf77ef9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..1f46fff
--- /dev/null
@@ -0,0 +1,83 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.Debug;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+       }
+
+       public void doExecute() throws EfException {
+               try {
+//                     FolderUtil test = FolderUtil.getInstance();
+//                     test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e){
+                       EfError error = e.getError();
+                       // TODO
+                       e.msg(context, "データの更新に失敗しました(a)");
+                       Debug.d(this, null, e);
+                       throw e;
+               } catch (Exception e) {
+                       e.msg(context, "データの更新に失敗しました(b)");
+                       throw new EfException(EfError.SYSTEM);
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+//             if (context != null) {
+//                     Intent intent = new Intent(Constant.ACTION_UPDATE);
+//                     context.sendBroadcast(intent);
+//             }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/7a/b07cf03f84f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/7a/b07cf03f84f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..9c8d586
--- /dev/null
@@ -0,0 +1,35 @@
+package com.yuji.ef.exception;
+
+import android.content.Context;
+import android.os.Handler;
+import android.widget.Toast;
+
+public class EfException extends Exception {
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 2248123315072811891L;
+       private EfError error;
+
+       public EfException(EfError error) {
+               this.error = error;
+       }
+
+       public EfError getError() {
+               return error;
+       }
+
+       public static void msg(Context context, final String msg) {
+               final Handler handler = new Handler();
+               new Thread(new Runnable() {
+                       @Override
+                       public void run() {
+                               handler.post(new Runnable() {
+                                       public void run() {
+                                               Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
+                                       }
+                               });
+                       }
+               }).start();
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/7f/8002d8c37cf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/7f/8002d8c37cf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..3dc2191
--- /dev/null
@@ -0,0 +1,83 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+import android.content.Intent;
+
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.Debug;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+       private Context context;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+               if (activity != null) {
+                       context = activity.getApplicationContext();
+               }
+       }
+
+       public void doExecute() {
+               try {
+//                     FolderUtil test = FolderUtil.getInstance();
+//                     test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e){
+                       EfError error = e.getError();
+                       Debug.d(this, null, e);
+               } catch (Exception e) {
+                       throw new EfException(EfError.SYSTEM);
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+//             if (context != null) {
+//                     Intent intent = new Intent(Constant.ACTION_UPDATE);
+//                     context.sendBroadcast(intent);
+//             }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/80/403f4c8086f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/80/403f4c8086f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..5ee76e3
--- /dev/null
@@ -0,0 +1,35 @@
+package com.yuji.ef.exception;
+
+import android.content.Context;
+import android.os.Handler;
+import android.widget.Toast;
+
+public class EfException extends Exception {
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 2248123315072811891L;
+       private EfError error;
+
+       public EfException(EfError error) {
+               this.error = error;
+       }
+
+       public EfError getError() {
+               return error;
+       }
+
+       public static void msg(final Context context, final String msg) {
+               final Handler handler = new Handler();
+               new Thread(new Runnable() {
+                       @Override
+                       public void run() {
+                               handler.post(new Runnable() {
+                                       public void run() {
+                                               Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
+                                       }
+                               });
+                       }
+               }).start();
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/87/106dffab7cf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/87/106dffab7cf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..247c5d5
--- /dev/null
@@ -0,0 +1,82 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+import android.content.Intent;
+
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+       private Context context;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+               if (activity != null) {
+                       context = activity.getApplicationContext();
+               }
+       }
+
+       public void doExecute() {
+               try {
+//                     FolderUtil test = FolderUtil.getInstance();
+//                     test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e){
+                       EfError error = e.getError();
+               } catch (Exception e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+//             if (context != null) {
+//                     Intent intent = new Intent(Constant.ACTION_UPDATE);
+//                     context.sendBroadcast(intent);
+//             }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/8d/d08d49197bf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/8d/d08d49197bf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..e1a23bf
--- /dev/null
@@ -0,0 +1,316 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+
+public class FolderUtil {
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               List<Notebook> noteBookList = util.getNoteBookList();
+
+               long id;
+               Node top = nodeDao.searchRoot(db);
+
+               for (Notebook notebook : noteBookList) {
+                       String guid = notebook.getGuid();
+                       String name = notebook.getName();
+
+                       Node oldBook = nodeDao.searchByGuid(db, guid);
+                       if (oldBook == null) {
+                               DirNode dirNode = new DirNode(name, null);
+                               guid = notebook.getGuid();
+                               dirNode.setGuid(guid);
+
+                               id = addDirNodeNT(top, dirNode);
+                       } else {
+                               String oldName = oldBook.getName();
+                               if (!name.equals(oldName)) {
+                                       // 名称が異なる
+                                       nodeDao.updateNameNT(oldBook, name);
+                               }
+                       }
+               }
+
+               // 削除
+               List<Node> list = nodeDao.searchBook(db);
+               for (Node node : list) {
+                       boolean isFound = false;
+                       for (Notebook book : noteBookList) {
+                               String guid = book.getGuid();
+                               if (node.getGuid().equals(guid)) {
+                                       isFound = true;
+                                       break;
+                               }
+                       }
+                       if (!isFound) {
+                               if (CommonUtil.isNull(node.getChildrenString())) {
+                                       // 子が無い場合は削除
+                                       nodeDao.deleteNT(node.getId());
+                               } else {
+                                       // フォルダに変更
+                                       nodeDao.updateGuidNT(node, null);
+                               }
+                       }
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               throw new RollbackException()
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               // TODO
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       // TODO
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       // TODO
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       // TODO
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) {
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               if (!util.isLoggedIn()){
+                       return;
+               }
+               
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+
+               db.beginTransaction();
+               try {
+                       if (isRoot) {
+                               if (nodeDao.isEmpty()) {
+                                       Node top = new RootNode("/", null);
+                                       top.setStatus(Node.Status.OPEN);
+                                       long id = nodeDao.addNT(top);
+                                       top.setId(id);
+                               }
+                       }
+
+                       if (isBook) {
+                               updateNotebook(db);
+                       }
+                       if (isNote) {
+                               nodeDao.updateNoteFlag(0);
+                               updateNote(db);
+                               deleteNode(db);                 
+                       }
+                       
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/8e/e0f507b5e8fa00111e7df5849a0f493e b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/8e/e0f507b5e8fa00111e7df5849a0f493e
new file mode 100644 (file)
index 0000000..f808bbe
--- /dev/null
@@ -0,0 +1,211 @@
+package com.yuji.ef.service;
+
+import java.util.Calendar;
+
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Binder;
+import android.os.IBinder;
+import android.widget.Toast;
+
+import com.yuji.ef.Initialize;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.pref.EditPrefUtil;
+import com.yuji.ef.task.NoteUpdateTask;
+import com.yuji.ef.utility.DateUtil;
+import com.yuji.ef.utility.Debug;
+import com.yuji.ef.utility.EvernoteUtil;
+import com.yuji.ef.utility.NetworkUtil;
+
+public class NoteUpdatorService extends Service {
+       private static final boolean DEBUG = false;
+
+       public class KitchenTimerBinder extends Binder {
+               public NoteUpdatorService getService() {
+                       return NoteUpdatorService.this;
+               }
+       }
+
+       public static final String ACTION = "NoteUpdatorService";
+       public static final String ACTION_START = "START";
+       private static final int DS = 60;
+       private EditPrefUtil pref = new EditPrefUtil(this);
+       private KitchenTimerBinder binder = new KitchenTimerBinder();
+       private String action = null;
+
+       @Override
+       public void onCreate() {
+               super.onCreate();
+
+               if (DEBUG) {
+                       Toast toast = Toast.makeText(getApplicationContext(), "onCreate()",
+                                       Toast.LENGTH_SHORT);
+                       toast.show();
+               }
+       }
+
+       private Runnable task = new Runnable() {
+               public void run() {
+                       try {
+                               if (action.equals(ACTION_START)) {
+                                       // 初期起動
+                               } else {
+                                       // タイマー起動
+                                       synchronized (binder) {
+                                               LockDao dao = (LockDao) LockDao.getInstance();
+                                               try {
+                                                       if (!NetworkUtil
+                                                                       .isConnected(NoteUpdatorService.this)) {
+                                                               return;
+                                                       }
+                                                       EvernoteUtil util = EvernoteUtil.getInstance();
+                                                       if (!util.isLoggedIn()) {
+                                                               return;
+                                                       }
+                                                       boolean b = dao.lock(NoteUpdatorService.this,
+                                                                       Constant.LOCK_UPDATE_NOTE);
+                                                       if (b) {
+                                                               execute();
+                                                       }
+                                               } catch (Exception e) {
+                                                       Debug.d(this, null, e);
+                                               } finally {
+                                                       // ロック未取得でも解除する(ゴミ掃除)
+                                                       dao.unlock(NoteUpdatorService.this,
+                                                                       Constant.LOCK_UPDATE_NOTE);
+
+                                                       Intent intent = new Intent(Constant.ACTION_UPDATE);
+                                                       sendBroadcast(intent);
+                                               }
+                                       }
+                               }
+                       } finally {
+                               setNextTime(NoteUpdatorService.this);
+                               NoteUpdatorService.this.stopSelf();
+                       }
+               }
+
+               private void execute() throws EfException {
+                       Initialize.initialize(NoteUpdatorService.this);
+
+                       NoteUpdateTask task = new NoteUpdateTask(null, true, true, true);
+                       task.doExecute();
+               }
+       };
+
+       @Override
+       public void onStart(Intent intent, int startId) {
+               super.onStart(intent, startId);
+
+               action = intent.getAction();
+               action = (action == null) ? "" : action;
+
+               if (DEBUG) {
+                       Toast toast = Toast.makeText(getApplicationContext(), "onStart() "
+                                       + action + " " + startId, Toast.LENGTH_SHORT);
+                       toast.show();
+               }
+
+               Thread thread = new Thread(null, task, "AlarmService_Service");
+               thread.start();
+       }
+
+       @Override
+       public void onDestroy() {
+               super.onDestroy();
+
+               if (DEBUG) {
+                       Toast toast = Toast.makeText(getApplicationContext(),
+                                       "onDestroy()", Toast.LENGTH_SHORT);
+                       toast.show();
+               }
+       }
+
+       @Override
+       public IBinder onBind(Intent intent) {
+               if (DEBUG) {
+                       Toast toast = Toast.makeText(getApplicationContext(), "onBind()",
+                                       Toast.LENGTH_SHORT);
+                       toast.show();
+               }
+
+               return binder;
+       }
+
+       @Override
+       public void onRebind(Intent intent) {
+               if (DEBUG) {
+                       Toast toast = Toast.makeText(getApplicationContext(), "onRebind()",
+                                       Toast.LENGTH_SHORT);
+                       toast.show();
+               }
+       }
+
+       @Override
+       public boolean onUnbind(Intent intent) {
+               if (DEBUG) {
+                       Toast toast = Toast.makeText(getApplicationContext(), "onUnbind()",
+                                       Toast.LENGTH_SHORT);
+                       toast.show();
+               }
+               return true;
+       }
+
+       public static void setNextTime(Context context) {
+               EditPrefUtil pref = new EditPrefUtil(context);
+
+               long updateTime = pref.getLong(Constant.PREF_UPDATE_TIME);
+               if (updateTime <= 0) {
+                       return;
+               }
+
+               Calendar cal = Calendar.getInstance();
+               // cal.add(Calendar.HOUR, (int) updateTime);
+               cal.add(Calendar.SECOND, (int) 15); // TODO
+
+               long t = cal.getTimeInMillis();
+               PendingIntent alarmSender = PendingIntent.getService(context, 0,
+                               new Intent(context, NoteUpdatorService.class), 0);
+               AlarmManager am = (AlarmManager) context
+                               .getSystemService(Context.ALARM_SERVICE);
+               am.set(AlarmManager.RTC, t, alarmSender);
+       }
+
+       public static void stopService(Context context) {
+               PendingIntent alarmSender = PendingIntent.getService(context, 0,
+                               new Intent(context, NoteUpdatorService.class),
+                               PendingIntent.FLAG_CANCEL_CURRENT);
+       }
+
+       public static boolean isSetAlarmSender(Context context) {
+               PendingIntent alarmSender = PendingIntent.getService(context, 0,
+                               new Intent(context, NoteUpdatorService.class),
+                               PendingIntent.FLAG_NO_CREATE);
+               return alarmSender != null;
+       }
+
+       public static void init(Context context) {
+               EditPrefUtil pref = new EditPrefUtil(context);
+
+               boolean isSet = NoteUpdatorService.isSetAlarmSender(context);
+               int updateTime = pref.getInt(Constant.PREF_UPDATE_TIME);
+
+               if (updateTime > 0) {
+                       if (!isSet) {
+                               // 再起動時
+                               setNextTime(context);
+                       }
+               } else {
+                       if (isSet) {
+                               // データ削除時
+                               // isSetはクリアされないが、問題ないので毎回よぶ
+                               stopService(context);
+                       }
+               }
+       }
+}
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/8f/5013a1c486f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/8f/5013a1c486f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..67cd8af
--- /dev/null
@@ -0,0 +1,85 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+
+import com.yuji.ef.Initialize;
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.Debug;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+       }
+
+       public void doExecute() throws EfException {
+               try {
+                       // FolderUtil test = FolderUtil.getInstance();
+                       // test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e) {
+                       EfError error = e.getError();
+                       // TODO
+                       EfException.msg(Initialize.getContext(), "データの更新に失敗しました(a)");
+                       Debug.d(this, null, e);
+                       throw e;
+               } catch (Exception e) {
+                       // TODO
+                       EfException.msg(Initialize.getContext(), "データの更新に失敗しました(b)");
+                       throw new EfException(EfError.SYSTEM);
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+               // if (context != null) {
+               // Intent intent = new Intent(Constant.ACTION_UPDATE);
+               // context.sendBroadcast(intent);
+               // }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/9/904658cf7ef9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/9/904658cf7ef9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..d4a5e75
--- /dev/null
@@ -0,0 +1,38 @@
+package com.yuji.ef;
+
+import android.content.Context;
+
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.pref.EditPrefUtil;
+import com.yuji.ef.service.NoteUpdatorService;
+import com.yuji.ef.utility.EvernoteUtil;
+
+public class Initialize {
+       public static Context context;
+       private static boolean isInit = true;
+       
+       public static void initialize(Context applicatonContext) {
+               if (!isInit) {
+                       return;
+               }
+
+               try {
+                       context = applicatonContext;
+                       
+                       EditPrefUtil pref = new EditPrefUtil(context);
+                       pref.getInt(Constant.PREF_UPDATE_TIME, 0);
+                       pref.update();
+                       
+                       EvernoteUtil util = EvernoteUtil.getInstance();
+                       util.setConfig("yuji-k64613", "TODO");
+                       DatabaseHelper.init(context);
+                       
+                       NoteUpdatorService.init(context);
+               } catch (Exception e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+               isInit = false;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/92/60a1b67081f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/92/60a1b67081f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..5ebcd17
--- /dev/null
@@ -0,0 +1,321 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.RollbackException;
+
+public class FolderUtil {
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               List<Notebook> noteBookList = util.getNoteBookList();
+
+               long id;
+               Node top = nodeDao.searchRoot(db);
+
+               for (Notebook notebook : noteBookList) {
+                       String guid = notebook.getGuid();
+                       String name = notebook.getName();
+
+                       Node oldBook = nodeDao.searchByGuid(db, guid);
+                       if (oldBook == null) {
+                               DirNode dirNode = new DirNode(name, null);
+                               guid = notebook.getGuid();
+                               dirNode.setGuid(guid);
+
+                               id = addDirNodeNT(top, dirNode);
+                       } else {
+                               String oldName = oldBook.getName();
+                               if (!name.equals(oldName)) {
+                                       // 名称が異なる
+                                       nodeDao.updateNameNT(oldBook, name);
+                               }
+                       }
+               }
+
+               // 削除
+               List<Node> list = nodeDao.searchBook(db);
+               for (Node node : list) {
+                       boolean isFound = false;
+                       for (Notebook book : noteBookList) {
+                               String guid = book.getGuid();
+                               if (node.getGuid().equals(guid)) {
+                                       isFound = true;
+                                       break;
+                               }
+                       }
+                       if (!isFound) {
+                               if (CommonUtil.isNull(node.getChildrenString())) {
+                                       // 子が無い場合は削除
+                                       nodeDao.deleteNT(node.getId());
+                               } else {
+                                       // フォルダに変更
+                                       nodeDao.updateGuidNT(node, null);
+                               }
+                       }
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db) throws RollbackException {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+               // TODO
+               // FOO
+               //throw new RollbackException(EfError.NONE);
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) throws RollbackException {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) throws RollbackException {
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               if (!util.isLoggedIn()){
+                       throw new RollbackException(EfError.NO_LOGIN);
+               }
+               
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+
+               db.beginTransaction();
+               try {
+                       if (isRoot) {
+                               if (nodeDao.isEmpty()) {
+                                       Node top = new RootNode("/", null);
+                                       top.setStatus(Node.Status.OPEN);
+                                       long id = nodeDao.addNT(top);
+                                       top.setId(id);
+                               }
+                       }
+
+                       if (isBook) {
+                               updateNotebook(db);
+                       }
+                       if (isNote) {
+                               nodeDao.updateNoteFlag(0);
+                               updateNote(db);
+                               deleteNode(db);                 
+                       }
+                       
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/94/2004d1817ef9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/94/2004d1817ef9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..37bfdaa
--- /dev/null
@@ -0,0 +1,82 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.Debug;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+       private Context context;
+
+       public NoteUpdateTask(Context context, SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+               this.context = context;
+       }
+
+       public void doExecute() throws EfException {
+               try {
+//                     FolderUtil test = FolderUtil.getInstance();
+//                     test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e){
+                       EfError error = e.getError();
+                       Debug.d(this, null, e);
+                       throw e;
+               } catch (Exception e) {
+                       throw new EfException(EfError.SYSTEM);
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+//             if (context != null) {
+//                     Intent intent = new Intent(Constant.ACTION_UPDATE);
+//                     context.sendBroadcast(intent);
+//             }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/94/204e8ed389f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/94/204e8ed389f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..8f0744b
--- /dev/null
@@ -0,0 +1,89 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+import android.content.Intent;
+
+import com.yuji.ef.Initialize;
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.Debug;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+       }
+
+       public void doExecute() throws EfException {
+               try {
+                       // FolderUtil test = FolderUtil.getInstance();
+                       // test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e) {
+                       EfError error = e.getError();
+                       // TODO
+                       Intent intent = new Intent(Constant.ACTION_UPDATE);
+                       intent.putExtra("MESSAGE", "メッセージ");
+                       Initialize.getContext().sendBroadcast(intent);
+                       //EfException.msg(Initialize.getContext(), "データの更新に失敗しました(a)");
+                       Debug.d(this, null, e);
+                       throw e;
+               } catch (Exception e) {
+                       // TODO
+                       EfException.msg(Initialize.getContext(), "データの更新に失敗しました(b)");
+                       throw new EfException(EfError.SYSTEM);
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+               // if (context != null) {
+               // Intent intent = new Intent(Constant.ACTION_UPDATE);
+               // context.sendBroadcast(intent);
+               // }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/97/701e04707af9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/97/701e04707af9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..0e1aaa4
--- /dev/null
@@ -0,0 +1,6 @@
+package com.yuji.ef.exception;
+
+public enum Error {
+       NONE,
+       SYSTEM,
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/99/b0725bfb80f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/99/b0725bfb80f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..bbacf57
--- /dev/null
@@ -0,0 +1,166 @@
+package com.yuji.ef.utility;
+
+import java.lang.ref.WeakReference;
+
+import android.app.Activity;
+import android.app.ProgressDialog;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnKeyListener;
+import android.os.AsyncTask;
+import android.view.KeyEvent;
+
+public class AsyncTaskCommand extends AsyncTask<String, Integer, String> {
+       private WeakReference<Activity> activityRef;
+       private AsyncTaskIF command;
+       private ProgressDialog dialog;
+       private boolean isCancel = false;
+       private boolean isDialog = true;
+       private int status = -1;
+
+       private String title = "";
+       private String buttonTitle = "";
+       private boolean cancelable = true;
+       private Exception exception = null;
+       
+       @SuppressWarnings({ "rawtypes", "unchecked" })
+       public AsyncTaskCommand(Activity activity, AsyncTaskIF command) {
+               this.activityRef = new WeakReference(activity);
+               this.command = command;
+       }
+
+       @Override
+       protected void onPreExecute() {
+               Debug.d(this, "onPreExecute start");
+
+               Activity activity = activityRef.get();
+               if (activity == null) {
+                       return;
+               }
+               if (isDialog) {
+                       dialog = new ProgressDialog(activity);
+                       dialog.setIndeterminate(true);
+                       dialog.setCancelable(cancelable);
+                       dialog.setTitle(title);
+                       if (cancelable) {
+                               dialog.setButton(buttonTitle,
+                                               new DialogInterface.OnClickListener() {
+                                                       public void onClick(DialogInterface dialog,
+                                                                       int which) {
+                                                               dialog.cancel();
+                                                               AsyncTaskCommand.this.cancel(true);
+                                                       }
+                                               });
+                               dialog.setOnKeyListener(new OnKeyListener() {
+                                       public boolean onKey(DialogInterface dialog, int keyCode,
+                                                       KeyEvent event) {
+                                               switch (event.getKeyCode()) {
+                                               case KeyEvent.KEYCODE_SEARCH:
+                                                       return true;
+                                               }
+                                               return false;
+                                       }
+                               });
+                       }
+                       dialog.show();
+               }
+               Debug.d(this, "onPreExecute end");
+       }
+
+       @Override
+       protected String doInBackground(String... arg0) {
+               try {
+                       Debug.d(this, "doInBackground start");
+                       command.doExecute();
+                       status = command.getStatus();
+                       Debug.d(this, "doInBackground end");
+               } catch (RuntimeException e) {
+                       exception = e;
+                       Debug.d(this, null, e);
+                       throw e;
+               } catch (Exception e) {
+                       exception = e;
+                       Debug.d(this, null, e);
+               }
+               return null;
+       }
+
+       @Override
+       protected void onCancelled() {
+               Debug.d(this, "onCancelled start");
+
+               isCancel = true;
+
+               if (command != null) {
+                       command.cancel();
+               }
+               onPostExecute(null);
+               Debug.d(this, "onCancelled end");
+       }
+
+       @Override
+       protected void onPostExecute(String result) {
+               Debug.d(this, "onPostExecute start");
+
+               try {
+                       if (command != null) {
+                               command.done(isCancel);
+                               command = null;
+                       }
+                       if (dialog != null) {
+                               try {
+                                       dialog.dismiss();
+                               } catch (IllegalArgumentException e) {
+                                       ;
+                               }
+                               dialog = null;
+                       }
+                       activityRef = null;
+               } catch (RuntimeException e) {
+                       Debug.d(this, null, e);
+                       throw e;
+               }
+               Debug.d(this, "onPostExecute end");
+       }
+
+       public void stop() {
+               Debug.d(this, "stop start");
+
+               if (command != null) {
+                       isCancel = true;
+                       command.cancel();
+               }
+               // onPostExecute()のdialog.dismiss();でエラーとなるため
+               // 本質的な解決策ではない
+               // dialog = null;
+               if (dialog != null) {
+                       dialog.dismiss();
+                       dialog = null;
+               }
+
+               Debug.d(this, "stop end");
+       }
+
+       public void setDialog(boolean b) {
+               isDialog = b;
+       }
+
+       public int getResultStatus() {
+               return status;
+       }
+
+       public void setTitle(String title) {
+               this.title = title;
+       }
+
+       public void setButtonTitle(String buttonTitle) {
+               this.buttonTitle = buttonTitle;
+       }
+
+       public void setCancelable(boolean cancelable) {
+               this.cancelable = cancelable;
+       }
+       
+       public Exception getException(){
+               return exception;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/9b/50c98aa786f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/9b/50c98aa786f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..582d14b
--- /dev/null
@@ -0,0 +1,1002 @@
+package com.yuji.ef;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.database.sqlite.SQLiteDatabase;
+import android.graphics.Bitmap;
+import android.graphics.PixelFormat;
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.Gravity;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.WindowManager;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.Node.Status;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeComparator;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.NodeDaoImpl;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.utility.BaseActivity;
+import com.yuji.ef.utility.BitmapCacheFactory;
+import com.yuji.ef.utility.EvernoteIntentUtil;
+import com.yuji.ef.utility.FolderUtil;
+import com.yuji.ef.utility.LockHandler;
+import com.yuji.ef.utility.LockListener;
+import com.yuji.ef.utility.ScaleUtil;
+
+public class EverFolderActivity extends BaseActivity implements LockListener {
+       private enum ScreenStatus {
+               Normal, AddNode, DeleteNode, RenameNode
+       };
+
+       private LinearLayout msgLayout;
+       private LinearLayout msgButtonLayout;
+       private Button msgOkButton;
+       private Button msgCancelButton;
+       private EditText msgEditText;
+
+       private IconFrameLayout layout;
+       private TextView confirmMsg;
+       private IconScrollView scrollView;
+       private LinearLayout buttonLayout;
+       private Button leftButton;
+       private Button rightButton;
+       // private Button addButton;
+       // private Button deleteButton;
+
+       private ScreenStatus status;
+       private NodeComparator nodeComparator = new NodeComparator();
+       private BitmapCacheFactory bitmapFactory = BitmapCacheFactory.getInstance();
+       private Node top = null;
+       private int indent = 0;
+       private int bmpPaddingLeft;
+       private int bmpWidth;
+       private int viewY;
+       private boolean lock = false;
+       private boolean isInit = true;
+       private boolean isInCycle = false;
+       private boolean isResult = false;
+
+       private BroadcastReceiver receiver = new BroadcastReceiver() {
+               @Override
+               public void onReceive(Context context, Intent intent) {
+                       String action = intent.getAction();
+EfException.msg(EverFolderActivity.this, msg)
+                       if (action.compareTo(Constant.ACTION_UPDATE) == 0) {
+                               if (isInCycle && !lock) {
+                                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                                       lock = lockDao.lock(EverFolderActivity.this,
+                                                       Constant.LOCK_UPDATE_NOTE);
+                                       if (lock) {
+                                               updateList();
+                                               // ほんとは、setStatus()に入れたい
+                                               layout.setVisibility(View.VISIBLE);
+                                       }
+                                       setStatus();
+                               }
+                       }
+               }
+       };
+
+       @Override
+       public void onCreate(Bundle savedInstanceState) {
+               super.onCreate(savedInstanceState);
+               setContentView(R.layout.main);
+
+               try {
+                       IntentFilter intentFilter = new IntentFilter();
+                       intentFilter.addAction(Constant.ACTION_UPDATE);
+                       registerReceiver(receiver, intentFilter);
+
+                       scrollView = (IconScrollView) findViewById(R.id.scrollView);
+                       layout = (IconFrameLayout) findViewById(R.id.frameLayout);
+                       layout.setActivity(this);
+                       layout.setScrollView(scrollView);
+
+                       buttonLayout = (LinearLayout) findViewById(R.id.mainButtonLayout);
+                       leftButton = (Button) findViewById(R.id.leftButton);
+                       rightButton = (Button) findViewById(R.id.rightButton);
+                       // addButton = (Button) findViewById(R.id.addButton);
+                       // deleteButton = (Button) findViewById(R.id.deleteButton);
+
+                       msgLayout = (LinearLayout) findViewById(R.id.mainMsgLayout);
+                       confirmMsg = (TextView) findViewById(R.id.mainConfirmMsg);
+                       msgEditText = (EditText) findViewById(R.id.mainMsgEditText);
+                       msgButtonLayout = (LinearLayout) findViewById(R.id.mainMsgButtonLayout);
+                       msgOkButton = (Button) findViewById(R.id.mainMsgOkButton);
+                       msgCancelButton = (Button) findViewById(R.id.mainMsgCancelButton);
+
+                       leftButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       leftButtonOnClick();
+                               }
+                       });
+                       rightButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       rightButtonOnClick();
+                               }
+                       });
+                       // addButton.setOnClickListener(new OnClickListener() {
+                       // @Override
+                       // public void onClick(View v) {
+                       // addButtonOnClick();
+                       // }
+                       // });
+                       // deleteButton.setOnClickListener(new OnClickListener() {
+                       // @Override
+                       // public void onClick(View v) {
+                       // deleteButtonOnClick();
+                       // }
+                       // });
+
+                       msgEditText.addTextChangedListener(new TextWatcher() {
+                               public void afterTextChanged(Editable s) {
+                                       if (status != ScreenStatus.DeleteNode) {
+                                               String text = s.toString();
+                                               msgOkButton.setEnabled(text.length() > 0);
+                                       } else {
+                                               msgOkButton.setEnabled(true);
+                                       }
+                               }
+
+                               public void beforeTextChanged(CharSequence s, int start,
+                                               int count, int after) {
+
+                               }
+
+                               public void onTextChanged(CharSequence s, int start,
+                                               int before, int count) {
+
+                               }
+                       });
+
+                       msgOkButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       msgOkButtonOnClick(v);
+                               }
+                       });
+                       msgCancelButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       msgCancelOnClick(v);
+                               }
+                       });
+
+                       ScaleUtil scaleUtil = ScaleUtil.getInstance();
+                       scaleUtil.init(this);
+
+                       bitmapFactory.init(this);
+                       Node node = new DirNode(null, null);
+                       Bitmap bmp = null;
+                       bmp = bitmapFactory.get(node.getStatusIconId());
+                       bmpPaddingLeft = bmp.getWidth();
+                       bmp = bitmapFactory.get(node.getIconId());
+                       bmpWidth = bmp.getWidth();
+
+                       float fSize = 48 * (1 / 2.0f);
+                       leftButton.setTextSize(fSize);
+                       rightButton.setTextSize(fSize);
+               } catch (Exception e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+       @Override
+       public boolean onCreateOptionsMenu(Menu menu) {
+               boolean ret = super.onCreateOptionsMenu(menu);
+               int index = 0;
+
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "カット");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "ペースト");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "追加");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "削除");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "リネーム");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "設定");
+               return ret;
+       }
+
+       @Override
+       public boolean onMenuOpened(int featureId, Menu menu) {
+               boolean ret = super.onMenuOpened(featureId, menu);
+
+               // #29304
+               if (menu == null) {
+                       return false;
+               }
+
+               MenuItem item;
+
+               boolean cutButtonFlag = false;
+               boolean pastButtonFlag = false;
+               boolean addButtonFlag = false;
+               boolean deleteButtonFlag = false;
+               boolean renameButtonFlag = false;
+               boolean confButtonFlag = true;
+
+               if (status == ScreenStatus.Normal) {
+                       LabelIconView target = layout.getSelectedTarget();
+                       NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+                       long id = -1;
+                       Node node = null;
+                       if (target != null) {
+                               id = target.getNodeId();
+                               node = dao.searchById(id);
+                       }
+
+                       if (isDirNode(target, node, false) || isFileNode(node)) {
+                               cutButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, true) && isCut()) {
+                               pastButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, true)) {
+                               addButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, false) && !isNoteBook(node)
+                                       && CommonUtil.isNull(node.getChildrenString())) {
+                               deleteButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, false) && !isNoteBook(node)) {
+                               renameButtonFlag = true;
+                       }
+               }
+
+               int index = 0;
+               item = menu.getItem(index++);
+               item.setVisible(cutButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(pastButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(addButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(deleteButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(renameButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(confButtonFlag);
+
+               return ret;
+       }
+
+       private boolean isFileNode(Node node) {
+               if (node == null || !(node instanceof FileNode)) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isDirNode(LabelIconView target, Node node,
+                       boolean containRoot) {
+               if (target == null) {
+                       return false;
+               }
+               if (node == null) {
+                       return false;
+               }
+               if (!containRoot && (node instanceof RootNode)) {
+                       return false;
+               }
+               if (!(node instanceof DirNode)) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isNoteBook(Node node) {
+               if (node == null) {
+                       return false;
+               }
+               if (CommonUtil.isNull(node.getGuid())) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isCut() {
+               LabelIconView srcTarget = layout.getCutTarget();
+               if (srcTarget == null) {
+                       return false;
+               }
+               return true;
+       }
+
+       @Override
+       public boolean onOptionsItemSelected(MenuItem item) {
+               Intent intent;
+               try {
+                       switch (item.getItemId()) {
+                       case Menu.FIRST + 0:
+                               selectMenuCut();
+                               break;
+                       case Menu.FIRST + 1:
+                               selectMenuPast();
+                               break;
+                       case Menu.FIRST + 2:
+                               selectMenuAdd();
+                               break;
+                       case Menu.FIRST + 3:
+                               selectMenuDelete();
+                               break;
+                       case Menu.FIRST + 4:
+                               selectMenuRename();
+                               break;
+                       case Menu.FIRST + 5:
+                               // dummy();
+                               // dummy2();
+                               intent = new Intent(this, (Class<?>) SettingActivity.class);
+                               startActivityForResult(intent, 0);
+                               break;
+                       default:
+                               break;
+                       }
+               } catch (Exception e) {
+                       terminate(e);
+               }
+               return super.onOptionsItemSelected(item);
+       }
+
+       private void dummy() {
+               NodeDaoImpl dao = (NodeDaoImpl) NodeCacheDao.getInstance();
+               List<Node> list = dao.search();
+               for (Node node : list) {
+                       System.out.println(node.toString());
+               }
+       }
+
+       private void dummy2() {
+               LockDao dao = (LockDao) LockDao.getInstance();
+               boolean b;
+
+               try {
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(new Object(), "key");
+                       dao.unlock(this, "key");
+                       b = dao.lock(new Object(), "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       dao.unlock(new Object(), "key");
+
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+
+       }
+
+       private void selectMenuAdd() {
+               setStatus(ScreenStatus.AddNode);
+       }
+
+       private void selectMenuDelete() {
+               setStatus(ScreenStatus.DeleteNode);
+       }
+
+       private void selectMenuRename() {
+               LabelIconView target = layout.getSelectedTarget();
+               if (target == null) {
+                       return;
+               }
+
+               long id = target.getNodeId();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               Node node = dao.searchById(id);
+               if (node != null) {
+                       String text = node.getName();
+                       msgEditText.setText(text);
+                       setStatus(ScreenStatus.RenameNode);
+               }
+       }
+
+       private void selectMenuCut() {
+               LabelIconView target = layout.getSelectedTarget();
+               if (target == null) {
+                       return;
+               }
+
+               layout.setCutTarget(target);
+               layout.refresh();
+       }
+
+       private void selectMenuPast() {
+               LabelIconView srcTarget = layout.getCutTarget();
+               if (srcTarget == null) {
+                       return;
+               }
+
+               LabelIconView dstTarget = layout.getSelectedTarget();
+               if (dstTarget == null) {
+                       return;
+               }
+
+               layout.setCutTarget(null);
+
+               long srcId = srcTarget.getNodeId();
+               long dstId = dstTarget.getNodeId();
+               execute(srcId, dstId);
+       }
+
+       private void updateList() {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               top = dao.searchRoot();
+               if (top == null) {
+                       // TODO
+               }
+               updateList(top);
+       }
+
+       private void updateList(Node parent) {
+               viewY = 10;
+
+               scrollView.setVisibility(View.GONE);            
+               layout.removeAllViews();
+               updateList(parent, 0);
+               layout.setMinimumHeight(viewY);
+               scrollView.setVisibility(View.VISIBLE);         
+               layout.refresh();
+
+               scrollView.invalidate();
+       }
+
+       private void updateList(Node node, int depth) {
+               int N = (int) (bmpWidth * 0.6);
+               int M = (int) (bmpWidth * 1.2);
+               int x = N * (depth - indent);
+
+               if (depth - indent >= 0
+                               && !(depth - indent == 0 && node instanceof FileNode)) {
+                       LabelIconView view = new LabelIconView(this);
+                       node.setView(view);
+
+                       Bitmap bmp1 = null;
+                       int id = node.getStatusIconId();
+                       if (id >= 0) {
+                               // DirNode
+                               bmp1 = bitmapFactory.get(node.getStatusIconId());
+                       } else {
+                               // FileNode
+                               x += bmpPaddingLeft;
+                       }
+                       Bitmap bmp2 = bitmapFactory.get(node.getIconId());
+                       createIconImageView(view, bmp1, bmp2, node.getName(), x, viewY);
+                       // LabelIconView s = view.getStatusImageView();
+                       // if (s != null) {
+                       // s.setNodeId(node.getId());
+                       // }
+                       view.setNodeId(node.getId());
+               }
+               viewY += M;
+
+               if (node.getStatus() != Node.Status.OPEN) {
+                       return;
+               }
+               List<Long> idList = node.getChildren();
+               if (idList == null) {
+                       return;
+               }
+
+               List<Node> list = new ArrayList<Node>();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               for (Long id : idList) {
+                       Node n = dao.searchById(id);
+                       if (n == null) {
+                               // TODO
+                               continue;
+                       }
+                       if (n instanceof DirNode) {
+                               DirNode d = (DirNode) n;
+                               if (isNoteBook(d) && !d.isSelected()) {
+                                       continue;
+                               }
+                       }
+                       list.add(n);
+               }
+               Collections.sort(list, nodeComparator);
+               for (Node n : list) {
+                       updateList(n, depth + 1);
+               }
+       }
+
+       private void createIconImageView(LabelIconView v, Bitmap bmp1, Bitmap bmp2,
+                       String text, int x, int y) {
+               v.init(x, y, bmp1, bmp2, text);
+
+               android.view.WindowManager.LayoutParams params = new WindowManager.LayoutParams();
+               params.gravity = Gravity.TOP | Gravity.LEFT;
+               params.height = WindowManager.LayoutParams.WRAP_CONTENT;
+               params.width = WindowManager.LayoutParams.WRAP_CONTENT;
+               params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
+                               | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
+                               | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
+                               | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
+               params.format = PixelFormat.TRANSLUCENT;
+               params.windowAnimations = 0;
+               params.x = x;
+               params.y = y;
+               v.setLayoutParams(params);
+
+               // LabelIconView siv = v.getStatusImageView();
+               // if (siv != null) {
+               // layout.addView(siv, false);
+               // }
+
+               layout.addView(v);
+               v.layout(x, y, x + v.getWidth(), y + v.getHeight());
+       }
+
+       @Override
+       public void sendLockResult(boolean b) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               if (isResult) {
+                       if (dao.isEmpty()) {
+                               finish();
+                               return;
+                       }
+               }
+               isResult = false;
+
+               if (dao.isEmpty()) {
+                       if (isInit) {
+                               Intent intent = new Intent(this,
+                                               (Class<?>) SettingActivity.class);
+                               startActivityForResult(intent, 0);
+
+                               isInit = false;
+                       } else {
+                               finish();
+                               isInit = true;
+                       }
+               }
+
+               if (isInCycle) {
+                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                       lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
+                       if (isInit) {
+                               status = ScreenStatus.Normal;
+
+                               if (lock) {
+                                       layout.setVisibility(View.VISIBLE);
+                                       updateList();
+                               } else {
+                                       layout.removeAllViews();
+                               }
+                               setStatus();
+                               isInit = false;
+                       } else {
+                               setStatus();
+                       }
+               } else {
+                       // TODO
+                       // lock解除
+               }
+       }
+
+       @Override
+       protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+               // TODO sendLockResult()、「lock解除」のため、とりあえずコメント
+               // NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               // if (dao.isEmpty()) {
+               // finish();
+               // }
+               isResult = true;
+               isInit = true;
+       }
+
+       @Override
+       protected void onStart() {
+               super.onStart();
+       }
+
+       @Override
+       protected void onResume() {
+               super.onResume();
+               isInCycle = true;
+
+               LockHandler handler = new LockHandler();
+               handler.lock(this, Constant.LOCK_UPDATE_NOTE);
+               lock = false;
+
+               if (isInit) {
+                       layout.setVisibility(View.INVISIBLE);
+                       setStatus();
+               }
+               else {
+                       // #29421
+                       updateList();
+               }
+               
+               // NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               // if (dao.isEmpty()) {
+               // if (isInit) {
+               // Intent intent = new Intent(this,
+               // (Class<?>) SettingActivity.class);
+               // startActivityForResult(intent, 0);
+               //
+               // isInit = false;
+               // } else {
+               // finish();
+               // isInit = true;
+               // }
+               // }
+               //
+               // LockDao lockDao = (LockDao) LockDao.getInstance();
+               // lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
+               //
+               // if (isInit) {
+               // status = ScreenStatus.Normal;
+               //
+               // if (lock) {
+               // updateList();
+               // } else {
+               // layout.removeAllViews();
+               // }
+               // setStatus();
+               // isInit = false;
+               // } else {
+               // setStatus();
+               // }
+       }
+
+       @Override
+       protected void onPause() {
+               // ロック未取得でも解除する(ゴミ掃除)
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(this, Constant.LOCK_UPDATE_NOTE);
+               lock = false;
+
+               super.onPause();
+               isInCycle = false;
+       }
+
+       private void leftButtonOnClick() {
+               moveButtonOnClick(-1);
+               setStatus();
+       }
+
+       private void rightButtonOnClick() {
+               moveButtonOnClick(1);
+               setStatus();
+       }
+
+       private void moveButtonOnClick(int dx) {
+               int mx = 0;
+
+               if (dx < 0) {
+                       if (indent > 0) {
+                               mx = -1;
+                       }
+               } else {
+                       mx = 1;
+               }
+               if (mx != 0) {
+                       indent += mx;
+                       removeAllNodeView();
+                       updateList();
+               }
+       }
+
+       // private void addButtonOnClick() {
+       // setStatus(ScreenStatus.AddNode);
+       // }
+       //
+       // private void deleteButtonOnClick() {
+       // FolderUtil util = FolderUtil.getInstance();
+       // LabelIconView target = layout.getSelectedTarget();
+       // long id = target.getNodeId();
+       // NodeDao dao = (NodeDao) NodeDao.getInstance();
+       // Node node = dao.searchById(id);
+       // if (node != null) {
+       // util.deleteNode(node);
+       // // TODO 三角マークも消さないといけないのでは
+       // layout.removeView(target);
+       // updateList();
+       // setStatus();
+       // }
+       // }
+
+       private void msgOkButtonOnClick(View v) {
+               FolderUtil util = FolderUtil.getInstance();
+               LabelIconView target = layout.getSelectedTarget();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               if (status == ScreenStatus.AddNode) {
+                       long id = target.getNodeId();
+                       Node parent = dao.searchById(id);
+                       if (parent != null) {
+                               String text = msgEditText.getText().toString();
+                               DirNode node = new DirNode(text, null);
+                               util.addDirNode(parent, node);
+                       }
+                       layout.setCutTarget(null, false);
+               } else if (status == ScreenStatus.DeleteNode) {
+                       long id = target.getNodeId();
+                       Node node = dao.searchById(id);
+                       if (node != null) {
+                               util.deleteNode(node);
+                               layout.removeView(target);
+                       }
+                       layout.setCutTarget(null, false);
+               } else if (status == ScreenStatus.RenameNode) {
+                       long id = target.getNodeId();
+                       Node node = dao.searchById(id);
+                       if (node != null) {
+                               String text = msgEditText.getText().toString();
+
+                               dao.updateName(node, text);
+                       }
+                       layout.setCutTarget(null, false);
+               }
+
+               closeIME(v);
+
+               layout.clearTarget();
+               updateList();
+               setStatus(ScreenStatus.Normal);
+       }
+
+       private void msgCancelOnClick(View v) {
+               closeIME(v);
+
+               setStatus(ScreenStatus.Normal);
+       }
+
+       private void closeIME(View v) {
+               InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+               imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
+       }
+
+       public void execute(long srcId, long dstId) {
+               try {
+                       removeAllNodeView();
+
+                       NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+                       if (srcId < 0) {
+                               // TODO
+                       }
+                       if (dstId < 0) {
+                               // TODO
+                       }
+
+                       Node src = dao.searchById(srcId);
+                       Node dst = null;
+                       if (srcId == dstId) {
+                               dst = src;
+                       } else {
+                               dst = dao.searchById(dstId);
+                       }
+
+                       if (dstId == src.getParent()) {
+                               // 同じ場所に移動
+                               return;
+                       }
+                       if (!isFileNode(src) && !isMovable(srcId, dstId)) {
+                               // 再帰的な移動
+                               return;
+                       }
+
+                       Node sp = dao.searchById(src.getParent());
+                       if (sp == null) {
+                               // TODO
+                       }
+                       Node dp = null;
+                       if (src.getParent() == dst.getParent()) {
+                               dp = sp;
+                       } else {
+                               dp = dao.searchById(dst.getParent());
+                       }
+                       if (dp == null) {
+                               // TODO
+                       }
+
+                       // TODO DBへのアクセス
+                       // sp.remove(src.getId());
+                       SQLiteDatabase db = DatabaseHelper.getInstance()
+                                       .getSQLiteDatabase();
+                       db.beginTransaction();
+                       try {
+                               dao.removeChildrenIdNT(sp, src.getId());
+                               if (dst instanceof DirNode) {
+                                       // dst.add(src.getId());
+                                       dao.updateParentNT(src, dst.getId());
+                                       dao.addChildrenIdNT(dst, src.getId());
+                               } else if (dst instanceof FileNode) {
+                                       // dp.add(src.getId());
+                                       dao.updateParentNT(src, dp.getId());
+                                       dao.addChildrenIdNT(dp, src.getId());
+                               }
+
+                               db.setTransactionSuccessful();
+                       } finally {
+                               db.endTransaction();
+                       }
+               } finally {
+                       updateList();
+               }
+       }
+
+       private boolean isMovable(long srcId, long dstId) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               while (dstId >= 0) {
+                       if (srcId == dstId) {
+                               return false;
+                       }
+                       Node node = dao.searchById(dstId);
+                       if (node == null) {
+                               // TODO エラー
+                               return false;
+                       }
+                       if (!(node instanceof DirNode)) {
+                               return true;
+                       }
+                       dstId = node.getParent();
+               }
+               return true;
+       }
+
+       public void execute(long id) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               Node node = dao.searchById(id);
+               if (node == null) {
+                       // TODO
+               }
+               node.toggleStatus();
+               Status status = node.getStatus();
+
+               dao.updateStatus(node, status);
+
+               // removeAllNodeView();
+               updateList();
+       }
+
+       public void executeView(long id) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               Node node = dao.searchById(id);
+               if (!isFileNode(node)) {
+                       return;
+               }
+               String guid = node.getGuid();
+
+               EvernoteIntentUtil util = EvernoteIntentUtil.getInstance();
+               util.viewNote(this, guid);
+       }
+
+       public void targetSelectedChanged(boolean status) {
+               setStatus();
+       }
+
+       public void removeAllNodeView() {
+               layout.removeAllViews();
+       }
+
+       private void setStatus() {
+               setStatus(status);
+       }
+
+       private void setStatus(ScreenStatus status) {
+               try {
+                       if (this.status != status) {
+                               this.status = status;
+                       }
+
+                       if (!lock) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainUpdateMsg));
+                               msgEditText.setVisibility(View.GONE);
+                               msgButtonLayout.setVisibility(View.GONE);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                               
+                               status = ScreenStatus.Normal;
+                               return;
+                       }
+
+                       if (status == ScreenStatus.Normal) {
+                               msgLayout.setVisibility(View.GONE);
+                               // mainMsgEditText.setText("");
+
+                               boolean leftButtonFlag = true;
+                               boolean rightButtonFlag = true;
+                               // boolean addButtonFlag = true;
+                               // boolean deleteButtonFlag = true;
+
+                               if (indent <= 0) {
+                                       leftButtonFlag = false;
+                               }
+
+                               // LabelIconView target = layout.getSelectedTarget();
+                               // NodeDao dao = (NodeDao) NodeDao.getInstance();
+                               // long id = -1;
+                               // Node node = null;
+                               // if (target != null) {
+                               // id = target.getNodeId();
+                               // node = dao.searchById(id);
+                               // }
+                               // if (target == null || node == null || !(node instanceof
+                               // DirNode))
+                               // {
+                               // addButtonFlag = false;
+                               // }
+                               // if (target == null || (node != null && node instanceof
+                               // RootNode))
+                               // {
+                               // deleteButtonFlag = false;
+                               // }
+                               layout.setElabledTouchEvent(true);
+
+                               leftButton.setEnabled(leftButtonFlag);
+                               rightButton.setEnabled(rightButtonFlag);
+                               // addButton.setEnabled(addButtonFlag);
+                               // deleteButton.setEnabled(deleteButtonFlag);
+                       } else if (status == ScreenStatus.AddNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.VISIBLE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainAddMsg));
+                               msgEditText.setText("");
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       } else if (status == ScreenStatus.DeleteNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.GONE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainDeleteMsg));
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       } else if (status == ScreenStatus.RenameNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.VISIBLE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainRenameMsg));
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       }
+               } catch (Throwable e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+}
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/9f/b0926e147bf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/9f/b0926e147bf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..ed78583
--- /dev/null
@@ -0,0 +1,316 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+
+public class FolderUtil {
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               List<Notebook> noteBookList = util.getNoteBookList();
+
+               long id;
+               Node top = nodeDao.searchRoot(db);
+
+               for (Notebook notebook : noteBookList) {
+                       String guid = notebook.getGuid();
+                       String name = notebook.getName();
+
+                       Node oldBook = nodeDao.searchByGuid(db, guid);
+                       if (oldBook == null) {
+                               DirNode dirNode = new DirNode(name, null);
+                               guid = notebook.getGuid();
+                               dirNode.setGuid(guid);
+
+                               id = addDirNodeNT(top, dirNode);
+                       } else {
+                               String oldName = oldBook.getName();
+                               if (!name.equals(oldName)) {
+                                       // 名称が異なる
+                                       nodeDao.updateNameNT(oldBook, name);
+                               }
+                       }
+               }
+
+               // 削除
+               List<Node> list = nodeDao.searchBook(db);
+               for (Node node : list) {
+                       boolean isFound = false;
+                       for (Notebook book : noteBookList) {
+                               String guid = book.getGuid();
+                               if (node.getGuid().equals(guid)) {
+                                       isFound = true;
+                                       break;
+                               }
+                       }
+                       if (!isFound) {
+                               if (CommonUtil.isNull(node.getChildrenString())) {
+                                       // 子が無い場合は削除
+                                       nodeDao.deleteNT(node.getId());
+                               } else {
+                                       // フォルダに変更
+                                       nodeDao.updateGuidNT(node, null);
+                               }
+                       }
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               // TODO
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               // TODO
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       // TODO
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       // TODO
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       // TODO
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) {
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               if (!util.isLoggedIn()){
+                       return;
+               }
+               
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+
+               db.beginTransaction();
+               try {
+                       if (isRoot) {
+                               if (nodeDao.isEmpty()) {
+                                       Node top = new RootNode("/", null);
+                                       top.setStatus(Node.Status.OPEN);
+                                       long id = nodeDao.addNT(top);
+                                       top.setId(id);
+                               }
+                       }
+
+                       if (isBook) {
+                               updateNotebook(db);
+                       }
+                       if (isNote) {
+                               nodeDao.updateNoteFlag(0);
+                               updateNote(db);
+                               deleteNode(db);                 
+                       }
+                       
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/a/b0060ea379f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/a/b0060ea379f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..8fbf208
--- /dev/null
@@ -0,0 +1,321 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+
+public class FolderUtil {
+       public enum Error extends com.yuji.ef.exception.Error {
+               NONE,
+               NOT_LOGIN,
+               NOT_FOUND,
+       }
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               List<Notebook> noteBookList = util.getNoteBookList();
+
+               long id;
+               Node top = nodeDao.searchRoot(db);
+
+               for (Notebook notebook : noteBookList) {
+                       String guid = notebook.getGuid();
+                       String name = notebook.getName();
+
+                       Node oldBook = nodeDao.searchByGuid(db, guid);
+                       if (oldBook == null) {
+                               DirNode dirNode = new DirNode(name, null);
+                               guid = notebook.getGuid();
+                               dirNode.setGuid(guid);
+
+                               id = addDirNodeNT(top, dirNode);
+                       } else {
+                               String oldName = oldBook.getName();
+                               if (!name.equals(oldName)) {
+                                       // 名称が異なる
+                                       nodeDao.updateNameNT(oldBook, name);
+                               }
+                       }
+               }
+
+               // 削除
+               List<Node> list = nodeDao.searchBook(db);
+               for (Node node : list) {
+                       boolean isFound = false;
+                       for (Notebook book : noteBookList) {
+                               String guid = book.getGuid();
+                               if (node.getGuid().equals(guid)) {
+                                       isFound = true;
+                                       break;
+                               }
+                       }
+                       if (!isFound) {
+                               if (CommonUtil.isNull(node.getChildrenString())) {
+                                       // 子が無い場合は削除
+                                       nodeDao.deleteNT(node.getId());
+                               } else {
+                                       // フォルダに変更
+                                       nodeDao.updateGuidNT(node, null);
+                               }
+                       }
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               // TODO
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               // TODO
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       // TODO
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       // TODO
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       // TODO
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) {
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               if (!util.isLoggedIn()){
+                       return;
+               }
+               
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+
+               db.beginTransaction();
+               try {
+                       if (isRoot) {
+                               if (nodeDao.isEmpty()) {
+                                       Node top = new RootNode("/", null);
+                                       top.setStatus(Node.Status.OPEN);
+                                       long id = nodeDao.addNT(top);
+                                       top.setId(id);
+                               }
+                       }
+
+                       if (isBook) {
+                               updateNotebook(db);
+                       }
+                       if (isNote) {
+                               nodeDao.updateNoteFlag(0);
+                               updateNote(db);
+                               deleteNode(db);                 
+                       }
+                       
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/a1/30a0d33788f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/a1/30a0d33788f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..937a656
--- /dev/null
@@ -0,0 +1,89 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+import android.content.Intent;
+
+import com.yuji.ef.Initialize;
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.Debug;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+       }
+
+       public void doExecute() throws EfException {
+               try {
+                       // FolderUtil test = FolderUtil.getInstance();
+                       // test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e) {
+                       EfError error = e.getError();
+                       // TODO
+                       Intent intent = new Intent(Constant.ACTION_UPDATE);
+                       intent.putExtra("MESSAGE", "メッセージ")
+                       Initialize.getContext().sendBroadcast(intent);
+                       //EfException.msg(Initialize.getContext(), "データの更新に失敗しました(a)");
+                       Debug.d(this, null, e);
+                       throw e;
+               } catch (Exception e) {
+                       // TODO
+                       EfException.msg(Initialize.getContext(), "データの更新に失敗しました(b)");
+                       throw new EfException(EfError.SYSTEM);
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+               // if (context != null) {
+               // Intent intent = new Intent(Constant.ACTION_UPDATE);
+               // context.sendBroadcast(intent);
+               // }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/a1/509751a486f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/a1/509751a486f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..674bb36
--- /dev/null
@@ -0,0 +1,1001 @@
+package com.yuji.ef;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.database.sqlite.SQLiteDatabase;
+import android.graphics.Bitmap;
+import android.graphics.PixelFormat;
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.Gravity;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.WindowManager;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.Node.Status;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeComparator;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.NodeDaoImpl;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.utility.BaseActivity;
+import com.yuji.ef.utility.BitmapCacheFactory;
+import com.yuji.ef.utility.EvernoteIntentUtil;
+import com.yuji.ef.utility.FolderUtil;
+import com.yuji.ef.utility.LockHandler;
+import com.yuji.ef.utility.LockListener;
+import com.yuji.ef.utility.ScaleUtil;
+
+public class EverFolderActivity extends BaseActivity implements LockListener {
+       private enum ScreenStatus {
+               Normal, AddNode, DeleteNode, RenameNode
+       };
+
+       private LinearLayout msgLayout;
+       private LinearLayout msgButtonLayout;
+       private Button msgOkButton;
+       private Button msgCancelButton;
+       private EditText msgEditText;
+
+       private IconFrameLayout layout;
+       private TextView confirmMsg;
+       private IconScrollView scrollView;
+       private LinearLayout buttonLayout;
+       private Button leftButton;
+       private Button rightButton;
+       // private Button addButton;
+       // private Button deleteButton;
+
+       private ScreenStatus status;
+       private NodeComparator nodeComparator = new NodeComparator();
+       private BitmapCacheFactory bitmapFactory = BitmapCacheFactory.getInstance();
+       private Node top = null;
+       private int indent = 0;
+       private int bmpPaddingLeft;
+       private int bmpWidth;
+       private int viewY;
+       private boolean lock = false;
+       private boolean isInit = true;
+       private boolean isInCycle = false;
+       private boolean isResult = false;
+
+       private BroadcastReceiver receiver = new BroadcastReceiver() {
+               @Override
+               public void onReceive(Context context, Intent intent) {
+                       String action = intent.getAction();
+
+                       if (action.compareTo(Constant.ACTION_UPDATE) == 0) {
+                               if (isInCycle && !lock) {
+                                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                                       lock = lockDao.lock(EverFolderActivity.this,
+                                                       Constant.LOCK_UPDATE_NOTE);
+                                       if (lock) {
+                                               updateList();
+                                               // ほんとは、setStatus()に入れたい
+                                               layout.setVisibility(View.VISIBLE);
+                                       }
+                                       setStatus();
+                               }
+                       }
+               }
+       };
+
+       @Override
+       public void onCreate(Bundle savedInstanceState) {
+               super.onCreate(savedInstanceState);
+               setContentView(R.layout.main);
+
+               try {
+                       IntentFilter intentFilter = new IntentFilter();
+                       intentFilter.addAction(Constant.ACTION_UPDATE);
+                       registerReceiver(receiver, intentFilter);
+
+                       scrollView = (IconScrollView) findViewById(R.id.scrollView);
+                       layout = (IconFrameLayout) findViewById(R.id.frameLayout);
+                       layout.setActivity(this);
+                       layout.setScrollView(scrollView);
+
+                       buttonLayout = (LinearLayout) findViewById(R.id.mainButtonLayout);
+                       leftButton = (Button) findViewById(R.id.leftButton);
+                       rightButton = (Button) findViewById(R.id.rightButton);
+                       // addButton = (Button) findViewById(R.id.addButton);
+                       // deleteButton = (Button) findViewById(R.id.deleteButton);
+
+                       msgLayout = (LinearLayout) findViewById(R.id.mainMsgLayout);
+                       confirmMsg = (TextView) findViewById(R.id.mainConfirmMsg);
+                       msgEditText = (EditText) findViewById(R.id.mainMsgEditText);
+                       msgButtonLayout = (LinearLayout) findViewById(R.id.mainMsgButtonLayout);
+                       msgOkButton = (Button) findViewById(R.id.mainMsgOkButton);
+                       msgCancelButton = (Button) findViewById(R.id.mainMsgCancelButton);
+
+                       leftButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       leftButtonOnClick();
+                               }
+                       });
+                       rightButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       rightButtonOnClick();
+                               }
+                       });
+                       // addButton.setOnClickListener(new OnClickListener() {
+                       // @Override
+                       // public void onClick(View v) {
+                       // addButtonOnClick();
+                       // }
+                       // });
+                       // deleteButton.setOnClickListener(new OnClickListener() {
+                       // @Override
+                       // public void onClick(View v) {
+                       // deleteButtonOnClick();
+                       // }
+                       // });
+
+                       msgEditText.addTextChangedListener(new TextWatcher() {
+                               public void afterTextChanged(Editable s) {
+                                       if (status != ScreenStatus.DeleteNode) {
+                                               String text = s.toString();
+                                               msgOkButton.setEnabled(text.length() > 0);
+                                       } else {
+                                               msgOkButton.setEnabled(true);
+                                       }
+                               }
+
+                               public void beforeTextChanged(CharSequence s, int start,
+                                               int count, int after) {
+
+                               }
+
+                               public void onTextChanged(CharSequence s, int start,
+                                               int before, int count) {
+
+                               }
+                       });
+
+                       msgOkButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       msgOkButtonOnClick(v);
+                               }
+                       });
+                       msgCancelButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       msgCancelOnClick(v);
+                               }
+                       });
+
+                       ScaleUtil scaleUtil = ScaleUtil.getInstance();
+                       scaleUtil.init(this);
+
+                       bitmapFactory.init(this);
+                       Node node = new DirNode(null, null);
+                       Bitmap bmp = null;
+                       bmp = bitmapFactory.get(node.getStatusIconId());
+                       bmpPaddingLeft = bmp.getWidth();
+                       bmp = bitmapFactory.get(node.getIconId());
+                       bmpWidth = bmp.getWidth();
+
+                       float fSize = 48 * (1 / 2.0f);
+                       leftButton.setTextSize(fSize);
+                       rightButton.setTextSize(fSize);
+               } catch (Exception e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+       @Override
+       public boolean onCreateOptionsMenu(Menu menu) {
+               boolean ret = super.onCreateOptionsMenu(menu);
+               int index = 0;
+
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "カット");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "ペースト");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "追加");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "削除");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "リネーム");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "設定");
+               return ret;
+       }
+
+       @Override
+       public boolean onMenuOpened(int featureId, Menu menu) {
+               boolean ret = super.onMenuOpened(featureId, menu);
+
+               // #29304
+               if (menu == null) {
+                       return false;
+               }
+
+               MenuItem item;
+
+               boolean cutButtonFlag = false;
+               boolean pastButtonFlag = false;
+               boolean addButtonFlag = false;
+               boolean deleteButtonFlag = false;
+               boolean renameButtonFlag = false;
+               boolean confButtonFlag = true;
+
+               if (status == ScreenStatus.Normal) {
+                       LabelIconView target = layout.getSelectedTarget();
+                       NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+                       long id = -1;
+                       Node node = null;
+                       if (target != null) {
+                               id = target.getNodeId();
+                               node = dao.searchById(id);
+                       }
+
+                       if (isDirNode(target, node, false) || isFileNode(node)) {
+                               cutButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, true) && isCut()) {
+                               pastButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, true)) {
+                               addButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, false) && !isNoteBook(node)
+                                       && CommonUtil.isNull(node.getChildrenString())) {
+                               deleteButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, false) && !isNoteBook(node)) {
+                               renameButtonFlag = true;
+                       }
+               }
+
+               int index = 0;
+               item = menu.getItem(index++);
+               item.setVisible(cutButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(pastButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(addButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(deleteButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(renameButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(confButtonFlag);
+
+               return ret;
+       }
+
+       private boolean isFileNode(Node node) {
+               if (node == null || !(node instanceof FileNode)) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isDirNode(LabelIconView target, Node node,
+                       boolean containRoot) {
+               if (target == null) {
+                       return false;
+               }
+               if (node == null) {
+                       return false;
+               }
+               if (!containRoot && (node instanceof RootNode)) {
+                       return false;
+               }
+               if (!(node instanceof DirNode)) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isNoteBook(Node node) {
+               if (node == null) {
+                       return false;
+               }
+               if (CommonUtil.isNull(node.getGuid())) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isCut() {
+               LabelIconView srcTarget = layout.getCutTarget();
+               if (srcTarget == null) {
+                       return false;
+               }
+               return true;
+       }
+
+       @Override
+       public boolean onOptionsItemSelected(MenuItem item) {
+               Intent intent;
+               try {
+                       switch (item.getItemId()) {
+                       case Menu.FIRST + 0:
+                               selectMenuCut();
+                               break;
+                       case Menu.FIRST + 1:
+                               selectMenuPast();
+                               break;
+                       case Menu.FIRST + 2:
+                               selectMenuAdd();
+                               break;
+                       case Menu.FIRST + 3:
+                               selectMenuDelete();
+                               break;
+                       case Menu.FIRST + 4:
+                               selectMenuRename();
+                               break;
+                       case Menu.FIRST + 5:
+                               // dummy();
+                               // dummy2();
+                               intent = new Intent(this, (Class<?>) SettingActivity.class);
+                               startActivityForResult(intent, 0);
+                               break;
+                       default:
+                               break;
+                       }
+               } catch (Exception e) {
+                       terminate(e);
+               }
+               return super.onOptionsItemSelected(item);
+       }
+
+       private void dummy() {
+               NodeDaoImpl dao = (NodeDaoImpl) NodeCacheDao.getInstance();
+               List<Node> list = dao.search();
+               for (Node node : list) {
+                       System.out.println(node.toString());
+               }
+       }
+
+       private void dummy2() {
+               LockDao dao = (LockDao) LockDao.getInstance();
+               boolean b;
+
+               try {
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(new Object(), "key");
+                       dao.unlock(this, "key");
+                       b = dao.lock(new Object(), "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       dao.unlock(new Object(), "key");
+
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+
+       }
+
+       private void selectMenuAdd() {
+               setStatus(ScreenStatus.AddNode);
+       }
+
+       private void selectMenuDelete() {
+               setStatus(ScreenStatus.DeleteNode);
+       }
+
+       private void selectMenuRename() {
+               LabelIconView target = layout.getSelectedTarget();
+               if (target == null) {
+                       return;
+               }
+
+               long id = target.getNodeId();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               Node node = dao.searchById(id);
+               if (node != null) {
+                       String text = node.getName();
+                       msgEditText.setText(text);
+                       setStatus(ScreenStatus.RenameNode);
+               }
+       }
+
+       private void selectMenuCut() {
+               LabelIconView target = layout.getSelectedTarget();
+               if (target == null) {
+                       return;
+               }
+
+               layout.setCutTarget(target);
+               layout.refresh();
+       }
+
+       private void selectMenuPast() {
+               LabelIconView srcTarget = layout.getCutTarget();
+               if (srcTarget == null) {
+                       return;
+               }
+
+               LabelIconView dstTarget = layout.getSelectedTarget();
+               if (dstTarget == null) {
+                       return;
+               }
+
+               layout.setCutTarget(null);
+
+               long srcId = srcTarget.getNodeId();
+               long dstId = dstTarget.getNodeId();
+               execute(srcId, dstId);
+       }
+
+       private void updateList() {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               top = dao.searchRoot();
+               if (top == null) {
+                       // TODO
+               }
+               updateList(top);
+       }
+
+       private void updateList(Node parent) {
+               viewY = 10;
+
+               scrollView.setVisibility(View.GONE);            
+               layout.removeAllViews();
+               updateList(parent, 0);
+               layout.setMinimumHeight(viewY);
+               scrollView.setVisibility(View.VISIBLE);         
+               layout.refresh();
+
+               scrollView.invalidate();
+       }
+
+       private void updateList(Node node, int depth) {
+               int N = (int) (bmpWidth * 0.6);
+               int M = (int) (bmpWidth * 1.2);
+               int x = N * (depth - indent);
+
+               if (depth - indent >= 0
+                               && !(depth - indent == 0 && node instanceof FileNode)) {
+                       LabelIconView view = new LabelIconView(this);
+                       node.setView(view);
+
+                       Bitmap bmp1 = null;
+                       int id = node.getStatusIconId();
+                       if (id >= 0) {
+                               // DirNode
+                               bmp1 = bitmapFactory.get(node.getStatusIconId());
+                       } else {
+                               // FileNode
+                               x += bmpPaddingLeft;
+                       }
+                       Bitmap bmp2 = bitmapFactory.get(node.getIconId());
+                       createIconImageView(view, bmp1, bmp2, node.getName(), x, viewY);
+                       // LabelIconView s = view.getStatusImageView();
+                       // if (s != null) {
+                       // s.setNodeId(node.getId());
+                       // }
+                       view.setNodeId(node.getId());
+               }
+               viewY += M;
+
+               if (node.getStatus() != Node.Status.OPEN) {
+                       return;
+               }
+               List<Long> idList = node.getChildren();
+               if (idList == null) {
+                       return;
+               }
+
+               List<Node> list = new ArrayList<Node>();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               for (Long id : idList) {
+                       Node n = dao.searchById(id);
+                       if (n == null) {
+                               // TODO
+                               continue;
+                       }
+                       if (n instanceof DirNode) {
+                               DirNode d = (DirNode) n;
+                               if (isNoteBook(d) && !d.isSelected()) {
+                                       continue;
+                               }
+                       }
+                       list.add(n);
+               }
+               Collections.sort(list, nodeComparator);
+               for (Node n : list) {
+                       updateList(n, depth + 1);
+               }
+       }
+
+       private void createIconImageView(LabelIconView v, Bitmap bmp1, Bitmap bmp2,
+                       String text, int x, int y) {
+               v.init(x, y, bmp1, bmp2, text);
+
+               android.view.WindowManager.LayoutParams params = new WindowManager.LayoutParams();
+               params.gravity = Gravity.TOP | Gravity.LEFT;
+               params.height = WindowManager.LayoutParams.WRAP_CONTENT;
+               params.width = WindowManager.LayoutParams.WRAP_CONTENT;
+               params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
+                               | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
+                               | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
+                               | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
+               params.format = PixelFormat.TRANSLUCENT;
+               params.windowAnimations = 0;
+               params.x = x;
+               params.y = y;
+               v.setLayoutParams(params);
+
+               // LabelIconView siv = v.getStatusImageView();
+               // if (siv != null) {
+               // layout.addView(siv, false);
+               // }
+
+               layout.addView(v);
+               v.layout(x, y, x + v.getWidth(), y + v.getHeight());
+       }
+
+       @Override
+       public void sendLockResult(boolean b) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               if (isResult) {
+                       if (dao.isEmpty()) {
+                               finish();
+                               return;
+                       }
+               }
+               isResult = false;
+
+               if (dao.isEmpty()) {
+                       if (isInit) {
+                               Intent intent = new Intent(this,
+                                               (Class<?>) SettingActivity.class);
+                               startActivityForResult(intent, 0);
+
+                               isInit = false;
+                       } else {
+                               finish();
+                               isInit = true;
+                       }
+               }
+
+               if (isInCycle) {
+                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                       lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
+                       if (isInit) {
+                               status = ScreenStatus.Normal;
+
+                               if (lock) {
+                                       layout.setVisibility(View.VISIBLE);
+                                       updateList();
+                               } else {
+                                       layout.removeAllViews();
+                               }
+                               setStatus();
+                               isInit = false;
+                       } else {
+                               setStatus();
+                       }
+               } else {
+                       // TODO
+                       // lock解除
+               }
+       }
+
+       @Override
+       protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+               // TODO sendLockResult()、「lock解除」のため、とりあえずコメント
+               // NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               // if (dao.isEmpty()) {
+               // finish();
+               // }
+               isResult = true;
+               isInit = true;
+       }
+
+       @Override
+       protected void onStart() {
+               super.onStart();
+       }
+
+       @Override
+       protected void onResume() {
+               super.onResume();
+               isInCycle = true;
+
+               LockHandler handler = new LockHandler();
+               handler.lock(this, Constant.LOCK_UPDATE_NOTE);
+               lock = false;
+
+               if (isInit) {
+                       layout.setVisibility(View.INVISIBLE);
+                       setStatus();
+               }
+               else {
+                       // #29421
+                       updateList();
+               }
+               
+               // NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               // if (dao.isEmpty()) {
+               // if (isInit) {
+               // Intent intent = new Intent(this,
+               // (Class<?>) SettingActivity.class);
+               // startActivityForResult(intent, 0);
+               //
+               // isInit = false;
+               // } else {
+               // finish();
+               // isInit = true;
+               // }
+               // }
+               //
+               // LockDao lockDao = (LockDao) LockDao.getInstance();
+               // lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
+               //
+               // if (isInit) {
+               // status = ScreenStatus.Normal;
+               //
+               // if (lock) {
+               // updateList();
+               // } else {
+               // layout.removeAllViews();
+               // }
+               // setStatus();
+               // isInit = false;
+               // } else {
+               // setStatus();
+               // }
+       }
+
+       @Override
+       protected void onPause() {
+               // ロック未取得でも解除する(ゴミ掃除)
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(this, Constant.LOCK_UPDATE_NOTE);
+               lock = false;
+
+               super.onPause();
+               isInCycle = false;
+       }
+
+       private void leftButtonOnClick() {
+               moveButtonOnClick(-1);
+               setStatus();
+       }
+
+       private void rightButtonOnClick() {
+               moveButtonOnClick(1);
+               setStatus();
+       }
+
+       private void moveButtonOnClick(int dx) {
+               int mx = 0;
+
+               if (dx < 0) {
+                       if (indent > 0) {
+                               mx = -1;
+                       }
+               } else {
+                       mx = 1;
+               }
+               if (mx != 0) {
+                       indent += mx;
+                       removeAllNodeView();
+                       updateList();
+               }
+       }
+
+       // private void addButtonOnClick() {
+       // setStatus(ScreenStatus.AddNode);
+       // }
+       //
+       // private void deleteButtonOnClick() {
+       // FolderUtil util = FolderUtil.getInstance();
+       // LabelIconView target = layout.getSelectedTarget();
+       // long id = target.getNodeId();
+       // NodeDao dao = (NodeDao) NodeDao.getInstance();
+       // Node node = dao.searchById(id);
+       // if (node != null) {
+       // util.deleteNode(node);
+       // // TODO 三角マークも消さないといけないのでは
+       // layout.removeView(target);
+       // updateList();
+       // setStatus();
+       // }
+       // }
+
+       private void msgOkButtonOnClick(View v) {
+               FolderUtil util = FolderUtil.getInstance();
+               LabelIconView target = layout.getSelectedTarget();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               if (status == ScreenStatus.AddNode) {
+                       long id = target.getNodeId();
+                       Node parent = dao.searchById(id);
+                       if (parent != null) {
+                               String text = msgEditText.getText().toString();
+                               DirNode node = new DirNode(text, null);
+                               util.addDirNode(parent, node);
+                       }
+                       layout.setCutTarget(null, false);
+               } else if (status == ScreenStatus.DeleteNode) {
+                       long id = target.getNodeId();
+                       Node node = dao.searchById(id);
+                       if (node != null) {
+                               util.deleteNode(node);
+                               layout.removeView(target);
+                       }
+                       layout.setCutTarget(null, false);
+               } else if (status == ScreenStatus.RenameNode) {
+                       long id = target.getNodeId();
+                       Node node = dao.searchById(id);
+                       if (node != null) {
+                               String text = msgEditText.getText().toString();
+
+                               dao.updateName(node, text);
+                       }
+                       layout.setCutTarget(null, false);
+               }
+
+               closeIME(v);
+
+               layout.clearTarget();
+               updateList();
+               setStatus(ScreenStatus.Normal);
+       }
+
+       private void msgCancelOnClick(View v) {
+               closeIME(v);
+
+               setStatus(ScreenStatus.Normal);
+       }
+
+       private void closeIME(View v) {
+               InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+               imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
+       }
+
+       public void execute(long srcId, long dstId) {
+               try {
+                       removeAllNodeView();
+
+                       NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+                       if (srcId < 0) {
+                               // TODO
+                       }
+                       if (dstId < 0) {
+                               // TODO
+                       }
+
+                       Node src = dao.searchById(srcId);
+                       Node dst = null;
+                       if (srcId == dstId) {
+                               dst = src;
+                       } else {
+                               dst = dao.searchById(dstId);
+                       }
+
+                       if (dstId == src.getParent()) {
+                               // 同じ場所に移動
+                               return;
+                       }
+                       if (!isFileNode(src) && !isMovable(srcId, dstId)) {
+                               // 再帰的な移動
+                               return;
+                       }
+
+                       Node sp = dao.searchById(src.getParent());
+                       if (sp == null) {
+                               // TODO
+                       }
+                       Node dp = null;
+                       if (src.getParent() == dst.getParent()) {
+                               dp = sp;
+                       } else {
+                               dp = dao.searchById(dst.getParent());
+                       }
+                       if (dp == null) {
+                               // TODO
+                       }
+
+                       // TODO DBへのアクセス
+                       // sp.remove(src.getId());
+                       SQLiteDatabase db = DatabaseHelper.getInstance()
+                                       .getSQLiteDatabase();
+                       db.beginTransaction();
+                       try {
+                               dao.removeChildrenIdNT(sp, src.getId());
+                               if (dst instanceof DirNode) {
+                                       // dst.add(src.getId());
+                                       dao.updateParentNT(src, dst.getId());
+                                       dao.addChildrenIdNT(dst, src.getId());
+                               } else if (dst instanceof FileNode) {
+                                       // dp.add(src.getId());
+                                       dao.updateParentNT(src, dp.getId());
+                                       dao.addChildrenIdNT(dp, src.getId());
+                               }
+
+                               db.setTransactionSuccessful();
+                       } finally {
+                               db.endTransaction();
+                       }
+               } finally {
+                       updateList();
+               }
+       }
+
+       private boolean isMovable(long srcId, long dstId) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               while (dstId >= 0) {
+                       if (srcId == dstId) {
+                               return false;
+                       }
+                       Node node = dao.searchById(dstId);
+                       if (node == null) {
+                               // TODO エラー
+                               return false;
+                       }
+                       if (!(node instanceof DirNode)) {
+                               return true;
+                       }
+                       dstId = node.getParent();
+               }
+               return true;
+       }
+
+       public void execute(long id) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               Node node = dao.searchById(id);
+               if (node == null) {
+                       // TODO
+               }
+               node.toggleStatus();
+               Status status = node.getStatus();
+
+               dao.updateStatus(node, status);
+
+               // removeAllNodeView();
+               updateList();
+       }
+
+       public void executeView(long id) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               Node node = dao.searchById(id);
+               if (!isFileNode(node)) {
+                       return;
+               }
+               String guid = node.getGuid();
+
+               EvernoteIntentUtil util = EvernoteIntentUtil.getInstance();
+               util.viewNote(this, guid);
+       }
+
+       public void targetSelectedChanged(boolean status) {
+               setStatus();
+       }
+
+       public void removeAllNodeView() {
+               layout.removeAllViews();
+       }
+
+       private void setStatus() {
+               setStatus(status);
+       }
+
+       private void setStatus(ScreenStatus status) {
+               try {
+                       if (this.status != status) {
+                               this.status = status;
+                       }
+
+                       if (!lock) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainUpdateMsg));
+                               msgEditText.setVisibility(View.GONE);
+                               msgButtonLayout.setVisibility(View.GONE);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                               
+                               status = ScreenStatus.Normal;
+                               return;
+                       }
+
+                       if (status == ScreenStatus.Normal) {
+                               msgLayout.setVisibility(View.GONE);
+                               // mainMsgEditText.setText("");
+
+                               boolean leftButtonFlag = true;
+                               boolean rightButtonFlag = true;
+                               // boolean addButtonFlag = true;
+                               // boolean deleteButtonFlag = true;
+
+                               if (indent <= 0) {
+                                       leftButtonFlag = false;
+                               }
+
+                               // LabelIconView target = layout.getSelectedTarget();
+                               // NodeDao dao = (NodeDao) NodeDao.getInstance();
+                               // long id = -1;
+                               // Node node = null;
+                               // if (target != null) {
+                               // id = target.getNodeId();
+                               // node = dao.searchById(id);
+                               // }
+                               // if (target == null || node == null || !(node instanceof
+                               // DirNode))
+                               // {
+                               // addButtonFlag = false;
+                               // }
+                               // if (target == null || (node != null && node instanceof
+                               // RootNode))
+                               // {
+                               // deleteButtonFlag = false;
+                               // }
+                               layout.setElabledTouchEvent(true);
+
+                               leftButton.setEnabled(leftButtonFlag);
+                               rightButton.setEnabled(rightButtonFlag);
+                               // addButton.setEnabled(addButtonFlag);
+                               // deleteButton.setEnabled(deleteButtonFlag);
+                       } else if (status == ScreenStatus.AddNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.VISIBLE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainAddMsg));
+                               msgEditText.setText("");
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       } else if (status == ScreenStatus.DeleteNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.GONE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainDeleteMsg));
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       } else if (status == ScreenStatus.RenameNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.VISIBLE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainRenameMsg));
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       }
+               } catch (Throwable e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+}
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/a9/1053908c89f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/a9/1053908c89f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..f714bfd
--- /dev/null
@@ -0,0 +1,35 @@
+package com.yuji.ef.exception;
+
+import com.yuji.ef.Initialize;
+import com.yuji.ef.common.Constant;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Handler;
+import android.widget.Toast;
+
+public class EfException extends Exception {
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 2248123315072811891L;
+       private EfError error;
+
+       public EfException(EfError error) {
+               this.error = error;
+       }
+
+       public EfError getError() {
+               return error;
+       }
+
+       public static void msg(String msg){
+               Intent intent = new Intent(Constant.ACTION_MESSAGE);
+               intent.putExtra("MESSAGE", msg);
+               Initialize.getContext().sendBroadcast(intent);
+       }
+       
+       public static void msg(Context context, String msg) {
+               Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/a9/a0b43cf67cf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/a9/a0b43cf67cf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..43d7c17
--- /dev/null
@@ -0,0 +1,8 @@
+package com.yuji.ef.utility;
+
+public interface AsyncTaskIF {
+       void doExecute() throw Exception;
+       void cancel();
+       void done(boolean isCancel);
+       int getStatus();
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/ad/304a3be391f60011156ab34f9ddbff8b b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/ad/304a3be391f60011156ab34f9ddbff8b
new file mode 100644 (file)
index 0000000..d4353f7
--- /dev/null
@@ -0,0 +1,453 @@
+package com.yuji.ef;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import android.content.Context;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnLongClickListener;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.AnimationUtils;
+import android.widget.FrameLayout;
+
+public class IconFrameLayout extends FrameLayout implements OnLongClickListener {
+       private EverFolderActivity activity = null;
+
+       private LabelIconView target = null;
+       private LabelIconView destTarget = null;
+       private LabelIconView selectedTarget = null;
+       private LabelIconView cutTarget = null;
+       private List<LabelIconView> labelIconViewList = new ArrayList<LabelIconView>();
+
+       private Animation anime;
+       private int currentX;
+       private int currentY;
+       private int offsetX;
+       private int offsetY;
+       private boolean longClickFlg = false;
+       private IconScrollView scrollView;
+       private Context context = this.getContext();
+       private boolean elabledTouchEvent = true;
+
+       public IconFrameLayout(Context context) {
+               super(context);
+       }
+
+       public IconFrameLayout(Context context, AttributeSet attrs) {
+               super(context, attrs);
+       }
+
+       public IconFrameLayout(Context context, AttributeSet attrs, int defStyle) {
+               super(context, attrs, defStyle);
+       }
+
+       public void setActivity(EverFolderActivity activity) {
+               this.activity = activity;
+       }
+
+       @Override
+       protected void onLayout(boolean changed, int left, int top, int right,
+                       int bottom) {
+               super.onLayout(changed, left, top, right, bottom);
+
+               int size = this.getChildCount();
+               for (int i = 0; i < size; i++) {
+                       LabelIconView vv = (LabelIconView) this.getChildAt(i);
+                       int x2 = vv.getInitX();
+                       int y2 = vv.getInitY();
+                       // vv.init(x2, y2);
+                       vv.layout(x2, y2, x2 + vv.getWidth(), y2 + vv.getHeight());
+               }
+       }
+
+       public LabelIconView getSelectedTarget() {
+               return selectedTarget;
+       }
+
+       public void addView(LabelIconView child) {
+               addView(child, true);
+       }
+
+       public void addView(LabelIconView child, boolean isAddView) {
+               if (isAddView) {
+                       super.addView(child);
+               }
+               labelIconViewList.add(child);
+       }
+
+       public void removeAllViews() {
+               super.removeAllViews();
+               labelIconViewList.clear();
+       }
+
+       public void moveTop(LabelIconView child) {
+               this.removeView(child);
+               this.addView(child);
+       }
+
+       private LabelIconView getView(int x, int y, LabelIconView v,
+                       List<LabelIconView> list, boolean flag) {
+               Rect rect = new Rect();
+
+               if (v != null) {
+                       if (flag) {
+                               v.getHitRect(rect);
+                               if (rect.contains(x, y)) {
+                                       return v;
+                               }
+                       }
+               }
+               for (LabelIconView view : list) {
+                       if (view != v) {
+                               view.getHitRect(rect);
+                               if (rect.contains(x, y)) {
+                                       return view;
+                               }
+                       }
+               }
+               return null;
+       }
+
+       public void setScrollView(final IconScrollView scrollView) {
+               this.scrollView = scrollView;
+               this.setOnLongClickListener(this);
+               // this.setLongClickable(true);
+
+               anime = AnimationUtils.loadAnimation(context, R.anim.sample);
+               anime.setAnimationListener(new AnimationListener() {
+                       public void onAnimationStart(Animation animation) {
+                       }
+
+                       public void onAnimationRepeat(Animation animation) {
+                       }
+
+                       public void onAnimationEnd(Animation animation) {
+                               // if (isBt2Click) {
+                               // bt2.performClick();
+                               // isBt2Click = false;
+                               // }
+                               clearTarget();
+                               target = null;
+                               destTarget = null;
+
+                               scrollView.setScrollable(true);
+                               scrollView.requestDisallowInterceptTouchEvent(false);
+                               scrollView.invalidate();
+                       }
+               });
+       }
+
+       public void refresh() {
+               if (selectedTarget != null) {
+                       boolean flag = false;
+                       long id = selectedTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       selectedTarget = view;
+                                       target = view;
+                                       setSelected(selectedTarget);
+                                       flag = true;
+                               }
+                       }
+                       if (!flag) {
+                               // 表示されなかった(CLOSEなど)
+                               selectedTarget = null;
+                               target = null;
+                       }
+               }
+               if (cutTarget != null) {
+                       boolean flag = false;
+                       long id = cutTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       cutTarget = view;
+                                       if (selectedTarget != cutTarget) {
+                                               clearColorFilter(cutTarget);
+                                       }
+                                       flag = true;
+                               }
+                       }
+                       if (!flag) {
+                               // 表示されなかった(CLOSEなど)
+                               cutTarget = null;
+                       }
+               }
+       }
+
+       public void clearTarget() {
+               if (selectedTarget != null) {
+                       clearColorFilter(selectedTarget);
+                       selectedTarget = null;
+               }
+               target = null;
+       }
+
+       public LabelIconView getCutTarget() {
+               return cutTarget;
+       }
+
+       public void setCutTarget(LabelIconView cutTarget) {
+               setCutTarget(cutTarget, true);
+       }
+
+       public void setCutTarget(LabelIconView cutTarget, boolean isUnselected) {
+               if (this.cutTarget != null){
+                       setAlpha(this.cutTarget);
+               }
+               this.cutTarget = cutTarget;
+               if (isUnselected) {
+                       selectedTarget = null;
+                       target = null;
+               }
+       }
+
+       private void setSelected(LabelIconView t) {
+               t.setAlpha(255);
+               t.setColorFilter(0x88ff0000, Mode.LIGHTEN);
+       }
+
+       private void setAlpha(LabelIconView v) {
+               v.setAlpha(255);
+       }
+
+       private void setGrayAlpha(LabelIconView v) {
+               v.setAlpha(128);
+       }
+
+       private void clearColorFilter(LabelIconView v) {
+               v.clearColorFilter();
+               if (v == cutTarget) {
+                       setGrayAlpha(v);
+               }
+       }
+
+       @Override
+       public boolean onTouchEvent(MotionEvent event) {
+               try {
+                       if (!isElabledTouchEvent()) {
+                               return super.onTouchEvent(event);
+                       }
+
+                       int x = (int) event.getRawX();
+                       int y = (int) event.getRawY();
+
+                       int dx = scrollView.getLeft();
+                       int dy = scrollView.getTop();
+
+                       x -= dx;
+                       y -= dy;
+
+                       int sx = x + scrollView.getScrollX();
+                       int sy = y + scrollView.getScrollY();
+                       LabelIconView v = getView(sx, sy, target, labelIconViewList, true);
+                       LabelIconView obj = (LabelIconView) v;
+
+                       // int size = labelIconViewList.size();
+                       if (target == null) {
+                               target = obj;
+                       }
+                       if (target == null) {
+                               return super.onTouchEvent(event);
+                       }
+
+                       // コメントにすると何が起きるか?
+                       // scrollView.requestDisallowInterceptTouchEvent(true);
+
+                       if (event.getAction() == MotionEvent.ACTION_MOVE) {
+                               if (!longClickFlg) {
+                                       return super.onTouchEvent(event);
+                               }
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                               }
+                               obj = target;
+
+                               int sh = scrollView.getHeight();
+                               int lh = this.getHeight();
+                               int maxY = lh - sh;
+                               int py = scrollView.getScrollY();
+                               int sdy = 10;
+                               int N = 100;
+                               if (y < N) {
+                                       if (py > 0) {
+                                               if (py < sdy) {
+                                                       sdy = py;
+                                               }
+                                               scrollView.smoothScrollTo(0, py - sdy);
+                                               currentY -= sdy;
+                                       }
+                               } else if (sh - y < N) {
+                                       if (py < maxY) {
+                                               if (maxY - py < sdy) {
+                                                       sdy = maxY - py;
+                                               }
+                                               scrollView.smoothScrollTo(0, py + sdy);
+                                               currentY += sdy;
+                                       }
+                               }
+
+                               int diffX = offsetX - x;
+                               int diffY = offsetY - y;
+
+                               currentX -= diffX;
+                               currentY -= diffY;
+                               obj.layout(currentX, currentY, currentX + obj.getWidth(),
+                                               currentY + obj.getHeight());
+
+                               offsetX = x;
+                               offsetY = y;
+
+                               v = getView(sx, sy, target, labelIconViewList, false);
+                               if (destTarget == null) {
+                                       if (v != null) {
+                                               destTarget = v;
+                                               setGrayAlpha(destTarget);
+                                       }
+                               } else {
+                                       if (v != destTarget) {
+                                               setAlpha(destTarget);
+                                               destTarget = v;
+                                               if (destTarget != null) {
+                                                       setGrayAlpha(destTarget);
+                                               }
+                                       }
+                               }
+                       } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
+                               // if (obj == target){
+                               if (obj != null) {
+                                       if (obj != target) {
+                                               clearColorFilter(target);
+                                               target = obj;
+                                       }
+                                       // if (target instanceof StatusIconView){
+                                       if (target.getSelectedView(sx - target.getLeft(), sy
+                                                       - target.getTop()) instanceof StatusIconView) {
+                                               // StatusIconView siv = (StatusIconView) target;
+                                               // LabelIconView rv = siv.getRoot();
+                                               // long id = rv.getNodeId();
+                                               long id = target.getNodeId();
+                                               target = null;
+
+                                               activity.execute(id);
+                                               return super.onTouchEvent(event);
+                                               // return true;
+                                       }
+
+                                       if (selectedTarget != null && selectedTarget == target) {
+                                               long id = selectedTarget.getNodeId();
+
+                                               clearColorFilter(target);
+                                               target = null;
+                                               selectedTarget = target;
+                                               activity.targetSelectedChanged(true);
+
+                                               activity.executeView(id);
+
+                                               return super.onTouchEvent(event);
+                                       }
+
+                                       // ここに移動
+                                       scrollView.requestDisallowInterceptTouchEvent(true);
+
+                                       offsetX = x;
+                                       offsetY = y;
+                                       // TODO
+                                       currentX = obj.getLeft();
+                                       currentY = obj.getTop();
+
+                                       setSelected(target);
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(true);
+                                       
+                                       // コメントにしたが、デグレードするかも
+                                       // scrollView.setScrollable(false);
+                               } else {
+                                       clearColorFilter(target);
+                                       target = null;
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(false);
+                               }
+                               // return false;
+                       } else if (event.getAction() == MotionEvent.ACTION_UP) {
+                               if (!longClickFlg) {
+                                       return super.onTouchEvent(event);
+                               }
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                                       // return true;
+                               }
+                               obj = target;
+
+                               // obj.setVisibility(View.GONE);
+                               if (destTarget == null || destTarget instanceof StatusIconView) {
+                                       obj.setAnimation(anime);
+                                       obj.startAnimation(anime);
+                                       // layout.removeView(obj);
+
+                                       int srcX = target.getInitX();
+                                       int srcY = target.getInitY();
+                                       target.layout(srcX, srcY, srcX + target.getWidth(), srcY
+                                                       + target.getHeight());
+                                       setAlpha(target);
+                               } else {
+                                       long src = target.getNodeId();
+                                       long dst = destTarget.getNodeId();
+                                       activity.execute(src, dst);
+
+                                       // TODO
+                                       target = null;
+                                       destTarget = null;
+
+                                       // T29171
+                                       clearTarget();
+
+                                       scrollView.setScrollable(true);
+                                       scrollView.requestDisallowInterceptTouchEvent(false);
+                                       scrollView.invalidate();
+                               }
+
+                               longClickFlg = false;
+                       }
+
+                       return super.onTouchEvent(event);
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       return false;
+               }
+       }
+
+       @Override
+       public boolean onLongClick(View view) {
+               if (!isElabledTouchEvent()) {
+                       return true;
+               }
+               if (target == null) {
+                       return false;
+               }
+               if (target instanceof StatusIconView) {
+                       return false;
+               }
+
+               LabelIconView v = (LabelIconView) target;
+               setGrayAlpha(v);
+               v.clearColorFilter();
+
+               moveTop(target);
+
+               longClickFlg = true;
+               return true;
+       }
+
+       public boolean isElabledTouchEvent() {
+               return elabledTouchEvent;
+       }
+
+       public void setElabledTouchEvent(boolean elabledTouchEvent) {
+               this.elabledTouchEvent = elabledTouchEvent;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/af/60206e317bf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/af/60206e317bf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..bfab1ba
--- /dev/null
@@ -0,0 +1,317 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfError;
+
+public class FolderUtil {
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               List<Notebook> noteBookList = util.getNoteBookList();
+
+               long id;
+               Node top = nodeDao.searchRoot(db);
+
+               for (Notebook notebook : noteBookList) {
+                       String guid = notebook.getGuid();
+                       String name = notebook.getName();
+
+                       Node oldBook = nodeDao.searchByGuid(db, guid);
+                       if (oldBook == null) {
+                               DirNode dirNode = new DirNode(name, null);
+                               guid = notebook.getGuid();
+                               dirNode.setGuid(guid);
+
+                               id = addDirNodeNT(top, dirNode);
+                       } else {
+                               String oldName = oldBook.getName();
+                               if (!name.equals(oldName)) {
+                                       // 名称が異なる
+                                       nodeDao.updateNameNT(oldBook, name);
+                               }
+                       }
+               }
+
+               // 削除
+               List<Node> list = nodeDao.searchBook(db);
+               for (Node node : list) {
+                       boolean isFound = false;
+                       for (Notebook book : noteBookList) {
+                               String guid = book.getGuid();
+                               if (node.getGuid().equals(guid)) {
+                                       isFound = true;
+                                       break;
+                               }
+                       }
+                       if (!isFound) {
+                               if (CommonUtil.isNull(node.getChildrenString())) {
+                                       // 子が無い場合は削除
+                                       nodeDao.deleteNT(node.getId());
+                               } else {
+                                       // フォルダに変更
+                                       nodeDao.updateGuidNT(node, null);
+                               }
+                       }
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               // TODO
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       // TODO
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       // TODO
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       // TODO
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) {
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               if (!util.isLoggedIn()){
+                       return;
+               }
+               
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+
+               db.beginTransaction();
+               try {
+                       if (isRoot) {
+                               if (nodeDao.isEmpty()) {
+                                       Node top = new RootNode("/", null);
+                                       top.setStatus(Node.Status.OPEN);
+                                       long id = nodeDao.addNT(top);
+                                       top.setId(id);
+                               }
+                       }
+
+                       if (isBook) {
+                               updateNotebook(db);
+                       }
+                       if (isNote) {
+                               nodeDao.updateNoteFlag(0);
+                               updateNote(db);
+                               deleteNode(db);                 
+                       }
+                       
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/b3/108aafbb7cf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/b3/108aafbb7cf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..5941389
--- /dev/null
@@ -0,0 +1,81 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+import android.content.Intent;
+
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+       private Context context;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+               if (activity != null) {
+                       context = activity.getApplicationContext();
+               }
+       }
+
+       public void doExecute() {
+               try {
+//                     FolderUtil test = FolderUtil.getInstance();
+//                     test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e){
+                       EfError error = e.getError();
+               } catch (Exception e) {
+                       throw new EfException(EfError.SYSTEM);
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+//             if (context != null) {
+//                     Intent intent = new Intent(Constant.ACTION_UPDATE);
+//                     context.sendBroadcast(intent);
+//             }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/b6/40a0e9e37ef9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/b6/40a0e9e37ef9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..aed8e3d
--- /dev/null
@@ -0,0 +1,24 @@
+package com.yuji.ef.exception;
+
+import android.content.Context;
+import android.widget.Toast;
+
+public class EfException extends Exception {
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 2248123315072811891L;
+       private EfError error;
+
+       public EfException(EfError error){
+               this.error = error;
+       }
+       
+       public EfError getError(){
+               return error;
+       }
+       
+       public void msg(Context context, String msg){
+               Toast.makeText(context, msg, Toast.LENGTH_LONG);                
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/b7/60c5a7da7af9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/b7/60c5a7da7af9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..3170281
--- /dev/null
@@ -0,0 +1,5 @@
+package com.yuji.ef.exception;
+
+public class RollbackException extends EfException {
+
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/b8/10218b3388f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/b8/10218b3388f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..2dee398
--- /dev/null
@@ -0,0 +1,88 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+import android.content.Intent;
+
+import com.yuji.ef.Initialize;
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.Debug;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+       }
+
+       public void doExecute() throws EfException {
+               try {
+                       // FolderUtil test = FolderUtil.getInstance();
+                       // test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e) {
+                       EfError error = e.getError();
+                       // TODO
+                       Intent intent = new Intent(Constant.ACTION_UPDATE);
+                       Initialize.getContext().sendBroadcast(intent);
+                       //EfException.msg(Initialize.getContext(), "データの更新に失敗しました(a)");
+                       Debug.d(this, null, e);
+                       throw e;
+               } catch (Exception e) {
+                       // TODO
+                       EfException.msg(Initialize.getContext(), "データの更新に失敗しました(b)");
+                       throw new EfException(EfError.SYSTEM);
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+               // if (context != null) {
+               // Intent intent = new Intent(Constant.ACTION_UPDATE);
+               // context.sendBroadcast(intent);
+               // }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/ba/101b9a7e89f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/ba/101b9a7e89f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..6248e5b
--- /dev/null
@@ -0,0 +1,35 @@
+package com.yuji.ef.exception;
+
+import com.yuji.ef.Initialize;
+import com.yuji.ef.common.Constant;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Handler;
+import android.widget.Toast;
+
+public class EfException extends Exception {
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 2248123315072811891L;
+       private EfError error;
+
+       public EfException(EfError error) {
+               this.error = error;
+       }
+
+       public EfError getError() {
+               return error;
+       }
+
+       public static void msg(){
+               Intent intent = new Intent(Constant.ACTION_UPDATE);
+               intent.putExtra("MESSAGE", "メッセージ");
+               Initialize.getContext().sendBroadcast(intent);
+       }
+       
+       public static void msg(Context context, String msg) {
+               Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/ba/e0068a967af9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/ba/e0068a967af9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..c1515d5
--- /dev/null
@@ -0,0 +1,5 @@
+package com.yuji.ef.exception;
+
+public class EfException extends Exception {
+
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/bc/b0170b5c7bf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/bc/b0170b5c7bf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..377adca
--- /dev/null
@@ -0,0 +1,318 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.RollbackException;
+
+public class FolderUtil {
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               List<Notebook> noteBookList = util.getNoteBookList();
+
+               long id;
+               Node top = nodeDao.searchRoot(db);
+
+               for (Notebook notebook : noteBookList) {
+                       String guid = notebook.getGuid();
+                       String name = notebook.getName();
+
+                       Node oldBook = nodeDao.searchByGuid(db, guid);
+                       if (oldBook == null) {
+                               DirNode dirNode = new DirNode(name, null);
+                               guid = notebook.getGuid();
+                               dirNode.setGuid(guid);
+
+                               id = addDirNodeNT(top, dirNode);
+                       } else {
+                               String oldName = oldBook.getName();
+                               if (!name.equals(oldName)) {
+                                       // 名称が異なる
+                                       nodeDao.updateNameNT(oldBook, name);
+                               }
+                       }
+               }
+
+               // 削除
+               List<Node> list = nodeDao.searchBook(db);
+               for (Node node : list) {
+                       boolean isFound = false;
+                       for (Notebook book : noteBookList) {
+                               String guid = book.getGuid();
+                               if (node.getGuid().equals(guid)) {
+                                       isFound = true;
+                                       break;
+                               }
+                       }
+                       if (!isFound) {
+                               if (CommonUtil.isNull(node.getChildrenString())) {
+                                       // 子が無い場合は削除
+                                       nodeDao.deleteNT(node.getId());
+                               } else {
+                                       // フォルダに変更
+                                       nodeDao.updateGuidNT(node, null);
+                               }
+                       }
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) throws RollbackException {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) {
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               if (!util.isLoggedIn()){
+                       throw new RollbackException(EfError.NO_LOGIN);
+               }
+               
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+
+               db.beginTransaction();
+               try {
+                       if (isRoot) {
+                               if (nodeDao.isEmpty()) {
+                                       Node top = new RootNode("/", null);
+                                       top.setStatus(Node.Status.OPEN);
+                                       long id = nodeDao.addNT(top);
+                                       top.setId(id);
+                               }
+                       }
+
+                       if (isBook) {
+                               updateNotebook(db);
+                       }
+                       if (isNote) {
+                               nodeDao.updateNoteFlag(0);
+                               updateNote(db);
+                               deleteNode(db);                 
+                       }
+                       
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/bd/503aaec88af9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/bd/503aaec88af9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..9df3566
--- /dev/null
@@ -0,0 +1,321 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.RollbackException;
+
+public class FolderUtil {
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               List<Notebook> noteBookList = util.getNoteBookList();
+
+               long id;
+               Node top = nodeDao.searchRoot(db);
+
+               for (Notebook notebook : noteBookList) {
+                       String guid = notebook.getGuid();
+                       String name = notebook.getName();
+
+                       Node oldBook = nodeDao.searchByGuid(db, guid);
+                       if (oldBook == null) {
+                               DirNode dirNode = new DirNode(name, null);
+                               guid = notebook.getGuid();
+                               dirNode.setGuid(guid);
+
+                               id = addDirNodeNT(top, dirNode);
+                       } else {
+                               String oldName = oldBook.getName();
+                               if (!name.equals(oldName)) {
+                                       // 名称が異なる
+                                       nodeDao.updateNameNT(oldBook, name);
+                               }
+                       }
+               }
+
+               // 削除
+               List<Node> list = nodeDao.searchBook(db);
+               for (Node node : list) {
+                       boolean isFound = false;
+                       for (Notebook book : noteBookList) {
+                               String guid = book.getGuid();
+                               if (node.getGuid().equals(guid)) {
+                                       isFound = true;
+                                       break;
+                               }
+                       }
+                       if (!isFound) {
+                               if (CommonUtil.isNull(node.getChildrenString())) {
+                                       // 子が無い場合は削除
+                                       nodeDao.deleteNT(node.getId());
+                               } else {
+                                       // フォルダに変更
+                                       nodeDao.updateGuidNT(node, null);
+                               }
+                       }
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db) throws RollbackException {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) throws RollbackException {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) throws RollbackException {
+               // TODO
+               // FOO
+               throw new RollbackException(EfError.NONE);
+//             EvernoteUtil util = EvernoteUtil.getInstance();
+//             if (!util.isLoggedIn()){
+//                     throw new RollbackException(EfError.NO_LOGIN);
+//             }
+//             
+//             DatabaseHelper helper = DatabaseHelper.getInstance();
+//             SQLiteDatabase db = helper.getWritableDatabase();
+//
+//             db.beginTransaction();
+//             try {
+//                     if (isRoot) {
+//                             if (nodeDao.isEmpty()) {
+//                                     Node top = new RootNode("/", null);
+//                                     top.setStatus(Node.Status.OPEN);
+//                                     long id = nodeDao.addNT(top);
+//                                     top.setId(id);
+//                             }
+//                     }
+//
+//                     if (isBook) {
+//                             updateNotebook(db);
+//                     }
+//                     if (isNote) {
+//                             nodeDao.updateNoteFlag(0);
+//                             updateNote(db);
+//                             deleteNode(db);                 
+//                     }
+//                     
+//                     db.setTransactionSuccessful();
+//             } finally {
+//                     db.endTransaction();
+//             }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/c6/502bbdc57ef9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/c6/502bbdc57ef9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..5a1d81e
--- /dev/null
@@ -0,0 +1,36 @@
+package com.yuji.ef;
+
+import android.content.Context;
+
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.pref.EditPrefUtil;
+import com.yuji.ef.service.NoteUpdatorService;
+import com.yuji.ef.utility.EvernoteUtil;
+
+public class Initialize {
+       public static Context context;
+       private static boolean isInit = true;
+       
+       public static void initialize(Context applicatonContext) {
+               if (!isInit) {
+                       return;
+               }
+
+               try {
+                       EditPrefUtil pref = new EditPrefUtil(context);
+                       pref.getInt(Constant.PREF_UPDATE_TIME, 0);
+                       pref.update();
+                       
+                       EvernoteUtil util = EvernoteUtil.getInstance();
+                       util.setConfig("yuji-k64613", "TODO");
+                       DatabaseHelper.init(context);
+                       
+                       NoteUpdatorService.init(context);
+               } catch (Exception e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+               isInit = false;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/c6/b008564723f800111341a60c8ca6b985 b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/c6/b008564723f800111341a60c8ca6b985
new file mode 100644 (file)
index 0000000..7a231c7
--- /dev/null
@@ -0,0 +1,458 @@
+package com.yuji.ef;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import android.content.Context;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnLongClickListener;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.AnimationUtils;
+import android.widget.FrameLayout;
+
+public class IconFrameLayout extends FrameLayout implements OnLongClickListener {
+       private EverFolderActivity activity = null;
+
+       private LabelIconView target = null;
+       private LabelIconView destTarget = null;
+       private LabelIconView selectedTarget = null;
+       private LabelIconView cutTarget = null;
+       private List<LabelIconView> labelIconViewList = new ArrayList<LabelIconView>();
+
+       private Animation anime;
+       private int currentX;
+       private int currentY;
+       private int offsetX;
+       private int offsetY;
+       private boolean longClickFlg = false;
+       private IconScrollView scrollView;
+       private Context context = this.getContext();
+       private boolean elabledTouchEvent = true;
+
+       public IconFrameLayout(Context context) {
+               super(context);
+       }
+
+       public IconFrameLayout(Context context, AttributeSet attrs) {
+               super(context, attrs);
+       }
+
+       public IconFrameLayout(Context context, AttributeSet attrs, int defStyle) {
+               super(context, attrs, defStyle);
+       }
+
+       public void setActivity(EverFolderActivity activity) {
+               this.activity = activity;
+       }
+
+       @Override
+       protected void onLayout(boolean changed, int left, int top, int right,
+                       int bottom) {
+               super.onLayout(changed, left, top, right, bottom);
+
+               int size = this.getChildCount();
+               for (int i = 0; i < size; i++) {
+                       LabelIconView vv = (LabelIconView) this.getChildAt(i);
+                       int x2 = vv.getInitX();
+                       int y2 = vv.getInitY();
+                       // vv.init(x2, y2);
+                       vv.layout(x2, y2, x2 + vv.getWidth(), y2 + vv.getHeight());
+               }
+       }
+
+       public LabelIconView getSelectedTarget() {
+               return selectedTarget;
+       }
+
+       public void addView(LabelIconView child) {
+               addView(child, true);
+       }
+
+       public void addView(LabelIconView child, boolean isAddView) {
+               if (isAddView) {
+                       super.addView(child);
+               }
+               labelIconViewList.add(child);
+       }
+
+       public void removeAllViews() {
+               super.removeAllViews();
+               labelIconViewList.clear();
+       }
+
+       public void moveTop(LabelIconView child) {
+               this.removeView(child);
+               this.addView(child);
+       }
+
+       private LabelIconView getView(int x, int y, LabelIconView v,
+                       List<LabelIconView> list, boolean flag) {
+               Rect rect = new Rect();
+
+               if (v != null) {
+                       if (flag) {
+                               v.getHitRect(rect);
+                               if (rect.contains(x, y)) {
+                                       return v;
+                               }
+                       }
+               }
+               for (LabelIconView view : list) {
+                       if (view != v) {
+                               view.getHitRect(rect);
+                               if (rect.contains(x, y)) {
+                                       return view;
+                               }
+                       }
+               }
+               return null;
+       }
+
+       public void setScrollView(final IconScrollView scrollView) {
+               this.scrollView = scrollView;
+               this.setOnLongClickListener(this);
+               // this.setLongClickable(true);
+
+               anime = AnimationUtils.loadAnimation(context, R.anim.sample);
+               anime.setAnimationListener(new AnimationListener() {
+                       public void onAnimationStart(Animation animation) {
+                       }
+
+                       public void onAnimationRepeat(Animation animation) {
+                       }
+
+                       public void onAnimationEnd(Animation animation) {
+                               // if (isBt2Click) {
+                               // bt2.performClick();
+                               // isBt2Click = false;
+                               // }
+                               clearTarget();
+                               target = null;
+                               destTarget = null;
+
+                               scrollView.setScrollable(true);
+                               scrollView.requestDisallowInterceptTouchEvent(false);
+                               scrollView.invalidate();
+                       }
+               });
+       }
+
+       public void refresh() {
+               if (selectedTarget != null) {
+                       boolean flag = false;
+                       long id = selectedTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       selectedTarget = view;
+                                       target = view;
+                                       setSelected(selectedTarget);
+                                       flag = true;
+                               }
+                       }
+                       if (!flag) {
+                               // 表示されなかった(CLOSEなど)
+                               selectedTarget = null;
+                               target = null;
+                       }
+               }
+               if (cutTarget != null) {
+                       boolean flag = false;
+                       long id = cutTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       cutTarget = view;
+                                       if (selectedTarget != cutTarget) {
+                                               clearColorFilter(cutTarget);
+                                       }
+                                       flag = true;
+                               }
+                       }
+                       if (!flag) {
+                               // 表示されなかった(CLOSEなど)
+                               cutTarget = null;
+                       }
+               }
+       }
+
+       public void clearTarget() {
+               if (selectedTarget != null) {
+                       clearColorFilter(selectedTarget);
+                       selectedTarget = null;
+               }
+               target = null;
+       }
+
+       public LabelIconView getCutTarget() {
+               return cutTarget;
+       }
+
+       public void setCutTarget(LabelIconView cutTarget) {
+               setCutTarget(cutTarget, true);
+       }
+
+       public void setCutTarget(LabelIconView cutTarget, boolean isUnselected) {
+               if (this.cutTarget != null){
+                       setAlpha(this.cutTarget);
+               }
+               this.cutTarget = cutTarget;
+               if (isUnselected) {
+                       selectedTarget = null;
+                       target = null;
+               }
+       }
+
+       private void setSelected(LabelIconView t) {
+               t.setAlpha(255);
+               t.setColorFilter(0x88ff0000, Mode.LIGHTEN);
+       }
+
+       private void setAlpha(LabelIconView v) {
+               v.setAlpha(255);
+       }
+
+       private void setGrayAlpha(LabelIconView v) {
+               v.setAlpha(128);
+       }
+
+       private void clearColorFilter(LabelIconView v) {
+               v.clearColorFilter();
+               if (v == cutTarget) {
+                       setGrayAlpha(v);
+               }
+       }
+
+       @Override
+       public boolean onTouchEvent(MotionEvent event) {
+               try {
+                       if (!isElabledTouchEvent()) {
+                               return super.onTouchEvent(event);
+                       }
+
+                       int x = (int) event.getRawX();
+                       int y = (int) event.getRawY();
+
+                       int dx = scrollView.getLeft();
+                       int dy = scrollView.getTop();
+
+                       x -= dx;
+                       y -= dy;
+
+                       int sx = x + scrollView.getScrollX();
+                       int sy = y + scrollView.getScrollY();
+                       LabelIconView v = getView(sx, sy, target, labelIconViewList, true);
+                       LabelIconView obj = (LabelIconView) v;
+
+                       // int size = labelIconViewList.size();
+                       if (target == null) {
+                               target = obj;
+                       }
+                       if (target == null) {
+                               return super.onTouchEvent(event);
+                       }
+
+                       // コメントにすると何が起きるか?
+                       // scrollView.requestDisallowInterceptTouchEvent(true);
+
+                       if (event.getAction() == MotionEvent.ACTION_MOVE) {
+                               if (!longClickFlg) {
+                                       return super.onTouchEvent(event);
+                               }
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                               }
+                               obj = target;
+
+                               int sh = scrollView.getHeight();
+                               int lh = this.getHeight();
+                               int maxY = lh - sh;
+                               int py = scrollView.getScrollY();
+                               int sdy = 10;
+                               int N = 100;
+                               if (y < N) {
+                                       if (py > 0) {
+                                               if (py < sdy) {
+                                                       sdy = py;
+                                               }
+                                               scrollView.smoothScrollTo(0, py - sdy);
+                                               currentY -= sdy;
+                                       }
+                               } else if (sh - y < N) {
+                                       if (py < maxY) {
+                                               if (maxY - py < sdy) {
+                                                       sdy = maxY - py;
+                                               }
+                                               scrollView.smoothScrollTo(0, py + sdy);
+                                               currentY += sdy;
+                                       }
+                               }
+
+                               int diffX = offsetX - x;
+                               int diffY = offsetY - y;
+
+                               currentX -= diffX;
+                               currentY -= diffY;
+                               obj.layout(currentX, currentY, currentX + obj.getWidth(),
+                                               currentY + obj.getHeight());
+
+                               offsetX = x;
+                               offsetY = y;
+
+                               v = getView(sx, sy, target, labelIconViewList, false);
+                               if (destTarget == null) {
+                                       if (v != null) {
+                                               destTarget = v;
+                                               setGrayAlpha(destTarget);
+                                       }
+                               } else {
+                                       if (v != destTarget) {
+                                               setAlpha(destTarget);
+                                               destTarget = v;
+                                               if (destTarget != null) {
+                                                       setGrayAlpha(destTarget);
+                                               }
+                                       }
+                               }
+                       } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
+                               // if (obj == target){
+                               if (obj != null) {
+                                       if (obj != target) {
+                                               clearColorFilter(target);
+                                               target = obj;
+                                       }
+                                       // if (target instanceof StatusIconView){
+                                       if (target.getSelectedView(sx - target.getLeft(), sy
+                                                       - target.getTop()) instanceof StatusIconView) {
+                                               // StatusIconView siv = (StatusIconView) target;
+                                               // LabelIconView rv = siv.getRoot();
+                                               // long id = rv.getNodeId();
+                                               long id = target.getNodeId();
+                                               target = null;
+destTarget = null;                                     
+selectedTarget = null;
+
+                                               activity.execute(id);
+                                               return super.onTouchEvent(event);
+                                               // return true;
+                                       }
+
+                                       if (selectedTarget != null && selectedTarget == target) {
+                                               long id = selectedTarget.getNodeId();
+
+                                               clearColorFilter(target);
+                                               target = null;
+                                               selectedTarget = target;
+                                               activity.targetSelectedChanged(true);
+
+                                               activity.executeView(id);
+
+                                               return super.onTouchEvent(event);
+                                       }
+
+                                       // ここに移動
+                                       scrollView.requestDisallowInterceptTouchEvent(true);
+
+                                       offsetX = x;
+                                       offsetY = y;
+                                       // TODO
+                                       currentX = obj.getLeft();
+                                       currentY = obj.getTop();
+
+                                       setSelected(target);
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(true);
+                                       
+                                       // コメントにしたが、デグレードするかも
+                                       // scrollView.setScrollable(false);
+                               } else {
+                                       clearColorFilter(target);
+                                       target = null;
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(false);
+                               }
+                               // return false;
+                       } else if (event.getAction() == MotionEvent.ACTION_UP) {
+                               if (!longClickFlg) {
+                                       return super.onTouchEvent(event);
+                               }
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                                       // return true;
+                               }
+                               obj = target;
+
+                               // obj.setVisibility(View.GONE);
+                               if (destTarget == null || destTarget instanceof StatusIconView) {
+                                       obj.setAnimation(anime);
+                                       obj.startAnimation(anime);
+                                       // layout.removeView(obj);
+
+                                       int srcX = target.getInitX();
+                                       int srcY = target.getInitY();
+                                       target.layout(srcX, srcY, srcX + target.getWidth(), srcY
+                                                       + target.getHeight());
+                                       setAlpha(target);
+                                       
+                                       target = null;
+                                       destTarget = null;                                      
+                               } else {
+                                       long src = target.getNodeId();
+                                       long dst = destTarget.getNodeId();
+                                       activity.execute(src, dst);
+
+                                       // TODO
+                                       target = null;
+                                       destTarget = null;
+
+                                       // T29171
+                                       clearTarget();
+
+                                       scrollView.setScrollable(true);
+                                       scrollView.requestDisallowInterceptTouchEvent(false);
+                                       scrollView.invalidate();
+                               }
+
+                               longClickFlg = false;
+                       }
+
+                       return super.onTouchEvent(event);
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       return false;
+               }
+       }
+
+       @Override
+       public boolean onLongClick(View view) {
+               if (!isElabledTouchEvent()) {
+                       return true;
+               }
+               if (target == null) {
+                       return false;
+               }
+               if (target instanceof StatusIconView) {
+                       return false;
+               }
+
+               LabelIconView v = (LabelIconView) target;
+               setGrayAlpha(v);
+               v.clearColorFilter();
+
+               moveTop(target);
+
+               longClickFlg = true;
+               return true;
+       }
+
+       public boolean isElabledTouchEvent() {
+               return elabledTouchEvent;
+       }
+
+       public void setElabledTouchEvent(boolean elabledTouchEvent) {
+               this.elabledTouchEvent = elabledTouchEvent;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/c8/d06e66577bf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/c8/d06e66577bf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..b700461
--- /dev/null
@@ -0,0 +1,318 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.RollbackException;
+
+public class FolderUtil {
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               List<Notebook> noteBookList = util.getNoteBookList();
+
+               long id;
+               Node top = nodeDao.searchRoot(db);
+
+               for (Notebook notebook : noteBookList) {
+                       String guid = notebook.getGuid();
+                       String name = notebook.getName();
+
+                       Node oldBook = nodeDao.searchByGuid(db, guid);
+                       if (oldBook == null) {
+                               DirNode dirNode = new DirNode(name, null);
+                               guid = notebook.getGuid();
+                               dirNode.setGuid(guid);
+
+                               id = addDirNodeNT(top, dirNode);
+                       } else {
+                               String oldName = oldBook.getName();
+                               if (!name.equals(oldName)) {
+                                       // 名称が異なる
+                                       nodeDao.updateNameNT(oldBook, name);
+                               }
+                       }
+               }
+
+               // 削除
+               List<Node> list = nodeDao.searchBook(db);
+               for (Node node : list) {
+                       boolean isFound = false;
+                       for (Notebook book : noteBookList) {
+                               String guid = book.getGuid();
+                               if (node.getGuid().equals(guid)) {
+                                       isFound = true;
+                                       break;
+                               }
+                       }
+                       if (!isFound) {
+                               if (CommonUtil.isNull(node.getChildrenString())) {
+                                       // 子が無い場合は削除
+                                       nodeDao.deleteNT(node.getId());
+                               } else {
+                                       // フォルダに変更
+                                       nodeDao.updateGuidNT(node, null);
+                               }
+                       }
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) throws RollbackException {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               // TODO
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       // TODO
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       // TODO
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       // TODO
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) {
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               if (!util.isLoggedIn()){
+                       return;
+               }
+               
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+
+               db.beginTransaction();
+               try {
+                       if (isRoot) {
+                               if (nodeDao.isEmpty()) {
+                                       Node top = new RootNode("/", null);
+                                       top.setStatus(Node.Status.OPEN);
+                                       long id = nodeDao.addNT(top);
+                                       top.setId(id);
+                               }
+                       }
+
+                       if (isBook) {
+                               updateNotebook(db);
+                       }
+                       if (isNote) {
+                               nodeDao.updateNoteFlag(0);
+                               updateNote(db);
+                               deleteNode(db);                 
+                       }
+                       
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/ca/e05cfe207bf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/ca/e05cfe207bf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..18cb60f
--- /dev/null
@@ -0,0 +1,10 @@
+package com.yuji.ef.exception;
+
+public enum Error {
+       NONE,
+       
+       NOT_FOUND,
+       NO_LOGIN,       
+       
+       SYSTEM,
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/cd/405db5af89f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/cd/405db5af89f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..184b7c9
--- /dev/null
@@ -0,0 +1,53 @@
+package com.yuji.ef.common;
+
+import android.content.Intent;
+
+public class Constant {
+/*
+       public static final String PREF_USER = "USER";
+       public static final String PREF_PASSWORD = "PASSWORD";
+       public static final String PREF_NOTE_ITEM_TYPE = "NOTE_ITEM_TYPE";
+       public static final String PREF_NOTE_ITEM_GUID = "NOTE_ITEM_GUID";
+       public static final String PREF_NOTE_ITEM_TYPE_TMP = "NOTE_ITEM_TYPE_TMP";
+       public static final String PREF_NOTE_ITEM_GUID_TMP = "NOTE_ITEM_GUID_TMP";
+       public static final String PREF_NOTE_ITEM_GUID_TYPE_TMP = "NOTE_ITEM_GUID_TYPE_TMP";
+       public static final String PREF_NOTE_ITEM_TEXT = "NOTE_ITEM_TEXT";
+       public static final String PREF_NOTE_ORDER = "NOTE_ORDER";
+       public static final String PREF_NOTE_ORDER_BY = "NOTE_ORDER_BY";
+       public static final String PREF_AUTO_UPDATE = "AUTO_UPDATE";
+       public static final String PREF_UPDATE_TIME = "UPDATE_TIME";
+       
+       public static final String EXTRA_GUID = "GUID";
+       public static final String EXTRA_TITLE = "TITLE";
+
+       public static final int NOTE_ITEM_TYPE_NONE = -1;
+       public static final int NOTE_ITEM_TYPE_ALL = 0;
+       public static final int NOTE_ITEM_TYPE_NOTE_BOOK = 1;
+       public static final int NOTE_ITEM_TYPE_TAG = 2;
+       
+       public static final int NOTE_ORDER_NONE = -1;
+       public static final int NOTE_ORDER_CREATE = 0;
+       public static final int NOTE_ORDER_UPDATE = 1;
+       public static final int NOTE_ORDER_TEXT = 2;
+
+       public static final int NOTE_ORDER_BY_ASC = 0;
+       public static final int NOTE_ORDER_BY_DES = 1;
+
+       public static final int OFF = 0;
+       public static final int ON = 1;
+       
+       public static final String ACTION_UPDATE = "com.yuji.ec.UPDATE";
+*/
+       public static final int OFF = 0;
+       public static final int ON = 1;
+
+       public static final String ACTION_UPDATE = "com.yuji.ef.UPDATE";
+       public static final Intent ACTION_MESSAGE = "com.yuji.ef.MESSAGE";
+       public static final Intent ACTION_MESSAGE_MESSAGE = "MESSAGE";
+       
+       //public static final String PREF_UPDATE_TASK_STATUS = "UPDATE_TASK_STATUS";
+       public static final String PREF_UPDATE_TIME = "UPDATE_TIME";
+
+       public static final String LOCK_UPDATE_NOTE = "UPDATE_NOTE";
+
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/cf/40ce1f7589f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/cf/40ce1f7589f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..b45d72f
--- /dev/null
@@ -0,0 +1,25 @@
+package com.yuji.ef.exception;
+
+import android.content.Context;
+import android.os.Handler;
+import android.widget.Toast;
+
+public class EfException extends Exception {
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 2248123315072811891L;
+       private EfError error;
+
+       public EfException(EfError error) {
+               this.error = error;
+       }
+
+       public EfError getError() {
+               return error;
+       }
+
+       public static void msg(Context context, String msg) {
+               Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/d8/e0d88ece7af9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/d8/e0d88ece7af9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/dd/70a4b5fc20f800111341a60c8ca6b985 b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/dd/70a4b5fc20f800111341a60c8ca6b985
new file mode 100644 (file)
index 0000000..b30dab8
--- /dev/null
@@ -0,0 +1,456 @@
+package com.yuji.ef;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import android.content.Context;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnLongClickListener;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.AnimationUtils;
+import android.widget.FrameLayout;
+
+public class IconFrameLayout extends FrameLayout implements OnLongClickListener {
+       private EverFolderActivity activity = null;
+
+       private LabelIconView target = null;
+       private LabelIconView destTarget = null;
+       private LabelIconView selectedTarget = null;
+       private LabelIconView cutTarget = null;
+       private List<LabelIconView> labelIconViewList = new ArrayList<LabelIconView>();
+
+       private Animation anime;
+       private int currentX;
+       private int currentY;
+       private int offsetX;
+       private int offsetY;
+       private boolean longClickFlg = false;
+       private IconScrollView scrollView;
+       private Context context = this.getContext();
+       private boolean elabledTouchEvent = true;
+
+       public IconFrameLayout(Context context) {
+               super(context);
+       }
+
+       public IconFrameLayout(Context context, AttributeSet attrs) {
+               super(context, attrs);
+       }
+
+       public IconFrameLayout(Context context, AttributeSet attrs, int defStyle) {
+               super(context, attrs, defStyle);
+       }
+
+       public void setActivity(EverFolderActivity activity) {
+               this.activity = activity;
+       }
+
+       @Override
+       protected void onLayout(boolean changed, int left, int top, int right,
+                       int bottom) {
+               super.onLayout(changed, left, top, right, bottom);
+
+               int size = this.getChildCount();
+               for (int i = 0; i < size; i++) {
+                       LabelIconView vv = (LabelIconView) this.getChildAt(i);
+                       int x2 = vv.getInitX();
+                       int y2 = vv.getInitY();
+                       // vv.init(x2, y2);
+                       vv.layout(x2, y2, x2 + vv.getWidth(), y2 + vv.getHeight());
+               }
+       }
+
+       public LabelIconView getSelectedTarget() {
+               return selectedTarget;
+       }
+
+       public void addView(LabelIconView child) {
+               addView(child, true);
+       }
+
+       public void addView(LabelIconView child, boolean isAddView) {
+               if (isAddView) {
+                       super.addView(child);
+               }
+               labelIconViewList.add(child);
+       }
+
+       public void removeAllViews() {
+               super.removeAllViews();
+               labelIconViewList.clear();
+       }
+
+       public void moveTop(LabelIconView child) {
+               this.removeView(child);
+               this.addView(child);
+       }
+
+       private LabelIconView getView(int x, int y, LabelIconView v,
+                       List<LabelIconView> list, boolean flag) {
+               Rect rect = new Rect();
+
+               if (v != null) {
+                       if (flag) {
+                               v.getHitRect(rect);
+                               if (rect.contains(x, y)) {
+                                       return v;
+                               }
+                       }
+               }
+               for (LabelIconView view : list) {
+                       if (view != v) {
+                               view.getHitRect(rect);
+                               if (rect.contains(x, y)) {
+                                       return view;
+                               }
+                       }
+               }
+               return null;
+       }
+
+       public void setScrollView(final IconScrollView scrollView) {
+               this.scrollView = scrollView;
+               this.setOnLongClickListener(this);
+               // this.setLongClickable(true);
+
+               anime = AnimationUtils.loadAnimation(context, R.anim.sample);
+               anime.setAnimationListener(new AnimationListener() {
+                       public void onAnimationStart(Animation animation) {
+                       }
+
+                       public void onAnimationRepeat(Animation animation) {
+                       }
+
+                       public void onAnimationEnd(Animation animation) {
+                               // if (isBt2Click) {
+                               // bt2.performClick();
+                               // isBt2Click = false;
+                               // }
+                               clearTarget();
+                               target = null;
+                               destTarget = null;
+
+                               scrollView.setScrollable(true);
+                               scrollView.requestDisallowInterceptTouchEvent(false);
+                               scrollView.invalidate();
+                       }
+               });
+       }
+
+       public void refresh() {
+               if (selectedTarget != null) {
+                       boolean flag = false;
+                       long id = selectedTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       selectedTarget = view;
+                                       target = view;
+                                       setSelected(selectedTarget);
+                                       flag = true;
+                               }
+                       }
+                       if (!flag) {
+                               // 表示されなかった(CLOSEなど)
+                               selectedTarget = null;
+                               target = null;
+                       }
+               }
+               if (cutTarget != null) {
+                       boolean flag = false;
+                       long id = cutTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       cutTarget = view;
+                                       if (selectedTarget != cutTarget) {
+                                               clearColorFilter(cutTarget);
+                                       }
+                                       flag = true;
+                               }
+                       }
+                       if (!flag) {
+                               // 表示されなかった(CLOSEなど)
+                               cutTarget = null;
+                       }
+               }
+       }
+
+       public void clearTarget() {
+               if (selectedTarget != null) {
+                       clearColorFilter(selectedTarget);
+                       selectedTarget = null;
+               }
+               target = null;
+       }
+
+       public LabelIconView getCutTarget() {
+               return cutTarget;
+       }
+
+       public void setCutTarget(LabelIconView cutTarget) {
+               setCutTarget(cutTarget, true);
+       }
+
+       public void setCutTarget(LabelIconView cutTarget, boolean isUnselected) {
+               if (this.cutTarget != null){
+                       setAlpha(this.cutTarget);
+               }
+               this.cutTarget = cutTarget;
+               if (isUnselected) {
+                       selectedTarget = null;
+                       target = null;
+               }
+       }
+
+       private void setSelected(LabelIconView t) {
+               t.setAlpha(255);
+               t.setColorFilter(0x88ff0000, Mode.LIGHTEN);
+       }
+
+       private void setAlpha(LabelIconView v) {
+               v.setAlpha(255);
+       }
+
+       private void setGrayAlpha(LabelIconView v) {
+               v.setAlpha(128);
+       }
+
+       private void clearColorFilter(LabelIconView v) {
+               v.clearColorFilter();
+               if (v == cutTarget) {
+                       setGrayAlpha(v);
+               }
+       }
+
+       @Override
+       public boolean onTouchEvent(MotionEvent event) {
+               try {
+                       if (!isElabledTouchEvent()) {
+                               return super.onTouchEvent(event);
+                       }
+
+                       int x = (int) event.getRawX();
+                       int y = (int) event.getRawY();
+
+                       int dx = scrollView.getLeft();
+                       int dy = scrollView.getTop();
+
+                       x -= dx;
+                       y -= dy;
+
+                       int sx = x + scrollView.getScrollX();
+                       int sy = y + scrollView.getScrollY();
+                       LabelIconView v = getView(sx, sy, target, labelIconViewList, true);
+                       LabelIconView obj = (LabelIconView) v;
+
+                       // int size = labelIconViewList.size();
+                       if (target == null) {
+                               target = obj;
+                       }
+                       if (target == null) {
+                               return super.onTouchEvent(event);
+                       }
+
+                       // コメントにすると何が起きるか?
+                       // scrollView.requestDisallowInterceptTouchEvent(true);
+
+                       if (event.getAction() == MotionEvent.ACTION_MOVE) {
+                               if (!longClickFlg) {
+                                       return super.onTouchEvent(event);
+                               }
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                               }
+                               obj = target;
+
+                               int sh = scrollView.getHeight();
+                               int lh = this.getHeight();
+                               int maxY = lh - sh;
+                               int py = scrollView.getScrollY();
+                               int sdy = 10;
+                               int N = 100;
+                               if (y < N) {
+                                       if (py > 0) {
+                                               if (py < sdy) {
+                                                       sdy = py;
+                                               }
+                                               scrollView.smoothScrollTo(0, py - sdy);
+                                               currentY -= sdy;
+                                       }
+                               } else if (sh - y < N) {
+                                       if (py < maxY) {
+                                               if (maxY - py < sdy) {
+                                                       sdy = maxY - py;
+                                               }
+                                               scrollView.smoothScrollTo(0, py + sdy);
+                                               currentY += sdy;
+                                       }
+                               }
+
+                               int diffX = offsetX - x;
+                               int diffY = offsetY - y;
+
+                               currentX -= diffX;
+                               currentY -= diffY;
+                               obj.layout(currentX, currentY, currentX + obj.getWidth(),
+                                               currentY + obj.getHeight());
+
+                               offsetX = x;
+                               offsetY = y;
+
+                               v = getView(sx, sy, target, labelIconViewList, false);
+                               if (destTarget == null) {
+                                       if (v != null) {
+                                               destTarget = v;
+                                               setGrayAlpha(destTarget);
+                                       }
+                               } else {
+                                       if (v != destTarget) {
+                                               setAlpha(destTarget);
+                                               destTarget = v;
+                                               if (destTarget != null) {
+                                                       setGrayAlpha(destTarget);
+                                               }
+                                       }
+                               }
+                       } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
+                               // if (obj == target){
+                               if (obj != null) {
+                                       if (obj != target) {
+                                               clearColorFilter(target);
+                                               target = obj;
+                                       }
+                                       // if (target instanceof StatusIconView){
+                                       if (target.getSelectedView(sx - target.getLeft(), sy
+                                                       - target.getTop()) instanceof StatusIconView) {
+                                               // StatusIconView siv = (StatusIconView) target;
+                                               // LabelIconView rv = siv.getRoot();
+                                               // long id = rv.getNodeId();
+                                               long id = target.getNodeId();
+                                               target = null;
+
+                                               activity.execute(id);
+                                               return super.onTouchEvent(event);
+                                               // return true;
+                                       }
+
+                                       if (selectedTarget != null && selectedTarget == target) {
+                                               long id = selectedTarget.getNodeId();
+
+                                               clearColorFilter(target);
+                                               target = null;
+                                               selectedTarget = target;
+                                               activity.targetSelectedChanged(true);
+
+                                               activity.executeView(id);
+
+                                               return super.onTouchEvent(event);
+                                       }
+
+                                       // ここに移動
+                                       scrollView.requestDisallowInterceptTouchEvent(true);
+
+                                       offsetX = x;
+                                       offsetY = y;
+                                       // TODO
+                                       currentX = obj.getLeft();
+                                       currentY = obj.getTop();
+
+                                       setSelected(target);
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(true);
+                                       
+                                       // コメントにしたが、デグレードするかも
+                                       // scrollView.setScrollable(false);
+                               } else {
+                                       clearColorFilter(target);
+                                       target = null;
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(false);
+                               }
+                               // return false;
+                       } else if (event.getAction() == MotionEvent.ACTION_UP) {
+                               if (!longClickFlg) {
+                                       return super.onTouchEvent(event);
+                               }
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                                       // return true;
+                               }
+                               obj = target;
+
+                               // obj.setVisibility(View.GONE);
+                               if (destTarget == null || destTarget instanceof StatusIconView) {
+                                       obj.setAnimation(anime);
+                                       obj.startAnimation(anime);
+                                       // layout.removeView(obj);
+
+                                       int srcX = target.getInitX();
+                                       int srcY = target.getInitY();
+                                       target.layout(srcX, srcY, srcX + target.getWidth(), srcY
+                                                       + target.getHeight());
+                                       setAlpha(target);
+                                       
+                                       target = null;
+                                       destTarget = null;                                      
+                               } else {
+                                       long src = target.getNodeId();
+                                       long dst = destTarget.getNodeId();
+                                       activity.execute(src, dst);
+
+                                       // TODO
+                                       target = null;
+                                       destTarget = null;
+
+                                       // T29171
+                                       clearTarget();
+
+                                       scrollView.setScrollable(true);
+                                       scrollView.requestDisallowInterceptTouchEvent(false);
+                                       scrollView.invalidate();
+                               }
+
+                               longClickFlg = false;
+                       }
+
+                       return super.onTouchEvent(event);
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       return false;
+               }
+       }
+
+       @Override
+       public boolean onLongClick(View view) {
+               if (!isElabledTouchEvent()) {
+                       return true;
+               }
+               if (target == null) {
+                       return false;
+               }
+               if (target instanceof StatusIconView) {
+                       return false;
+               }
+
+               LabelIconView v = (LabelIconView) target;
+               setGrayAlpha(v);
+               v.clearColorFilter();
+
+               moveTop(target);
+
+               longClickFlg = true;
+               return true;
+       }
+
+       public boolean isElabledTouchEvent() {
+               return elabledTouchEvent;
+       }
+
+       public void setElabledTouchEvent(boolean elabledTouchEvent) {
+               this.elabledTouchEvent = elabledTouchEvent;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/dd/a033a51981f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/dd/a033a51981f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..67e4c0e
--- /dev/null
@@ -0,0 +1,320 @@
+package com.yuji.ef.utility;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.evernote.edam.notestore.NoteList;
+import com.evernote.edam.type.Note;
+import com.evernote.edam.type.Notebook;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.RollbackException;
+
+public class FolderUtil {
+       private EvernoteUtil util = EvernoteUtil.getInstance();
+       private NodeDao nodeDao = (NodeDao) NodeCacheDao.getInstance();
+
+       public static FolderUtil getInstance() {
+               if (instance == null) {
+                       instance = new FolderUtil();
+               }
+               return instance;
+       }
+
+       private static FolderUtil instance = null;
+
+       private FolderUtil() {
+
+       }
+
+       public void updateNotebook(SQLiteDatabase db) {
+               List<Notebook> noteBookList = util.getNoteBookList();
+
+               long id;
+               Node top = nodeDao.searchRoot(db);
+
+               for (Notebook notebook : noteBookList) {
+                       String guid = notebook.getGuid();
+                       String name = notebook.getName();
+
+                       Node oldBook = nodeDao.searchByGuid(db, guid);
+                       if (oldBook == null) {
+                               DirNode dirNode = new DirNode(name, null);
+                               guid = notebook.getGuid();
+                               dirNode.setGuid(guid);
+
+                               id = addDirNodeNT(top, dirNode);
+                       } else {
+                               String oldName = oldBook.getName();
+                               if (!name.equals(oldName)) {
+                                       // 名称が異なる
+                                       nodeDao.updateNameNT(oldBook, name);
+                               }
+                       }
+               }
+
+               // 削除
+               List<Node> list = nodeDao.searchBook(db);
+               for (Node node : list) {
+                       boolean isFound = false;
+                       for (Notebook book : noteBookList) {
+                               String guid = book.getGuid();
+                               if (node.getGuid().equals(guid)) {
+                                       isFound = true;
+                                       break;
+                               }
+                       }
+                       if (!isFound) {
+                               if (CommonUtil.isNull(node.getChildrenString())) {
+                                       // 子が無い場合は削除
+                                       nodeDao.deleteNT(node.getId());
+                               } else {
+                                       // フォルダに変更
+                                       nodeDao.updateGuidNT(node, null);
+                               }
+                       }
+               }
+       }
+
+       public void updateNote(SQLiteDatabase db) throws RollbackException {
+               List<Node> list = nodeDao.searchSelectedBook(db);
+               for (Node node : list) {
+                       String guid = node.getGuid();
+                       List<NoteList> noteListList = util.getNoteListByNotebook(guid);
+                       updateNote(db, noteListList);
+               }
+               // FOO
+               throw new RollbackException(EfError.NONE);
+       }
+
+       public void updateNote(SQLiteDatabase db, List<NoteList> noteListList) throws RollbackException {
+               for (NoteList noteList : noteListList) {
+                       List<Note> notes = noteList.getNotes();
+                       for (Note note : notes) {
+                               String name = note.getTitle();
+                               String guid = note.getGuid();
+                               String nbGuid = note.getNotebookGuid();
+
+                               Node oldNote = nodeDao.searchByGuid(db, guid);
+                               if (oldNote == null) {
+                                       // 新規ノート
+                                       DirNode parent = (DirNode) nodeDao.searchByGuid(db, nbGuid);
+                                       if (parent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       FileNode fileNode = new FileNode(name, null);
+                                       fileNode.setGuid(guid);
+
+                                       long id = addFileNodeNT(parent, fileNode);
+
+                                       oldNote = fileNode;
+                                       oldNote.setId(id);
+                               } else {
+                                       DirNode oldParent = (DirNode) nodeDao.searchById(db,
+                                                       oldNote.getParent());
+                                       if (oldParent == null) {
+                                               throw new RollbackException(EfError.NOT_FOUND);
+                                       }
+
+                                       String oldName = oldNote.getName();
+                                       if (!name.equals(oldName)) {
+                                               // 名称が異なる
+                                               nodeDao.updateNameNT(oldNote, name);
+                                       }
+
+                                       String pGuid = oldParent.getGuid();
+                                       if (!CommonUtil.isNull(pGuid) && !pGuid.equals(nbGuid)) {
+                                               // 親が異なる
+                                               DirNode parent = (DirNode) nodeDao.searchByGuid(db,
+                                                               nbGuid);
+                                               if (parent == null) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+
+                                               long id;
+                                               id = nodeDao.removeChildrenIdNT(oldParent,
+                                                               oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               id = nodeDao.addChildrenIdNT(parent, oldNote.getId());
+                                               if (id < 0) {
+                                                       throw new RollbackException(EfError.NOT_FOUND);
+                                               }
+                                               nodeDao.updateParentNT(oldNote, parent.getId());
+                                       }
+                               }
+                               // Evernoteに存在するノートである
+                               nodeDao.updateFlagNT(oldNote, 1);
+                       }
+               }
+       }
+
+       private void deleteNode(SQLiteDatabase db) {
+               List<Node> list = nodeDao.searchNoteByFlag(db, 0);
+               for (Node node : list) {
+                       nodeDao.deleteNT(node.getId());
+                       long pid = node.getParent();
+                       Node p = nodeDao.searchById(db, pid);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, pid);
+                       }
+               }
+       }
+
+       public void update(boolean isRoot, boolean isBook, boolean isNote) throws RollbackException {
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               if (!util.isLoggedIn()){
+                       throw new RollbackException(EfError.NO_LOGIN);
+               }
+               
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+
+               db.beginTransaction();
+               try {
+                       if (isRoot) {
+                               if (nodeDao.isEmpty()) {
+                                       Node top = new RootNode("/", null);
+                                       top.setStatus(Node.Status.OPEN);
+                                       long id = nodeDao.addNT(top);
+                                       top.setId(id);
+                               }
+                       }
+
+                       if (isBook) {
+                               updateNotebook(db);
+                       }
+                       if (isNote) {
+                               nodeDao.updateNoteFlag(0);
+                               updateNote(db);
+                               deleteNode(db);                 
+                       }
+                       
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+       }
+
+       public long addFileNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addFileNode(db, parent, node);
+       }
+
+       public long addFileNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addFileNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addFileNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               nodeDao.addChildrenIdNT(parent, id);
+               return id;
+       }
+
+       public long addDirNode(Node parent, Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return addDirNode(db, parent, node);
+       }
+
+       public long addDirNode(SQLiteDatabase db, Node parent, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = addDirNodeNT(parent, node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long addDirNodeNT(Node parent, Node node) {
+               long id;
+               node.setParent(parent.getId());
+               id = nodeDao.addNT(node);
+               node.setId(id);
+               nodeDao.addChildrenIdNT(parent, node.getId());
+               return id;
+       }
+
+       public long deleteNode(Node node) {
+               DatabaseHelper helper = DatabaseHelper.getInstance();
+               SQLiteDatabase db = helper.getWritableDatabase();
+               return deleteNode(db, node);
+       }
+
+       public long deleteNode(SQLiteDatabase db, Node node) {
+               long id = -1;
+
+               db.beginTransaction();
+               try {
+                       id = deleteNodeNT(node);
+                       db.setTransactionSuccessful();
+               } finally {
+                       db.endTransaction();
+               }
+               return id;
+       }
+
+       private long deleteNodeNT(Node node) {
+               long id;
+
+               if (node instanceof DirNode) {
+                       DirNode dirNode = (DirNode) node;
+                       List<Long> list = dirNode.getChildren();
+                       for (Long l : list) {
+                               id = l.longValue();
+                               Node n = nodeDao.searchById(id);
+                               if (n != null) {
+                                       deleteNodeNT(n);
+                               }
+                       }
+               }
+
+               id = node.getParent();
+               if (id >= 0) {
+                       Node p = nodeDao.searchById(id);
+                       if (p != null) {
+                               nodeDao.removeChildrenIdNT(p, node.getId());
+                       }
+               }
+               nodeDao.deleteNT(node.getId());
+
+               return 0;
+       }
+       
+       public void createTestNote(){
+               int pos = 1;
+               List<Node> list = nodeDao.searchBook();
+               Node node = list.get(pos);
+               String guid = node.getGuid();
+               
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               util.createNotes(guid, "テスト", 100);
+
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/dd/f0e4643c84f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/dd/f0e4643c84f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..516ddaf
--- /dev/null
@@ -0,0 +1,35 @@
+package com.yuji.ef.exception;
+
+import android.content.Context;
+import android.os.Handler;
+import android.widget.Toast;
+
+public class EfException extends Exception {
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 2248123315072811891L;
+       private EfError error;
+
+       public EfException(EfError error) {
+               this.error = error;
+       }
+
+       public EfError getError() {
+               return error;
+       }
+
+       public static void msg(Context context, String msg) {
+               final Handler handler = new Handler();
+               new Thread(new Runnable() {
+                       @Override
+                       public void run() {
+                               handler.post(new Runnable() {
+                                       public void run() {
+                                               Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
+                                       }
+                               });
+                       }
+               }).start();
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/df/60b98599e8fa00111e7df5849a0f493e b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/df/60b98599e8fa00111e7df5849a0f493e
new file mode 100644 (file)
index 0000000..b7eac65
--- /dev/null
@@ -0,0 +1,372 @@
+package com.yuji.ef;
+
+import java.util.List;
+
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.ServiceConnection;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemSelectedListener;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.LinearLayout;
+import android.widget.Spinner;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.pref.EditPrefUtil;
+import com.yuji.ef.service.NoteUpdatorService;
+import com.yuji.ef.task.NoteUpdateTask;
+import com.yuji.ef.utility.AsyncTaskCommand;
+import com.yuji.ef.utility.BaseActivity;
+import com.yuji.ef.utility.Debug;
+import com.yuji.ef.utility.EvernoteUtil;
+
+public class SettingActivity extends BaseActivity {
+       private EditPrefUtil pref = new EditPrefUtil(this);
+
+       private LinearLayout msgLayout;
+       private TextView confirmMsg;
+       private Button loginButton;
+       private Button listButton;
+       private Button bookButton;
+       private Button updateButton;
+       private Spinner updateSpinner;
+       private Button closeButton;
+
+       private boolean isRegister = false;
+       private boolean isBind = false;
+
+       private boolean lock = false;
+       private boolean isInit = true;
+
+       private class NoteUpdatorReceiver extends BroadcastReceiver {
+
+               @Override
+               public void onReceive(Context context, Intent intent) {
+                       Toast toast = Toast.makeText(getApplicationContext(), "Time over!",
+                                       Toast.LENGTH_LONG);
+                       toast.show();
+               }
+       }
+
+       private NoteUpdatorService noteUpdatorService;
+       private final NoteUpdatorReceiver receiver = new NoteUpdatorReceiver();
+
+       private ServiceConnection serviceConnection = new ServiceConnection() {
+               public void onServiceConnected(ComponentName className, IBinder service) {
+                       noteUpdatorService = ((NoteUpdatorService.KitchenTimerBinder) service)
+                                       .getService();
+               }
+
+               public void onServiceDisconnected(ComponentName className) {
+                       noteUpdatorService = null;
+               }
+       };
+
+       @Override
+       public void onCreate(Bundle savedInstanceState) {
+               super.onCreate(savedInstanceState);
+               setContentView(R.layout.setting);
+
+               msgLayout = (LinearLayout) findViewById(R.id.settingMsgLayout);
+               confirmMsg = (TextView) findViewById(R.id.settingConfirmMsg);
+               loginButton = (Button) findViewById(R.id.settingLoginButton);
+               listButton = (Button) findViewById(R.id.settingListButton);
+               bookButton = (Button) findViewById(R.id.settingBookButton);
+               updateButton = (Button) findViewById(R.id.settingUpdateButton);
+               updateSpinner = (Spinner) findViewById(R.id.settingUpdateSpinner);
+               closeButton = (Button) findViewById(R.id.settingCloseButton);
+
+               loginButton.setOnClickListener(new OnClickListener() {
+                       @Override
+                       public void onClick(View v) {
+                               loginButtonOnClick();
+                       }
+               });
+               listButton.setOnClickListener(new OnClickListener() {
+                       @Override
+                       public void onClick(View v) {
+                               listButtonOnClick();
+                       }
+               });
+               bookButton.setOnClickListener(new OnClickListener() {
+                       @Override
+                       public void onClick(View v) {
+                               bookButtonOnClick();
+                       }
+               });
+               updateButton.setOnClickListener(new OnClickListener() {
+                       @Override
+                       public void onClick(View v) {
+                               updateButtonOnClick();
+                       }
+               });
+               closeButton.setOnClickListener(new OnClickListener() {
+                       @Override
+                       public void onClick(View v) {
+                               closeButtonOnClick();
+                       }
+               });
+               updateSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
+                       public void onItemSelected(AdapterView<?> parent, View view,
+                                       int position, long id) {
+                               updateSpinnerItemSelected(parent, view, position, id);
+                       }
+
+                       public void onNothingSelected(AdapterView<?> view) {
+                               ;
+                       }
+               });
+
+               ArrayAdapter<CharSequence> noteOrderAdapter = ArrayAdapter
+                               .createFromResource(this, R.array.note_update_time_array,
+                                               android.R.layout.simple_spinner_item);
+               noteOrderAdapter
+                               .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+               updateSpinner.setAdapter(noteOrderAdapter);
+       }
+
+       @Override
+       protected void onStart() {
+               super.onStart();
+       }
+
+       @Override
+       protected void onResume() {
+               super.onResume();
+
+               int updateTime = pref.getInt(Constant.PREF_UPDATE_TIME, 0);
+
+               String[] values = getResources().getStringArray(
+                               R.array.note_update_time_array_value);
+               for (int i = 0; i < values.length; i++) {
+                       if (updateTime <= Integer.parseInt(values[i])) {
+                               updateSpinner.setSelection(i);
+                               break;
+                       }
+               }
+
+               if (isInit) {
+                       setStatus();
+                       isInit = false;
+               }
+       }
+
+       @Override
+       protected void onPause() {
+               int prevUpdateTime = pref.getInt(Constant.PREF_UPDATE_TIME, 0);
+               String[] values = getResources().getStringArray(
+                               R.array.note_update_time_array_value);
+               int pos = updateSpinner.getSelectedItemPosition();
+               int updateTime = Integer.parseInt(values[pos]);
+
+               if (prevUpdateTime != updateTime) {
+                       stopService();
+
+                       pref.put(Constant.PREF_UPDATE_TIME, updateTime);
+                       pref.update();
+               }
+
+               if (isBind) {
+                       unbindService(serviceConnection); // バインド解除
+                       isBind = false;
+               }
+               if (isRegister) {
+                       unregisterReceiver(receiver); // 登録解除
+                       isRegister = false;
+               }
+
+               if (prevUpdateTime != updateTime) {
+                       if (updateTime > 0) {
+                               updateNote();
+                       }
+               }
+
+               super.onPause();
+       }
+
+       @Override
+       protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+               isInit = true;
+       }
+
+       private void stopService() {
+               NoteUpdatorService.stopService(this);
+       }
+
+       private void updateNote() {
+               try {
+                       stopService();
+
+                       Intent intent = new Intent(this, NoteUpdatorService.class);
+                       intent.setAction(NoteUpdatorService.ACTION_START);
+                       startService(intent);
+                       IntentFilter filter = new IntentFilter(NoteUpdatorService.ACTION);
+                       registerReceiver(receiver, filter);
+                       isRegister = true;
+
+                       // サービスにバインド
+                       bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
+                       isBind = true;
+               } catch (Exception e) {
+                       Debug.d(this, null, e);
+               }
+       }
+
+       private void loginButtonOnClick() {
+               Intent intent = new Intent(this, (Class<?>) OAuthActivity.class);
+               startActivityForResult(intent, 0);
+       }
+
+       private void listButtonOnClick() {
+               updateButton(false);
+       }
+
+       private void bookButtonOnClick() {
+               Intent intent = new Intent(this, (Class<?>) BookListActivity.class);
+               startActivityForResult(intent, 0);
+       }
+
+       private void updateButtonOnClick() {
+               updateButton(true);
+       }
+
+       private void updateButton(boolean isAll) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
+
+               if (!lock) {
+                       setStatus();
+                       return;
+               }
+
+               pref.put(Constant.PREF_UPDATE_DATA, Constant.ON);
+               pref.update();
+               NoteUpdateTask task = new NoteUpdateTask(this, true, true, isAll);
+
+               AsyncTaskCommand command = new AsyncTaskCommand(this, task);
+               // TODO
+               // command.setTitle(getString(R.string.updatorNoteDialogTitle));
+               // command.setButtonTitle(getString(R.string.cancelButton));
+               command.setCancelable(false);
+               command.setDialog(false);
+               command.execute("");
+
+               setStatus();
+       }
+
+       public void done(int errorCode) {
+//             LockDao lockDao = (LockDao) LockDao.getInstance();
+//             lockDao.unlock(this, Constant.LOCK_UPDATE_NOTE);
+//             lock = false;
+
+               lock = false;
+               setStatus();
+       }
+
+       private void updateSpinnerItemSelected(AdapterView<?> parent, View view,
+                       int position, long id) {
+
+       }
+
+       private void closeButtonOnClick() {
+               finish();
+       }
+
+       private void setStatus() {
+               if (lock) {
+                       msgLayout.setVisibility(View.VISIBLE);
+                       confirmMsg.setText(getString(R.string.settingUpdateMsg));
+
+                       loginButton.setEnabled(false);
+                       listButton.setEnabled(false);
+                       bookButton.setEnabled(false);
+                       updateButton.setEnabled(false);
+                       updateSpinner.setEnabled(false);
+
+                       return;
+               }
+
+               EvernoteUtil util = EvernoteUtil.getInstance();
+               if (!util.isLoggedIn()) {
+                       msgLayout.setVisibility(View.VISIBLE);
+                       confirmMsg.setText(getString(R.string.settingLoginMsg));
+
+                       loginButton.setEnabled(true);
+                       listButton.setEnabled(false);
+                       listButton.setVisibility(View.GONE);
+                       bookButton.setEnabled(false);
+                       updateButton.setEnabled(false);
+                       updateSpinner.setEnabled(false);
+
+                       return;
+               }
+
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               List<Node> list = dao.searchBook();
+               if (list == null || list.size() <= 0){
+                       msgLayout.setVisibility(View.VISIBLE);
+                       confirmMsg.setText(getString(R.string.settingDoListMsg));
+
+                       loginButton.setEnabled(true);
+                       listButton.setEnabled(true);
+                       listButton.setVisibility(View.VISIBLE);
+                       bookButton.setEnabled(false);
+                       updateButton.setEnabled(false);
+                       updateSpinner.setEnabled(false);
+
+                       return;
+               }               
+               
+               list = dao.searchSelectedBook();
+               if (list == null || list.size() <= 0) {
+                       msgLayout.setVisibility(View.VISIBLE);
+                       confirmMsg.setText(getString(R.string.settingDoSelectMsg));
+
+                       loginButton.setEnabled(true);
+                       listButton.setEnabled(false);
+                       listButton.setVisibility(View.GONE);
+                       bookButton.setEnabled(true);
+                       updateButton.setEnabled(false);
+                       updateSpinner.setEnabled(false);
+
+                       return;
+               }
+
+               if (false) {
+                       // TODO
+                       msgLayout.setVisibility(View.VISIBLE);
+                       confirmMsg.setText(getString(R.string.settingDoUpdateMsg));
+
+                       loginButton.setEnabled(true);
+                       listButton.setEnabled(false);
+                       listButton.setVisibility(View.GONE);
+                       bookButton.setEnabled(true);
+                       updateButton.setEnabled(true);
+                       updateSpinner.setEnabled(true);
+                       return;
+               }
+
+               loginButton.setEnabled(true);
+               listButton.setEnabled(false);
+               listButton.setVisibility(View.GONE);
+               bookButton.setEnabled(true);
+               updateButton.setEnabled(true);
+               updateSpinner.setEnabled(true);
+               msgLayout.setVisibility(View.GONE);
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/e1/e0c84f728af9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/e1/e0c84f728af9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..964ce43
--- /dev/null
@@ -0,0 +1,1006 @@
+package com.yuji.ef;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.database.sqlite.SQLiteDatabase;
+import android.graphics.Bitmap;
+import android.graphics.PixelFormat;
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.Gravity;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.WindowManager;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.Node.Status;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeComparator;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.NodeDaoImpl;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.utility.BaseActivity;
+import com.yuji.ef.utility.BitmapCacheFactory;
+import com.yuji.ef.utility.EvernoteIntentUtil;
+import com.yuji.ef.utility.FolderUtil;
+import com.yuji.ef.utility.LockHandler;
+import com.yuji.ef.utility.LockListener;
+import com.yuji.ef.utility.ScaleUtil;
+
+public class EverFolderActivity extends BaseActivity implements LockListener {
+       private enum ScreenStatus {
+               Normal, AddNode, DeleteNode, RenameNode
+       };
+
+       private LinearLayout msgLayout;
+       private LinearLayout msgButtonLayout;
+       private Button msgOkButton;
+       private Button msgCancelButton;
+       private EditText msgEditText;
+
+       private IconFrameLayout layout;
+       private TextView confirmMsg;
+       private IconScrollView scrollView;
+       private LinearLayout buttonLayout;
+       private Button leftButton;
+       private Button rightButton;
+       // private Button addButton;
+       // private Button deleteButton;
+
+       private ScreenStatus status;
+       private NodeComparator nodeComparator = new NodeComparator();
+       private BitmapCacheFactory bitmapFactory = BitmapCacheFactory.getInstance();
+       private Node top = null;
+       private int indent = 0;
+       private int bmpPaddingLeft;
+       private int bmpWidth;
+       private int viewY;
+       private boolean lock = false;
+       private boolean isInit = true;
+       private boolean isInCycle = false;
+       private boolean isResult = false;
+
+       private BroadcastReceiver receiver = new BroadcastReceiver() {
+               @Override
+               public void onReceive(Context context, Intent intent) {
+                       String action = intent.getAction();
+EfException.msg(EverFolderActivity.this, intent.getStringExtra("MESSAGE"));
+
+                       if (action.compareTo(Constant.ACTION_UPDATE) == 0) {
+                       }
+                       else if (action.equals(Constant.ACTION_UPDATE)) {
+                               if (isInCycle && !lock) {
+                                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                                       lock = lockDao.lock(EverFolderActivity.this,
+                                                       Constant.LOCK_UPDATE_NOTE);
+                                       if (lock) {
+                                               updateList();
+                                               // ほんとは、setStatus()に入れたい
+                                               layout.setVisibility(View.VISIBLE);
+                                       }
+                                       setStatus();
+                               }
+                       }
+               }
+       };
+
+       @Override
+       public void onCreate(Bundle savedInstanceState) {
+               super.onCreate(savedInstanceState);
+               setContentView(R.layout.main);
+
+               try {
+                       IntentFilter intentFilter = new IntentFilter();
+                       intentFilter.addAction(Constant.ACTION_UPDATE);
+                       intentFilter.addAction(Constant.ACTION_MESSAGE);
+                       registerReceiver(receiver, intentFilter);
+
+                       scrollView = (IconScrollView) findViewById(R.id.scrollView);
+                       layout = (IconFrameLayout) findViewById(R.id.frameLayout);
+                       layout.setActivity(this);
+                       layout.setScrollView(scrollView);
+
+                       buttonLayout = (LinearLayout) findViewById(R.id.mainButtonLayout);
+                       leftButton = (Button) findViewById(R.id.leftButton);
+                       rightButton = (Button) findViewById(R.id.rightButton);
+                       // addButton = (Button) findViewById(R.id.addButton);
+                       // deleteButton = (Button) findViewById(R.id.deleteButton);
+
+                       msgLayout = (LinearLayout) findViewById(R.id.mainMsgLayout);
+                       confirmMsg = (TextView) findViewById(R.id.mainConfirmMsg);
+                       msgEditText = (EditText) findViewById(R.id.mainMsgEditText);
+                       msgButtonLayout = (LinearLayout) findViewById(R.id.mainMsgButtonLayout);
+                       msgOkButton = (Button) findViewById(R.id.mainMsgOkButton);
+                       msgCancelButton = (Button) findViewById(R.id.mainMsgCancelButton);
+
+                       leftButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       leftButtonOnClick();
+                               }
+                       });
+                       rightButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       rightButtonOnClick();
+                               }
+                       });
+                       // addButton.setOnClickListener(new OnClickListener() {
+                       // @Override
+                       // public void onClick(View v) {
+                       // addButtonOnClick();
+                       // }
+                       // });
+                       // deleteButton.setOnClickListener(new OnClickListener() {
+                       // @Override
+                       // public void onClick(View v) {
+                       // deleteButtonOnClick();
+                       // }
+                       // });
+
+                       msgEditText.addTextChangedListener(new TextWatcher() {
+                               public void afterTextChanged(Editable s) {
+                                       if (status != ScreenStatus.DeleteNode) {
+                                               String text = s.toString();
+                                               msgOkButton.setEnabled(text.length() > 0);
+                                       } else {
+                                               msgOkButton.setEnabled(true);
+                                       }
+                               }
+
+                               public void beforeTextChanged(CharSequence s, int start,
+                                               int count, int after) {
+
+                               }
+
+                               public void onTextChanged(CharSequence s, int start,
+                                               int before, int count) {
+
+                               }
+                       });
+
+                       msgOkButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       msgOkButtonOnClick(v);
+                               }
+                       });
+                       msgCancelButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       msgCancelOnClick(v);
+                               }
+                       });
+
+                       ScaleUtil scaleUtil = ScaleUtil.getInstance();
+                       scaleUtil.init(this);
+
+                       bitmapFactory.init(this);
+                       Node node = new DirNode(null, null);
+                       Bitmap bmp = null;
+                       bmp = bitmapFactory.get(node.getStatusIconId());
+                       bmpPaddingLeft = bmp.getWidth();
+                       bmp = bitmapFactory.get(node.getIconId());
+                       bmpWidth = bmp.getWidth();
+
+                       float fSize = 48 * (1 / 2.0f);
+                       leftButton.setTextSize(fSize);
+                       rightButton.setTextSize(fSize);
+               } catch (Exception e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+       @Override
+       public boolean onCreateOptionsMenu(Menu menu) {
+               boolean ret = super.onCreateOptionsMenu(menu);
+               int index = 0;
+
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "カット");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "ペースト");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "追加");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "削除");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "リネーム");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "設定");
+               return ret;
+       }
+
+       @Override
+       public boolean onMenuOpened(int featureId, Menu menu) {
+               boolean ret = super.onMenuOpened(featureId, menu);
+
+               // #29304
+               if (menu == null) {
+                       return false;
+               }
+
+               MenuItem item;
+
+               boolean cutButtonFlag = false;
+               boolean pastButtonFlag = false;
+               boolean addButtonFlag = false;
+               boolean deleteButtonFlag = false;
+               boolean renameButtonFlag = false;
+               boolean confButtonFlag = true;
+
+               if (status == ScreenStatus.Normal) {
+                       LabelIconView target = layout.getSelectedTarget();
+                       NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+                       long id = -1;
+                       Node node = null;
+                       if (target != null) {
+                               id = target.getNodeId();
+                               node = dao.searchById(id);
+                       }
+
+                       if (isDirNode(target, node, false) || isFileNode(node)) {
+                               cutButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, true) && isCut()) {
+                               pastButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, true)) {
+                               addButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, false) && !isNoteBook(node)
+                                       && CommonUtil.isNull(node.getChildrenString())) {
+                               deleteButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, false) && !isNoteBook(node)) {
+                               renameButtonFlag = true;
+                       }
+               }
+
+               int index = 0;
+               item = menu.getItem(index++);
+               item.setVisible(cutButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(pastButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(addButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(deleteButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(renameButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(confButtonFlag);
+
+               return ret;
+       }
+
+       private boolean isFileNode(Node node) {
+               if (node == null || !(node instanceof FileNode)) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isDirNode(LabelIconView target, Node node,
+                       boolean containRoot) {
+               if (target == null) {
+                       return false;
+               }
+               if (node == null) {
+                       return false;
+               }
+               if (!containRoot && (node instanceof RootNode)) {
+                       return false;
+               }
+               if (!(node instanceof DirNode)) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isNoteBook(Node node) {
+               if (node == null) {
+                       return false;
+               }
+               if (CommonUtil.isNull(node.getGuid())) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isCut() {
+               LabelIconView srcTarget = layout.getCutTarget();
+               if (srcTarget == null) {
+                       return false;
+               }
+               return true;
+       }
+
+       @Override
+       public boolean onOptionsItemSelected(MenuItem item) {
+               Intent intent;
+               try {
+                       switch (item.getItemId()) {
+                       case Menu.FIRST + 0:
+                               selectMenuCut();
+                               break;
+                       case Menu.FIRST + 1:
+                               selectMenuPast();
+                               break;
+                       case Menu.FIRST + 2:
+                               selectMenuAdd();
+                               break;
+                       case Menu.FIRST + 3:
+                               selectMenuDelete();
+                               break;
+                       case Menu.FIRST + 4:
+                               selectMenuRename();
+                               break;
+                       case Menu.FIRST + 5:
+                               // dummy();
+                               // dummy2();
+                               intent = new Intent(this, (Class<?>) SettingActivity.class);
+                               startActivityForResult(intent, 0);
+                               break;
+                       default:
+                               break;
+                       }
+               } catch (Exception e) {
+                       terminate(e);
+               }
+               return super.onOptionsItemSelected(item);
+       }
+
+       private void dummy() {
+               NodeDaoImpl dao = (NodeDaoImpl) NodeCacheDao.getInstance();
+               List<Node> list = dao.search();
+               for (Node node : list) {
+                       System.out.println(node.toString());
+               }
+       }
+
+       private void dummy2() {
+               LockDao dao = (LockDao) LockDao.getInstance();
+               boolean b;
+
+               try {
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(new Object(), "key");
+                       dao.unlock(this, "key");
+                       b = dao.lock(new Object(), "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       dao.unlock(new Object(), "key");
+
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+
+       }
+
+       private void selectMenuAdd() {
+               setStatus(ScreenStatus.AddNode);
+       }
+
+       private void selectMenuDelete() {
+               setStatus(ScreenStatus.DeleteNode);
+       }
+
+       private void selectMenuRename() {
+               LabelIconView target = layout.getSelectedTarget();
+               if (target == null) {
+                       return;
+               }
+
+               long id = target.getNodeId();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               Node node = dao.searchById(id);
+               if (node != null) {
+                       String text = node.getName();
+                       msgEditText.setText(text);
+                       setStatus(ScreenStatus.RenameNode);
+               }
+       }
+
+       private void selectMenuCut() {
+               LabelIconView target = layout.getSelectedTarget();
+               if (target == null) {
+                       return;
+               }
+
+               layout.setCutTarget(target);
+               layout.refresh();
+       }
+
+       private void selectMenuPast() {
+               LabelIconView srcTarget = layout.getCutTarget();
+               if (srcTarget == null) {
+                       return;
+               }
+
+               LabelIconView dstTarget = layout.getSelectedTarget();
+               if (dstTarget == null) {
+                       return;
+               }
+
+               layout.setCutTarget(null);
+
+               long srcId = srcTarget.getNodeId();
+               long dstId = dstTarget.getNodeId();
+               execute(srcId, dstId);
+       }
+
+       private void updateList() {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               top = dao.searchRoot();
+               if (top == null) {
+                       // TODO
+               }
+               updateList(top);
+       }
+
+       private void updateList(Node parent) {
+               viewY = 10;
+
+               scrollView.setVisibility(View.GONE);            
+               layout.removeAllViews();
+               updateList(parent, 0);
+               layout.setMinimumHeight(viewY);
+               scrollView.setVisibility(View.VISIBLE);         
+               layout.refresh();
+
+               scrollView.invalidate();
+       }
+
+       private void updateList(Node node, int depth) {
+               int N = (int) (bmpWidth * 0.6);
+               int M = (int) (bmpWidth * 1.2);
+               int x = N * (depth - indent);
+
+               if (depth - indent >= 0
+                               && !(depth - indent == 0 && node instanceof FileNode)) {
+                       LabelIconView view = new LabelIconView(this);
+                       node.setView(view);
+
+                       Bitmap bmp1 = null;
+                       int id = node.getStatusIconId();
+                       if (id >= 0) {
+                               // DirNode
+                               bmp1 = bitmapFactory.get(node.getStatusIconId());
+                       } else {
+                               // FileNode
+                               x += bmpPaddingLeft;
+                       }
+                       Bitmap bmp2 = bitmapFactory.get(node.getIconId());
+                       createIconImageView(view, bmp1, bmp2, node.getName(), x, viewY);
+                       // LabelIconView s = view.getStatusImageView();
+                       // if (s != null) {
+                       // s.setNodeId(node.getId());
+                       // }
+                       view.setNodeId(node.getId());
+               }
+               viewY += M;
+
+               if (node.getStatus() != Node.Status.OPEN) {
+                       return;
+               }
+               List<Long> idList = node.getChildren();
+               if (idList == null) {
+                       return;
+               }
+
+               List<Node> list = new ArrayList<Node>();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               for (Long id : idList) {
+                       Node n = dao.searchById(id);
+                       if (n == null) {
+                               // TODO
+                               continue;
+                       }
+                       if (n instanceof DirNode) {
+                               DirNode d = (DirNode) n;
+                               if (isNoteBook(d) && !d.isSelected()) {
+                                       continue;
+                               }
+                       }
+                       list.add(n);
+               }
+               Collections.sort(list, nodeComparator);
+               for (Node n : list) {
+                       updateList(n, depth + 1);
+               }
+       }
+
+       private void createIconImageView(LabelIconView v, Bitmap bmp1, Bitmap bmp2,
+                       String text, int x, int y) {
+               v.init(x, y, bmp1, bmp2, text);
+
+               android.view.WindowManager.LayoutParams params = new WindowManager.LayoutParams();
+               params.gravity = Gravity.TOP | Gravity.LEFT;
+               params.height = WindowManager.LayoutParams.WRAP_CONTENT;
+               params.width = WindowManager.LayoutParams.WRAP_CONTENT;
+               params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
+                               | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
+                               | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
+                               | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
+               params.format = PixelFormat.TRANSLUCENT;
+               params.windowAnimations = 0;
+               params.x = x;
+               params.y = y;
+               v.setLayoutParams(params);
+
+               // LabelIconView siv = v.getStatusImageView();
+               // if (siv != null) {
+               // layout.addView(siv, false);
+               // }
+
+               layout.addView(v);
+               v.layout(x, y, x + v.getWidth(), y + v.getHeight());
+       }
+
+       @Override
+       public void sendLockResult(boolean b) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               if (isResult) {
+                       if (dao.isEmpty()) {
+                               finish();
+                               return;
+                       }
+               }
+               isResult = false;
+
+               if (dao.isEmpty()) {
+                       if (isInit) {
+                               Intent intent = new Intent(this,
+                                               (Class<?>) SettingActivity.class);
+                               startActivityForResult(intent, 0);
+
+                               isInit = false;
+                       } else {
+                               finish();
+                               isInit = true;
+                       }
+               }
+
+               if (isInCycle) {
+                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                       lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
+                       if (isInit) {
+                               status = ScreenStatus.Normal;
+
+                               if (lock) {
+                                       layout.setVisibility(View.VISIBLE);
+                                       updateList();
+                               } else {
+                                       layout.removeAllViews();
+                               }
+                               setStatus();
+                               isInit = false;
+                       } else {
+                               setStatus();
+                       }
+               } else {
+                       // TODO
+                       // lock解除
+               }
+       }
+
+       @Override
+       protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+               // TODO sendLockResult()、「lock解除」のため、とりあえずコメント
+               // NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               // if (dao.isEmpty()) {
+               // finish();
+               // }
+               isResult = true;
+               isInit = true;
+       }
+
+       @Override
+       protected void onStart() {
+               super.onStart();
+       }
+
+       @Override
+       protected void onResume() {
+               super.onResume();
+               isInCycle = true;
+
+               LockHandler handler = new LockHandler();
+               handler.lock(this, Constant.LOCK_UPDATE_NOTE);
+               lock = false;
+
+               if (isInit) {
+                       layout.setVisibility(View.INVISIBLE);
+                       setStatus();
+               }
+               else {
+                       // #29421
+                       updateList();
+               }
+               
+               // NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               // if (dao.isEmpty()) {
+               // if (isInit) {
+               // Intent intent = new Intent(this,
+               // (Class<?>) SettingActivity.class);
+               // startActivityForResult(intent, 0);
+               //
+               // isInit = false;
+               // } else {
+               // finish();
+               // isInit = true;
+               // }
+               // }
+               //
+               // LockDao lockDao = (LockDao) LockDao.getInstance();
+               // lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
+               //
+               // if (isInit) {
+               // status = ScreenStatus.Normal;
+               //
+               // if (lock) {
+               // updateList();
+               // } else {
+               // layout.removeAllViews();
+               // }
+               // setStatus();
+               // isInit = false;
+               // } else {
+               // setStatus();
+               // }
+       }
+
+       @Override
+       protected void onPause() {
+               // ロック未取得でも解除する(ゴミ掃除)
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(this, Constant.LOCK_UPDATE_NOTE);
+               lock = false;
+
+               super.onPause();
+               isInCycle = false;
+       }
+
+       private void leftButtonOnClick() {
+               moveButtonOnClick(-1);
+               setStatus();
+       }
+
+       private void rightButtonOnClick() {
+               moveButtonOnClick(1);
+               setStatus();
+       }
+
+       private void moveButtonOnClick(int dx) {
+               int mx = 0;
+
+               if (dx < 0) {
+                       if (indent > 0) {
+                               mx = -1;
+                       }
+               } else {
+                       mx = 1;
+               }
+               if (mx != 0) {
+                       indent += mx;
+                       removeAllNodeView();
+                       updateList();
+               }
+       }
+
+       // private void addButtonOnClick() {
+       // setStatus(ScreenStatus.AddNode);
+       // }
+       //
+       // private void deleteButtonOnClick() {
+       // FolderUtil util = FolderUtil.getInstance();
+       // LabelIconView target = layout.getSelectedTarget();
+       // long id = target.getNodeId();
+       // NodeDao dao = (NodeDao) NodeDao.getInstance();
+       // Node node = dao.searchById(id);
+       // if (node != null) {
+       // util.deleteNode(node);
+       // // TODO 三角マークも消さないといけないのでは
+       // layout.removeView(target);
+       // updateList();
+       // setStatus();
+       // }
+       // }
+
+       private void msgOkButtonOnClick(View v) {
+               FolderUtil util = FolderUtil.getInstance();
+               LabelIconView target = layout.getSelectedTarget();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               if (status == ScreenStatus.AddNode) {
+                       long id = target.getNodeId();
+                       Node parent = dao.searchById(id);
+                       if (parent != null) {
+                               String text = msgEditText.getText().toString();
+                               DirNode node = new DirNode(text, null);
+                               util.addDirNode(parent, node);
+                       }
+                       layout.setCutTarget(null, false);
+               } else if (status == ScreenStatus.DeleteNode) {
+                       long id = target.getNodeId();
+                       Node node = dao.searchById(id);
+                       if (node != null) {
+                               util.deleteNode(node);
+                               layout.removeView(target);
+                       }
+                       layout.setCutTarget(null, false);
+               } else if (status == ScreenStatus.RenameNode) {
+                       long id = target.getNodeId();
+                       Node node = dao.searchById(id);
+                       if (node != null) {
+                               String text = msgEditText.getText().toString();
+
+                               dao.updateName(node, text);
+                       }
+                       layout.setCutTarget(null, false);
+               }
+
+               closeIME(v);
+
+               layout.clearTarget();
+               updateList();
+               setStatus(ScreenStatus.Normal);
+       }
+
+       private void msgCancelOnClick(View v) {
+               closeIME(v);
+
+               setStatus(ScreenStatus.Normal);
+       }
+
+       private void closeIME(View v) {
+               InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+               imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
+       }
+
+       public void execute(long srcId, long dstId) {
+               try {
+                       removeAllNodeView();
+
+                       NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+                       if (srcId < 0) {
+                               // TODO
+                       }
+                       if (dstId < 0) {
+                               // TODO
+                       }
+
+                       Node src = dao.searchById(srcId);
+                       Node dst = null;
+                       if (srcId == dstId) {
+                               dst = src;
+                       } else {
+                               dst = dao.searchById(dstId);
+                       }
+
+                       if (dstId == src.getParent()) {
+                               // 同じ場所に移動
+                               return;
+                       }
+                       if (!isFileNode(src) && !isMovable(srcId, dstId)) {
+                               // 再帰的な移動
+                               return;
+                       }
+
+                       Node sp = dao.searchById(src.getParent());
+                       if (sp == null) {
+                               // TODO
+                       }
+                       Node dp = null;
+                       if (src.getParent() == dst.getParent()) {
+                               dp = sp;
+                       } else {
+                               dp = dao.searchById(dst.getParent());
+                       }
+                       if (dp == null) {
+                               // TODO
+                       }
+
+                       // TODO DBへのアクセス
+                       // sp.remove(src.getId());
+                       SQLiteDatabase db = DatabaseHelper.getInstance()
+                                       .getSQLiteDatabase();
+                       db.beginTransaction();
+                       try {
+                               dao.removeChildrenIdNT(sp, src.getId());
+                               if (dst instanceof DirNode) {
+                                       // dst.add(src.getId());
+                                       dao.updateParentNT(src, dst.getId());
+                                       dao.addChildrenIdNT(dst, src.getId());
+                               } else if (dst instanceof FileNode) {
+                                       // dp.add(src.getId());
+                                       dao.updateParentNT(src, dp.getId());
+                                       dao.addChildrenIdNT(dp, src.getId());
+                               }
+
+                               db.setTransactionSuccessful();
+                       } finally {
+                               db.endTransaction();
+                       }
+               } finally {
+                       updateList();
+               }
+       }
+
+       private boolean isMovable(long srcId, long dstId) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               while (dstId >= 0) {
+                       if (srcId == dstId) {
+                               return false;
+                       }
+                       Node node = dao.searchById(dstId);
+                       if (node == null) {
+                               // TODO エラー
+                               return false;
+                       }
+                       if (!(node instanceof DirNode)) {
+                               return true;
+                       }
+                       dstId = node.getParent();
+               }
+               return true;
+       }
+
+       public void execute(long id) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               Node node = dao.searchById(id);
+               if (node == null) {
+                       // TODO
+               }
+               node.toggleStatus();
+               Status status = node.getStatus();
+
+               dao.updateStatus(node, status);
+
+               // removeAllNodeView();
+               updateList();
+       }
+
+       public void executeView(long id) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               Node node = dao.searchById(id);
+               if (!isFileNode(node)) {
+                       return;
+               }
+               String guid = node.getGuid();
+
+               EvernoteIntentUtil util = EvernoteIntentUtil.getInstance();
+               util.viewNote(this, guid);
+       }
+
+       public void targetSelectedChanged(boolean status) {
+               setStatus();
+       }
+
+       public void removeAllNodeView() {
+               layout.removeAllViews();
+       }
+
+       private void setStatus() {
+               setStatus(status);
+       }
+
+       private void setStatus(ScreenStatus status) {
+               try {
+                       if (this.status != status) {
+                               this.status = status;
+                       }
+
+                       if (!lock) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainUpdateMsg));
+                               msgEditText.setVisibility(View.GONE);
+                               msgButtonLayout.setVisibility(View.GONE);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                               
+                               status = ScreenStatus.Normal;
+                               return;
+                       }
+
+                       if (status == ScreenStatus.Normal) {
+                               msgLayout.setVisibility(View.GONE);
+                               // mainMsgEditText.setText("");
+
+                               boolean leftButtonFlag = true;
+                               boolean rightButtonFlag = true;
+                               // boolean addButtonFlag = true;
+                               // boolean deleteButtonFlag = true;
+
+                               if (indent <= 0) {
+                                       leftButtonFlag = false;
+                               }
+
+                               // LabelIconView target = layout.getSelectedTarget();
+                               // NodeDao dao = (NodeDao) NodeDao.getInstance();
+                               // long id = -1;
+                               // Node node = null;
+                               // if (target != null) {
+                               // id = target.getNodeId();
+                               // node = dao.searchById(id);
+                               // }
+                               // if (target == null || node == null || !(node instanceof
+                               // DirNode))
+                               // {
+                               // addButtonFlag = false;
+                               // }
+                               // if (target == null || (node != null && node instanceof
+                               // RootNode))
+                               // {
+                               // deleteButtonFlag = false;
+                               // }
+                               layout.setElabledTouchEvent(true);
+
+                               leftButton.setEnabled(leftButtonFlag);
+                               rightButton.setEnabled(rightButtonFlag);
+                               // addButton.setEnabled(addButtonFlag);
+                               // deleteButton.setEnabled(deleteButtonFlag);
+                       } else if (status == ScreenStatus.AddNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.VISIBLE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainAddMsg));
+                               msgEditText.setText("");
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       } else if (status == ScreenStatus.DeleteNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.GONE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainDeleteMsg));
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       } else if (status == ScreenStatus.RenameNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.VISIBLE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainRenameMsg));
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       }
+               } catch (Throwable e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+}
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/e2/4033478489f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/e2/4033478489f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..1990d0d
--- /dev/null
@@ -0,0 +1,35 @@
+package com.yuji.ef.exception;
+
+import com.yuji.ef.Initialize;
+import com.yuji.ef.common.Constant;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Handler;
+import android.widget.Toast;
+
+public class EfException extends Exception {
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 2248123315072811891L;
+       private EfError error;
+
+       public EfException(EfError error) {
+               this.error = error;
+       }
+
+       public EfError getError() {
+               return error;
+       }
+
+       public static void msg(String msg){
+               Intent intent = new Intent(Constant.ACTION_MESSAGE);
+               intent.putExtra("MESSAGE", );
+               Initialize.getContext().sendBroadcast(intent);
+       }
+       
+       public static void msg(Context context, String msg) {
+               Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/e4/60be9fdf7af9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/e4/60be9fdf7af9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..d52f567
--- /dev/null
@@ -0,0 +1,9 @@
+package com.yuji.ef.exception;
+
+public class RollbackException extends EfException {
+       public RollbackException(Error error) {
+               super(error);
+               // TODO Auto-generated constructor stub
+       }
+
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/e8/20a92445e9fa00111e7df5849a0f493e b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/e8/20a92445e9fa00111e7df5849a0f493e
new file mode 100644 (file)
index 0000000..fb6bb29
--- /dev/null
@@ -0,0 +1,1007 @@
+package com.yuji.ef;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.database.sqlite.SQLiteDatabase;
+import android.graphics.Bitmap;
+import android.graphics.PixelFormat;
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.Gravity;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.WindowManager;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.DatabaseHelper;
+import com.yuji.ef.dao.DirNode;
+import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.Node.Status;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeComparator;
+import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.NodeDaoImpl;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.utility.BaseActivity;
+import com.yuji.ef.utility.BitmapCacheFactory;
+import com.yuji.ef.utility.EvernoteIntentUtil;
+import com.yuji.ef.utility.FolderUtil;
+import com.yuji.ef.utility.LockHandler;
+import com.yuji.ef.utility.LockListener;
+import com.yuji.ef.utility.ScaleUtil;
+
+public class EverFolderActivity extends BaseActivity implements LockListener {
+       private enum ScreenStatus {
+               Normal, AddNode, DeleteNode, RenameNode
+       };
+
+       private LinearLayout msgLayout;
+       private LinearLayout msgButtonLayout;
+       private Button msgOkButton;
+       private Button msgCancelButton;
+       private EditText msgEditText;
+
+       private IconFrameLayout layout;
+       private TextView confirmMsg;
+       private IconScrollView scrollView;
+       private LinearLayout buttonLayout;
+       private Button leftButton;
+       private Button rightButton;
+       // private Button addButton;
+       // private Button deleteButton;
+
+       private ScreenStatus status;
+       private NodeComparator nodeComparator = new NodeComparator();
+       private BitmapCacheFactory bitmapFactory = BitmapCacheFactory.getInstance();
+       private Node top = null;
+       private int indent = 0;
+       private int bmpPaddingLeft;
+       private int bmpWidth;
+       private int viewY;
+       private boolean lock = false;
+       private boolean isInit = true;
+       private boolean isInCycle = false;
+       private boolean isResult = false;
+
+       private BroadcastReceiver receiver = new BroadcastReceiver() {
+               @Override
+               public void onReceive(Context context, Intent intent) {
+                       String action = intent.getAction();
+
+                       if (action.equals(Constant.ACTION_MESSAGE)) {
+                               String msg = intent.getStringExtra(Constant.ACTION_MESSAGE_MESSAGE);
+                               EfException.msg(EverFolderActivity.this, msg);
+                       }
+                       else if (action.equals(Constant.ACTION_UPDATE)) {
+                               if (isInCycle && !lock) {
+                                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                                       lock = lockDao.lock(EverFolderActivity.this,
+                                                       Constant.LOCK_UPDATE_NOTE);
+                                       if (lock) {
+                                               updateList();
+                                               // ほんとは、setStatus()に入れたい
+                                               layout.setVisibility(View.VISIBLE);
+                                       }
+                                       setStatus();
+                               }
+                       }
+               }
+       };
+
+       @Override
+       public void onCreate(Bundle savedInstanceState) {
+               super.onCreate(savedInstanceState);
+               setContentView(R.layout.main);
+
+               try {
+                       IntentFilter intentFilter = new IntentFilter();
+                       intentFilter.addAction(Constant.ACTION_UPDATE);
+                       intentFilter.addAction(Constant.ACTION_MESSAGE);
+                       registerReceiver(receiver, intentFilter);
+
+                       scrollView = (IconScrollView) findViewById(R.id.scrollView);
+                       layout = (IconFrameLayout) findViewById(R.id.frameLayout);
+                       layout.setActivity(this);
+                       layout.setScrollView(scrollView);
+
+                       buttonLayout = (LinearLayout) findViewById(R.id.mainButtonLayout);
+                       leftButton = (Button) findViewById(R.id.leftButton);
+                       rightButton = (Button) findViewById(R.id.rightButton);
+                       // addButton = (Button) findViewById(R.id.addButton);
+                       // deleteButton = (Button) findViewById(R.id.deleteButton);
+
+                       msgLayout = (LinearLayout) findViewById(R.id.mainMsgLayout);
+                       confirmMsg = (TextView) findViewById(R.id.mainConfirmMsg);
+                       msgEditText = (EditText) findViewById(R.id.mainMsgEditText);
+                       msgButtonLayout = (LinearLayout) findViewById(R.id.mainMsgButtonLayout);
+                       msgOkButton = (Button) findViewById(R.id.mainMsgOkButton);
+                       msgCancelButton = (Button) findViewById(R.id.mainMsgCancelButton);
+
+                       leftButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       leftButtonOnClick();
+                               }
+                       });
+                       rightButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       rightButtonOnClick();
+                               }
+                       });
+                       // addButton.setOnClickListener(new OnClickListener() {
+                       // @Override
+                       // public void onClick(View v) {
+                       // addButtonOnClick();
+                       // }
+                       // });
+                       // deleteButton.setOnClickListener(new OnClickListener() {
+                       // @Override
+                       // public void onClick(View v) {
+                       // deleteButtonOnClick();
+                       // }
+                       // });
+
+                       msgEditText.addTextChangedListener(new TextWatcher() {
+                               public void afterTextChanged(Editable s) {
+                                       if (status != ScreenStatus.DeleteNode) {
+                                               String text = s.toString();
+                                               msgOkButton.setEnabled(text.length() > 0);
+                                       } else {
+                                               msgOkButton.setEnabled(true);
+                                       }
+                               }
+
+                               public void beforeTextChanged(CharSequence s, int start,
+                                               int count, int after) {
+
+                               }
+
+                               public void onTextChanged(CharSequence s, int start,
+                                               int before, int count) {
+
+                               }
+                       });
+
+                       msgOkButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       msgOkButtonOnClick(v);
+                               }
+                       });
+                       msgCancelButton.setOnClickListener(new OnClickListener() {
+                               @Override
+                               public void onClick(View v) {
+                                       msgCancelOnClick(v);
+                               }
+                       });
+
+                       ScaleUtil scaleUtil = ScaleUtil.getInstance();
+                       scaleUtil.init(this);
+
+                       bitmapFactory.init(this);
+                       Node node = new DirNode(null, null);
+                       Bitmap bmp = null;
+                       bmp = bitmapFactory.get(node.getStatusIconId());
+                       bmpPaddingLeft = bmp.getWidth();
+                       bmp = bitmapFactory.get(node.getIconId());
+                       bmpWidth = bmp.getWidth();
+
+                       float fSize = 48 * (1 / 2.0f);
+                       leftButton.setTextSize(fSize);
+                       rightButton.setTextSize(fSize);
+               } catch (Exception e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+       @Override
+       public boolean onCreateOptionsMenu(Menu menu) {
+               boolean ret = super.onCreateOptionsMenu(menu);
+               int index = 0;
+
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "カット");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "ペースト");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "追加");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "削除");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "リネーム");
+               menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE, "設定");
+               return ret;
+       }
+
+       @Override
+       public boolean onMenuOpened(int featureId, Menu menu) {
+               boolean ret = super.onMenuOpened(featureId, menu);
+
+               // #29304
+               if (menu == null) {
+                       return false;
+               }
+
+               MenuItem item;
+
+               boolean cutButtonFlag = false;
+               boolean pastButtonFlag = false;
+               boolean addButtonFlag = false;
+               boolean deleteButtonFlag = false;
+               boolean renameButtonFlag = false;
+               boolean confButtonFlag = true;
+
+               if (status == ScreenStatus.Normal) {
+                       LabelIconView target = layout.getSelectedTarget();
+                       NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+                       long id = -1;
+                       Node node = null;
+                       if (target != null) {
+                               id = target.getNodeId();
+                               node = dao.searchById(id);
+                       }
+
+                       if (isDirNode(target, node, false) || isFileNode(node)) {
+                               cutButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, true) && isCut()) {
+                               pastButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, true)) {
+                               addButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, false) && !isNoteBook(node)
+                                       && CommonUtil.isNull(node.getChildrenString())) {
+                               deleteButtonFlag = true;
+                       }
+                       if (isDirNode(target, node, false) && !isNoteBook(node)) {
+                               renameButtonFlag = true;
+                       }
+               }
+
+               int index = 0;
+               item = menu.getItem(index++);
+               item.setVisible(cutButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(pastButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(addButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(deleteButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(renameButtonFlag);
+               item = menu.getItem(index++);
+               item.setVisible(confButtonFlag);
+
+               return ret;
+       }
+
+       private boolean isFileNode(Node node) {
+               if (node == null || !(node instanceof FileNode)) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isDirNode(LabelIconView target, Node node,
+                       boolean containRoot) {
+               if (target == null) {
+                       return false;
+               }
+               if (node == null) {
+                       return false;
+               }
+               if (!containRoot && (node instanceof RootNode)) {
+                       return false;
+               }
+               if (!(node instanceof DirNode)) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isNoteBook(Node node) {
+               if (node == null) {
+                       return false;
+               }
+               if (CommonUtil.isNull(node.getGuid())) {
+                       return false;
+               }
+               return true;
+       }
+
+       private boolean isCut() {
+               LabelIconView srcTarget = layout.getCutTarget();
+               if (srcTarget == null) {
+                       return false;
+               }
+               return true;
+       }
+
+       @Override
+       public boolean onOptionsItemSelected(MenuItem item) {
+               Intent intent;
+               try {
+                       switch (item.getItemId()) {
+                       case Menu.FIRST + 0:
+                               selectMenuCut();
+                               break;
+                       case Menu.FIRST + 1:
+                               selectMenuPast();
+                               break;
+                       case Menu.FIRST + 2:
+                               selectMenuAdd();
+                               break;
+                       case Menu.FIRST + 3:
+                               selectMenuDelete();
+                               break;
+                       case Menu.FIRST + 4:
+                               selectMenuRename();
+                               break;
+                       case Menu.FIRST + 5:
+                               // dummy();
+                               // dummy2();
+                               intent = new Intent(this, (Class<?>) SettingActivity.class);
+                               startActivityForResult(intent, 0);
+                               break;
+                       default:
+                               break;
+                       }
+               } catch (Exception e) {
+                       terminate(e);
+               }
+               return super.onOptionsItemSelected(item);
+       }
+
+       private void dummy() {
+               NodeDaoImpl dao = (NodeDaoImpl) NodeCacheDao.getInstance();
+               List<Node> list = dao.search();
+               for (Node node : list) {
+                       System.out.println(node.toString());
+               }
+       }
+
+       private void dummy2() {
+               LockDao dao = (LockDao) LockDao.getInstance();
+               boolean b;
+
+               try {
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(new Object(), "key");
+                       dao.unlock(this, "key");
+                       b = dao.lock(new Object(), "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       b = dao.lock(this, "key");
+                       dao.unlock(new Object(), "key");
+
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+
+       }
+
+       private void selectMenuAdd() {
+               setStatus(ScreenStatus.AddNode);
+       }
+
+       private void selectMenuDelete() {
+               setStatus(ScreenStatus.DeleteNode);
+       }
+
+       private void selectMenuRename() {
+               LabelIconView target = layout.getSelectedTarget();
+               if (target == null) {
+                       return;
+               }
+
+               long id = target.getNodeId();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               Node node = dao.searchById(id);
+               if (node != null) {
+                       String text = node.getName();
+                       msgEditText.setText(text);
+                       setStatus(ScreenStatus.RenameNode);
+               }
+       }
+
+       private void selectMenuCut() {
+               LabelIconView target = layout.getSelectedTarget();
+               if (target == null) {
+                       return;
+               }
+
+               layout.setCutTarget(target);
+               layout.refresh();
+       }
+
+       private void selectMenuPast() {
+               LabelIconView srcTarget = layout.getCutTarget();
+               if (srcTarget == null) {
+                       return;
+               }
+
+               LabelIconView dstTarget = layout.getSelectedTarget();
+               if (dstTarget == null) {
+                       return;
+               }
+
+               layout.setCutTarget(null);
+
+               long srcId = srcTarget.getNodeId();
+               long dstId = dstTarget.getNodeId();
+               execute(srcId, dstId);
+       }
+
+       private void updateList() {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               top = dao.searchRoot();
+               if (top == null) {
+                       // TODO
+               }
+               updateList(top);
+       }
+
+       private void updateList(Node parent) {
+               viewY = 10;
+
+               scrollView.setVisibility(View.GONE);            
+               layout.removeAllViews();
+               updateList(parent, 0);
+               layout.setMinimumHeight(viewY);
+               scrollView.setVisibility(View.VISIBLE);         
+               layout.refresh();
+
+               scrollView.invalidate();
+       }
+
+       private void updateList(Node node, int depth) {
+               int N = (int) (bmpWidth * 0.6);
+               int M = (int) (bmpWidth * 1.2);
+               int x = N * (depth - indent);
+
+               if (depth - indent >= 0
+                               && !(depth - indent == 0 && node instanceof FileNode)) {
+                       LabelIconView view = new LabelIconView(this);
+                       node.setView(view);
+
+                       Bitmap bmp1 = null;
+                       int id = node.getStatusIconId();
+                       if (id >= 0) {
+                               // DirNode
+                               bmp1 = bitmapFactory.get(node.getStatusIconId());
+                       } else {
+                               // FileNode
+                               x += bmpPaddingLeft;
+                       }
+                       Bitmap bmp2 = bitmapFactory.get(node.getIconId());
+                       createIconImageView(view, bmp1, bmp2, node.getName(), x, viewY);
+                       // LabelIconView s = view.getStatusImageView();
+                       // if (s != null) {
+                       // s.setNodeId(node.getId());
+                       // }
+                       view.setNodeId(node.getId());
+               }
+               viewY += M;
+
+               if (node.getStatus() != Node.Status.OPEN) {
+                       return;
+               }
+               List<Long> idList = node.getChildren();
+               if (idList == null) {
+                       return;
+               }
+
+               List<Node> list = new ArrayList<Node>();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               for (Long id : idList) {
+                       Node n = dao.searchById(id);
+                       if (n == null) {
+                               // TODO
+                               continue;
+                       }
+                       if (n instanceof DirNode) {
+                               DirNode d = (DirNode) n;
+                               if (isNoteBook(d) && !d.isSelected()) {
+                                       continue;
+                               }
+                       }
+                       list.add(n);
+               }
+               Collections.sort(list, nodeComparator);
+               for (Node n : list) {
+                       updateList(n, depth + 1);
+               }
+       }
+
+       private void createIconImageView(LabelIconView v, Bitmap bmp1, Bitmap bmp2,
+                       String text, int x, int y) {
+               v.init(x, y, bmp1, bmp2, text);
+
+               android.view.WindowManager.LayoutParams params = new WindowManager.LayoutParams();
+               params.gravity = Gravity.TOP | Gravity.LEFT;
+               params.height = WindowManager.LayoutParams.WRAP_CONTENT;
+               params.width = WindowManager.LayoutParams.WRAP_CONTENT;
+               params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
+                               | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
+                               | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
+                               | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
+               params.format = PixelFormat.TRANSLUCENT;
+               params.windowAnimations = 0;
+               params.x = x;
+               params.y = y;
+               v.setLayoutParams(params);
+
+               // LabelIconView siv = v.getStatusImageView();
+               // if (siv != null) {
+               // layout.addView(siv, false);
+               // }
+
+               layout.addView(v);
+               v.layout(x, y, x + v.getWidth(), y + v.getHeight());
+       }
+
+       @Override
+       public void sendLockResult(boolean b) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               if (isResult) {
+                       if (dao.isEmpty()) {
+                               finish();
+                               return;
+                       }
+               }
+               isResult = false;
+
+               if (dao.isEmpty()) {
+                       if (isInit) {
+                               Intent intent = new Intent(this,
+                                               (Class<?>) SettingActivity.class);
+                               startActivityForResult(intent, 0);
+
+                               isInit = false;
+                       } else {
+                               finish();
+                               isInit = true;
+                       }
+               }
+
+               if (isInCycle) {
+                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                       lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
+                       if (isInit) {
+                               status = ScreenStatus.Normal;
+
+                               if (lock) {
+                                       layout.setVisibility(View.VISIBLE);
+                                       updateList();
+                               } else {
+                                       layout.removeAllViews();
+                               }
+                               setStatus();
+                               isInit = false;
+                       } else {
+                               setStatus();
+                       }
+               } else {
+                       // TODO
+                       // lock解除
+               }
+       }
+
+       @Override
+       protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+               // TODO sendLockResult()、「lock解除」のため、とりあえずコメント
+               // NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               // if (dao.isEmpty()) {
+               // finish();
+               // }
+               isResult = true;
+               isInit = true;
+       }
+
+       @Override
+       protected void onStart() {
+               super.onStart();
+       }
+
+       @Override
+       protected void onResume() {
+               super.onResume();
+               isInCycle = true;
+
+               LockHandler handler = new LockHandler();
+               handler.lock(this, Constant.LOCK_UPDATE_NOTE);
+               lock = false;
+
+               if (isInit) {
+                       layout.setVisibility(View.INVISIBLE);
+                       setStatus();
+               }
+               else {
+                       // #29421
+                       updateList();
+               }
+               
+               // NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+               // if (dao.isEmpty()) {
+               // if (isInit) {
+               // Intent intent = new Intent(this,
+               // (Class<?>) SettingActivity.class);
+               // startActivityForResult(intent, 0);
+               //
+               // isInit = false;
+               // } else {
+               // finish();
+               // isInit = true;
+               // }
+               // }
+               //
+               // LockDao lockDao = (LockDao) LockDao.getInstance();
+               // lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
+               //
+               // if (isInit) {
+               // status = ScreenStatus.Normal;
+               //
+               // if (lock) {
+               // updateList();
+               // } else {
+               // layout.removeAllViews();
+               // }
+               // setStatus();
+               // isInit = false;
+               // } else {
+               // setStatus();
+               // }
+       }
+
+       @Override
+       protected void onPause() {
+               // ロック未取得でも解除する(ゴミ掃除)
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(this, Constant.LOCK_UPDATE_NOTE);
+               lock = false;
+
+               super.onPause();
+               isInCycle = false;
+       }
+
+       private void leftButtonOnClick() {
+               moveButtonOnClick(-1);
+               setStatus();
+       }
+
+       private void rightButtonOnClick() {
+               moveButtonOnClick(1);
+               setStatus();
+       }
+
+       private void moveButtonOnClick(int dx) {
+               int mx = 0;
+
+               if (dx < 0) {
+                       if (indent > 0) {
+                               mx = -1;
+                       }
+               } else {
+                       mx = 1;
+               }
+               if (mx != 0) {
+                       indent += mx;
+                       removeAllNodeView();
+                       updateList();
+               }
+       }
+
+       // private void addButtonOnClick() {
+       // setStatus(ScreenStatus.AddNode);
+       // }
+       //
+       // private void deleteButtonOnClick() {
+       // FolderUtil util = FolderUtil.getInstance();
+       // LabelIconView target = layout.getSelectedTarget();
+       // long id = target.getNodeId();
+       // NodeDao dao = (NodeDao) NodeDao.getInstance();
+       // Node node = dao.searchById(id);
+       // if (node != null) {
+       // util.deleteNode(node);
+       // // TODO 三角マークも消さないといけないのでは
+       // layout.removeView(target);
+       // updateList();
+       // setStatus();
+       // }
+       // }
+
+       private void msgOkButtonOnClick(View v) {
+               FolderUtil util = FolderUtil.getInstance();
+               LabelIconView target = layout.getSelectedTarget();
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               if (status == ScreenStatus.AddNode) {
+                       long id = target.getNodeId();
+                       Node parent = dao.searchById(id);
+                       if (parent != null) {
+                               String text = msgEditText.getText().toString();
+                               DirNode node = new DirNode(text, null);
+                               util.addDirNode(parent, node);
+                       }
+                       layout.setCutTarget(null, false);
+               } else if (status == ScreenStatus.DeleteNode) {
+                       long id = target.getNodeId();
+                       Node node = dao.searchById(id);
+                       if (node != null) {
+                               util.deleteNode(node);
+                               layout.removeView(target);
+                       }
+                       layout.setCutTarget(null, false);
+               } else if (status == ScreenStatus.RenameNode) {
+                       long id = target.getNodeId();
+                       Node node = dao.searchById(id);
+                       if (node != null) {
+                               String text = msgEditText.getText().toString();
+
+                               dao.updateName(node, text);
+                       }
+                       layout.setCutTarget(null, false);
+               }
+
+               closeIME(v);
+
+               layout.clearTarget();
+               updateList();
+               setStatus(ScreenStatus.Normal);
+       }
+
+       private void msgCancelOnClick(View v) {
+               closeIME(v);
+
+               setStatus(ScreenStatus.Normal);
+       }
+
+       private void closeIME(View v) {
+               InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+               imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
+       }
+
+       public void execute(long srcId, long dstId) {
+               try {
+                       removeAllNodeView();
+
+                       NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+                       if (srcId < 0) {
+                               // TODO
+                       }
+                       if (dstId < 0) {
+                               // TODO
+                       }
+
+                       Node src = dao.searchById(srcId);
+                       Node dst = null;
+                       if (srcId == dstId) {
+                               dst = src;
+                       } else {
+                               dst = dao.searchById(dstId);
+                       }
+
+                       if (dstId == src.getParent()) {
+                               // 同じ場所に移動
+                               return;
+                       }
+                       if (!isFileNode(src) && !isMovable(srcId, dstId)) {
+                               // 再帰的な移動
+                               return;
+                       }
+
+                       Node sp = dao.searchById(src.getParent());
+                       if (sp == null) {
+                               // TODO
+                       }
+                       Node dp = null;
+                       if (src.getParent() == dst.getParent()) {
+                               dp = sp;
+                       } else {
+                               dp = dao.searchById(dst.getParent());
+                       }
+                       if (dp == null) {
+                               // TODO
+                       }
+
+                       // TODO DBへのアクセス
+                       // sp.remove(src.getId());
+                       SQLiteDatabase db = DatabaseHelper.getInstance()
+                                       .getSQLiteDatabase();
+                       db.beginTransaction();
+                       try {
+                               dao.removeChildrenIdNT(sp, src.getId());
+                               if (dst instanceof DirNode) {
+                                       // dst.add(src.getId());
+                                       dao.updateParentNT(src, dst.getId());
+                                       dao.addChildrenIdNT(dst, src.getId());
+                               } else if (dst instanceof FileNode) {
+                                       // dp.add(src.getId());
+                                       dao.updateParentNT(src, dp.getId());
+                                       dao.addChildrenIdNT(dp, src.getId());
+                               }
+
+                               db.setTransactionSuccessful();
+                       } finally {
+                               db.endTransaction();
+                       }
+               } finally {
+                       updateList();
+               }
+       }
+
+       private boolean isMovable(long srcId, long dstId) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               while (dstId >= 0) {
+                       if (srcId == dstId) {
+                               return false;
+                       }
+                       Node node = dao.searchById(dstId);
+                       if (node == null) {
+                               // TODO エラー
+                               return false;
+                       }
+                       if (!(node instanceof DirNode)) {
+                               return true;
+                       }
+                       dstId = node.getParent();
+               }
+               return true;
+       }
+
+       public void execute(long id) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               Node node = dao.searchById(id);
+               if (node == null) {
+                       // TODO
+               }
+               node.toggleStatus();
+               Status status = node.getStatus();
+
+               dao.updateStatus(node, status);
+
+               // removeAllNodeView();
+               updateList();
+       }
+
+       public void executeView(long id) {
+               NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+               Node node = dao.searchById(id);
+               if (!isFileNode(node)) {
+                       return;
+               }
+               String guid = node.getGuid();
+
+               EvernoteIntentUtil util = EvernoteIntentUtil.getInstance();
+               util.viewNote(this, guid);
+       }
+
+       public void targetSelectedChanged(boolean status) {
+               setStatus();
+       }
+
+       public void removeAllNodeView() {
+               layout.removeAllViews();
+       }
+
+       private void setStatus() {
+               setStatus(status);
+       }
+
+       private void setStatus(ScreenStatus status) {
+               try {
+                       if (this.status != status) {
+                               this.status = status;
+                       }
+
+                       if (!lock) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainUpdateMsg));
+                               msgEditText.setVisibility(View.GONE);
+                               msgButtonLayout.setVisibility(View.GONE);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                               
+                               status = ScreenStatus.Normal;
+                               return;
+                       }
+
+                       if (status == ScreenStatus.Normal) {
+                               msgLayout.setVisibility(View.GONE);
+                               // mainMsgEditText.setText("");
+
+                               boolean leftButtonFlag = true;
+                               boolean rightButtonFlag = true;
+                               // boolean addButtonFlag = true;
+                               // boolean deleteButtonFlag = true;
+
+                               if (indent <= 0) {
+                                       leftButtonFlag = false;
+                               }
+
+                               // LabelIconView target = layout.getSelectedTarget();
+                               // NodeDao dao = (NodeDao) NodeDao.getInstance();
+                               // long id = -1;
+                               // Node node = null;
+                               // if (target != null) {
+                               // id = target.getNodeId();
+                               // node = dao.searchById(id);
+                               // }
+                               // if (target == null || node == null || !(node instanceof
+                               // DirNode))
+                               // {
+                               // addButtonFlag = false;
+                               // }
+                               // if (target == null || (node != null && node instanceof
+                               // RootNode))
+                               // {
+                               // deleteButtonFlag = false;
+                               // }
+                               layout.setElabledTouchEvent(true);
+
+                               leftButton.setEnabled(leftButtonFlag);
+                               rightButton.setEnabled(rightButtonFlag);
+                               // addButton.setEnabled(addButtonFlag);
+                               // deleteButton.setEnabled(deleteButtonFlag);
+                       } else if (status == ScreenStatus.AddNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.VISIBLE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainAddMsg));
+                               msgEditText.setText("");
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       } else if (status == ScreenStatus.DeleteNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.GONE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainDeleteMsg));
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       } else if (status == ScreenStatus.RenameNode) {
+                               msgLayout.setVisibility(View.VISIBLE);
+                               msgEditText.setVisibility(View.VISIBLE);
+                               msgButtonLayout.setVisibility(View.VISIBLE);
+                               confirmMsg.setText(getString(R.string.mainRenameMsg));
+
+                               layout.setElabledTouchEvent(false);
+
+                               leftButton.setEnabled(false);
+                               rightButton.setEnabled(false);
+                       }
+               } catch (Throwable e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+}
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/ec/206267af7af9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/ec/206267af7af9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..196c8dc
--- /dev/null
@@ -0,0 +1,11 @@
+package com.yuji.ef.exception;
+
+public class EfException extends Exception {
+       private Error error;
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 1L;
+
+       
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/f1/60784b2f84f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/f1/60784b2f84f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..ac3c23c
--- /dev/null
@@ -0,0 +1,24 @@
+package com.yuji.ef.exception;
+
+import android.content.Context;
+import android.widget.Toast;
+
+public class EfException extends Exception {
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 2248123315072811891L;
+       private EfError error;
+
+       public EfException(EfError error){
+               this.error = error;
+       }
+       
+       public EfError getError(){
+               return error;
+       }
+       
+       public static void msg(Context context, String msg){
+               Toast.makeText(context, msg, Toast.LENGTH_LONG).show();         
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/f8/8048324f79f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/f8/8048324f79f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..db5079f
--- /dev/null
@@ -0,0 +1,5 @@
+package com.yuji.ef.exception;
+
+public enum Error {
+
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/f9/104aeb207bf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/f9/104aeb207bf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..e68c276
--- /dev/null
@@ -0,0 +1,17 @@
+package com.yuji.ef.exception;
+
+public class EfException extends Exception {
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 2248123315072811891L;
+       private Error error;
+
+       public EfException(Error error){
+               this.error = error;
+       }
+       
+       public Error getError(){
+               return error;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/f9/506cfa907bf9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/f9/506cfa907bf9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..dc8d92b
--- /dev/null
@@ -0,0 +1,84 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+import android.content.Intent;
+
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+       private Context context;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+               if (activity != null) {
+                       context = activity.getApplicationContext();
+               }
+       }
+
+       public void doExecute() {
+               // TODO
+               // 実行中は、画面操作禁止にする
+               try {
+//                     FolderUtil test = FolderUtil.getInstance();
+//                     test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e){
+                       EfError error = e.getError();
+               } catch (Exception e) {
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+//             if (context != null) {
+//                     Intent intent = new Intent(Constant.ACTION_UPDATE);
+//                     context.sendBroadcast(intent);
+//             }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/f9/9086747820f800111341a60c8ca6b985 b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/f9/9086747820f800111341a60c8ca6b985
new file mode 100644 (file)
index 0000000..87e0cc7
--- /dev/null
@@ -0,0 +1,456 @@
+package com.yuji.ef;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import android.content.Context;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnLongClickListener;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.AnimationUtils;
+import android.widget.FrameLayout;
+
+public class IconFrameLayout extends FrameLayout implements OnLongClickListener {
+       private EverFolderActivity activity = null;
+
+       private LabelIconView target = null;
+       private LabelIconView destTarget = null;
+       private LabelIconView selectedTarget = null;
+       private LabelIconView cutTarget = null;
+       private List<LabelIconView> labelIconViewList = new ArrayList<LabelIconView>();
+
+       private Animation anime;
+       private int currentX;
+       private int currentY;
+       private int offsetX;
+       private int offsetY;
+       private boolean longClickFlg = false;
+       private IconScrollView scrollView;
+       private Context context = this.getContext();
+       private boolean elabledTouchEvent = true;
+
+       public IconFrameLayout(Context context) {
+               super(context);
+       }
+
+       public IconFrameLayout(Context context, AttributeSet attrs) {
+               super(context, attrs);
+       }
+
+       public IconFrameLayout(Context context, AttributeSet attrs, int defStyle) {
+               super(context, attrs, defStyle);
+       }
+
+       public void setActivity(EverFolderActivity activity) {
+               this.activity = activity;
+       }
+
+       @Override
+       protected void onLayout(boolean changed, int left, int top, int right,
+                       int bottom) {
+               super.onLayout(changed, left, top, right, bottom);
+
+               int size = this.getChildCount();
+               for (int i = 0; i < size; i++) {
+                       LabelIconView vv = (LabelIconView) this.getChildAt(i);
+                       int x2 = vv.getInitX();
+                       int y2 = vv.getInitY();
+                       // vv.init(x2, y2);
+                       vv.layout(x2, y2, x2 + vv.getWidth(), y2 + vv.getHeight());
+               }
+       }
+
+       public LabelIconView getSelectedTarget() {
+               return selectedTarget;
+       }
+
+       public void addView(LabelIconView child) {
+               addView(child, true);
+       }
+
+       public void addView(LabelIconView child, boolean isAddView) {
+               if (isAddView) {
+                       super.addView(child);
+               }
+               labelIconViewList.add(child);
+       }
+
+       public void removeAllViews() {
+               super.removeAllViews();
+               labelIconViewList.clear();
+       }
+
+       public void moveTop(LabelIconView child) {
+               this.removeView(child);
+               this.addView(child);
+       }
+
+       private LabelIconView getView(int x, int y, LabelIconView v,
+                       List<LabelIconView> list, boolean flag) {
+               Rect rect = new Rect();
+
+               if (v != null) {
+                       if (flag) {
+                               v.getHitRect(rect);
+                               if (rect.contains(x, y)) {
+                                       return v;
+                               }
+                       }
+               }
+               for (LabelIconView view : list) {
+                       if (view != v) {
+                               view.getHitRect(rect);
+                               if (rect.contains(x, y)) {
+                                       return view;
+                               }
+                       }
+               }
+               return null;
+       }
+
+       public void setScrollView(final IconScrollView scrollView) {
+               this.scrollView = scrollView;
+               this.setOnLongClickListener(this);
+               // this.setLongClickable(true);
+
+               anime = AnimationUtils.loadAnimation(context, R.anim.sample);
+               anime.setAnimationListener(new AnimationListener() {
+                       public void onAnimationStart(Animation animation) {
+                       }
+
+                       public void onAnimationRepeat(Animation animation) {
+                       }
+
+                       public void onAnimationEnd(Animation animation) {
+                               // if (isBt2Click) {
+                               // bt2.performClick();
+                               // isBt2Click = false;
+                               // }
+                               clearTarget();
+                               target = null;
+                               destTarget = null;
+
+                               scrollView.setScrollable(true);
+                               scrollView.requestDisallowInterceptTouchEvent(false);
+                               scrollView.invalidate();
+                       }
+               });
+       }
+
+       public void refresh() {
+               if (selectedTarget != null) {
+                       boolean flag = false;
+                       long id = selectedTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       selectedTarget = view;
+                                       target = view;
+                                       setSelected(selectedTarget);
+                                       flag = true;
+                               }
+                       }
+                       if (!flag) {
+                               // 表示されなかった(CLOSEなど)
+                               selectedTarget = null;
+                               target = null;
+                       }
+               }
+               if (cutTarget != null) {
+                       boolean flag = false;
+                       long id = cutTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       cutTarget = view;
+                                       if (selectedTarget != cutTarget) {
+                                               clearColorFilter(cutTarget);
+                                       }
+                                       flag = true;
+                               }
+                       }
+                       if (!flag) {
+                               // 表示されなかった(CLOSEなど)
+                               cutTarget = null;
+                       }
+               }
+       }
+
+       public void clearTarget() {
+               if (selectedTarget != null) {
+                       clearColorFilter(selectedTarget);
+                       selectedTarget = null;
+               }
+               target = null;
+       }
+
+       public LabelIconView getCutTarget() {
+               return cutTarget;
+       }
+
+       public void setCutTarget(LabelIconView cutTarget) {
+               setCutTarget(cutTarget, true);
+       }
+
+       public void setCutTarget(LabelIconView cutTarget, boolean isUnselected) {
+               if (this.cutTarget != null){
+                       setAlpha(this.cutTarget);
+               }
+               this.cutTarget = cutTarget;
+               if (isUnselected) {
+                       selectedTarget = null;
+                       target = null;
+               }
+       }
+
+       private void setSelected(LabelIconView t) {
+               t.setAlpha(255);
+               t.setColorFilter(0x88ff0000, Mode.LIGHTEN);
+       }
+
+       private void setAlpha(LabelIconView v) {
+               v.setAlpha(255);
+       }
+
+       private void setGrayAlpha(LabelIconView v) {
+               v.setAlpha(128);
+       }
+
+       private void clearColorFilter(LabelIconView v) {
+               v.clearColorFilter();
+               if (v == cutTarget) {
+                       setGrayAlpha(v);
+               }
+       }
+
+       @Override
+       public boolean onTouchEvent(MotionEvent event) {
+               try {
+                       if (!isElabledTouchEvent()) {
+                               return super.onTouchEvent(event);
+                       }
+
+                       int x = (int) event.getRawX();
+                       int y = (int) event.getRawY();
+
+                       int dx = scrollView.getLeft();
+                       int dy = scrollView.getTop();
+
+                       x -= dx;
+                       y -= dy;
+
+                       int sx = x + scrollView.getScrollX();
+                       int sy = y + scrollView.getScrollY();
+                       LabelIconView v = getView(sx, sy, target, labelIconViewList, true);
+                       LabelIconView obj = (LabelIconView) v;
+
+                       // int size = labelIconViewList.size();
+                       if (target == null) {
+                               target = obj;
+                       }
+                       if (target == null) {
+                               return super.onTouchEvent(event);
+                       }
+
+                       // コメントにすると何が起きるか?
+                       // scrollView.requestDisallowInterceptTouchEvent(true);
+
+                       if (event.getAction() == MotionEvent.ACTION_MOVE) {
+                               if (!longClickFlg) {
+                                       return super.onTouchEvent(event);
+                               }
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                               }
+                               obj = target;
+
+                               int sh = scrollView.getHeight();
+                               int lh = this.getHeight();
+                               int maxY = lh - sh;
+                               int py = scrollView.getScrollY();
+                               int sdy = 10;
+                               int N = 100;
+                               if (y < N) {
+                                       if (py > 0) {
+                                               if (py < sdy) {
+                                                       sdy = py;
+                                               }
+                                               scrollView.smoothScrollTo(0, py - sdy);
+                                               currentY -= sdy;
+                                       }
+                               } else if (sh - y < N) {
+                                       if (py < maxY) {
+                                               if (maxY - py < sdy) {
+                                                       sdy = maxY - py;
+                                               }
+                                               scrollView.smoothScrollTo(0, py + sdy);
+                                               currentY += sdy;
+                                       }
+                               }
+
+                               int diffX = offsetX - x;
+                               int diffY = offsetY - y;
+
+                               currentX -= diffX;
+                               currentY -= diffY;
+                               obj.layout(currentX, currentY, currentX + obj.getWidth(),
+                                               currentY + obj.getHeight());
+
+                               offsetX = x;
+                               offsetY = y;
+
+                               v = getView(sx, sy, target, labelIconViewList, false);
+                               if (destTarget == null) {
+                                       if (v != null) {
+                                               destTarget = v;
+                                               setGrayAlpha(destTarget);
+                                       }
+                               } else {
+                                       if (v != destTarget) {
+                                               setAlpha(destTarget);
+                                               destTarget = v;
+                                               if (destTarget != null) {
+                                                       setGrayAlpha(destTarget);
+                                               }
+                                       }
+                               }
+                       } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
+                               // if (obj == target){
+                               if (obj != null) {
+                                       if (obj != target) {
+                                               clearColorFilter(target);
+                                               target = obj;
+                                       }
+                                       // if (target instanceof StatusIconView){
+                                       if (target.getSelectedView(sx - target.getLeft(), sy
+                                                       - target.getTop()) instanceof StatusIconView) {
+                                               // StatusIconView siv = (StatusIconView) target;
+                                               // LabelIconView rv = siv.getRoot();
+                                               // long id = rv.getNodeId();
+                                               long id = target.getNodeId();
+                                               target = null;
+
+                                               activity.execute(id);
+                                               return super.onTouchEvent(event);
+                                               // return true;
+                                       }
+
+                                       if (selectedTarget != null && selectedTarget == target) {
+                                               long id = selectedTarget.getNodeId();
+
+                                               clearColorFilter(target);
+                                               target = null;
+                                               selectedTarget = target;
+                                               activity.targetSelectedChanged(true);
+
+                                               activity.executeView(id);
+
+                                               return super.onTouchEvent(event);
+                                       }
+
+                                       // ここに移動
+                                       scrollView.requestDisallowInterceptTouchEvent(true);
+
+                                       offsetX = x;
+                                       offsetY = y;
+                                       // TODO
+                                       currentX = obj.getLeft();
+                                       currentY = obj.getTop();
+
+                                       setSelected(target);
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(true);
+                                       
+                                       // コメントにしたが、デグレードするかも
+                                       // scrollView.setScrollable(false);
+                               } else {
+                                       clearColorFilter(target);
+                                       target = null;
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(false);
+                               }
+                               // return false;
+                       } else if (event.getAction() == MotionEvent.ACTION_UP) {
+                               if (!longClickFlg) {
+                                       return super.onTouchEvent(event);
+                               }
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                                       // return true;
+                               }
+                               obj = target;
+
+                               // obj.setVisibility(View.GONE);
+                               if (destTarget == null || destTarget instanceof StatusIconView) {
+                                       obj.setAnimation(anime);
+                                       obj.startAnimation(anime);
+                                       // layout.removeView(obj);
+
+                                       int srcX = target.getInitX();
+                                       int srcY = target.getInitY();
+                                       target.layout(srcX, srcY, srcX + target.getWidth(), srcY
+                                                       + target.getHeight());
+                                       setAlpha(target);
+                                       
+                                       target = null;
+                                       destTarget = null;
+                               } else {
+                                       long src = target.getNodeId();
+                                       long dst = destTarget.getNodeId();
+                                       activity.execute(src, dst);
+
+                                       // TODO
+                                       target = null;
+                                       destTarget = null;
+
+                                       // T29171
+                                       clearTarget();
+
+                                       scrollView.setScrollable(true);
+                                       scrollView.requestDisallowInterceptTouchEvent(false);
+                                       scrollView.invalidate();
+                               }
+
+                               longClickFlg = false;
+                       }
+
+                       return super.onTouchEvent(event);
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       return false;
+               }
+       }
+
+       @Override
+       public boolean onLongClick(View view) {
+               if (!isElabledTouchEvent()) {
+                       return true;
+               }
+               if (target == null) {
+                       return false;
+               }
+               if (target instanceof StatusIconView) {
+                       return false;
+               }
+
+               LabelIconView v = (LabelIconView) target;
+               setGrayAlpha(v);
+               v.clearColorFilter();
+
+               moveTop(target);
+
+               longClickFlg = true;
+               return true;
+       }
+
+       public boolean isElabledTouchEvent() {
+               return elabledTouchEvent;
+       }
+
+       public void setElabledTouchEvent(boolean elabledTouchEvent) {
+               this.elabledTouchEvent = elabledTouchEvent;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/fa/5051aece86f9001111279b9efb32d92f b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.history/fa/5051aece86f9001111279b9efb32d92f
new file mode 100644 (file)
index 0000000..92c38a4
--- /dev/null
@@ -0,0 +1,88 @@
+package com.yuji.ef.task;
+
+import java.lang.ref.WeakReference;
+
+import android.content.Context;
+import android.content.Intent;
+
+import com.yuji.ef.Initialize;
+import com.yuji.ef.SettingActivity;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.LockDao;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.exception.RollbackException;
+import com.yuji.ef.utility.AsyncTaskIF;
+import com.yuji.ef.utility.Debug;
+import com.yuji.ef.utility.FolderUtil;
+
+public class NoteUpdateTask implements AsyncTaskIF {
+       private WeakReference<SettingActivity> activityRef;
+
+       private boolean isRoot;
+       private boolean isBook;
+       private boolean isNote;
+       private int errorCode = -1;
+
+       public NoteUpdateTask(SettingActivity activity, boolean isRoot,
+                       boolean isBook, boolean isNote) {
+               activityRef = new WeakReference<SettingActivity>(activity);
+               this.isRoot = isRoot;
+               this.isBook = isBook;
+               this.isNote = isNote;
+       }
+
+       public void doExecute() throws EfException {
+               try {
+                       // FolderUtil test = FolderUtil.getInstance();
+                       // test.createTestNote();
+                       FolderUtil util = FolderUtil.getInstance();
+                       util.update(isRoot, isBook, isNote);
+               } catch (RollbackException e) {
+                       EfError error = e.getError();
+                       // TODO
+                       Intent intent = new Intent(Constant.ACTION_UPDATE);
+                       Initialize.getContext().sendBroadcast(intent);
+                       EfException.msg(Initialize.getContext(), "データの更新に失敗しました(a)");
+                       Debug.d(this, null, e);
+                       throw e;
+               } catch (Exception e) {
+                       // TODO
+                       EfException.msg(Initialize.getContext(), "データの更新に失敗しました(b)");
+                       throw new EfException(EfError.SYSTEM);
+               }
+       }
+
+       public void cancel() {
+
+       }
+
+       public void done(boolean isCancel) {
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+
+               SettingActivity activity = getActivity();
+               if (activity != null) {
+                       activity.done(errorCode);
+                       activityRef = null;
+               }
+
+               // if (context != null) {
+               // Intent intent = new Intent(Constant.ACTION_UPDATE);
+               // context.sendBroadcast(intent);
+               // }
+       }
+
+       private SettingActivity getActivity() {
+               if (activityRef == null) {
+                       return null;
+               }
+               return activityRef.get();
+       }
+
+       @Override
+       public int getStatus() {
+               // TODO
+               return 0;
+       }
+}
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/a0/11/properties.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/a0/11/properties.index
new file mode 100644 (file)
index 0000000..6ccd795
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/a0/11/properties.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/a0/62/properties.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/a0/62/properties.index
new file mode 100644 (file)
index 0000000..806e204
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/a0/62/properties.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/a0/d6/properties.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/a0/d6/properties.index
new file mode 100644 (file)
index 0000000..28981db
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/a0/d6/properties.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/a0/de/properties.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/a0/de/properties.index
new file mode 100644 (file)
index 0000000..8a27727
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/a0/de/properties.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/15/history.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/15/history.index
new file mode 100644 (file)
index 0000000..f027bd7
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/15/history.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/4f/history.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/4f/history.index
new file mode 100644 (file)
index 0000000..68f7820
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/4f/history.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/85/history.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/85/history.index
new file mode 100644 (file)
index 0000000..f6ef872
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/85/history.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/94/history.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/94/history.index
new file mode 100644 (file)
index 0000000..22581f5
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/94/history.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/b5/history.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/b5/history.index
new file mode 100644 (file)
index 0000000..5ee9598
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/b5/history.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/history.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/history.index
new file mode 100644 (file)
index 0000000..9973c7f
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/e4/81/5b/a1/history.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/properties.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/properties.index
new file mode 100644 (file)
index 0000000..a07641e
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.indexes/properties.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.markers b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.markers
new file mode 100644 (file)
index 0000000..c877f67
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.markers differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.markers.snap b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.markers.snap
new file mode 100644 (file)
index 0000000..ccd657f
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.markers.snap differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.syncinfo.snap b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.syncinfo.snap
new file mode 100644 (file)
index 0000000..1253ec8
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.projects/EverFolder/.syncinfo.snap differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.root/.indexes/history.version b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.root/.indexes/history.version
new file mode 100644 (file)
index 0000000..25cb955
--- /dev/null
@@ -0,0 +1 @@
+\ 2
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index
new file mode 100644 (file)
index 0000000..a30b173
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version
new file mode 100644 (file)
index 0000000..6b2aaa7
--- /dev/null
@@ -0,0 +1 @@
+\ 1
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.root/.markers.snap b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.root/.markers.snap
new file mode 100644 (file)
index 0000000..1253ec8
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.root/.markers.snap differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.root/20.tree b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.root/20.tree
new file mode 100644 (file)
index 0000000..511acd5
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.root/20.tree differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources
new file mode 100644 (file)
index 0000000..9c22cec
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.snap b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.snap
new file mode 100644 (file)
index 0000000..bab9a05
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.resources/.snap differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/com.android.ide.eclipse.adt.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/com.android.ide.eclipse.adt.prefs
new file mode 100644 (file)
index 0000000..3c6bae7
--- /dev/null
@@ -0,0 +1,3 @@
+com.android.ide.eclipse.adt.fixLegacyEditors=1
+com.android.ide.eclipse.adt.sdk=/home/yuji/prog/android-sdk-linux
+eclipse.preferences.version=1
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/com.android.ide.eclipse.ddms.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/com.android.ide.eclipse.ddms.prefs
new file mode 100644 (file)
index 0000000..728b0a5
--- /dev/null
@@ -0,0 +1,13 @@
+ddms.logcat.auotmonitor.level=debug
+ddms.logcat.automonitor.userprompt=true
+devicePanel.Col0=184
+devicePanel.Col1=50
+devicePanel.Col4=859
+eclipse.preferences.version=1
+logcat.view.colsize.Application=226
+logcat.view.colsize.Level=46
+logcat.view.colsize.PID=82
+logcat.view.colsize.TID=82
+logcat.view.colsize.Tag=167
+logcat.view.colsize.Text=900
+logcat.view.colsize.Time=226
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs
new file mode 100644 (file)
index 0000000..dffc6b5
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+version=1
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs
new file mode 100644 (file)
index 0000000..abae620
--- /dev/null
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.debug.ui.PREF_LAUNCH_PERSPECTIVES=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\n<launchPerspectives/>\n
+org.eclipse.debug.ui.switch_perspective_on_suspend=never
+pref_state_memento.org.eclipse.debug.ui.BreakpointView=<?xml version\="1.0" encoding\="UTF-8"?>\n<VariablesViewMemento org.eclipse.debug.ui.SASH_DETAILS_PART\="315" org.eclipse.debug.ui.SASH_VIEW_PART\="684">\n<PRESENTATION_CONTEXT_PROPERTIES IMemento.internal.id\="org.eclipse.debug.ui.BreakpointView">\n<BOOLEAN BOOLEAN\="true" IMemento.internal.id\="org.eclipse.debug.ui.check"/>\n</PRESENTATION_CONTEXT_PROPERTIES>\n</VariablesViewMemento>
+pref_state_memento.org.eclipse.debug.ui.DebugVieworg.eclipse.debug.ui.DebugView=<?xml version\="1.0" encoding\="UTF-8"?>\n<DebugViewMemento org.eclipse.debug.ui.BREADCRUMB_DROPDOWN_AUTO_EXPAND\="false"/>
+preferredDetailPanes=DefaultDetailPane\:DefaultDetailPane|org.eclipse.jdt.debug.ui.DETAIL_PANE_LINE_BREAKPOINT\:org.eclipse.jdt.debug.ui.DETAIL_PANE_LINE_BREAKPOINT|
+preferredTargets=default\:default|
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.core.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..69ddd08
--- /dev/null
@@ -0,0 +1,8 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.visibilityCheck=enabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.debug.ui.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.debug.ui.prefs
new file mode 100644 (file)
index 0000000..8d9ebd4
--- /dev/null
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+org.eclipse.debug.ui.VariableView.org.eclipse.jdt.debug.ui.show_null_entries=true
+org.eclipse.jdt.debug.ui.javaDebug.alertHCRNotSupported=false
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.launching.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644 (file)
index 0000000..81647a8
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_VM_XML=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\n<vmSettings defaultVM\="57,org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType13,1346158672964" defaultVMConnector\="">\n<vmType id\="org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType">\n<vm id\="1346158672964" name\="jdk1.7.0_05" path\="/usr/lib/jvm/jdk1.7.0_05"/>\n</vmType>\n</vmSettings>\n
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644 (file)
index 0000000..59e4ce3
--- /dev/null
@@ -0,0 +1,20 @@
+content_assist_disabled_computers=org.eclipse.recommenders.completion.rcp.templates.category\u0000org.eclipse.jdt.ui.javaAllProposalCategory\u0000org.eclipse.jdt.ui.javaNoTypeProposalCategory\u0000org.eclipse.jdt.ui.textProposalCategory\u0000org.eclipse.recommenders.subwords.rcp.category\u0000org.eclipse.recommenders.completion.rcp.chain.category\u0000org.eclipse.jdt.ui.javaTypeProposalCategory\u0000
+content_assist_lru_history=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><history maxLHS\="100" maxRHS\="10"/>
+content_assist_number_of_computers=21
+content_assist_proposals_background=255,255,255
+content_assist_proposals_foreground=26,26,26
+eclipse.preferences.version=1
+fontPropagated=true
+org.eclipse.jdt.ui.editor.tab.width=
+org.eclipse.jdt.ui.formatterprofiles.version=12
+org.eclipse.jdt.ui.javadoclocations.migrated=true
+org.eclipse.jdt.ui.text.code_templates_migrated=true
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates/>
+org.eclipse.jdt.ui.text.custom_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates/>
+org.eclipse.jdt.ui.text.templates_migrated=true
+org.eclipse.jface.textfont=1|Monospace|10.0|0|GTK|1|;
+proposalOrderMigrated=true
+spelling_locale_initialized=true
+tabWidthPropagated=true
+useAnnotationsPrefPage=true
+useQuickDiffPrefPage=true
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs
new file mode 100644 (file)
index 0000000..67b1d96
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.m2e.discovery.pref.projects=
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs
new file mode 100644 (file)
index 0000000..43e97e4
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+mylyn.attention.migrated=true
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.java.ui.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.java.ui.prefs
new file mode 100644 (file)
index 0000000..4445627
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.mylyn.java.ui.run.count.3_1_0=1
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs
new file mode 100644 (file)
index 0000000..8d462a6
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.mylyn.monitor.activity.tracking.enabled.checked=true
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs
new file mode 100644 (file)
index 0000000..cec65c4
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.search.defaultPerspective=org.eclipse.search.defaultPerspective.none
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.cvs.ui.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.cvs.ui.prefs
new file mode 100644 (file)
index 0000000..f9e585b
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+pref_first_startup=false
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs
new file mode 100644 (file)
index 0000000..56cd496
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.team.ui.first_time=false
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs
new file mode 100644 (file)
index 0000000..0b56132
--- /dev/null
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+lineNumberRuler=true
+overviewRuler_migration=migrated_3.1
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs
new file mode 100644 (file)
index 0000000..b456591
--- /dev/null
@@ -0,0 +1,5 @@
+PROBLEMS_FILTERS_MIGRATE=true
+eclipse.preferences.version=1
+platformState=1346157821374
+quickStart=false
+tipsAndTricks=true
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs
new file mode 100644 (file)
index 0000000..08076f2
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+showIntro=false
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs
new file mode 100644 (file)
index 0000000..126864b
--- /dev/null
@@ -0,0 +1,3 @@
+ENABLED_DECORATORS=org.eclipse.m2e.core.mavenVersionDecorator\:false,com.android.ide.eclipse.adt.project.FolderDecorator\:true,org.eclipse.egit.ui.internal.decorators.GitLightweightDecorator\:true,org.eclipse.jdt.ui.override.decorator\:true,org.eclipse.jdt.ui.interface.decorator\:false,org.eclipse.jdt.ui.buildpath.decorator\:true,org.eclipse.m2e.core.maven2decorator\:true,org.eclipse.mylyn.context.ui.decorator.interest\:true,org.eclipse.mylyn.tasks.ui.decorators.task\:true,org.eclipse.mylyn.team.ui.changeset.decorator\:true,org.eclipse.team.cvs.ui.decorator\:true,org.eclipse.ui.LinkedResourceDecorator\:true,org.eclipse.ui.VirtualResourceDecorator\:true,org.eclipse.ui.ContentTypeDecorator\:true,org.eclipse.ui.ResourceFilterDecorator\:false,
+PLUGINS_NOT_ACTIVATED_ON_STARTUP=org.eclipse.m2e.discovery;
+eclipse.preferences.version=1
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.core.prefs b/source/workspace/.metadata.bak/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.core.prefs
new file mode 100644 (file)
index 0000000..8bb102b
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+task-tag-projects-already-scanned=EverFolder
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.debug.core/.launches/EverFolder.launch b/source/workspace/.metadata.bak/.plugins/org.eclipse.debug.core/.launches/EverFolder.launch
new file mode 100644 (file)
index 0000000..e1a0b94
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="com.android.ide.eclipse.adt.debug.LaunchConfigType">
+<intAttribute key="com.android.ide.eclipse.adt.action" value="0"/>
+<stringAttribute key="com.android.ide.eclipse.adt.commandline" value=""/>
+<intAttribute key="com.android.ide.eclipse.adt.delay" value="0"/>
+<booleanAttribute key="com.android.ide.eclipse.adt.nobootanim" value="false"/>
+<intAttribute key="com.android.ide.eclipse.adt.speed" value="0"/>
+<stringAttribute key="com.android.ide.eclipse.adt.target" value="AUTO"/>
+<booleanAttribute key="com.android.ide.eclipse.adt.wipedata" value="false"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/EverFolder"/>
+<listEntry value="/EverFolder/AndroidManifest.xml"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="4"/>
+<listEntry value="1"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.jdt.launching.ALLOW_TERMINATE" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="EverFolder"/>
+</launchConfiguration>
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.debug.ui/dialog_settings.xml b/source/workspace/.metadata.bak/.plugins/org.eclipse.debug.ui/dialog_settings.xml
new file mode 100644 (file)
index 0000000..81d873d
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+       <section name="org.eclipse.debug.ui.LAUNCH_CONFIGURATIONS_DIALOG_SECTION">
+               <item value="1080" key="DIALOG_WIDTH"/>
+               <item value=", com.android.ide.eclipse.adt.debug.LaunchConfigType, " key="org.eclipse.debug.ui.EXPANDED_NODES"/>
+               <item value="640" key="DIALOG_HEIGHT"/>
+               <item value="237" key="org.eclipse.debug.ui.DIALOG_SASH_WEIGHTS_1"/>
+               <item value="1|Sans|10.0|0|GTK|1|" key="DIALOG_FONT_NAME"/>
+               <item value="762" key="org.eclipse.debug.ui.DIALOG_SASH_WEIGHTS_2"/>
+       </section>
+</section>
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.debug.ui/launchConfigurationHistory.xml b/source/workspace/.metadata.bak/.plugins/org.eclipse.debug.ui/launchConfigurationHistory.xml
new file mode 100644 (file)
index 0000000..5449225
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchHistory>
+<launchGroup id="org.eclipse.ui.externaltools.launchGroup">
+<mruHistory/>
+<favorites/>
+</launchGroup>
+<launchGroup id="org.eclipse.debug.ui.launchGroup.profile">
+<mruHistory/>
+<favorites/>
+</launchGroup>
+<launchGroup id="org.eclipse.debug.ui.launchGroup.debug">
+<mruHistory>
+<launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;EverFolder&quot;/&gt;&#10;"/>
+</mruHistory>
+<favorites/>
+</launchGroup>
+<launchGroup id="org.eclipse.debug.ui.launchGroup.run">
+<mruHistory>
+<launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;EverFolder&quot;/&gt;&#10;"/>
+</mruHistory>
+<favorites/>
+</launchGroup>
+</launchHistory>
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.e4.workbench/workbench.xmi b/source/workspace/.metadata.bak/.plugins/org.eclipse.e4.workbench/workbench.xmi
new file mode 100644 (file)
index 0000000..f86cad3
--- /dev/null
@@ -0,0 +1,2245 @@
+<?xml version="1.0" encoding="ASCII"?>
+<application:Application xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:advanced="http://www.eclipse.org/ui/2010/UIModel/application/ui/advanced" xmlns:application="http://www.eclipse.org/ui/2010/UIModel/application" xmlns:basic="http://www.eclipse.org/ui/2010/UIModel/application/ui/basic" xmlns:menu="http://www.eclipse.org/ui/2010/UIModel/application/ui/menu" xmi:id="_enU1wfETEeGDEc9DxL1vVg" elementId="org.eclipse.e4.legacy.ide.application" contributorURI="platform:/plugin/org.eclipse.ui.workbench" selectedElement="_enU1wvETEeGDEc9DxL1vVg" bindingContexts="_enU1y_ETEeGDEc9DxL1vVg">
+  <tags>activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration</tags>
+  <children xsi:type="basic:TrimmedWindow" xmi:id="_enU1wvETEeGDEc9DxL1vVg" elementId="IDEWindow" contributorURI="platform:/plugin/org.eclipse.ui.workbench" selectedElement="_f1J60PETEeGDEc9DxL1vVg" x="31" y="38" width="1401" height="835">
+    <tags>topLevel</tags>
+    <children xsi:type="basic:PartSashContainer" xmi:id="_f1J60PETEeGDEc9DxL1vVg" selectedElement="_f1J60fETEeGDEc9DxL1vVg" horizontal="true">
+      <children xsi:type="advanced:PerspectiveStack" xmi:id="_f1J60fETEeGDEc9DxL1vVg" containerData="7500" selectedElement="_gMk8UfETEeGDEc9DxL1vVg">
+        <children xsi:type="advanced:Perspective" xmi:id="_gMk8UfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.JavaPerspective" selectedElement="_gMljYPETEeGDEc9DxL1vVg" label="Java" iconURI="platform:/plugin/org.eclipse.jdt.ui/icons/full/eview16/jperspective.gif">
+          <persistedState key="persp.hiddenItems" value="persp.hideToolbarSC:org.eclipse.debug.ui.commands.RunToLine,persp.hideToolbarSC:org.eclipse.jdt.ui.actions.OpenProjectWizard,persp.hideToolbarSC:org.eclipse.ui.edit.text.toggleShowSelectedElementOnly,"/>
+          <tags>persp.actionSet:org.eclipse.mylyn.context.ui.actionSet</tags>
+          <tags>persp.actionSet:org.eclipse.mylyn.doc.actionSet</tags>
+          <tags>persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation</tags>
+          <tags>persp.actionSet:org.eclipse.ui.cheatsheets.actionSet</tags>
+          <tags>persp.actionSet:org.eclipse.search.searchActionSet</tags>
+          <tags>persp.actionSet:org.eclipse.ui.edit.text.actionSet.annotationNavigation</tags>
+          <tags>persp.actionSet:org.eclipse.ui.edit.text.actionSet.navigation</tags>
+          <tags>persp.actionSet:org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo</tags>
+          <tags>persp.actionSet:org.eclipse.ui.externaltools.ExternalToolsSet</tags>
+          <tags>persp.actionSet:org.eclipse.ui.actionSet.keyBindings</tags>
+          <tags>persp.actionSet:org.eclipse.ui.actionSet.openFiles</tags>
+          <tags>persp.actionSet:org.eclipse.wb.core.ui.actionset</tags>
+          <tags>persp.actionSet:adt.actionSet.wizards</tags>
+          <tags>persp.actionSet:adt.actionSet.refactorings</tags>
+          <tags>persp.actionSet:adt.actionSet.avdManager</tags>
+          <tags>persp.actionSet:adt.actionSet.lint</tags>
+          <tags>persp.actionSet:org.eclipse.debug.ui.launchActionSet</tags>
+          <tags>persp.actionSet:org.eclipse.jdt.ui.JavaActionSet</tags>
+          <tags>persp.actionSet:org.eclipse.jdt.ui.JavaElementCreationActionSet</tags>
+          <tags>persp.actionSet:org.eclipse.ui.NavigateActionSet</tags>
+          <tags>persp.viewSC:org.eclipse.jdt.ui.PackageExplorer</tags>
+          <tags>persp.viewSC:org.eclipse.jdt.ui.TypeHierarchy</tags>
+          <tags>persp.viewSC:org.eclipse.jdt.ui.SourceView</tags>
+          <tags>persp.viewSC:org.eclipse.jdt.ui.JavadocView</tags>
+          <tags>persp.viewSC:org.eclipse.search.ui.views.SearchView</tags>
+          <tags>persp.viewSC:org.eclipse.ui.console.ConsoleView</tags>
+          <tags>persp.viewSC:org.eclipse.ui.views.ContentOutline</tags>
+          <tags>persp.viewSC:org.eclipse.ui.views.ProblemView</tags>
+          <tags>persp.viewSC:org.eclipse.ui.views.ResourceNavigator</tags>
+          <tags>persp.viewSC:org.eclipse.ui.views.TaskList</tags>
+          <tags>persp.viewSC:org.eclipse.ui.views.ProgressView</tags>
+          <tags>persp.viewSC:org.eclipse.ui.navigator.ProjectExplorer</tags>
+          <tags>persp.viewSC:org.eclipse.ui.texteditor.TemplatesView</tags>
+          <tags>persp.viewSC:org.eclipse.pde.runtime.LogView</tags>
+          <tags>persp.newWizSC:org.eclipse.jdt.ui.wizards.JavaProjectWizard</tags>
+          <tags>persp.newWizSC:org.eclipse.jdt.ui.wizards.NewPackageCreationWizard</tags>
+          <tags>persp.newWizSC:org.eclipse.jdt.ui.wizards.NewClassCreationWizard</tags>
+          <tags>persp.newWizSC:org.eclipse.jdt.ui.wizards.NewInterfaceCreationWizard</tags>
+          <tags>persp.newWizSC:org.eclipse.jdt.ui.wizards.NewEnumCreationWizard</tags>
+          <tags>persp.newWizSC:org.eclipse.jdt.ui.wizards.NewAnnotationCreationWizard</tags>
+          <tags>persp.newWizSC:org.eclipse.jdt.ui.wizards.NewSourceFolderCreationWizard</tags>
+          <tags>persp.newWizSC:org.eclipse.jdt.ui.wizards.NewSnippetFileCreationWizard</tags>
+          <tags>persp.newWizSC:org.eclipse.jdt.ui.wizards.NewJavaWorkingSetWizard</tags>
+          <tags>persp.newWizSC:org.eclipse.ui.wizards.new.folder</tags>
+          <tags>persp.newWizSC:org.eclipse.ui.wizards.new.file</tags>
+          <tags>persp.newWizSC:org.eclipse.ui.editors.wizards.UntitledTextFileWizard</tags>
+          <tags>persp.perspSC:org.eclipse.jdt.ui.JavaBrowsingPerspective</tags>
+          <tags>persp.perspSC:org.eclipse.debug.ui.DebugPerspective</tags>
+          <tags>persp.newWizSC:com.android.ide.eclipse.adt.project.NewProjectWizard</tags>
+          <tags>persp.newWizSC:com.android.ide.eclipse.editors.wizards.NewXmlFileWizard</tags>
+          <tags>persp.perspSC:com.android.ide.eclipse.ddms.Perspective</tags>
+          <tags>persp.perspSC:com.android.ide.eclipse.hierarchyviewer.PixelPerfectPespective</tags>
+          <tags>persp.perspSC:com.android.ide.eclipse.hierarchyviewer.TreeViewPerspective</tags>
+          <tags>persp.viewSC:org.eclipse.ant.ui.views.AntView</tags>
+          <tags>persp.showIn:org.eclipse.egit.ui.RepositoriesView</tags>
+          <tags>persp.actionSet:org.eclipse.debug.ui.breakpointActionSet</tags>
+          <tags>persp.actionSet:org.eclipse.jdt.debug.ui.JDTDebugActionSet</tags>
+          <tags>persp.newWizSC:org.eclipse.jdt.junit.wizards.NewTestCaseCreationWizard</tags>
+          <tags>persp.actionSet:org.eclipse.jdt.junit.JUnitActionSet</tags>
+          <tags>persp.showIn:org.eclipse.jdt.ui.PackageExplorer</tags>
+          <tags>persp.showIn:org.eclipse.team.ui.GenericHistoryView</tags>
+          <tags>persp.showIn:org.eclipse.ui.views.ResourceNavigator</tags>
+          <tags>persp.showIn:org.eclipse.ui.navigator.ProjectExplorer</tags>
+          <tags>persp.viewSC:org.eclipse.mylyn.tasks.ui.views.tasks</tags>
+          <tags>persp.newWizSC:org.eclipse.mylyn.tasks.ui.wizards.new.repository.task</tags>
+          <tags>persp.viewSC:org.eclipse.wb.core.StructureView</tags>
+          <tags>persp.viewSC:org.eclipse.wb.core.PaletteView</tags>
+          <tags>persp.actionSet:org.eclipse.debug.ui.debugActionSet</tags>
+          <children xsi:type="basic:PartSashContainer" xmi:id="_gMljYPETEeGDEc9DxL1vVg" selectedElement="_gMn_o_ETEeGDEc9DxL1vVg" horizontal="true">
+            <children xsi:type="basic:PartSashContainer" xmi:id="_gMljYfETEeGDEc9DxL1vVg" containerData="1729" selectedElement="_gMljYvETEeGDEc9DxL1vVg">
+              <children xsi:type="basic:PartStack" xmi:id="_gMljYvETEeGDEc9DxL1vVg" elementId="left" containerData="6000" selectedElement="_gMljY_ETEeGDEc9DxL1vVg">
+                <tags>newtablook</tags>
+                <tags>org.eclipse.e4.primaryNavigationStack</tags>
+                <children xsi:type="advanced:Placeholder" xmi:id="_gMljY_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.PackageExplorer" ref="_gLCEMPETEeGDEc9DxL1vVg"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_gMljZPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.TypeHierarchy" toBeRendered="false" ref="_gLNDUPETEeGDEc9DxL1vVg"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_gMljZfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.ResourceNavigator" toBeRendered="false" ref="_gLNqYPETEeGDEc9DxL1vVg"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_gMljZvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigator.ProjectExplorer" toBeRendered="false" ref="_gLNqYfETEeGDEc9DxL1vVg"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_gMljZ_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.junit.ResultView" toBeRendered="false" ref="_gMYIAPETEeGDEc9DxL1vVg"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_gMljaPETEeGDEc9DxL1vVg" elementId="org.eclipse.wb.core.StructureView" toBeRendered="false" ref="_gMkVQPETEeGDEc9DxL1vVg"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_gMn_oPETEeGDEc9DxL1vVg" elementId="org.eclipse.wb.core.PaletteView" toBeRendered="false" ref="_gMk8UPETEeGDEc9DxL1vVg"/>
+              </children>
+              <children xsi:type="basic:PartStack" xmi:id="_gMn_ofETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewMStack" toBeRendered="false" containerData="4000">
+                <tags>newtablook</tags>
+                <children xsi:type="advanced:Placeholder" xmi:id="_gMn_ovETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesView" toBeRendered="false" ref="_gMXg8PETEeGDEc9DxL1vVg"/>
+              </children>
+            </children>
+            <children xsi:type="basic:PartSashContainer" xmi:id="_gMn_o_ETEeGDEc9DxL1vVg" containerData="8271" selectedElement="_gMn_pPETEeGDEc9DxL1vVg">
+              <children xsi:type="basic:PartSashContainer" xmi:id="_gMn_pPETEeGDEc9DxL1vVg" containerData="6153" selectedElement="_gMn_pfETEeGDEc9DxL1vVg" horizontal="true">
+                <children xsi:type="advanced:Placeholder" xmi:id="_gMn_pfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.editorss" containerData="7500" ref="_gIefcPETEeGDEc9DxL1vVg"/>
+                <children xsi:type="basic:PartSashContainer" xmi:id="_gMn_pvETEeGDEc9DxL1vVg" containerData="2500" selectedElement="_gMn_qfETEeGDEc9DxL1vVg">
+                  <children xsi:type="basic:PartStack" xmi:id="_gMn_p_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.views.tasksMStack" toBeRendered="false" containerData="5000">
+                    <tags>newtablook</tags>
+                    <children xsi:type="advanced:Placeholder" xmi:id="_gMn_qPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.views.tasks" toBeRendered="false" ref="_gMdAgPETEeGDEc9DxL1vVg"/>
+                  </children>
+                  <children xsi:type="basic:PartStack" xmi:id="_gMn_qfETEeGDEc9DxL1vVg" elementId="right" containerData="5000" selectedElement="_gMn_qvETEeGDEc9DxL1vVg">
+                    <tags>newtablook</tags>
+                    <tags>org.eclipse.e4.secondaryNavigationStack</tags>
+                    <children xsi:type="advanced:Placeholder" xmi:id="_gMn_qvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.ContentOutline" ref="_gLdiAfETEeGDEc9DxL1vVg"/>
+                    <children xsi:type="advanced:Placeholder" xmi:id="_gMomsPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.texteditor.TemplatesView" toBeRendered="false" ref="_gLeJEPETEeGDEc9DxL1vVg"/>
+                    <children xsi:type="advanced:Placeholder" xmi:id="_gMomsfETEeGDEc9DxL1vVg" elementId="org.eclipse.ant.ui.views.AntView" toBeRendered="false" ref="_gMMh0PETEeGDEc9DxL1vVg"/>
+                  </children>
+                </children>
+              </children>
+              <children xsi:type="basic:PartStack" xmi:id="_gMomsvETEeGDEc9DxL1vVg" elementId="bottom" containerData="3847" selectedElement="_gMomtvETEeGDEc9DxL1vVg">
+                <tags>newtablook</tags>
+                <tags>org.eclipse.e4.secondaryDataStack</tags>
+                <children xsi:type="advanced:Placeholder" xmi:id="_gMoms_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.ProblemView" ref="_gLU_IPETEeGDEc9DxL1vVg"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_gMomtPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.JavadocView" ref="_gLVmMPETEeGDEc9DxL1vVg"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_gMomtfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.SourceView" ref="_gLWNQPETEeGDEc9DxL1vVg"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_gMomtvETEeGDEc9DxL1vVg" elementId="org.eclipse.search.ui.views.SearchView" ref="_gLXbYPETEeGDEc9DxL1vVg"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_gMomt_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.console.ConsoleView" ref="_gLXbYfETEeGDEc9DxL1vVg"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_gMomuPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.BookmarkView" toBeRendered="false" ref="_gLc68PETEeGDEc9DxL1vVg"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_gMomufETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.ProgressView" toBeRendered="false" ref="_gLdiAPETEeGDEc9DxL1vVg"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_o_UkUPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.ddms.views.DeviceView" ref="_o_T9QPETEeGDEc9DxL1vVg"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_bjc08fKbEeGnx90PHpZ2Rw" elementId="com.android.ide.eclipse.ddms.views.LogCatView" ref="_bjc08PKbEeGnx90PHpZ2Rw"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_vBlMIPKcEeGnx90PHpZ2Rw" elementId="org.eclipse.debug.ui.DebugView" ref="_vBklEPKcEeGnx90PHpZ2Rw"/>
+              </children>
+            </children>
+          </children>
+        </children>
+        <children xsi:type="advanced:Perspective" xmi:id="_-lXYoPl3EeG4kLDFTwro_A" elementId="org.eclipse.debug.ui.DebugPerspective" selectedElement="_-lX_sPl3EeG4kLDFTwro_A" label="Debug" iconURI="platform:/plugin/org.eclipse.debug.ui/icons/full/eview16/debug_persp.gif">
+          <persistedState key="persp.hiddenItems" value="persp.hideToolbarSC:org.eclipse.debug.ui.commands.RunToLine,persp.hideToolbarSC:org.eclipse.jdt.ui.actions.OpenProjectWizard,persp.hideToolbarSC:org.eclipse.ui.edit.text.toggleShowSelectedElementOnly,"/>
+          <tags>persp.actionSet:org.eclipse.mylyn.context.ui.actionSet</tags>
+          <tags>persp.actionSet:org.eclipse.mylyn.doc.actionSet</tags>
+          <tags>persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation</tags>
+          <tags>persp.actionSet:org.eclipse.ui.cheatsheets.actionSet</tags>
+          <tags>persp.actionSet:org.eclipse.search.searchActionSet</tags>
+          <tags>persp.actionSet:org.eclipse.ui.edit.text.actionSet.annotationNavigation</tags>
+          <tags>persp.actionSet:org.eclipse.ui.edit.text.actionSet.navigation</tags>
+          <tags>persp.actionSet:org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo</tags>
+          <tags>persp.actionSet:org.eclipse.ui.externaltools.ExternalToolsSet</tags>
+          <tags>persp.actionSet:org.eclipse.ui.actionSet.keyBindings</tags>
+          <tags>persp.actionSet:org.eclipse.ui.actionSet.openFiles</tags>
+          <tags>persp.actionSet:org.eclipse.wb.core.ui.actionset</tags>
+          <tags>persp.actionSet:adt.actionSet.wizards</tags>
+          <tags>persp.actionSet:adt.actionSet.refactorings</tags>
+          <tags>persp.actionSet:adt.actionSet.avdManager</tags>
+          <tags>persp.actionSet:adt.actionSet.lint</tags>
+          <tags>persp.actionSet:org.eclipse.debug.ui.launchActionSet</tags>
+          <tags>persp.actionSet:org.eclipse.debug.ui.debugActionSet</tags>
+          <tags>persp.viewSC:org.eclipse.debug.ui.DebugView</tags>
+          <tags>persp.viewSC:org.eclipse.debug.ui.VariableView</tags>
+          <tags>persp.viewSC:org.eclipse.debug.ui.BreakpointView</tags>
+          <tags>persp.viewSC:org.eclipse.debug.ui.ExpressionView</tags>
+          <tags>persp.viewSC:org.eclipse.ui.views.ContentOutline</tags>
+          <tags>persp.viewSC:org.eclipse.ui.console.ConsoleView</tags>
+          <tags>persp.viewSC:org.eclipse.ui.views.TaskList</tags>
+          <tags>persp.viewSC:com.android.ide.eclipse.ddms.views.LogCatView</tags>
+          <tags>persp.viewSC:com.android.ide.eclipse.ddms.views.DeviceView</tags>
+          <tags>persp.perspSC:com.android.ide.eclipse.ddms.Perspective</tags>
+          <tags>persp.viewSC:org.eclipse.ant.ui.views.AntView</tags>
+          <tags>persp.actionSet:org.eclipse.ui.NavigateActionSet</tags>
+          <tags>persp.actionSet:org.eclipse.debug.ui.breakpointActionSet</tags>
+          <tags>persp.viewSC:org.eclipse.pde.runtime.LogView</tags>
+          <tags>persp.showIn:org.eclipse.egit.ui.RepositoriesView</tags>
+          <tags>persp.actionSet:org.eclipse.jdt.debug.ui.JDTDebugActionSet</tags>
+          <tags>persp.viewSC:org.eclipse.jdt.debug.ui.DisplayView</tags>
+          <tags>persp.perspSC:org.eclipse.jdt.ui.JavaPerspective</tags>
+          <tags>persp.perspSC:org.eclipse.jdt.ui.JavaBrowsingPerspective</tags>
+          <tags>persp.actionSet:org.eclipse.jdt.ui.JavaActionSet</tags>
+          <tags>persp.showIn:org.eclipse.jdt.ui.PackageExplorer</tags>
+          <tags>persp.perspSC:org.eclipse.wst.xml.ui.perspective</tags>
+          <children xsi:type="basic:PartSashContainer" xmi:id="_-lX_sPl3EeG4kLDFTwro_A" selectedElement="_-lX_sfl3EeG4kLDFTwro_A">
+            <children xsi:type="basic:PartSashContainer" xmi:id="_-lX_sfl3EeG4kLDFTwro_A" containerData="7500" selectedElement="_-lX_svl3EeG4kLDFTwro_A">
+              <children xsi:type="basic:PartSashContainer" xmi:id="_-lX_svl3EeG4kLDFTwro_A" containerData="4500" selectedElement="_-lX_uPl3EeG4kLDFTwro_A" horizontal="true">
+                <children xsi:type="basic:PartStack" xmi:id="_-lX_s_l3EeG4kLDFTwro_A" elementId="org.eclipse.debug.internal.ui.NavigatorFolderView" containerData="5000" selectedElement="_-lX_tPl3EeG4kLDFTwro_A">
+                  <tags>newtablook</tags>
+                  <tags>org.eclipse.e4.primaryNavigationStack</tags>
+                  <children xsi:type="advanced:Placeholder" xmi:id="_-lX_tPl3EeG4kLDFTwro_A" elementId="org.eclipse.debug.ui.DebugView" ref="_vBklEPKcEeGnx90PHpZ2Rw"/>
+                  <children xsi:type="advanced:Placeholder" xmi:id="_-lX_tfl3EeG4kLDFTwro_A" elementId="org.eclipse.ui.views.ResourceNavigator" toBeRendered="false" ref="_gLNqYPETEeGDEc9DxL1vVg"/>
+                  <children xsi:type="advanced:Placeholder" xmi:id="_-lX_tvl3EeG4kLDFTwro_A" elementId="org.eclipse.jdt.ui.PackageExplorer" toBeRendered="false" ref="_gLCEMPETEeGDEc9DxL1vVg"/>
+                  <children xsi:type="advanced:Placeholder" xmi:id="_-lX_t_l3EeG4kLDFTwro_A" elementId="org.eclipse.jdt.ui.TypeHierarchy" toBeRendered="false" ref="_gLNDUPETEeGDEc9DxL1vVg"/>
+                </children>
+                <children xsi:type="basic:PartStack" xmi:id="_-lX_uPl3EeG4kLDFTwro_A" elementId="org.eclipse.debug.internal.ui.ToolsFolderView" containerData="5000" selectedElement="_-lX_uvl3EeG4kLDFTwro_A">
+                  <tags>newtablook</tags>
+                  <children xsi:type="advanced:Placeholder" xmi:id="_-lX_ufl3EeG4kLDFTwro_A" elementId="org.eclipse.debug.ui.VariableView" ref="_-kt4YPl3EeG4kLDFTwro_A"/>
+                  <children xsi:type="advanced:Placeholder" xmi:id="_-lX_uvl3EeG4kLDFTwro_A" elementId="org.eclipse.debug.ui.BreakpointView" ref="_-kufcPl3EeG4kLDFTwro_A"/>
+                  <children xsi:type="advanced:Placeholder" xmi:id="_-lX_u_l3EeG4kLDFTwro_A" elementId="org.eclipse.debug.ui.ExpressionView" toBeRendered="false" ref="_-kufcfl3EeG4kLDFTwro_A"/>
+                  <children xsi:type="advanced:Placeholder" xmi:id="_-lX_vPl3EeG4kLDFTwro_A" elementId="org.eclipse.debug.ui.RegisterView" toBeRendered="false" ref="_-kufcvl3EeG4kLDFTwro_A"/>
+                </children>
+              </children>
+              <children xsi:type="basic:PartSashContainer" xmi:id="_-lX_vfl3EeG4kLDFTwro_A" containerData="5500" selectedElement="_-lab8Pl3EeG4kLDFTwro_A" horizontal="true">
+                <children xsi:type="advanced:Placeholder" xmi:id="_-lab8Pl3EeG4kLDFTwro_A" elementId="org.eclipse.ui.editorss" containerData="7500" ref="_gIefcPETEeGDEc9DxL1vVg"/>
+                <children xsi:type="basic:PartStack" xmi:id="_-lab8fl3EeG4kLDFTwro_A" elementId="org.eclipse.debug.internal.ui.OutlineFolderView" containerData="2500" selectedElement="_-lab8vl3EeG4kLDFTwro_A">
+                  <tags>newtablook</tags>
+                  <tags>org.eclipse.e4.secondaryNavigationStack</tags>
+                  <children xsi:type="advanced:Placeholder" xmi:id="_-lab8vl3EeG4kLDFTwro_A" elementId="org.eclipse.ui.views.ContentOutline" ref="_gLdiAfETEeGDEc9DxL1vVg"/>
+                  <children xsi:type="advanced:Placeholder" xmi:id="_-lbDAPl3EeG4kLDFTwro_A" elementId="org.eclipse.ant.ui.views.AntView" toBeRendered="false" ref="_gMMh0PETEeGDEc9DxL1vVg"/>
+                </children>
+              </children>
+            </children>
+            <children xsi:type="basic:PartSashContainer" xmi:id="_-lbDAfl3EeG4kLDFTwro_A" containerData="2500" horizontal="true">
+              <children xsi:type="basic:PartStack" xmi:id="_-lbDAvl3EeG4kLDFTwro_A" elementId="com.android.ide.eclipse.ddms.views.LogCatViewMStack" containerData="5000" selectedElement="_-lbDA_l3EeG4kLDFTwro_A">
+                <tags>newtablook</tags>
+                <children xsi:type="advanced:Placeholder" xmi:id="_-lbDA_l3EeG4kLDFTwro_A" elementId="com.android.ide.eclipse.ddms.views.LogCatView" ref="_bjc08PKbEeGnx90PHpZ2Rw"/>
+              </children>
+              <children xsi:type="basic:PartStack" xmi:id="_-lbDBPl3EeG4kLDFTwro_A" elementId="org.eclipse.debug.internal.ui.ConsoleFolderView" containerData="5000" selectedElement="_-lbDBfl3EeG4kLDFTwro_A">
+                <tags>newtablook</tags>
+                <tags>org.eclipse.e4.secondaryDataStack</tags>
+                <children xsi:type="advanced:Placeholder" xmi:id="_-lbDBfl3EeG4kLDFTwro_A" elementId="org.eclipse.ui.console.ConsoleView" ref="_gLXbYfETEeGDEc9DxL1vVg"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_-lbDBvl3EeG4kLDFTwro_A" elementId="org.eclipse.ui.views.TaskList" ref="_-ksDMPl3EeG4kLDFTwro_A"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_-lbDB_l3EeG4kLDFTwro_A" elementId="org.eclipse.ui.views.BookmarkView" toBeRendered="false" ref="_gLc68PETEeGDEc9DxL1vVg"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_-lbDCPl3EeG4kLDFTwro_A" elementId="org.eclipse.ui.views.PropertySheet" toBeRendered="false" ref="_-ksqQPl3EeG4kLDFTwro_A"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_-lbDCfl3EeG4kLDFTwro_A" elementId="org.eclipse.jdt.debug.ui.DisplayView" toBeRendered="false" ref="_-lWKgPl3EeG4kLDFTwro_A"/>
+                <children xsi:type="advanced:Placeholder" xmi:id="_-lbDCvl3EeG4kLDFTwro_A" elementId="org.eclipse.search.SearchResultView" toBeRendered="false" ref="_-lWxkPl3EeG4kLDFTwro_A"/>
+              </children>
+            </children>
+          </children>
+        </children>
+      </children>
+      <children xsi:type="basic:PartStack" xmi:id="_f1J60vETEeGDEc9DxL1vVg" elementId="stickyFolderRight" toBeRendered="false" containerData="2500">
+        <children xsi:type="advanced:Placeholder" xmi:id="_f1Kh4PETEeGDEc9DxL1vVg" elementId="org.eclipse.help.ui.HelpView" toBeRendered="false" ref="_f1AJ0PETEeGDEc9DxL1vVg"/>
+        <children xsi:type="advanced:Placeholder" xmi:id="_f1Kh4fETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.internal.introview" toBeRendered="false" ref="_f1JTwPETEeGDEc9DxL1vVg"/>
+        <children xsi:type="advanced:Placeholder" xmi:id="_f1Kh4vETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.cheatsheets.views.CheatSheetView" toBeRendered="false" ref="_f1JTwfETEeGDEc9DxL1vVg"/>
+      </children>
+    </children>
+    <sharedElements xsi:type="basic:Part" xmi:id="_f1AJ0PETEeGDEc9DxL1vVg" elementId="org.eclipse.help.ui.HelpView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Help" iconURI="platform:/plugin/org.eclipse.help.ui//icons/view16/help_view.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:Help</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_f1JTwPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.internal.introview" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Welcome" iconURI="platform:/plugin/org.eclipse.ui/icons/full/eview16/defaultview_misc.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:General</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_f1JTwfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.cheatsheets.views.CheatSheetView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Cheat Sheets" iconURI="platform:/plugin/org.eclipse.ui.cheatsheets//icons/view16/cheatsheet_view.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:Help</tags>
+    </sharedElements>
+    <sharedElements xsi:type="advanced:Area" xmi:id="_gIefcPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.editorss" selectedElement="_gIefcfETEeGDEc9DxL1vVg">
+      <children xsi:type="basic:PartStack" xmi:id="_gIefcfETEeGDEc9DxL1vVg" elementId="org.eclipse.e4.primaryDataStack" selectedElement="_j7HDkPETEeGDEc9DxL1vVg">
+        <tags>newtablook</tags>
+        <tags>org.eclipse.e4.primaryDataStack</tags>
+        <tags>EditorStack</tags>
+        <children xsi:type="basic:Part" xmi:id="_j7HDkPETEeGDEc9DxL1vVg" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="EverFolderActivity.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/EverFolderActivity.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/EverFolderActivity.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;5&quot; selectionOffset=&quot;16102&quot; selectionTopPixel=&quot;11011&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_GxiPwPKcEeGnx90PHpZ2Rw" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="SettingActivity.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/SettingActivity.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/SettingActivity.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;69&quot; selectionOffset=&quot;6868&quot; selectionTopPixel=&quot;4115&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_UUp2gPKcEeGnx90PHpZ2Rw" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="NoteUpdateTask.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/task/NoteUpdateTask.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/task/NoteUpdateTask.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;0&quot; selectionOffset=&quot;731&quot; selectionTopPixel=&quot;96&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_H5kj8PKeEeGnx90PHpZ2Rw" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="LockDao.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/dao/LockDao.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/dao/LockDao.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;0&quot; selectionOffset=&quot;5548&quot; selectionTopPixel=&quot;3743&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_VVoHoPPWEeGtE8KsvLcb2w" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="EvernoteUtil.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/utility/EvernoteUtil.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/utility/EvernoteUtil.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;0&quot; selectionOffset=&quot;9695&quot; selectionTopPixel=&quot;7052&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_cloxkPPWEeGtE8KsvLcb2w" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="OAuthActivity.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/OAuthActivity.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/OAuthActivity.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;52&quot; selectionOffset=&quot;4341&quot; selectionTopPixel=&quot;1824&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_0J7s4PPXEeGtE8KsvLcb2w" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="NoteUpdatorService.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/service/NoteUpdatorService.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/service/NoteUpdatorService.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;53&quot; selectionOffset=&quot;2489&quot; selectionTopPixel=&quot;1311&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_du5YUPPZEeGtE8KsvLcb2w" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="LockListener.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/utility/LockListener.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/utility/LockListener.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;0&quot; selectionOffset=&quot;0&quot; selectionTopPixel=&quot;0&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_d75SgPPZEeGtE8KsvLcb2w" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="LockHandler.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/utility/LockHandler.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/utility/LockHandler.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;0&quot; selectionOffset=&quot;247&quot; selectionTopPixel=&quot;144&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_RzdEkPPaEeGtE8KsvLcb2w" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="FolderUtil.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/utility/FolderUtil.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/utility/FolderUtil.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;0&quot; selectionOffset=&quot;5205&quot; selectionTopPixel=&quot;3615&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_-fhD0PPbEeGtE8KsvLcb2w" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="AsyncTaskCommand.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/utility/AsyncTaskCommand.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/utility/AsyncTaskCommand.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;0&quot; selectionOffset=&quot;2150&quot; selectionTopPixel=&quot;2378&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_Rf4rgPPeEeGtE8KsvLcb2w" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="Constant.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/common/Constant.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/common/Constant.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;0&quot; selectionOffset=&quot;2007&quot; selectionTopPixel=&quot;591&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_rBQiEPPgEeGtE8KsvLcb2w" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="NodeCacheDao.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/dao/NodeCacheDao.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/dao/NodeCacheDao.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;0&quot; selectionOffset=&quot;309&quot; selectionTopPixel=&quot;0&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_somd4PPhEeGtE8KsvLcb2w" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="IconFrameLayout.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/IconFrameLayout.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/IconFrameLayout.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;0&quot; selectionOffset=&quot;8073&quot; selectionTopPixel=&quot;6500&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_STjf8PPlEeGtE8KsvLcb2w" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="BaseActivity.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/utility/BaseActivity.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/utility/BaseActivity.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;0&quot; selectionOffset=&quot;643&quot; selectionTopPixel=&quot;65&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_UwyXYPPlEeGtE8KsvLcb2w" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="Initialize.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/Initialize.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/Initialize.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;0&quot; selectionOffset=&quot;904&quot; selectionTopPixel=&quot;309&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_MF0rAPPoEeGtE8KsvLcb2w" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="Lock.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/dao/Lock.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/dao/Lock.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;0&quot; selectionOffset=&quot;0&quot; selectionTopPixel=&quot;111&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_Rl5N0Pl5EeG4kLDFTwro_A" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="EfError.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/exception/EfError.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/exception/EfError.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;7&quot; selectionOffset=&quot;44&quot; selectionTopPixel=&quot;0&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_gYuTgPl6EeG4kLDFTwro_A" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="EfException.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/exception/EfException.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/exception/EfException.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;0&quot; selectionOffset=&quot;683&quot; selectionTopPixel=&quot;271&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_zta3UPl6EeG4kLDFTwro_A" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="RollbackException.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/exception/RollbackException.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/exception/RollbackException.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;17&quot; selectionOffset=&quot;178&quot; selectionTopPixel=&quot;0&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_k7xLcPl7EeG4kLDFTwro_A" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="Debug.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/utility/Debug.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/utility/Debug.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;0&quot; selectionOffset=&quot;2826&quot; selectionTopPixel=&quot;1867&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+        <children xsi:type="basic:Part" xmi:id="_7itGoPl8EeG4kLDFTwro_A" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="AsyncTaskIF.java" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/obj16/jcu_obj.gif" tooltip="EverFolder/src/com/yuji/ef/utility/AsyncTaskIF.java" closeable="true">
+          <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;editor id=&quot;org.eclipse.jdt.ui.CompilationUnitEditor&quot;>&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/EverFolder/src/com/yuji/ef/utility/AsyncTaskIF.java&quot;/>&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;4&quot; selectionOffset=&quot;119&quot; selectionTopPixel=&quot;0&quot;/>&#xA;&lt;/editor>"/>
+          <tags>Editor</tags>
+          <tags>removeOnHide</tags>
+        </children>
+      </children>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gLCEMPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.PackageExplorer" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Package Explorer" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/eview16/package.gif" tooltip="Workspace" closeable="true">
+      <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;view group_libraries=&quot;1&quot; layout=&quot;2&quot; linkWithEditor=&quot;0&quot; rootMode=&quot;1&quot; workingSetName=&quot;&quot;>&#xA;&lt;customFilters userDefinedPatternsEnabled=&quot;false&quot;>&#xA;&lt;xmlDefinedFilters>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.LibraryFilter&quot; isEnabled=&quot;false&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.LocalTypesFilter&quot; isEnabled=&quot;false&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.StaticsFilter&quot; isEnabled=&quot;false&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.ClosedProjectsFilter&quot; isEnabled=&quot;false&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.NonSharedProjectsFilter&quot; isEnabled=&quot;false&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.NonJavaElementFilter&quot; isEnabled=&quot;false&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.ContainedLibraryFilter&quot; isEnabled=&quot;false&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.CuAndClassFileFilter&quot; isEnabled=&quot;false&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.NonJavaProjectsFilter&quot; isEnabled=&quot;false&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.internal.ui.PackageExplorer.EmptyInnerPackageFilter&quot; isEnabled=&quot;true&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.PackageDeclarationFilter&quot; isEnabled=&quot;true&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.internal.ui.PackageExplorer.EmptyPackageFilter&quot; isEnabled=&quot;false&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.ImportDeclarationFilter&quot; isEnabled=&quot;true&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.FieldsFilter&quot; isEnabled=&quot;false&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.internal.ui.PackageExplorer.HideInnerClassFilesFilter&quot; isEnabled=&quot;true&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.NonPublicFilter&quot; isEnabled=&quot;false&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer_patternFilterId_.*&quot; isEnabled=&quot;true&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.EmptyLibraryContainerFilter&quot; isEnabled=&quot;true&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.SyntheticMembersFilter&quot; isEnabled=&quot;true&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.mylyn.java.ui.MembersFilter&quot; isEnabled=&quot;false&quot;/>&#xA;&lt;child filterId=&quot;org.eclipse.m2e.MavenModuleFilter&quot; isEnabled=&quot;false&quot;/>&#xA;&lt;/xmlDefinedFilters>&#xA;&lt;/customFilters>&#xA;&lt;/view>"/>
+      <tags>View</tags>
+      <tags>categoryTag:Java</tags>
+      <menus xmi:id="_gaLTcPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.PackageExplorer">
+        <tags>ViewMenu</tags>
+        <tags>menuContribution:menu</tags>
+      </menus>
+      <toolbar xmi:id="_gamxQPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.PackageExplorer" visible="false"/>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gLNDUPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.TypeHierarchy" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Type Hierarchy" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/eview16/class_hi.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:Java</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gLNqYPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.ResourceNavigator" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Navigator" iconURI="platform:/plugin/org.eclipse.ui.ide//icons/full/eview16/filenav_nav.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:General</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gLNqYfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigator.ProjectExplorer" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Project Explorer" iconURI="platform:/plugin/org.eclipse.ui.navigator.resources//icons/full/eview16/resource_persp.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:General</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gLU_IPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.ProblemView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Problems" iconURI="platform:/plugin/org.eclipse.ui.ide//icons/full/eview16/problems_view.gif" tooltip="0 errors, 50 warnings, 0 others" closeable="true">
+      <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;view PRIMARY_SORT_FIELD=&quot;org.eclipse.ui.ide.severityAndDescriptionField&quot; categoryGroup=&quot;org.eclipse.ui.ide.severity&quot; markerContentGenerator=&quot;org.eclipse.ui.ide.problemsGenerator&quot; partName=&quot;Problems&quot;>&#xA;&lt;expanded>&#xA;&lt;category IMemento.internal.id=&quot;Warnings (51 items)&quot;/>&#xA;&lt;/expanded>&#xA;&lt;columnWidths org.eclipse.ui.ide.locationField=&quot;105&quot; org.eclipse.ui.ide.markerType=&quot;231&quot; org.eclipse.ui.ide.pathField=&quot;140&quot; org.eclipse.ui.ide.resourceField=&quot;105&quot; org.eclipse.ui.ide.severityAndDescriptionField=&quot;350&quot;/>&#xA;&lt;visible IMemento.internal.id=&quot;org.eclipse.ui.ide.severityAndDescriptionField&quot;/>&#xA;&lt;visible IMemento.internal.id=&quot;org.eclipse.ui.ide.resourceField&quot;/>&#xA;&lt;visible IMemento.internal.id=&quot;org.eclipse.ui.ide.pathField&quot;/>&#xA;&lt;visible IMemento.internal.id=&quot;org.eclipse.ui.ide.locationField&quot;/>&#xA;&lt;visible IMemento.internal.id=&quot;org.eclipse.ui.ide.markerType&quot;/>&#xA;&lt;/view>"/>
+      <tags>View</tags>
+      <tags>categoryTag:General</tags>
+      <menus xmi:id="_hO7xMPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.ProblemView">
+        <tags>ViewMenu</tags>
+        <tags>menuContribution:menu</tags>
+      </menus>
+      <toolbar xmi:id="_hO7xMfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.ProblemView" visible="false"/>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gLVmMPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.JavadocView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Javadoc" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/eview16/javadoc.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:Java</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gLWNQPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.SourceView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Declaration" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/eview16/source.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:Java</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gLXbYPETEeGDEc9DxL1vVg" elementId="org.eclipse.search.ui.views.SearchView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Search" iconURI="platform:/plugin/org.eclipse.search//icons/full/eview16/searchres.gif" tooltip="" closeable="true">
+      <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;view isPinned=&quot;false&quot;>&#xA;&lt;view IMemento.internal.id=&quot;org.eclipse.jdt.ui.JavaSearchResultPage&quot; org.eclipse.jdt.search.resultpage.grouping=&quot;3&quot; org.eclipse.jdt.search.resultpage.limit=&quot;1000&quot; org.eclipse.jdt.search.resultpage.limit_enabled=&quot;TRUE&quot; org.eclipse.jdt.search.resultpage.sorting=&quot;1&quot; org.eclipse.search.lastActivation=&quot;1&quot; org.eclipse.search.resultpage.layout=&quot;2&quot;/>&#xA;&lt;view IMemento.internal.id=&quot;&quot; org.eclipse.search.lastActivation=&quot;0&quot;/>&#xA;&lt;/view>"/>
+      <tags>View</tags>
+      <tags>categoryTag:General</tags>
+      <menus xmi:id="_bunC8PPWEeGtE8KsvLcb2w" elementId="org.eclipse.search.ui.views.SearchView">
+        <tags>ViewMenu</tags>
+        <tags>menuContribution:menu</tags>
+      </menus>
+      <toolbar xmi:id="_bunC8fPWEeGtE8KsvLcb2w" elementId="org.eclipse.search.ui.views.SearchView" visible="false"/>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gLXbYfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.console.ConsoleView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Console" iconURI="platform:/plugin/org.eclipse.ui.console//icons/full/cview16/console_view.gif" tooltip="" closeable="true">
+      <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;view/>"/>
+      <tags>View</tags>
+      <tags>categoryTag:General</tags>
+      <menus xmi:id="_MD8ksPEUEeGDLJMCOighAw" elementId="org.eclipse.ui.console.ConsoleView">
+        <tags>ViewMenu</tags>
+        <tags>menuContribution:menu</tags>
+      </menus>
+      <toolbar xmi:id="_MD8ksfEUEeGDLJMCOighAw" elementId="org.eclipse.ui.console.ConsoleView" visible="false"/>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gLc68PETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.BookmarkView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Bookmarks" iconURI="platform:/plugin/org.eclipse.ui.ide//icons/full/eview16/bkmrk_nav.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:General</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gLdiAPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.ProgressView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Progress" iconURI="platform:/plugin/org.eclipse.ui.ide//icons/full/eview16/pview.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:General</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gLdiAfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.ContentOutline" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Outline" iconURI="platform:/plugin/org.eclipse.ui.views//icons/full/eview16/outline_co.gif" tooltip="" closeable="true">
+      <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;view/>"/>
+      <tags>View</tags>
+      <tags>categoryTag:General</tags>
+      <menus xmi:id="_hM7mEPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.ContentOutline">
+        <tags>ViewMenu</tags>
+        <tags>menuContribution:menu</tags>
+      </menus>
+      <toolbar xmi:id="_hM7mEfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.ContentOutline" visible="false"/>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gLeJEPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.texteditor.TemplatesView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Templates" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/eview16/templates.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:General</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gMMh0PETEeGDEc9DxL1vVg" elementId="org.eclipse.ant.ui.views.AntView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Ant" iconURI="platform:/plugin/org.eclipse.ant.ui//icons/full/eview16/ant_view.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:Ant</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gMXg8PETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Git Repositories" iconURI="platform:/plugin/org.eclipse.egit.ui/icons/eview16/repo_rep.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:Git</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gMYIAPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.junit.ResultView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="JUnit" iconURI="platform:/plugin/org.eclipse.jdt.junit//icons/full/eview16/junit.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:Java</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gMdAgPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.views.tasks" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Task List" iconURI="platform:/plugin/org.eclipse.mylyn.tasks.ui/icons/eview16/task-list.gif" tooltip="Task List" closeable="true">
+      <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;view linkWithEditor=&quot;true&quot; presentation=&quot;org.eclipse.mylyn.tasks.ui.categorized&quot;>&#xA;&lt;sorter groupBy=&quot;CATEGORY_QUERY&quot;>&#xA;&lt;sorter>&#xA;&lt;sort0 sortDirection=&quot;1&quot; sortKey=&quot;PRIORITY&quot;/>&#xA;&lt;sort1 sortDirection=&quot;1&quot; sortKey=&quot;RANK&quot;/>&#xA;&lt;sort2 sortDirection=&quot;1&quot; sortKey=&quot;DATE_CREATED&quot;/>&#xA;&lt;sort3 sortDirection=&quot;1&quot; sortKey=&quot;NONE&quot;/>&#xA;&lt;sort4 sortDirection=&quot;1&quot; sortKey=&quot;NONE&quot;/>&#xA;&lt;sort5 sortDirection=&quot;1&quot; sortKey=&quot;NONE&quot;/>&#xA;&lt;sort6 sortDirection=&quot;1&quot; sortKey=&quot;NONE&quot;/>&#xA;&lt;sort7 sortDirection=&quot;1&quot; sortKey=&quot;NONE&quot;/>&#xA;&lt;/sorter>&#xA;&lt;/sorter>&#xA;&lt;filteredTreeFindHistory/>&#xA;&lt;/view>"/>
+      <tags>View</tags>
+      <tags>categoryTag:Mylyn</tags>
+      <menus xmi:id="_g_NTIPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.views.tasks">
+        <tags>ViewMenu</tags>
+        <tags>menuContribution:menu</tags>
+      </menus>
+      <toolbar xmi:id="_g_QWcPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.views.tasks" visible="false"/>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gMkVQPETEeGDEc9DxL1vVg" elementId="org.eclipse.wb.core.StructureView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Structure" iconURI="platform:/plugin/org.eclipse.wb.core/icons/structure/properties_view.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:WindowBuilder</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_gMk8UPETEeGDEc9DxL1vVg" elementId="org.eclipse.wb.core.PaletteView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Palette" iconURI="platform:/plugin/org.eclipse.wb.core/icons/structure/palette.png" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:WindowBuilder</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_o_T9QPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.ddms.views.DeviceView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Devices" iconURI="platform:/plugin/com.android.ide.eclipse.ddms/icons/device.png" tooltip="" closeable="true">
+      <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;view/>"/>
+      <tags>View</tags>
+      <tags>categoryTag:Android</tags>
+      <menus xmi:id="_o_otYPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.ddms.views.DeviceView">
+        <tags>ViewMenu</tags>
+        <tags>menuContribution:menu</tags>
+      </menus>
+      <toolbar xmi:id="_o_otYfETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.ddms.views.DeviceView" visible="false"/>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_bjc08PKbEeGnx90PHpZ2Rw" elementId="com.android.ide.eclipse.ddms.views.LogCatView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="LogCat" iconURI="platform:/plugin/com.android.ide.eclipse.ddms/icons/logcat.png" tooltip="" closeable="true">
+      <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;view/>"/>
+      <tags>View</tags>
+      <tags>categoryTag:Android</tags>
+      <menus xmi:id="_bkO4EPKbEeGnx90PHpZ2Rw" elementId="com.android.ide.eclipse.ddms.views.LogCatView">
+        <tags>ViewMenu</tags>
+        <tags>menuContribution:menu</tags>
+      </menus>
+      <toolbar xmi:id="_bkPfIPKbEeGnx90PHpZ2Rw" elementId="com.android.ide.eclipse.ddms.views.LogCatView" visible="false"/>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_vBklEPKcEeGnx90PHpZ2Rw" elementId="org.eclipse.debug.ui.DebugView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Debug" iconURI="platform:/plugin/org.eclipse.debug.ui//icons/full/eview16/debug_view.gif" tooltip="" closeable="true">
+      <persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xA;&lt;view/>"/>
+      <tags>View</tags>
+      <tags>categoryTag:Debug</tags>
+      <menus xmi:id="_vCzUIPKcEeGnx90PHpZ2Rw" elementId="org.eclipse.debug.ui.DebugView">
+        <tags>ViewMenu</tags>
+        <tags>menuContribution:menu</tags>
+      </menus>
+      <toolbar xmi:id="_vCzUIfKcEeGnx90PHpZ2Rw" elementId="org.eclipse.debug.ui.DebugView" visible="false"/>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_-ksDMPl3EeG4kLDFTwro_A" elementId="org.eclipse.ui.views.TaskList" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Tasks" iconURI="platform:/plugin/org.eclipse.ui.ide//icons/full/eview16/tasks_tsk.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:General</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_-ksqQPl3EeG4kLDFTwro_A" elementId="org.eclipse.ui.views.PropertySheet" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Properties" iconURI="platform:/plugin/org.eclipse.ui.views//icons/full/eview16/prop_ps.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:General</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_-kt4YPl3EeG4kLDFTwro_A" elementId="org.eclipse.debug.ui.VariableView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Variables" iconURI="platform:/plugin/org.eclipse.debug.ui//icons/full/eview16/variable_view.gif" tooltip="" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:Debug</tags>
+      <menus xmi:id="_-my8APl3EeG4kLDFTwro_A" elementId="org.eclipse.debug.ui.VariableView">
+        <tags>ViewMenu</tags>
+        <tags>menuContribution:menu</tags>
+      </menus>
+      <toolbar xmi:id="_-m30gPl3EeG4kLDFTwro_A" elementId="org.eclipse.debug.ui.VariableView" visible="false"/>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_-kufcPl3EeG4kLDFTwro_A" elementId="org.eclipse.debug.ui.BreakpointView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Breakpoints" iconURI="platform:/plugin/org.eclipse.debug.ui//icons/full/eview16/breakpoint_view.gif" tooltip="" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:Debug</tags>
+      <menus xmi:id="_-uPn0Pl3EeG4kLDFTwro_A" elementId="org.eclipse.debug.ui.BreakpointView">
+        <tags>ViewMenu</tags>
+        <tags>menuContribution:menu</tags>
+      </menus>
+      <toolbar xmi:id="_-uPn0fl3EeG4kLDFTwro_A" elementId="org.eclipse.debug.ui.BreakpointView" visible="false"/>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_-kufcfl3EeG4kLDFTwro_A" elementId="org.eclipse.debug.ui.ExpressionView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Expressions" iconURI="platform:/plugin/org.eclipse.debug.ui//icons/full/eview16/watchlist_view.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:Debug</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_-kufcvl3EeG4kLDFTwro_A" elementId="org.eclipse.debug.ui.RegisterView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Registers" iconURI="platform:/plugin/org.eclipse.debug.ui//icons/full/eview16/register_view.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:Debug</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_-lWKgPl3EeG4kLDFTwro_A" elementId="org.eclipse.jdt.debug.ui.DisplayView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Display" iconURI="platform:/plugin/org.eclipse.jdt.debug.ui//icons/full/etool16/disp_sbook.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:Debug</tags>
+    </sharedElements>
+    <sharedElements xsi:type="basic:Part" xmi:id="_-lWxkPl3EeG4kLDFTwro_A" elementId="org.eclipse.search.SearchResultView" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Classic Search" iconURI="platform:/plugin/org.eclipse.search//icons/full/eview16/searchres.gif" closeable="true">
+      <tags>View</tags>
+      <tags>categoryTag:General</tags>
+    </sharedElements>
+    <trimBars xmi:id="_gBbcQPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.main.toolbar"/>
+    <trimBars xmi:id="_hUveQPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.trim.status" side="Bottom">
+      <children xsi:type="menu:ToolControl" xmi:id="_hUwFUPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.StatusLine" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.StandardTrim">
+        <tags>stretch</tags>
+      </children>
+      <children xsi:type="menu:ToolControl" xmi:id="_hU2zAPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.HeapStatus" toBeRendered="false" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.StandardTrim"/>
+      <children xsi:type="menu:ToolControl" xmi:id="_hU9gsPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.ProgressBar" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.StandardTrim"/>
+    </trimBars>
+    <trimBars xmi:id="_9XonAPPhEeGtE8KsvLcb2w" elementId="org.eclipse.ui.trim.vertical1" toBeRendered="false" side="Left">
+      <children xsi:type="menu:ToolControl" xmi:id="_9Xp1IPPhEeGtE8KsvLcb2w" elementId="left(org.eclipse.jdt.ui.JavaPerspective)" toBeRendered="false" contributionURI="bundleclass://org.eclipse.e4.ui.workbench.addons.swt/org.eclipse.e4.ui.workbench.addons.minmax.TrimStack">
+        <tags>TrimStack</tags>
+      </children>
+    </trimBars>
+    <trimBars xmi:id="_9Ys-APPhEeGtE8KsvLcb2w" elementId="org.eclipse.ui.trim.vertical2" toBeRendered="false" side="Right">
+      <children xsi:type="menu:ToolControl" xmi:id="_9YydkPPhEeGtE8KsvLcb2w" elementId="org.eclipse.mylyn.tasks.ui.views.tasksMStack(org.eclipse.jdt.ui.JavaPerspective)" toBeRendered="false" contributionURI="bundleclass://org.eclipse.e4.ui.workbench.addons.swt/org.eclipse.e4.ui.workbench.addons.minmax.TrimStack">
+        <tags>TrimStack</tags>
+      </children>
+      <children xsi:type="menu:ToolControl" xmi:id="_9ZJC4PPhEeGtE8KsvLcb2w" elementId="right(org.eclipse.jdt.ui.JavaPerspective)" toBeRendered="false" contributionURI="bundleclass://org.eclipse.e4.ui.workbench.addons.swt/org.eclipse.e4.ui.workbench.addons.minmax.TrimStack">
+        <tags>TrimStack</tags>
+      </children>
+      <children xsi:type="menu:ToolControl" xmi:id="_9ZxVAPPhEeGtE8KsvLcb2w" elementId="bottom(org.eclipse.jdt.ui.JavaPerspective)" toBeRendered="false" contributionURI="bundleclass://org.eclipse.e4.ui.workbench.addons.swt/org.eclipse.e4.ui.workbench.addons.minmax.TrimStack">
+        <tags>TrimStack</tags>
+      </children>
+    </trimBars>
+  </children>
+  <handlers xmi:id="_enU1w_ETEeGDEc9DxL1vVg" elementId="_UW9TY_r3Ed6gmo7caOxU9g" contributorURI="platform:/plugin/org.eclipse.ui.workbench" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.ExitHandler" command="_enU1z_ETEeGDEc9DxL1vVg"/>
+  <handlers xmi:id="_enU1xPETEeGDEc9DxL1vVg" elementId="_BESTZfr3Ed6gmo7caOxU04" contributorURI="platform:/plugin/org.eclipse.ui.workbench" contributionURI="bundleclass://org.eclipse.e4.ui.workbench.swt/org.eclipse.e4.ui.internal.workbench.swt.handlers.ShowViewHandler" command="_enVc0PETEeGDEc9DxL1vVg"/>
+  <handlers xmi:id="_enU1xfETEeGDEc9DxL1vVg" elementId="org.eclipse.e4.ui.saveHandler" contributorURI="platform:/plugin/org.eclipse.ui.workbench" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.handlers.SaveHandler" command="_enVc0vETEeGDEc9DxL1vVg"/>
+  <handlers xmi:id="_enU1xvETEeGDEc9DxL1vVg" elementId="org.eclipse.e4.ui.saveAllHandler" contributorURI="platform:/plugin/org.eclipse.ui.workbench" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.handlers.SaveAllHandler" command="_enVc0_ETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_enU1x_ETEeGDEc9DxL1vVg" contributorURI="platform:/plugin/org.eclipse.ui.workbench" bindingContext="_enU1y_ETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_enU1yPETEeGDEc9DxL1vVg" elementId="_UW9TZfr3Ed6gmo7caOxU9g" contributorURI="platform:/plugin/org.eclipse.ui.workbench" keySequence="CTRL+Q" command="_enU1z_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_enU1yfETEeGDEc9DxL1vVg" elementId="_oRr6EAFSEd-Z8rQksLwRYw" contributorURI="platform:/plugin/org.eclipse.ui.workbench" keySequence="CTRL+S" command="_enVc0vETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_enU1yvETEeGDEc9DxL1vVg" contributorURI="platform:/plugin/org.eclipse.ui.workbench" keySequence="CTRL+SHIFT+S" command="_enVc0_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_etnrAfETEeGDEc9DxL1vVg" keySequence="CTRL+INSERT" command="_ep_vR_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_etr8cPETEeGDEc9DxL1vVg" keySequence="CTRL+A" command="_ep_ISvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_etz4QPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+I" command="_ep0wIPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et7NAfETEeGDEc9DxL1vVg" keySequence="CTRL+V" command="_ep3zjfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et7NAvETEeGDEc9DxL1vVg" keySequence="CTRL+X" command="_eqL8lfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et7NA_ETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+Z" command="_eqNxvvETEeGDEc9DxL1vVg">
+      <tags>platform:gtk</tags>
+    </bindings>
+    <bindings xmi:id="_et7NBPETEeGDEc9DxL1vVg" keySequence="CTRL+Z" command="_ep4ai_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euOH8PETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+V" command="_eqNxtvETEeGDEc9DxL1vVg">
+      <tags>platform:gtk</tags>
+    </bindings>
+    <bindings xmi:id="_euqz4vETEeGDEc9DxL1vVg" keySequence="ALT+/" command="_eqJgRPETEeGDEc9DxL1vVg">
+      <tags>locale:ja</tags>
+      <tags>platform:gtk</tags>
+    </bindings>
+    <bindings xmi:id="_euw6gvETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+L" command="_ep3zevETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euw6g_ETEeGDEc9DxL1vVg" keySequence="CTRL+1" command="_eqLVcPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euxhk_ETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+F3" command="_eqh61fETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu5dYfETEeGDEc9DxL1vVg" keySequence="CTRL+F10" command="_eqAWU_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evD1cvETEeGDEc9DxL1vVg" keySequence="SHIFT+INSERT" command="_ep3zjfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ev_CgPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+D" command="_eqNxtvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ev_pkfETEeGDEc9DxL1vVg" keySequence="SHIFT+DEL" command="_eqL8lfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ewFwMfETEeGDEc9DxL1vVg" keySequence="ALT+PAGE_UP" command="_eqI5N_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ewFwNfETEeGDEc9DxL1vVg" keySequence="CTRL+C" command="_ep_vR_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ewHlYPETEeGDEc9DxL1vVg" keySequence="ALT+PAGE_DOWN" command="_eqMjlfETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_etZBgPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.javaEditorScope" bindingContext="_er3XkfETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_etfIIPETEeGDEc9DxL1vVg" keySequence="CTRL+I" command="_ep_vUvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_etuYsPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+F" command="_eqNxtfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et5-4fETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+ARROW_UP" command="_eqLVhvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et6l8fETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+SPACE" command="_ep5oqPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euHaRPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+M" command="_eqNxy_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euIBU_ETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+U" command="_eqO_3fETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euPWFfETEeGDEc9DxL1vVg" keySequence="CTRL+7" command="_ep0wIfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euQkMPETEeGDEc9DxL1vVg" keySequence="CTRL+/" command="_ep0wIfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euQkM_ETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+O" command="_eptbZvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euVctPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+/" command="_ep0wI_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euWq0vETEeGDEc9DxL1vVg" keySequence="CTRL+O" command="_ep5ovvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euktQPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+P" command="_eqI5NPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eulUUvETEeGDEc9DxL1vVg" keySequence="CTRL+F3" command="_eqKHZfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eul7YPETEeGDEc9DxL1vVg" keySequence="CTRL+T" command="_ep_vWfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu7SlPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+ARROW_UP" command="_eqLVfvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu75ofETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+B" command="_eqNxuvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu75pPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+ARROW_DOWN" command="_ep_IP_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evEcgvETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+ARROW_RIGHT" command="_eqih1fETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evFDkPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+C" command="_ep0wIfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evFqo_ETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+\" command="_eqih2fETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evViQPETEeGDEc9DxL1vVg" keySequence="CTRL+2 F" command="_eqO_1fETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evViQfETEeGDEc9DxL1vVg" keySequence="CTRL+2 L" command="_ep_vXvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evViQvETEeGDEc9DxL1vVg" keySequence="CTRL+2 R" command="_ep4alfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evn2IvETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+ARROW_DOWN" command="_eqih1PETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evxnIPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+ARROW_LEFT" command="_eqdCQ_ETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_etnD8PETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.structuredTextEditorScope" bindingContext="_er3Xh_ETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_etnrAPETEeGDEc9DxL1vVg" keySequence="CTRL+I" command="_ep0wIvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_etuYsfETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+F" command="_eqAWUPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_etzRMfETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+>" command="_ep_vTfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et6l8PETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+ARROW_UP" command="_eptbbPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euVcs_ETEeGDEc9DxL1vVg" keySequence="F3" command="_eqKHVvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euVctfETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+/" command="_eqLVhPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euXR4PETEeGDEc9DxL1vVg" keySequence="CTRL+O" command="_eqNxsfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euktQ_ETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+P" command="_eqamGfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu7SlfETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+ARROW_UP" command="_eqdCQvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu75oPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+A" command="_eqdpU_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu75pvETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+ARROW_DOWN" command="_ep_INPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evEcg_ETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+ARROW_RIGHT" command="_eqOY1PETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evFDkvETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+C" command="_ep5opfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evFqpPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+\" command="_eqMjnfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evn2I_ETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+ARROW_DOWN" command="_ep5Bl_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evyOMPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+ARROW_LEFT" command="_eqdpYfETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_etnrAvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.contexts.window" bindingContext="_enU1zPETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_etnrA_ETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+NUMPAD_MULTIPLY" command="_ep0JEvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_etoSEfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+D Q" command="_eqNKt_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_etrVYPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+D J" command="_eqcbMvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_etrVYfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+D A" command="_eqOYyvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_etrVYvETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+D T" command="_eqKHWPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_etr8cfETEeGDEc9DxL1vVg" keySequence="ALT+ARROW_LEFT" command="_eqLVe_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_etuYsvETEeGDEc9DxL1vVg" keySequence="ALT+CTRL+SHIFT+ARROW_RIGHT" command="_ep0wJvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_etzRMPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+?" command="_eqamDPETEeGDEc9DxL1vVg">
+      <tags>locale:ja</tags>
+      <tags>platform:gtk</tags>
+    </bindings>
+    <bindings xmi:id="_etz4QfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+J" command="_eqmMMPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et1tcfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+A S" command="_eqJgUPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et2UgPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+A D" command="_eqmMNfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et2UgfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+A R" command="_eqih2_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et6l8vETEeGDEc9DxL1vVg" keySequence="ALT+ARROW_RIGHT" command="_eqNxx_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et6l8_ETEeGDEc9DxL1vVg" keySequence="CTRL+B" command="_ep0JEPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et6l9fETEeGDEc9DxL1vVg" keySequence="CTRL+." command="_ep5ovPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et6l9vETEeGDEc9DxL1vVg" keySequence="DEL" command="_ep3ze_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et7NB_ETEeGDEc9DxL1vVg" keySequence="F5" command="_ep5BnPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et70EvETEeGDEc9DxL1vVg" keySequence="ALT+CR" command="_eqOY2_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et70E_ETEeGDEc9DxL1vVg" keySequence="CTRL+P" command="_eqNxxvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et70FPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+S" command="_ep_vXfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et8bIPETEeGDEc9DxL1vVg" keySequence="CTRL+S" command="_eqKuYvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et8bIfETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+F4" command="_eqh60PETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et8bIvETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+W" command="_eqh60PETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et8bI_ETEeGDEc9DxL1vVg" keySequence="CTRL+F4" command="_ep_IS_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et8bJvETEeGDEc9DxL1vVg" keySequence="CTRL+W" command="_ep_IS_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euGzMfETEeGDEc9DxL1vVg" keySequence="CTRL+N" command="_ep_ITfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euHaQfETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+O" command="_eqMjqfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euIBUPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+S" command="_ep3zkPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euIoYPETEeGDEc9DxL1vVg" keySequence="F4" command="_eqKua_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euIoYvETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+F9" command="_ep3zg_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euNg4PETEeGDEc9DxL1vVg" keySequence="CTRL+F9" command="_ep3zgvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euNg4fETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+N" command="_eptbZ_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euOH8fETEeGDEc9DxL1vVg" keySequence="CTRL+U" command="_eqmMNvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euOH8_ETEeGDEc9DxL1vVg" keySequence="CTRL+-" command="_eqL8ifETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euOvAvETEeGDEc9DxL1vVg" keySequence="F11" command="_ep4ajfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euPWEPETEeGDEc9DxL1vVg" keySequence="SHIFT+F5" command="_ep4akvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euPWEfETEeGDEc9DxL1vVg" keySequence="CTRL+F11" command="_eqOYxPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euRLQPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+Z" command="_ep0JJPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euRLQfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+T" command="_eqOYyPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euRLQ_ETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+R" command="_eqL8j_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euVcsvETEeGDEc9DxL1vVg" keySequence="F3" command="_eqMjkfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euVctvETEeGDEc9DxL1vVg" keySequence="F12" command="_eqMjqPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euWDwvETEeGDEc9DxL1vVg" keySequence="F2" command="_ep5ouPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euWq0PETEeGDEc9DxL1vVg" keySequence="ALT+CTRL+SHIFT+F12" command="_eqZ-_vETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euWq0fETEeGDEc9DxL1vVg" keySequence="CTRL+F12" command="_eqJgTfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eukGMPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+F12" command="_eqdCR_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eukGMfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+P" command="_eqLVfPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euktRPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+U" command="_ep0wLvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eulUUPETEeGDEc9DxL1vVg" keySequence="SHIFT+F2" command="_eqamB_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eulUUfETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+T" command="_eqKHVfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eul7YfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+L" command="_eqcbOfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euo-sPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+M" command="_eqdCT_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euo-sfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+V" command="_ep5BpPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euplwPETEeGDEc9DxL1vVg" keySequence="CTRL+," command="_ep3zj_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euplwfETEeGDEc9DxL1vVg" keySequence="ALT+-" command="_eqLVhfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euplwvETEeGDEc9DxL1vVg" keySequence="CTRL+M" command="_eqAWXPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euplw_ETEeGDEc9DxL1vVg" keySequence="CTRL+F6" command="_ep5BpvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euqM0PETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+F6" command="_eqAWWPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euqM0fETEeGDEc9DxL1vVg" keySequence="CTRL+F7" command="_eqOY1vETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euqM0vETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+F7" command="_eqJgVfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euqz4PETEeGDEc9DxL1vVg" keySequence="CTRL+F8" command="_eqllIvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euqz4fETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+F8" command="_eqKHV_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euvsYPETEeGDEc9DxL1vVg" keySequence="ALT+F7" command="_eqLVePETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euvsYfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+F7" command="_ep_vVPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euwTcvETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+NUMPAD_DIVIDE" command="_eqNKuvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euw6hPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+R" command="_ep_vVfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euxhkPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+W" command="_ep5os_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euxhkfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+N" command="_ep4ahfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euxhkvETEeGDEc9DxL1vVg" keySequence="CTRL+3" command="_eqih0PETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu6EcfETEeGDEc9DxL1vVg" keySequence="CTRL+Q" command="_eqNKpfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu6rhfETEeGDEc9DxL1vVg" keySequence="CTRL+G" command="_ep_IN_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evD1cPETEeGDEc9DxL1vVg" keySequence="CTRL+H" command="_eqOY3PETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evFDk_ETEeGDEc9DxL1vVg" keySequence="ALT+CTRL+SHIFT+ARROW_UP" command="_eqL8kvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evFDlPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+H" command="_epv3p_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evFqoPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+I" command="_ep_vQ_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evLKMPETEeGDEc9DxL1vVg" keySequence="CTRL+E" command="_ep3zhPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evLxQPETEeGDEc9DxL1vVg" keySequence="CTRL+=" command="_eqKubvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evLxQfETEeGDEc9DxL1vVg" keySequence="ALT+?" command="_eqamDPETEeGDEc9DxL1vVg">
+      <tags>locale:ja</tags>
+      <tags>platform:gtk</tags>
+    </bindings>
+    <bindings xmi:id="_evMYUPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+Q K" command="_eqh6xfETEeGDEc9DxL1vVg">
+      <parameters xmi:id="_evM_YPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.viewId" name="org.eclipse.ui.views.showView.viewId" value="org.eclipse.mylyn.tasks.ui.views.tasks"/>
+    </bindings>
+    <bindings xmi:id="_evM_YfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+X M" command="_eqdCTPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evM_YvETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+Q J" command="_eqh6xfETEeGDEc9DxL1vVg">
+      <parameters xmi:id="_evM_Y_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.viewId" name="org.eclipse.ui.views.showView.viewId" value="org.eclipse.jdt.ui.JavadocView"/>
+    </bindings>
+    <bindings xmi:id="_evM_ZPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+Q D" command="_eqh6xfETEeGDEc9DxL1vVg">
+      <parameters xmi:id="_evNmcPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.viewId" name="org.eclipse.ui.views.showView.viewId" value="org.eclipse.jdt.ui.SourceView"/>
+    </bindings>
+    <bindings xmi:id="_evNmcfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+Q P" command="_eqh6xfETEeGDEc9DxL1vVg">
+      <parameters xmi:id="_evNmcvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.viewId" name="org.eclipse.ui.views.showView.viewId" value="org.eclipse.jdt.ui.PackageExplorer"/>
+    </bindings>
+    <bindings xmi:id="_evU7MPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+Q T" command="_eqh6xfETEeGDEc9DxL1vVg">
+      <parameters xmi:id="_evU7MfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.viewId" name="org.eclipse.ui.views.showView.viewId" value="org.eclipse.jdt.ui.TypeHierarchy"/>
+    </bindings>
+    <bindings xmi:id="_evViQ_ETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+Q V" command="_eqh6xfETEeGDEc9DxL1vVg">
+      <parameters xmi:id="_evWJUPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.viewId" name="org.eclipse.ui.views.showView.viewId" value="org.eclipse.debug.ui.VariableView"/>
+    </bindings>
+    <bindings xmi:id="_evWJUfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+Q B" command="_eqh6xfETEeGDEc9DxL1vVg">
+      <parameters xmi:id="_evWJUvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.viewId" name="org.eclipse.ui.views.showView.viewId" value="org.eclipse.debug.ui.BreakpointView"/>
+    </bindings>
+    <bindings xmi:id="_evWwYPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+X Q" command="_eqLVg_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evWwYfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+X J" command="_eqOYy_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evbo4PETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+X A" command="_eqih4PETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evcP8PETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+X T" command="_eqOY2vETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evc3APETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+Q S" command="_eqh6xfETEeGDEc9DxL1vVg">
+      <parameters xmi:id="_evc3AfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.viewId" name="org.eclipse.ui.views.showView.viewId" value="org.eclipse.search.ui.views.SearchView"/>
+    </bindings>
+    <bindings xmi:id="_evc3AvETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+Q Y" command="_eqh6xfETEeGDEc9DxL1vVg">
+      <parameters xmi:id="_evdeEPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.viewId" name="org.eclipse.ui.views.showView.viewId" value="org.eclipse.team.sync.views.SynchronizeView"/>
+    </bindings>
+    <bindings xmi:id="_evdeEfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+Q Z" command="_eqh6xfETEeGDEc9DxL1vVg">
+      <parameters xmi:id="_evdeEvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.viewId" name="org.eclipse.ui.views.showView.viewId" value="org.eclipse.team.ui.GenericHistoryView"/>
+    </bindings>
+    <bindings xmi:id="_eveFIPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+Q H" command="_eqh6xfETEeGDEc9DxL1vVg">
+      <parameters xmi:id="_eveFIfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.viewId" name="org.eclipse.ui.views.showView.viewId" value="org.eclipse.ui.cheatsheets.views.CheatSheetView"/>
+    </bindings>
+    <bindings xmi:id="_evmA8PETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+Q C" command="_eqh6xfETEeGDEc9DxL1vVg">
+      <parameters xmi:id="_evmA8fETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.viewId" name="org.eclipse.ui.views.showView.viewId" value="org.eclipse.ui.console.ConsoleView"/>
+    </bindings>
+    <bindings xmi:id="_evmoAPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+Q Q" command="_eqh6xfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evmoAfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+Q X" command="_eqh6xfETEeGDEc9DxL1vVg">
+      <parameters xmi:id="_evnPEPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.viewId" name="org.eclipse.ui.views.showView.viewId" value="org.eclipse.ui.views.ProblemView"/>
+    </bindings>
+    <bindings xmi:id="_evnPEfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+Q O" command="_eqh6xfETEeGDEc9DxL1vVg">
+      <parameters xmi:id="_evnPEvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.viewId" name="org.eclipse.ui.views.showView.viewId" value="org.eclipse.ui.views.ContentOutline"/>
+    </bindings>
+    <bindings xmi:id="_evn2IPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+Q L" command="_eqh6xfETEeGDEc9DxL1vVg">
+      <parameters xmi:id="_evn2IfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.viewId" name="org.eclipse.ui.views.showView.viewId" value="org.eclipse.pde.runtime.LogView"/>
+    </bindings>
+    <bindings xmi:id="_evyOMfETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+B" command="_eqNKoPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evy1QPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+C" command="_eqO_1vETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evzcUPETEeGDEc9DxL1vVg" keySequence="ALT+CTRL+G" command="_ep3zfvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ev0DYPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+F" command="_eqih2PETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ev-bcPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+E" command="_eqJgUfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ewFJIPETEeGDEc9DxL1vVg" keySequence="CTRL+F" command="_eqL8l_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ewGXQPETEeGDEc9DxL1vVg" keySequence="CTRL+#" command="_eqMjm_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ewG-UPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+G" command="_ep3zi_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ewHlYfETEeGDEc9DxL1vVg" keySequence="ALT+CTRL+H" command="_ep3zlPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ewR9cPETEeGDEc9DxL1vVg" keySequence="ALT+CTRL+SHIFT+ARROW_DOWN" command="_eqdCSvETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_etnrBPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.textEditorScope" bindingContext="_er3XhfETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_etnrBfETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+NUMPAD_MULTIPLY" command="_ep0wKfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_etoSEPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+J" command="_eqMjpvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_etr8cvETEeGDEc9DxL1vVg" keySequence="CTRL+ARROW_UP" command="_eqNxw_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_etzRMvETEeGDEc9DxL1vVg" keySequence="ALT+CTRL+ARROW_UP" command="_eqOYxfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_etz4QvETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+INSERT" command="_eqMjkPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et1tcPETEeGDEc9DxL1vVg" keySequence="ALT+ARROW_DOWN" command="_eqL8lvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et5-4PETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+A" command="_eqKuYfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et6l9PETEeGDEc9DxL1vVg" keySequence="CTRL+ARROW_DOWN" command="_eqNxu_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euWDwPETEeGDEc9DxL1vVg" keySequence="F12" command="_eqZ-8PETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euWDwfETEeGDEc9DxL1vVg" keySequence="ALT+CTRL+/" command="_eqllJPETEeGDEc9DxL1vVg">
+      <tags>locale:ja</tags>
+      <tags>platform:gtk</tags>
+    </bindings>
+    <bindings xmi:id="_euWDw_ETEeGDEc9DxL1vVg" keySequence="F2" command="_ep0wNvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euvsYvETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+Q" command="_eqL8mfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euwTcPETEeGDEc9DxL1vVg" keySequence="CTRL+NUMPAD_DIVIDE" command="_eqNKvPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euwTcfETEeGDEc9DxL1vVg" keySequence="CTRL+NUMPAD_MULTIPLY" command="_eqJgRfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euwTc_ETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+NUMPAD_DIVIDE" command="_eqAWYPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euw6gPETEeGDEc9DxL1vVg" keySequence="CTRL+NUMPAD_ADD" command="_eqKHYfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euw6gfETEeGDEc9DxL1vVg" keySequence="CTRL+NUMPAD_SUBTRACT" command="_eqOY0vETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euxhlPETEeGDEc9DxL1vVg" keySequence="CTRL+K" command="_eqdpXPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euyIoPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+K" command="_eqh6wvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euyIofETEeGDEc9DxL1vVg" keySequence="CTRL+J" command="_eqAWVfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euyIovETEeGDEc9DxL1vVg" keySequence="CTRL+L" command="_eqMjk_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu5dYPETEeGDEc9DxL1vVg" keySequence="INSERT" command="_ep3zc_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu6EcPETEeGDEc9DxL1vVg" keySequence="CTRL+F10" command="_eqLVc_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu6EcvETEeGDEc9DxL1vVg" keySequence="SHIFT+CR" command="_eqI5OvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu6Ec_ETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+CR" command="_ep0JGPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu6EdPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+X" command="_eqcbMfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu6rgPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+Y" command="_eqLVh_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu6rgfETEeGDEc9DxL1vVg" keySequence="END" command="_eqih1_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu6rgvETEeGDEc9DxL1vVg" keySequence="HOME" command="_eqKHZvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu6rg_ETEeGDEc9DxL1vVg" keySequence="CTRL+HOME" command="_eqOY2PETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu7SkPETEeGDEc9DxL1vVg" keySequence="SHIFT+END" command="_ep0JFfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu7SkfETEeGDEc9DxL1vVg" keySequence="CTRL+DEL" command="_ep4aiPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu7Sk_ETEeGDEc9DxL1vVg" keySequence="ALT+ARROW_UP" command="_eqO_0_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu75p_ETEeGDEc9DxL1vVg" keySequence="CTRL+BS" command="_ep5opPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evEcgPETEeGDEc9DxL1vVg" keySequence="ALT+CTRL+J" command="_eqNxwvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evEcgfETEeGDEc9DxL1vVg" keySequence="CTRL+END" command="_ep3zdPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evEchPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+ARROW_LEFT" command="_eqL8i_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evzcUfETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+DEL" command="_ep5BovETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evzcUvETEeGDEc9DxL1vVg" keySequence="ALT+CTRL+ARROW_DOWN" command="_eqO_1_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ev_pkPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+ARROW_RIGHT" command="_eqh60_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ev_pkvETEeGDEc9DxL1vVg" keySequence="SHIFT+HOME" command="_eqMjoPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ewFwMPETEeGDEc9DxL1vVg" keySequence="CTRL+ARROW_LEFT" command="_ep4amvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ewG-UfETEeGDEc9DxL1vVg" keySequence="CTRL+ARROW_RIGHT" command="_eqZ-8vETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ewG-VPETEeGDEc9DxL1vVg" keySequence="CTRL+D" command="_eqAWUvETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_etr8c_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ant.ui.AntEditorScope" bindingContext="_er3XhvETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_etr8dPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+F" command="_eqNxtfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euQkMvETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+O" command="_eqh6xPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euRLQvETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+R" command="_ep0JIfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euktRfETEeGDEc9DxL1vVg" keySequence="SHIFT+F2" command="_ep_vTPETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_etzRM_ETEeGDEc9DxL1vVg" elementId="org.eclipse.wb.core.java.editorScope" bindingContext="_er3Xj_ETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_etzRNPETEeGDEc9DxL1vVg" keySequence="ALT+CTRL+A" command="_eqLVdPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu7SlvETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+A" command="_eqLVdPETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_etz4Q_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.views.tasks" bindingContext="_er2wdPETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_etz4RPETEeGDEc9DxL1vVg" keySequence="ALT+ARROW_DOWN" command="_eqNKpPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_et5-4vETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+ARROW_UP" command="_ep0JKfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euIBUvETEeGDEc9DxL1vVg" keySequence="CTRL+CR" command="_eqNKqvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euIBVPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+U" command="_eqKHXfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euIoYfETEeGDEc9DxL1vVg" keySequence="F4" command="_eqNKqfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euVcsPETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+R" command="_ep4aj_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euyIo_ETEeGDEc9DxL1vVg" keySequence="INSERT" command="_eqJgS_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu7SkvETEeGDEc9DxL1vVg" keySequence="ALT+ARROW_UP" command="_ep_vQfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu75pfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+ARROW_DOWN" command="_eqih1vETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evD1cfETEeGDEc9DxL1vVg" keySequence="SHIFT+INSERT" command="_eqL8nPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evFqofETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+I" command="_eqJgSfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evy1QfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+C" command="_eqOY0PETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_et6l9_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesView" bindingContext="_er2wc_ETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_et7NAPETEeGDEc9DxL1vVg" keySequence="CTRL+V" command="_ep3zjPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ewFwMvETEeGDEc9DxL1vVg" keySequence="CTRL+C" command="_ep3zkvETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_et7NBfETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.debugging" bindingContext="_er3XgPETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_et7NBvETEeGDEc9DxL1vVg" keySequence="F5" command="_eqNxv_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euOH8vETEeGDEc9DxL1vVg" keySequence="CTRL+F5" command="_eqL8mPETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euOvA_ETEeGDEc9DxL1vVg" keySequence="CTRL+F2" command="_eqJgSvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euOvBPETEeGDEc9DxL1vVg" keySequence="F8" command="_eqmMN_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euOvBfETEeGDEc9DxL1vVg" keySequence="F7" command="_eqih0vETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euOvBvETEeGDEc9DxL1vVg" keySequence="F6" command="_ep0JHvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euPWEvETEeGDEc9DxL1vVg" keySequence="CTRL+R" command="_ep_vS_ETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_et70EPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.BreakpointView" bindingContext="_er3Xg_ETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_et70EfETEeGDEc9DxL1vVg" keySequence="ALT+CR" command="_eqNxyPETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_et8bJPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.memoryview" bindingContext="_er3XlfETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_et8bJfETEeGDEc9DxL1vVg" keySequence="CTRL+W" command="_eqKHUfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euGzMPETEeGDEc9DxL1vVg" keySequence="CTRL+N" command="_eqLVivETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euPWE_ETEeGDEc9DxL1vVg" keySequence="ALT+CTRL+M" command="_ep0JJfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euPWFPETEeGDEc9DxL1vVg" keySequence="ALT+CTRL+N" command="_ep3zcvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eulUU_ETEeGDEc9DxL1vVg" keySequence="CTRL+T" command="_eqNKqPETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_euGzMvETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.internal.wikitext.ui.editor.basicMarkupSourceContext" bindingContext="_er3XmPETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_euHaQPETEeGDEc9DxL1vVg" keySequence="F1" command="_ep_INvETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_euHaQvETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.wikitext.tasks.ui.markupSourceContext" bindingContext="_er3-kPETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_euHaQ_ETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+O" command="_eqdCTfETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_euHaRfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.editors.task" bindingContext="_er3XkPETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_euHaRvETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+M" command="_ep5ou_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euIBUfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+S" command="_eqih4_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euIBVfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+U" command="_eqKHXfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euVcsfETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+R" command="_ep4aj_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euWq0_ETEeGDEc9DxL1vVg" keySequence="CTRL+O" command="_eqhTuvETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evFqovETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+I" command="_eqJgSfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evy1QvETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+C" command="_eqOY0PETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_euOH9PETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.memory.abstractasynctablerendering" bindingContext="_er3XgfETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_euOvAPETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+," command="_eqh6wfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euOvAfETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+." command="_eptbYfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_eu6rhPETEeGDEc9DxL1vVg" keySequence="CTRL+G" command="_eqJgT_ETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_euPWFvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.propertiesEditorScope" bindingContext="_er3Xl_ETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_euP9IPETEeGDEc9DxL1vVg" keySequence="CTRL+7" command="_ep0wIfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_euQkMfETEeGDEc9DxL1vVg" keySequence="CTRL+/" command="_ep0wIfETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_evFDkfETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+C" command="_ep0wIfETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_euWq1PETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.wikitext.ui.editor.markupSourceContext" bindingContext="_er3-kfETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_euWq1fETEeGDEc9DxL1vVg" keySequence="CTRL+O" command="_eqdCTfETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_euktQfETEeGDEc9DxL1vVg" elementId="org.eclipse.core.runtime.xml" bindingContext="_er3XjvETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_euktQvETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+P" command="_eqh6y_ETEeGDEc9DxL1vVg"/>
+    <bindings xmi:id="_ev_CgfETEeGDEc9DxL1vVg" keySequence="CTRL+SHIFT+D" command="_eqamF_ETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_eu75ovETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.breadcrumbEditorScope" bindingContext="_er3-k_ETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_eu75o_ETEeGDEc9DxL1vVg" keySequence="ALT+SHIFT+B" command="_eqNxuvETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_ewFwM_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.ReflogView" bindingContext="_er2wdfETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_ewFwNPETEeGDEc9DxL1vVg" keySequence="CTRL+C" command="_ep_ITPETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_ewG-UvETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.console" bindingContext="_er3XhPETEeGDEc9DxL1vVg">
+    <bindings xmi:id="_ewG-U_ETEeGDEc9DxL1vVg" keySequence="CTRL+D" command="_eqI5M_ETEeGDEc9DxL1vVg"/>
+  </bindingTables>
+  <bindingTables xmi:id="_fAfjsPETEeGDEc9DxL1vVg" bindingContext="_fAe8oPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_fArw8PETEeGDEc9DxL1vVg" bindingContext="_fAfjsfETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_fAsYAPETEeGDEc9DxL1vVg" bindingContext="_fArw8fETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_fAsYAvETEeGDEc9DxL1vVg" bindingContext="_fAsYAfETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_fA3-MfETEeGDEc9DxL1vVg" bindingContext="_fA3-MPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_fA5MUfETEeGDEc9DxL1vVg" bindingContext="_fA5MUPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_fA5zYfETEeGDEc9DxL1vVg" bindingContext="_fA5zYPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_fA8PofETEeGDEc9DxL1vVg" bindingContext="_fA8PoPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_fA82sfETEeGDEc9DxL1vVg" bindingContext="_fA82sPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_fA82s_ETEeGDEc9DxL1vVg" bindingContext="_fA82svETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_fA82tfETEeGDEc9DxL1vVg" bindingContext="_fA82tPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_fA9dwfETEeGDEc9DxL1vVg" bindingContext="_fA9dwPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_fA-E0fETEeGDEc9DxL1vVg" bindingContext="_fA-E0PETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_fA-E0_ETEeGDEc9DxL1vVg" bindingContext="_fA-E0vETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_fA-r4fETEeGDEc9DxL1vVg" bindingContext="_fA-r4PETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_fA-r4_ETEeGDEc9DxL1vVg" bindingContext="_fA-r4vETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_fA_S8fETEeGDEc9DxL1vVg" bindingContext="_fA_S8PETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_fA_S8_ETEeGDEc9DxL1vVg" bindingContext="_fA_S8vETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_fA_6AfETEeGDEc9DxL1vVg" bindingContext="_fA_6APETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gIftkfETEeGDEc9DxL1vVg" bindingContext="_gIftkPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gIg7sPETEeGDEc9DxL1vVg" bindingContext="_gIgUoPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gIhiwfETEeGDEc9DxL1vVg" bindingContext="_gIhiwPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gIqssfETEeGDEc9DxL1vVg" bindingContext="_gIqssPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gIrTwfETEeGDEc9DxL1vVg" bindingContext="_gIrTwPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gIr60fETEeGDEc9DxL1vVg" bindingContext="_gIr60PETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gIyBcfETEeGDEc9DxL1vVg" bindingContext="_gIyBcPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gIzPkfETEeGDEc9DxL1vVg" bindingContext="_gIzPkPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gIz2ofETEeGDEc9DxL1vVg" bindingContext="_gIz2oPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gI7ycfETEeGDEc9DxL1vVg" bindingContext="_gI7ycPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gI9AkfETEeGDEc9DxL1vVg" bindingContext="_gI9AkPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gJH_sPETEeGDEc9DxL1vVg" bindingContext="_gI9noPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gJImwfETEeGDEc9DxL1vVg" bindingContext="_gJImwPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gJJN0fETEeGDEc9DxL1vVg" bindingContext="_gJJN0PETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gJMRIfETEeGDEc9DxL1vVg" bindingContext="_gJMRIPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gJNfQfETEeGDEc9DxL1vVg" bindingContext="_gJNfQPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gJUM8fETEeGDEc9DxL1vVg" bindingContext="_gJUM8PETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gJU0AfETEeGDEc9DxL1vVg" bindingContext="_gJU0APETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gJVbEfETEeGDEc9DxL1vVg" bindingContext="_gJVbEPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gJd98fETEeGDEc9DxL1vVg" bindingContext="_gJd98PETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gJfMEPETEeGDEc9DxL1vVg" bindingContext="_gJelAPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gJfzIfETEeGDEc9DxL1vVg" bindingContext="_gJfzIPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gJqyQfETEeGDEc9DxL1vVg" bindingContext="_gJqyQPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gJrZUfETEeGDEc9DxL1vVg" bindingContext="_gJrZUPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gJz8MfETEeGDEc9DxL1vVg" bindingContext="_gJz8MPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gJ1KUfETEeGDEc9DxL1vVg" bindingContext="_gJ1KUPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gJ6p4fETEeGDEc9DxL1vVg" bindingContext="_gJ6p4PETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gJ74AfETEeGDEc9DxL1vVg" bindingContext="_gJ74APETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gJ9GIfETEeGDEc9DxL1vVg" bindingContext="_gJ9GIPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gKIFQfETEeGDEc9DxL1vVg" bindingContext="_gKIFQPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gKJTYPETEeGDEc9DxL1vVg" bindingContext="_gKIsUPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gKRPMfETEeGDEc9DxL1vVg" bindingContext="_gKRPMPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gKSdUfETEeGDEc9DxL1vVg" bindingContext="_gKSdUPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gKZLAfETEeGDEc9DxL1vVg" bindingContext="_gKZLAPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gKaZIfETEeGDEc9DxL1vVg" bindingContext="_gKaZIPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gKiU8fETEeGDEc9DxL1vVg" bindingContext="_gKiU8PETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gKjjEfETEeGDEc9DxL1vVg" bindingContext="_gKjjEPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gKppsfETEeGDEc9DxL1vVg" bindingContext="_gKppsPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gKq30fETEeGDEc9DxL1vVg" bindingContext="_gKq30PETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gKyzofETEeGDEc9DxL1vVg" bindingContext="_gKyzoPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_gK0BwfETEeGDEc9DxL1vVg" bindingContext="_gK0BwPETEeGDEc9DxL1vVg"/>
+  <bindingTables xmi:id="_vBEOwfKcEeGnx90PHpZ2Rw" bindingContext="_vBEOwPKcEeGnx90PHpZ2Rw"/>
+  <rootContext xmi:id="_enU1y_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.contexts.dialogAndWindow" contributorURI="platform:/plugin/org.eclipse.ui.workbench" name="In Dialogs and Windows" description="Either a dialog or a window is open">
+    <children xmi:id="_enU1zPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.contexts.window" contributorURI="platform:/plugin/org.eclipse.ui.workbench" name="In Windows" description="A window is open">
+      <children xmi:id="_enU1zfETEeGDEc9DxL1vVg" elementId="org.eclipse.e4.ui.contexts.views" contributorURI="platform:/plugin/org.eclipse.ui.workbench" name="%bindingcontext.name.bindingView"/>
+      <children xmi:id="_er2wcfETEeGDEc9DxL1vVg" elementId="org.eclipse.compare.compareEditorScope" name="Comparing in an Editor" description="Comparing in an Editor"/>
+      <children xmi:id="_er2wc_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesView" name="In Git Repositories View"/>
+      <children xmi:id="_er2wdPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.views.tasks" name="In Tasks View"/>
+      <children xmi:id="_er2wdfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.ReflogView" name="In Git Reflog View"/>
+      <children xmi:id="_er3XgPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.debugging" name="Debugging" description="Debugging Programs">
+        <children xmi:id="_er3XgfETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.memory.abstractasynctablerendering" name="In Table Memory Rendering" description="In Table Memory Rendering"/>
+        <children xmi:id="_er3XkvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.debugging" name="Debugging Java" description="Debugging Java programs"/>
+      </children>
+      <children xmi:id="_er3Xg_ETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.BreakpointView" name="In Breakpoints View" description="The breakpoints view context"/>
+      <children xmi:id="_er3XhPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.console" name="In I/O Console" description="In I/O Console"/>
+      <children xmi:id="_er3XhfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.textEditorScope" name="Editing Text" description="Editing Text Context">
+        <children xmi:id="_er3XhvETEeGDEc9DxL1vVg" elementId="org.eclipse.ant.ui.AntEditorScope" name="Editing Ant Buildfiles" description="Editing Ant Buildfiles Context"/>
+        <children xmi:id="_er3Xh_ETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.structuredTextEditorScope" name="Editing in Structured Text Editors" description="Editing in Structured Text Editors">
+          <children xmi:id="_er3XiPETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xml.occurrences" name="XML Source Occurrences" description="XML Source Occurrences"/>
+          <children xmi:id="_er3XifETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xml.navigation" name="XML Source Navigation" description="XML Source Navigation"/>
+          <children xmi:id="_er3XivETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xml.cleanup" name="XML Source Cleanup" description="XML Source Cleanup"/>
+          <children xmi:id="_er3Xi_ETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xml.grammar" name="XML Source Grammar" description="XML Source Grammar"/>
+          <children xmi:id="_er3XjPETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.comments" name="Source Comments in Structured Text Editors" description="Source Comments in Structured Text Editors"/>
+          <children xmi:id="_er3XjfETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xml.selection" name="XML Source Selection" description="XML Source Selection"/>
+          <children xmi:id="_er3XjvETEeGDEc9DxL1vVg" elementId="org.eclipse.core.runtime.xml" name="Editing XML Source" description="Editing XML Source"/>
+          <children xmi:id="_er3XlvETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xml.comments" name="XML Source Comments" description="XML Source Comments"/>
+          <children xmi:id="_er3-lPETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xml.dependencies" name="XML Source Dependencies" description="XML Source Dependencies"/>
+          <children xmi:id="_er3-lfETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xml.expand" name="XML Source Expand/Collapse" description="XML Source Expand/Collapse"/>
+        </children>
+        <children xmi:id="_er3Xj_ETEeGDEc9DxL1vVg" elementId="org.eclipse.wb.core.java.editorScope" name="WindowBuilder Java scope"/>
+        <children xmi:id="_er3XkPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.editors.task" name="In Tasks Editor"/>
+        <children xmi:id="_er3XkfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.javaEditorScope" name="Editing Java Source" description="Editing Java Source Context"/>
+        <children xmi:id="_er3XlPETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xsd.ui.text.editor.context" name="Editing XSD context"/>
+        <children xmi:id="_er3Xl_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.propertiesEditorScope" name="Editing Properties Files" description="Editing Properties Files Context"/>
+        <children xmi:id="_er3XmPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.internal.wikitext.ui.editor.basicMarkupSourceContext" name="WikiText Markup Source Context" description="WikiText markup editing context">
+          <children xmi:id="_er3-kPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.wikitext.tasks.ui.markupSourceContext" name="Task Markup Editor Source Context"/>
+          <children xmi:id="_er3-kfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.wikitext.ui.editor.markupSourceContext" name="WikiText Markup Source Context" description="WikiText markup editing context"/>
+        </children>
+      </children>
+      <children xmi:id="_er3XlfETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.memoryview" name="In Memory View" description="In Memory View"/>
+      <children xmi:id="_er3-kvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.console.ConsoleView" name="In Console View" description="In Console View"/>
+    </children>
+    <children xmi:id="_enU1zvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.contexts.dialog" contributorURI="platform:/plugin/org.eclipse.ui.workbench" name="In Dialogs" description="A dialog is open"/>
+  </rootContext>
+  <rootContext xmi:id="_er2wcPETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xsd.ui.editor.designView" name="XSD Editor Design View" description="XSD Editor Design View"/>
+  <rootContext xmi:id="_er2wcvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.contexts.workbenchMenu" name="Workbench Menu" description="When no Workbench windows are active"/>
+  <rootContext xmi:id="_er3XgvETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xsd.ui.editor.sourceView" name="XSD Editor Source View" description="XSD Editor Source View"/>
+  <rootContext xmi:id="_er3Xk_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.contexts.actionSet" name="Action Set" description="Parent context for action sets"/>
+  <rootContext xmi:id="_er3-k_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.breadcrumbEditorScope" name="Editor Breadcrumb Navigation" description="Editor Breadcrumb Navigation Context"/>
+  <rootContext xmi:id="_fAe8oPETEeGDEc9DxL1vVg" elementId="org.eclipse.ant.ui.OpenExternalDocAction" name="Auto::org.eclipse.ant.ui.OpenExternalDocAction"/>
+  <rootContext xmi:id="_fAfjsfETEeGDEc9DxL1vVg" elementId="org.eclipse.ant.ui.actions.ManageBreakpointRulerAction" name="Auto::org.eclipse.ant.ui.actions.ManageBreakpointRulerAction"/>
+  <rootContext xmi:id="_fArw8fETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.actions.ManageBreakpointRulerAction" name="Auto::org.eclipse.jdt.debug.ui.actions.ManageBreakpointRulerAction"/>
+  <rootContext xmi:id="_fAsYAfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.SnippetExecute" name="Auto::org.eclipse.jdt.debug.ui.SnippetExecute"/>
+  <rootContext xmi:id="_fA3-MPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.SnippetDisplay" name="Auto::org.eclipse.jdt.debug.ui.SnippetDisplay"/>
+  <rootContext xmi:id="_fA5MUPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.SnippetInspect" name="Auto::org.eclipse.jdt.debug.ui.SnippetInspect"/>
+  <rootContext xmi:id="_fA5zYPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.internal.ui.javaeditor.BookmarkRulerAction" name="Auto::org.eclipse.jdt.internal.ui.javaeditor.BookmarkRulerAction"/>
+  <rootContext xmi:id="_fA8PoPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.internal.ui.javaeditor.JavaSelectRulerAction" name="Auto::org.eclipse.jdt.internal.ui.javaeditor.JavaSelectRulerAction"/>
+  <rootContext xmi:id="_fA82sPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.internal.ui.propertiesfileeditor.BookmarkRulerAction" name="Auto::org.eclipse.jdt.internal.ui.propertiesfileeditor.BookmarkRulerAction"/>
+  <rootContext xmi:id="_fA82svETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.internal.ui.propertiesfileeditor.SelectRulerAction" name="Auto::org.eclipse.jdt.internal.ui.propertiesfileeditor.SelectRulerAction"/>
+  <rootContext xmi:id="_fA82tPETEeGDEc9DxL1vVg" elementId="org.eclipse.m2e.jdt.downloadSourcesAction" name="Auto::org.eclipse.m2e.jdt.downloadSourcesAction"/>
+  <rootContext xmi:id="_fA9dwPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.wikitext.tasks.ui.editor.folding.auto" name="Auto::org.eclipse.mylyn.wikitext.tasks.ui.editor.folding.auto"/>
+  <rootContext xmi:id="_fA-E0PETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.texteditor.BookmarkRulerAction" name="Auto::org.eclipse.ui.texteditor.BookmarkRulerAction"/>
+  <rootContext xmi:id="_fA-E0vETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.texteditor.SelectRulerAction" name="Auto::org.eclipse.ui.texteditor.SelectRulerAction"/>
+  <rootContext xmi:id="_fA-r4PETEeGDEc9DxL1vVg" elementId="org.eclipse.wb.core.editor.actions.SwitchAction" name="Auto::org.eclipse.wb.core.editor.actions.SwitchAction"/>
+  <rootContext xmi:id="_fA-r4vETEeGDEc9DxL1vVg" elementId="StructureSelectEnclosing" name="Auto::StructureSelectEnclosing"/>
+  <rootContext xmi:id="_fA_S8PETEeGDEc9DxL1vVg" elementId="StructureSelectNext" name="Auto::StructureSelectNext"/>
+  <rootContext xmi:id="_fA_S8vETEeGDEc9DxL1vVg" elementId="StructureSelectPrevious" name="Auto::StructureSelectPrevious"/>
+  <rootContext xmi:id="_fA_6APETEeGDEc9DxL1vVg" elementId="StructureSelectHistory" name="Auto::StructureSelectHistory"/>
+  <rootContext xmi:id="_gIftkPETEeGDEc9DxL1vVg" elementId="org.eclipse.ant.ui.actionSet.presentation" name="Auto::org.eclipse.ant.ui.actionSet.presentation"/>
+  <rootContext xmi:id="_gIgUoPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.breakpointActionSet" name="Auto::org.eclipse.debug.ui.breakpointActionSet"/>
+  <rootContext xmi:id="_gIhiwPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.debugActionSet" name="Auto::org.eclipse.debug.ui.debugActionSet"/>
+  <rootContext xmi:id="_gIqssPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.launchActionSet" name="Auto::org.eclipse.debug.ui.launchActionSet"/>
+  <rootContext xmi:id="_gIrTwPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.profileActionSet" name="Auto::org.eclipse.debug.ui.profileActionSet"/>
+  <rootContext xmi:id="_gIr60PETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.gitaction" name="Auto::org.eclipse.egit.ui.gitaction"/>
+  <rootContext xmi:id="_gIyBcPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.navigation" name="Auto::org.eclipse.egit.ui.navigation"/>
+  <rootContext xmi:id="_gIzPkPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.JDTDebugActionSet" name="Auto::org.eclipse.jdt.debug.ui.JDTDebugActionSet"/>
+  <rootContext xmi:id="_gIz2oPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.junit.JUnitActionSet" name="Auto::org.eclipse.jdt.junit.JUnitActionSet"/>
+  <rootContext xmi:id="_gI7ycPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.text.java.actionSet.presentation" name="Auto::org.eclipse.jdt.ui.text.java.actionSet.presentation"/>
+  <rootContext xmi:id="_gI9AkPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.JavaElementCreationActionSet" name="Auto::org.eclipse.jdt.ui.JavaElementCreationActionSet"/>
+  <rootContext xmi:id="_gI9noPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.JavaActionSet" name="Auto::org.eclipse.jdt.ui.JavaActionSet"/>
+  <rootContext xmi:id="_gJImwPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.A_OpenActionSet" name="Auto::org.eclipse.jdt.ui.A_OpenActionSet"/>
+  <rootContext xmi:id="_gJJN0PETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.CodingActionSet" name="Auto::org.eclipse.jdt.ui.CodingActionSet"/>
+  <rootContext xmi:id="_gJMRIPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.SearchActionSet" name="Auto::org.eclipse.jdt.ui.SearchActionSet"/>
+  <rootContext xmi:id="_gJNfQPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.context.ui.actionSet" name="Auto::org.eclipse.mylyn.context.ui.actionSet"/>
+  <rootContext xmi:id="_gJUM8PETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.java.actionSet" name="Auto::org.eclipse.mylyn.java.actionSet"/>
+  <rootContext xmi:id="_gJU0APETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.java.actionSet.browsing" name="Auto::org.eclipse.mylyn.java.actionSet.browsing"/>
+  <rootContext xmi:id="_gJVbEPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.doc.actionSet" name="Auto::org.eclipse.mylyn.doc.actionSet"/>
+  <rootContext xmi:id="_gJd98PETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.navigation" name="Auto::org.eclipse.mylyn.tasks.ui.navigation"/>
+  <rootContext xmi:id="_gJelAPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.navigation.additions" name="Auto::org.eclipse.mylyn.tasks.ui.navigation.additions"/>
+  <rootContext xmi:id="_gJfzIPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.cheatsheets.actionSet" name="Auto::org.eclipse.ui.cheatsheets.actionSet"/>
+  <rootContext xmi:id="_gJqyQPETEeGDEc9DxL1vVg" elementId="org.eclipse.search.searchActionSet" name="Auto::org.eclipse.search.searchActionSet"/>
+  <rootContext xmi:id="_gJrZUPETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.CVSActionSet" name="Auto::org.eclipse.team.cvs.ui.CVSActionSet"/>
+  <rootContext xmi:id="_gJz8MPETEeGDEc9DxL1vVg" elementId="org.eclipse.team.ui.actionSet" name="Auto::org.eclipse.team.ui.actionSet"/>
+  <rootContext xmi:id="_gJ1KUPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.actionSet.annotationNavigation" name="Auto::org.eclipse.ui.edit.text.actionSet.annotationNavigation"/>
+  <rootContext xmi:id="_gJ6p4PETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.actionSet.navigation" name="Auto::org.eclipse.ui.edit.text.actionSet.navigation"/>
+  <rootContext xmi:id="_gJ74APETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo" name="Auto::org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo"/>
+  <rootContext xmi:id="_gJ9GIPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.externaltools.ExternalToolsSet" name="Auto::org.eclipse.ui.externaltools.ExternalToolsSet"/>
+  <rootContext xmi:id="_gKIFQPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.NavigateActionSet" name="Auto::org.eclipse.ui.NavigateActionSet"/>
+  <rootContext xmi:id="_gKIsUPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.actionSet.keyBindings" name="Auto::org.eclipse.ui.actionSet.keyBindings"/>
+  <rootContext xmi:id="_gKRPMPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.WorkingSetModificationActionSet" name="Auto::org.eclipse.ui.WorkingSetModificationActionSet"/>
+  <rootContext xmi:id="_gKSdUPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.WorkingSetActionSet" name="Auto::org.eclipse.ui.WorkingSetActionSet"/>
+  <rootContext xmi:id="_gKZLAPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.actionSet.openFiles" name="Auto::org.eclipse.ui.actionSet.openFiles"/>
+  <rootContext xmi:id="_gKaZIPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.actionSet.presentation" name="Auto::org.eclipse.ui.edit.text.actionSet.presentation"/>
+  <rootContext xmi:id="_gKiU8PETEeGDEc9DxL1vVg" elementId="org.eclipse.wb.core.ui.actionset" name="Auto::org.eclipse.wb.core.ui.actionset"/>
+  <rootContext xmi:id="_gKjjEPETEeGDEc9DxL1vVg" elementId="adt.actionSet.wizards" name="Auto::adt.actionSet.wizards"/>
+  <rootContext xmi:id="_gKppsPETEeGDEc9DxL1vVg" elementId="adt.actionSet.refactorings" name="Auto::adt.actionSet.refactorings"/>
+  <rootContext xmi:id="_gKq30PETEeGDEc9DxL1vVg" elementId="adt.actionSet.avdManager" name="Auto::adt.actionSet.avdManager"/>
+  <rootContext xmi:id="_gKyzoPETEeGDEc9DxL1vVg" elementId="adt.actionSet.lint" name="Auto::adt.actionSet.lint"/>
+  <rootContext xmi:id="_gK0BwPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.gltrace.actionset" name="Auto::com.android.ide.eclipse.gltrace.actionset"/>
+  <rootContext xmi:id="_vBEOwPKcEeGnx90PHpZ2Rw" elementId="com.android.ide.eclipse.adt.debug.LaunchConfigType.internal.org.eclipse.debug.ui.DebugPerspective" name="Auto::com.android.ide.eclipse.adt.debug.LaunchConfigType.internal.org.eclipse.debug.ui.DebugPerspective"/>
+  <descriptors xmi:id="_e4VtQPETEeGDEc9DxL1vVg" elementId="org.eclipse.e4.ui.compatibility.editor" allowMultiple="true" category="org.eclipse.e4.primaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor">
+    <tags>Editor</tags>
+  </descriptors>
+  <descriptors xmi:id="_e4dpEPETEeGDEc9DxL1vVg" elementId="org.eclipse.ant.ui.views.AntView" label="Ant" iconURI="platform:/plugin/org.eclipse.ant.ui//icons/full/eview16/ant_view.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Ant</tags>
+  </descriptors>
+  <descriptors xmi:id="_e4mL8PETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.DebugView" label="Debug" iconURI="platform:/plugin/org.eclipse.debug.ui//icons/full/eview16/debug_view.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Debug</tags>
+  </descriptors>
+  <descriptors xmi:id="_e4naEPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.BreakpointView" label="Breakpoints" iconURI="platform:/plugin/org.eclipse.debug.ui//icons/full/eview16/breakpoint_view.gif" allowMultiple="true" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Debug</tags>
+  </descriptors>
+  <descriptors xmi:id="_e4oBIPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.VariableView" label="Variables" iconURI="platform:/plugin/org.eclipse.debug.ui//icons/full/eview16/variable_view.gif" allowMultiple="true" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Debug</tags>
+  </descriptors>
+  <descriptors xmi:id="_e4ooMPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.ExpressionView" label="Expressions" iconURI="platform:/plugin/org.eclipse.debug.ui//icons/full/eview16/watchlist_view.gif" allowMultiple="true" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Debug</tags>
+  </descriptors>
+  <descriptors xmi:id="_e4rEcPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.RegisterView" label="Registers" iconURI="platform:/plugin/org.eclipse.debug.ui//icons/full/eview16/register_view.gif" allowMultiple="true" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Debug</tags>
+  </descriptors>
+  <descriptors xmi:id="_e4rrgPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.ModuleView" label="Modules" iconURI="platform:/plugin/org.eclipse.debug.ui//icons/full/eview16/module_view.gif" allowMultiple="true" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Debug</tags>
+  </descriptors>
+  <descriptors xmi:id="_e4sSkPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.MemoryView" label="Memory" iconURI="platform:/plugin/org.eclipse.debug.ui//icons/full/eview16/memory_view.gif" allowMultiple="true" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Debug</tags>
+  </descriptors>
+  <descriptors xmi:id="_e4sSkfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesView" label="Git Repositories" iconURI="platform:/plugin/org.eclipse.egit.ui/icons/eview16/repo_rep.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Git</tags>
+  </descriptors>
+  <descriptors xmi:id="_e4znUPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.StagingView" label="Git Staging" iconURI="platform:/plugin/org.eclipse.egit.ui/icons/eview16/staging.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Git</tags>
+  </descriptors>
+  <descriptors xmi:id="_e40OYPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.CompareTreeView" label="Git Tree Compare" iconURI="platform:/plugin/org.eclipse.egit.ui/icons/obj16/gitrepository.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Git</tags>
+  </descriptors>
+  <descriptors xmi:id="_e401cPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.ReflogView" label="Git Reflog" iconURI="platform:/plugin/org.eclipse.egit.ui/icons/eview16/reflog.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Git</tags>
+  </descriptors>
+  <descriptors xmi:id="_e401cfETEeGDEc9DxL1vVg" elementId="org.eclipse.gef.ui.palette_view" label="Palette" iconURI="platform:/plugin/org.eclipse.gef/icons/palette_view.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:General</tags>
+  </descriptors>
+  <descriptors xmi:id="_e42DkPETEeGDEc9DxL1vVg" elementId="org.eclipse.help.ui.HelpView" label="Help" iconURI="platform:/plugin/org.eclipse.help.ui//icons/view16/help_view.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Help</tags>
+  </descriptors>
+  <descriptors xmi:id="_e46VAPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.DisplayView" label="Display" iconURI="platform:/plugin/org.eclipse.jdt.debug.ui//icons/full/etool16/disp_sbook.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Debug</tags>
+  </descriptors>
+  <descriptors xmi:id="_e48KMPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.junit.ResultView" label="JUnit" iconURI="platform:/plugin/org.eclipse.jdt.junit//icons/full/eview16/junit.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Java</tags>
+  </descriptors>
+  <descriptors xmi:id="_e48xQPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.PackageExplorer" label="Package Explorer" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/eview16/package.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Java</tags>
+  </descriptors>
+  <descriptors xmi:id="_e4-mcPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.TypeHierarchy" label="Type Hierarchy" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/eview16/class_hi.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Java</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5BCsPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.ProjectsView" label="Projects" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/eview16/projects.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Java Browsing</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5BpwPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.PackagesView" label="Packages" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/eview16/packages.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Java Browsing</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5CQ0PETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.TypesView" label="Types" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/eview16/types.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Java Browsing</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5C34PETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.MembersView" label="Members" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/eview16/members.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Java Browsing</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5HJUPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.callhierarchy.view" label="Call Hierarchy" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/eview16/call_hierarchy.gif" allowMultiple="true" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Java</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5HwYPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.texteditor.TemplatesView" label="Templates" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/eview16/templates.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:General</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5HwYfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.SourceView" label="Declaration" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/eview16/source.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Java</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5IXcPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.JavadocView" label="Javadoc" iconURI="platform:/plugin/org.eclipse.jdt.ui//icons/full/eview16/javadoc.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Java</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5IXcfETEeGDEc9DxL1vVg" elementId="org.eclipse.m2e.core.views.MavenRepositoryView" label="Maven Repositories" iconURI="platform:/plugin/org.eclipse.m2e.core.ui/icons/maven_indexes.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Maven</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5I-gPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.builds.navigator.builds" label="Builds" iconURI="platform:/plugin/org.eclipse.mylyn.builds.ui/icons/eview16/build-view.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Mylyn</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5JlkPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.commons.repositories.ui.navigator.Repositories" label="Team Repositories" iconURI="platform:/plugin/org.eclipse.mylyn.commons.repositories.ui/icons/eview16/repositories.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Mylyn</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5MB0PETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.views.tasks" label="Task List" iconURI="platform:/plugin/org.eclipse.mylyn.tasks.ui/icons/eview16/task-list.gif" allowMultiple="true" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Mylyn</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5Mo4PETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.views.repositories" label="Task Repositories" iconURI="platform:/plugin/org.eclipse.mylyn.tasks.ui/icons/eview16/repositories.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Mylyn</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5NP8PETEeGDEc9DxL1vVg" elementId="org.eclipse.recommenders.extdoc.rcp.ExtdocView" label="Extdoc View" iconURI="platform:/plugin/org.eclipse.recommenders.extdoc.rcp/icons/extdoc.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Recommenders</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5N3APETEeGDEc9DxL1vVg" elementId="org.eclipse.search.SearchResultView" label="Classic Search" iconURI="platform:/plugin/org.eclipse.search//icons/full/eview16/searchres.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:General</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5UksPETEeGDEc9DxL1vVg" elementId="org.eclipse.search.ui.views.SearchView" label="Search" iconURI="platform:/plugin/org.eclipse.search//icons/full/eview16/searchres.gif" allowMultiple="true" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:General</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5UksfETEeGDEc9DxL1vVg" elementId="org.eclipse.team.ccvs.ui.RepositoriesView" label="CVS Repositories" iconURI="platform:/plugin/org.eclipse.team.cvs.ui//icons/full/eview16/repo_rep.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:CVS</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5VLwPETEeGDEc9DxL1vVg" elementId="org.eclipse.team.ccvs.ui.EditorsView" label="CVS Editors" iconURI="platform:/plugin/org.eclipse.team.cvs.ui//icons/full/eview16/rep_editors_view.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:CVS</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5Vy0PETEeGDEc9DxL1vVg" elementId="org.eclipse.team.sync.views.SynchronizeView" label="Synchronize" iconURI="platform:/plugin/org.eclipse.team.ui//icons/full/eview16/synch_synch.gif" allowMultiple="true" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Team</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5arUPETEeGDEc9DxL1vVg" elementId="org.eclipse.team.ui.GenericHistoryView" label="History" iconURI="platform:/plugin/org.eclipse.team.ui/icons/full/eview16/history_view.gif" allowMultiple="true" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Team</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5bSYPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.internal.introview" label="Welcome" iconURI="platform:/plugin/org.eclipse.ui/icons/full/eview16/defaultview_misc.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:General</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5lqcPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.browser.view" label="Internal Web Browser" iconURI="platform:/plugin/org.eclipse.ui.browser//icons/obj16/internal_browser.gif" allowMultiple="true" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:General</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5mRgPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.cheatsheets.views.CheatSheetView" label="Cheat Sheets" iconURI="platform:/plugin/org.eclipse.ui.cheatsheets//icons/view16/cheatsheet_view.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Help</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5nfoPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.console.ConsoleView" label="Console" iconURI="platform:/plugin/org.eclipse.ui.console//icons/full/cview16/console_view.gif" allowMultiple="true" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:General</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5oGsPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.ProgressView" label="Progress" iconURI="platform:/plugin/org.eclipse.ui.ide//icons/full/eview16/pview.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:General</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5otwPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.ResourceNavigator" label="Navigator" iconURI="platform:/plugin/org.eclipse.ui.ide//icons/full/eview16/filenav_nav.gif" category="org.eclipse.e4.primaryNavigationStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:General</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5s_MPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.BookmarkView" label="Bookmarks" iconURI="platform:/plugin/org.eclipse.ui.ide//icons/full/eview16/bkmrk_nav.gif" allowMultiple="true" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:General</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5tmQPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.TaskList" label="Tasks" iconURI="platform:/plugin/org.eclipse.ui.ide//icons/full/eview16/tasks_tsk.gif" allowMultiple="true" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:General</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5uNUPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.ProblemView" label="Problems" iconURI="platform:/plugin/org.eclipse.ui.ide//icons/full/eview16/problems_view.gif" allowMultiple="true" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:General</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5uNUfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.AllMarkersView" label="Markers" iconURI="platform:/plugin/org.eclipse.ui.ide//icons/full/eview16/problems_view.gif" allowMultiple="true" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:General</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5u0YPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigator.ProjectExplorer" label="Project Explorer" iconURI="platform:/plugin/org.eclipse.ui.navigator.resources//icons/full/eview16/resource_persp.gif" category="org.eclipse.e4.primaryNavigationStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:General</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5u0YfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.PropertySheet" label="Properties" iconURI="platform:/plugin/org.eclipse.ui.views//icons/full/eview16/prop_ps.gif" allowMultiple="true" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:General</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5vbcPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.ContentOutline" label="Outline" iconURI="platform:/plugin/org.eclipse.ui.views//icons/full/eview16/outline_co.gif" category="org.eclipse.e4.secondaryNavigationStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:General</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5yewPETEeGDEc9DxL1vVg" elementId="org.eclipse.pde.runtime.LogView" label="Error Log" iconURI="platform:/plugin/org.eclipse.ui.views.log//icons/eview16/error_log.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:General</tags>
+  </descriptors>
+  <descriptors xmi:id="_e507APETEeGDEc9DxL1vVg" elementId="org.eclipse.wb.core.StructureView" label="Structure" iconURI="platform:/plugin/org.eclipse.wb.core/icons/structure/properties_view.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:WindowBuilder</tags>
+  </descriptors>
+  <descriptors xmi:id="_e507AfETEeGDEc9DxL1vVg" elementId="org.eclipse.wb.core.PaletteView" label="Palette" iconURI="platform:/plugin/org.eclipse.wb.core/icons/structure/palette.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:WindowBuilder</tags>
+  </descriptors>
+  <descriptors xmi:id="_e51iEPETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.common.snippets.internal.ui.SnippetsView" label="Snippets" iconURI="platform:/plugin/org.eclipse.wst.common.snippets//icons/snippets_view.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:General</tags>
+  </descriptors>
+  <descriptors xmi:id="_e51iEfETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xml.ui.views.annotations.XMLAnnotationsView" label="Documentation" iconURI="platform:/plugin/org.eclipse.wst.xml.ui/icons/full/obj16/comment_obj.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:XML</tags>
+  </descriptors>
+  <descriptors xmi:id="_e55McPETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xml.ui.contentmodel.view" label="Content Model" iconURI="platform:/plugin/org.eclipse.wst.xml.ui/icons/full/view16/hierarchy.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:XML</tags>
+  </descriptors>
+  <descriptors xmi:id="_e57osPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.editors.resources.explorer.ResourceExplorerView" label="Resource Explorer" iconURI="platform:/plugin/com.android.ide.eclipse.adt/icons/draw9patch-16.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <descriptors xmi:id="_e58PwPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.adt.internal.lint.LintViewPart" label="Lint Warnings" iconURI="platform:/plugin/com.android.ide.eclipse.adt/icons/lintview.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <descriptors xmi:id="_e5820PETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.ddms.views.DeviceView" label="Devices" iconURI="platform:/plugin/com.android.ide.eclipse.ddms/icons/device.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6AhMPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.ddms.views.OldLogCatView" label="LogCat (deprecated)" iconURI="platform:/plugin/com.android.ide.eclipse.ddms/icons/android.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6BIQPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.ddms.views.LogCatView" label="LogCat" iconURI="platform:/plugin/com.android.ide.eclipse.ddms/icons/logcat.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6BvUPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.ddms.views.ThreadView" label="Threads" iconURI="platform:/plugin/com.android.ide.eclipse.ddms/icons/thread.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6CWYPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.ddms.views.HeapView" label="Heap" iconURI="platform:/plugin/com.android.ide.eclipse.ddms/icons/heap.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6C9cPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.ddms.views.FileExplorerView" label="File Explorer" iconURI="platform:/plugin/com.android.ide.eclipse.ddms/icons/android.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6JEEPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.ddms.views.EmulatorControlView" label="Emulator Control" iconURI="platform:/plugin/com.android.ide.eclipse.ddms/icons/emulator-16.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6JrIPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.ddms.views.AllocTrackerView" label="Allocation Tracker" iconURI="platform:/plugin/com.android.ide.eclipse.ddms/icons/heap.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6KSMPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.ddms.views.NetworkStatsView" label="Network Statistics" iconURI="platform:/plugin/com.android.ide.eclipse.ddms/icons/networkstats.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6KSMfETEeGDEc9DxL1vVg" elementId="glesv2debuggerclient.views.SampleView" label="OpenGL Trace" iconURI="platform:/plugin/com.android.ide.eclipse.gldebugger/icons/sample.gif" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Tracer for OpenGL ES</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6LgUPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.gltrace.views.FrameBuffer" label="Frame Summary" iconURI="platform:/plugin/com.android.ide.eclipse.gldebugger/icons/opengl.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Tracer for OpenGL ES</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6QY0PETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.gltrace.views.State" label="GL State" iconURI="platform:/plugin/com.android.ide.eclipse.gldebugger/icons/opengl.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Tracer for OpenGL ES</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6Q_4PETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.gltrace.views.Details" label="Details" iconURI="platform:/plugin/com.android.ide.eclipse.gldebugger/icons/opengl.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Tracer for OpenGL ES</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6Rm8PETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.hierarchyviewer.views.DeviceSelectorView" label="Windows" iconURI="platform:/plugin/com.android.ide.eclipse.hierarchyviewer/icons/device.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6Rm8fETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.hierarchyviewer.views.PixelPerfectView" label="Pixel Perfect" iconURI="platform:/plugin/com.android.ide.eclipse.hierarchyviewer/icons/pixel-perfect.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6SOAPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.hierarchyviewer.views.PixelPerfectLoupeView" label="Pixel Perfect Loupe" iconURI="platform:/plugin/com.android.ide.eclipse.hierarchyviewer/icons/pixel-perfect.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6SOAfETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.hierarchyviewer.views.PixelPerfectTreeView" label="Pixel Perfect Tree" iconURI="platform:/plugin/com.android.ide.eclipse.hierarchyviewer/icons/pixel-perfect.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6S1EPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.hierarchyviewer.views.TreeViewView" label="Tree View" iconURI="platform:/plugin/com.android.ide.eclipse.hierarchyviewer/icons/tree-view.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6TcIPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.hierarchyviewer.views.PropertyView" label="View Properties" iconURI="platform:/plugin/com.android.ide.eclipse.hierarchyviewer/icons/tree-view.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6TcIfETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.hierarchyviewer.views.TreeOverviewView" label="Tree Overview" iconURI="platform:/plugin/com.android.ide.eclipse.hierarchyviewer/icons/tree-view.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <descriptors xmi:id="_e6UDMPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.hierarchyviewer.views.LayoutView" label="Layout View" iconURI="platform:/plugin/com.android.ide.eclipse.hierarchyviewer/icons/tree-view.png" category="org.eclipse.e4.secondaryDataStack" closeable="true" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView">
+    <tags>View</tags>
+    <tags>categoryTag:Android</tags>
+  </descriptors>
+  <commands xmi:id="_enU1z_ETEeGDEc9DxL1vVg" elementId="e4.exit" contributorURI="platform:/plugin/org.eclipse.ui.workbench" commandName="%command.name.exit" description=""/>
+  <commands xmi:id="_enVc0PETEeGDEc9DxL1vVg" elementId="e4.show.view" contributorURI="platform:/plugin/org.eclipse.ui.workbench" commandName="%command.name.showView">
+    <parameters xmi:id="_enVc0fETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.viewId" contributorURI="platform:/plugin/org.eclipse.ui.workbench" name="View"/>
+  </commands>
+  <commands xmi:id="_enVc0vETEeGDEc9DxL1vVg" elementId="org.eclipse.e4.ui.saveCommands" contributorURI="platform:/plugin/org.eclipse.ui.workbench" commandName="%command.name.save"/>
+  <commands xmi:id="_enVc0_ETEeGDEc9DxL1vVg" elementId="org.eclipse.e4.ui.saveAllCommands" contributorURI="platform:/plugin/org.eclipse.ui.workbench" commandName="%command.name.saveAll"/>
+  <commands xmi:id="_eptbYPETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xsd.ui.refactor.makeTypeGlobal" commandName="Make &amp;Anonymous Type Global" description="Promotes anonymous type to global level and replaces its references" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eptbYfETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.command.nextpage" commandName="Next Page of Memory" description="Load next page of memory" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eptbYvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.implementors.in.project" commandName="Implementors in Project" description="Search for implementors of the selected interface in the enclosing project" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eptbY_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.removeTrailingWhitespace" commandName="Remove Trailing Whitespace" description="Removes the trailing whitespace of each line" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eptbZPETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.GenerateDiff" commandName="Create Patch" description="Compare your workspace contents with the server and generate a diff file that can be used as a patch file." category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eptbZfETEeGDEc9DxL1vVg" elementId="sed.tabletree.expandAll" commandName="Expand All" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eptbZvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.toggleMarkOccurrences" commandName="Toggle Mark Occurrences" description="Toggles mark occurrences in Java editors" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eptbZ_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.commands.AllInstances" commandName="All Instances" description="View all instances of the selected type loaded in the target VM" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eptbaPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.discoveryWizardCommand" commandName="%command.name" description="%command.description" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eptbafETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.showChangeRulerInformation" commandName="Show Quick Diff Ruler Tooltip" description="Displays quick diff or revision information for the caret line in a focused hover" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eptbavETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.delimiter.macOS9" commandName="Convert Line Delimiters to MacOS 9 (CR, \r, 0D, &#xa4;)" description="Converts the line delimiters to MacOS 9 (CR, \r, 0D, &#xa4;)" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eptba_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.use.supertype" commandName="Use Supertype Where Possible" description="Change occurrences of a type to use a supertype instead" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eptbbPETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.structure.select.enclosing" commandName="Select Enclosing Element" description="Expand selection to include enclosing element" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eptbbfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewClone" commandName="Clone a Git Repository" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_epv3oPETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xml.ui.disable.grammar.constraints" commandName="Turn off Grammar Constraints" description="Turn off grammar Constraints" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_epv3ofETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.select.textStart" commandName="Select Text Start" description="Select to the beginning of the text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_epv3ovETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.cheatsheets.openCheatSheetURL" commandName="Open Cheat Sheet from URL" description="Open a Cheat Sheet from file at a specified URL." category="_eps0Z_ETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_epv3o_ETEeGDEc9DxL1vVg" elementId="cheatSheetId" name="Identifier" optional="false"/>
+    <parameters xmi:id="_epv3pPETEeGDEc9DxL1vVg" elementId="name" name="Name" optional="false"/>
+    <parameters xmi:id="_epv3pfETEeGDEc9DxL1vVg" elementId="url" name="URL" optional="false"/>
+  </commands>
+  <commands xmi:id="_epv3pvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewRefresh" commandName="Refresh" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_epv3p_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.navigate.open.type.in.hierarchy" commandName="Open Type in Hierarchy" description="Open a type in the type hierarchy view" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_epv3qPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.JavaBrowsingPerspective" commandName="Java Browsing" description="Show the Java Browsing perspective" category="_epsNQPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JEPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.project.buildAll" commandName="Build All" description="Build all projects" category="_eps0UfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JEfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.lockToolBar" commandName="Lock the Toolbars" description="Lock the Toolbars" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JEvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.expandAll" commandName="Expand All" description="Expand the current tree" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JE_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.file.import" commandName="Import" description="Import" category="_eps0VfETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_ep0JFPETEeGDEc9DxL1vVg" elementId="importWizardId" name="Import Wizard"/>
+  </commands>
+  <commands xmi:id="_ep0JFfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.select.lineEnd" commandName="Select Line End" description="Select to the end of the line of text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JFvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.help.helpSearch" commandName="Help Search" description="Open the help search" category="_eps0Z_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JF_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.CompareWithHead" commandName="Compare with HEAD Revision" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JGPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.smartEnterInverse" commandName="Insert Line Above Current Line" description="Adds a new line above the current line" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JGfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.externalTools.commands.OpenExternalToolsConfigurations" commandName="External Tools..." description="Open external tools launch configuration dialog" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JGvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.goto.windowEnd" commandName="Window End" description="Go to the end of the window" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JG_ETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.update" commandName="Update" description="Update resources with new content from the repository" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JHPETEeGDEc9DxL1vVg" elementId="org.eclipse.team.ui.TeamSynchronizingPerspective" commandName="Team Synchronizing" description="Open the Team Synchronizing Perspective" category="_epsNQPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JHfETEeGDEc9DxL1vVg" elementId="org.eclipse.help.ui.indexcommand" commandName="Index" description="Show Keyword Index" category="_eps0Z_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JHvETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.StepOver" commandName="Step Over" description="Step over" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JH_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.builds.ui.commands.OpenBuildElementWithBrowser" commandName="Open Build with Browser" category="_eps0UPETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_ep0JIPETEeGDEc9DxL1vVg" elementId="element" name="Element"/>
+  </commands>
+  <commands xmi:id="_ep0JIfETEeGDEc9DxL1vVg" elementId="org.eclipse.ant.ui.renameInFile" commandName="Rename In File" description="Renames all references within the same buildfile" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JIvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewOpenInEditor" commandName="Open in Editor" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JI_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.RenameBranch" commandName="Rename Branch..." category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JJPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.surround.with.quickMenu" commandName="Surround With Quick Menu" description="Shows the Surround With quick menu" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JJfETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.addMemoryMonitor" commandName="Add Memory Block" description="Add Memory block" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JJvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewRebase" commandName="Rebase" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JJ_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.revertToSaved" commandName="Revert to Saved" description="Revert to the last saved state" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JKPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.Rebase" commandName="Rebase" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JKfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.markTaskReadGoToPreviousUnread" commandName="Mark Task Read and Go To Previous Unread Task" category="_eps0X_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JKvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.pinEditor" commandName="Pin Editor" description="Pin the current editor" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JK_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.encapsulateField.assist" commandName="Quick Assist - Create getter/setter for field" description="Invokes quick assist and selects 'Create getter/setter for field'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0JLPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.implement.occurrences" commandName="Search Implement Occurrences in File" description="Search for implement occurrences of a selected type" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wIPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.commands.Inspect" commandName="Inspect" description="Inspect result of evaluating selected text" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wIfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.toggle.comment" commandName="Toggle Comment" description="Toggle comment the selected lines" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wIvETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.format.active.elements" commandName="Format Active Elements" description="Format active elements" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wI_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.add.block.comment" commandName="Add Block Comment" description="Enclose the selection with a block comment" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wJPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.surround.with.try.catch" commandName="Surround with try/catch Block" description="Surround the selected text with a try/catch block" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wJfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.convert.anonymous.to.nested" commandName="Convert Anonymous Class to Nested" description="Convert an anonymous class to a nested class" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wJvETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.context.ui.commands.open.context.dialog" commandName="Show Context Quick View" description="Show Context Quick View" category="_eps0aPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wJ_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.ShowRepositoriesView" commandName="Show Git Repositories View" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wKPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.Tag" commandName="Tag" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wKfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.folding.restore" commandName="Reset Structure" description="Resets the folding structure" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wKvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.file.restartWorkbench" commandName="Restart" description="Restart the workbench" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wK_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.file.export" commandName="Export" description="Export" category="_eps0VfETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_ep0wLPETEeGDEc9DxL1vVg" elementId="exportWizardId" name="Export Wizard"/>
+  </commands>
+  <commands xmi:id="_ep0wLfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewConfigurePush" commandName="Configure Push..." category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wLvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.occurrences.in.file.quickMenu" commandName="Show Occurrences in File Quick Menu" description="Shows the Occurrences in File quick menu" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wL_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.select.lineDown" commandName="Select Line Down" description="Extend the selection to the next line of text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wMPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.resetPerspective" commandName="Reset Perspective" description="Reset the current perspective to its default state" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wMfETEeGDEc9DxL1vVg" elementId="org.eclipse.ltk.ui.refactoring.commands.renameResource" commandName="Rename Resource" description="Rename the selected resource and notify LTK participants." category="_eps0avETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wMvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.showContextMenu" commandName="Show Context Menu" description="Show the context menu" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wM_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.stash.drop" commandName="Delete Stashed Commit..." category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wNPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.savePerspective" commandName="Save Perspective As" description="Save the current perspective" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wNfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.ConfigureUpstreamPush" commandName="Configure Upstream Push" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep0wNvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.showInformation" commandName="Show Tooltip Description" description="Displays information for the current caret location in a focused hover" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zcPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.ide.markCompleted" commandName="Mark Completed" description="Mark the selected tasks as completed" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zcfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.ConfigureFetch" commandName="Configure Upstream Fetch" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zcvETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.nextMemoryBlock" commandName="Next Memory Monitor" description="Show renderings from next memory monitor." category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zc_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.toggleOverwrite" commandName="Toggle Overwrite" description="Toggle overwrite mode" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zdPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.goto.textEnd" commandName="Text End" description="Go to the end of the text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zdfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.specific_content_assist.command" commandName="Content Assist" description="A parameterizable command that invokes content assist with a single completion proposal category" category="_eps0YvETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_ep3zdvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.specific_content_assist.category_id" name="type" optional="false"/>
+  </commands>
+  <commands xmi:id="_ep3zd_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.copy.qualified.name" commandName="Copy Qualified Name" description="Copy a fully qualified name to the system clipboard" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zePETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.write.access.in.project" commandName="Write Access in Project" description="Search for write references to the selected element in the enclosing project" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zefETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.adt.refactoring.extract.include" commandName="Extract as Include" description="Extract Views as Included Layout" category="_eps0WvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zevETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.showKeyAssist" commandName="Show Key Assist" description="Show the key assist dialog" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3ze_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.delete" commandName="Delete" description="Delete the selection" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zfPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.file.saveAs" commandName="Save As" description="Save the current contents to another location" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zffETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewChangeCredentials" commandName="Change Credentials" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zfvETEeGDEc9DxL1vVg" elementId="org.eclipse.search.ui.performTextSearchWorkspace" commandName="Find Text in Workspace" description="Searches the files in the workspace for specific text." category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zf_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.surround.with.try.multicatch" commandName="Surround with try/multi-catch Block" description="Surround the selected text with a try/multi-catch block" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zgPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.implementors.in.working.set" commandName="Implementors in Working Set" description="Search for implementors of the selected interface in a working set" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zgfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.JavaPerspective" commandName="Java" description="Show the Java perspective" category="_epsNQPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zgvETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.activateTask" commandName="Activate Task" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zg_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.deactivateAllTasks" commandName="Deactivate Task" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zhPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.openEditorDropDown" commandName="Quick Switch Editor" description="Open the editor drop down list" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zhfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.CreateTag" commandName="Create Tag" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zhvETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.ProfileLast" commandName="Profile" description="Launch in profile mode" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zh_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.changeToStatic" commandName="Quick Fix - Change to static access" description="Invokes quick assist and selects 'Change to static access'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3ziPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.index.ui.command.ResetIndex" commandName="Refresh Search Index" category="_eps0X_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zifETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.override.methods" commandName="Override/Implement Methods" description="Override or implement methods from super types" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zivETEeGDEc9DxL1vVg" elementId="org.eclipse.search.ui.performTextSearchFile" commandName="Find Text in File" description="Searches the files in the file for specific text." category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zi_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.references.in.workspace" commandName="References in Workspace" description="Search for references to the selected element in the workspace" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zjPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewPaste" commandName="Paste Repository Path or URI" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zjfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.paste" commandName="Paste" description="Paste from the clipboard" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zjvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.convertAnonymousToLocal.assist" commandName="Quick Assist - Convert anonymous to local class" description="Invokes quick assist and selects 'Convert anonymous to local class'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zj_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.previous" commandName="Previous" description="Navigate to the previous item" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zkPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.source.quickMenu" commandName="Show Source Quick Menu" description="Shows the source quick menu" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zkfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.Ignore" commandName="Ignore" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zkvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewCopyPath" commandName="Copy Path to Clipboard" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zk_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.toggleBreadcrumb" commandName="Toggle Java Editor Breadcrumb" description="Toggle the Java editor breadcrumb" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep3zlPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.open.call.hierarchy" commandName="Open Call Hierarchy" description="Open a call hierarchy on the selected element" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4agPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewCreateTag" commandName="Create Tag..." category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4agfETEeGDEc9DxL1vVg" elementId="org.eclipse.m2e.actions.LifeCycleInstall.run" commandName="Run Maven Install" description="Run Maven Install" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4agvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.RemoveFromIndex" commandName="Remove from Git Index" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4ag_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.extractConstant.assist" commandName="Quick Assist - Extract constant" description="Invokes quick assist and selects 'Extract constant'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4ahPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.goto.lineUp" commandName="Line Up" description="Go up one line of text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4ahfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.file.newQuickMenu" commandName="New menu" description="Open the New menu" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4ahvETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.context.ui.commands.attachment.retrieveContext" commandName="Retrieve Context Attachment" category="_eps0aPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4ah_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.deleteNext" commandName="Delete Next" description="Delete the next character" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4aiPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.deleteNextWord" commandName="Delete Next Word" description="Delete the next word" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4aifETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.wikitext.tasks.ui.editor.folding.auto" commandName="Toggle Active Folding" description="Toggle Active Folding" category="_eps0VPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4aivETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.write.access.in.working.set" commandName="Write Access in Working Set" description="Search for write references to the selected element in a working set" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4ai_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.undo" commandName="Undo" description="Undo the last operation" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4ajPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.back" commandName="Back" description="Navigate back" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4ajfETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.DebugLast" commandName="Debug" description="Launch in debug mode" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4ajvETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.bugs.commands.newTaskFromMarker" commandName="New Task from Marker..." description="Report as Bug from Marker" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4aj_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.markTaskRead" commandName="Mark Task Read" category="_eps0X_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4akPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.editors.lineNumberToggle" commandName="Show Line Numbers" description="Toggle display of line numbers" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4akfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.context.ui.commands.task.attachContext" commandName="Attach Context" category="_eps0aPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4akvETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.ToggleStepFilters" commandName="Use Step Filters" description="Toggles enablement of debug step filters" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4ak_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesLinkWithSelection" commandName="Link with Selection" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4alPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.read.access.in.workspace" commandName="Read Access in Workspace" description="Search for read references to the selected element in the workspace" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4alfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.renameInFile.assist" commandName="Quick Assist - Rename in file" description="Invokes quick assist and selects 'Rename in file'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4alvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.newEditor" commandName="New Editor" description="Open another editor on the active editor's input" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4al_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.Fetch" commandName="Fetch" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4amPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.org.eclipse.egit.ui.AbortRebase" commandName="Abort Rebase" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4amfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.SetQuickdiffBaseline" commandName="Set quickdiff baseline" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep4amvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.goto.wordPrevious" commandName="Previous Word" description="Go to the previous word" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BkPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.ShowBlame" commandName="Show Annotations" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BkfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewDelete" commandName="Delete Repository" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BkvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.recenter" commandName="Recenter" description="Recenter the window based on the cursor" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5Bk_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.help.installationDialog" commandName="Installation Information" description="Open the installation dialog" category="_eps0Z_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BlPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.Pull" commandName="Pull" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BlfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.CompareWithIndex" commandName="Compare with Git Index" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BlvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.shiftRight" commandName="Shift Right" description="Shift a block of text to the right" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5Bl_ETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xml.ui.nextSibling" commandName="Next Sibling" description="Go to Next Sibling" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BmPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.builds.ui.commands.CopyDetails" commandName="Copy Details" category="_eps0UPETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_ep5BmfETEeGDEc9DxL1vVg" elementId="kind" name="Kind"/>
+    <parameters xmi:id="_ep5BmvETEeGDEc9DxL1vVg" elementId="element" name="Element"/>
+  </commands>
+  <commands xmi:id="_ep5Bm_ETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.tag" commandName="Tag as Version" description="Tag the resources with a CVS version tag" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BnPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.file.refresh" commandName="Refresh" description="Refresh the selected items" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BnfETEeGDEc9DxL1vVg" elementId="org.eclipse.gef.ui.palette_view" commandName="Palette" category="_eps0UvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BnvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.Merge" commandName="Merge" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5Bn_ETEeGDEc9DxL1vVg" elementId="org.eclipse.search.ui.performTextSearchWorkingSet" commandName="Find Text in Working Set" description="Searches the files in the working set for specific text." category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BoPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.add.unimplemented.constructors" commandName="Generate Constructors from Superclass" description="Evaluate and add constructors from superclass" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BofETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.references.in.working.set" commandName="References in Working Set" description="Search for references to the selected element in a working set" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BovETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.delete.line.to.end" commandName="Delete to End of Line" description="Delete to the end of a line of text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5Bo_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.CreateBranch" commandName="Create Branch" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BpPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.move.element" commandName="Move - Refactoring " description="Move the selected element to a new location" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BpfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.deactivateSelectedTask" commandName="Deactivate Selected Task" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BpvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.nextEditor" commandName="Next Editor" description="Switch to the next editor" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5Bp_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.introduce.factory" commandName="Introduce Factory" description="Introduce a factory method to encapsulate invocation of the selected constructor" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BqPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.ShowInReflog" commandName="Reflog" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BqfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.ShowBlame" commandName="Show Annotations" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BqvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.forward" commandName="Forward" description="Navigate forward" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5Bq_ETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xml.ui.cmnd.contentmodel.sych" commandName="Synch" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BrPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.goto.pageUp" commandName="Page Up" description="Go up one page" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BrfETEeGDEc9DxL1vVg" elementId="sed.tabletree.collapseAll" commandName="Collapse All" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5BrvETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.updateSwitch" commandName="Switch to Another Branch or Version" description="Switch to Another Branch or Version" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5Br_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.replace.invocations" commandName="Replace Invocations" description="Replace invocations of the selected method" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5ooPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.OpenRunConfigurations" commandName="Run..." description="Open run launch configuration dialog" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5oofETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.AssumeUnchanged" commandName="Assume Unchanged" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5oovETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.commands.showElementInTypeHierarchyView" commandName="Show Java Element Type Hierarchy" description="Show a Java element in the Type Hierarchy view" category="_eps0a_ETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_ep5oo_ETEeGDEc9DxL1vVg" elementId="elementRef" name="Java element reference" typeId="org.eclipse.jdt.ui.commands.javaElementReference" optional="false"/>
+  </commands>
+  <commands xmi:id="_ep5opPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.deletePreviousWord" commandName="Delete Previous Word" description="Delete the previous word" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5opfETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.toggle.comment" commandName="Toggle Comment" description="Toggle Comment" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5opvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.deletePrevious" commandName="Delete Previous" description="Delete the previous character" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5op_ETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.SkipAllBreakpoints" commandName="Skip All Breakpoints" description="Sets whether or not any breakpoint should suspend execution" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5oqPETEeGDEc9DxL1vVg" elementId="org.eclipse.recommenders.completion.rcp.chain.commands.TriggerCompletion" commandName="Trigger Chain Completion Command" category="_eps0ZPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5oqfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.extractLocalNotReplaceOccurrences.assist" commandName="Quick Assist - Extract local variable" description="Invokes quick assist and selects 'Extract local variable'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5oqvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.set.mark" commandName="Set Mark" description="Set the mark" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5oq_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ltk.ui.refactor.show.refactoring.history" commandName="Open Refactoring History " description="Opens the refactoring history" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5orPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.RenameBranch" commandName="Rename Branch" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5orfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.OpenCommit" commandName="Open Git Commit" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5orvETEeGDEc9DxL1vVg" elementId="org.eclipse.epp.mpc.ui.command.showMarketplaceWizard" commandName="Eclipse Marketplace" description="Show the Eclipse Marketplace wizard" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5or_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.AddToIndex" commandName="Add to Git Index" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5osPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.file.exit" commandName="Exit" description="Exit the application" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5osfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.ConfigurePush" commandName="Configure Upstream Push" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5osvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.customizePerspective" commandName="Customize Perspective" description="Customize the current perspective" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5os_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.showInQuickMenu" commandName="Show In..." description="Open the Show In menu" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5otPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.read.access.in.hierarchy" commandName="Read Access in Hierarchy" description="Search for read references of the selected element in its hierarchy" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5otfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.ide.deleteCompleted" commandName="Delete Completed Tasks" description="Delete the tasks marked as completed" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5otvETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.DebugPerspective" commandName="Debug" description="Open the debug perspective" category="_epsNQPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5ot_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.change.type" commandName="Generalize Declared Type" description="Change the declaration of a selected variable to a more general type consistent with usage" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5ouPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.rename" commandName="Rename" description="Rename the selected item" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5oufETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.CheckoutCommand" commandName="Checkout" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5ouvETEeGDEc9DxL1vVg" elementId="org.eclipse.ltk.ui.refactoring.commands.deleteResources" commandName="Delete Resources" description="Delete the selected resources and notify LTK participants." category="_eps0avETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5ou_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.maximizePart" commandName="Maximize Part" description="Maximize Part" category="_eps0WfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5ovPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.next" commandName="Next" description="Navigate to the next item" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5ovfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.builds.ui.command.NewTaskFromBuild" commandName="New Task From Build" category="_eps0UPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep5ovvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.show.outline" commandName="Quick Outline" description="Show the quick outline for the editor input" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep6PsPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.previousTask" commandName="Previous Task Command" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IMPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.project.buildAutomatically" commandName="Build Automatically" description="Toggle the workspace build automatically function" category="_eps0UfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IMfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.references.in.project" commandName="References in Project" description="Search for references to the selected element in the enclosing project" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IMvETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.adt.refactoring.unwrap" commandName="Remove Container" description="Unwraps Views From Their Container" category="_eps0WvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IM_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.occurrences.in.file" commandName="Search All Occurrences in File" description="Search for all occurrences of the selected element in its declaring file" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_INPETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.structure.select.last" commandName="Restore Last Selection" description="Restore last selection" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_INfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.open.implementation" commandName="Open Implementation" description="Opens the Implementations of a method in its hierarchy" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_INvETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.wikitext.ui.editor.showCheatSheetCommand" commandName="Show Markup Cheat Sheet" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IN_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.declarations.in.workspace" commandName="Declaration in Workspace" description="Search for declarations of the selected element in the workspace" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IOPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.internal.reflog.OpenInCommitViewerCommand" commandName="Open in Commit Viewer" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IOfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.select.lineUp" commandName="Select Line Up" description="Extend the selection to the previous line of text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IOvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.read.access.in.project" commandName="Read Access in Project" description="Search for read references to the selected element in the enclosing project" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IO_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.ShowHistory" commandName="Show in History" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IPPETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.replaceWithTag" commandName="Replace With Another Branch or Version" description="Replace with Branch or Version on the CVS Server" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IPfETEeGDEc9DxL1vVg" elementId="org.eclipse.compare.compareWithOther" commandName="Compare With Other Resource" description="Compare resources, clipboard contents or editors" category="_eps0afETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IPvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.junit.junitShortcut.rerunFailedFirst" commandName="Rerun JUnit Test - Failures First" description="Rerun JUnit Test - Failures First" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IP_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.select.last" commandName="Restore Last Selection" description="Restore last selection" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IQPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.browser.openBundleResource" commandName="Open Resource in Browser" description="Opens a bundle resource in the default web browser." category="_epsNQvETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_ep_IQfETEeGDEc9DxL1vVg" elementId="plugin" name="Plugin"/>
+    <parameters xmi:id="_ep_IQvETEeGDEc9DxL1vVg" elementId="path" name="Path"/>
+  </commands>
+  <commands xmi:id="_ep_IQ_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.stash.apply" commandName="Apply Stashed Changes" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IRPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.Push" commandName="Push" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IRfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.ContinueRebase" commandName="Continue Rebase" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IRvETEeGDEc9DxL1vVg" elementId="org.eclipse.compare.copyAllLeftToRight" commandName="Copy All from Left to Right" description="Copy All Changes from Left to Right" category="_eps0afETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IR_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.toggleShowWhitespaceCharacters" commandName="Show Whitespace Characters" description="Shows whitespace characters in current text editor" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_ISPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.preferences" commandName="Preferences" description="Open the preferences dialog" category="_epsNQvETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_ep_ISfETEeGDEc9DxL1vVg" elementId="preferencePageId" name="Preference Page"/>
+  </commands>
+  <commands xmi:id="_ep_ISvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.selectAll" commandName="Select All" description="Select all" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_IS_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.file.close" commandName="Close" description="Close the active editor" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_ITPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.internal.reflog.CopyCommand" commandName="Copy" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_ITfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.newWizard" commandName="New" description="Open the New item wizard" category="_eps0VfETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_ep_vQPETEeGDEc9DxL1vVg" elementId="newWizardId" name="New Wizard"/>
+  </commands>
+  <commands xmi:id="_ep_vQfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.goToPreviousUnread" commandName="Go To Previous Unread Task" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vQvETEeGDEc9DxL1vVg" elementId="org.eclipse.help.ui.ignoreMissingPlaceholders" commandName="Do not warn of missing documentation" description="Sets the help preferences to no longer report a warning about the current set of missing documents." category="_eps0Z_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vQ_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.inline" commandName="Inline" description="Inline a constant, local variable or method" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vRPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.help.tipsAndTricksAction" commandName="Tips and Tricks" description="Open the tips and tricks help page" category="_eps0Z_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vRfETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.showHistory" commandName="Show History" description="Show History" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vRvETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.wikitext.ui.convertToDocbookCommand" commandName="Generate Docbook" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vR_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.copy" commandName="Copy" description="Copy the selection to the clipboard" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vSPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.Revert" commandName="Revert Commit" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vSfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.declarations.in.project" commandName="Declaration in Project" description="Search for declarations of the selected element in the enclosing project" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vSvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewCreateBranch" commandName="Create Branch..." category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vS_ETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.RunToLine" commandName="Run to Line" description="Resume and break when execution reaches the current line" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vTPETEeGDEc9DxL1vVg" elementId="org.eclipse.ant.ui.openExternalDoc" commandName="Open External Documentation" description="Open the External documentation for the current task in the Ant editor" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vTfETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xml.ui.gotoMatchingTag" commandName="Matching Tag" description="Go to Matching Tag" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vTvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.JavaHierarchyPerspective" commandName="Java Type Hierarchy" description="Show the Java Type Hierarchy perspective" category="_epsNQPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vT_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.infer.type.arguments" commandName="Infer Generic Type Arguments" description="Infer type arguments for references to generic classes and remove unnecessary casts" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vUPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.ide.copyConfigCommand" commandName="Copy Configuration Data To Clipboard" description="Copies the configuration data (system properties, installed bundles, etc) to the clipboard." category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vUfETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.Restart" commandName="Restart" description="Restart a process or debug target without terminating and re-launching" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vUvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.indent" commandName="Correct Indentation" description="Corrects the indentation of the selected lines" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vU_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.exception.occurrences" commandName="Search Exception Occurrences in File" description="Search for exception occurrences of a selected exception type" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vVPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.part.previousPage" commandName="Previous Page" description="Switch to the previous page" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vVfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.openResource" commandName="Open Resource" description="Open an editor on a particular resource" category="_eps0a_ETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_ep_vVvETEeGDEc9DxL1vVg" elementId="filePath" name="File Path" typeId="org.eclipse.ui.ide.resourcePath"/>
+  </commands>
+  <commands xmi:id="_ep_vV_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.Synchronize" commandName="Synchronize" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vWPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.commands.InstanceCount" commandName="Instance Count" description="View the instance count of the selected type loaded in the target VM" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vWfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.open.hierarchy" commandName="Quick Hierarchy" description="Show the quick hierarchy of the selected element" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vWvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.help.helpContents" commandName="Help Contents" description="Open the help contents" category="_eps0Z_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vW_ETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.format" commandName="Format" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vXPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.qualifyField" commandName="Quick Fix - Qualify field access" description="Invokes quick assist and selects 'Qualify field access'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vXfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.file.saveAll" commandName="Save All" description="Save all current contents" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vXvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.assignToLocal.assist" commandName="Quick Assist - Assign to local variable" description="Invokes quick assist and selects 'Assign to local variable'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vX_ETEeGDEc9DxL1vVg" elementId="org.eclipse.m2e.actions.LifeCycleClean.run" commandName="Run Maven Clean" description="Run Maven Clean" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_ep_vYPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.references.in.hierarchy" commandName="References in Hierarchy" description="Search for references of the selected element in its hierarchy" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqAWUPETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.format.document" commandName="Format" description="Format selection" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqAWUfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.select.textEnd" commandName="Select Text End" description="Select to the end of the text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqAWUvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.delete.line" commandName="Delete Line" description="Delete a line of text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqAWU_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.showViewMenu" commandName="Show View Menu" description="Show the view menu" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqAWVPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.folding.collapseComments" commandName="Collapse Comments" description="Collapse all comments" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqAWVfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.findIncremental" commandName="Incremental Find" description="Incremental find" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqAWVvETEeGDEc9DxL1vVg" elementId="org.eclipse.search.ui.performTextSearchProject" commandName="Find Text in Project" description="Searches the files in the project for specific text." category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqAWV_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewOpenProperties" commandName="Open Properties View" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqAWWPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.previousEditor" commandName="Previous Editor" description="Switch to the previous editor" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqAWWfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.commands.openElementInEditor" commandName="Open Java Element" description="Open a Java element in its editor" category="_eps0a_ETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqAWWvETEeGDEc9DxL1vVg" elementId="elementRef" name="Java element reference" typeId="org.eclipse.jdt.ui.commands.javaElementReference" optional="false"/>
+  </commands>
+  <commands xmi:id="_eqAWW_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.DeleteBranch" commandName="Delete Branch..." category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqAWXPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.maximizePart" commandName="Maximize Active View or Editor" description="Toggles maximize/restore state of active view or editor" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqAWXfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.ide.configureColumns" commandName="Configure Columns..." description="Configure the columns in the markers view" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqAWXvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.commands.AddClassPrepareBreakpoint" commandName="Add Class Load Breakpoint" description="Add a class load breakpoint" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqAWX_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.editors.revisions.id.toggle" commandName="Toggle Revision Id Display" description="Toggles the display of the revision id" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqAWYPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.folding.collapse_all" commandName="Collapse All" description="Collapses all folded regions" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqAWYfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.commit.CherryPick" commandName="Cherry Pick" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqI5MPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.perspectives.showPerspective" commandName="Show Perspective" description="Show a particular perspective" category="_epsNQPETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqI5MfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.perspectives.showPerspective.perspectiveId" name="Parameter"/>
+    <parameters xmi:id="_eqI5MvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.perspectives.showPerspective.newWindow" name="In New Window"/>
+  </commands>
+  <commands xmi:id="_eqI5M_ETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.eof" commandName="EOF" description="Send end of file" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqI5NPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.goto.matching.bracket" commandName="Go to Matching Bracket" description="Moves the cursor to the matching bracket" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqI5NfETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xml.ui.reload.dependencies" commandName="Reload Dependencies" description="Reload Dependencies" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqI5NvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.editors.quickdiff.revert" commandName="Revert Lines" description="Revert the current selection, block or deleted lines" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqI5N_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.previousSubTab" commandName="Previous Sub-Tab" description="Switch to the previous sub-tab" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqI5OPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.method.exits" commandName="Search Method Exit Occurrences in File" description="Search for method exit occurrences of a selected return type" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqI5OfETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xsd.ui.refactor.makeElementGlobal" commandName="Make Local Element &amp;Global" description="Promotes local element to global level and replaces its references" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqI5OvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.smartEnter" commandName="Insert Line Below Current Line" description="Adds a new line below the current line" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgQPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.goto.pageDown" commandName="Page Down" description="Go down one page" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgQfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.Reset" commandName="Reset" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgQvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.goto.windowStart" commandName="Window Start" description="Go to the start of the window" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgQ_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.goInto" commandName="Go Into" description="Navigate into the selected item" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgRPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.contentAssist.proposals" commandName="Content Assist" description="Content Assist" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgRfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.folding.expand_all" commandName="Expand All" description="Expands all folded regions" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgRvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.nextTab" commandName="Next Tab" description="Switch to the next tab" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgR_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.Discard" commandName="Replace with File in Git Index" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgSPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.ide.OpenMarkersView" commandName="Open Another" description="Open another view" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgSfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.markTaskIncomplete" commandName="Mark Task Incomplete" category="_eps0X_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgSvETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.Terminate" commandName="Terminate" description="Terminate" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgS_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.new.local.task" commandName="New Local Task" category="_eps0X_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgTPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.NoAssumeUnchanged" commandName="No Assume Unchanged" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgTfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.openTask" commandName="Open Task" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgTvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.select.windowEnd" commandName="Select Window End" description="Select to the end of the window" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgT_ETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.command.gotoaddress" commandName="Go to Address" description="Go to Address" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgUPETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.adt.refactoring.extract.string" commandName="Extract Android String" description="Extract Strings into Android String Resources" category="_eps0WvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgUfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.switchToEditor" commandName="Switch to Editor" description="Switch to an editor" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgUvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.command.shareProject" commandName="Share with Git" description="Share the project using Git" category="_eps0Y_ETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqJgU_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.command.projectNameParameter" name="Project" optional="false"/>
+  </commands>
+  <commands xmi:id="_eqJgVPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.Suspend" commandName="Suspend" description="Suspend" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgVfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.previousView" commandName="Previous View" description="Switch to the previous view" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgVvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.write.access.in.hierarchy" commandName="Write Access in Hierarchy" description="Search for write references of the selected element in its hierarchy" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgV_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.linkWithEditor" commandName="Toggle Link with Editor " description="Toggles linking of a view's selection with the active editor's selection" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqJgWPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.commands.showElementInPackageView" commandName="Show Java Element in Package Explorer" description="Select Java element in the Package Explorer view" category="_eps0a_ETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqKHUPETEeGDEc9DxL1vVg" elementId="elementRef" name="Java element reference" typeId="org.eclipse.jdt.ui.commands.javaElementReference" optional="false"/>
+  </commands>
+  <commands xmi:id="_eqKHUfETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.closeRendering" commandName="Close Rendering" description="Close the selected rendering." category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHUvETEeGDEc9DxL1vVg" elementId="org.eclipse.team.ui.synchronizeAll" commandName="Synchronize..." description="Synchronize resources in the workspace with another location" category="_eps0ZvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHU_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.help.displayHelp" commandName="Display Help" description="Display a Help topic" category="_eps0Z_ETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqKHVPETEeGDEc9DxL1vVg" elementId="href" name="Help topic href"/>
+  </commands>
+  <commands xmi:id="_eqKHVfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.navigate.open.type" commandName="Open Type" description="Open a type in a Java editor" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHVvETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.open.file.from.source" commandName="Open Selection" description="Open an editor on the selected link" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHV_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.previousPerspective" commandName="Previous Perspective" description="Switch to the previous perspective" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHWPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.junit.junitShortcut.debug" commandName="Debug JUnit Test" description="Debug JUnit Test" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHWfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.Branch" commandName="Branch" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHWvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.project.closeProject" commandName="Close Project" description="Close the selected project" category="_eps0UfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHW_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.context.ui.commands.task.clearContext" commandName="Clear Context" category="_eps0aPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHXPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.assignParamToField.assist" commandName="Quick Assist - Assign parameter to field" description="Invokes quick assist and selects 'Assign parameter to field'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHXfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.markTaskUnread" commandName="Mark Task Unread" category="_eps0X_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHXvETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.commitAll" commandName="Commit All Outgoing Changes" description="Commit all outgoing changes to the repository" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHX_ETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.cvsPerspective" commandName="CVS Repository Exploring" description="Open the CVS Repository Exploring Perspective" category="_epsNQPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHYPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.FetchGerritChange" commandName="Fetch From Gerrit" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHYfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.folding.expand" commandName="Expand" description="Expands the folded region at the current selection" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHYvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.junit.junitShortcut.rerunLast" commandName="Rerun JUnit Test" description="Rerun JUnit Test" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHY_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewRemove" commandName="Remove Repository" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHZPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.builds.ui.command.ShowBuildOutput" commandName="Show Build Output" category="_eps0UPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHZfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.navigate.java.open.structure" commandName="Open Structure" description="Show the structure of the selected element" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHZvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.goto.lineStart" commandName="Line Start" description="Go to the start of the line of text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHZ_ETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xsd.ui.refactor.rename.element" commandName="&amp;Rename XSD element" description="Rename XSD element" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHaPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.junit.gotoTest" commandName="Referring Tests" description="Referring Tests" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKHafETEeGDEc9DxL1vVg" elementId="org.eclipse.help.ui.closeTray" commandName="Close User Assistance Tray" description="Close the user assistance tray containing context help information and cheat sheets." category="_eps0Z_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKuYPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.project.properties" commandName="Properties" description="Display the properties of the selected item's project " category="_eps0UfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKuYfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.toggleBlockSelectionMode" commandName="Toggle Block Selection" description="Toggle block / column selection in the current text editor" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKuYvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.file.save" commandName="Save" description="Save the current contents" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKuY_ETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.checkout" commandName="Checkout from CVS" description="Checkout from CVS" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKuZPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.CompareWithWorkingTree" commandName="Compare with Working Tree" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKuZfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.context.ui.commands.task.copyContext" commandName="Copy Context" category="_eps0aPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKuZvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.file.closePart" commandName="Close Part" description="Close the active workbench part" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKuZ_ETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.ToggleWatchpoint" commandName="Toggle Watchpoint" description="Creates or removes a watchpoint" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKuaPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewConfigureBranch" commandName="Configure Branch" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKuafETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.compareWithRemote" commandName="Compare With Latest from Repository" description="Compare with Content on CVS Server" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKuavETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.OpenInCommitViewerCommand" commandName="Open in Commit Viewer" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKua_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.open.type.hierarchy" commandName="Open Type Hierarchy" description="Open a type hierarchy on the selected element" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKubPETEeGDEc9DxL1vVg" elementId="org.eclipse.ltk.ui.refactor.apply.refactoring.script" commandName="Apply Script" description="Perform refactorings from a refactoring script on the local workspace" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKubfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.viewSource.command" commandName="View Unformatted Text" category="_eps0X_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqKubvETEeGDEc9DxL1vVg" elementId="org.eclipse.gef.zoom_in" commandName="Zoom In" description="Zoom In" category="_eps0ZfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVcPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.correction.assist.proposals" commandName="Quick Fix" description="Suggest possible fixes for a problem" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVcfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.editors.revisions.rendering.cycle" commandName="Cycle Revision Coloring Mode" description="Cycles through the available coloring modes for revisions" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVcvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.commands.Watch" commandName="Watch" description="Create new watch expression" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVc_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.showRulerContextMenu" commandName="Show Ruler Context Menu" description="Show the context menu for the ruler" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVdPETEeGDEc9DxL1vVg" elementId="org.eclipse.wb.core.commands.empty" commandName="Empty command" description="Command which does nothing" category="_eps0WPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVdfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.minimizePart" commandName="Minimize Active View or Editor" description="Minimizes the active view or editor" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVdvETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.ToggleMethodBreakpoint" commandName="Toggle Method Breakpoint" description="Creates or removes a method breakpoint" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVd_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.activateSelectedTask" commandName="Activate Selected Task" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVePETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.part.nextPage" commandName="Next Page" description="Switch to the next page" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVefETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.ReplaceWithRef" commandName="Replace with branch, tag, or reference" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVevETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.delete.line.to.beginning" commandName="Delete to Beginning of Line" description="Delete to the beginning of a line of text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVe_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.backwardHistory" commandName="Backward History" description="Move backward in the editor navigation history" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVfPETEeGDEc9DxL1vVg" elementId="org.eclipse.m2e.core.ui.command.openPom" commandName="Open Maven POM" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVffETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.swap.mark" commandName="Swap Mark" description="Swap the mark with the cursor position" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVfvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.goto.previous.member" commandName="Go to Previous Member" description="Move the caret to the previous member of the compilation unit" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVf_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.commons.ui.command.AddRepository" commandName="Add Repository" category="_eps0YPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVgPETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.replaceWithRevision" commandName="Replace With Revision" description="Replace with Revision on CVS Server" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVgfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.project.buildProject" commandName="Build Project" description="Build the selected project" category="_eps0UfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVgvETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.compareWithRevision" commandName="Compare With Revision" description="Compare with Revision on CVS Server" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVg_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ant.ui.antShortcut.run" commandName="Run Ant Build" description="Run Ant Build" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVhPETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.add.block.comment" commandName="Add Block Comment" description="Add Block Comment" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVhfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.showSystemMenu" commandName="Show System Menu" description="Show the system menu" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVhvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.select.enclosing" commandName="Select Enclosing Element" description="Expand selection to include enclosing element" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVh_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.lowerCase" commandName="To Lower Case" description="Changes the selection to lower case" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLViPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.self.encapsulate.field" commandName="Encapsulate Field" description="Create getting and setting methods for the field and use only those to access the field" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVifETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.select.pageDown" commandName="Select Page Down" description="Select to the bottom of the page" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqLVivETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.newRendering" commandName="New Rendering" description="Add a new rendering." category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8gPETEeGDEc9DxL1vVg" elementId="org.eclipse.equinox.p2.ui.discovery.commands.ShowBundleCatalog" commandName="Show Bundle Catalog" category="_eps0Y_ETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqL8gfETEeGDEc9DxL1vVg" elementId="org.eclipse.equinox.p2.ui.discovery.commands.DirectoryParameter" name="Directory URL"/>
+    <parameters xmi:id="_eqL8gvETEeGDEc9DxL1vVg" elementId="org.eclipse.equinox.p2.ui.discovery.commands.TagsParameter" name="Tags"/>
+  </commands>
+  <commands xmi:id="_eqL8g_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.MergeTool" commandName="Merge Tool" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8hPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.SimplePush" commandName="Push to Upstream" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8hfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.open.hyperlink" commandName="Open Hyperlink" description="Opens the hyperlink at the caret location or opens a chooser if more than one hyperlink is available" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8hvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.OpenInTextEditorCommand" commandName="Open in Text Editor" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8h_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.openLocalFile" commandName="Open File..." description="Open a file" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8iPETEeGDEc9DxL1vVg" elementId="org.eclipse.compare.selectPreviousChange" commandName="Select Previous Change" description="Select Previous Change" category="_eps0afETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8ifETEeGDEc9DxL1vVg" elementId="org.eclipse.gef.zoom_out" commandName="Zoom Out" description="Zoom Out" category="_eps0ZfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8ivETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.toggleShowSelectedElementOnly" commandName="Show Selected Element Only" description="Show Selected Element Only" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8i_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.select.wordPrevious" commandName="Select Previous Word" description="Select the previous word" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8jPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.ToggleCoolbarAction" commandName="Toggle Toolbar Visibility" description="Toggles the visibility of the window toolbar" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8jfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.Reset" commandName="Reset" category="_eps0Y_ETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqL8jvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.ResetMode" name="Reset mode" optional="false"/>
+  </commands>
+  <commands xmi:id="_eqL8j_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.rename.element" commandName="Rename - Refactoring " description="Rename the selected element" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8kPETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.branch" commandName="Branch" description="Branch" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8kfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.commands.AddExceptionBreakpoint" commandName="Add Java Exception Breakpoint" description="Add a Java exception breakpoint" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8kvETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.context.ui.commands.interest.increment" commandName="Make Landmark" description="Make Landmark" category="_eps0aPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8k_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.CompareVersionsInTree" commandName="Compare in Tree" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8lPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.project.openProject" commandName="Open Project" description="Open a project" category="_eps0UfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8lfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.cut" commandName="Cut" description="Cut the selection to the clipboard" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8lvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.moveLineDown" commandName="Move Lines Down" description="Moves the selected lines down" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8l_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.findReplace" commandName="Find and Replace" description="Find and replace text" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8mPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.commands.StepIntoSelection" commandName="Step Into Selection" description="Step into the current selected statement" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8mfETEeGDEc9DxL1vVg" elementId="org.eclipse.quickdiff.toggle" commandName="Quick Diff Toggle" description="Toggles quick diff information display on the line number ruler" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8mvETEeGDEc9DxL1vVg" elementId="org.eclipse.team.ui.applyPatch" commandName="Apply Patch..." description="Apply a patch to one or more workspace projects." category="_eps0ZvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8m_ETEeGDEc9DxL1vVg" elementId="org.eclipse.compare.copyLeftToRight" commandName="Copy from Left to Right" description="Copy Current Change from Left to Right" category="_eps0afETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8nPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.new.subtask" commandName="New Subtask" category="_eps0X_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8nfETEeGDEc9DxL1vVg" elementId="org.eclipse.ltk.ui.refactoring.commands.moveResources" commandName="Move Resources" description="Move the selected resources and notify LTK participants." category="_eps0avETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqL8nvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewRenameBranch" commandName="Rename Branch..." category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjkPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.toggleInsertMode" commandName="Toggle Insert Mode" description="Toggle insert mode" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjkfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.open.editor" commandName="Open Declaration" description="Open an editor on the selected element" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjkvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.generate.constructor.using.fields" commandName="Generate Constructor using Fields" description="Choose fields to initialize and constructor from superclass to call " category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjk_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.goto.line" commandName="Go to Line" description="Go to a specified line of text" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjlPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewAddToIndex" commandName="Add to Index" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjlfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.nextSubTab" commandName="Next Sub-Tab" description="Switch to the next sub-tab" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjlvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.stash.create" commandName="Stash Changes" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjl_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewRemoveRemote" commandName="Delete Remote" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjmPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.builds.ui.command.NewTaskFromTest" commandName="New Task From Test" category="_eps0UPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjmfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.goto.columnPrevious" commandName="Previous Column" description="Go to the previous column" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjmvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.externaltools.ExternalToolMenuDelegateToolbar" commandName="Run Last Launched External Tool" description="Runs the last launched external Tool" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjm_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.Commit" commandName="Commit..." category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjnPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.quick.format" commandName="Format Element" description="Format enclosing text element" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjnfETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.remove.block.comment" commandName="Remove Block Comment" description="Remove Block Comment" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjnvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.addBookmark" commandName="Add Bookmark" description="Add a bookmark" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjn_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.task.clearOutgoing" commandName="Clear Outgoing Changes" category="_eps0X_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjoPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.select.lineStart" commandName="Select Line Start" description="Select to the beginning of the line of text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjofETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.CheckoutCommand" commandName="Checkout" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjovETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.cut.line.to.end" commandName="Cut to End of Line" description="Cut to the end of a line of text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjo_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.context.ui.commands.task.retrieveContext" commandName="Retrieve Context" category="_eps0aPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjpPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewAddRepository" commandName="Add a Git Repository" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjpfETEeGDEc9DxL1vVg" elementId="org.eclipse.equinox.p2.ui.sdk.update" commandName="Check for Updates" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjpvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.findIncrementalReverse" commandName="Incremental Find Reverse" description="Incremental find reverse" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjp_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.project.rebuildAll" commandName="Rebuild All" description="Rebuild all projects" category="_eps0UfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjqPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.activateEditor" commandName="Activate Editor" description="Activate the editor" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjqfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.organize.imports" commandName="Organize Imports" description="Evaluate all required imports and replace the current imports" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjqvETEeGDEc9DxL1vVg" elementId="org.eclipse.compare.copyAllRightToLeft" commandName="Copy All from Right to Left" description="Copy All Changes from Right to Left" category="_eps0afETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjq_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.PushCommit" commandName="Push Commit..." category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjrPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.generate.javadoc" commandName="Generate Javadoc" description="Generates Javadoc for a selectable set of Java resources" category="_eps0UfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjrfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.declarations.in.working.set" commandName="Declaration in Working Set" description="Search for declarations of the selected element in a working set" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjrvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.project.closeUnrelatedProjects" commandName="Close Unrelated Projects" description="Close unrelated projects" category="_eps0UfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqMjr_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.goto.lineDown" commandName="Line Down" description="Go down one line of text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKoPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.ToggleBreakpoint" commandName="Toggle Breakpoint" description="Creates or removes a breakpoint" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKofETEeGDEc9DxL1vVg" elementId="org.eclipse.compare.ignoreWhiteSpace" commandName="Ignore White Space" description="Ignore white space where applicable" category="_eps0afETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKovETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewConfigureGerritRemote" commandName="Gerrit Configuration..." category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKo_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.previousTab" commandName="Previous Tab" description="Switch to the previous tab" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKpPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.goToNextUnread" commandName="Go To Next Unread Task" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKpfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.gotoLastEditPosition" commandName="Last Edit Location" description="Last edit location" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKpvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.SkipRebase" commandName="Skip Rebase" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKp_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RebaseCurrent" commandName="Rebase" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKqPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.toggleMemoryMonitorsPane" commandName="Toggle Memory Monitors Pane" description="Toggle visibility of the Memory Monitors Pane" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKqfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.showToolTip" commandName="Show Tooltip Description" category="_eps0X_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKqvETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.openSelectedTask" commandName="Open Selected Task" category="_eps0X_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKq_ETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.ignore" commandName="Add to .cvsignore" description="Ignore the Selected Resources when Synchronizing" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKrPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.ide.copyBuildIdCommand" commandName="Copy Build Id To Clipboard" description="Copies the build id to the clipboard." category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKrfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.dialogs.openInputDialog" commandName="Open Input Dialog" description="Open an Input Dialog" category="_eps0XfETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqNKrvETEeGDEc9DxL1vVg" elementId="title" name="Title"/>
+    <parameters xmi:id="_eqNKr_ETEeGDEc9DxL1vVg" elementId="message" name="Message"/>
+    <parameters xmi:id="_eqNKsPETEeGDEc9DxL1vVg" elementId="initialValue" name="Initial Value"/>
+    <parameters xmi:id="_eqNKsfETEeGDEc9DxL1vVg" elementId="cancelReturns" name="Return Value on Cancel"/>
+  </commands>
+  <commands xmi:id="_eqNKsvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.ShowVersions" commandName="Open" category="_eps0Y_ETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqNKs_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.CompareMode" name="Compare mode"/>
+  </commands>
+  <commands xmi:id="_eqNKtPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.declarations.in.hierarchy" commandName="Declaration in Hierarchy" description="Search for declarations of the selected element in its hierarchy" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKtfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.attachment.open" commandName="Open Attachment" category="_eps0WfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKtvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.properties.NewPropertySheetCommand" commandName="Properties" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKt_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ant.ui.antShortcut.debug" commandName="Debug Ant Build" description="Debug Ant Build" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKuPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.return.continue.targets" commandName="Search break/continue Target Occurrences in File" description="Search for break/continue target occurrences of a selected target name" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKufETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.implementors.in.workspace" commandName="Implementors in Workspace" description="Search for implementors of the selected interface" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKuvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.collapseAll" commandName="Collapse All" description="Collapse the current tree" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKu_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.inlineLocal.assist" commandName="Quick Assist - Inline local variable" description="Invokes quick assist and selects 'Inline local variable'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKvPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.folding.toggle" commandName="Toggle Folding" description="Toggles folding in the current editor" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKvfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.submodule.update" commandName="Update Submodule" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNKvvETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xml.ui.referencedFileErrors" commandName="Show Details..." description="Show Details..." category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxsPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.move.inner.to.top.level" commandName="Move Type to New File" description="Move Type to New File" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxsfETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.quick_outline" commandName="Quick Outline" description="Show the quick outline for the editor input" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxsvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.commit.Revert" commandName="Revert Commit" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxs_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.comment" commandName="Comment" description="Turn the selected lines into Java comments" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxtPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.addNonNLS" commandName="Quick Fix - Add non-NLS tag" description="Invokes quick assist and selects 'Add non-NLS tag'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxtfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.format" commandName="Format" description="Format the selected text" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxtvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.commands.Display" commandName="Display" description="Display result of evaluating selected text" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxt_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewCreateRepository" commandName="Create a Repository" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxuPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.file.revert" commandName="Revert" description="Revert to the last saved state" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxufETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.folding.collapseMembers" commandName="Collapse Members" description="Collapse all members" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxuvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.gotoBreadcrumb" commandName="Show In Breadcrumb" description="Shows the Java editor breadcrumb and sets the keyboard focus into it" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxu_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.scroll.lineDown" commandName="Scroll Line Down" description="Scroll down one line of text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxvPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.clean.up" commandName="Clean Up" description="Solve problems and improve code style on selected resources" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxvfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.java.ui.editor.folding.auto" commandName="Toggle Active Folding" description="Toggle Active Folding" category="_eps0W_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxvvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.redo" commandName="Redo" description="Redo the last operation" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxv_ETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.StepInto" commandName="Step Into" description="Step into" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxwPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.SimpleFetch" commandName="Fetch from Upstream" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxwfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.commit.Checkout" commandName="Checkout" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxwvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.join.lines" commandName="Join Lines" description="Join lines of text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxw_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.scroll.lineUp" commandName="Scroll Line Up" description="Scroll up one line of text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxxPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.TerminateAndRelaunch" commandName="Terminate and Relaunch" description="Terminate and Relaunch" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxxfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.externalize.strings" commandName="Externalize Strings" description="Finds all strings that are not externalized and moves them into a separate property file" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxxvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.file.print" commandName="Print" description="Print" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxx_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.forwardHistory" commandName="Forward History" description="Move forward in the editor navigation history" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxyPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.breakpoint.properties" commandName="Java Breakpoint Properties" description="View and edit the properties for a given Java breakpoint" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxyfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.select.pageUp" commandName="Select Page Up" description="Select to the top of the page" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxyvETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.SynchronizeAll" commandName="Synchronize Changed" category="_eps0X_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxy_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.add.import" commandName="Add Import" description="Create import statement on selection" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxzPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.CompareWithPrevious" commandName="Compare with Previous Revision" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqNxzfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.extract.interface" commandName="Extract Interface" description="Extract a set of members into a new interface and try to use the new interface" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOYwPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.help.dynamicHelp" commandName="Dynamic Help" description="Open the dynamic help" category="_eps0Z_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOYwfETEeGDEc9DxL1vVg" elementId="org.eclipse.m2e.discovery.ui" commandName="m2e Marketplace" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOYwvETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.commit" commandName="Commit" description="Commit resources to the repository" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOYw_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.read.access.in.working.set" commandName="Read Access in Working Set" description="Search for read references to the selected element in a working set" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOYxPETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.RunLast" commandName="Run" description="Launch in run mode" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOYxfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.copyLineUp" commandName="Duplicate Lines" description="Duplicates the selected lines and leaves the selection unchanged" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOYxvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.addCast" commandName="Quick Fix - Add cast" description="Invokes quick assist and selects 'Add cast'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOYx_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.commit.CreateBranch" commandName="Create Branch..." category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOYyPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.refactor.quickMenu" commandName="Show Refactor Quick Menu" description="Shows the refactor quick menu" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOYyfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.removeFromWorkingSet" commandName="Remove From Working Set" description="Removes the selected object from a working set." category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOYyvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.javaAppletShortcut.debug" commandName="Debug Java Applet" description="Debug Java Applet" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOYy_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.localJavaShortcut.run" commandName="Run Java Application" description="Run Java Application" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOYzPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.ReplaceWithCommit" commandName="Replace with commit" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOYzfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.DeleteBranch" commandName="Delete Branch" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOYzvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesToggleBranchHierarchy" commandName="Toggle Branch Representation" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOYz_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.ApplyPatch" commandName="Apply Patch" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOY0PETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.markTaskComplete" commandName="Mark Task Complete" category="_eps0X_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOY0fETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.showRulerAnnotationInformation" commandName="Show Ruler Annotation Tooltip" description="Displays annotation information for the caret line in a focused hover" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOY0vETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.folding.collapse" commandName="Collapse" description="Collapses the folded region at the current selection" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOY0_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.navigate.gotopackage" commandName="Go to Package" description="Go to Package" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOY1PETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.structure.select.next" commandName="Select Next Element" description="Expand selection to include next sibling" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOY1fETEeGDEc9DxL1vVg" elementId="org.eclipse.equinox.p2.ui.sdk.install" commandName="Install New Software..." category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOY1vETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.nextView" commandName="Next View" description="Switch to the next view" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOY1_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.project.buildLast" commandName="Repeat Working Set Build" description="Repeat the last working set build" category="_eps0UfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOY2PETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.goto.textStart" commandName="Text Start" description="Go to the beginning of the text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOY2fETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.builds.ui.command.ShowTestResults" commandName="Show Test Results" category="_eps0UPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOY2vETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.junit.junitShortcut.run" commandName="Run JUnit Test" description="Run JUnit Test" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOY2_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.file.properties" commandName="Properties" description="Display the properties of the selected item" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqOY3PETEeGDEc9DxL1vVg" elementId="org.eclipse.search.ui.openSearchDialog" commandName="Open Search Dialog" description="Open the Search dialog" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqO_0PETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.actions.WatchCommand" commandName="Wa&amp;tch" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqO_0fETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.file.openWorkspace" commandName="Switch Workspace" description="Open the workspace selection dialog" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqO_0vETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.pull.up" commandName="Pull Up" description="Move members to a superclass" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqO_0_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.moveLineUp" commandName="Move Lines Up" description="Moves the selected lines up" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqO_1PETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.ide.configureFilters" commandName="Configure Contents..." description="Configure the filters to apply to the markers view" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqO_1fETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.assignToField.assist" commandName="Quick Assist - Assign to field" description="Invokes quick assist and selects 'Assign to field'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqO_1vETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.modify.method.parameters" commandName="Change Method Signature" description="Change method signature includes parameter names and parameter order" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqO_1_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.copyLineDown" commandName="Copy Lines" description="Duplicates the selected lines and moves the selection to the copy" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqO_2PETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.find.broken.nls.keys" commandName="Find Broken Externalized Strings" description="Finds undefined, duplicate and unused externalized string keys in property files" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqO_2fETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xsd.ui.refactor.renameTargetNamespace" commandName="Rename Target Namespace" description="Changes the target namespace of the schema" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqO_2vETEeGDEc9DxL1vVg" elementId="org.eclipse.m2e.actions.LifeCycleGenerateSources.run" commandName="Run Maven Generate Sources" description="Run Maven Generate Sources" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqO_2_ETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.cleanup.document" commandName="Cleanup Document..." description="Cleanup document" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqO_3PETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.uncomment" commandName="Uncomment" description="Uncomment the selected Java comment lines" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqO_3fETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.remove.occurrence.annotations" commandName="Remove Occurrence Annotations" description="Removes the occurrence annotations from the current editor" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqZ-8PETEeGDEc9DxL1vVg" elementId="org.eclipse.wb.core.commands.switch" commandName="Switch between Source/Design Views" description="Switch between the Source and Design views." category="_eps0WPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqZ-8fETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.addBlock.assist" commandName="Quick Assist - Replace statement with block" description="Invokes quick assist and selects 'Replace statement with block'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqZ-8vETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.goto.wordNext" commandName="Next Word" description="Go to the next word" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqZ-8_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.CherryPick" commandName="Cherry Pick" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqZ-9PETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.addLocation" commandName="Add Repository Location" description="Add a new CVS repository location" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqZ-9fETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.ConfigureUpstreamFetch" commandName="Configure Upstream Fetch" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqZ-9vETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.Merge" commandName="Merge" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqZ-9_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.up" commandName="Up" description="Navigate up one level" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqZ--PETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.introduce.parameter" commandName="Introduce Parameter" description="Introduce a new method parameter based on the selected expression" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqZ--fETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.splitJoinVariableDeclaration.assist" commandName="Quick Assist - Split/Join variable declaration" description="Invokes quick assist and selects 'Split/Join variable declaration'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqZ--vETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.ResetQuickdiffBaseline" commandName="Reset quickdiff baseline" category="_eps0Y_ETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqZ--_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.ResetQuickdiffBaselineTarget" name="Reset target (HEAD, HEAD^1)" optional="false"/>
+  </commands>
+  <commands xmi:id="_eqZ-_PETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.adt.refactoring.changeview" commandName="Change Widget Type" description="Changes the widget type for the selection" category="_eps0WvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqZ-_fETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.submodule.add" commandName="Add Submodule" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqZ-_vETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.openRemoteTask" commandName="Open Remote Task" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqZ-__ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.hideShowEditors" commandName="Toggle Editor Area Visibility" description="Toggles the visibility of the editor area" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqZ_APETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.closePerspective" commandName="Close Perspective" description="Close the current perspective" category="_epsNQvETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqZ_AfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.closePerspective.perspectiveId" name="Perspective Id"/>
+  </commands>
+  <commands xmi:id="_eqZ_AvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.project.rebuildProject" commandName="Rebuild Project" description="Rebuild the selected projects" category="_eps0UfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqZ_A_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.move" commandName="Move..." description="Move the selected item" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqZ_BPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.clear.mark" commandName="Clear Mark" description="Clear the mark" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqamAPETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.updateAll" commandName="Update All Incoming Changes" description="Update all incoming changes with new content from the repository" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqamAfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.addTaskRepository" commandName="Add Task Repository..." category="_eps0X_ETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqamAvETEeGDEc9DxL1vVg" elementId="connectorKind" name="Repository Type"/>
+  </commands>
+  <commands xmi:id="_eqamA_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.wikitext.ui.convertToHtmlCommand" commandName="Generate HTML" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqamBPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.generate.tostring" commandName="Generate toString()" description="Generates the toString() method for the type" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqamBfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.ReplaceWithHead" commandName="Replace with HEAD revision" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqamBvETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.OpenProfileConfigurations" commandName="Profile..." description="Open profile launch configuration dialog" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqamB_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.open.external.javadoc" commandName="Open Attached Javadoc" description="Open the attached Javadoc of the selected element in a browser" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqamCPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.cheatsheets.openCheatSheet" commandName="Open Cheat Sheet" description="Open a Cheat Sheet." category="_eps0Z_ETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqamCfETEeGDEc9DxL1vVg" elementId="cheatSheetId" name="Identifier"/>
+  </commands>
+  <commands xmi:id="_eqamCvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewOpen" commandName="Open" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqamC_ETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesToggleBranchCommit" commandName="Toggle Latest Branch Commit" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqamDPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.contentAssist.contextInformation" commandName="Context Information" description="Show Context Information" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqamDfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.CompareVersions" commandName="Compare with each other" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqamDvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.browser.openBrowser" commandName="Open Browser" description="Opens the default web browser." category="_epsNQvETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqamD_ETEeGDEc9DxL1vVg" elementId="url" name="URL"/>
+    <parameters xmi:id="_eqamEPETEeGDEc9DxL1vVg" elementId="browserId" name="Browser Id"/>
+    <parameters xmi:id="_eqamEfETEeGDEc9DxL1vVg" elementId="name" name="Browser Name"/>
+    <parameters xmi:id="_eqamEvETEeGDEc9DxL1vVg" elementId="tooltip" name="Browser Tooltip"/>
+  </commands>
+  <commands xmi:id="_eqamE_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.generate.hashcode.equals" commandName="Generate hashCode() and equals()" description="Generates hashCode() and equals() methods for the type" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqamFPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.introduce.indirection" commandName="Introduce Indirection" description="Introduce an indirection to encapsulate invocations of a selected method" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqamFfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.navigate.gototype" commandName="Go to Type" description="Go to Type" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqamFvETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.wikitext.ui.convertToEclipseHelpCommand" commandName="Generate Eclipse Help (*.html and *-toc.xml)" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqamF_ETEeGDEc9DxL1vVg" elementId="org.eclipse.m2e.core.ui.command.addDependency" commandName="Add Maven Dependency" description="Add Maven Dependency" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqamGPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.select.columnNext" commandName="Select Next Column" description="Select the next column" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqamGfETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.goto.matching.bracket" commandName="Matching Character" description="Go to Matching Character" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqcbMPETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.merge" commandName="Merge" description="Merge" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqcbMfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.upperCase" commandName="To Upper Case" description="Changes the selection to upper case" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqcbMvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.localJavaShortcut.debug" commandName="Debug Java Application" description="Debug Java Application" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqcbM_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.context.ui.commands.focus.view" commandName="Focus View" category="_eps0Y_ETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqcbNPETEeGDEc9DxL1vVg" elementId="viewId" name="View ID to Focus" optional="false"/>
+  </commands>
+  <commands xmi:id="_eqcbNfETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.DropToFrame" commandName="Drop to Frame" description="Drop to Frame" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqcbNvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewNewRemote" commandName="Create Remote..." category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqcbN_ETEeGDEc9DxL1vVg" elementId="org.eclipse.search.ui.openFileSearchPage" commandName="File Search" description="Open the Search dialog's file search page" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqcbOPETEeGDEc9DxL1vVg" elementId="org.eclipse.team.ui.synchronizeLast" commandName="Repeat last synchronization" description="Repeat the last synchronization" category="_eps0ZvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqcbOfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.extract.local.variable" commandName="Extract Local Variable" description="Extracts an expression into a new local variable and uses the new local variable" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCQPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.history.CreatePatch" commandName="Create Patch" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCQfETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.generate.xml" commandName="&amp;XML File..." category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCQvETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.xml.ui.previousSibling" commandName="Previous Sibling" description="Go to Previous Sibling" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCQ_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.select.previous" commandName="Select Previous Element" description="Expand selection to include previous sibling" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCRPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.builds.ui.command.RunBuild" commandName="Run Build" category="_eps0UPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCRfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.goto.columnNext" commandName="Next Column" description="Go to the next column" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCRvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.extract.class" commandName="Extract Class..." description="Extracts fields into a new class" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCR_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.searchForTask" commandName="Search Repository for Task" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCSPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.selectWorkingSets" commandName="Select Working Sets" description="Select the working sets that are applicable for this window." category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCSfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.help.aboutAction" commandName="About" description="Open the about dialog" category="_eps0Z_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCSvETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.context.ui.commands.interest.decrement" commandName="Make Less Interesting" description="Make Less Interesting" category="_eps0aPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCS_ETEeGDEc9DxL1vVg" elementId="org.eclipse.compare.copyRightToLeft" commandName="Copy from Right to Left" description="Copy Current Change from Right to Left" category="_eps0afETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCTPETEeGDEc9DxL1vVg" elementId="org.eclipse.m2e.core.pomFileAction.run" commandName="Run Maven Build" description="Run Maven Build" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCTfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.wikitext.ui.quickOutlineCommand" commandName="Quick Outline" description="Open a popup dialog with a quick outline of the current document" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCTvETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.command.configureTrace" commandName="Configure Git Debug Trace" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCT_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.extract.method" commandName="Extract Method" description="Extract a set of statements or an expression into a new method and use the new method" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCUPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.CompareWithRevision" commandName="Compare with History" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCUfETEeGDEc9DxL1vVg" elementId="org.eclipse.compare.selectNextChange" commandName="Select Next Change" description="Select Next Change" category="_eps0afETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCUvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.newWindow" commandName="New Window" description="Open another window" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCU_ETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.RemoveAllBreakpoints" commandName="Remove All Breakpoints" description="Removes all breakpoints" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCVPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.showResourceByPath" commandName="Show Resource in Navigator" description="Show a resource in the Navigator given its path" category="_eps0a_ETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqdCVfETEeGDEc9DxL1vVg" elementId="resourcePath" name="Resource Path" typeId="org.eclipse.ui.ide.resourcePath" optional="false"/>
+  </commands>
+  <commands xmi:id="_eqdCVvETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.adt.refactoring.convert" commandName="Change Layout" description="Converts Layouts from One Type to Another" category="_eps0WvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCV_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.addImport" commandName="Quick Fix - Add import" description="Invokes quick assist and selects 'Add import'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdCWPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.extractLocal.assist" commandName="Quick Assist - Extract local variable (replace all occurrences)" description="Invokes quick assist and selects 'Extract local variable (replace all occurrences)'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdpUPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.introduce.parameter.object" commandName="Introduce Parameter Object" description="Introduce a parameter object to a selected method" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdpUfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.shiftLeft" commandName="Shift Left" description="Shift a block of text to the left" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdpUvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.create.delegate.methods" commandName="Generate Delegate Methods" description="Add delegate methods for a type's fields" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdpU_ETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.search.find.occurrences" commandName="Occurrences in File" description="Find occurrences of the selection in the file" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdpVPETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.showAnnotation" commandName="Show Annotation" description="Show Annotation" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdpVfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.project.cleanAction" commandName="Build Clean" description="Discard old built state" category="_eps0UfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdpVvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.addThrowsDecl" commandName="Quick Fix - Add throws declaration" description="Invokes quick assist and selects 'Add throws declaration'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdpV_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.activeContextInfo" commandName="Show activeContext Info" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdpWPETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.replace" commandName="Replace With Latest from Repository" description="Replace with last committed content from CVS Server" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdpWfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.builds.ui.commands.OpenBuildElement" commandName="Open Build Element" category="_eps0UPETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqdpWvETEeGDEc9DxL1vVg" elementId="element" name="Element"/>
+  </commands>
+  <commands xmi:id="_eqdpW_ETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.compareWithTag" commandName="Compare With Another Branch or Version" description="Compare with a Branch or a Version on the CVS Server" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdpXPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.findNext" commandName="Find Next" description="Find next item" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdpXfETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.adt.refactoring.extract.style" commandName="Extract Styles" description="Extract Styles" category="_eps0WvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdpXvETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.Disconnect" commandName="Disconnect" description="Disconnect" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdpX_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.addSuppressWarnings" commandName="Quick Fix - Add @SuppressWarnings" description="Invokes quick fix and selects 'Add @SuppressWarnings' " category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdpYPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.commit.CreateTag" commandName="Create Tag..." category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqdpYfETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.structure.select.previous" commandName="Select Previous Element" description="Expand selection to include previous sibling" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqhTsPETEeGDEc9DxL1vVg" elementId="org.eclipse.m2e.actions.LifeCycleTest.run" commandName="Run Maven Test" description="Run Maven Test" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqhTsfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.create.getter.setter" commandName="Generate Getters and Setters" description="Generate Getter and Setter methods for type's fields" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqhTsvETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.setKeywordSubstitution" commandName="Change ASCII/Binary Property" description="Change whether the selected resources should be treated as ASCII or binary on the CVS Server" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqhTs_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.select.windowStart" commandName="Select Window Start" description="Select to the start of the window" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqhTtPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.internal.reflog.CheckoutCommand" commandName="Checkout" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqhTtfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.refactor.migrate.jar" commandName="Migrate JAR File" description="Migrate a JAR File to a new version" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqhTtvETEeGDEc9DxL1vVg" elementId="org.eclipse.wst.sse.ui.outline.customFilter" commandName="&amp;Filters" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqhTt_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.open.super.implementation" commandName="Open Super Implementation" description="Open the Implementation in the Super Type" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqhTuPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.help.quickStartAction" commandName="Welcome" description="Show help for beginning users" category="_eps0Z_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqhTufETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.addTask" commandName="Add Task..." description="Add a task" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqhTuvETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.task.ui.editor.QuickOutline" commandName="Quick Outline" description="Show the quick outline for the editor input" category="_eps0X_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqhTu_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.closeAllPerspectives" commandName="Close All Perspectives" description="Close all open perspectives" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh6wPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.editors.quickdiff.revertLine" commandName="Revert Line" description="Revert the current line" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh6wfETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.command.prevpage" commandName="Previous Page of Memory" description="Load previous page of memory" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh6wvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.findPrevious" commandName="Find Previous" description="Find previous item" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh6w_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.push.down" commandName="Push Down" description="Move members to subclasses" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh6xPETEeGDEc9DxL1vVg" elementId="org.eclipse.ant.ui.toggleMarkOccurrences" commandName="Toggle Ant Mark Occurrences" description="Toggles mark occurrences in Ant editors" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh6xfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView" commandName="Show View" description="Shows a particular view" category="_eps0UvETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqh6xvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.viewId" name="View"/>
+    <parameters xmi:id="_eqh6x_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.secondaryId" name="Secondary Id"/>
+    <parameters xmi:id="_eqh6yPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.views.showView.makeFast" name="As FastView"/>
+  </commands>
+  <commands xmi:id="_eqh6yfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.extract.superclass" commandName="Extract Superclass" description="Extract a set of members into a new superclass and try to use the new superclass" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh6yvETEeGDEc9DxL1vVg" elementId="org.eclipse.ltk.ui.refactor.create.refactoring.script" commandName="Create Script" description="Create a refactoring script from refactorings on the local workspace" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh6y_ETEeGDEc9DxL1vVg" elementId="org.eclipse.m2e.core.ui.command.addPlugin" commandName="Add Maven Plugin" description="Add Maven Plugin" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh6zPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.delimiter.windows" commandName="Convert Line Delimiters to Windows (CRLF, \r\n, 0D0A, &#xa4;&#xb6;)" description="Converts the line delimiters to Windows (CRLF, \r\n, 0D0A, &#xa4;&#xb6;)" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh6zfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.cut.line" commandName="Cut Line" description="Cut a line of text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh6zvETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.adt.refactoring.wrapin" commandName="Wrap in Container" description="Wraps Views in a New Container" category="_eps0WvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh6z_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.select.columnPrevious" commandName="Select Previous Column" description="Select the previous column" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh60PETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.file.closeAll" commandName="Close All" description="Close all editors" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh60fETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.cut.line.to.beginning" commandName="Cut to Beginning of Line" description="Cut to the beginning of a line of text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh60vETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.promote.local.variable" commandName="Convert Local Variable to Field" description="Convert a local variable to a field" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh60_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.select.wordNext" commandName="Select Next Word" description="Select the next word" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh61PETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.goToResource" commandName="Go to" description="Go to a particular resource in the active view" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh61fETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.spy" commandName="Show Contributing Plug-in" description="Shows contribution information for the currently selected element" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqh61vETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.submodule.sync" commandName="Sync Submodule" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih0PETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.quickAccess" commandName="Quick Access" description="Quickly access UI elements" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih0fETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.team.CompareIndexWithHead" commandName="Compare File in Git Index with HEAD Revision" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih0vETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.StepReturn" commandName="Step Return" description="Step return" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih0_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.addToWorkingSet" commandName="Add to Working Set" description="Adds the selected object to a working set." category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih1PETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.goto.next.member" commandName="Go to Next Member" description="Move the caret to the next member of the compilation unit" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih1fETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.select.next" commandName="Select Next Element" description="Expand selection to include next sibling" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih1vETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.markTaskReadGoToNextUnread" commandName="Mark Task Read and Go To Next Unread Task" category="_eps0X_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih1_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.goto.lineEnd" commandName="Line End" description="Go to the end of the line of text" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih2PETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.commands.ForceReturn" commandName="Force Return" description="Forces return from method with value of selected expression " category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih2fETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.remove.block.comment" commandName="Remove Block Comment" description="Remove the block comment enclosing the selection" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih2vETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.search.write.access.in.workspace" commandName="Write Access in Workspace" description="Search for write references to the selected element in the workspace" category="_eps0YfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih2_ETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.adt.launch.LaunchShortcut.run" commandName="Run Android Application" description="Run Android Application" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih3PETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewImportProjects" commandName="Import Projects..." category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih3fETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.delimiter.unix" commandName="Convert Line Delimiters to Unix (LF, \n, 0A, &#xb6;)" description="Converts the line delimiters to Unix (LF, \n, 0A, &#xb6;)" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih3vETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.showIn" commandName="Show In" category="_eps0a_ETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqih3_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.navigate.showIn.targetId" name="Show In Target Id" optional="false"/>
+  </commands>
+  <commands xmi:id="_eqih4PETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.javaAppletShortcut.run" commandName="Run Java Applet" description="Run Java Applet" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih4fETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.correction.convertLocalToField.assist" commandName="Quick Assist - Convert local variable to field" description="Invokes quick assist and selects 'Convert local variable to field'" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih4vETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.task.clearActiveTime" commandName="Clear Active Time" category="_eps0X_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih4_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.command.submitTask" commandName="Submit Task" description="Submits the currently open task" category="_eps0WfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqih5PETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.discovery.ui.discoveryWizardCommand" commandName="Discovery Wizard" description="shows the connector discovery wizard" category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqjI4PETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.dialogs.openMessageDialog" commandName="Open Message Dialog" description="Open a Message Dialog" category="_eps0XfETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqjI4fETEeGDEc9DxL1vVg" elementId="title" name="Title"/>
+    <parameters xmi:id="_eqjI4vETEeGDEc9DxL1vVg" elementId="message" name="Message"/>
+    <parameters xmi:id="_eqjI4_ETEeGDEc9DxL1vVg" elementId="imageType" name="Image Type Constant" typeId="org.eclipse.ui.dialogs.Integer"/>
+    <parameters xmi:id="_eqjI5PETEeGDEc9DxL1vVg" elementId="defaultIndex" name="Default Button Index" typeId="org.eclipse.ui.dialogs.Integer"/>
+    <parameters xmi:id="_eqjI5fETEeGDEc9DxL1vVg" elementId="buttonLabel0" name="First Button Label"/>
+    <parameters xmi:id="_eqjI5vETEeGDEc9DxL1vVg" elementId="buttonLabel1" name="Second Button Label"/>
+    <parameters xmi:id="_eqjI5_ETEeGDEc9DxL1vVg" elementId="buttonLabel2" name="Third Button Label"/>
+    <parameters xmi:id="_eqjI6PETEeGDEc9DxL1vVg" elementId="buttonLabel3" name="Fourth Button Label"/>
+    <parameters xmi:id="_eqjI6fETEeGDEc9DxL1vVg" elementId="cancelReturns" name="Return Value on Cancel"/>
+  </commands>
+  <commands xmi:id="_eqjI6vETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.commands.AllReferences" commandName="All References" description="Inspect all references to the selected object" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqjI6_ETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.command.OpenFromClipboard" commandName="Open from Clipboard" description="Opens a Java element or a Java stack trace from clipboard" category="_eps0a_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqjI7PETEeGDEc9DxL1vVg" elementId="org.eclipse.equinox.p2.ui.discovery.commands.ShowRepositoryCatalog" commandName="Show Repository Catalog" category="_eps0Y_ETEeGDEc9DxL1vVg">
+    <parameters xmi:id="_eqllIPETEeGDEc9DxL1vVg" elementId="org.eclipse.equinox.p2.ui.discovery.commands.RepositoryParameter" name="P2 Repository URI"/>
+  </commands>
+  <commands xmi:id="_eqllIfETEeGDEc9DxL1vVg" elementId="org.eclipse.m2e.editor.RenameArtifactAction" commandName="Rename Maven Artifact..." category="_eps0Y_ETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqllIvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.window.nextPerspective" commandName="Next Perspective" description="Switch to the next perspective" category="_epsNQvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqllI_ETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.OpenDebugConfigurations" commandName="Debug..." description="Open debug launch configuration dialog" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqllJPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.edit.text.hippieCompletion" commandName="Word Completion" description="Context insensitive completion" category="_eps0YvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqllJfETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewClearCredentials" commandName="Clear Credentials" category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqllJvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.extract.constant" commandName="Extract Constant" description="Extracts a constant into a new static field and uses the new static field" category="_eps0bfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqllJ_ETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.add" commandName="Add to Version Control" description="Add the Selected Resources to Version Control" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqllKPETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.sync" commandName="Synchronize with Repository" description="Synchronize the workspace resources with those in the repository" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqllKfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.file.closeOthers" commandName="Close Others" description="Close all editors except the one that is active" category="_eps0VfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqmMMPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.add.javadoc.comment" commandName="Add Javadoc Comment" description="Add a Javadoc comment stub to the member element" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqmMMfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.editors.revisions.author.toggle" commandName="Toggle Revision Author Display" description="Toggles the display of the revision author" category="_eps0XvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqmMMvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.edit.text.java.sort.members" commandName="Sort Members" description="Sort all members using the member order preference" category="_eps0bPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqmMM_ETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.replaceWithBase" commandName="Revert to Base" description="Revert to Base revisions" category="_epsNQfETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqmMNPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.RepositoriesViewConfigureFetch" commandName="Configure Fetch..." category="_eps0XPETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqmMNfETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.adt.launch.LaunchShortcut.debug" commandName="Debug Android Application" description="Debug Android Application" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqmMNvETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.debug.ui.commands.Execute" commandName="Execute" description="Evaluate selected text" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_eqmMN_ETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.commands.Resume" commandName="Resume" description="Resume" category="_eps0VvETEeGDEc9DxL1vVg"/>
+  <commands xmi:id="_fAs_EPETEeGDEc9DxL1vVg" elementId="AUTOGEN:::org.eclipse.jdt.debug.ui.JavaSnippetToolbarActions/org.eclipse.jdt.debug.ui.SnippetExecute" commandName="E&amp;xecute"/>
+  <commands xmi:id="_fA4lQPETEeGDEc9DxL1vVg" elementId="AUTOGEN:::org.eclipse.jdt.debug.ui.JavaSnippetToolbarActions/org.eclipse.jdt.debug.ui.SnippetDisplay" commandName="Displa&amp;y"/>
+  <commands xmi:id="_fA5MUvETEeGDEc9DxL1vVg" elementId="AUTOGEN:::org.eclipse.jdt.debug.ui.JavaSnippetToolbarActions/org.eclipse.jdt.debug.ui.SnippetInspect" commandName="Insp&amp;ect"/>
+  <addons xmi:id="_enVc1PETEeGDEc9DxL1vVg" elementId="org.eclipse.e4.core.commands.service" contributorURI="platform:/plugin/org.eclipse.ui.workbench" contributionURI="bundleclass://org.eclipse.e4.core.commands/org.eclipse.e4.core.commands.CommandServiceAddon"/>
+  <addons xmi:id="_enVc1fETEeGDEc9DxL1vVg" elementId="org.eclipse.e4.ui.contexts.service" contributorURI="platform:/plugin/org.eclipse.ui.workbench" contributionURI="bundleclass://org.eclipse.e4.ui.services/org.eclipse.e4.ui.services.ContextServiceAddon"/>
+  <addons xmi:id="_enVc1vETEeGDEc9DxL1vVg" elementId="org.eclipse.e4.ui.bindings.service" contributorURI="platform:/plugin/org.eclipse.ui.workbench" contributionURI="bundleclass://org.eclipse.e4.ui.bindings/org.eclipse.e4.ui.bindings.BindingServiceAddon"/>
+  <addons xmi:id="_enVc1_ETEeGDEc9DxL1vVg" elementId="org.eclipse.e4.ui.workbench.commands.model" contributorURI="platform:/plugin/org.eclipse.ui.workbench" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.CommandProcessingAddon"/>
+  <addons xmi:id="_enVc2PETEeGDEc9DxL1vVg" elementId="org.eclipse.e4.ui.workbench.contexts.model" contributorURI="platform:/plugin/org.eclipse.ui.workbench" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.ContextProcessingAddon"/>
+  <addons xmi:id="_enVc2fETEeGDEc9DxL1vVg" elementId="org.eclipse.e4.ui.workbench.bindings.model" contributorURI="platform:/plugin/org.eclipse.ui.workbench" contributionURI="bundleclass://org.eclipse.e4.ui.workbench.swt/org.eclipse.e4.ui.workbench.swt.util.BindingProcessingAddon"/>
+  <addons xmi:id="_enVc2vETEeGDEc9DxL1vVg" elementId="Cleanup Addon" contributorURI="platform:/plugin/org.eclipse.ui.workbench" contributionURI="bundleclass://org.eclipse.e4.ui.workbench.addons.swt/org.eclipse.e4.ui.workbench.addons.cleanupaddon.CleanupAddon"/>
+  <addons xmi:id="_enVc2_ETEeGDEc9DxL1vVg" elementId="DnD Addon" contributorURI="platform:/plugin/org.eclipse.ui.workbench" contributionURI="bundleclass://org.eclipse.e4.ui.workbench.addons.swt/org.eclipse.e4.ui.workbench.addons.dndaddon.DnDAddon"/>
+  <addons xmi:id="_enVc3PETEeGDEc9DxL1vVg" elementId="MinMax Addon" contributorURI="platform:/plugin/org.eclipse.ui.workbench" contributionURI="bundleclass://org.eclipse.e4.ui.workbench.addons.swt/org.eclipse.e4.ui.workbench.addons.minmax.MinMaxAddon"/>
+  <categories xmi:id="_epsNQPETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.category.perspectives" name="Perspectives" description="Commands for opening perspectives"/>
+  <categories xmi:id="_epsNQfETEeGDEc9DxL1vVg" elementId="org.eclipse.team.cvs.ui.actionSet" name="CVS" description="Actions that apply when working with CVS repositories"/>
+  <categories xmi:id="_epsNQvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.category.window" name="Window"/>
+  <categories xmi:id="_eps0UPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.builds.ui.category.Commands" name="Builds"/>
+  <categories xmi:id="_eps0UfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.category.project" name="Project"/>
+  <categories xmi:id="_eps0UvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.category.views" name="Views" description="Commands for opening views"/>
+  <categories xmi:id="_eps0U_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.ide.markerContents" name="Contents" description="The category for menu contents"/>
+  <categories xmi:id="_eps0VPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.wikitext.tasks.ui.commands" name="WikiText Context" description="WikiText Task-Focused Interface Commands"/>
+  <categories xmi:id="_eps0VfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.category.file" name="File"/>
+  <categories xmi:id="_eps0VvETEeGDEc9DxL1vVg" elementId="org.eclipse.debug.ui.category.run" name="Run/Debug" description="Run/Debug command category"/>
+  <categories xmi:id="_eps0V_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.wikitext.ui.editor.category" name="WikiText Markup Editing Commands" description="commands for editing lightweight markup"/>
+  <categories xmi:id="_eps0WPETEeGDEc9DxL1vVg" elementId="org.eclipse.wb.core.actions.category" name="WindowBuilder Pro" description="WindowBuilder Pro actions"/>
+  <categories xmi:id="_eps0WfETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.category.editor" name="Task Editor"/>
+  <categories xmi:id="_eps0WvETEeGDEc9DxL1vVg" elementId="com.android.ide.eclipse.adt.refactoring.category" name="Android Refactorings" description="Refactorings for Android Projects"/>
+  <categories xmi:id="_eps0W_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.java.ui.commands" name="Java Context" description="Java Task-Focused Interface Commands"/>
+  <categories xmi:id="_eps0XPETEeGDEc9DxL1vVg" elementId="org.eclipse.egit.ui.commandCategory" name="Git"/>
+  <categories xmi:id="_eps0XfETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.category.dialogs" name="Dialogs" description="Commands for opening dialogs"/>
+  <categories xmi:id="_eps0XvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.category.textEditor" name="Text Editing" description="Text Editing Commands"/>
+  <categories xmi:id="_eps0X_ETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.tasks.ui.commands" name="Task Repositories"/>
+  <categories xmi:id="_eps0YPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.commons.repositories.ui.category.Team" name="Team"/>
+  <categories xmi:id="_eps0YfETEeGDEc9DxL1vVg" elementId="org.eclipse.search.ui.category.search" name="Search" description="Search command category"/>
+  <categories xmi:id="_eps0YvETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.category.edit" name="Edit"/>
+  <categories xmi:id="_eps0Y_ETEeGDEc9DxL1vVg" elementId="org.eclipse.core.commands.categories.autogenerated" name="Uncategorized" description="Commands that were either auto-generated or have no category"/>
+  <categories xmi:id="_eps0ZPETEeGDEc9DxL1vVg" elementId="org.eclipse.recommenders.completion.rcp.chain.commands.category" name="Chain Completion Category"/>
+  <categories xmi:id="_eps0ZfETEeGDEc9DxL1vVg" elementId="org.eclipse.gef.category.view" name="View" description="View"/>
+  <categories xmi:id="_eps0ZvETEeGDEc9DxL1vVg" elementId="org.eclipse.team.ui.category.team" name="Team" description="Actions that apply when working with a Team"/>
+  <categories xmi:id="_eps0Z_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.category.help" name="Help"/>
+  <categories xmi:id="_eps0aPETEeGDEc9DxL1vVg" elementId="org.eclipse.mylyn.context.ui.commands" name="Focused UI" description="Task-Focused Interface"/>
+  <categories xmi:id="_eps0afETEeGDEc9DxL1vVg" elementId="org.eclipse.compare.ui.category.compare" name="Compare" description="Compare command category"/>
+  <categories xmi:id="_eps0avETEeGDEc9DxL1vVg" elementId="org.eclipse.ltk.ui.category.refactoring" name="Refactoring"/>
+  <categories xmi:id="_eps0a_ETEeGDEc9DxL1vVg" elementId="org.eclipse.ui.category.navigate" name="Navigate"/>
+  <categories xmi:id="_eps0bPETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.category.source" name="Source" description="Java Source Actions"/>
+  <categories xmi:id="_eps0bfETEeGDEc9DxL1vVg" elementId="org.eclipse.jdt.ui.category.refactoring" name="Refactor - Java" description="Java Refactoring Actions"/>
+</application:Application>
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/1019593440.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/1019593440.index
new file mode 100644 (file)
index 0000000..3dd0da0
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/1019593440.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/1022983875.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/1022983875.index
new file mode 100644 (file)
index 0000000..6884702
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/1022983875.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/169955671.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/169955671.index
new file mode 100644 (file)
index 0000000..f5f0877
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/169955671.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/1914879154.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/1914879154.index
new file mode 100644 (file)
index 0000000..e3ceb44
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/1914879154.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/2388837733.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/2388837733.index
new file mode 100644 (file)
index 0000000..23f9a58
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/2388837733.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/4204090549.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/4204090549.index
new file mode 100644 (file)
index 0000000..ad6e90e
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/4204090549.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/4245375323.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/4245375323.index
new file mode 100644 (file)
index 0000000..c5bd8a6
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/4245375323.index differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/externalLibsTimeStamps b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/externalLibsTimeStamps
new file mode 100644 (file)
index 0000000..9847076
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/externalLibsTimeStamps differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/invalidArchivesCache b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/invalidArchivesCache
new file mode 100644 (file)
index 0000000..593f470
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/invalidArchivesCache differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/javaLikeNames.txt b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/javaLikeNames.txt
new file mode 100644 (file)
index 0000000..8586397
--- /dev/null
@@ -0,0 +1 @@
+java
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/nonChainingJarsCache b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/nonChainingJarsCache
new file mode 100644 (file)
index 0000000..a8d063a
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/nonChainingJarsCache differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/savedIndexNames.txt b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/savedIndexNames.txt
new file mode 100644 (file)
index 0000000..7d430c4
--- /dev/null
@@ -0,0 +1,8 @@
+INDEX VERSION 1.126+/home/yuji/prog/workspaces/FolderEver/source/workspace/.metadata/.plugins/org.eclipse.jdt.core
+169955671.index
+1022983875.index
+1914879154.index
+4245375323.index
+4204090549.index
+2388837733.index
+1019593440.index
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat
new file mode 100644 (file)
index 0000000..e94180c
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.debug.ui/dialog_settings.xml b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.debug.ui/dialog_settings.xml
new file mode 100644 (file)
index 0000000..2e63ec2
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+       <section name="org.eclipse.jdt.internal.debug.ui.ExpressionInformationControlCreator$ExpressionInformationControl">
+               <item value="200" key="SashWeightDetails"/>
+               <item value="200" key="SashWeightTree"/>
+               <item value="228" key="HEIGHT"/>
+               <item value="700" key="WIDTH"/>
+       </section>
+       <section name="conditionHistory">
+       </section>
+</section>
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.launching/.install.xml b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.launching/.install.xml
new file mode 100644 (file)
index 0000000..0f339c9
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<dirs>
+<entry loc="/usr/lib/jvm/jdk1.7.0_05" stamp="1340782727000"/>
+</dirs>
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.launching/libraryInfos.xml b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.launching/libraryInfos.xml
new file mode 100644 (file)
index 0000000..3e96eaf
--- /dev/null
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<libraryInfos>
+<libraryInfo home="/usr/lib/jvm/jdk1.7.0_05" version="1.7.0_05">
+<bootpath>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/lib/resources.jar"/>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/lib/rt.jar"/>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/lib/sunrsasign.jar"/>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/lib/jsse.jar"/>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/lib/jce.jar"/>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/lib/charsets.jar"/>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/lib/jfr.jar"/>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/classes"/>
+</bootpath>
+<extensionDirs>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/lib/ext"/>
+<entry path="/usr/java/packages/lib/ext"/>
+</extensionDirs>
+<endorsedDirs>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/lib/endorsed"/>
+</endorsedDirs>
+</libraryInfo>
+<libraryInfo home="/usr/lib/jvm/jdk1.7.0_05/jre" version="1.7.0_05">
+<bootpath>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/lib/resources.jar"/>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/lib/rt.jar"/>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/lib/sunrsasign.jar"/>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/lib/jsse.jar"/>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/lib/jce.jar"/>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/lib/charsets.jar"/>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/lib/jfr.jar"/>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/classes"/>
+</bootpath>
+<extensionDirs>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/lib/ext"/>
+<entry path="/usr/java/packages/lib/ext"/>
+</extensionDirs>
+<endorsedDirs>
+<entry path="/usr/lib/jvm/jdk1.7.0_05/jre/lib/endorsed"/>
+</endorsedDirs>
+</libraryInfo>
+</libraryInfos>
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml
new file mode 100644 (file)
index 0000000..9caf1a0
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<typeInfoHistroy>
+<typeInfo handle="=EverFolder/\/home\/yuji\/prog\/android-sdk-linux\/platforms\/android-7\/android.jar&lt;java.lang(Exception.class[Exception" modifiers="33" timestamp="1346081937000"/>
+<typeInfo handle="=EverFolder/src&lt;com.yuji.ef.exception{EfException.java[EfException" modifiers="1" timestamp="1347090496000"/>
+</typeInfoHistroy>
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml
new file mode 100644 (file)
index 0000000..6e1b715
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<qualifiedTypeNameHistroy>
+<fullyQualifiedTypeName name="java.util.Calendar"/>
+<fullyQualifiedTypeName name="com.yuji.ef.exception.EfError"/>
+<fullyQualifiedTypeName name="android.content.Context"/>
+<fullyQualifiedTypeName name="com.yuji.ef.utility.Debug"/>
+<fullyQualifiedTypeName name="com.yuji.ef.Initialize"/>
+<fullyQualifiedTypeName name="android.os.Handler"/>
+<fullyQualifiedTypeName name="com.yuji.ef.exception.EfException"/>
+</qualifiedTypeNameHistroy>
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.ui/dialog_settings.xml b/source/workspace/.metadata.bak/.plugins/org.eclipse.jdt.ui/dialog_settings.xml
new file mode 100644 (file)
index 0000000..6a21b31
--- /dev/null
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+       <item value="filter_imports;" key="filters_last_used"/>
+       <item value="false" key="delegateUpdating"/>
+       <section name="OptionalMessageDialog.hide.">
+               <item value="true" key="org.eclipse.jdt.ui.typecomment.deprecated"/>
+       </section>
+       <section name="RefactoringWizard.preview">
+               <item value="400" key="height"/>
+               <item value="600" key="width"/>
+       </section>
+       <section name="quick_assist_proposal_size">
+       </section>
+       <section name="SourceActionDialog.methods">
+               <item value="false" key="Comments"/>
+               <item value="1" key="VisibilityModifier"/>
+               <item value="false" key="SynchronizedModifier"/>
+               <item value="false" key="FinalModifier"/>
+       </section>
+       <section name="NewPackageWizardPage">
+               <item value="false" key="create_package_info_java"/>
+       </section>
+       <section name="org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart">
+               <item value="true" key="group_libraries"/>
+               <item value="false" key="linkWithEditor"/>
+               <item value="2" key="layout"/>
+               <item value="1" key="rootMode"/>
+               <item value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#x0A;&lt;packageExplorer group_libraries=&quot;1&quot; layout=&quot;2&quot; linkWithEditor=&quot;0&quot; rootMode=&quot;1&quot; workingSetName=&quot;&quot;&gt;&#x0A;&lt;customFilters userDefinedPatternsEnabled=&quot;false&quot;&gt;&#x0A;&lt;xmlDefinedFilters&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.LibraryFilter&quot; isEnabled=&quot;false&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.LocalTypesFilter&quot; isEnabled=&quot;false&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.StaticsFilter&quot; isEnabled=&quot;false&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.ClosedProjectsFilter&quot; isEnabled=&quot;false&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.NonSharedProjectsFilter&quot; isEnabled=&quot;false&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.NonJavaElementFilter&quot; isEnabled=&quot;false&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.ContainedLibraryFilter&quot; isEnabled=&quot;false&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.CuAndClassFileFilter&quot; isEnabled=&quot;false&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.NonJavaProjectsFilter&quot; isEnabled=&quot;false&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.internal.ui.PackageExplorer.EmptyInnerPackageFilter&quot; isEnabled=&quot;true&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.PackageDeclarationFilter&quot; isEnabled=&quot;true&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.internal.ui.PackageExplorer.EmptyPackageFilter&quot; isEnabled=&quot;false&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.ImportDeclarationFilter&quot; isEnabled=&quot;true&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.FieldsFilter&quot; isEnabled=&quot;false&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.internal.ui.PackageExplorer.HideInnerClassFilesFilter&quot; isEnabled=&quot;true&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.NonPublicFilter&quot; isEnabled=&quot;false&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer_patternFilterId_.*&quot; isEnabled=&quot;true&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.EmptyLibraryContainerFilter&quot; isEnabled=&quot;true&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.jdt.ui.PackageExplorer.SyntheticMembersFilter&quot; isEnabled=&quot;true&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.mylyn.java.ui.MembersFilter&quot; isEnabled=&quot;false&quot;/&gt;&#x0A;&lt;child filterId=&quot;org.eclipse.m2e.MavenModuleFilter&quot; isEnabled=&quot;false&quot;/&gt;&#x0A;&lt;/xmlDefinedFilters&gt;&#x0A;&lt;/customFilters&gt;&#x0A;&lt;/packageExplorer&gt;" key="memento"/>
+       </section>
+       <section name="org.eclipse.jdt.internal.ui.dialogs.FilteredTypesSelectionDialog">
+               <item value="true" key="ShowStatusLine"/>
+               <item value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#x0A;&lt;History/&gt;" key="History"/>
+               <section name="DialogBoundsSettings">
+                       <item value="600" key="DIALOG_WIDTH"/>
+                       <item value="38" key="DIALOG_Y_ORIGIN"/>
+                       <item value="12" key="DIALOG_X_ORIGIN"/>
+                       <item value="500" key="DIALOG_HEIGHT"/>
+                       <item value="1|Sans|10.0|0|GTK|1|" key="DIALOG_FONT_NAME"/>
+               </section>
+       </section>
+       <section name="completion_proposal_size">
+       </section>
+       <section name="JavaElementSearchActions">
+       </section>
+       <section name="DialogBounds_GetterSetterTreeSelectionDialog">
+               <item value="629" key="DIALOG_WIDTH"/>
+               <item value="0" key="DIALOG_Y_ORIGIN"/>
+               <item value="845" key="DIALOG_HEIGHT"/>
+               <item value="384" key="DIALOG_X_ORIGIN"/>
+               <item value="1|Sans|10.0|0|GTK|1|" key="DIALOG_FONT_NAME"/>
+       </section>
+       <section name="org.eclipse.ltk.ui.refactoring.settings">
+               <item value="*" key="patterns"/>
+               <item value="false" key="updateQualifiedNames"/>
+               <item value="1" key="updateSimilarElementsMatchStrategy"/>
+               <item value="false" key="updateTextualMatches"/>
+               <item value="false" key="updateSimilarElements"/>
+       </section>
+       <section name="RenameInformationPopup">
+       </section>
+       <section name="NewClassWizardPage">
+               <item value="false" key="create_constructor"/>
+               <item value="true" key="create_unimplemented"/>
+               <item value="false" key="create_main"/>
+       </section>
+       <section name="AddGetterSetterDialog">
+               <item value="false" key="RemoveFinal"/>
+               <item value="false" key="SortOrdering"/>
+       </section>
+</section>
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/EverFolder/2012/9/35/refactorings.history b/source/workspace/.metadata.bak/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/EverFolder/2012/9/35/refactorings.history
new file mode 100644 (file)
index 0000000..2f32426
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<session version="1.0">&#x0A;<refactoring comment="Rename field &apos;deleteIdUpdatedStmt&apos; in &apos;com.yuji.ef.dao.LockDao&apos; to &apos;deleteUpdatedStmt&apos;&#x0A;- Original project: &apos;EverFolder&apos;&#x0A;- Original element: &apos;com.yuji.ef.dao.LockDao.deleteIdUpdatedStmt&apos;&#x0A;- Renamed element: &apos;com.yuji.ef.dao.LockDao.deleteUpdatedStmt&apos;&#x0A;- Update references to refactored element&#x0A;- Update textual occurrences in comments and strings" delegate="false" deprecate="false" description="Rename field &apos;deleteIdUpdatedStmt&apos;" flags="589826" getter="false" id="org.eclipse.jdt.ui.rename.field" input="/src&lt;com.yuji.ef.dao{LockDao.java[LockDao^deleteIdUpdatedStmt" name="deleteUpdatedStmt" references="true" setter="false" stamp="1346472467152" textual="false" version="1.0"/>&#x0A;<refactoring comment="Rename local variable &apos;note1&apos; in &apos;com.yuji.ef.utility.EvernoteUtil.createNote(...)&apos; to &apos;note&apos;&#x0A;- Original project: &apos;EverFolder&apos;&#x0A;- Original element: &apos;com.yuji.ef.utility.EvernoteUtil.createNote(Notebook).note1&apos;&#x0A;- Renamed element: &apos;note1&apos;&#x0A;- Update references to refactored element" description="Rename local variable &apos;note1&apos;" id="org.eclipse.jdt.ui.rename.local.variable" input="/src&lt;com.yuji.ef.utility{EvernoteUtil.java[EvernoteUtil~createNote~QNotebook;@note1!9564!9587!9569!9573!QNote;!0!false" name="note" references="true" stamp="1346479403775" version="1.0"/>
+</session>
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/EverFolder/2012/9/35/refactorings.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/EverFolder/2012/9/35/refactorings.index
new file mode 100644 (file)
index 0000000..2e8a7fc
--- /dev/null
@@ -0,0 +1,2 @@
+1346472467152  Rename field 'deleteIdUpdatedStmt'
+1346479403775  Rename local variable 'note1'
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/EverFolder/2012/9/36/refactorings.history b/source/workspace/.metadata.bak/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/EverFolder/2012/9/36/refactorings.history
new file mode 100644 (file)
index 0000000..01ef75b
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<session version="1.0">
+<refactoring comment="Rename type &apos;com.yuji.ef.exception.Error&apos; to &apos;EfError&apos;&#x0A;- Original project: &apos;EverFolder&apos;&#x0A;- Original element: &apos;com.yuji.ef.exception.Error&apos;&#x0A;- Renamed element: &apos;com.yuji.ef.exception.EfError&apos;&#x0A;- Update references to refactored element&#x0A;- Update textual occurrences in comments and strings" description="Rename type &apos;Error&apos;" flags="589830" id="org.eclipse.jdt.ui.rename.type" input="/src&lt;com.yuji.ef.exception{Error.java[Error" matchStrategy="1" name="EfError" qualified="false" references="true" similarDeclarations="false" stamp="1347084302820" textual="false" version="1.0"/>
+</session>
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/EverFolder/2012/9/36/refactorings.index b/source/workspace/.metadata.bak/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/EverFolder/2012/9/36/refactorings.index
new file mode 100644 (file)
index 0000000..8f0a54e
--- /dev/null
@@ -0,0 +1 @@
+1347084302820  Rename type 'Error'
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml b/source/workspace/.metadata.bak/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml
new file mode 100644 (file)
index 0000000..27eb404
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+       <section name="RefactoringWizard.preview">
+               <item value="400" key="height"/>
+               <item value="600" key="width"/>
+       </section>
+</section>
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.m2e.logback.configuration/0.log b/source/workspace/.metadata.bak/.plugins/org.eclipse.m2e.logback.configuration/0.log
new file mode 100644 (file)
index 0000000..d2c8f4e
--- /dev/null
@@ -0,0 +1,114 @@
+2012-09-01 11:12:34,799 [main] INFO  c.n.h.c.p.n.NettyAsyncHttpProvider - Number of application's worked threads is 2
+2012-09-01 11:12:36,446 [pool-5-thread-1] INFO  c.n.h.c.p.n.NettyAsyncHttpProvider - Number of application's worked threads is 2
+2012-09-01 11:12:36,694 [main] ERROR o.e.r.i.r.repo.ModelRepositoryIndex - Failed to open search index.
+org.apache.lucene.index.IndexNotFoundException: no segments* file found in org.apache.lucene.store.MMapDirectory@/home/yuji/prog/workspaces/FolderEver/source/workspace/.metadata/.plugins/org.eclipse.recommenders.rcp/index lockFactory=org.apache.lucene.store.NativeFSLockFactory@33de7592: files: []
+       at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:712) ~[org.apache.lucene.core_3.5.0.v20120319-2345.jar:3.5.0 1204988 - simon - 2011-11-22 14:46:51]
+       at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:75) ~[org.apache.lucene.core_3.5.0.v20120319-2345.jar:3.5.0 1204988 - simon - 2011-11-22 14:46:51]
+       at org.apache.lucene.index.IndexReader.open(IndexReader.java:462) ~[org.apache.lucene.core_3.5.0.v20120319-2345.jar:3.5.0 1204988 - simon - 2011-11-22 14:46:51]
+       at org.apache.lucene.index.IndexReader.open(IndexReader.java:308) ~[org.apache.lucene.core_3.5.0.v20120319-2345.jar:3.5.0 1204988 - simon - 2011-11-22 14:46:51]
+       at org.eclipse.recommenders.internal.rcp.repo.ModelRepositoryIndex.open(ModelRepositoryIndex.java:64) ~[org.eclipse.recommenders.rcp_1.0.0.v20120612-2305-b156.jar:na]
+       at org.eclipse.recommenders.internal.rcp.wiring.RecommendersModule$ServicesInitializer.<init>(RecommendersModule.java:353) [org.eclipse.recommenders.rcp_1.0.0.v20120612-2305-b156.jar:na]
+       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [na:1.7.0_05]
+       at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) [na:1.7.0_05]
+       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [na:1.7.0_05]
+       at java.lang.reflect.Constructor.newInstance(Constructor.java:525) [na:1.7.0_05]
+       at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:85) [com.google.inject_3.0.0.v201203062045.jar:na]
+       at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85) [com.google.inject_3.0.0.v201203062045.jar:na]
+       at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254) [com.google.inject_3.0.0.v201203062045.jar:na]
+       at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) [com.google.inject_3.0.0.v201203062045.jar:na]
+       at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031) [com.google.inject_3.0.0.v201203062045.jar:na]
+       at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) [com.google.inject_3.0.0.v201203062045.jar:na]
+       at com.google.inject.Scopes$1$1.get(Scopes.java:65) [com.google.inject_3.0.0.v201203062045.jar:na]
+       at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) [com.google.inject_3.0.0.v201203062045.jar:na]
+       at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:204) [com.google.inject_3.0.0.v201203062045.jar:na]
+       at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:198) [com.google.inject_3.0.0.v201203062045.jar:na]
+       at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024) [com.google.inject_3.0.0.v201203062045.jar:na]
+       at com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:198) [com.google.inject_3.0.0.v201203062045.jar:na]
+       at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:179) [com.google.inject_3.0.0.v201203062045.jar:na]
+       at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:109) [com.google.inject_3.0.0.v201203062045.jar:na]
+       at com.google.inject.Guice.createInjector(Guice.java:95) [com.google.inject_3.0.0.v201203062045.jar:na]
+       at com.google.inject.Guice.createInjector(Guice.java:72) [com.google.inject_3.0.0.v201203062045.jar:na]
+       at org.eclipse.recommenders.injection.InjectionService.getInjector(InjectionService.java:47) [org.eclipse.recommenders.injection_1.0.0.v20120612-2305-b156.jar:na]
+       at org.eclipse.recommenders.injection.ExtensionFactory.<init>(ExtensionFactory.java:28) [org.eclipse.recommenders.injection_1.0.0.v20120612-2305-b156.jar:na]
+       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [na:1.7.0_05]
+       at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) [na:1.7.0_05]
+       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [na:1.7.0_05]
+       at java.lang.reflect.Constructor.newInstance(Constructor.java:525) [na:1.7.0_05]
+       at java.lang.Class.newInstance0(Class.java:372) [na:1.7.0_05]
+       at java.lang.Class.newInstance(Class.java:325) [na:1.7.0_05]
+       at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:184) [org.eclipse.equinox.registry_3.5.200.v20120522-1841.jar:na]
+       at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905) [org.eclipse.equinox.registry_3.5.200.v20120522-1841.jar:na]
+       at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243) [org.eclipse.equinox.registry_3.5.200.v20120522-1841.jar:na]
+       at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55) [org.eclipse.equinox.registry_3.5.200.v20120522-1841.jar:na]
+       at org.eclipse.jdt.internal.ui.text.java.CompletionProposalComputerDescriptor.createComputer(CompletionProposalComputerDescriptor.java:308) [org.eclipse.jdt.ui_3.8.0.v20120524-1551.jar:na]
+       at org.eclipse.jdt.internal.ui.text.java.CompletionProposalComputerDescriptor.getComputer(CompletionProposalComputerDescriptor.java:275) [org.eclipse.jdt.ui_3.8.0.v20120524-1551.jar:na]
+       at org.eclipse.jdt.internal.ui.text.java.CompletionProposalComputerDescriptor.sessionStarted(CompletionProposalComputerDescriptor.java:418) [org.eclipse.jdt.ui_3.8.0.v20120524-1551.jar:na]
+       at org.eclipse.jdt.internal.ui.text.java.CompletionProposalCategory.sessionStarted(CompletionProposalCategory.java:379) [org.eclipse.jdt.ui_3.8.0.v20120524-1551.jar:na]
+       at org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor$CompletionListener.assistSessionStarted(ContentAssistProcessor.java:117) [org.eclipse.jdt.ui_3.8.0.v20120524-1551.jar:na]
+       at org.eclipse.jface.text.contentassist.ContentAssistant.fireSessionBeginEvent(ContentAssistant.java:2221) [org.eclipse.jface.text_3.8.0.v20120531-0600.jar:na]
+       at org.eclipse.jface.text.contentassist.ContentAssistant.prepareToShowCompletions(ContentAssistant.java:1696) [org.eclipse.jface.text_3.8.0.v20120531-0600.jar:na]
+       at org.eclipse.jface.text.contentassist.ContentAssistant.access$6(ContentAssistant.java:1687) [org.eclipse.jface.text_3.8.0.v20120531-0600.jar:na]
+       at org.eclipse.jface.text.contentassist.ContentAssistant$2.run(ContentAssistant.java:376) [org.eclipse.jface.text_3.8.0.v20120531-0600.jar:na]
+       at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) [org.eclipse.swt.gtk.linux.x86_64_3.100.0.v4233d.jar:na]
+       at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135) [org.eclipse.swt.gtk.linux.x86_64_3.100.0.v4233d.jar:na]
+       at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3529) [org.eclipse.swt.gtk.linux.x86_64_3.100.0.v4233d.jar:na]
+       at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3182) [org.eclipse.swt.gtk.linux.x86_64_3.100.0.v4233d.jar:na]
+       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1022) [org.eclipse.e4.ui.workbench.swt_0.10.1.v20120525-2014.jar:na]
+       at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) [org.eclipse.core.databinding.observable_1.4.1.v20120521-2329.jar:na]
+       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:916) [org.eclipse.e4.ui.workbench.swt_0.10.1.v20120525-2014.jar:na]
+       at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86) [org.eclipse.e4.ui.workbench_0.10.2.v20120531-1742.jar:na]
+       at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:585) [org.eclipse.ui.workbench_3.103.0.v20120530-1824.jar:na]
+       at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) [org.eclipse.core.databinding.observable_1.4.1.v20120521-2329.jar:na]
+       at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:540) [org.eclipse.ui.workbench_3.103.0.v20120530-1824.jar:na]
+       at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) [org.eclipse.ui.workbench_3.103.0.v20120530-1824.jar:na]
+       at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124) [org.eclipse.ui.ide.application_1.0.400.v20120523-1955.jar:na]
+       at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) [org.eclipse.equinox.app_1.3.100.v20120522-1841.jar:na]
+       at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) [org.eclipse.osgi_3.8.0.v20120529-1548.jar:na]
+       at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) [org.eclipse.osgi_3.8.0.v20120529-1548.jar:na]
+       at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353) [org.eclipse.osgi_3.8.0.v20120529-1548.jar:na]
+       at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180) [org.eclipse.osgi_3.8.0.v20120529-1548.jar:na]
+       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_05]
+       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_05]
+       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_05]
+       at java.lang.reflect.Method.invoke(Method.java:601) ~[na:1.7.0_05]
+       at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629) [org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar:na]
+       at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584) [org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar:na]
+       at org.eclipse.equinox.launcher.Main.run(Main.java:1438) [org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar:na]
+       at org.eclipse.equinox.launcher.Main.main(Main.java:1414) [org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar:na]
+2012-09-01 11:12:36,853 [Recommenders-Dependency-Info-Service-0] ERROR o.e.r.u.a.ArchiveDetailsExtractor - Error while extracting name and version from file: /home/yuji/prog/workspaces/FolderEver/source/workspace/EverFolder/libs/evernote-api-1.21.jar
+java.lang.IllegalArgumentException: Unexpected delimiter '-'; Expected delimiters '.'
+       at org.eclipse.recommenders.utils.Throws.throwIllegalArgumentException(Throws.java:25) ~[org.eclipse.recommenders.utils_1.0.0.v20120612-2305-b156.jar:na]
+       at org.eclipse.recommenders.utils.parser.MavenVersionParser.consumeDelimiter(MavenVersionParser.java:78) ~[org.eclipse.recommenders.utils_1.0.0.v20120612-2305-b156.jar:na]
+       at org.eclipse.recommenders.utils.parser.MavenVersionParser.parse(MavenVersionParser.java:45) ~[org.eclipse.recommenders.utils_1.0.0.v20120612-2305-b156.jar:na]
+       at org.eclipse.recommenders.utils.archive.MavenPomJarIdExtractor.parseVersion(MavenPomJarIdExtractor.java:59) ~[org.eclipse.recommenders.utils_1.0.0.v20120612-2305-b156.jar:na]
+       at org.eclipse.recommenders.utils.archive.MavenPomJarIdExtractor.extract(MavenPomJarIdExtractor.java:37) ~[org.eclipse.recommenders.utils_1.0.0.v20120612-2305-b156.jar:na]
+       at org.eclipse.recommenders.utils.archive.MavenPomJarIdExtractor.extract(MavenPomJarIdExtractor.java:29) ~[org.eclipse.recommenders.utils_1.0.0.v20120612-2305-b156.jar:na]
+       at org.eclipse.recommenders.utils.archive.ArchiveDetailsExtractor.extractJarIds(ArchiveDetailsExtractor.java:64) [org.eclipse.recommenders.utils_1.0.0.v20120612-2305-b156.jar:na]
+       at org.eclipse.recommenders.utils.archive.ArchiveDetailsExtractor.extractName(ArchiveDetailsExtractor.java:105) [org.eclipse.recommenders.utils_1.0.0.v20120612-2305-b156.jar:na]
+       at org.eclipse.recommenders.internal.rcp.providers.ClasspathEntryInfoProvider$3.run(ClasspathEntryInfoProvider.java:245) [org.eclipse.recommenders.rcp_1.0.0.v20120612-2305-b156.jar:na]
+       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [na:1.7.0_05]
+       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) [na:1.7.0_05]
+       at java.util.concurrent.FutureTask.run(FutureTask.java:166) [na:1.7.0_05]
+       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [na:1.7.0_05]
+       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [na:1.7.0_05]
+       at java.lang.Thread.run(Thread.java:722) [na:1.7.0_05]
+2012-09-01 11:12:36,948 [Recommenders-Dependency-Info-Service-0] ERROR o.e.r.u.a.ArchiveDetailsExtractor - Error while extracting name and version from file: /home/yuji/prog/workspaces/FolderEver/source/workspace/EverFolder/libs/libthrift.jar
+java.lang.IllegalArgumentException: Unexpected delimiter '-'; Expected delimiters '.'
+       at org.eclipse.recommenders.utils.Throws.throwIllegalArgumentException(Throws.java:25) ~[org.eclipse.recommenders.utils_1.0.0.v20120612-2305-b156.jar:na]
+       at org.eclipse.recommenders.utils.parser.MavenVersionParser.consumeDelimiter(MavenVersionParser.java:78) ~[org.eclipse.recommenders.utils_1.0.0.v20120612-2305-b156.jar:na]
+       at org.eclipse.recommenders.utils.parser.MavenVersionParser.parse(MavenVersionParser.java:45) ~[org.eclipse.recommenders.utils_1.0.0.v20120612-2305-b156.jar:na]
+       at org.eclipse.recommenders.utils.archive.MavenPomJarIdExtractor.parseVersion(MavenPomJarIdExtractor.java:59) ~[org.eclipse.recommenders.utils_1.0.0.v20120612-2305-b156.jar:na]
+       at org.eclipse.recommenders.utils.archive.MavenPomJarIdExtractor.extract(MavenPomJarIdExtractor.java:37) ~[org.eclipse.recommenders.utils_1.0.0.v20120612-2305-b156.jar:na]
+       at org.eclipse.recommenders.utils.archive.MavenPomJarIdExtractor.extract(MavenPomJarIdExtractor.java:29) ~[org.eclipse.recommenders.utils_1.0.0.v20120612-2305-b156.jar:na]
+       at org.eclipse.recommenders.utils.archive.ArchiveDetailsExtractor.extractJarIds(ArchiveDetailsExtractor.java:64) [org.eclipse.recommenders.utils_1.0.0.v20120612-2305-b156.jar:na]
+       at org.eclipse.recommenders.utils.archive.ArchiveDetailsExtractor.extractName(ArchiveDetailsExtractor.java:105) [org.eclipse.recommenders.utils_1.0.0.v20120612-2305-b156.jar:na]
+       at org.eclipse.recommenders.internal.rcp.providers.ClasspathEntryInfoProvider$3.run(ClasspathEntryInfoProvider.java:245) [org.eclipse.recommenders.rcp_1.0.0.v20120612-2305-b156.jar:na]
+       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [na:1.7.0_05]
+       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) [na:1.7.0_05]
+       at java.util.concurrent.FutureTask.run(FutureTask.java:166) [na:1.7.0_05]
+       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [na:1.7.0_05]
+       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [na:1.7.0_05]
+       at java.lang.Thread.run(Thread.java:722) [na:1.7.0_05]
+2012-09-01 11:12:53,161 [pool-8-thread-1] INFO  c.n.h.c.p.n.NettyAsyncHttpProvider - Number of application's worked threads is 2
+2012-09-08 14:52:50,846 [main] INFO  c.n.h.c.p.n.NettyAsyncHttpProvider - Number of application's worked threads is 2
+2012-09-10 10:40:33,484 [main] INFO  c.n.h.c.p.n.NettyAsyncHttpProvider - Number of application's worked threads is 2
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.m2e.logback.configuration/logback.1.1.0.20120530-0009.xml b/source/workspace/.metadata.bak/.plugins/org.eclipse.m2e.logback.configuration/logback.1.1.0.20120530-0009.xml
new file mode 100644 (file)
index 0000000..e0de515
--- /dev/null
@@ -0,0 +1,41 @@
+<configuration scan="true">
+  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+      <pattern>%date [%thread] %-5level %logger{35} - %msg%n</pattern>
+    </encoder>
+    <filter class="org.eclipse.m2e.logback.appender.ConsoleAppenderFilter"/>
+  </appender>
+
+  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+    <File>${org.eclipse.m2e.log.dir}/0.log</File>
+    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+      <FileNamePattern>${org.eclipse.m2e.log.dir}/%i.log</FileNamePattern>
+      <MinIndex>1</MinIndex>
+      <MaxIndex>10</MaxIndex>
+    </rollingPolicy>
+    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+      <MaxFileSize>100MB</MaxFileSize>
+    </triggeringPolicy>
+    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+      <pattern>%date [%thread] %-5level %logger{35} - %msg%n</pattern>
+    </encoder>
+  </appender>
+
+  <appender name="EclipseLog" class="org.eclipse.m2e.logback.appender.EclipseLogAppender">
+    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+      <level>WARN</level>
+    </filter>
+  </appender>
+
+  <appender name="MavenConsoleLog" class="org.eclipse.m2e.logback.appender.MavenConsoleAppender">
+  </appender>
+        
+  <root level="INFO">
+    <appender-ref ref="FILE" />
+    <appender-ref ref="STDOUT" />
+    <appender-ref ref="EclipseLog" />
+    <appender-ref ref="MavenConsoleLog" />
+  </root>
+
+  <logger name="com.ning.http.client" level="INFO" />
+</configuration>
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.completion.rcp.calls/call-models-0.5.json b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.completion.rcp.calls/call-models-0.5.json
new file mode 100644 (file)
index 0000000..4ac1e65
--- /dev/null
@@ -0,0 +1,17 @@
+{
+  "/home/yuji/prog/workspaces/FolderEver/source/workspace/EverFolder/libs/evernote-api-1.21.jar": {
+    "location": "/home/yuji/prog/workspaces/FolderEver/source/workspace/EverFolder/libs/evernote-api-1.21.jar",
+    "status": "UNRESOLVED",
+    "error": "No call model found for \u0027/home/yuji/prog/workspaces/FolderEver/source/workspace/EverFolder/libs/evernote-api-1.21.jar\u0027. Neither fingerprint \u002743fa5ed95f4f5c85e8d1a0a6dfe23429c02f928d\u0027 nor symbolic name \u0027evernote-api-1.21\u0027 are known."
+  },
+  "/home/yuji/prog/workspaces/FolderEver/source/workspace/EverFolder/src": {
+    "location": "/home/yuji/prog/workspaces/FolderEver/source/workspace/EverFolder/src",
+    "status": "UNRESOLVED",
+    "error": "No class path info available for \u0027/home/yuji/prog/workspaces/FolderEver/source/workspace/EverFolder/src\u0027. Skipped."
+  },
+  "/home/yuji/prog/android-sdk-linux/platforms/android-7/android.jar": {
+    "location": "/home/yuji/prog/android-sdk-linux/platforms/android-7/android.jar",
+    "status": "UNRESOLVED",
+    "error": "No call model found for \u0027/home/yuji/prog/android-sdk-linux/platforms/android-7/android.jar\u0027. Neither fingerprint \u002719cd75888d1d75d3ae3cb7a8692153da5d65eb13\u0027 nor symbolic name \u0027android\u0027 are known."
+  }
+}
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.completion.rcp.overrides/ovrm-models-0.1.json b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.completion.rcp.overrides/ovrm-models-0.1.json
new file mode 100644 (file)
index 0000000..9e26dfe
--- /dev/null
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.fdt b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.fdt
new file mode 100644 (file)
index 0000000..753ec32
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.fdt differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.fdx b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.fdx
new file mode 100644 (file)
index 0000000..73120c4
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.fdx differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.fnm b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.fnm
new file mode 100644 (file)
index 0000000..57a2146
--- /dev/null
@@ -0,0 +1,3 @@
+ýÿÿÿ\ f  
+coordinate\ 1\ esymbolic-names\ 1
+classifier\ 1\ 4call\ 1\ 4ovrd\ 1\ 4ovrm\ 1\ 5selfc\ 1\ 5selfm\ 1\ 4ovrp\ 1
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.frq b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.frq
new file mode 100644 (file)
index 0000000..6160da1
--- /dev/null
@@ -0,0 +1,336 @@
\10£\ 4ï\17\9f\ 1Ó\fß\12Õ
+\89\ 1÷\13÷  \8d\16ß\16Õ\1cÑ\1aÓ\13\89\1c³\1a\9f\ 3£\10\8f\e£\12ë\eá
+\87\v\8f\16\97\vñ\19ï\ 5³\11§\11Ç\ e\89\bë    ±\e\89\17¿\11Ñ\e\8f\ 1Ï\e\8d\aÕ\13\8f\11û\18õ   \83\16Í\16Ù\ 3¹\e¹\12ë\rÿ   A\91\rÅ\17\9d\bË\13§\ 6\8d\ fÿ\ 3\81\rë\ fá\10Ù\vý\ 4¹\ 5Ç\e§\1c¿\19û\14·\ 3\95\rÉ\14ù\f©\võ\rù\11Ã\13\93\14½\v\9d\ 4Ç\f\8b\16Ï\ eñ\r÷\ 3Û\13\9b\1cù\14å\16¿\ 4»\ 3\87
+\81\b\9f\v\91\17Ñ\v×\10ç
\ 4ë\ 4ó\17¥\a\8b\18«\fã\eõ\ 5É\rµ\ 1±  ß\13\87\ 6ë\11ý \89\ f½\17¥\15\97\b¥\ 2¯\13·\1cí\16m\95\ fÅ
\fÇ\1aÓ\ 6Ù\ e\95\13\83\ eß\15\99
\ 3¹\1aÁ\13Å\ 3ó\bõ\e÷\r\91\ e\9d\18Ç\18Å\12±\ 1Ë\ 4Õ\ eÁ
\19\87\15\81\17¿\ f©\ fÛ\e\85\ 4©\ 6\89\ 6¯\17Ó\a\91\1aß\ 5\99    ·\16û\13ý\11Ç\ 2ù\ 5\91\ 3á\15å\14\8d\15½\1a\99\1a\9d\17\8f\ e\9b\10ó\ eÃ\15Ó\ 4ë\aÙ\14½\18ó
\14\9d\rË\10÷\17í\14Ã\18\83\fí\ f\97\19Ï\1c§
\19?ÿ\16\8b\15û\ 4\85\10Ù\10»\v\91\18×     Í\ f\83\19\97\17Ý\18Û\rÁ\19ù\e§\17Õ\16\87\17Å\11û\r¹\15É\ 4Õ\ 5Ñ\16©\b÷\ 5¥\18\95\ 2\8b\ 6»\12\93\12µ\ 6­\18á\v\95\f\83\aÅ\ 5Õ\ 2Ó\19ó\11\r«\vÇ\ 5Ó\1añ\18û\19\97\ e\9b\ e§\13½\ 2÷
\f¯\12\9f\ 2í\ 6Í\ eé
+\91\v\93\f¡\16×\e¡\ 2Á\10\95\14\83\14¥      é\ 4û\ f\9d\12\14³      \83
+ÿ\ eÏ\12w\97\ 4\14Ý\1a\85\11õ\ e\83\1a\9f\13³\ fû\ 6ý\ 5Ã\ 5Í\14¯\ 3å      sÿ\ 6Ç\11×\ 5\91\15\85      \8b\17Ï
+\9b\17½\13É\b¹        Ã\1cù\ 3¡\19É\13\9f       \15Ñ\13±\11µ\r\8f\10ã\ 1\v\18\99\19\9f\ 6õ\ f\99\11É\ eý\12Å\eÉ\19ñ\10Á\a­
\a\83    ß\ 6CO\95\10\9b\ 3\99\ 6½
+\81\ 3·\12\7fÅ\a«\ fÃ\v\9d\14\99\17Ï\15\91\16¿\ 2\83\rÅ\v±\19¡\10\8b\b\89\19Ñ
\1c¯\ 6\97\ 5µ\11\93\15Í\bç\13Õ\15Ï\13\99\ 1÷\10©\ 5Ï\17\93\ 4µ\ eß\ 1±\ 2©\19³\ 5g\87\19\85\vý\b\87\13\87       ó\aÕ\10ë\ 6\99\aÿ\12­\a\97\14Í\ 4§\18\9d\fÁ\bÕ\1a¹\18Ó\1cÍ\eñ\ f¿\1c»\ f£\aµ\17Ë\ 5£\1c\85\17á\ 4\9b
\ e£\15Õ  ­\r\97\1aÙ\18É\1a¹\19õ\fÉ\10\91 ë\17Ç\rå\11ï\11ó\ 5ç\fÿ\e¯\15»       \97\fù\ 6Ù\r\87\14ë\ 1\85\ 3Ç\v\9d\19¯       7×\ 6×\f\83\e\9b\e\8b
\16§\vÿ\13ÿ\17©\1a§\1a­\ 6½\1cå\15¯\1a\81\eá\rÛ\ f­\v»\b¡        ¡\r\87\10©\17\ 4Í\13\99\13\9d\10É\ 5Û\17å\1aû\ 2£\ e±\ 5¯\ e÷\eÍ\ 2Õ\ 1¡\18Å\1a\9b\f\8d\10\8d\1a¹\ 2Õ\r\81\ 5ï\1a\10õ\ 4\87\12É\ 6ó\19¡\ e©\ 2¥\ eé\ 2í\ 1ý\17Ñ\ 6Û\f©\10·\a\9d\v©\1c£\17¯\18Á\1cÿ\v»\1c£\1aÛ\ 1õ\1a»\10é\1aé\16³\v\83\bõ\14\89\ 3Ó\10Õ\v­\17Ç\19Á\16Ù\ 2ó\14\91\ 4\9b\ 5\87\16÷\ e\e¹\r·\14±\14\9d\ 6÷\bã\f\87\a\8b\eÝ\ 6\9d\13¡\aÉ\ fÅ\f\9d\11õ\aÍ\15ë\ 2Ó\18ÿ\ 1¿\15ñ
+\91\eµ\15Ó\vó\rÛ\15×\ e\91\19ß\v\87\ e;\89\15å\ 2\9f\12Ç\14Û\10·\ fÇ\17Ï\ 3Ã\r÷\11í\ e¥\12É\ 3Ý\16ß\ 4í\17ÿ\ 2÷\ 4±\10Ë\eû
+·      \97\16Ï\16Ù\12Ý\e\9b\15ë\ 3³\19Í
\17å\ 4¡\eï\ 3\9d\ fç\v­\14¹\bÁ\12\95\v\9f\rç\rñ\16·\ 2ý\19­\13Á\ 3\93\ 5Á\vÙ\ fý\10¥\ 6±\v\8b\r£\ 3\95    MÑ\f×
\17©\ 4\95\e\81\aå\12\89\rí\a×\ 2ç\ 4é\10{\8b\11×\v\9d     ¿\17í\ 4ë
\ eÿ\18\99\ 2\9f\15\81\1a\85\ 6£\bÅ\10©\13»\17\91\1cë\12ó\10ç\ 5Q\99\r¯\10µ\12ï\vñ\1aï       ù\10å\ eá\ eÏ\ 5\ 5á\14ï\19\8d\v\8b\19\1få\a«\ eÙ\11Å\ 1é\15í\11Ý\17Ù\ 5³
+ç      \8f\bÿ\ 4ç\a¡\11¥\ 5Ó\17¹\14Ë\v¿\10ã\17ã\ 5¥\19ù\17¥\1aÓ\ 5í\bÓ\11£\ 2§\16\9b\1a\8f\13±\1añ\a\97\12÷\14\93     ß\rý\e§\ 4Á\18¿\a«\ 6\81\19ó\fý\f\14¥\r©\a\9f\14õ\18µ\1c\99\fý\aí\eÙ\ 4É        ë\ 5Ó\159\85\14\97\13µ\ 3Ñ\17¹\a\9d
\ 5Û\11¯\ 4ó\ 2Ç\ 6\89
+\87\ 3±\ f÷\ 2\87\b«\11ã\1añ\e\99\18÷\12Å\14\87\ 4É\15ã\a\ 2Ë\17ç\ 1Ã\ 2¥\vÏ\r£\rÙ\f§\14Á\11Ý\r×\14Ï\ 6¿
+\8d\ 5Ý\ 2µ\ 4É\18å\10¡\fç\12Ñ\rÃ\12«\ 4\95\ 5\99\1cÉ\12×\18Ã\1aß\19±\ eû\10¡\v½\eõ\17½\16ã\10\19Û\16\91
+\81\ 1Ó\ 3ï\ 4Ý\aá      Ë
\ 1\8f\1a\9b\r÷\ 1¹\ f¹\13\9f\16¥\ fÁ\17\9f\ 5³\1cÕ\a\95\11ÿ\ f½\ fÍ\ 3Á\ 5\93\vå
\1a\9b\a×\19ß\bÉ\11å\bÙ\1a\93\11\8d\ 1é\ 5ß\f\9b\14µ\13\97\10\9f\f\91\ 1Ý\13é\ fÅ\19³\17ñ\ 1I\8f\fÓ\ f\93\ 1Ï     \95\bÕ\e³\ 6\8d\19\8d\bÁ\1a«\ 1É
+\85\b\8f\12½\ 4ÿ\f£\f\9d\16Ç\1c\9b\16\9f
\11µ\1aß\11Ã\17\89\16Ã\16±\ 6\99\10\8b\13Ë\ f\93\16ß\eÅ\ fù\12ß\18·\ 1í      \89\ 5µ\10ù\vë\19Ó\14Ñ     µ\ 5±\12\9f\ f·\10Ã\bã\11»\15\87\18Õ\ 6³\bÉ\1c\81\13\1dý\ 3\9b    ·\13\97\ 2Ë\15Á\ eÏ\f½\aÃ\ 4µ\vÓ\12÷\aï\b\99\v·\e\9d\1a«   \8b\fÛ\12\81\fÛ
+\8d\ 2ï\eõ\19¯\ 2¡\14E\95\ e\93\rá\b\81\ 2Å   Ë\rÑ\10¹\1c¯\f\9f\10­     ·\11\13«\e\8f\r§\bÅ\13¡\15å\ 1·
+\91\11¡
\aÑ\aï\ 2\81\12\97
+\81\16\85\ 2§\e«\rí\12Í\10\8f\14Ý        É\fÃ\19Ï\ fÅ\ e        Ã\ 6õ\b\8d\ e½\11£\14\91\f½\12é\ e³\ 2·\18«\1aó\v\93\1aé\aÝ\ 5×\ 1Í\19í\10§\rÑ\ f\81\ 4Ã\11­\1a\93\b¿\ 6é\v\93\aÃ
+\95\19\ 1ý\18ý\14ç\18\93\1c¹\f\8f\ 4£\13Å\b£   \93\ 6Ç\ 1\95\15Ë\ e\97\aë\18ó\ 4Ë\1cË\12õ\vó\ 3ó\13å\ 6\89\ 2§\12­\ 1Ù\19¥\f\95\18\8f
\r\8b\ 2á\12\83\vã\16û\f©\ 3Ë        Á\14Û\vÏ\10\aË\11­\12µ  \91\13Å\16Ù\16Í\rÃ\fñ\14û\e½\b³\14\85\ f¿\r\8d\11Í\12\99\15\95\ 3\83\18\83\ 3©\14á\17Á\ 2\83\1cç\14\81\1cí\ 2\9f\11³\12¥
\11Ã\eï\rÉ\aé\b£\e½  \91\14Ó\16\9b\12Ñ\ 1±\rÍ\a¿\bý
\16µ\ fé\ 6Ï\1a³\e\83\12\83\ 6Å\ 6¿\16ó\eÏ\11\9b\19ñ\11\99\14\8d\ 3­\15»\f\ 4Ç\ 3u\89\a\85\ eÏ\18Ý\11\85\eÙ\ 6Ý\12á\19\99\ 4ß    ù\15é\f\8d\14ã\v­\ fï\ eÁ\15Ñ\1cá\18ß\14·\17\8f\aÕ\17±\ 4ñ\v\9d\ 1³\få\f\9d\15\8f\17\85\1a\ 5½\ 3ë\bÑ\12¿\ 5·\ e\95\12³\ 4Ç\b¯\b­\ eÑ\ 2µ
\rõ\12ß\ 3\8b\ 5\83\ 5µ\ 2\8f\15±
\ 1\85\r±\1c§\ 1Á\fç\16å\ fý\ 6Õ\ 4ã    \95\1a©\r\8d\1c«\12\13·\v\91\ 5¿\f«\ 3¥\16©\f¿\ 3µ\19\93\13\93\19»\14\93\ fñ\ 5ÿ\15±\13\11ÿ\rç\10Ñ\ 4»\1aß\1a×\bo\8f\ 3Û\ 3\93
+cÿ\10\ 4»\aÛ\bÝ\f\89\võ\ 6\99\ 3ß\ 2ù  \95\1cÙ\17\1a\97\eÇ\ fÅ\r\95\ 6Ù\b\9d\ e\9f\19\81\10û\ e\9b\v³\13í\18¡\ 1Ý\15ý\rÍ\18å\18ã\14\91\10\ 5U\9d\ 3\8f      É\ 2\87\e·\b«\a»\e\87\ 2ç\19\95\aÛ\aé\14¯\ 1Ý\19«\15í\1a¹\10ÿ\ 5\97\1c¥\13ý\13Û\ 5\8b\ f\15\97\ fÿ\b©\11ñ\17\89\ 4ó        \83\ 2ï\18§\ e\8f\ fÁ\eõ\ 3Û\18ÿ\aå\eÕ\19§\19\8f\ 6ï\a§\15¯
+\95\ 4Ç\12å\ 5\99\ e½\10ï\ 6Û\1a\99\b¹\17ÿ\19±\ 3Ý\10é\19©    Õ\fÃ\a­\ 4÷\19\9d\a¿\e½\ 5»\19÷\1a\87\ f«\18\89\14\81\ eû\bç\eÃ\ 1ã\bÇ\13Ñ\ 3³\10í\13§\ f\99\16ó\15­\11\8d\12Í\1cç\11Ñ\18\99\e\85\18¯\aË\16»\rù\ 1×\r×\15\ fý\v¹\ 3¥\ 3\8b\a\97\15\9d\eå\v\9b\ 2Ù\15Ý\14ñ\ 2ç\ f¡\1c\85\ 5«\bÁ\ f\9f\17Ë\ 3\17õ\ 1ï\12ë\v\91\ 6\ 6ß
\bÇ
\12á\ 6\9d\1c\9f\1cï\13\9b\ 4«\10£\v¹\vÝ\ 1\18Ñ\15Ó\ 2\87\1a\8b\ 1«\1cµ\eÓ   Ë\fï\10\89\1aµ\a§\ 2ù\a\83\ fÝ\vÿ
\ eã\ 6Õ\b\85\16£\ 1¿\1a¿\14Ë\ 1à     á\16\87\1c³\15ç\1a\91\b¡\b×\17\8f\18é\ 3­\e¥\b\87\ 1û       ½\ eÙ\ 1«
+\85
\eé\12Á  Ï\ 2±\17\87\f¥\ 4Å\15\97\ 6·\19Ë\19¹\ 4\85\19¹
\16å\ 3­\19Ó\e\89\f£\19×\11ó\18é\eù\r\9f\1añ\ 6©\16û\15÷\ 6¯\1c½\ 6\95
\ 6\91\aÓ\rÍ\ 5#\85\1cé\ 1\8d\17û\12Û\ 4ß\ e«\13\99\12«\ 2û\a­\fÑ\bñ\15é   ±\b¿\13Ç\16õ\13ã\18ñ\ 3µ\b\17\95\ 1¿\ 1Û\ 2û\ 1Í\v\8b\1a\89\12Û  ç\b«\16é\13É\ 1\8d\ 6\83\ 4«\14±\15\85\12©\12ñ\ 4Õ\18ù\18\9d\ 2¥\10ÿ\1aÍ\17\85\13Ù\a\8d\ 4·\ 6¡\13\87\ 5õ\16ã\ eÝ\b¹\ 6¥\14ÿ\11Ã\ 3Ù   \9b\13£\11×\ 4\95\17Ñ\ 5á\ 5\89\18\91\12å\19¿\18Ý
\15ý\15\9d\ 5Ë\bÛ\ e\9f\eé\11­\ 5\8d\f\8d\r¯\ f\8b\ 4×\ 3¹\ 1\9f\a\93\10£\ 5\9f\18\91\ 2Ï\ 1\93\e\8b\ eÏ\v\8b\10\97\11ç\ e\ 3ã\ f»\ 5Ï\ 4\99\ f\85\15\85\ 1\83\10¯\11©\e§\10Ë\ 2·\1aµ\18ý\ 1ï\ 1£\ 6×\13¥\1c\93\ 2\9b\ 6Ó
\11ù\ fï\fÍ\1a¹\16á\11ù\13\81\15Í      £\18\81\ 6í\v³\18\97\18\93\17\8d\e\8d\18\8b\14\81\18©\15\81\11ñ       ý\ f·\ 4\97   õ\ 2\a\89\11ó\ 6í\15\81\vç\17ç\ 3Å\ 4§      Í\ 6³\a\8b\vã\12É\16Å\18§\ 3\81
\11×\12ý\ e\13\8b\1cõ
\ e¥\17¡\ 3ñ\f\12ã\15\97\ 3ó\12ó\ 1Ã\14õ\10¯\16ï\ f\eã\13¿\12»\ e\83\11ù\b\9f\ 4£
+Wû\ 3á\a¯\eµ\14Ý\ fí\ 3ù
+\85\fÁ\rÝ\ 4\9b\ f»
\18­\ 3ÿ\14¯\19­\16Ã\ få\17á\ 3\87\11\93\ eÛ\ 6\93\18í\19á\ 2û\11¡\ 65\8d
\1c×\ fó\ fË\18¿\v\8f\19ï\16÷\vû\1aí\r\11½\19Ç\ 4Á\ 1õ\11Ó\ 1Ç\15á\ 1­\bß\aá\fÓ\b½\f±\16ù\16¿\ e\97\ 1\9b\ 1ï\15ù\1aÕ\ f¡\ 5¡\1aí\fµ\16«\ 5\81\14ã\ 2­\10Ý\ 3³\16»\ 1\ eï
+\8f\ 5ç\ 2µ\f½\14¡\17\89\13ã\ 3©
\18û\ 5ù\ eÅ\ 2á\1a»\16\95\16ý\1aã\19Ñ\19\9f\b\8b\ 3\8d\13\89\10»\ 2ë\1a÷\ f·\fó\1a\8f\ 2ù\19Ù
\aÛ\19¯\vá\ fû\v\81\ fÇ  £\16\89\e\8b\12÷\fÙ\13á\e\93\ 3Ñ\11\91\ fÑ\ e\8f\1c\9f\ eç\15ë\f\9b\18\83\ 1÷\15³\ e­\ 2¥\ 1\89       É\v³\ 3Ï\bÃ\10\8d       ñ\13Ó\ e\87\rå\rß\10\83\17·\r\9b\bÁ\ 4\85\a\9b\11\8b Í\ 1«\17í\ 5Ë\ 6¡\ fá\13³\r£\ f\8f\v\99\ 5¥\eË\a©\ e\83\15Õ\14Ë\14\ 1\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 36\81\ 2ÿ\ 1ÿ\ 10\82\ 2\80\ 2\80\ 2`\83\ 2\80\ 2\80\ 2\90\ 1\86\ 2\80\ 2\80\ 2À\ 1\83\ 2\80\ 2\80\ 2ð\ 1\89\ 2\80\ 2\80\ 2 \ 2\80\ 2\80\ 2\80\ 2Ð\ 2\ e\ f\ f\10\10\10\10\10\10\11\10\10\10\10\10\11\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\11\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\11\10\10\10\10\10\10\10\10\11\10\10\10\10\10\10\10\10\10\10\10\10\10\10\11\10\10\10\10\10\11\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\11\10\10\10\10\10\10\10\10\10\10\10\10\10\10\11\10\10\10\10\10\10\10\10\10\10\10\12\10\10\10\10\10\11\10\10\11\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\11\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\11\10\10\10\10\10\10\10\10\11\10\10\10\10\10\10\10\10\11\10\10\10\10\10\11\10\10\11\10\10\10\10\10\10\10\10\12\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\13\10\10\10\10\10\10\10\10\11\10\10\10\10\10\11\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\ 3\ 3\ 3\ 3\ 3\ 3\a\ 3\ 5\ 5\ 3\ 3         \ 3\ 3\ 5\ 3\a\ 3  \ 3\ 3\ 3\ 3\ 3\ 5\ 3\a\ 5\ 3\ 5\a\ 3\ 3\a\ 3\ 3\a\ 5\ 3\ 5\ 3\ 3\a\ 5\ 3\ 3\ 3\ 5\ 3\ 5\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 5\ 5        \ 3\ 5\ 3\a\ 3\ 5\ 5\ 3\ 5\ 3\ 3\ 5\ 5\ 5\ 3\ 3\ 3\ 3\ 5\ 3\ 3\v\ 5\ 3\ 3\ 3\ 3\ 3\ 5\a\ 3\ 3\ 3\ 3\ 3\a\ 3\ 3  \ 3\ 5\ 3\v\ 5\ 3\ 3\ 5\ 3\ 5\ 3\ 3\ 5\ 3\r\ 3\ 3\a\a     \ 3\ 5\ 3\a\ 5\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 5\ 5\ 3\ 5\ 3\ 5\ 3\a\ 3\ 3\ 5\ 3\ 5\ 3\a\ 3\ 3\ 5\a\ 3\ 3\ 3\ 3\ 5\ 3\ 3\a\a\ 3\ 3\ 3\ 3\v\ 5\ 5\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 5\ 3\ 5\ 5\ 3\ 5\ 3\ 3    \ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3        \ 5\ 5\a\ 3    \ 5\ 3\ 3\ 3\ 3   \ 5\ 3\ 3\ 5\a\ 3\ 3\ 5\ 5\ 3\ 3\a\ 5\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 5\ 3\v\ 5\ 5\ 3\ 5\ 5\ 3\a\ 3\ 5\ 3\ 3\ 3\ 3  \ 3\ 3      \ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 5\ 3\ 3\ 3\ 5\ 5\ 5\ 3\a\ 3\ 3\ 5\ 3\ 5\ 5\ 3\ 5\ 5\ 3\ 3\ 5\ 5\a\ 5\ 5\ 5\ 3\ 3\ 5\ 5\a\ 3\ 5\ 3\ 3\ 3    \ 3\ 3\ 3\ 3\r\a\ 3\ 3\ 5\ 3\ 3\r\ 5\ 3  \ 5\ 5\ 3\ 3\ 5\ 3\a\ 3\ 3\a      \ 3\ 5\ 3\a\ 5\ 5\a\ 5\ 3\a\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\11\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\a\ 5\ 5\ 3\ 3\v\a\ 3\ 3\a\a\ 5\ 3\ 5   \ 5\a\ 3\ 5\ 5\ 5\a\ 3\ 3\ 5      \ 3\a\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\a\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 5\a\ 3\a\a\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\a\ 5\ 3         \ 3\ 5\ 3\ 3\ 3\ 3\a\ 3\ 3\ 5\ 3\ 3\ 3\r\ 3\ f\ 3\ 5\ 3\ 5\ 5\a\ 3\ 5\ 3\ 3\ 5\ 3\ 5\a\ 5\a\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\a\ 3\ 3\v\ 3    \ 3       \ 3\ 3\ 3\ 3\v\ 5\ 3\a\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 3\a\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5  \ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 5\ 3\ 3    \ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 3\a\ 5\ 5\ 3\a         \ 3\a\ 3\ 5\ 5\a\ 3\ 5\ 3\ 5\ 3\ 3\v\ 3\ 5\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 3  \ 5\a\ 5\ 5\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 5\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3        \ 3\ 5\ 3\ 5\ 5\ 5\ 3\ 3\ 3\ 5\ 5\ 5\ 3\ 5\ 5\ 5\a\ 3\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 5\ 5\ 3\ 3\ 5\ 5\ 3\v\ 5\ 3\ 5\ 5\a\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\a\ 5\ 3\ 5\ 3\ 3\v\ 3\ 3\ 5\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ f\ 3\r\ 3\ 3\ 5\ 5\a\ 3\ 5\a\ 5\a\ 3\ 5\ 3    \ 3\ 3      \ 5\ 5\ 5\ 5\ 3\ 3\ 3 \a\ 3\ 3\ 5\ 3\ 5\ 3\ 5\a\ 3\ 3\ 3\ 3\ 3\ 3 \v\ 3\ 3\ 3\a\ 3\ 3\a\ 5\ 5\ 5\ 5\ 3\ 5\ 3\ 3\ 5\ 5\ 3\ 5\ 3\ 5\ 3\ 3\ 3       \ 3\ 3\ 3     \ 3\ 3\ 5\ 3\ 3\a\ 3\ 3\ 3\ 3\v\ 3\ 3\ 5\a\ 3\ 3\ 3\a\ 3    \ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\a\ 5\ 3\ 3\ 3\ 3\ 5\ 5\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 5\ 5\ 5\ 3\a\ 3\a\ 5\a\ 3\ 3\ 3\ 3\ 3\ 3\ 5    \ 3\ 5\a\ 5\a\ 5\ 5\ 5\ 3\ 3\ 3\ 3\a\ 3\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 5\ 3\a\ 5\ 3\ 3\ 3\a\ 5\ 3\ 3\ 3\ 5\ 5\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 5\ 3\ 5\ 5\a\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 5\ 5\ 3\ 3\a\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\a\ 3\ 3\ 3\ 5\a\ 5\ 3\a\ 5\ 3\ 3\a\ 3\ 5\ 5\ 5\ 5\ 5\v\ 3  \ 3\ 3\a\ 3\ 3\a          \ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3        \ 3\ 5\ 5\a\ 3\ 5  \ 3\ 3\a\ 5\ 5\ 3\ 3\ 3\ 3\ 5\ 3\ 3\a\ 3  \v\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 3\a\ 3\ 3\ 3\ 3\a\ 3\ 5\ 5\ 3\ 5\ 3\ 3\ 3\a\ 3\ 3\a\ 3\ 3\ 5\ 3\ 3\ 5\a\ 3\ 5\ 5\ 3\ 3\ 3\ 3\v\ 3\ 3\ 3\a\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 5\a\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\a\ 3\ 5\ 5\ 3\ 3\ 3\a\ 3\ 3\a\ 5\ 3 \ 3\ 3\ 3\ 3\a\ 5\ 5\ 3\ 3\ 5\ 3\ 3\a\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\a\ 3\ 3\ 5\ 3\ 5\ 3\ 5\a\ 3\1e\9a\ 3ÿ\ 1ÿ\ 1\ 3\80\ 2\80\ 2\ 3\80\ 2\80\ 2\90\ 1¢\ 3\80\ 2\80\ 2À\ 1\19\ f\ f\1a\10\10\1c\10\10\19\10\10\19\10\10\19\10\10\1d\10\10!\10\10\13\10\10\18\10\10\e\10\10\19\10\10\19\10\10\15\10\10\1f\10\10\16\10\10\1c\10\10\19\10\10\1a\10\10\1c\10\10!\10\10 \10\10\19\10\10\19\10\10 \10\10#\10\10\14\10\10\1a\10\10\1a\10\10\1f\10\10\1c\10\10\14\10\10!\10\10\16\10\10\19\10\10\e\10\10"\10\10\15\10\10\1c\10\10\13\10\10\e\10\10\19\10\10\1c\10\10\e\10\10!\10\10 \10\10\1a\10\10 \10\10\1a\10\10\1a\10\10\18\10\10\18\10\10\1a\10\10\1f\10\10\17\10\10\17\10\10\19\10\10\16\10\10!\10\10\1e\10\10\1f\10\10\1c\10\10\16\10\10\18\10\10\e\10\10\15\10\10\1c\10\10\17\10\10\15\10\10\ 3\ 3\ 3\ 3\ 3\ 3\a\ 3\ 5\ 5\ 3\ 3          \ 3\ 3\ 5\ 3\ 3\ 5\ 3 \ 3\ 3\ 3\ 3\ 3\ 5\ 3\a\ 5\ 3\ 5\a\ 3\ 3\a\ 3\ 3\a\ 5\ 3\ 5\ 3\ 3\a\ 5\ 3\ 3\ 3\ 5\ 3\ 5\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 5\ 5        \ 3\ 5\ 3\ 3\ 5\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 5\ 3\ 3\ 3\ 3\ 5\ 3\ 3\v\ 5\ 3\ 3\ 3\ 3\ 3\ 5\a\ 3\ 3\ 3\ 3\ 3\a\ 3\ 3\a\ 3\ 3\ 5\ 3\v\ 5\ 3\ 3\ 5\ 3\ 5\ 3\ 3\ 3\ 3\ 3       \ 5\ 3\ 3\a\a\a\ 3\ 3\ 5\ 3\a\ 5\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 5\ 5\ 3\ 5\ 3\ 5\ 3\a\ 3\ 3\ 5\ 3\ 5\ 3\a\ 3\ 3\ 5\a\ 3\ 3\ 3\ 3\ 5\ 3\ 3\a\a\ 3\ 3\ 3\ 3\v\ 5\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 5\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 3\a\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3       \ 5\ 5\a\ 3    \ 5\ 3\ 3\ 3\ 3   \ 5\ 3\ 3\ 5\a\ 3\ 3\ 5\ 5\ 3\ 3\a\ 5\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 5\ 3\ 5\a\ 5\ 5\ 3\ 5\ 5\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 3\ 3        \ 3\ 3      \ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 5\ 3\ 3\ 3\ 5\ 5\ 5\ 3\a\ 3\ 3\ 5\ 3\ 5\ 5\ 3\ 5\ 5\ 3\ 3\ 5\ 3\ 3\a\ 5\ 5\ 5\ 3\ 3\ 5\ 5\ 5\ 3\ 3\ 5\ 3\ 3\ 3  \ 3\ 3\ 3\ 3\r\a\ 3\ 3\ 5\ 3\ 3\a\a\ 3\ 3\ 3        \ 5\ 5\ 3\ 3\ 5\ 3\a\ 3\ 3\ 5\ 3     \ 3\ 5\ 3\a\ 5\ 5\a\ 5\ 3\a\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\r\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\a\ 5\ 5\ 3\ 3\v\a\ 3\ 3\a\a\ 3\ 3\ 3\ 5\ 5\ 5\ 5\a\ 3\ 5\ 5\ 5\a\ 3\ 3\ 3\ 3\ 5\ 5\ 3\a\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\a\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\a\ 3\a\a\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\a\ 5\ 3                \ 3\ 5\ 3\ 3\ 3\ 3\a\ 3\ 3\ 5\ 3\ 3\ 3\ 5\ 5\ 5\ 3\ f\ 3\ 5\ 3\ 5\ 5\a\ 3\ 5\ 3\ 3\ 5\ 3\ 5\a\ 5\a\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\a\ 3\ 3\v\ 3  \ 3       \ 3\ 3\ 3\ 3\v\ 5\ 3\a\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5        \ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 5\ 3\ 3   \ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 3\a\ 5\ 5\ 3\a         \ 3\a\ 3\ 5\ 5\a\ 3\ 5\ 3\ 5\ 3\ 3\v\ 3\ 5\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\a\ 5\a\ 5\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3     \ 3\ 5\ 3\ 5\ 5\ 5\ 3\ 3\ 3\ 5\ 5\ 5\ 3\ 5\ 5\ 5\a\ 3\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 5\ 5\ 3\ 3\ 5\ 5\ 3\v\ 5\ 3\ 5\ 5\ 3\ 5\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 5\ 3\ 5\ 3\ 3\v\ 3\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ f\ 3\r\ 3\ 3\ 5\ 5\a\ 3\ 5\a\ 3\ 3\a\ 3\ 5\ 3        \ 3\ 3      \ 5\ 5\ 5\ 5\ 3\ 3\ 3 \a\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3               \ 3\ 3\ 3\ 3\a\ 3\ 3\a\ 5\ 5\ 5\ 5\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 5\ 3\ 3\ 3\a\ 3\ 3\ 3\ 3 \ 3\ 3\ 5\ 3\ 3\a\ 3\ 3\ 3\ 3\v\ 3\ 3\ 5\a\ 3\ 3\ 3\ 5\ 3\ 3\ 3\a\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\a\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 5\ 5\ 5\ 3\a\ 3\a\ 5\a\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 5\a\ 5\ 3\ 5\ 5\ 5\ 5\ 3\ 3\ 3\ 3\a\ 3\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 5\ 3\a\ 5\ 3\ 3\ 3\a\ 5\ 3\ 3\ 3\ 5\ 5\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 5\ 3\ 5\ 5\a\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 5\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 5\a\ 5\ 3\a\ 5\ 3\ 3\a\ 3\ 5\ 5\ 5\ 5\ 5\v\ 3       \ 3\ 3\a\ 3\ 3\a          \ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\a\ 3\ 5\ 5\a\ 3\ 5        \ 3\ 3\ 3\ 5\ 5\ 5\ 3\ 3\ 3\ 3\ 5\ 3\ 3\a\ 3         \ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 3\a\ 3\ 3\ 3\ 3\a\ 3\ 5\ 5\ 3\ 5\ 3\ 3\ 3\a\ 3\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 5\a\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3   \ 3\ 3\ 3\a\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 5\a\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 3\a\ 5\ 3\ 5\ 5\ 3\ 3\ 3\ 3\a\ 5\ 5\ 3\ 3\ 5\ 3\ 3\a\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 5\a\ 3\1e\8a\ 3ÿ\ 1ÿ\ 10\9d\ 3\80\ 2\80\ 2`\99\ 3\80\ 2\80\ 2\90\ 1\96\ 3\80\ 2\80\ 2À\ 1\19\ f\ f\19\10\10\1c\10\10\19\10\10\17\10\10\19\10\10\1a\10\10\1c\10\10\16\10\10\15\10\10\1a\10\10\1a\10\10\15\10\10\14\10\10\18\10\10\1d\10\10\16\10\10\e\10\10\17\10\10\1a\10\10\19\10\10\1f\10\10\1c\10\10\1a\10\10\18\10\10\e\10\10\1d\10\10\18\10\10\16\10\10\16\10\10\1c\10\10\1d\10\10\e\10\10\1a\10\10\e\10\10\13\10\10\18\10\10\e\10\10"\10\10\15\10\10\19\10\10\12\10\10\18\10\10\1a\10\10\1c\10\10\19\10\10\1d\10\10\1d\10\10\1c\10\10\19\10\10\1a\10\10\18\10\10\1a\10\10\14\10\10\16\10\10\e\10\10\1a\10\10\18\10\10\17\10\10\16\10\10\16\10\10\e\10\10%\10\10\e\10\10\19\10\10\15\10\10\18\10\10\18\10\10\17\10\10\15\10\10\17\10\10\17\10\10\12\10\10\a\ 3\v\ 3\ 5  !\v\ 3\a\a\ 3\a\a\ 5       \ 3               \ 5\ 3\ 5\ 3\ 3\11\ 5\ 3\v\ 3\ 5\ 5\15\r\ 3 \a               \ 5\r\v\ 5\ 5\ 3\ 5\v\v\13\ 3\a\v\ 5\ f\ 3        \ f\ 3\a\ f\ 3\a\13\ 3\ 3       \ 5\ 5      \a\r\e\ 3\ 5   \ f\a\ 3\ 5\11\a\ 3\ 5\ 3\v      \ 3\a      \ 3\a\ 5\ f    \a\ 3\a\a\ 5\v\ 5\ 5\a\ 3              \ 5\v\v\v\ 3   \a\ 3\v\ 3\a\a\ f\ 3\ 5\a\ 3\ 3\ 3\ 5\17\v                \ 3\ 3\r     \a\ 3\ 3\ 3    \ 5\ 5\ 3\ 5\15\ 5\v\13\v\ f\a\v    \ 3\v\ 5\ 3\ 3\r\ f\ 5\11\v      \ 3\ 3\r\ 3    \v\r\e\ 5\ 3\ 3\ 3!\ 3\13\a\ 5\ 3\ 5\ 3\r\ 5\17\ 3\r\17\r  \a\ 3\a\v\v\v\ 3\ 3\ 3\ 3\a\ 5\ 3   \ 5\ 3\ 5\v\ 3\a\r\v\v\ 5\ 5\ 5\r           \v\ 3\r\a\ 5%\ 5\ 5\a\ 3\ 5\ 3\a\17\a\ 5\a\ 3\ 3\ 5\ 3\ 3\a \r\15\ 3\a\v\ f  \ 5\a\a\ 3\a\ 3\ 5\ 3\ 3\ 3\ 5\13\ 3\a\ 3\a\r\ 3\ 3\v\r\15\a\17\ f\r\ 5     \ 3\13\ 3\ 5\a\ 3\ 3\v\ 5\1d\ 5\ 3\ 3\r  \a\a      \a\a\ 5\ 3\ 3\ 5\v\a\v       \ 3\ 5\ 5\ 5\ 3\r\v\a\ 5\v\a\a\11\ 5\11\a\ 5\ 3      \a\a\a\r    \a\ 5      \ 5       \1d\13\a\v\r\ 3  \ 3\ 3      \r\ 5\ 5\13\r\a  \ 3\a\ 3     \e\a      \ 5\r\ 3\ 5\a\ 5\ 3 \e\ 3\ 5\ 3\11\v\ 3\a\a\ 3\ 3\ 3\a\13\a\v\ 3       \r       \ 5\a\13\v    \v\a\ 3\ 5\ 3\ 3\ 3\r\ 3\ 5\v\v\ 5\a\ 5\v\a\ 3      \ 3\19\ 3\r\ 3\ 3\ 3\ 5\a       \v\ 3\a\ 5\r\ 3\ 3\ 3\ 3\ 5\r\a\ 3\a\ 3\ 5\ 5\ 3\ 5\ 3\a\ 5\a\a\r\ 5\ 5\15    \r\v\ 3!\ 3\ 3\ 3\ 3        \ 3'\ 3\ 3\a   \a\a\ 3\v\17\ 5\a\ 5        \ 3\ 3\a\r\ 3\a  \ 5\ 5\a\ f\ 3\a  \ 3)\11     \13\ 3\ 3     \ 3\ 3\ f     \ 3       \ 3\v\v\ 3\ 3\ f\ 5\ 3\a\ f\ 3\ 5\v   \v\11      \ e\81\aÿ\ 1ÿ\ 10\85\a\80\ 2\80\ 2`5\ f\ f)\10\10>\10\10@\10\10?\10\10-\10\103\10\102\10\10/\10\10A\10\10K\10\10E\10\10&\10\10<\10\109\10\109\10\10,\10\10D\10\107\10\107\10\106\10\10L\10\106\10\10<\10\104\10\10;\10\10#\10\10)\10\10J\10\105\10\10I\10\100\10\10\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 5\ 3\ 3            \ 3\ 3\ 5     \v\ 3\ 3\ 3\ 5\ 3\ 3\ 3\a\ 5\ 3\ 5\a\ 3\ 3\ 5\ 3\ 5\a\ 5\ 3\a\ 3\a\ 5\ 5\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 5\a\ 3\ 3\ 5        \ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 5\a\ 3\ 3\ 5  \ 3\ 3\ 3\ 3\ 5\ 3\ 3\a\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 5\a\ 3\ 3\ 3\ 3\ 3\ 3\a\ 3\ 3\a\ 3\ 5\ 3\ f\ 3\a\a\ 3\ 3\ 5\ f\ 3\ 3\ 3\ 5\ 5\ 3\ 3\a          \ 3\ 3\ 5\ 5\ 3   \ 5\ 5\a\ 3\ 5\ 5\ 5\ 3\ 5\ 5\ 5\ 3\ 3\a\a\ 5\a\ 5\ 3     \ 3\ 5\a\ 3\ 5\a\ 3 \a\ 3\ 3\ 3\ 3\ 3  \ 5\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 5\ 3\ 5\ 3\ 3\ 3\a\ 3      \ 5\ 3\ 3\ 3\ 3\ 3\a\ 5\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 3\a\ 5\ 3\ 3    \ 5\ 5\a\ 3    \ 5\ 3\ 3\ 3\ 3   \ 5\ 3\ 3\ 5\a\ 3\a\ 5\ 3\ 3\a\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\a\r\ 5\ 5\ 3\ 5\ 5\ 3   \a\ 3\ 3\ 3\ 5\ 5\ 3\ 3        \ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 5\ 3\ 3\ 3\ 5\ 5\a\ 3\ 5\ 3\ 3\ 5\ 3\ 5\a\ 5\ 5\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 5\ 5\ 5\ 3\ 3\ 5\ 5\a\ 3\ 5\ 3\ 3\ 3   \ 3\ 3\ 3\ f\a\ 3\ 3\ 5\ 3\ 3\r\ 3\ 3\ 3\r\ 5\ 3\ 3\ 5     \ 3\ 3\ 5\ 3    \v\ 5\ 5\ 5\ 3\ 5\ 5 \ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 5\13\ 3\ 3\ 3\ 3\ 5  \ 5\ 5\ 3\ 3\ 3\ 3\ 5\ 5\v\ 5\ 3\ 3\v\a\ 3\ 3\a\ 5\ 3\ 5\ 3\ 5\ 5\ 5\ 5\a\ 3\ 5\ 5   \ 3\ 3\ 3\ 5\ 5\ 5\ 5\ 5\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\a\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 5\a\ 3\a\a\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 5\a\a\a\ 3    \ 3\ 3\ 5\ 3\ 3\ 3\a\ 3\ 3\ 5\ 3\ 3\ 3   \ 5\ 3\ 5\ 3\v\ 5\a\ 5\a\ 3\ 5\ 3\ 3\ 3\ 3\a\ 3\ 5\ 3\ 3\ 5\a\ 3\ 5\ 3\ 3\ 3\ 3\ 3\a\a\ 3        \ 3\r\a\ 5\a\ 3\ 3\ 3\ 3\ 3\v\ 5\ 3\a\ 3\ 3\ 3\a\ 3\ 5\a\ 3\ 3\ 5\ 3\ 3\a\ 3\ 3\ 3\ 3\ 3        \ 3\a\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 5\ 3\ 3  \ 3\ 3\ 5\ 5\ 5\ 3\ 3\ 3\ 3\a\ 5\ 5\ 3\ 5\ 3\ 3\ 5\ 3              \ 3\ 5\ 3\ 3\a\ 3\ 5\ 3\ 5\ 3\ 3\v\ 3\ 5\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 5\ 3\a\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 5\ 5\ 3\ 5\ 3\ 3\ 5\ 3\ 5\ 3\ 5\ 3\ 3\ 3\ 3\r\ 3\ 3\ 3\ 5\ 5\ 5\ 3\ 3\a\ 5\ 3\ 3\ 3  \ 3\ 3\ 3\ 5\ 3\a\ 3\ 3\ 3\ 5\ 3\ 5\ 3\ 5\ 3\ 5\a\ 5\a\ 5\ 3\ 5\ 5\ 3\ 5\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 5\ 3\ 3\ 3\ 5\v\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\a\ 3\ 5\11\ 5      \ 3\a\ 5\a\ 3   \ 3\ 5      \ 5\ 3      \ 3\v\ 5     \ 5\ 3\ 5     \a\ 3\ 3\ 5\ 3\ 5\ 3\v\ 5\ 3\ 3\r\v\ 3\ 3 \a\ 5\ 5\ 5\ 5\a\a\ 3\ 5\ 5\ 3\ 5\ 3\ 5\ 3\ 5        \ 3\ 3\ f\a\ 3\a\ 3\ 3\ 3\ 3\v\ 3\ 3\ 5\a\ 5\ 3\ 3\ 5\ 3\ 3\a\ 5\ 5\ 3\ 3\ 5\ 3\ 5\ 3\ 3\ 3\a       \ 3\a\ 5\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 3   \ 3\ 3\ 3\ 3\ 5\ 3\a\ 5\a\ 3\ 3\ 3\ 3\ 3\ 3\a\a\ 3\ 5\ 3\ 5\ 5\ 3\ 5\ 5\ 5\ 3\ 3\ 3\ 5\a\ 5        \ 3\ 3\ 5\r    \ 5\ 5      \ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 5\ 3\ 5\ 5    \ 3\ 3\ 5\ 3\ 3\ 5\ 5\ 5\ 5\v\ 3\a\ 3\ 3\ 3\ 3\ 3\a\ 5\ 3\ 5\a\ 5\ 3\ 5\ 3\ 5\ 3\ 3\a\a\ 5\ 5\ 5\ 3\ 3\v\ 3\ 3\a\ 3\ 3\a\ 3\ 3\a\ 5\ 5        \ 3\ 3\ 5\ 5\ 5\ 3  \ 3\ 5\ 5     \ 5       \ 3\ 3\ 3\ 5\ 5\ 3\ 5\ 5\ 3\ 5\ 3\v\ 5\ 5\ 5 \ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 5\ 5\ 3\a\ 3\ 3\ 3\ 3\a\ 3\ 5\ 5\a\ 3\r\ 3\a\ 3\a\ 3\ 3\ 5\a\ 3\ 5\ 5\ 3\ 3\ 3\ 3     \ 3\ 3\ 3\ 3\ 5\ 3\ 3\a\ 5\ 3\ 3\ 5\ 5\a\ 3\ 3\ 5\ 3\ 3\ 3\ 5\a\v\ 3\v\ 3\ 3\a\ 5\ 3  \ 3\ 3\ 3\ 3\v\ 5\ 3\ 5\ 3\ 3      \ 3\ 3\ 3\ 5\ 5\ 5\ 3\ 3\ 5\ 3\a\ 3\ 3\ 5\ 3\ 5\ 3\ 5\a\1eÂ\ 3ÿ\ 1ÿ\ 1\ 3\80\ 2\80\ 2\ 3\80\ 2\80\ 2\90\ 1Ê\ 3\80\ 2\80\ 2À\ 1\18\ f\ f\1d\10\10\1d\10\10\18\10\10\18\10\10\18\10\10\1f\10\10#\10\10\1f\10\10$\10\10\17\10\10\1a\10\10\1c\10\10\1e\10\10\e\10\10\1d\10\10\18\10\10\19\10\10\1a\10\10%\10\10#\10\10 \10\10 \10\10\1e\10\10\17\10\10\19\10\10\1d\10\10\18\10\10\1f\10\10\e\10\10!\10\10\e\10\10\19\10\10\19\10\10\1f\10\10\15\10\10\14\10\10\18\10\10\e\10\10\19\10\10\e\10\10\18\10\10"\10\10'\10\10%\10\10!\10\10#\10\10\1a\10\10\1a\10\10\19\10\10\e\10\10$\10\10\1a\10\10\e\10\10\1e\10\10\1e\10\10"\10\10\1f\10\10\16\10\10\1f\10\10\19\10\10\e\10\10#\10\10\1a\10\10\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 5\ 3\v \ 3\ 3\ 5\ 3\a   \ 3\ 3\ 3\ 3\ 5\ 5\ 3\a\ 5\ 3\ 5\a\ 3\ 3\ 5\ 3\ 5\ 3\ 5\ 5\ 3\a\ 3\v\ 5\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 5\a\ 5\ 5  \ 3\ 3\ 3\ 3\a\ 3\ 3\ 3\ 5\a\ 3\ 3\ 5\ 5\ 5\ 3\ 3\ 5\ 5\ 3\ 3\a\ 5\ 5\ 5\ 3\ 3\ 3\ 5\a\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 3\a\ 3\ 5\11\ 3\ 3\ 5\a\ 3\ 3\ 5\ f\ 3\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 5    \a\ 3\ 3\ 3    \ 3       \ 3\ 3\ 5\ 5\ 3\ 3\ 5 \ 3\ 5\ 5\ 5\ 3\ 3\a\a\ 5\a\ 5\ 3\a\ 3\a\a\a\a\v\a\ 3\ 3\ 3\ 3\ 3       \ 5\ 5\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 5\ 3\ 5\ 5\ 3\a\ 3\ 3\a\ 3\ 3\ 3\ 3\ 3\ 3\ 3\a\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\a\ 5\ 3\ 3       \ 5\ 5\a\ 3    \ 5\ 3\ 3\ 3\ 3   \ 5\ 3\ 3\ 5\a\ 3\a\a\ 3\a\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\a\r\ 3\ 3\ 5\ 3\ 3\ 3\ 5\ 3  \a\ 3\ 3\ 3\ 5\ 5\ 3\ 3        \ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 5\a\ 3\ 5\ 5\ 5\ 3\ 5\a\ 5\ 5\ 3\ 3\ 5\ 5\ 3\ 3\ 3        \a\ 3\ 5\ 5\a\ 3\ 5\ 3\ 3\ 3      \ 3\ 3\ 3\ f\a\ 3\ 3\ 5\ 3\ 3\r\ 3\ 3\ 3\ 5\r\ 3\ 3\ 5     \ 3\ 3\ 5\ 3\a\r\ 5\ 5\ 5\ 3\ 5\ 5    \ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 5\15\ 3\ 3\ 3\ 3\ 3  \ 5\ 5\ 3\ 3\ 5\ 5\ 3\ 3\v\ 5\ 3\ 3\v   \ 3\a\ 5\ 3\ 5\ 3\ 5\ 3\a\ 5\r\ 5    \ 3\ 3\ 5\ 3    \ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\a\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 5\ 5\a\ 3\a\a\ 3\ 3\ 3\a\ 5\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 5\a\r\ 3    \ 3\ 3\ 5\ 3\ 3\ 3\a\ 3\ 3\ 5\ 3\ 3\ 3   \ 3\ 3\ 3\ 5\v\ 3\ 3\ 3\a\ 5\a\ 3\ 5\ 3\ 3\ 3\ 3\a\a\ 3\ 3\ 5\a\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\a\ 3     \ 3\r\a\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\v\ 5\ 3\a\ 3\ 3      \ 3\ 5\a\ 3\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\a\ 3\ 3\a\a\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\a\ 3\v\ 3\ 5\ 5\ 5\ 5\ 3\ 3\a\ 5\ 5\ 3\ 5\ 5\ 5\ 3          \ 3\ 5\ 3\ 3\a\ 3\ 5\ 3\ 5\ 3\ 3\v\ 3\ 5\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\a\a\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 5\ 5\ 3\ 5\ 3\ 3\ 5\ 3\ 5\ 3\ 5\ 3\ 3\ 3\ 3\v\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 5\ 3\ 5\ 5\ 3\ 3\ 3 \ 3\ 3\ 3\ 5\ 3\a\ 3\ 3\ 3\ 5\ 3\ 5\ 3\a\ 5\a\ 5\a\ 5\ 3\ 5\ 5\a\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\v\ 3\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 3     \ 3\ 5\11\ 5    \ 3\a\ 5\a\ 3   \ 3\ 3\ 3     \ 5\ 3      \ 3\ 5\a     \ 5\ 5\ 3\ 3\ 3   \a\ 3\a\ 3\ 5\ 5\r\ 3\ 3\r\v\ 3\ 3\ 3\ 3\ 5\a\ 5\ 5\ 5\ 5\a\a\ 3\ 5\ 5\ 3\ 5\ 3\ 5\ 3\ 5\ 3\a\ 5\v\ 5\a\ 3\a\ 3\ 3\ 5\ 3    \ 3\ 3\ 5\ 5\ 3\ 5\ 3\ 3\ 5\ 3\ 3\a\ 5\ 5\ 3\a\ 3\ 5\ 3\ 3\ 3\a  \ 3\ 5\ 3\a\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 5\v\ 3\ 3\ 3\ 3\ 5\ 3\a\ 5\a\ 3\ 3\ 3\ 3\ 3\ 3\r\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 5\ 5\ 5\ 3\ 3\ 3\ 3\ 3\a\ 5  \ 5\ 5\r\11    \ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 5\ 3\ 5\ 5\a\ 3\ 3\ 3\a\ 3\ 5\ 5\ 5\ 5\v\ 3\a\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 3\ 5\a\ 5\ 3\ 5\ 3\ 5\ 3\ 3\ 3\ 5\a\ 5\ 5\ 5\ 3\ 3\v\ 3\ 3\a\ 3\ 3\a\ 3\ 3\a\ 5  \ 5\ 3\ 3\ 5\ 5\ 5\ 3 \ 3\ 5\ 5     \ 5       \ 3\ 3\a\ 5\ 3\ 5\ 5\ 3\ 5\ 3\ 3     \ 5\ 5\ 5     \ 3\ 5\ 3\ 5\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 3\a\ 3\ 3\ 3\ 3\a\ 3\ 5\ 5\ 3\ 5\ 3\ 3\ 3\a\ 3\ 3\a\ 3\a\ 3\ 3\ 5\a\ 3\ 5\ 5\ 3\ 3\ 3\ 3\v\ 3\ 3\ 3\ 5\ 3\ 3\a\ 5\ 3\ 3\ 3\ 3\ 5\a\ 3\ 3\ 5\ 3\ 3\ 3\ 5\a\v\ 3\v\ 3\ 3\a\ 5\ 3\ 5\ 5\ 3\ 3\ 5\ 5\a\ 5\ 3\ 5\ 3\ 3      \ 3\ 3\ 3\ 5\ 5\ 5\ 3\ 3\ 5\ 3\ 5\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 3\ 5\1eÂ\ 3ÿ\ 1ÿ\ 1\ 3\80\ 2\80\ 2\ 3\80\ 2\80\ 2\90\ 1Ã\ 3\80\ 2\80\ 2À\ 1\19\ f\ f\1c\10\10\1d\10\10\19\10\10\1a\10\10\18\10\10&\10\10\1e\10\10\1d\10\10$\10\10\1a\10\10\17\10\10\1a\10\10\1f\10\10\e\10\10\e\10\10\16\10\10\1d\10\10"\10\10 \10\10 \10\10!\10\10"\10\10"\10\10\15\10\10\1c\10\10\1e\10\10\1c\10\10\1a\10\10\1e\10\10\1d\10\10\16\10\10\1c\10\10\1f\10\10\e\10\10\15\10\10\16\10\10\18\10\10\18\10\10\1e\10\10\16\10\10\17\10\10*\10\10#\10\10%\10\10\1e\10\10 \10\10\1a\10\10\1c\10\10\e\10\10\e\10\10$\10\10\19\10\10\1c\10\10\e\10\10 \10\10"\10\10\1d\10\10\16\10\10\19\10\10\1a\10\10\1a\10\10"\10\10\19\10\10ë\10£\ 4ï\17\9f\ 1©\18Ó\fß\12Õ
+\89\ 1í
+\81      ÷\13÷\16÷   \8d\16ß\16Õ\1cÑ\1aÓ\13\89\1c³\1a\9f\ 3£\10ß\17\8f\e£\12ë\eá
\r\87\v\8f\16\97\vñ\19ï\ 5³\11§\11Ç\ e\89\bë  ±\e\89\17¿\11Ñ\e\8f\ 1Ï\eû\16\8d\a\89\ eÕ\13\8f\11û\18õ       §\fÏ\14å\13\83\16·\15\83\13Í\16Ù\ 3¹\e¹\12ë\rÿ A\91\rÅ\17Ç\a\9d\bË\13¯\r§\ 6\8d\ f½\15ÿ\ 3ß\ f\81\rë\ fá\10Ù\vý\ 4¹\ 5Ç\e§\1c¿\19¿      û\14\97\r\ 3\95\r¯\14É\14ù\f©\võ\rù\11Ã\13\93\14½\ 1½\v\9d\ 4Ç\fç\ 6\8b\16Ï\ eë\16¡\12ù\ 2ñ\r÷\ 3Û\13\9b\1cù\14å\16¿\ 4»\ 3\87
+\81\b\9f\v\91\17Ñ\v×\10ç
\ 4ë\ 4ó\17¥\a\8b\18«\fã\eõ\ 5É\rµ\ 1±  ß\13\87\ 6ë\11ý \89\ f½\17¥\15\97\b¥\ 2¯\13·\1cí\16m\95\ fÅ
\fÇ\1aÓ\ 6Ù\ e\95\13\83\ eß\15\99
\ 3¹\1aÁ\13Å\ 3ó\bõ\e÷\r\91\ e\9d\18Ç\18Å\12±\ 1Ë\ 4Õ\ eÁ
\19\87\15\81\17¿\ f©\ fÛ\e\85\ 4©\ 6\89\ 6¯\17Ó\a\91\1aß\ 5\99    ·\16û\13ý\11Ç\ 2ù\ 5\91\ 3á\15å\14\8d\15½\1a\99\1a\9d\17\8f\ e\9b\10ó\ eÃ\15Ó\ 4ë\aÙ\14½\18ó
\14\9d\rË\10÷\17í\14Ã\18\83\fí\ f\97\19Ï\1c§
\19?ÿ\16\8b\15û\ 4\85\10Ù\10»\v\91\18×     Í\ f\83\19\97\17Ý\18Û\rÁ\19ù\e§\17Õ\16\87\17Å\11û\r¹\15É\ 4Õ\ 5Ñ\16©\b÷\ 5¥\18\95\ 2\8b\ 6»\12\93\12µ\ 6­\18á\v\95\f\83\aÅ\ 5Õ\ 2Ó\19ó\11\r«\vÇ\ 5Ó\1añ\18û\19\97\ e\9b\ e§\13½\ 2÷
\f¯\12\9f\ 2í\ 6Í\ eé
+\91\v\93\f¡\16×\e¡\ 2Á\10\95\14\83\14¥      é\ 4û\ f\9d\12\14³      \83
+ÿ\ eÏ\12w\97\ 4\14Ý\1a\85\11õ\ e\83\1a\9f\13³\ fû\ 6ý\ 5Ã\ 5Í\14¯\ 3å      sÿ\ 6Ç\11×\ 5\91\15\85      \8b\17Ï
+\9b\17½\13É\b¹        Ã\1cù\ 3¡\19É\13\9f       \15Ñ\13±\11µ\r\8f\10ã\ 1\v\18\99\19\9f\ 6õ\ f\99\11É\ eý\12Å\eÉ\19ñ\10Á\a­
\a\83    ß\ 6CO\95\10\9b\ 3\99\ 6½
+\81\ 3·\12\7fÅ\a«\ fÃ\v\9d\14\99\17Ï\15\91\16¿\ 2\83\rÅ\v±\19¡\10\8b\b\89\19Ñ
\1c¯\ 6\97\ 5µ\11\93\15Í\bç\13Õ\15Ï\13\99\ 1÷\10©\ 5Ï\17\93\ 4µ\ eß\ 1±\ 2©\19³\ 5g\87\19\85\vý\b\87\13\87       ó\aÕ\10ë\ 6\99\aÿ\12­\a\97\14Í\ 4§\18\9d\fÁ\bÕ\1a¹\18Ó\1cÍ\eñ\ f¿\1c»\ f£\aµ\17Ë\ 5£\1c\85\17á\ 4\9b
\ e£\15Õ  ­\r\97\1aÙ\18É\1a¹\19õ\fÉ\10\91 ë\17Ç\rå\11ï\11ó\ 5ç\fÿ\e¯\15»       \97\fù\ 6Ù\r\87\14ë\ 1\85\ 3Ç\v\9d\19¯       7×\ 6×\f\83\e\9b\e\8b
\16§\vÿ\13ÿ\17©\1a§\1a­\ 6½\1cå\15¯\1a\81\eá\rÛ\ f­\v»\b¡        ¡\r\87\10©\17\ 4Í\13\99\13\9d\10É\ 5Û\17å\1aû\ 2£\ e±\ 5¯\ e÷\eÍ\ 2Õ\ 1¡\18Å\1a\9b\f\8d\10\8d\1a¹\ 2Õ\r\81\ 5ï\1a\10õ\ 4\87\12É\ 6ó\19¡\ e©\ 2¥\ eé\ 2í\ 1ý\17Ñ\ 6Û\f©\10·\a\9d\v©\1c£\17¯\18Á\1cÿ\v»\1c£\1aÛ\ 1õ\1a»\10é\1aé\16³\v\83\bõ\14\89\ 3Ó\10Õ\v­\17Ç\19Á\16Ù\ 2ó\14\91\ 4\9b\ 5\87\16÷\ e\e¹\r·\14±\14\9d\ 6÷\bã\f\87\a\8b\eÝ\ 6\9d\13¡\aÉ\ fÅ\f\9d\11õ\aÍ\15ë\ 2Ó\18ÿ\ 1¿\15ñ
+\91\eµ\15Ó\vó\rÛ\15×\ e\91\19ß\v\87\ e;\89\15å\ 2\9f\12Ç\14Û\10·\ fÇ\17Ï\ 3Ã\r÷\11í\ e¥\12É\ 3Ý\16ß\ 4í\17ÿ\ 2÷\ 4±\10Ë\eû
+·      \97\16Ï\16Ù\12Ý\e\9b\15ë\ 3³\19Í
\17å\ 4¡\eï\ 3\9d\ fç\v­\14¹\bÁ\12\95\v\9f\rç\rñ\16·\ 2ý\19­\13Á\ 3\93\ 5Á\vÙ\ fý\10¥\ 6±\v\8b\r£\ 3\95    MÑ\f×
\17©\ 4\95\e\81\aå\12\89\rí\a×\ 2ç\ 4é\10{\8b\11×\v\9d     ¿\17í\ 4ë
\ eÿ\18\99\ 2\9f\15\81\1a\85\ 6£\bÅ\10©\13»\17\91\1cë\12ó\10ç\ 5Q\99\r¯\10µ\12ï\vñ\1aï       ù\10å\ eá\ eÏ\ 5\ 5á\14ï\19\8d\v\8b\19\1få\a«\ eÙ\11Å\ 1é\15í\11Ý\17Ù\ 5³
+ç      \8f\bÿ\ 4ç\a¡\11¥\ 5Ó\17¹\14Ë\v¿\10ã\17ã\ 5¥\19ù\17¥\1aÓ\ 5í\bÓ\11£\ 2§\16\9b\1a\8f\13±\1añ\a\97\12÷\14\93     ß\rý\e§\ 4Á\18¿\a«\ 6\81\19ó\fý\f\14¥\r©\a\9f\14õ\18µ\1c\99\fý\aí\eÙ\ 4É        ë\ 5Ó\159\85\14\97\13µ\ 3Ñ\17¹\a\9d
\ 5Û\11¯\ 4ó\ 2Ç\ 6\89
+\87\ 3±\ f÷\ 2\87\b«\11ã\1añ\e\99\18÷\12Å\14\87\ 4É\15ã\a\ 2Ë\17ç\ 1Ã\ 2¥\vÏ\r£\rÙ\f§\14Á\11Ý\r×\14Ï\ 6¿
+\8d\ 5Ý\ 2µ\ 4É\18å\10¡\fç\12Ñ\rÃ\12«\ 4\95\ 5\99\1cÉ\12×\18Ã\1aß\19±\ eû\10¡\v½\eõ\17½\16ã\10\19Û\16\91
+\81\ 1Ó\ 3ï\ 4Ý\aá      Ë
\ 1\8f\1a\9b\r÷\ 1¹\ f¹\13\9f\16¥\ fÁ\17\9f\ 5³\1cÕ\a\95\11ÿ\ f½\ fÍ\ 3Á\ 5\93\vå
\1a\9b\a×\19ß\bÉ\11å\bÙ\1a\93\11\8d\ 1é\ 5ß\f\9b\14µ\13\97\10\9f\f\91\ 1Ý\13é\ fÅ\19³\17ñ\ 1I\8f\fÓ\ f\93\ 1Ï     \95\bÕ\e³\ 6\8d\19\8d\bÁ\1a«\ 1É
+\85\b\8f\12½\ 4ÿ\f£\f\9d\16Ç\1c\9b\16\9f
\11µ\1aß\11Ã\17\89\16Ã\16±\ 6\99\10\8b\13Ë\ f\93\16ß\eÅ\ fù\12ß\18·\ 1í      \89\ 5µ\10ù\vë\19Ó\14Ñ     µ\ 5±\12\9f\ f·\10Ã\bã\11»\15\87\18Õ\ 6³\bÉ\1c\81\13\1dý\ 3\9b    ·\13\97\ 2Ë\15Á\ eÏ\f½\aÃ\ 4µ\vÓ\12÷\aï\b\99\v·\e\9d\1a«   \8b\fÛ\12\81\fÛ
+\8d\ 2ï\eõ\19¯\ 2¡\14E\95\ e\93\rá\b\81\ 2Å   Ë\rÑ\10¹\1c¯\f\9f\10­     ·\11\13«\e\8f\r§\bÅ\13¡\15å\ 1·
+\91\11¡
\aÑ\aï\ 2\81\12\97
+\81\16\85\ 2§\e«\rí\12Í\10\8f\14Ý        É\fÃ\19Ï\ fÅ\ e        Ã\ 6õ\b\8d\ e½\11£\14\91\f½\12é\ e³\ 2·\18«\1aó\v\93\1aé\aÝ\ 5×\ 1Í\19í\10§\rÑ\ f\81\ 4Ã\11­\1a\93\b¿\ 6é\v\93\aÃ
+\95\19\ 1ý\18ý\14ç\18\93\1c¹\f\8f\ 4£\13Å\b£   \93\ 6Ç\ 1\95\15Ë\ e\97\aë\18ó\ 4Ë\1cË\12õ\vó\ 3ó\13å\ 6\89\ 2§\12­\ 1Ù\19¥\f\95\18\8f
\r\8b\ 2á\12\83\vã\16û\f©\ 3Ë        Á\14Û\vÏ\10\aË\11­\12µ  \91\13Å\16Ù\16Í\rÃ\fñ\14û\e½\b³\14\85\ f¿\r\8d\11Í\12\99\15\95\ 3\83\18\83\ 3©\14á\17Á\ 2\83\1cç\14\81\1cí\ 2\9f\11³\12¥
\11Ã\eï\rÉ\aé\b£\e½  \91\14Ó\16\9b\12Ñ\ 1±\rÍ\a¿\bý
\16µ\ fé\ 6Ï\1a³\e\83\12\83\ 6Å\ 6¿\16ó\eÏ\11\9b\19ñ\11\99\14\8d\ 3­\15»\f\ 4Ç\ 3u\89\a\85\ eÏ\18Ý\11\85\eÙ\ 6Ý\12á\19\99\ 4ß    ù\15é\f\8d\14ã\v­\ fï\ eÁ\15Ñ\1cá\18ß\14·\17\8f\aÕ\17±\ 4ñ\v\9d\ 1³\få\f\9d\15\8f\17\85\1a\ 5½\ 3ë\bÑ\12¿\ 5·\ e\95\12³\ 4Ç\b¯\b­\ eÑ\ 2µ
\rõ\12ß\ 3\8b\ 5\83\ 5µ\ 2\8f\15±
\ 1\85\r±\1c§\ 1Á\fç\16å\ fý\ 6Õ\ 4ã    \95\1a©\r\8d\1c«\12\13·\v\91\ 5¿\f«\ 3¥\16©\f¿\ 3µ\19\93\13\93\19»\14\93\ fñ\ 5ÿ\15±\13\11ÿ\rç\10Ñ\ 4»\1aß\1a×\bo\8f\ 3Û\ 3\93
+cÿ\10\ 4»\aÛ\bÝ\f\89\võ\ 6\99\ 3ß\ 2ù  \95\1cÙ\17\1a\97\eÇ\ fÅ\r\95\ 6Ù\b\9d\ e\9f\19\81\10û\ e\9b\v³\13í\18¡\ 1Ý\15ý\rÍ\18å\18ã\14\91\10\ 5U\9d\ 3\8f      É\ 2\87\e·\b«\a»\e\87\ 2ç\19\95\aÛ\aé\14¯\ 1Ý\19«\15í\1a¹\10ÿ\ 5\97\1c¥\13ý\13Û\ 5\8b\ f\15\97\ fÿ\b©\11ñ\17\89\ 4ó        \83\ 2ï\18§\ e\8f\ fÁ\eõ\ 3Û\18ÿ\aå\eÕ\19§\19\8f\ 6ï\a§\15¯
+\95\ 4Ç\12å\ 5\99\ e½\10ï\ 6Û\1a\99\b¹\17ÿ\19±\ 3Ý\10é\19©    Õ\fÃ\a­\ 4÷\19\9d\a¿\e½\ 5»\19÷\1a\87\ f«\18\89\14\81\ eû\bç\eÃ\ 1ã\bÇ\13Ñ\ 3³\10í\13§\ f\99\16ó\15­\11\8d\12Í\1cç\11Ñ\18\99\e\85\18¯\aË\16»\rù\ 1×\r×\15\ fý\v¹\ 3¥\ 3\8b\a\97\15\9d\eå\v\9b\ 2Ù\15Ý\14ñ\ 2ç\ f¡\1c\85\ 5«\bÁ\ f\9f\17Ë\ 3\17õ\ 1ï\12ë\v\91\ 6\ 6ß
\bÇ
\12á\ 6\9d\1c\9f\1cï\13\9b\ 4«\10£\v¹\vÝ\ 1\18Ñ\15Ó\ 2\87\1a\8b\ 1«\1cµ\eÓ   Ë\fï\10\89\1aµ\a§\ 2ù\a\83\ fÝ\vÿ
\ eã\ 6Õ\b\85\16£\ 1¿\1a¿\14Ë\ 1à     á\16\87\1c³\15ç\1a\91\b¡\b×\17\8f\18é\ 3­\e¥\b\87\ 1û       ½\ eÙ\ 1«
+\85
\eé\12Á  Ï\ 2±\17\87\f¥\ 4Å\15\97\ 6·\19Ë\19¹\ 4\85\19¹
\16å\ 3­\19Ó\e\89\f£\19×\11ó\18é\eù\r\9f\1añ\ 6©\16û\15÷\ 6¯\1c½\ 6\95
\ 6\91\aÓ\rÍ\ 5#\85\1cé\ 1\8d\17û\12Û\ 4ß\ e«\13\99\12«\ 2û\a­\fÑ\bñ\15é   ±\b¿\13Ç\16õ\13ã\18ñ\ 3µ\b\17\95\ 1¿\ 1Û\ 2û\ 1Í\v\8b\1a\89\12Û  ç\b«\16é\13É\ 1\8d\ 6\83\ 4«\14±\15\85\12©\12ñ\ 4Õ\18ù\18\9d\ 2¥\10ÿ\1aÍ\17\85\13Ù\a\8d\ 4·\ 6¡\13\87\ 5õ\16ã\ eÝ\b¹\ 6¥\14ÿ\11Ã\ 3Ù   \9b\13£\11×\ 4\95\17Ñ\ 5á\ 5\89\18\91\12å\19¿\18Ý
\15ý\15\9d\ 5Ë\bÛ\ e\9f\eé\11­\ 5\8d\f\8d\r¯\ f\8b\ 4×\ 3¹\ 1\9f\a\93\10£\ 5\9f\18\91\ 2Ï\ 1\93\e\8b\ eÏ\v\8b\10\97\11ç\ e\ 3ã\ f»\ 5Ï\ 4\99\ f\85\15\85\ 1\83\10¯\11©\e§\10Ë\ 2·\1aµ\18ý\ 1ï\ 1£\ 6×\13¥\1c\93\ 2\9b\ 6Ó
\11ù\ fï\fÍ\1a¹\16á\11ù\13\81\15Í      £\18\81\ 6í\v³\18\97\18\93\17\8d\e\8d\18\8b\14\81\18©\15\81\11ñ       ý\ f·\ 4\97   õ\ 2\a\89\11ó\ 6í\15\81\vç\17ç\ 3Å\ 4§      Í\ 6³\a\8b\vã\12É\16Å\18§\ 3\81
\11×\12ý\ e\13\8b\1cõ
\ e¥\17¡\ 3ñ\f\12ã\15\97\ 3ó\12ó\ 1Ã\14õ\10¯\16ï\ f\eã\13¿\12»\ e\83\11ù\b\9f\ 4£
+Wû\ 3á\a¯\eµ\14Ý\ fí\ 3ù
+\85\fÁ\rÝ\ 4\9b\ f»
\18­\ 3ÿ\14¯\19­\16Ã\ få\17á\ 3\87\11\93\ eÛ\ 6\93\18í\19á\ 2û\11¡\ 65\8d
\1c×\ fó\ fË\18¿\v\8f\19ï\16÷\vû\1aí\r\11½\19Ç\ 4Á\ 1õ\11Ó\ 1Ç\15á\ 1­\bß\aá\fÓ\b½\f±\16ù\16¿\ e\97\ 1\9b\ 1ï\15ù\1aÕ\ f¡\ 5¡\1aí\fµ\16«\ 5\81\14ã\ 2­\10Ý\ 3³\16»\ 1\ eï
+\8f\ 5ç\ 2µ\f½\14¡\17\89\13ã\ 3©
\18û\ 5ù\ eÅ\ 2á\1a»\16\95\16ý\1aã\19Ñ\19\9f\b\8b\ 3\8d\13\89\10»\ 2ë\1a÷\ f·\fó\1a\8f\ 2ù\19Ù
\aÛ\19¯\vá\ fû\v\81\ fÇ  £\16\89\e\8b\12÷\fÙ\13á\e\93\ 3Ñ\11\91\ fÑ\ e\8f\1c\9f\ eç\15ë\f\9b\18\83\ 1÷\15³\ e­\ 2¥\ 1\89       É\v³\ 3Ï\bÃ\10\8d       ñ\13Ó\ e\87\rå\rß\10\83\17·\r\9b\bÁ\ 4\85\a\9b\11\8b Í\ 1«\17í\ 5Ë\ 6¡\ fá\13³\r£\ f\8f\v\99\ 5¥\eË\a©\ e\83\15Õ\14Ë\14ë\10£\ 4ï\17\9f\ 1©\18ß\12Õ
+\89\ 1í
+\81      ÷\13÷\16÷   \8d\16ß\16Õ\1cÑ\1aÓ\13\89\1c³\1a\9f\ 3ß\17\8f\e£\12é\r\87\v\8f\16ñ\19ï\ 5³\11§\11\89\bë ±\e\89\17¿\11Ñ\e\8f\ 1Ï\eû\16\8d\a\89\ eÕ\13\8f\11û\18õ       Ï\14\83\16·\15\83\13Í\16Ù\ 3¹\e¹\12ë\rÿ     A\91\rÅ\17Ç\a\9d\bË\13¯\r§\ 6\8d\ f½\15ÿ\ 3ß\ fá\10Ù\vý\ 4¹\ 5Ç\e§\1c¿\19¿  û\14\97\r\ 3\95\r¯\14É\14ù\fõ\rù\11Ã\13\93\14½\ 1Ç\fç\ 6\8b\16Ï\ eë\16¡\12ù\ 2÷\ 3\9b\1cù\14å\16¿\ 4»\ 3\87
+\81\b\9f\vÑ\v×\10ù\ 4ó\17¥\aÉ\rµ\ 1±    ½\17¥\15\97\b¥\ 2¯\13\95\ fÇ\1aÙ\ e\83\ eÕ\ 3¹\1aÅ\ 3õ\e\91\ e\9d\18Ç\18±\ 1Õ\ eÁ
\19\87\15\81\17¿\ f©\ fÛ\e\85\ 4©\ 6\89\ 6¯\17Ó\a\91\1aá\15½\1a\99\1a\9d\17\8f\ e\9b\10ó\ eÓ\ 4ë\aÙ\14½\18ó
\14÷\17í\14\83\f\85\10Ù\10\91\18×        \83\19Ý\18Û\rÁ\19§\17Õ\16\87\17Å\11û\r¹\15©\b÷\ 5\8b\ 6»\12\93\12µ\ 6­\18á\v\95\f\83\aó\11\r«\vû\19÷
\f\9f\ 2í\ 6Í\ e\91\v¡\16×\e¡\ 2Á\10\95\14é\ 4û\ f\9d\12Ñ\14³  \83
\12\97\ 4\14Ý\1a\85\11õ\ e\83\1a\9f\13³\ fû\ 6ý\ 5Ã\ 5¯\ 3å   s\85      \8b\17\9b\17½\13Ã\1c¡\19É\13\9f   \15Ñ\13\8f\10ã\ 1\v\18\99\19\9f\ 6õ\ f\99\11CO\99\ 6½
+\7f«\ fÃ\v\99\17Ï\15¿\ 2\83\rÅ\v±\19¡\10\8b\bÑ
\ 6\97\ 5µ\11\93\15Í\bç\13Õ\15Ï\13\99\ 1÷\10©\ 5Ï\17\93\ 4µ\ eß\ 1±\ 2³\ 5g\87\19\85\v\87       ó\aë\ 6ÿ\12­\a\97\14§\18\9d\fÕ\1a¹\18Ó\1cÍ\eñ\ fË\ 5\85\17\9b
\ eÕ    É\10\91     ë\17Ç\rå\11» \97\fù\ 6Ù\r\85\ 3Ç\v¯     ×\f\83\e\9b\e\8b
\vÿ\17©\1a§\1a½\1cå\15\81\eá\rÛ\ f»\b¡  ¡\r\87\10©\17\ 4Í\13\9d\10Û\17å\1a±\ 5¯\ e÷\eÍ\ 2Õ\ 1¡\18Å\1a\8d\10\8d\1a¹\ 2Õ\r\81\ 5ï\1a\10\87\12ó\19©\ 2¥\ eé\ 2í\ 1ý\17Ñ\ 6Û\f©\10·\a\9d\v©\1c£\17Á\1c»\1cõ\1a»\10é\1aé\16³\v\83\b\89\ 3Ó\10Õ\v­\17Ç\19Á\16ó\14\87\16¹\r±\14÷\bã\f\87\a\8b\e\9d\13¡\aÅ\f\9d\11Í\15ë\ 2Ó\18ÿ\ 1µ\15Ó\vó\rÛ\15\91\19ß\v\ 2\9f\12Ç\14Ç\17Ï\ 3Ã\r÷\11¥\12Ý\16ß\ 4í\17÷\ 4±\10Ë\eû
+·      Ï\16Ù\12\9b\15ë\ 3Í
\ 4ï\ 3\9d\ f­\14¹\b\95\vç\rñ\16·\ 2ý\19Á\ 3Á\vÙ\ fý\10¥\ 6±\v\8b\r£\ 3\95  M©\ 4\95\eå\12\89\rç\ 4é\10{\8b\11×\v¿\17í\ 4ë
\ e\9f\15Å\10©\13\91\1có\10ç\ 5Q\99\r¯\10ï\vñ\1aï       ù\10å\ eá\ eÏ\ 5¯\ 5á\14ï\19\1f«\ eÙ\11é\15í\11Ý\17Ù\ 5ç    ÿ\ 4ç\a¥\ 5Ó\17¹\14Ë\v¿\10ã\ 5¥\19Ó\ 5í\bÓ\11£\ 2§\16\9b\1a\8f\13±\1añ\a\97\12ý\e§\ 4¿\a«\ 6\81\19ó\fý\f\14¥\r©\a\9f\14õ\18\99\fÙ\ 4ë\ 5Ó\159\85\14\97\13µ\ 3¹\a\9d
\ 5Û\11¯\ 4ó\ 2Ç\ 6\89
+\87\ 3±\ f÷\ 2\87\b«\11ã\1añ\e\99\18÷\12\87\ 4É\15ã\a\17ç\ 1Ã\ 2£\r§\14Ï\ 6\8d\ 5Ý\ 2É\18å\10¡\f\95\ 5\99\1cÉ\12Ã\1aß\19±\ e¡\võ\17½\16\19Ó\ 3ï\ 4Ý\aá      ³\ 1\8f\1a\9b\r¹\13¥\ fÁ\17³\1cÕ\a\95\11ÿ\ f½\ fÍ\ 3Á\ 5\93\v×\1a\9b\a×\19ß\bÉ\11å\bÙ\1a\93\11é\ 5ß\f\9b\14\97\10\9f\f\91\ 1Ý\13é\ fÅ\19³\17ñ\ 1\8f\fÓ\ f\93\ 1Ï       \95\b³\ 6\8d\bÉ
+\8f\12½\ 4ÿ\f£\f\9d\16Ç\1c\9b\16\9f
\11ß\11Ã\17\89\16Ã\16±\ 6\8b\13Ë\ f\93\16Å\ fß\18í        \89\ 5µ\10ù\vë\19Ó\14Ñ     µ\ 5ã\11»\15\87\18Õ\ 6³\bÉ\1c\81\13\1dý\ 3\9b    ·\13\97\ 2Á\ eÏ\f½\aÃ\ 4Ó\12÷\aï\b\99\v·\e\9d\1a«       \8b\fÛ\12\81\fÛ
+\8d\ 2ï\e¯\ 2¡\14\95\ e\93\rá\b\81\ 2Ë\rÑ\10¹\1c¯\f­      ë\13«\e¡\15Ñ\aï\ 2\85\ 2\8f\14Ý Ã\19Ï\ fÅ\ e  \8d\ e³\ 2\93\1a×\ 1Í\19Ñ\ f\81\ 4Ã\11­\1a\93\a\95\19ý\18ý\14Ç\ 1\97\aó\ 4Ë\12ó\13\89\ 2§\12­\ 1\8b\ 2\83\vû\fÛ\vµ     Å\16Ù\16\8d\11\99\15\95\ 3\83\18Á\ 2\81\1c\9f\11¥
\11Ã\eï\rÉ\a£\eÓ\16\9b\12Ñ\ 1±\rÍ\aý
\ 6Ï\1a³\e\83\ 6¿\16ó\eñ\11Ç\ 3u\89\a\85\ eÝ\11\85\eÙ\ 6ß   ù\15é\f\8d\14ã\vï\ eÁ\15ß\14·\17\8f\a±\ 4ñ\v\9d\ 1å\f\9d\15\8f\17\85\1a\ 5¿\ 5·\ eÇ\b¯\b­\ eÑ\ 2µ
\rõ\12ß\ 3\8b\ 5µ\ 2\8f\15±
\ 1\85\r±\1c§\ 1Á\f\8d\1c«\12\13\91\ 5¿\f«\ 3¿\ 3\93\13»\14\93\ f±\13ç\10»\1a\8f\ 3Û\ 3ã\ 4Ý\f\89\vù !\97\eÇ\ fÅ\r\95\ 6Ù\b\9d\ e\9f\19û\ e\9b\v³\13í\18¡\ 1Ý\15ý\rå\18\91\10\ 5U\9d\ 3·\b»\e¯\ 1«\15í\1a¹\10ÿ\ 5\97\1cý\13Û\ 5\8b\ faÿ\b©\11ñ\17\83\ 2§\ eÁ\eõ\ 3Û\18å\eÕ\19ï\a§\15¯
+\95\ 4Ç\12\99\ e½\10ï\ 6\99\bÿ\19±\ 3Ý\10é\19©  Õ\fÃ\a­\ 4÷\19\9d\a»\19\89\14\81\ eç\eÃ\ 1Ñ\ 3³\10í\13ó\15\8d\12Í\1cç\11Ñ\18\99\e¯\aË\16»\rù\ 1×\15¹\ 3¥\ 3\8b\a\97\15\9d\eå\v\9b\ 2Ý\14ñ\ 2ç\ f¡\1c\9f\17Ë\ 3\17õ\ 1ï\12ë\v\91\ 6»\ 6ß
\bÇ
\12á\ 6\9d\1c\9f\1c\9b\ 4«\10£\v¹\vÝ\ 1\18Ñ\15Ó\ 2\87\1a\8b\ 1«\1cµ\eÓ     Ë\fï\10\89\1aµ\a\83\ fÝ\vÿ
\ eã\ 6Õ\b\85\16£\ 1¿\14á\16\87\1c×\17é\ 3­\e½\ e«
\eé\12\87\f¥\ 4Å\15\97\ 6·\19Ë\19\85\19×\16å\ 3­\19\89\f\9f\1a÷\ 6¯\1c½\ 6\95
+\85\1cé\ 1Û\ 4ß\ e\99\12û\añ\15é        ±\b¿\13õ\13ñ\ 3¿\ 1\89\12ç\b«\16é\13\8d\ 6«\14±\15\85\12Õ\18ù\18\9d\ 2¥\10ÿ\1aÙ\a\8d\ 4·\ 6¡\13õ\16ã\ eÝ\b¥\14Ã\ 3Ù \9b\13£\11×\ 4\95\17Ý
\15ý\15\9d\ 5Ë\bÛ\ e\9f\e\8d\f\8d\r¯\ f\8b\ 4×\ 3¹\ 1\9f\a\93\10£\ 5\9f\18Ï\ 1\93\e\8b\ eÏ\v\8b\10\97\11\ 3ã\ f»\ 5Ï\ 4\99\ f\85\15\85\ 1\83\10¯\11©\e§\10Ë\ 2·\1aµ\18ý\ 1ï\ 1£\ 6¥\1cï\fÍ\1a¹\16\93\17\8d\e\8d\18\81\18©\15\81\11ñ     ·\ 4\a\81\vç\17Å\ 4§      ÿ\14¯\19Ã\ få\17á\ 3\93\ eÛ\ 6\93\18í\19á\ 2û\11\1c×\ f¿\v\8f\19±\16ù\16Õ\ f¡\ 5¡\1aµ\16«\ 5\81\14ã\ 2\ e\8f\ 5½\14¡\17û\ 5ó\1aá\ fá\eÑ\ e\8f\1cÃ\10\8d       \87\rå\r\9b\bÁ\ 4\85\aí\ 5Ë\ 6£\ f\8f\v\99\ 5Ë\14ë\10£\ 4ï\17\9f\ 1©\18ß\12Õ
+\89\ 1í
+\81      ÷\13÷\16÷   \8d\16ß\16Õ\1cÑ\1aÓ\13\89\1c³\1a\9f\ 3£\10ß\17\8f\e£\12ë\eá
\r\87\v\8f\16\97\vñ\19ï\ 5³\11§\11\89\bë    ±\e\89\17¿\11Ñ\e\8f\ 1Ï\eû\16\8d\a\89\ eÕ\13\8f\11û\18õ       §\fÏ\14å\13\83\16·\15\83\13Í\16Ù\ 3¹\e¹\12ë\rÿ A\91\rÅ\17Ç\a\9d\bË\13¯\r§\ 6\8d\ f½\15ÿ\ 3ß\ fë\ fá\10Ù\vý\ 4¹\ 5Ç\e§\1c¿\19¿        û\14\97\r\ 3\95\r¯\14É\14ù\fõ\rù\11Ã\13\93\14½\ 1Ç\fç\ 6\8b\16Ï\ eë\16¡\12ù\ 2÷\ 3\9b\1cù\14å\16¿\ 4»\ 3\87
+\81\b\9f\vÑ\v×\10ç
\ 4ó\17¥\a«\fÉ\rµ\ 1±  ë\11½\17¥\15\97\b¥\ 2¯\13·\1c\95\ fÇ\1aÙ\ e\83\ eÕ\ 3¹\1aÅ\ 3õ\e÷\r\91\ e\9d\18Ç\18±\ 1Õ\ eÁ
\19\87\15\81\17¿\ f©\ fÛ\e\85\ 4©\ 6\89\ 6¯\17Ó\a\91\1aá\15½\1a\99\1a\9d\17\8f\ e\9b\10ó\ eÓ\ 4ë\aÙ\14½\18ó
\14÷\17í\14\83\f\85\10Ù\10\91\18×        \83\19Ý\18Û\rÁ\19§\17Õ\16\87\17Å\11û\r¹\15©\b÷\ 5\8b\ 6»\12\93\12µ\ 6­\18á\v\95\f\83\aó\11\r«\vû\19÷
\f\9f\ 2í\ 6Í\ e\91\v¡\16×\e¡\ 2Á\10\95\14é\ 4û\ f\9d\12Ñ\14³  \83
\12\97\ 4\14Ý\1a\85\11õ\ e\83\1a\9f\13³\ fû\ 6ý\ 5Ã\ 5¯\ 3å   s\85      \8b\17\9b\17½\13É\b¹       Ã\1c¡\19É\13\9f \15Ñ\13\8f\10ã\ 1\v\18\99\19\9f\ 6õ\ f\99\11Å\e­
\ 6CO\9b\ 3\99\ 6½
+\81\ 3\7f«\ fÃ\v\9d\14\99\17Ï\15\91\16¿\ 2\83\rÅ\v±\19¡\10\8b\b\89\19Ñ
\ 6\97\ 5µ\11\93\15Í\bç\13Õ\15Ï\13\99\ 1÷\10©\ 5Ï\17\93\ 4µ\ eß\ 1±\ 2³\ 5g\87\19\85\v\87       ó\aë\ 6ÿ\12­\a\97\14§\18\9d\fÁ\bÕ\1a¹\18Ó\1cÍ\eñ\ f¿\1cË\ 5\85\17\9b
\ eÕ    É\10\91     ë\17Ç\rå\11» \97\fù\ 6Ù\rë\ 1\85\ 3Ç\v¯   ×\f\83\e\9b\e\8b
\vÿ\17©\1a§\1a½\1cå\15\81\eá\rÛ\ f»\b¡  ¡\r\87\10©\17\ 4Í\13\9d\10Û\17å\1a±\ 5¯\ e÷\eÍ\ 2Õ\ 1¡\18Å\1a\8d\10\8d\1a¹\ 2Õ\r\81\ 5ï\1a\10õ\ 4\87\12ó\19©\ 2¥\ eé\ 2í\ 1ý\17Ñ\ 6Û\f©\10·\a\9d\v©\1c£\17Á\1c»\1cõ\1a»\10é\1aé\16³\v\83\b\89\ 3Ó\10Õ\v­\17Ç\19Á\16ó\14\87\16¹\r·\14±\14÷\bã\f\87\a\8b\e\9d\13¡\aÅ\f\9d\11Í\15ë\ 2Ó\18ÿ\ 1¿\15µ\15Ó\vó\rÛ\15\91\19ß\v;\89\15å\ 2\9f\12Ç\14Ç\17Ï\ 3Ã\r÷\11¥\12Ý\16ß\ 4í\17÷\ 4±\10Ë\eû
+·      \97\16Ï\16Ù\12\9b\15ë\ 3³\19Í
\ 4ï\ 3\9d\ f­\14¹\b\95\vç\rñ\16·\ 2ý\19Á\ 3\93\ 5Á\vÙ\ fý\10¥\ 6±\v\8b\r£\ 3\95        M©\ 4\95\eå\12\89\rç\ 4é\10{\8b\11×\v¿\17í\ 4ë
\ e\9f\15Å\10©\13\91\1có\10ç\ 5Q\99\r¯\10ï\vñ\1aï       ù\10å\ eá\ eÏ\ 5¯\ 5á\14ï\19\1f«\ eÙ\11é\15í\11Ý\17Ù\ 5ç    ÿ\ 4ç\a¥\ 5Ó\17¹\14Ë\v¿\10ã\17ã\ 5¥\19ù\17Ó\ 5í\bÓ\11£\ 2§\16\9b\1a\8f\13±\1añ\a\97\12ý\e§\ 4¿\a«\ 6\81\19ó\fý\f\14¥\r©\a\9f\14õ\18\99\fÙ\ 4ë\ 5Ó\159\85\14\97\13µ\ 3¹\a\9d
\ 5Û\11¯\ 4ó\ 2Ç\ 6\89
+\87\ 3±\ f÷\ 2\87\b«\11ã\1añ\e\99\18÷\12\87\ 4É\15ã\a\17ç\ 1Ã\ 2£\r§\14Ï\ 6\8d\ 5Ý\ 2É\18å\10¡\fç\12\95\ 5\99\1cÉ\12Ã\1aß\19±\ e¡\võ\17½\16\19Ó\ 3ï\ 4Ý\aá    ³\ 1\8f\1a\9b\r¹\13¥\ fÁ\17³\1cÕ\a\95\11ÿ\ f½\ fÍ\ 3Á\ 5\93\v×\1a\9b\a×\19ß\bÉ\11å\bÙ\1a\93\11é\ 5ß\f\9b\14µ\13\97\10\9f\f\91\ 1Ý\13é\ fÅ\19³\17ñ\ 1\8f\fÓ\ f\93\ 1Ï     \95\bÕ\e³\ 6\8d\bÉ
+\8f\12½\ 4ÿ\f£\f\9d\16Ç\1c\9b\16\9f
\11ß\11Ã\17\89\16Ã\16±\ 6\8b\13Ë\ f\93\16Å\ fß\18í        \89\ 5µ\10ù\vë\19Ó\14Ñ     µ\ 5·\10ã\11»\15\87\18Õ\ 6³\bÉ\1c\81\13\1dý\ 3\9b  ·\13\97\ 2Á\ eÏ\f½\aÃ\ 4Ó\12÷\aï\b\99\v·\e\9d\1a«       \8b\fÛ\12\81\fÛ
+\8d\ 2ï\eõ\19¯\ 2¡\14\95\ e\93\rá\b\81\ 2Ë\rÑ\10¹\1c¯\f­    ë\13«\e¡\15Ñ\aï\ 2\85\ 2\8f\14Ý Ã\19Ï\ fÅ\ e  õ\b\8d\ e³\ 2\93\1a×\ 1Í\19Ñ\ f\81\ 4Ã\11­\1a\93\a\95\19ý\18ý\14Ç\ 1\95\15\97\aó\ 4Ë\12ó\13\89\ 2§\12­\ 1\8b\ 2\83\vû\fË   Û\vµ     Å\16Ù\16\8d\11\99\15\95\ 3\83\18Á\ 2\81\1c\9f\11¥
\11Ã\eï\rÉ\a£\eÓ\16\9b\12Ñ\ 1±\rÍ\aý
\ 6Ï\1a³\e\83\ 6¿\16ó\eÏ\11ñ\11Ç\ 3u\89\a\85\ eÝ\11\85\eÙ\ 6ß ù\15é\f\8d\14ã\vï\ eÁ\15ß\14·\17\8f\a±\ 4ñ\v\9d\ 1å\f\9d\15\8f\17\85\1a\ 5¿\ 5·\ eÇ\b¯\b­\ eÑ\ 2µ
\rõ\12ß\ 3\8b\ 5\83\ 5µ\ 2\8f\15±
\ 1\85\r±\1c§\ 1Á\fÕ\ 4ã  \8d\1c«\12\13\91\ 5¿\f«\ 3¿\ 3\93\13»\14\93\ f±\13ç\10»\1a\8f\ 3Û\ 3ã\ 4Ý\f\89\vù    !Ë\1a\97\eÇ\ fÅ\r\95\ 6Ù\b\9d\ e\9f\19\81\10û\ e\9b\v³\13í\18¡\ 1Ý\15ý\rå\18\91\10\ 5U\9d\ 3É\ 2·\b»\eç\19Û\a¯\ 1«\15í\1a¹\10ÿ\ 5\97\1cý\13Û\ 5\8b\ faÿ\b©\11ñ\17\83\ 2§\ eÁ\eõ\ 3Û\18ÿ\aå\eÕ\19ï\a§\15¯
+\95\ 4Ç\12\99\ e½\10ï\ 6\99\bÿ\19±\ 3Ý\10é\19©  Õ\fÃ\a­\ 4÷\19\9d\a¿\e½\ 5»\19÷\1a\89\14\81\ eç\eÃ\ 1Ç\13Ñ\ 3³\10í\13ó\15\8d\12Í\1cç\11Ñ\18\99\e¯\aË\16»\rù\ 1×\15¹\ 3¥\ 3\8b\a\97\15\9d\eå\v\9b\ 2Ý\14ñ\ 2ç\ f¡\1c\9f\17Ë\ 3\17õ\ 1ï\12ë\v\91\ 6\ 6ß
\bÇ
\12á\ 6\9d\1c\9f\1c\9b\ 4«\10£\v¹\vÝ\ 1\18Ñ\15Ó\ 2\87\1a\8b\ 1«\1cµ\eÓ     Ë\fï\10\89\1aµ\a\83\ fÝ\vÿ
\ eã\ 6Õ\b\85\16£\ 1¿\14á\16\87\1c×\17é\ 3­\e½\ eÙ\ 1«
\eé\12\87\f¥\ 4Å\15\97\ 6·\19Ë\19\85\19¹
\16å\ 3­\19\89\fù\r\9f\1a÷\ 6¯\1c½\ 6\95
\ 6\85\1cé\ 1Û\ 4ß\ e\99\12û\añ\15é      ±\b¿\13õ\13ñ\ 3¿\ 1\89\12ç\b«\16é\13\8d\ 6«\14±\15\85\12Õ\18ù\18\9d\ 2¥\10ÿ\1aÙ\a\8d\ 4·\ 6¡\13õ\16ã\ eÝ\b¥\14Ã\ 3Ù \9b\13£\11×\ 4\95\17\91\12Ý
\15ý\15\9d\ 5Ë\bÛ\ e\9f\e\8d\f\8d\r¯\ f\8b\ 4×\ 3¹\ 1\9f\a\93\10£\ 5\9f\18Ï\ 1\93\e\8b\ eÏ\v\8b\10\97\11\ 3ã\ f»\ 5Ï\ 4\99\ f\85\15\85\ 1\83\10¯\11©\e§\10Ë\ 2·\1aµ\18ý\ 1ï\ 1£\ 6¥\1cï\fÍ\1a¹\16\93\17\8d\e\8d\18\81\18©\15\81\11ñ     ·\ 4õ\ 2\a\81\vç\17Å\ 4§    ÿ\14¯\19­\16Ã\ få\17á\ 3\93\ eÛ\ 6\93\18í\19á\ 2û\11\1c×\ f¿\v\8f\19±\16ù\16Õ\ f¡\ 5¡\1aµ\16«\ 5\81\14ã\ 2\ e\8f\ 5½\14¡\17û\ 5ó\1aá\ fá\eÑ\ e\8f\1cÃ\10\8d     \87\rå\r\9b\bÁ\ 4\85\aí\ 5Ë\ 6£\ f\8f\v\99\ 5©\ e\83\15Ë\14ë\10£\ 4ï\17ß\12Õ
+\89\ 1í
+\81      ÷\13÷\16÷   \8d\16ß\16Õ\1cÓ\13\9f\ 3ß\17\8f\e£\12\87\v\8f\16ñ\19ï\ 5\89\bë     \89\17¿\11Ñ\e\8f\ 1Ï\e\8d\a\89\ eÕ\13\8f\11û\18õ   Ï\14\83\16\83\13Í\16Ù\ 3¹\eë\rA\91\rÅ\17Ç\a\9d\bË\13¯\r§\ 6½\15ÿ\ 3ß\ fá\10Ù\v¹\ 5Ç\e¿\19û\14\ 3\95\r¯\14É\14ù\fõ\rù\11Ã\13½\ 1Ç\f\8b\16Ï\ eù\ 2\9b\1cù\14¿\ 4»\ 3\87
+\81\b×\10¥\aµ\ 1±      ¥\ 2Ç\1a\83\ e\9d\18Á
\ fÛ\e\85\ 4\89\ 6¯\17á\15\99\1a\9d\17\8f\ e\9b\10½\18÷\17í\14\85\10§\17Õ\16\87\17û\r©\b÷\ 5\8b\ 6\93\12µ\ 6á\v\83\aó\11û\19÷
+\9f\ 2í\ 6¡\16¡\ 2Á\10\95\14é\ 4Ñ\14\83
+Y\85\11õ\ e\83\1a\9f\13³\ fû\ 6ý\ 5Ã\ 5å     s\8b\17½\13\15÷\18\99\11Ï\15\83\rÅ\v±\19¡\10\8b\b\97\ 5÷\10µ\ eß\ 1³\ 5g\87\19\85\vë\ 6ÿ\12\97\14Õ\1aË\ 5\85\17Ã\ eë\17¯  ×\f§\v©\1a½\1c»\b\87\10©\17\ 4Í\13¯\ eÍ\ 2¡\18Å\1a\8d\1a¹\ 2Õ\r\81\ 5Ç\10¥\ eí\ 1ý\17Ñ\ 6Û\f\9d\v»\10³\v\89\ 3ó\14÷\bã\f¡\aÓ\18\9f\12Ç\17Ã\rÝ\16ß\ 4Ù\12Í
+\95\v¥\ 6±\v\8b\rM\89\rç\ 4é\10¿\17ó\10¯\10ï ù\10Ï\ 5¯\ 5á\14Ù\11í\11Ý\17Ù\ 5¿\10ã\ 5í\bÓ\11\9b\1a±\1añ\a\97\12§\ 4«\ 6ë\14õ\18\99\fÙ\ 4\85\14\97\13¹\a\9d
+\87\ 3±\ fñ\e\99\18÷\12É\15ã\a\17ç\ 1£\r§\14Ý\ 2É\18¡\võ\17\19Ó\ 3ï\ 4³\ 1\9b\r¥\ fÁ\17³\1c\95\11ÿ\ f\93\v×\1a\9b\a×\19ß\b\9b\14\9f\f\91\ 1Ý\13Å\19³\17Ó\ f\93\ 1\95\b³\ 6½\ 4ÿ\f£\f\9d\16\9b\16\9f
\11Ã\17\89\16Ã\16±\ 6\8b\13Ë\ fÅ\ f\89\ 5µ\10ù\vÑ        \87\18\81\13\97\ 2Á\ eÏ\f½\aÃ\ 4÷\aï\b·\e«   \8b\f\81\fÛ
+\8d\ 2ï\e¯\ 2¡\14\93\rá\b\81\ 2Ë\rÑ\10­    «\eï\ 2Å\ e  \8d\ eÍ\19Ñ\ f\81\ 4Ã\11­\1aý\18ý\14\97\aó\ 4\83\v\81\1cï\rÓ\16Ñ\ 1¿\16ó\eÇ\ 3u\89\a\85\ eÝ\11ï\ e\8f\añ\v\9d\15\8f\17\85\1a­\ eã\rõ\12©\ 1§\ 1\8d\1c«\12\13\91\ 5±\13\8f\ 3Ý\f\89\v!\97\eÇ\ fÅ\rý\r\9d\ 3·\bÿ\ 5ý\13\8b\ f\11ñ\17§\ eå\e§\15Ç\12ï\ 6\99\bÕ\f÷\19\89\14ó\15\8d\12Í\1cç\11¹\ 3¥\ 3\8b\a\97\15å\v\9b\ 2ñ\ 2¡\1cË\ 3\ 1\91\ 6»\ 6\9d\1c\9b\ 4£\v¹\vÝ\ 1\ 2\87\1a\8b\ 1«\1cµ\eÓ       Ë\fï\10Ý\vã\ 6Õ\b\85\16£\ 1\87\1c×\17­\e«
\eé\12Å\15\97\ 6·\19Ë\19\85\19å\ 3­\19\85\1c«\16±\15\85\12Õ\18ù\18ÿ\1aÙ\a\8d\ 4·\ 6Ý\b¥\14Ã\ 3\9b\13£\11×\ 4\95\17Ý
\15ý\15\9d\ 5Ë\bÛ\ e\8d\f\8d\r¹\ 1\9f\a\93\10\8b\ eÏ\vã\ f»\ 5Ï\ 4\99\ f\85\15\85\ 1\83\10¯\11©\e§\10Ë\ 2·\1aµ\18ý\ 1Í\1a¹\16\8d\18\81\18©\15ñ        ·\ 4\a\81\vç\17Å\ 4§      ÿ\14¯\19å\17\93\ eÛ\ 6í\19á\ 2ù\16Õ\ f¡\ 5¡\1aµ\16«\ 5\8f\ 5Ã\10\8d \9b\bí\ 5\8f\vË\14£\ 4ï\17\89\ 1\8d\16\87\v\8f\16ñ\19ï\ 5\89\bë     ±\e\89\17¿\11\8d\aõ       \83\16Í\16\ 6á\10\8b\16Ï\ e÷\ 3\9b\1cù\14¿\ 4»\ 3\87
+\81\b\9f\vÑ\v×\10ç
\ 4ó\17¥\a«\fÉ\rµ\ 1±  ë\11¥\15\97\b¥\ 2¯\13\95\ fÇ\1aÙ\ e\83\ e¹\1aõ\e\91\ e\9d\18Ç\18±\ 1Õ\ eÁ
+\87\15\81\17¿\ f©\ fÛ\e©\ 6\89\ 6¯\17Ó\a\91\1a\99\1a\9d\17\8f\ e\9b\10ó\ eÓ\ 4ë\aÙ\14½\18ó
\14÷\17í\14\83\f\85\10Ù\10\91\18Ý\18Û\rÁ\19§\17Õ\16\87\17Å\11û\r¹\15©\b÷\ 5\8b\ 6»\12\93\12µ\ 6­\18á\v\95\f\83\aó\11\r«\vû\19÷
\f\9f\ 2í\ 6Í\ e\91\v¡\16×\e¡\ 2Á\10\95\14é\ 4û\ f\9d\12Ñ\14\83
\12\97\ 4\14Ý\1a\85\11õ\ e\83\1a³\ fû\ 6ý\ 5Ã\ 5¯\ 3å     s\8b\17\9b\17½\13É\bÃ\1c¡\19É\13\9f        \15Ñ\13\8f\10ã\ 1\v\18\99\19\9f\ 6õ\ f\99\11O\99\ 6½
+\7f«\ fÃ\v\99\17Ï\15\83\rÅ\v±\19¡\10\8b\bÑ
\ 6\97\ 5µ\11\93\15Í\bç\13Õ\15Ï\13\99\ 1÷\10©\ 5Ï\17µ\ eß\ 1±\ 2³\ 5g\87\19\85\vó\aÕ\10ë\ 6ÿ\12\97\14§\18\9d\fÕ\1a¹\18Ó\1cÍ\eñ\ fË\ 5\85\17\9b
\ eÕ    \91       Ç\r»     \97\fù\ 6Ù\r\85\ 3Ç\v¯     ×\f\83\e\9b\e\8b
\v©\1a§\1a½\1cå\15\81\eá\rÛ\ f»\b\87\10©\17\ 4Í\13\9d\10Û\17å\1a±\ 5¯\ e÷\eÍ\ 2Õ\ 1¡\18Å\1a\8d\10\8d\1a¹\ 2Õ\r\81\ 5ï\1a\10õ\ 4\87\12ó\19©\ 2¥\ eé\ 2í\ 1ý\17Ñ\ 6Û\f·\a\9d\v©\1c£\17Á\1c»\1cõ\1a»\10é\1aé\16³\v\83\b\89\ 3Ó\10Õ\v­\17Ç\19ó\14\87\16±\14÷\bã\f\87\a\8b\e\9d\13¡\aÅ\f\9d\11Í\15Ó\18ÿ\ 1Ó\vó\rÛ\15\91\19ß\v\89\15\9f\12Ç\17Ã\r÷\11¥\12Ý\16ß\ 4í\17÷\ 4Ë\eû
+·      Ù\12\9b\15³\19Í
\ 4ï\ 3\9d\ f­\14¹\b\95\vç\rñ\16·\ 2ý\19\93\ 5Á\vÙ\ f¥\ 6±\v\8b\r\95      Må\12\89\rç\ 4é\10{\8b\11×\v¿\17í\ 4ë
\ e\9f\15Å\10©\13ó\10ç\ 5Q\99\r¯\10ñ\1aï   ù\10å\ eá\ eÏ\ 5¯\ 5á\14ï\19\1f«\ eÙ\11é\15í\11Ù\ 5ÿ\ 4ç\a¥\ 5Ó\17¹\14Ë\v¿\10ã\ 5¥\19Ó\ 5í\bÓ\11£\ 2§\16\9b\1a\8f\13±\1añ\a\97\12§\ 4¿\a«\ 6\81\19ó\fý\f\14¥\r©\a\9f\14õ\18\99\fÙ\ 4ë\ 5Ó\159\85\14\97\13µ\ 3¹\a\9d
\ 5Û\11¯\ 4ó\ 2Ç\ 6\89
+\87\ 3±\ f÷\ 2\87\b«\11ã\1añ\e\99\18÷\12\87\ 4É\15ã\a\17ç\ 1Ã\ 2£\r§\14Ï\ 6\8d\ 5É\18å\10¡\f\95\ 5\99\1cÉ\12ß\19±\ e¡\võ\17½\16\19Ó\ 3ï\ 4Ý\aá  ³\ 1\9b\r¹\13¥\ fÁ\17³\1cÕ\a\95\11ÿ\ f½\ fÁ\ 5\93\v×\1a\9b\a×\19ß\bÉ\11å\bÙ\1a\93\11é\ 5ß\f\9b\14\97\10\9f\f\91\ 1Ý\13é\ fÅ\19³\17ñ\ 1\8f\fÓ\ f\93\ 1Ï   \95\b³\ 6\8d\bÉ
+\8f\12½\ 4ÿ\f£\f\9d\16Ç\1c\9b\16\9f
\11ß\11Ã\17\89\16Ã\16±\ 6\8b\13Ë\ fÅ\ fß\18í  \89\ 5µ\10ù\vë\19Ó\14Ñ     µ\ 5ã\11»\15\87\18Õ\ 6³\bÉ\1c\81\13\1dý\ 3\9b    ·\13\97\ 2Á\ eÏ\f½\aÃ\ 4Ó\12÷\aï\b\99\v·\e\9d\1a«       \8b\fÛ\12\81\fÛ
+\8d\ 2ï\e¯\ 2¡\14\95\ e\93\rá\b\81\ 2Ë\r¹\1c¯\f­        ë\13«\e¡\15Ñ\aï\ 2\85\ 2\8f\14Ï\ fÅ\ e      õ\b\8d\ e³\ 2\93\1a×\ 1Í\19Ñ\ f\81\ 4Ã\11­\1a\93\a\95\19ý\18ý\14Ç\ 1\97\aó\ 4ó\13\89\ 2§\12­\ 1\8b\ 2\83\vÛ\vµ       Ù\16\8d\11\99\15\95\ 3\83\18Á\ 2\81\1c\9f\11¥
\11ï\rÉ\a£\e\9b\12Ñ\ 1±\rÍ\aý
\ 6Ï\1a³\e\83\ 6¿\16ó\eÏ\11ñ\11Ç\ 3u\89\a\85\ eÝ\11\85\eÙ\ 6ù\15é\fï\ eÁ\15ß\14·\17\8f\añ\v\9d\ 1\8f\17\85\1a)¿\ 5·\ eÇ\b¯\b­\ eÑ\ 2µ
\rõ\12ß\ 3µ\ 2\8f\15±
\ 1\85\r±\1c§\ 1Á\fÕ\ 4\8d\1c«\12\13\91\ 5»\14\93\ f±\13ç\10\8f\ 3Û\ 3ã\ 4Ý\f\89\vù !\97\eÇ\ fÅ\r\95\ 6Ù\b\9d\ eû\ e\9b\v³\13í\18¡\ 1Ý\15ý\rå\18\91\10\ 5U\9d\ 3·\b»\e¯\ 1«\15í\1a¹\10ÿ\ 5\97\1cý\13Û\ 5\8b\ faÿ\b©\11ñ\17\83\ 2§\ eÁ\eÛ\18å\eï\a§\15¯
+\95\ 4Ç\12ï\ 6\99\bÿ\19±\ 3Ý\10©        Õ\fÃ\a­\ 4÷\19\9d\a»\19\89\14\81\ eç\eÃ\ 1Ñ\ 3³\10ó\15\8d\12Í\1cç\11Ñ\18\99\e¯\a»\r×\15¹\ 3¥\ 3\8b\a\97\15å\v\9b\ 2Ý\14ñ\ 2ç\ f¡\1c\9f\17Ë\ 3\17õ\ 1ë\v\91\ 6»\ 6ß
\bÇ
\12\9d\1c\9b\ 4«\10£\v¹\vÝ\ 1±\18Ñ\15Ó\ 2\87\1a\8b\ 1«\1cµ\eÓ  Ë\fï\10\89\1aµ\a\83\ fÝ\vÝ\ eã\ 6\85\16£\ 1\87\1c×\17é\ 3­\e½\ eÙ\ 1«
\eé\12Å\15\97\ 6·\19Ë\19\85\19¹
\16å\ 3­\19\89\fù\r\9f\1a÷\ 6\95
+\85\1cÛ\ 4ß\ e\99\12û\añ\15é  ±\b¿\13ñ\ 3¿\ 1\89\12«\16é\13«\14±\15\85\12Õ\18ù\18\9d\ 2¥\10ÿ\1aÙ\a\8d\ 4¡\13õ\16ã\ eÝ\b¥\14Ã\ 3Ù \9b\13£\11×\ 4\95\17\91\12Ý
\15ý\15\9d\ 5Ë\b\9f\e\8d\f\8d\r¯\ f\8b\ 4×\ 3¹\ 1\9f\a\93\10\9f\18Ï\ 1\93\e\8b\ eÏ\v\8b\10\97\11\ 3ã\ f»\ 5Ï\ 4\99\ f\85\15\85\ 1\83\10¯\11©\e§\10Ë\ 2·\1aµ\18ý\ 1ï\ 1£\ 6¥\1c\93\ 2¹\11ù\ fï\fÍ\1a¹\16á\11ù\13\81\15Í \97\18\93\17\8d\e\8d\18\81\18©\15\81\11ñ ·\ 4\97     \aó\ 6í\15\81\vç\17Å\ 4§    \8b\vã\12É\16¥\11ý\ e\8b\1cñ\f\97\ 3õ\10ï\ fy¿\12\83\11\aÝ\ fí\ 3ù
+\85\fÁ\r\9b\ fé\18­\ 3ÿ\14¯\19­\16Ã\ få\17á\ 3\87\11\93\ eÛ\ 6\93\18í\19á\ 2û\11¡\ 6\1c×\ fó\ fË\18¿\v\8f\19÷\ví\r\11½\19Ç\ 4Á\ 1õ\11Ó\ 1Ç\15á\ 1ß\aá\f±\16ù\16Õ\ f¡\ 5¡\1aµ\16«\ 5\81\14ã\ 2­\10\ eï
+\8f\ 5µ\f½\14¡\17©
\18û\ 5ù\ eÅ\ 2»\16\95\16ý\1aã\19\8b\ 3\89\10»\ 2÷\ f·\fó\1aù\19Ù
\aÛ\19á\ f\81\ f£\16\89\e\8b\12÷\fá\e\93\ 3Ñ\ e\8f\1c\9f\ eç\15ë\f¥\ 1\89      Ã\10\8d     \87\rå\r\83\17·\r\9b\bÁ\ 4\85\aí\ 5Ë\ 6£\ fË\14ë\10ï\17\89\ 1÷   \8d\16³\1aë\eá
+\87\v\8f\16ñ\19ï\ 5\89\bë    ±\e\89\17¿\11\8d\aõ       \83\16Í\16\ 6\81\rá\10\8b\16Ï\ e÷\ 3\9b\1cù\14¿\ 4»\ 3\87
+\81\b\9f\vÑ\v×\10ù\ 4ó\17¥\a«\fÉ\rµ\ 1±  ë\11½\17¥\15\97\b¥\ 2¯\13·\1c\95\ fÇ\1aÓ\ 6Ù\ e\83\ e¹\1aÁ\13Å\ 3\91\ e\9d\18Ç\18±\ 1Õ\ eÁ
\19\87\15\81\17¿\ f©\ fÛ\e©\ 6\89\ 6¯\17Ó\a\91\1a½\1a\99\1a\9d\17\8f\ e\9b\10ó\ eÓ\ 4ë\aÙ\14½\18ó
\14÷\17í\14\83\f\85\10Ù\10\91\18×        Ý\18Û\rÁ\19§\17Õ\16\87\17Å\11û\r¹\15©\b÷\ 5\8b\ 6»\12\93\12µ\ 6­\18á\v\95\f\83\aó\11\r«\vñ\18û\19\9b\ e÷
\f\9f\ 2í\ 6\91\v¡\16×\e¡\ 2Á\10\95\14é\ 4û\ f\9d\12Ñ\14\83
\12\14Ý\1a\85\11õ\ e\83\1a\9f\13³\ fû\ 6ý\ 5Ã\ 5¯\ 3å     s\8b\17\9b\17½\13É\bÃ\1c¡\19\9f  \15Ñ\13\8f\10ã\ 1\v\18\99\19\9f\ 6õ\ f\99\11O\99\ 6½
+\7f«\ fÃ\v\99\17Ï\15¿\ 2\83\rÅ\v±\19¡\10\8b\bÑ
\1c¯\ 6\97\ 5µ\11\93\15Í\bç\13Õ\15Ï\13÷\10©\ 5Ï\17\93\ 4µ\ eß\ 1±\ 2³\ 5g\87\19\85\vý\bó\aÕ\10ë\ 6\99\aÿ\12\97\14§\18\9d\fÕ\1a¹\18Í\eñ\ fË\ 5\85\17Ã\ eÕ       \91       Ç\rï\11»   \97\fù\ 6Ù\r\85\ 3¯       ×\f\83\e\9b\e\8b
\v©\1a§\1a½\1cå\15\81\eá\rÛ\ f»\b\87\10©\17\ 4Í\13\9d\10Û\17å\1a±\ 5¯\ e÷\eÍ\ 2Õ\ 1¡\18Å\1a\8d\10\8d\1a¹\ 2Õ\r\81\ 5ï\1a\10\87\12É\ 6ó\19©\ 2¥\ eé\ 2í\ 1ý\17Ñ\ 6Û\f\9d\v©\1c£\17Á\1c»\1cõ\1a»\10é\1aé\16³\v\83\b\89\ 3Ó\10Õ\v­\17Ç\19Á\16ó\14\87\16¹\r±\14÷\bã\f\87\a\8b\e\9d\13¡\aÅ\f\9d\11Í\15Ó\18ÿ\ 1¿\15Ó\vó\rÛ\15\91\19ß\v\87\ e;\89\15å\ 2Ç\14Û\10Ï\ 3Ã\r÷\11¥\12Ý\16ß\ 4í\17÷\ 4Ë\eû
+·      Ù\12Í
\ 4ï\ 3\9d\ f­\14¹\b\95\v·\ 2ý\19\93\ 5Á\vÙ\ f¥\ 6±\v\8b\r\95  Må\12\89\rç\ 4é\10{\8b\11×\v¿\17í\ 4ë
\ e\9f\15Å\10©\13ó\10ç\ 5Q\99\r¯\10ñ\1aù\10å\ eá\ eÏ\ 5¯\ 5á\14\1f«\ eÙ\11é\15í\11Ù\ 5ÿ\ 4¥\ 5Ó\17¹\14Ë\v¿\10ã\ 5¥\19ù\17Ó\ 5í\bÓ\11£\ 2§\16\9b\1a±\1añ\a\97\12÷\14§\ 4¿\a«\ 6\81\19ó\fý\f\14¥\r©\a\9f\14õ\18\99\fÙ\ 4ë\ 5Ó\159\85\14\97\13¹\a\9d
\ 5Û\11ó\ 2Ç\ 6\89
+\87\ 3±\ f÷\ 2\87\b«\11ã\1añ\e\99\18÷\12\87\ 4É\15ã\a\17ç\ 1Ã\ 2£\r§\14Ï\ 6\8d\ 5É\18å\10¡\fç\12\95\ 5\99\1cÉ\12Ã\1aß\19±\ e¡\võ\17½\16\19\81\ 1Ó\ 3ï\ 4Ý\aá    ³\ 1\8f\1a\9b\r¹\13\9f\16¥\ fÁ\17³\1cÕ\a\95\11ÿ\ f½\ fÁ\ 5\93\v×\1a\9b\a×\19ß\bÉ\11å\bÙ\1a\93\11é\ 5ß\f\9b\14\97\10\9f\f\91\ 1Ý\13é\ fÅ\19³\17ñ\ 1I\8f\fÓ\ f\93\ 1Ï      \95\b³\ 6\8d\b\8f\12½\ 4ÿ\f£\f\9d\16Ç\1c\9b\16\9f
\11ß\11Ã\17\89\16Ã\16±\ 6\8b\13Ë\ fÅ\ fß\18í  \89\ 5µ\10ù\vë\19Ó\14Ñ     µ\ 5ã\11»\15\87\18Õ\ 6³\bÉ\1c\81\13\1dý\ 3\9b    ·\13\97\ 2Ï\f½\aÃ\ 4Ó\12÷\aï\b\99\v·\e\9d\1a« \8b\fÛ\12\81\fÛ
+\8d\ 2ï\e¯\ 2¡\14\95\ e\93\rá\b\81\ 2Ë\rÑ\10¹\1c¯\f­      ë\13«\e\8f\r¡\15·
\aï\ 2\85\ 2\8f\14Ï\ fÅ\ e   õ\b\8d\ e³\ 2\93\1a×\ 1Í\19Ñ\ f\81\ 4Ã\11­\1a\93\a\95\19ý\18ý\14Ç\ 1\97\aó\ 4ó\13\89\ 2§\12­\ 1\8b\ 2\83\vÛ\vµ       Ù\16Ã\fû\e³\14¿\r\8d\11\99\15\95\ 3\83\18\81\1c\9f\11¥
\11ï\rÉ\a£\e\9b\12Ñ\ 1±\rÍ\aý
\ 6Ï\1a³\e\83\ 6¿\16ó\eñ\11Ç\ 3u\89\a\85\ eÝ\11\85\eÙ\ 6ù\15é\fï\ eÁ\15·\17\8f\a\9d\ 1\8f\17\85\1a)¿\ 5·\ eÇ\b¯\b­\ eÑ\ 2µ
\rõ\12ß\ 3\8b\ 5\83\ 5µ\ 2\8f\15±
\ 1\85\r±\1c§\ 1Á\f\8d\1c«\12\13\91\ 5¿\f«\ 3\93\13\93\ f±\13»\1a\8f\ 3ã\ 4Ý\f\89\v\99\ 3ù       \97\eÇ\ fÅ\r\9d\ e¡\ 1ý\rå\18ã\14\91\10\ 5U\9d\ 3·\b»\e¯\ 1«\15í\1a¹\10ÿ\ 5\97\1cý\13Û\ 5\8b\ f\17Á\eÛ\18å\e§\15¯
+\95\ 4Ç\12ï\ 6\99\bÿ\19±\ 3Ý\10©        Õ\fÃ\a­\ 4÷\19\9d\a»\19\89\14\81\ eç\eÃ\ 1Ñ\ 3³\10í\13ó\15\8d\12Í\1cç\11Ñ\18\99\e¯\a»\rù\ 1×\15¹\ 3¥\ 3\8b\a\97\15\9d\eå\v\9b\ 2Ý\14ñ\ 2¡\1c\9f\17Ë\ 3\17õ\ 1ë\v\91\ 6»\ 6ñ\bñ\12\9d\1cï\13\9b\ 4«\10£\v¹\vÝ\ 1±\18Ñ\15\87\1a\8b\ 1«\1cµ\eÓ        Ë\fï\10\89\1aµ\a\83\ fÝ\vÝ\ eã\ 6\85\16£\ 1\87\1c×\17é\ 3­\e½\ e«
\eé\12\97\ 6·\19Ë\19\85\19å\ 3­\19\89\fù\r\9f\1a÷\ 6\95
+\85\1cÛ\ 4\99\12û\a­\fÑ\bñ\15é        ±\bñ\ 3¿\ 1\89\12«\16é\13«\14±\15\85\12Õ\18ù\18¥\10ÿ\1a\85\13Ù\a\8d\ 4¡\13ã\ eÝ\b¥\14Ã\ 3Ù     \9b\13£\11×\ 4\95\17\91\12Ý
\15ý\15\9d\ 5Ë\b\9f\eé\11­\ 5\8d\f\8d\r¯\ f\8b\ 4×\ 3¹\ 1\9f\a\93\10£\ 5\9f\18Ï\ 1\93\e\8b\ eÏ\v\8b\10\97\11\ 3ã\ f»\ 5Ï\ 4\99\ f\85\15\85\ 1\83\10¯\11©\e§\10Ë\ 2·\1aµ\18ý\ 1ï\ 1£\ 6¥\1c\93\ 2¹\11ù\ fï\fÍ\1a¹\16á\11ù\13\81\15£\18\97\18\93\17\8d\e\8d\18\81\18©\15\81\11ñ   ·\ 4\97     \aó\ 6í\15\81\vç\17Å\ 4§    \8b\vã\12É\16¥\11ý\ e\8b\1cõ
\f\97\ 3õ\10ï\ fy¿\12\83\11á\aÝ\ fí\ 3ù
+\85\fÁ\r\9b\ fé\18­\ 3ÿ\14¯\19­\16Ã\ få\17á\ 3\87\11\93\ eÛ\ 6\93\18í\19á\ 2û\11¡\ 6\1c×\ fó\ fË\18¿\v\8f\19÷\ví\r\11½\19Ç\ 4õ\11Ó\ 1Ç\15á\ 1ß\aá\f±\16ù\16Õ\ f¡\ 5¡\1aµ\16«\ 5\81\14ã\ 2­\10\ eï
+\8f\ 5µ\f½\14¡\17©
\18û\ 5ù\ eÅ\ 2»\16ã\19\8b\ 3\89\10»\ 2÷\ fó\1aù\19Ù
\aÛ\19á\ f\81\ f£\16\89\e÷\fá\e\93\ 3Ñ\ e\8f\1c\9f\ eç\15³\ e¥\ 1\89        Ã\10\8d     \87\rå\r\83\17·\r\9b\bÁ\ 4\85\aí\ 5Ë\ 6£\ fË\14ë\10£\ 4ï\17\9f\ 1©\18Ó\fÕ
+\8b\b\89\ 1í
+\81      ÷\13÷\16\8d\16÷ ß\16Õ\1cÑ\1aÓ\13\89\1c³\1a\9f\ 3£\10ß\17£\12\8f\eë\eá
+\8f\16\87\vé\r\97\vñ\19\89\bï\ 5³\11§\11Ç\ eë  ±\e\89\17¿\11Ñ\e\8f\ 1û\16Ï\e\8d\a\89\ eÕ\13\8f\11û\18õ       Ï\14§\få\13\83\16Í\16·\15\83\13Ù\ 3¹\e¹\12ë\rÿ A\91\rÅ\17\9d\bÇ\aË\13¯\r§\ 6\8d\ f½\15ÿ\ 3ß\ f\81\rë\ fá\10Ù\vý\ 4Ç\e¹\ 5§\1c¿\19·\ 3ß    ¿       û\14\97\r\14É\14ù\fõ\r©\vù\11Ã\13\93\14½\ 1½\v\9d\ 4Ç\fç\ 6\8b\16Ï\ eë\16¡\12ù\ 2÷\ 3ñ\r\9b\1cÛ\13ù\14å\16¿\ 4\87
\ 3\81\bÑ\v\9f\v\91\17ç
\10ù\ 4ë\ 4ó\17¥\a\8b\18«\fã\eÉ\rõ\ 5µ\ 1±        \87\ 6ß\13½\17ë\11\89\ fý     ¥\15\97\b¥\ 2·\1c¯\13Á\13\95\ fí\16\fÅ
\1aÓ\ 6Ù\ e\95\13\83\ eß\15\99
\ 3¹\1aÅ\ 3ó\bõ\e÷\r\91\ e\9d\18Ç\18Å\12±\ 1Ë\ 4Á
\ e\87\15Ï\19¿\ f\81\17Û\e©\ f\89\ 6\85\ 4©\ 6Ó\a¯\17\91\1a\99    ß\ 5û\13·\16\91\ 3Ç\ 2ý\11ù\ 5á\15å\14\8d\15½\1a\99\1a\9d\17í\14\8f\ e\9b\10ó\ eÃ\15ë\aÓ\ 4Ù\14ó
\18Û\14\9d\rË\10÷\17§\17\83\fÃ\18\85\10í\ f\97\19Ï\1c§
\19?ÿ\16\8b\15û\ 4Ù\10»\v\91\18×       Í\ f\83\19\97\17Ý\18Û\rÁ\19ù\eÕ\16\87\17û\rÅ\11¹\15É\ 4Õ\ 5Ñ\16©\b÷\ 5¥\18\95\ 2\8b\ 6»\12\93\12µ\ 6­\18á\v\95\f\83\aÅ\ 5Ó\19Õ\ 2\ró\11«\v÷
\ 5Ó\1aû\19ñ\18\97\ e\9b\ e§\13½\ 2ã
\f¯\12\9f\ 2í\ 6¡\16Í\ eé
+\91\v\93\f\95\14¡\ 2×\eÁ\10\83\14¥        é\ 4û\ f\9d\12\14³      \83
+ÿ\ eÏ\12w\97\ 4Y\85\11ï\14Ý\1aõ\ e\83\1aý\ 5\9f\13³\ fû\ 6Ã\ 5Í\14¯\ 3å      s\85      ÿ\ 6Ç\11×\ 5\91\15\8b\17½\13\9b\17Ï
\b\99\11Ã\1c¹        ù\ 3É\13¡\19\v\9f        Ñ\13\15µ\r±\11\8f\10ã\ 1÷\18q\99\19õ\ f\9f\ 6ý\12É\ eÉ\19Å\eÁ\añ\10§\a­
+\83      Cß\ 6O\9b\ 3\95\10½
+\99\ 6\81\ 3·\12Ï\15«\ f\7fÅ\a\99\17Ã\v\9d\14\91\16¿\ 2\8b\b\83\r±\19Å\v¡\10\89\19Ñ
\1c¯\ 6\97\ 5Í\bµ\11\93\15Õ\15ç\13Ï\13©\ 5÷\10\99\ 1\93\ 4Ï\17µ\ eß\ 1±\ 2©\19³\ 5g\87\19\85\vý\b\87\13ó\a\87     Õ\10ë\ 6ÿ\12\99\a­\a\97\14Í\ 4§\18Í\e\9d\fÕ\1aÁ\b¹\18Ó\1c\83\eñ\ f¿\1c»\ f£\aµ\17Ë\ 5£\1c\85\17á\ 4\9b
\ e£\15Õ  Ù\r\97\1a­\rÉ\1aÙ\18¹\19\91   õ\fÉ\10Ç\rë\17å\11ï\11ç\fó\ 5ÿ\e¯\15\97\f» ù\ 6\85\ 3\87\14ë\ 1\9d\19Ç\v¯   7×\ 6×\f\9b\e\8b
\16§\vÿ\13Í\ 2©\1aÿ\17§\1aá\r½\1c­\ 6å\15\81\e¯\1aÛ\ f­\v»\b¡      ¡\r\87\10\9d\10©\17\ 4Í\13\99\13É\ 5¯\ eÛ\17å\1aû\ 2£\ e±\ 5÷\eÕ\ 1\8d\10Å\1a¡\18\9b\f¹\ 2\8d\1aõ\ 4\81\ 5Õ\rï\1a\10\87\12ó\19É\ 6ý\17©\ 2¡\ e¥\ eé\ 2í\ 1Û\fÑ\ 6©\1c©\10·\a\9d\vÁ\1c£\17¯\18ÿ\v»\1cõ\1a£\1aÛ\ 1é\1a»\10³\vé\16\89\ 3\83\bõ\14­\17Ó\10Õ\vÇ\19Á\16Ù\ 2ó\14\91\ 4\87\16\9b\ 5÷\ e\e\8b\e¹\r·\14±\14\9d\ 6ã\f÷\b\87\aë\ 2\9d\11Ý\ 6\9d\13¡\aÉ\ fÅ\fÍ\15õ\aÓ\18ÿ\ 1Ó\v¿\15ñ
+\91\eµ\15ß\vó\rÛ\15×\ e\91\19å\ 2\87\ e;\89\15\9f\12Ç\14Û\10·\ fÇ\17Ý\e¥\12Ã\rÏ\ 3÷\11í\ eË\eÉ\ 3ß\ 4Ý\16÷\ 4í\17ÿ\ 2±\10·   û
\12\97\16Ï\16Í
+\9b\15ë\ 3³\19¹\bå\ 4é\17ï\ 3¡\e\9d\ f­\14ç\vÁ\12\95\vç\r\9f\rñ\16ý\19·\ 2­\13Á\ 3\93\ 5Á\v¥\ 6ý\10Ù\ f±\v\8b\r\ 3\95     \89\r©\ 4Ñ\f×
\17\95\eå\12\81\aç\ 4í\a×\ 2é\10{\8b\11×\v\9d ¿\17í\ 4ë
\ eÿ\18\99\ 2\9f\15\81\1a£\b\85\ 6Å\10©\13»\17\91\1có\10ë\12ç\ 5\99\r\10µ\12ï\vñ\1aù\10ï     å\ eÏ\ 5á\ e\14¯\ 5ï\19\8d\v\8b\19Ù\11\1f«\ eå\aÅ\ 1é\15í\11Ý\17Ù\ 5ÿ\ 4³
+ç      \8f\bç\a¡\11¥\ 5ã\ 5Ó\17¹\14Ë\v¿\10ã\17¥\19ù\17¥\1aÓ\ 5§\16í\b£\ 2Ó\11±\1a\9b\1a\8f\13ñ\a\97\12÷\14\93       ß\rý\e«\ 6¿\a§\ 4Á\18\81\19ó\f¥\r\fë\14\9f\14©\aõ\18\85\14\99\fµ\1cí\eý\a\ 4ë\ 5É   Ó\15\97\13±\ fµ\ 3Ñ\17¹\a§\ 5\9d
\11ó\ 2¯\ 4Ç\ 6\87\ 3\89
\11\87\b÷\ 2ã\1añ\e\99\18÷\12Å\14É\15\87\ 4ã\aË\17\ 2ç\ 1Ã\ 2£\r¥\vÏ\rÝ\ 2Ï\ 6Ù\f§\14Á\11Ý\r×\14\8d\ 5¿
\ 4É\18å\10¡\f\95\ 5ç\12Ñ\rÃ\12«\ 4±\ e\99\1cÉ\12×\18Ã\1aß\19\19û\10¡\võ\17½\e½\16ã\10Û\16\91
+\81\ 1Ó\ 3ï\ 4á        Ý\a³\ 1Ë
\17\8f\1a\9b\r÷\ 1¹\ f¹\13\9f\16¥\ fÿ\ f\9f\ 5³\1cÕ\a\95\11½\ fÍ\ 3Á\ 5\93\vå
\19×\1a\9b\aß\b\93\11É\11å\bÙ\1aß\f\8d\ 1é\ 5\9b\14Å\19\9f\f\97\10µ\13\91\ 1Ý\13é\ f³\17ñ\ 1I\8f\fÓ\ f\93\ 1Ï     \95\bÕ\e³\ 6\8d\19\8d\bÉ
\1a«\ 1\85\b\8f\12½\ 4ÿ\f£\f\9d\16Ç\1c\9b\16\9f
\11µ\1a\89\16ß\11Ã\17Ã\16±\ 6\99\10\8b\13Ë\ f\93\16Å\ fß\eß\18ù\12·\ 1í      \89\ 5µ\10ù\vë\19Ó\14Ñ     µ\ 5±\12\9f\ f·\10Ã\bã\11»\15\87\18Õ\ 6³\bÉ\1cï\b\81\13\97\ 2\1dý\ 3\9b        ·\13Á\ eË\15Ï\f½\aÃ\ 4Ó\12µ\v÷\a«     \99\v·\e\9d\1a\8b\fÛ
\12\81\f\8d\ 2ï\eõ\19¡\14¯\ 2E\95\ e\93\rá\bË\r\81\ 2Å     Ñ\10¹\1c¯\f\9f\10­       ·\11\13\8d\ e«\e\8f\r§\bÅ\13¡\15å\ 1·
+\91\11¡
\aï\ 2Ñ\a\81\12\97
+\81\16\85\ 2§\e«\rí\12Í\10\8f\14Ý        É\fÃ\19Ï\ fÅ\ e        Ã\ 6õ\bé\ e½\11£\14\91\f½\12³\ 2ó\v·\18«\1a\93\1aé\a×\ 1Ý\ 5Í\19í\10Ñ\ f§\rÃ\11\81\ 4­\1aÃ
+¿\ 6\93\bé\v\93\a\95\19\ 1ý\18ý\14ç\18\93\1c¹\f\8f\ 4Å\b£\13£   \93\ 6Ç\ 1\95\15Ë\ e\97\aë\18ó\ 4Ë\1cË\12õ\vó\ 3\83\vó\13\89\ 2å\ 6§\12­\ 1Ù\19¥\f\95\18\8f
\r\8b\ 2á\12ã\16×\aû\f©\ 3Ë        Á\14Û\vÏ\10\12Ë\11µ    \91\13Å\16Ù\16Ã\fÍ\rû\eñ\14³\14½\b¿\r\85\ f\8d\11Í\12\99\15\83\ 3\95\ 3\83\18á\17©\14Á\ 2\83\1cç\14\81\1cí\ 2\9f\11³\12¥
\11Ã\eï\rÉ\aé\b£\e½  \91\14Ó\16Ñ\ 1\9b\12±\rÍ\a¿\bý
\16µ\ fé\ 6Ï\1a³\e\83\12\83\ 6Å\ 6¿\16ó\eÏ\11\9b\19ñ\11\99\14\8d\ 3­\15»\f»\ 4\ 3u\85\ e\89\aÏ\18\85\eÝ\11Ù\ 6Ý\12á\19\99\ 4ß    ù\15é\f\8d\14ã\vÑ\1c­\ fï\ eÁ\15á\18ß\14±\ 4·\17Õ\17\8f\añ\v\9d\ 1³\få\f)\8f\17\9d\15\85\1a·\ 5½\ 3ë\b¿\ 5Ñ\12·\ e\95\12³\ 4§\ 1¯\bÇ\b­\ eÑ\ 2µ
\rõ\12\8b\ 5ß\ 3\83\ 5µ\ 2±
+\8f\15©\ 1\85\r±\1cÁ\få\ fç\16ý\ 6Õ\ 4ã    \95\1a©\r\8d\1c«\12\13·\v«\ 3\91\ 5¿\f\93\13¥\16¿\ 3©\fµ\19\93\ f\93\19»\14Û\ 3±\13ÿ\15ñ\ 5\1a»\11ç\10ÿ\rÑ\ 4ß\1a\8f\ 3\bc\93
\ 4_ÿ\10Û\b»\aÝ\f\89\võ\ 6ù       \99\ 3ß\ 2Ù\17\95\1c\1a\97\eÇ\ fÅ\rÙ\b\95\ 6\9d\ e\9b\v\9f\19\81\10û\ eÝ\15³\13í\18¡\ 1ý\rÍ\18å\18ã\14\91\10\ 5U\9d\ 3\8f  É\ 2\87\e·\b«\a»\e\87\ 2ç\19\95\aÛ\a¯\ 1é\14í\1aÝ\19«\15¹\10ÿ\ 5ý\13\97\1c¥\13Û\ 5\8b\ f\15\97\ fÿ\b©\11ñ\17\89\ 4ó        \83\ 2ï\18§\ e\8f\ fÁ\eõ\ 3Û\18ÿ\aå\eÕ\19§\19\8f\ 6ï\a§\15¯
+\95\ 4Ç\12å\ 5\99\ e½\10ï\ 6Û\1a\99\b¹\17ÿ\19±\ 3Ý\10é\19©    Õ\fÃ\a­\ 4÷\19\9d\a¿\e½\ 5»\19ç\11\89\14÷\1a\87\ f«\18\81\ eû\bã\bç\eÃ\ 1Ç\13Ñ\ 3³\10\99\16í\13§\ fÍ\1có\15­\11\8d\12Ñ\18\99\e\85\18¯\aË\16»\rù\ 1×\15×\rý\v\ f¹\ 3\9d\1c\8b\a¥\ 3\97\15á\ 6\9d\eå\v\9b\ 2ñ\ 2Ù\15Ý\14ç\ f¡\1c\9f\17\85\ 5«\bÁ\ fË\ 3\ 1É\17ï\12\91\ 6ë\v»\ 6\bß
\12Ç
+\9f\1c\9b\ 4ï\13£\v«\10¹\vÝ\ 1\18Ñ\15Ó\ 2\87\1a\8b\ 1µ\e«\1cÓ Ë\fï\10µ\a\89\1aÝ\vù\a§\ 2\83\ fÿ
\ eã\ 6³\15\85\16Õ\b£\ 1¿\1a¿\14Ë\ 1à   á\16\87\1cç\1a\91\b¡\b×\17\8f\18é\ 3­\e¥\b\87\ 1û ½\ e«
\ 1\85
\12Ù\eÏ\ 2Á        \97\ 6±\17\87\f¥\ 4Å\15Ó\e·\19Ë\19¹\ 4¹
+\85\19×\16å\ 3­\19ù\r\89\f£\19×\11ó\18é\eñ\ 6\9f\1a©\16÷\ 6û\15¯\1c\95
\ 6Á\ 6\91\aÓ\rÍ\ 5#\85\1cé\ 1û\12\8d\17Û\ 4ß\ e«\13ñ\15\99\12«\ 2û\a­\fÑ\bé ±\b¿\13Ç\16õ\13ã\18ñ\ 3µ\b\17\95\ 1¿\ 1Û\ 2û\ 1Í\v\8b\1a\89\12Û  ç\b«\16é\13É\ 1«\14\83\ 4\8d\ 6\85\12±\15ñ\ 4©\12ù\18Õ\18ÿ\1a\9d\ 2¥\10\85\13Í\17Ù\a\8d\ 4·\ 6¡\13ã\ e\87\ 5õ\16Ý\b¹\ 6¥\14Ã\ 3ÿ\11\9b\13Ù £\11×\ 4\95\17\9d\ 5\91\12Ñ\ 5á\ 5\89\18¿\18å\19Ý
\15ý\15Ë\bÛ\ e\9f\eé\11­\ 5\8d\f\8d\r\8b\ 4¯\ f×\ 3¹\ 1\93\10\9f\a\9f\18£\ 5Ï\ 1\91\ 2\93\eÏ\v\8b\ e\97\11\8b\10\ 3ç\ e»\ 5ã\ f\99\ fÏ\ 4\85\15\85\ 1\83\10¯\11©\e§\10Ë\ 2·\1aµ\18ý\ 1ï\ 1£\ 6×\13¥\1c\93\ 2\9b\ 6Ó
\11ù\ fï\fÍ\1aÍ      ¹\16ù\13á\11\81\15\93\17£\18\81\ 6í\v³\18\97\18Í\ 6\8d\e\8d\18\8b\14\81\18©\15\81\11ñ     ·\ 4ý\ f\97   \aõ\ 2\89\11ó\ 6ç\17í\15\81\vç\ 3§        Å\ 4\8b\v³\aÉ\16ã\12Å\18§\ 3\81
\11×\12ý\ e\13\8b\1cñ\ eõ
\17¡\ 3ñ\f\12ã\15ó\12\97\ 3ó\ 1\10Ã\14¯\16ï\ fÉ\eã\13¿\12\9f\ 4»\ e\83\11ù\bÝ\ f£
\a\ 3¯\eµ\14\9b\ fí\ 3ù
+\85\fÁ\rÝ\ 4é\18»
\ 3­\16ÿ\14¯\19Ã\ få\17á\ 3\87\11Û\ 6\93\ eí\19\93\18á\ 2û\11¡\ 65\8d
\1c×\ fó\ fË\18¿\v\8f\19ï\16÷\vû\1aí\r\11½\19õ\11Ç\ 4Á\ 1Ó\ 1Ç\15á\ 1­\bß\aá\fÓ\b½\f±\16ù\16¿\ e\97\ 1\9b\ 1ù\1aï\15Õ\ f¡\ 5¡\1aµ\16í\f\81\14«\ 5\ 2­\10³\16Ý\ 3»\ 1\8f\ 5¹\ eï
\fç\ 2½\14¡\17\89\13ã\ 3©
\18û\ 5ù\ eÅ\ 2»\16á\1a\95\16ý\1aã\19Ñ\19\89\10\9f\b\8b\ 3\8d\13ó\1a»\ 2ë\1a÷\ f·\f÷\f\8f\ 2ù\19Ù
\aÛ\19á\ f¯\v\81\ fû\v£\16Ç        \89\e\8b\12\9b\bÙ\13á\e\8f\1c\93\ 3\91\ fÑ\11Ñ\ e\9f\ eç\15\9b\18ë\f\83\ 1³\ e÷\15­\ 2Ã\10\89 ¥\ 1É\v³\ 3Ï\b\8d       å\rñ\13Ó\ e\87\r·\rß\10\83\17Á\ 4\85\a\9b\11\8b   Í\ 1«\17í\ 5Ë\ 6¡\ fá\13³\r£\ f\8f\v\99\ 5¥\eË\a©\ e\83\15Õ\14Ë\14
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.nrm b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.nrm
new file mode 100644 (file)
index 0000000..9c96ff0
--- /dev/null
@@ -0,0 +1 @@
+NRMÿ|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||wwvvww|xvv|v|www|||w|||www|wxy|vx||yvvwwxwyvv||v|wv|v||wvv|xwxwy|v|vv|xvv||x|wxwvxvv|wwwvv|v|xwyw|w|||wvxwwx|vvxw|vxyvww|v|x|vwvxw|wwv||x|v|vxvvwv|w||vwwwwvx|xxwx|yvv|ww||||x|vwx|wx|vvwywx|||y|wvvx|v|xwxyyvx|xv||xxww|xxvv|xxvxv|vxxwvxwxx|ww|v|wxxww|xw||wxv|xw|wv||xwx|v||vwxvx|wxx||v||vvwvvx|||v|wxvvw|v|wwvv|wv|vxww|xwvx||vxwvvxwvx|v|vxwwwvyvwvwxxvywwv|||v|v|w||vw|||v|wwwvv|||v|wvv|w||vvx|v|xvw||wxwvvwv|wvvvx|vx|y||wyw|wvyw|wv|yxv|ywvvv|x|wwv|||vwwvvvv|w|vyvwvv|v|w|xwx|wxv|vw|w|xw|w|www|vywxxv|x|w|xvw|v|w|yvw|wvvw|||vwvvx|||||v||www|vwv||y||wxvw|y|x|x|vvv|wx||vvw|xv||yxx|xxx|v|w|wx|w|wx||vwvvvvxwwyw|y|||||yywvvwxw|xxwyvxwvwwv|vww||x|v|vww||||w||xvv||w|xvyww|wyx|w|v||xx|v|w|x|xvvxxv|x|wxx|wyvxwwxvvvvvx|xwvvywxvwvv|v|w||vv||v||wwwvx|w|vwwwwxwvwvxv||w|xw||xv|||vwxxwvvw||wwv|wvwv|||xyww|xy|||xwywx|v|v||vv|vvwxvx|wy|wxw|xxxwvyvwwvvvyxvxywv||xvw||||xw||xxw|yxvvwwv||||v|ww||wvwxyxxv|wxyxvv|wvvyxvvvwvw|xywx||vwywvvwyvww|w|wvv|||xvw|w|wxwxwww||w|v|wv|xxx|xw|||vx||ww|vxw||wv|vw|wvv||||ww|wvv|v|wvvvwwwxxwv|xwy|xwxwxxw|vyvvvxwwwwv|w|vw|vywvxwxvxwvywvxvvvwvx|||wwxvwyw|v|wxvw|v|vxvv|x|wxvx|wwx|wvwv|ww|vxxww|v|xw|x||v|vw|w|wx|vw|vwvvxwxvyxvywvxwxw||||vwwyvwxv|vwwwwyxww|v||||||xw|x|||vwx|w|w||vw|x|xwxv||xw|vv|||vvxy||v|x|x|v|vwww|||w||wvxyww|vxyx|yxxvwwxx|||v||||wwwxy|wxxx|v|w|v|v|xw|xvv|vywv|vv|wwxwy|ywxwx|||xxv|xvw||wwwxvy|||vvw|v|yvxvvxyvwx||w|wyvwxxww|wvvw||v|xywwxxw|wxv|wvwwww|wx|x|wxwvx|wv||w|v||vvwvvvvyxyy|vvyvx|w|vx|w|v|vxwvxvx|xxvx|xvxw|vxx|x|wy||x|xxvy||wxvvvv|v|wv|wwvwww|vv|wv|v|w||xvvvxwwv|w|w|v|wxx|yvv|xwvvwvvx|vxvw|v||v|ww|xv|vwvy|wy|w|w|v|wxv||||wvx||wvv||www||w|x|x|y|vvvxv|wxvvy||ww|w|w||xw|w|||vvvx|v|wxxwxvw|vvx||xv|x|w|x|yxwvxvwyvxvww|vvvw|vxww||vvwwv||wv|v|vx|vwxx||xvv|yvwx|vvw|w||ww|w|wwwwwy||yvwww|xwwx|wxvwwxw|w||vvv|wwvvxw|ywxyx|wwxx|ywvv||w|vw|x|vvvxw|yx|v|vvxxvwx||wwvvxv|wxwvwxwv|xwwvywwyww|v||xx||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.prx b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.prx
new file mode 100644 (file)
index 0000000..31cec51
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.prx differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.tii b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.tii
new file mode 100644 (file)
index 0000000..5002de3
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.tii differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.tis b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.tis
new file mode 100644 (file)
index 0000000..5fb0c2b
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/_0.tis differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/segments.gen b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/segments.gen
new file mode 100644 (file)
index 0000000..63a7ec9
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/segments.gen differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/segments_1 b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/segments_1
new file mode 100644 (file)
index 0000000..e9444f6
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/index/segments_1 differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/repository/org/eclipse/recommenders/index/0.0.0/_maven.repositories b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/repository/org/eclipse/recommenders/index/0.0.0/_maven.repositories
new file mode 100644 (file)
index 0000000..f19f57e
--- /dev/null
@@ -0,0 +1,4 @@
+#NOTE: This is an internal implementation file, its format can be changed without prior notice.
+#Sat Sep 01 11:13:25 JST 2012
+index-0.0.0.pom>remote-models=
+index-0.0.0.zip>remote-models=
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/repository/org/eclipse/recommenders/index/0.0.0/index-0.0.0.pom b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/repository/org/eclipse/recommenders/index/0.0.0/index-0.0.0.pom
new file mode 100644 (file)
index 0000000..428cd12
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+        <modelVersion>4.0.0</modelVersion>
+        <groupId>org.eclipse.recommenders</groupId>
+        <artifactId>index</artifactId>
+        <version>0.0.0</version>
+</project>
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/repository/org/eclipse/recommenders/index/0.0.0/index-0.0.0.pom.etag b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/repository/org/eclipse/recommenders/index/0.0.0/index-0.0.0.pom.etag
new file mode 100644 (file)
index 0000000..47be00e
--- /dev/null
@@ -0,0 +1 @@
+9f9e88b-190-4c4255c680e80
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/repository/org/eclipse/recommenders/index/0.0.0/index-0.0.0.zip b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/repository/org/eclipse/recommenders/index/0.0.0/index-0.0.0.zip
new file mode 100644 (file)
index 0000000..d8d492c
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/repository/org/eclipse/recommenders/index/0.0.0/index-0.0.0.zip differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/repository/org/eclipse/recommenders/index/0.0.0/index-0.0.0.zip.etag b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/repository/org/eclipse/recommenders/index/0.0.0/index-0.0.0.zip.etag
new file mode 100644 (file)
index 0000000..9df1bd7
--- /dev/null
@@ -0,0 +1 @@
+9f9e5b4-23281-4c20fda2505c0
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/v0.5-package-root-infos.json b/source/workspace/.metadata.bak/.plugins/org.eclipse.recommenders.rcp/v0.5-package-root-infos.json
new file mode 100644 (file)
index 0000000..ccebc4b
--- /dev/null
@@ -0,0 +1,93 @@
+[
+  {
+    "symbolicName": "org.slf4j.android",
+    "version": {
+      "major": 1,
+      "minor": 5,
+      "micro": 8,
+      "qualifier": ""
+    },
+    "jarFileFingerprint": "404eece4bb07ea211f5a879c22458775c612f0df",
+    "jarFileModificationDate": "2012-08-27T21:40:41+09:00",
+    "location": "/home/yuji/prog/workspaces/FolderEver/source/workspace/EverFolder/libs/slf4j-android-1.5.8.jar",
+    "javaRuntime": false
+  },
+  {
+    "symbolicName": "evernote-client-android",
+    "version": {
+      "major": -1,
+      "minor": -1,
+      "micro": -1,
+      "qualifier": ""
+    },
+    "jarFileFingerprint": "103c738977e0140c2dc425c55ee28d4e0f6eee5f",
+    "jarFileModificationDate": "2012-08-27T21:40:41+09:00",
+    "location": "/home/yuji/prog/workspaces/FolderEver/source/workspace/EverFolder/libs/evernote-client-android.jar",
+    "javaRuntime": false
+  },
+  {
+    "symbolicName": "evernote-api-1.21",
+    "version": {
+      "major": -1,
+      "minor": -1,
+      "micro": -1,
+      "qualifier": ""
+    },
+    "jarFileFingerprint": "43fa5ed95f4f5c85e8d1a0a6dfe23429c02f928d",
+    "jarFileModificationDate": "2012-08-27T21:40:41+09:00",
+    "location": "/home/yuji/prog/workspaces/FolderEver/source/workspace/EverFolder/libs/evernote-api-1.21.jar",
+    "javaRuntime": false
+  },
+  {
+    "symbolicName": "annotations",
+    "version": {
+      "major": -1,
+      "minor": -1,
+      "micro": -1,
+      "qualifier": ""
+    },
+    "jarFileFingerprint": "f68f82be8f2051d277ee74fb859d63de8e33053c",
+    "jarFileModificationDate": "2012-08-09T04:39:06+09:00",
+    "location": "/home/yuji/prog/android-sdk-linux/tools/support/annotations.jar",
+    "javaRuntime": false
+  },
+  {
+    "symbolicName": "org.scribe.scribe",
+    "version": {
+      "major": 1,
+      "minor": 3,
+      "micro": 0,
+      "qualifier": ""
+    },
+    "jarFileFingerprint": "fdf6fff0708e5fb451166dc449b519c829cb3d77",
+    "jarFileModificationDate": "2012-08-27T21:40:41+09:00",
+    "location": "/home/yuji/prog/workspaces/FolderEver/source/workspace/EverFolder/libs/scribe-1.3.0.jar",
+    "javaRuntime": false
+  },
+  {
+    "symbolicName": "libthrift",
+    "version": {
+      "major": -1,
+      "minor": -1,
+      "micro": -1,
+      "qualifier": ""
+    },
+    "jarFileFingerprint": "b5469fccd09194f2aa1fe378f0f8a53080f88cf4",
+    "jarFileModificationDate": "2012-08-27T21:40:41+09:00",
+    "location": "/home/yuji/prog/workspaces/FolderEver/source/workspace/EverFolder/libs/libthrift.jar",
+    "javaRuntime": false
+  },
+  {
+    "symbolicName": "android",
+    "version": {
+      "major": -1,
+      "minor": -1,
+      "micro": -1,
+      "qualifier": ""
+    },
+    "jarFileFingerprint": "19cd75888d1d75d3ae3cb7a8692153da5d65eb13",
+    "jarFileModificationDate": "2012-08-28T00:38:57+09:00",
+    "location": "/home/yuji/prog/android-sdk-linux/platforms/android-7/android.jar",
+    "javaRuntime": false
+  }
+]
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.search/dialog_settings.xml b/source/workspace/.metadata.bak/.plugins/org.eclipse.search/dialog_settings.xml
new file mode 100644 (file)
index 0000000..da5669a
--- /dev/null
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+       <section name="">
+               <item value="TRUE" key="org.eclipse.jdt.search.resultpage.limit_enabled"/>
+               <item value="1000" key="org.eclipse.jdt.search.resultpage.limit"/>
+       </section>
+       <section name="org.eclipse.jdt.ui.JavaSearchResultPage">
+               <item value="TRUE" key="org.eclipse.jdt.search.resultpage.limit_enabled"/>
+               <item value="1000" key="org.eclipse.jdt.search.resultpage.limit"/>
+       </section>
+       <section name="">
+               <item value="TRUE" key="org.eclipse.jdt.search.resultpage.limit_enabled"/>
+               <item value="1000" key="org.eclipse.jdt.search.resultpage.limit"/>
+       </section>
+       <section name="DialogBounds_SearchDialog">
+               <item value="602" key="DIALOG_WIDTH"/>
+               <item value="84" key="DIALOG_Y_ORIGIN"/>
+               <item value="397" key="DIALOG_X_ORIGIN"/>
+               <item value="498" key="DIALOG_HEIGHT"/>
+               <item value="1|Sans|10.0|0|GTK|1|" key="DIALOG_FONT_NAME"/>
+       </section>
+       <section name="Search">
+               <list key="Search.processedPageIds">
+                       <item value="org.eclipse.search.internal.ui.text.TextSearchPage"/>
+                       <item value="org.eclipse.mylyn.tasks.ui.search.page"/>
+                       <item value="org.eclipse.egit.ui.commitSearchPage"/>
+                       <item value="org.eclipse.jdt.ui.JavaSearchPage"/>
+               </list>
+               <list key="Search.enabledPageIds">
+                       <item value="org.eclipse.search.internal.ui.text.TextSearchPage"/>
+                       <item value="org.eclipse.mylyn.tasks.ui.search.page"/>
+                       <item value="org.eclipse.egit.ui.commitSearchPage"/>
+                       <item value="org.eclipse.jdt.ui.JavaSearchPage"/>
+               </list>
+       </section>
+       <section name="org.eclipse.search.text.FileSearchResultPage">
+               <item value="1000" key="org.eclipse.search.resultpage.limit"/>
+       </section>
+       <section name="TextSearchPage">
+               <item value="false" key="CASE_SENSITIVE"/>
+               <item value="false" key="REG_EX_SEARCH"/>
+               <item value="false" key="SEARCH_DERIVED"/>
+               <item value="1" key="HISTORY_SIZE"/>
+               <section name="EXTENSIONS">
+                       <item value="*.java" key="0"/>
+               </section>
+               <section name="HISTORY0">
+                       <item value="false" key="isRegExSearch"/>
+                       <item value="Constant.ACTION_UPDATE" key="textPattern"/>
+                       <item value="0" key="scope"/>
+                       <item value="true" key="ignoreCase"/>
+                       <list key="fileNamePatterns">
+                               <item value="*.java"/>
+                       </list>
+                       <list key="workingSets">
+                       </list>
+               </section>
+       </section>
+       <section name="SearchDialog.ScopePart">
+               <item value="0" key="scope"/>
+       </section>
+</section>
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.ui.ide/dialog_settings.xml b/source/workspace/.metadata.bak/.plugins/org.eclipse.ui.ide/dialog_settings.xml
new file mode 100644 (file)
index 0000000..fb33bc5
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+       <section name="CleanDialogSettings">
+               <item value="571" key="DIALOG_WIDTH"/>
+               <item value="180" key="DIALOG_Y_ORIGIN"/>
+               <item value="394" key="DIALOG_HEIGHT"/>
+               <item value="452" key="DIALOG_X_ORIGIN"/>
+               <item value="false" key="TOGGLE_SELECTED"/>
+       </section>
+</section>
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml b/source/workspace/.metadata.bak/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml
new file mode 100644 (file)
index 0000000..e2a3c49
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+       <section name="org.eclipse.ui.texteditor.FindReplaceDialog_dialogBounds">
+               <item value="357" key="DIALOG_WIDTH"/>
+               <item value="54" key="DIALOG_Y_ORIGIN"/>
+               <item value="495" key="DIALOG_HEIGHT"/>
+               <item value="659" key="DIALOG_X_ORIGIN"/>
+               <item value="1|Sans|10.0|0|GTK|1|" key="DIALOG_FONT_NAME"/>
+       </section>
+       <section name="org.eclipse.ui.texteditor.FindReplaceDialog">
+               <item value="true" key="wrap"/>
+               <item value="false" key="isRegEx"/>
+               <item value="false" key="casesensitive"/>
+               <item value="false" key="incremental"/>
+               <item value="false" key="wholeword"/>
+               <item value="onResume" key="selection"/>
+               <list key="findhistory">
+                       <item value="onresume"/>
+                       <item value="MESSAGE"/>
+                       <item value="foo"/>
+                       <item value="command"/>
+                       <item value="update"/>
+                       <item value="todo"/>
+                       <item value="29171"/>
+                       <item value="rightbu"/>
+               </list>
+               <list key="replacehistory">
+               </list>
+       </section>
+</section>
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.ui.workbench/dialog_settings.xml b/source/workspace/.metadata.bak/.plugins/org.eclipse.ui.workbench/dialog_settings.xml
new file mode 100644 (file)
index 0000000..3749847
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+       <section name="org.eclipse.ui.internal.QuickAccess">
+               <item value="894" key="dialogWidth"/>
+               <item value="556" key="dialogHeight"/>
+               <list key="orderedProviders">
+               </list>
+               <list key="textArray">
+               </list>
+               <list key="orderedElements">
+               </list>
+               <list key="textEntries">
+               </list>
+       </section>
+       <section name="WorkbenchPreferenceDialogSettings">
+               <item value="0" key="DIALOG_Y_ORIGIN"/>
+               <item value="374" key="DIALOG_X_ORIGIN"/>
+       </section>
+       <section name="ShowViewDialog">
+               <item value="365" key="DIALOG_WIDTH"/>
+               <item value="com.android.ide.eclipse.ddms.views.DeviceView" key="ShowViewDialog.STORE_SELECTED_VIEW_ID"/>
+               <item value="80" key="DIALOG_Y_ORIGIN"/>
+               <item value="460" key="DIALOG_X_ORIGIN"/>
+               <item value="456" key="DIALOG_HEIGHT"/>
+               <item value="1|Sans|10.0|0|GTK|1|" key="DIALOG_FONT_NAME"/>
+               <list key="ShowViewDialog.STORE_EXPANDED_CATEGORIES_ID">
+                       <item value="com.android.ide.eclipse.ddms.views.category"/>
+               </list>
+       </section>
+</section>
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.ui.workbench/workingsets.xml b/source/workspace/.metadata.bak/.plugins/org.eclipse.ui.workbench/workingsets.xml
new file mode 100644 (file)
index 0000000..8d4356c
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workingSetManager>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1346158637360_0" label="Window Working Set" name="Aggregate for window 1346158637360"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1346160193080_1" label="Window Working Set" name="Aggregate for window 1346160193080"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1346160407820_2" label="Window Working Set" name="Aggregate for window 1346160407820"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1346160737847_3" label="Window Working Set" name="Aggregate for window 1346160737847"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1346160892017_4" label="Window Working Set" name="Aggregate for window 1346160892017"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1346161338232_5" label="Window Working Set" name="Aggregate for window 1346161338231"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1346184523705_6" label="Window Working Set" name="Aggregate for window 1346184523705"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1346254143073_7" label="Window Working Set" name="Aggregate for window 1346254143073"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1346328142553_8" label="Window Working Set" name="Aggregate for window 1346328142553"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1346462832461_9" label="Window Working Set" name="Aggregate for window 1346462832461"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1346579776435_10" label="Window Working Set" name="Aggregate for window 1346579776434"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1346677482391_11" label="Window Working Set" name="Aggregate for window 1346677482391"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1346762617658_12" label="Window Working Set" name="Aggregate for window 1346762617657"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1346861159828_13" label="Window Working Set" name="Aggregate for window 1346861159828"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1346861842811_14" label="Window Working Set" name="Aggregate for window 1346861842811"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1346862040985_15" label="Window Working Set" name="Aggregate for window 1346862040985"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1346862784554_16" label="Window Working Set" name="Aggregate for window 1346862784554"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1346933851096_17" label="Window Working Set" name="Aggregate for window 1346933851096"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1347082608336_18" label="Window Working Set" name="Aggregate for window 1347082608335"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1347151885262_19" label="Window Working Set" name="Aggregate for window 1347151885262"/>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1347241066453_20" label="Window Working Set" name="Aggregate for window 1347241066453"/>
+</workingSetManager>
\ No newline at end of file
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkit_gwt.png b/source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkit_gwt.png
new file mode 100644 (file)
index 0000000..8f33b6b
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkit_gwt.png differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkit_swing.png b/source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkit_swing.png
new file mode 100644 (file)
index 0000000..3272ee2
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkit_swing.png differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkit_swt.png b/source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkit_swt.png
new file mode 100644 (file)
index 0000000..897496a
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkit_swt.png differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkit_xwt.png b/source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkit_xwt.png
new file mode 100644 (file)
index 0000000..dc1a68c
Binary files /dev/null and b/source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkit_xwt.png differ
diff --git a/source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkits.xml b/source/workspace/.metadata.bak/.plugins/org.eclipse.wb.discovery.core/toolkits.xml
new file mode 100644 (file)
index 0000000..e20ac5f
--- /dev/null
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<toolkits>
+       
+       <!-- SWT -->
+       <toolkit
+        name="SWT"
+               id="org.eclipse.swt"
+               icon="toolkit_swt.png"
+               providerName="Eclipse.org"
+               licenseDescription="EPL"
+               moreInfoURL="http://www.eclipse.org/swt/">
+               
+               <description>This WindowBuilder toolkit allows you to build user interfaces with the Standard Widget Toolkit (SWT) from Eclipse.</description>
+               
+               <updateSite 
+                       version="[3.6,3.7)"
+                       url="http://download.eclipse.org/windowbuilder/WB/integration/3.6"
+                       auxurl="http://download.eclipse.org/releases/helios">
+            <feature id="org.eclipse.wb.rcp.feature"/>
+               </updateSite>
+               
+        <updateSite 
+            version="[3.7,3.8)"
+            url="http://download.eclipse.org/windowbuilder/WB/integration/3.7"
+            auxurl="http://download.eclipse.org/releases/indigo">
+            <feature id="org.eclipse.wb.rcp.feature"/>
+        </updateSite>
+               
+        <updateSite 
+            version="[3.8,4.0)"
+            url="http://download.eclipse.org/windowbuilder/WB/integration/3.8"
+            auxurl="http://download.eclipse.org/releases/juno">
+            <feature id="org.eclipse.wb.rcp.feature"/>
+        </updateSite>
+               
+        <updateSite 
+            version="[4.0,5.0)"
+            url="http://download.eclipse.org/windowbuilder/WB/integration/4.2"
+            auxurl="http://download.eclipse.org/releases/juno">
+            <feature id="org.eclipse.wb.rcp.feature"/>
+        </updateSite>
+       </toolkit>
+       
+       <!-- Swing -->
+       <toolkit
+        name="Swing"
+               id="org.eclipse.swing"
+               icon="toolkit_swing.png"
+               providerName="Eclipse.org"
+               licenseDescription="EPL">
+               
+               <description>This WindowBuilder toolkit allows you to build user interfaces with Java's Swing GUI framework.</description>
+
+        <updateSite 
+            version="[3.6,3.7)"
+            url="http://download.eclipse.org/windowbuilder/WB/integration/3.6">
+            <feature id="org.eclipse.wb.swing.feature"/>
+        </updateSite>
+        
+        <updateSite 
+            version="[3.7,3.8)"
+            url="http://download.eclipse.org/windowbuilder/WB/integration/3.7">
+            <feature id="org.eclipse.wb.swing.feature"/>
+        </updateSite>
+        
+        <updateSite 
+            version="[3.8,4.0)"
+            url="http://download.eclipse.org/windowbuilder/WB/integration/3.8">
+            <feature id="org.eclipse.wb.swing.feature"/>
+        </updateSite>
+        
+        <updateSite 
+            version="[4.0,5.0)"
+            url="http://download.eclipse.org/windowbuilder/WB/integration/4.2">
+            <feature id="org.eclipse.wb.swing.feature"/>
+        </updateSite>
+       </toolkit>
+    
+    <!-- XWT -->
+    <toolkit
+        name="XWT"
+        id="org.eclipse.xwt"
+        icon="toolkit_xwt.png"
+        providerName="Eclipse.org"
+        licenseDescription="EPL"
+        moreInfoURL="http://wiki.eclipse.org/E4/XWT">
+        
+        <description>This WindowBuilder toolkit allows you to build user interfaces with the XML Windowing Toolkit (XWT) UI framework.</description>
+
+        <updateSite 
+            version="[3.6,3.7)"
+            url="http://download.eclipse.org/windowbuilder/WB/integration/3.6"
+            auxurl="http://download.eclipse.org/releases/helios">
+            <feature id="org.eclipse.wb.xwt.feature"/>
+        </updateSite>
+        
+        <updateSite 
+            version="[3.7,3.8)"
+            url="http://download.eclipse.org/windowbuilder/WB/integration/3.7"
+            auxurl="http://download.eclipse.org/releases/indigo">
+            <feature id="org.eclipse.wb.xwt.feature"/>
+        </updateSite>
+        
+        <updateSite 
+            version="[3.8,4.0)"
+            url="http://download.eclipse.org/windowbuilder/WB/integration/3.8"
+            auxurl="http://download.eclipse.org/releases/juno">
+            <feature id="org.eclipse.wb.xwt.feature"/>
+        </updateSite>
+        
+        <updateSite 
+            version="[4.0,5.0)"
+            url="http://download.eclipse.org/windowbuilder/WB/integration/4.2"
+            auxurl="http://download.eclipse.org/releases/juno">
+            <feature id="org.eclipse.wb.xwt.feature"/>
+        </updateSite>
+    </toolkit>
+    
+       <!-- GWT -->
+       <toolkit
+        name="GWT"
+        title="GWT / Google Plugin for Eclipse"
+               id="com.google.gwt"
+               icon="toolkit_gwt.png"
+               providerName="Google, Inc."
+               moreInfoURL="http://code.google.com/eclipse/index.html">
+               
+               <description>The Google Plugin for Eclipse provides support for building projects with the Google Web Toolkit and Google APIs, as well as integration with Google Project Hosting and App Engine.</description>
+    
+               <updateSite version="[3.6,3.7)" url="http://dl.google.com/eclipse/plugin/3.6"
+                   auxurl="http://download.eclipse.org/releases/helios">
+            <feature id="com.google.gdt.eclipse.suite.e36.feature"/>
+            <feature id="com.google.gwt.eclipse.sdkbundle.e36.feature" optional="true"/>
+            <feature id="com.google.appengine.eclipse.sdkbundle.e36.feature" optional="true"/>
+            <feature id="org.eclipse.wb.core.feature" optional="true"/>
+            <feature id="org.eclipse.wb.core.xml.feature" optional="true"/>
+            <feature id="org.eclipse.wb.css.feature" optional="true"/>
+            <feature id="com.google.gdt.eclipse.designer.hosted.feature" optional="true"/>
+            <feature id="com.google.gdt.eclipse.designer.editor.feature" optional="true"/>
+            <feature id="com.google.gdt.eclipse.designer.gpe.feature" optional="true"/>
+               </updateSite>
+               
+               <updateSite version="[3.7,5.0)" url="http://dl.google.com/eclipse/plugin/3.7"
+                   auxurl="http://download.eclipse.org/releases/indigo">
+            <feature id="com.google.gdt.eclipse.suite.e37.feature"/>
+            <feature id="com.google.gwt.eclipse.sdkbundle.e37.feature" optional="true"/>
+            <feature id="com.google.appengine.eclipse.sdkbundle.e37.feature" optional="true"/>
+            <feature id="org.eclipse.wb.core.feature" optional="true"/>
+            <feature id="org.eclipse.wb.core.xml.feature" optional="true"/>
+            <feature id="org.eclipse.wb.css.feature" optional="true"/>
+            <feature id="com.google.gdt.eclipse.designer.hosted.feature" optional="true"/>
+            <feature id="com.google.gdt.eclipse.designer.editor.feature" optional="true"/>
+            <feature id="com.google.gdt.eclipse.designer.gpe.feature" optional="true"/>
+               </updateSite>
+       </toolkit>
+
+</toolkits>
diff --git a/source/workspace/.metadata.bak/version.ini b/source/workspace/.metadata.bak/version.ini
new file mode 100644 (file)
index 0000000..c51ff74
--- /dev/null
@@ -0,0 +1 @@
+org.eclipse.core.runtime=1
\ No newline at end of file
index fb6bb29..a11a9b8 100644 (file)
@@ -40,6 +40,7 @@ import com.yuji.ef.dao.NodeDao;
 import com.yuji.ef.dao.NodeDaoImpl;
 import com.yuji.ef.dao.RootNode;
 import com.yuji.ef.exception.EfException;
+import com.yuji.ef.pref.EditPrefUtil;
 import com.yuji.ef.utility.BaseActivity;
 import com.yuji.ef.utility.BitmapCacheFactory;
 import com.yuji.ef.utility.EvernoteIntentUtil;
@@ -52,6 +53,7 @@ public class EverFolderActivity extends BaseActivity implements LockListener {
        private enum ScreenStatus {
                Normal, AddNode, DeleteNode, RenameNode
        };
+       private EditPrefUtil pref = new EditPrefUtil(this);
 
        private LinearLayout msgLayout;
        private LinearLayout msgButtonLayout;
@@ -561,6 +563,9 @@ public class EverFolderActivity extends BaseActivity implements LockListener {
        public void sendLockResult(boolean b) {
                NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
 
+               pref.put(Constant.PREF_UPDATE_DATA, Constant.OFF);
+               pref.update();
+
                if (isResult) {
                        if (dao.isEmpty()) {
                                finish();
@@ -639,6 +644,7 @@ public class EverFolderActivity extends BaseActivity implements LockListener {
                        updateList();
                }
                
+               // TODO
                // NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
                // if (dao.isEmpty()) {
                // if (isInit) {
@@ -917,8 +923,15 @@ public class EverFolderActivity extends BaseActivity implements LockListener {
                        }
 
                        if (!lock) {
-                               msgLayout.setVisibility(View.VISIBLE);
-                               confirmMsg.setText(getString(R.string.mainUpdateMsg));
+                               int update = pref.getInt(Constant.PREF_UPDATE_DATA);
+
+                               if (update == Constant.ON){
+                                       msgLayout.setVisibility(View.VISIBLE);
+                                       confirmMsg.setText(getString(R.string.mainUpdateMsg));
+                               }
+                               else {
+                                       msgLayout.setVisibility(View.GONE);                                     
+                               }
                                msgEditText.setVisibility(View.GONE);
                                msgButtonLayout.setVisibility(View.GONE);
 
index 38d17ff..1c8d757 100644 (file)
@@ -22,6 +22,7 @@ public class Initialize {
                        
                        EditPrefUtil pref = new EditPrefUtil(context);
                        pref.getInt(Constant.PREF_UPDATE_TIME, 0);
+                       pref.put(Constant.PREF_UPDATE_DATA, Constant.OFF);
                        pref.update();
                        
                        EvernoteUtil util = EvernoteUtil.getInstance();
index f593d09..f37ff08 100644 (file)
@@ -254,6 +254,9 @@ public class SettingActivity extends BaseActivity {
                        return;
                }
 
+               pref.put(Constant.PREF_UPDATE_DATA, Constant.ON);
+               pref.update();
+               
                NoteUpdateTask task = new NoteUpdateTask(this, true, true, isAll);
 
                AsyncTaskCommand command = new AsyncTaskCommand(this, task);
index fb96920..cd09c42 100644 (file)
@@ -45,8 +45,8 @@ public class Constant {
        public static final String ACTION_MESSAGE = "com.yuji.ef.MESSAGE";
        public static final String ACTION_MESSAGE_MESSAGE = "MESSAGE";
        
-       //public static final String PREF_UPDATE_TASK_STATUS = "UPDATE_TASK_STATUS";
        public static final String PREF_UPDATE_TIME = "UPDATE_TIME";
+       public static final String PREF_UPDATE_DATA = "UPDATE_DATA";
 
        public static final String LOCK_UPDATE_NOTE = "UPDATE_NOTE";
 
index f808bbe..e86e3cc 100644 (file)
@@ -93,6 +93,9 @@ public class NoteUpdatorService extends Service {
                private void execute() throws EfException {
                        Initialize.initialize(NoteUpdatorService.this);
 
+                       pref.put(Constant.PREF_UPDATE_DATA, Constant.ON);
+                       pref.update();
+                       
                        NoteUpdateTask task = new NoteUpdateTask(null, true, true, true);
                        task.doExecute();
                }
index 367b3eb..6f114db 100644 (file)
@@ -39,18 +39,22 @@ public class NoteUpdateTask implements AsyncTaskIF {
                        FolderUtil util = FolderUtil.getInstance();
                        util.update(isRoot, isBook, isNote);
                } catch (RollbackException e) {
-                       EfError error = e.getError();
                        // TODO
                        EfException.msg("データの更新に失敗しました(a)");
-//                     Intent intent = new Intent(Constant.ACTION_UPDATE);
-//                     intent.putExtra("MESSAGE", "メッセージ");
-//                     Initialize.getContext().sendBroadcast(intent);
-                       //EfException.msg(Initialize.getContext(), "データの更新に失敗しました(a)");
                        Debug.d(this, null, e);
+                       
+                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                       lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+                       
                        throw e;
                } catch (Exception e) {
                        // TODO
                        EfException.msg(Initialize.getContext(), "データの更新に失敗しました(b)");
+                       Debug.d(this, null, e);
+
+                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                       lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+                       
                        throw new EfException(EfError.SYSTEM);
                }
        }