From c82794f4cde7f812d86c907cabf19d489b44c6d6 Mon Sep 17 00:00:00 2001 From: Thad Hughes Date: Sun, 7 Apr 2013 10:58:14 -0700 Subject: [PATCH] Added gss-lib-2.2. --- .classpath | 4 +- default.properties | 2 +- jars/gss-lib-2.2/gss_lib_2.2.jar | Bin 0 -> 69019 bytes .../gss-lib-2.2/javadoc/allclasses-frame.html | 64 ++ .../javadoc/allclasses-noframe.html | 64 ++ .../javadoc/com/pras/Collaborator.html | 568 +++++++++ jars/gss-lib-2.2/javadoc/com/pras/Log.html | 308 +++++ .../javadoc/com/pras/SpreadSheet.html | 714 ++++++++++++ .../javadoc/com/pras/SpreadSheetFactory.html | 573 ++++++++++ .../javadoc/com/pras/WorkSheet.html | 883 ++++++++++++++ .../javadoc/com/pras/WorkSheetCell.html | 451 ++++++++ .../javadoc/com/pras/WorkSheetRow.html | 456 ++++++++ .../javadoc/com/pras/auth/Account.html | 352 ++++++ .../javadoc/com/pras/auth/Authenticator.html | 210 ++++ .../com/pras/auth/BasicAuthenticatorImpl.html | 271 +++++ .../com/pras/auth/class-use/Account.html | 174 +++ .../pras/auth/class-use/Authenticator.html | 206 ++++ .../class-use/BasicAuthenticatorImpl.html | 140 +++ .../javadoc/com/pras/auth/package-frame.html | 45 + .../com/pras/auth/package-summary.html | 173 +++ .../javadoc/com/pras/auth/package-tree.html | 155 +++ .../javadoc/com/pras/auth/package-use.html | 191 ++++ .../com/pras/class-use/Collaborator.html | 242 ++++ .../javadoc/com/pras/class-use/Log.html | 140 +++ .../com/pras/class-use/SpreadSheet.html | 228 ++++ .../pras/class-use/SpreadSheetFactory.html | 196 ++++ .../javadoc/com/pras/class-use/WorkSheet.html | 237 ++++ .../com/pras/class-use/WorkSheetCell.html | 277 +++++ .../com/pras/class-use/WorkSheetRow.html | 240 ++++ .../javadoc/com/pras/conn/HttpConHandler.html | 448 ++++++++ .../javadoc/com/pras/conn/Response.html | 485 ++++++++ .../pras/conn/class-use/HttpConHandler.html | 140 +++ .../com/pras/conn/class-use/Response.html | 179 +++ .../javadoc/com/pras/conn/package-frame.html | 34 + .../com/pras/conn/package-summary.html | 158 +++ .../javadoc/com/pras/conn/package-tree.html | 149 +++ .../javadoc/com/pras/conn/package-use.html | 166 +++ .../javadoc/com/pras/package-frame.html | 44 + .../javadoc/com/pras/package-summary.html | 181 +++ .../javadoc/com/pras/package-tree.html | 149 +++ .../javadoc/com/pras/package-use.html | 218 ++++ .../javadoc/com/pras/sp/Entry.html | 1017 +++++++++++++++++ .../gss-lib-2.2/javadoc/com/pras/sp/Feed.html | 409 +++++++ .../javadoc/com/pras/sp/Field.html | 352 ++++++ .../javadoc/com/pras/sp/ParseFeed.html | 428 +++++++ .../javadoc/com/pras/sp/class-use/Entry.html | 267 +++++ .../javadoc/com/pras/sp/class-use/Feed.html | 176 +++ .../javadoc/com/pras/sp/class-use/Field.html | 208 ++++ .../com/pras/sp/class-use/ParseFeed.html | 140 +++ .../javadoc/com/pras/sp/package-frame.html | 38 + .../javadoc/com/pras/sp/package-summary.html | 166 +++ .../javadoc/com/pras/sp/package-tree.html | 152 +++ .../javadoc/com/pras/sp/package-use.html | 197 ++++ .../javadoc/com/pras/table/Record.html | 411 +++++++ .../javadoc/com/pras/table/Table.html | 580 ++++++++++ .../com/pras/table/class-use/Record.html | 290 +++++ .../com/pras/table/class-use/Table.html | 140 +++ .../javadoc/com/pras/table/package-frame.html | 34 + .../com/pras/table/package-summary.html | 158 +++ .../javadoc/com/pras/table/package-tree.html | 149 +++ .../javadoc/com/pras/table/package-use.html | 185 +++ jars/gss-lib-2.2/javadoc/constant-values.html | 212 ++++ jars/gss-lib-2.2/javadoc/deprecated-list.html | 142 +++ jars/gss-lib-2.2/javadoc/help-doc.html | 219 ++++ .../javadoc/index-files/index-1.html | 191 ++++ .../javadoc/index-files/index-10.html | 142 +++ .../javadoc/index-files/index-11.html | 150 +++ .../javadoc/index-files/index-12.html | 156 +++ .../javadoc/index-files/index-13.html | 361 ++++++ .../javadoc/index-files/index-14.html | 147 +++ .../javadoc/index-files/index-15.html | 145 +++ .../javadoc/index-files/index-16.html | 148 +++ .../javadoc/index-files/index-2.html | 142 +++ .../javadoc/index-files/index-3.html | 168 +++ .../javadoc/index-files/index-4.html | 162 +++ .../javadoc/index-files/index-5.html | 159 +++ .../javadoc/index-files/index-6.html | 147 +++ .../javadoc/index-files/index-7.html | 414 +++++++ .../javadoc/index-files/index-8.html | 159 +++ .../javadoc/index-files/index-9.html | 141 +++ jars/gss-lib-2.2/javadoc/index.html | 39 + jars/gss-lib-2.2/javadoc/overview-frame.html | 50 + .../gss-lib-2.2/javadoc/overview-summary.html | 169 +++ jars/gss-lib-2.2/javadoc/overview-tree.html | 157 +++ jars/gss-lib-2.2/javadoc/package-list | 5 + .../gss-lib-2.2/javadoc/resources/inherit.gif | Bin 0 -> 57 bytes jars/gss-lib-2.2/javadoc/stylesheet.css | 29 + .../gss/sample/auth/AndroidAuthenticator.java | 59 + .../com/gss/sample/auth/StartActivity.java | 29 + .../sample/ConditionalDataRetrieve.java | 81 ++ .../src/com/prasanta/sample/ListFeed.java | 130 +++ .../src/com/prasanta/sample/ShareSample.java | 52 + .../com/prasanta/sample/WorkSheetSample.java | 113 ++ .../src/com/pras/Collaborator.java | 120 ++ jars/gss-lib-2.2/src/com/pras/Log.java | 71 ++ .../gss-lib-2.2/src/com/pras/SpreadSheet.java | 635 ++++++++++ .../src/com/pras/SpreadSheetFactory.java | 529 +++++++++ jars/gss-lib-2.2/src/com/pras/WorkSheet.java | 746 ++++++++++++ .../src/com/pras/WorkSheetCell.java | 82 ++ .../src/com/pras/WorkSheetRow.java | 84 ++ .../src/com/pras/auth/Account.java | 48 + .../src/com/pras/auth/Authenticator.java | 29 + .../com/pras/auth/BasicAuthenticatorImpl.java | 75 ++ .../src/com/pras/conn/HttpConHandler.java | 205 ++++ .../src/com/pras/conn/Response.java | 99 ++ jars/gss-lib-2.2/src/com/pras/sp/Entry.java | 197 ++++ jars/gss-lib-2.2/src/com/pras/sp/Feed.java | 66 ++ jars/gss-lib-2.2/src/com/pras/sp/Field.java | 52 + .../src/com/pras/sp/ParseFeed.java | 288 +++++ .../src/com/pras/table/Record.java | 105 ++ .../gss-lib-2.2/src/com/pras/table/Table.java | 120 ++ project.properties | 2 +- 112 files changed, 23380 insertions(+), 3 deletions(-) create mode 100644 jars/gss-lib-2.2/gss_lib_2.2.jar create mode 100644 jars/gss-lib-2.2/javadoc/allclasses-frame.html create mode 100644 jars/gss-lib-2.2/javadoc/allclasses-noframe.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/Collaborator.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/Log.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/SpreadSheet.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/SpreadSheetFactory.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/WorkSheet.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/WorkSheetCell.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/WorkSheetRow.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/auth/Account.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/auth/Authenticator.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/auth/BasicAuthenticatorImpl.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/auth/class-use/Account.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/auth/class-use/Authenticator.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/auth/class-use/BasicAuthenticatorImpl.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/auth/package-frame.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/auth/package-summary.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/auth/package-tree.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/auth/package-use.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/class-use/Collaborator.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/class-use/Log.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/class-use/SpreadSheet.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/class-use/SpreadSheetFactory.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/class-use/WorkSheet.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/class-use/WorkSheetCell.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/class-use/WorkSheetRow.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/conn/HttpConHandler.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/conn/Response.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/conn/class-use/HttpConHandler.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/conn/class-use/Response.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/conn/package-frame.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/conn/package-summary.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/conn/package-tree.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/conn/package-use.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/package-frame.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/package-summary.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/package-tree.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/package-use.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/sp/Entry.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/sp/Feed.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/sp/Field.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/sp/ParseFeed.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/sp/class-use/Entry.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/sp/class-use/Feed.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/sp/class-use/Field.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/sp/class-use/ParseFeed.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/sp/package-frame.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/sp/package-summary.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/sp/package-tree.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/sp/package-use.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/table/Record.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/table/Table.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/table/class-use/Record.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/table/class-use/Table.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/table/package-frame.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/table/package-summary.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/table/package-tree.html create mode 100644 jars/gss-lib-2.2/javadoc/com/pras/table/package-use.html create mode 100644 jars/gss-lib-2.2/javadoc/constant-values.html create mode 100644 jars/gss-lib-2.2/javadoc/deprecated-list.html create mode 100644 jars/gss-lib-2.2/javadoc/help-doc.html create mode 100644 jars/gss-lib-2.2/javadoc/index-files/index-1.html create mode 100644 jars/gss-lib-2.2/javadoc/index-files/index-10.html create mode 100644 jars/gss-lib-2.2/javadoc/index-files/index-11.html create mode 100644 jars/gss-lib-2.2/javadoc/index-files/index-12.html create mode 100644 jars/gss-lib-2.2/javadoc/index-files/index-13.html create mode 100644 jars/gss-lib-2.2/javadoc/index-files/index-14.html create mode 100644 jars/gss-lib-2.2/javadoc/index-files/index-15.html create mode 100644 jars/gss-lib-2.2/javadoc/index-files/index-16.html create mode 100644 jars/gss-lib-2.2/javadoc/index-files/index-2.html create mode 100644 jars/gss-lib-2.2/javadoc/index-files/index-3.html create mode 100644 jars/gss-lib-2.2/javadoc/index-files/index-4.html create mode 100644 jars/gss-lib-2.2/javadoc/index-files/index-5.html create mode 100644 jars/gss-lib-2.2/javadoc/index-files/index-6.html create mode 100644 jars/gss-lib-2.2/javadoc/index-files/index-7.html create mode 100644 jars/gss-lib-2.2/javadoc/index-files/index-8.html create mode 100644 jars/gss-lib-2.2/javadoc/index-files/index-9.html create mode 100644 jars/gss-lib-2.2/javadoc/index.html create mode 100644 jars/gss-lib-2.2/javadoc/overview-frame.html create mode 100644 jars/gss-lib-2.2/javadoc/overview-summary.html create mode 100644 jars/gss-lib-2.2/javadoc/overview-tree.html create mode 100644 jars/gss-lib-2.2/javadoc/package-list create mode 100644 jars/gss-lib-2.2/javadoc/resources/inherit.gif create mode 100644 jars/gss-lib-2.2/javadoc/stylesheet.css create mode 100644 jars/gss-lib-2.2/sample/SpreadSheet_Auth/src/com/gss/sample/auth/AndroidAuthenticator.java create mode 100644 jars/gss-lib-2.2/sample/SpreadSheet_Auth/src/com/gss/sample/auth/StartActivity.java create mode 100644 jars/gss-lib-2.2/sample/SpreadSheet_Usage/src/com/prasanta/sample/ConditionalDataRetrieve.java create mode 100644 jars/gss-lib-2.2/sample/SpreadSheet_Usage/src/com/prasanta/sample/ListFeed.java create mode 100644 jars/gss-lib-2.2/sample/SpreadSheet_Usage/src/com/prasanta/sample/ShareSample.java create mode 100644 jars/gss-lib-2.2/sample/SpreadSheet_Usage/src/com/prasanta/sample/WorkSheetSample.java create mode 100644 jars/gss-lib-2.2/src/com/pras/Collaborator.java create mode 100644 jars/gss-lib-2.2/src/com/pras/Log.java create mode 100644 jars/gss-lib-2.2/src/com/pras/SpreadSheet.java create mode 100644 jars/gss-lib-2.2/src/com/pras/SpreadSheetFactory.java create mode 100644 jars/gss-lib-2.2/src/com/pras/WorkSheet.java create mode 100644 jars/gss-lib-2.2/src/com/pras/WorkSheetCell.java create mode 100644 jars/gss-lib-2.2/src/com/pras/WorkSheetRow.java create mode 100644 jars/gss-lib-2.2/src/com/pras/auth/Account.java create mode 100644 jars/gss-lib-2.2/src/com/pras/auth/Authenticator.java create mode 100644 jars/gss-lib-2.2/src/com/pras/auth/BasicAuthenticatorImpl.java create mode 100644 jars/gss-lib-2.2/src/com/pras/conn/HttpConHandler.java create mode 100644 jars/gss-lib-2.2/src/com/pras/conn/Response.java create mode 100644 jars/gss-lib-2.2/src/com/pras/sp/Entry.java create mode 100644 jars/gss-lib-2.2/src/com/pras/sp/Feed.java create mode 100644 jars/gss-lib-2.2/src/com/pras/sp/Field.java create mode 100644 jars/gss-lib-2.2/src/com/pras/sp/ParseFeed.java create mode 100644 jars/gss-lib-2.2/src/com/pras/table/Record.java create mode 100644 jars/gss-lib-2.2/src/com/pras/table/Table.java diff --git a/.classpath b/.classpath index 84c0596..7ef3eba 100644 --- a/.classpath +++ b/.classpath @@ -1,9 +1,11 @@ - + + + diff --git a/default.properties b/default.properties index 83e83eb..6f491fb 100644 --- a/default.properties +++ b/default.properties @@ -10,5 +10,5 @@ # Indicates whether an apk should be generated for each density. split.density=false # Project target. -target=android-16 +target=android-17 android.library.reference.1=../Util diff --git a/jars/gss-lib-2.2/gss_lib_2.2.jar b/jars/gss-lib-2.2/gss_lib_2.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..af79a75d232d2f1e6b9b7818659151b98c1ec846 GIT binary patch literal 69019 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 + + + + + +All Classes + + + + + + + + + + +All Classes +
+ + + + + +
Account +
+Authenticator +
+BasicAuthenticatorImpl +
+Collaborator +
+Entry +
+Feed +
+Field +
+HttpConHandler +
+Log +
+ParseFeed +
+Record +
+Response +
+SpreadSheet +
+SpreadSheetFactory +
+Table +
+WorkSheet +
+WorkSheetCell +
+WorkSheetRow +
+
+ + + diff --git a/jars/gss-lib-2.2/javadoc/allclasses-noframe.html b/jars/gss-lib-2.2/javadoc/allclasses-noframe.html new file mode 100644 index 0000000..c73f569 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/allclasses-noframe.html @@ -0,0 +1,64 @@ + + + + + + +All Classes + + + + + + + + + + +All Classes +
+ + + + + +
Account +
+Authenticator +
+BasicAuthenticatorImpl +
+Collaborator +
+Entry +
+Feed +
+Field +
+HttpConHandler +
+Log +
+ParseFeed +
+Record +
+Response +
+SpreadSheet +
+SpreadSheetFactory +
+Table +
+WorkSheet +
+WorkSheetCell +
+WorkSheetRow +
+
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/Collaborator.html b/jars/gss-lib-2.2/javadoc/com/pras/Collaborator.html new file mode 100644 index 0000000..892a1bb --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/Collaborator.html @@ -0,0 +1,568 @@ + + + + + + +Collaborator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pras +
+Class Collaborator

+
+java.lang.Object
+  extended by com.pras.Collaborator
+
+
+
+
public class Collaborator
extends java.lang.Object
+ + +

+ACL details of a SpreadSheet +

+ +

+

+
Author:
+
Prasanta Paul
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static java.lang.StringROLE_OWNER + +
+          Owner of a SpreadSheet
+static java.lang.StringROLE_READER + +
+          Able to Read
+static java.lang.StringROLE_WRITER + +
+          Able to Read/Write and Further Share as Reader/Writer
+static java.lang.StringSCOPE_DEFAULT + +
+          Use this scope to make the SpreadSheet publicly accessible to anyuser
+static java.lang.StringSCOPE_DOMAIN + +
+          Use this scope to share it with a Domain
+static java.lang.StringSCOPE_GROUP + +
+          Use this scope to share it with a Group
+static java.lang.StringSCOPE_USER + +
+          Use this scope to share it with an Email account
+  + + + + + + + + + + +
+Constructor Summary
Collaborator() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ java.lang.StringgetEditLink() + +
+          Get Edit Link
+ java.lang.StringgetRole() + +
+          Get Role - {"owner", "writer", "reader"}
+ java.lang.StringgetScopeType() + +
+          Get Scope Type - {"user", "group", "domain", "default"}
+ java.lang.StringgetScopeValue() + +
+          Get Scope Value e.g.
+ voidsetEditLink(java.lang.String editLink) + +
+          Set Edit Link
+ voidsetRole(java.lang.String role) + +
+          Set Role - {"owner", "writer", "reader"}
+ voidsetScopeType(java.lang.String scopeType) + +
+          Set Scope Type {"user", "group", "domain", "default"}
+ voidsetScopeValue(java.lang.String scopeValue) + +
+          Set Scope Value
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+ROLE_OWNER

+
+public static java.lang.String ROLE_OWNER
+
+
Owner of a SpreadSheet +

+

+
+
+
+ +

+ROLE_WRITER

+
+public static java.lang.String ROLE_WRITER
+
+
Able to Read/Write and Further Share as Reader/Writer +

+

+
+
+
+ +

+ROLE_READER

+
+public static java.lang.String ROLE_READER
+
+
Able to Read +

+

+
+
+
+ +

+SCOPE_USER

+
+public static java.lang.String SCOPE_USER
+
+
Use this scope to share it with an Email account +

+

+
+
+
+ +

+SCOPE_GROUP

+
+public static java.lang.String SCOPE_GROUP
+
+
Use this scope to share it with a Group +

+

+
+
+
+ +

+SCOPE_DOMAIN

+
+public static java.lang.String SCOPE_DOMAIN
+
+
Use this scope to share it with a Domain +

+

+
+
+
+ +

+SCOPE_DEFAULT

+
+public static java.lang.String SCOPE_DEFAULT
+
+
Use this scope to make the SpreadSheet publicly accessible to anyuser +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+Collaborator

+
+public Collaborator()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getRole

+
+public java.lang.String getRole()
+
+
Get Role - {"owner", "writer", "reader"} +

+

+ +
Returns:
+
+
+
+ +

+setRole

+
+public void setRole(java.lang.String role)
+
+
Set Role - {"owner", "writer", "reader"} +

+

+
Parameters:
role - {ROLE_OWNER, ROLE_WRITER, ROLE_READER}
+
+
+
+ +

+getScopeType

+
+public java.lang.String getScopeType()
+
+
Get Scope Type - {"user", "group", "domain", "default"} +

+

+ +
Returns:
+
+
+
+ +

+setScopeType

+
+public void setScopeType(java.lang.String scopeType)
+
+
Set Scope Type {"user", "group", "domain", "default"} +

+

+
Parameters:
scopeType - {SCOPE_USER, SCOPE_GROUP, SCOPE_DOMAIN, SCOPE_DEFAULT}
+
+
+
+ +

+getScopeValue

+
+public java.lang.String getScopeValue()
+
+
Get Scope Value e.g. +

+

+ +
Returns:
+
+
+
+ +

+setScopeValue

+
+public void setScopeValue(java.lang.String scopeValue)
+
+
Set Scope Value +

+

+
Parameters:
scopeValue - Email Address
+
+
+
+ +

+getEditLink

+
+public java.lang.String getEditLink()
+
+
Get Edit Link +

+

+ +
Returns:
+
+
+
+ +

+setEditLink

+
+public void setEditLink(java.lang.String editLink)
+
+
Set Edit Link +

+

+
Parameters:
editLink -
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/Log.html b/jars/gss-lib-2.2/javadoc/com/pras/Log.html new file mode 100644 index 0000000..adab970 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/Log.html @@ -0,0 +1,308 @@ + + + + + + +Log + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pras +
+Class Log

+
+java.lang.Object
+  extended by com.pras.Log
+
+
+
+
public class Log
extends java.lang.Object
+ + +

+Based on your target platform- edit this file and add appropriate Log console + e.g. + for Android, android.util.Log + for J2ME, Desktop File based logging. +
+ By default Logging will be enabled +

+ +

+

+
Author:
+
Prasanta Paul
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
Log() + +
+           
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static voiddisableLog() + +
+          Disable logging.
+static voidenableLog() + +
+          Enable logging
+static voidp(java.lang.String tag, + java.lang.String msg) + +
+          Pring Log message
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Log

+
+public Log()
+
+
+ + + + + + + + +
+Method Detail
+ +

+enableLog

+
+public static void enableLog()
+
+
Enable logging +

+

+
+
+
+
+ +

+disableLog

+
+public static void disableLog()
+
+
Disable logging. Good for production release. +

+

+
+
+
+
+ +

+p

+
+public static void p(java.lang.String tag,
+                     java.lang.String msg)
+
+
Pring Log message +

+

+
Parameters:
tag - Log TAG
msg - Log Message
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/SpreadSheet.html b/jars/gss-lib-2.2/javadoc/com/pras/SpreadSheet.html new file mode 100644 index 0000000..ea12e54 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/SpreadSheet.html @@ -0,0 +1,714 @@ + + + + + + +SpreadSheet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pras +
+Class SpreadSheet

+
+java.lang.Object
+  extended by com.pras.SpreadSheet
+
+
+
+
public class SpreadSheet
extends java.lang.Object
+ + +

+This class represents a given Spreadsheet. You can add multiple WorkSheets into a Spreadsheet. + It provides methods to Add/Retrieve/Delete WorkSheet and Share SpreadSheet. + +
API Ref:
+ http://code.google.com/apis/spreadsheets/data/3.0/developers_guide.html +
+ Feed Ref: +
+ http://code.google.com/apis/documents/docs/3.0/reference.html +
+
+ NOTE: + Resource ID is required to delete a SpreadSheet +

+ +

+

+
Author:
+
Prasanta Paul
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
SpreadSheet(Entry entry) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidaddCollaborator(Collaborator c) + +
+          Add a Collaborator
+ WorkSheetaddListWorkSheet(java.lang.String name, + int rowCount, + java.lang.String[] cols) + +
+          Create List feed based WorkSheet
+ voidaddWorkSheet(java.lang.String name) + +
+          This will create an WorkSheet without Table.
+ voidaddWorkSheet(java.lang.String name, + java.lang.String[] cols) + +
+          Add WorkSheet + This will create an Internal Table and manage WorkSheet data in that Table.
+ voidaddWorkSheet(java.lang.String name, + java.lang.String description, + int row, + java.lang.String[] cols) + +
+          Add WorkSheet
+ It will create a Table for this WorkSheet.
+ voidclearCollaboratorList() + +
+          Clear existing list of Collaborators
+ voiddeleteWorkSheet(WorkSheet wk) + +
+          Delete this WorkSheet
+ booleanequals(java.lang.Object obj) + +
+           
+ java.util.ArrayList<WorkSheet>getAllWorkSheets() + +
+          It will retrieve all WorkSheets of this SpreadSheet from Server
+ java.util.ArrayList<WorkSheet>getAllWorkSheets(boolean doRefresh) + +
+          It will retrieve all WorkSheets of this SpreadSheet either from Server or from Local Cache
+ java.util.ArrayList<WorkSheet>getAllWorkSheets(boolean doRefresh, + java.lang.String title, + boolean isTitleExact) + +
+          It will retrieve WorkSheets with matching title either from Server or from Local Cache
+ java.util.ArrayList<Collaborator>getCollaborators() + +
+          Get the list of all Collaborator details (users/groups and their access rights) for a given SpreadSheet
+ EntrygetEntry() + +
+          Get Entry Object of SpreadSheet Feed.
+ java.lang.StringgetKey() + +
+          Get SpreadSheet Feed Key
+ java.lang.StringgetResourceID() + +
+          Get SpreadSheet Resource ID.
+ java.lang.StringgetTitle() + +
+          Get SpreadSheet Title
+ java.util.ArrayList<WorkSheet>getWorkSheet(java.lang.String title, + boolean isTitleExact) + +
+          It will retrieve WorkSheets with matching title from Server
+ inthashCode() + +
+           
+ voidsetCollaborators(java.util.ArrayList<Collaborator> collaborators) + +
+          Set a list of Collaborators
+ voidsetEntry(Entry entry) + +
+          Set Entry Object of SpreadSheet Feed.
+ + + + + + + +
Methods inherited from class java.lang.Object
getClass, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+SpreadSheet

+
+public SpreadSheet(Entry entry)
+
+
+ + + + + + + + +
+Method Detail
+ +

+equals

+
+public boolean equals(java.lang.Object obj)
+
+
+
Overrides:
equals in class java.lang.Object
+
+
+
+
+
+
+ +

+hashCode

+
+public int hashCode()
+
+
+
Overrides:
hashCode in class java.lang.Object
+
+
+
+
+
+
+ +

+getEntry

+
+public Entry getEntry()
+
+
Get Entry Object of SpreadSheet Feed. Entry holds all SpreadSheet Feed details +

+

+ +
Returns:
+
+
+
+ +

+setEntry

+
+public void setEntry(Entry entry)
+
+
Set Entry Object of SpreadSheet Feed. +

+

+
Parameters:
entry -
+
+
+
+ +

+getTitle

+
+public java.lang.String getTitle()
+
+
Get SpreadSheet Title +

+

+ +
Returns:
+
+
+
+ +

+getResourceID

+
+public java.lang.String getResourceID()
+
+
Get SpreadSheet Resource ID. Each SpreadSheet has an unique Resource ID. + This ID is required to Delete this SpreadSheet. +

+

+ +
Returns:
+
+
+
+ +

+getKey

+
+public java.lang.String getKey()
+
+
Get SpreadSheet Feed Key +

+

+ +
Returns:
+
+
+
+ +

+getCollaborators

+
+public java.util.ArrayList<Collaborator> getCollaborators()
+
+
Get the list of all Collaborator details (users/groups and their access rights) for a given SpreadSheet +

+

+ +
Returns:
+
+
+
+ +

+addCollaborator

+
+public void addCollaborator(Collaborator c)
+
+
Add a Collaborator +

+

+
Parameters:
c -
+
+
+
+ +

+clearCollaboratorList

+
+public void clearCollaboratorList()
+
+
Clear existing list of Collaborators +

+

+
+
+
+
+ +

+setCollaborators

+
+public void setCollaborators(java.util.ArrayList<Collaborator> collaborators)
+
+
Set a list of Collaborators +

+

+
Parameters:
collaborators -
+
+
+
+ +

+addWorkSheet

+
+public void addWorkSheet(java.lang.String name)
+
+
This will create an WorkSheet without Table. It will create WorkSheet with 1 Column and 1 Row. It can + be accessed/modified by Web Interface. + + IMPORTANT: + This Library supports Record Handling only through Table. If you use this method, it will not + create Table internally and thus unable to add/edit/delete record from this WorkSheet. Instead, + use addWorkSheet(String name, String[] cols) +

+

+
Parameters:
name - WorkSheet name
+
+
+
+ +

+addWorkSheet

+
+public void addWorkSheet(java.lang.String name,
+                         java.lang.String[] cols)
+
+
Add WorkSheet + This will create an Internal Table and manage WorkSheet data in that Table. + This Lib supports only Table based record Add/Edit/Delete +

+

+
Parameters:
name - name of WorkSheet
cols - name of Columns
+
+
+
+ +

+addWorkSheet

+
+public void addWorkSheet(java.lang.String name,
+                         java.lang.String description,
+                         int row,
+                         java.lang.String[] cols)
+
+
Add WorkSheet
+ It will create a Table for this WorkSheet. WorkSheet and Table Name will be the same + The Table will be used for Add/Edit/Delete Records +
+

+

+
Parameters:
name - Name of the WorkSheet
description - Description of the WorkSheet
row - Number of Rows
cols - Name of Columns
+
+
+
+ +

+addListWorkSheet

+
+public WorkSheet addListWorkSheet(java.lang.String name,
+                                  int rowCount,
+                                  java.lang.String[] cols)
+
+
Create List feed based WorkSheet +

+

+
Parameters:
name - Name of the WorkSheet
rowCount - Number of row. This doesn't limit future row addition.
cols - Array of column name. First row of the WorkSheet is header row. +
Returns:
+
+
+
+ +

+getAllWorkSheets

+
+public java.util.ArrayList<WorkSheet> getAllWorkSheets()
+
+
It will retrieve all WorkSheets of this SpreadSheet from Server +

+

+ +
Returns:
+
+
+
+ +

+getAllWorkSheets

+
+public java.util.ArrayList<WorkSheet> getAllWorkSheets(boolean doRefresh)
+
+
It will retrieve all WorkSheets of this SpreadSheet either from Server or from Local Cache +

+

+
Parameters:
doRefresh - Do you want to Synch with Server ? +
Returns:
list of available WorkSheets
+
+
+
+ +

+getWorkSheet

+
+public java.util.ArrayList<WorkSheet> getWorkSheet(java.lang.String title,
+                                                   boolean isTitleExact)
+
+
It will retrieve WorkSheets with matching title from Server +

+

+
Parameters:
title - SpreadSheet title. null means all SpreadSheets. No need to do URL encode.
isTitleExact - whether title string should be an exact match +
Returns:
+
+
+
+ +

+getAllWorkSheets

+
+public java.util.ArrayList<WorkSheet> getAllWorkSheets(boolean doRefresh,
+                                                       java.lang.String title,
+                                                       boolean isTitleExact)
+
+
It will retrieve WorkSheets with matching title either from Server or from Local Cache +

+

+
Parameters:
doRefresh - Do you want to Synch with Server ?
title - SpreadSheet title. null means all SpreadSheets. No need to do URL encode.
isTitleExact - Whether title string should be an exact match +
Returns:
list of available WorkSheets
+
+
+
+ +

+deleteWorkSheet

+
+public void deleteWorkSheet(WorkSheet wk)
+
+
Delete this WorkSheet +

+

+
Parameters:
wk - WorkSheet to be deleted
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/SpreadSheetFactory.html b/jars/gss-lib-2.2/javadoc/com/pras/SpreadSheetFactory.html new file mode 100644 index 0000000..104eb99 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/SpreadSheetFactory.html @@ -0,0 +1,573 @@ + + + + + + +SpreadSheetFactory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pras +
+Class SpreadSheetFactory

+
+java.lang.Object
+  extended by com.pras.SpreadSheetFactory
+
+
+
+
public class SpreadSheetFactory
extends java.lang.Object
+ + +

+

+ It is a SpreadSheet Generator Class. It accepts Gmail User ID and PassWord + to generate Authentication Token. +
+ It uses 2 Google APIs- +
+ SpreadSheet Create/Delete - Google Document API +
+ WorkSheet Create/Delete, Record Add - Google SpreadSheet API +

+ +

+

+
Author:
+
Prasanta Paul
+
+
+ +

+ + + + + + + + + + + +
+Field Summary
+static java.lang.StringauthToken + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidaddSharePermission(SpreadSheet sp, + Collaborator[] collaborators) + +
+          Share a SpreadSheet with a given list of Collaborators.
+ voidchangeSharePermission(Collaborator c, + java.lang.String role) + +
+          Change Share permission for a particular ACL entry
+ voidcreateSpreadSheet(java.lang.String spName) + +
+          Create SpreadSheet with the given name
+ voiddeleteSpreadSheet(java.lang.String resID) + +
+          Delete a SpreadSheet
+ voidflushMe() + +
+          Deallocate SpreadSheetFactory instance
+ java.util.ArrayList<Collaborator>getAllCollaborators(SpreadSheet sp) + +
+          Get list of all Collaborators to whom this SpreadSheet is shared
+ java.util.ArrayList<SpreadSheet>getAllSpreadSheets() + +
+          Get All stored SpreadSheets from Server
+ java.util.ArrayList<SpreadSheet>getAllSpreadSheets(boolean doRefresh) + +
+          Get All stored SpreadSheets either from Server or Local Cache
+ java.util.ArrayList<SpreadSheet>getAllSpreadSheets(boolean doRefresh, + java.lang.String title, + boolean isTitleExact) + +
+          Get All stored SpreadSheets either from Server or Local Cache
+static SpreadSheetFactorygetInstance() + +
+          This will return an existing SpreadSheetFactory instance or null +
+ Note: + Make sure you have previously called getInstance(String userName, String password)
+static SpreadSheetFactorygetInstance(Authenticator authenticator) + +
+          This will create SpreadSheetFactory Instance using your custom Authenticatior.
+static SpreadSheetFactorygetInstance(java.lang.String email, + java.lang.String password) + +
+          This will create SpreadSheetFactory Instance with valid User ID (e.g.
+ java.util.ArrayList<SpreadSheet>getSpreadSheet(java.lang.String title, + boolean isTitleExact) + +
+          Get list of SpreadSheet with matching title.
+ voidremoveSharePermission(Collaborator c) + +
+          Remove Share access of a selected user.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+authToken

+
+public static java.lang.String authToken
+
+
+
+
+ + + + + + + + +
+Method Detail
+ +

+getInstance

+
+public static SpreadSheetFactory getInstance()
+
+
This will return an existing SpreadSheetFactory instance or null +
+ Note: + Make sure you have previously called getInstance(String userName, String password) +

+

+ +
Returns:
+
+
+
+ +

+getInstance

+
+public static SpreadSheetFactory getInstance(java.lang.String email,
+                                             java.lang.String password)
+
+
This will create SpreadSheetFactory Instance with valid User ID (e.g. abc@gmail.com) and password +

+

+
Parameters:
userName - Gmail account id e.g. abc@gmail.com
password - Gmail account password +
Returns:
+
+
+
+ +

+getInstance

+
+public static SpreadSheetFactory getInstance(Authenticator authenticator)
+
+
This will create SpreadSheetFactory Instance using your custom Authenticatior. + + Use this if you want to use your custom Authenticator e.g. in Android you can use AccountManager + to create a custom Authenticator. +

+

+
Parameters:
authenticator - Your Custom Authenticator. +
Returns:
+
+
+
+ +

+flushMe

+
+public void flushMe()
+
+
Deallocate SpreadSheetFactory instance +

+

+
+
+
+
+ +

+createSpreadSheet

+
+public void createSpreadSheet(java.lang.String spName)
+
+
Create SpreadSheet with the given name +

+

+
Parameters:
spName - SpreadSheet name
+
+
+
+ +

+deleteSpreadSheet

+
+public void deleteSpreadSheet(java.lang.String resID)
+
+
Delete a SpreadSheet +

+

+
Parameters:
resID - Resource ID of the SpreadSheet you want to Delete
+
+
+
+ +

+getSpreadSheet

+
+public java.util.ArrayList<SpreadSheet> getSpreadSheet(java.lang.String title,
+                                                       boolean isTitleExact)
+
+
Get list of SpreadSheet with matching title. It will do Synch with Server +

+

+
Parameters:
title - SpreadSheet title
isTitleExact - Whether title string should be an exact match +
Returns:
+
+
+
+ +

+getAllSpreadSheets

+
+public java.util.ArrayList<SpreadSheet> getAllSpreadSheets()
+
+
Get All stored SpreadSheets from Server +

+

+ +
Returns:
+
+
+
+ +

+getAllSpreadSheets

+
+public java.util.ArrayList<SpreadSheet> getAllSpreadSheets(boolean doRefresh)
+
+
Get All stored SpreadSheets either from Server or Local Cache +

+

+
Parameters:
doRefresh - Do you want to Synch with Server ? +
Returns:
List of Entry. Each Entry represents a SpreadSheet
+
+
+
+ +

+getAllSpreadSheets

+
+public java.util.ArrayList<SpreadSheet> getAllSpreadSheets(boolean doRefresh,
+                                                           java.lang.String title,
+                                                           boolean isTitleExact)
+
+
Get All stored SpreadSheets either from Server or Local Cache +

+

+
Parameters:
doRefresh -
title - SpreadSheet title. null means all SpreadSheets. No need to do URL encode.
isTitleExact - Whether title string should be an exact match +
Returns:
+
+
+
+ +

+addSharePermission

+
+public void addSharePermission(SpreadSheet sp,
+                               Collaborator[] collaborators)
+
+
Share a SpreadSheet with a given list of Collaborators. + NOTE: You need not to mention editLink of Collaborator +

+

+
Parameters:
sp - The SpreadSheet you want to share
collaborators - List of Collaborators with whim you want to share this.
+
+
+
+ +

+getAllCollaborators

+
+public java.util.ArrayList<Collaborator> getAllCollaborators(SpreadSheet sp)
+
+
Get list of all Collaborators to whom this SpreadSheet is shared +

+

+
Parameters:
sp - SpreadSheet +
Returns:
+
+
+
+ +

+changeSharePermission

+
+public void changeSharePermission(Collaborator c,
+                                  java.lang.String role)
+
+
Change Share permission for a particular ACL entry +

+

+
Parameters:
c - Collaborator instance stored in SpreadSheet. It should have a valid EditLink URL
role - {owner, writer, reader}
+
+
+
+ +

+removeSharePermission

+
+public void removeSharePermission(Collaborator c)
+
+
Remove Share access of a selected user. +

+

+
Parameters:
c - Collaborator Instance. It should have the Edit Link.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/WorkSheet.html b/jars/gss-lib-2.2/javadoc/com/pras/WorkSheet.html new file mode 100644 index 0000000..79432a5 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/WorkSheet.html @@ -0,0 +1,883 @@ + + + + + + +WorkSheet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pras +
+Class WorkSheet

+
+java.lang.Object
+  extended by com.pras.WorkSheet
+
+
+
+
public class WorkSheet
extends java.lang.Object
+ + +

+This class represents an WorkSheet and utility methods to manage WorkSheet data. + WorkSheets will manage (Add/Edit/Delete) data in Tables. It also supports List + based Feed, but only to retrieve data. At present it doesn't provide any method to Add/Edit/Delete + data in List based Feed. +
+
+ Table Feed +
+ To Add/Edit/Delete Data, you need to use addRecord(), updateRecord() and deleteRecord(). It + internally stores data in a single Table. +
+ Note: Table Feed will ignore data entered through Web UI. + So, if you want all data records irrespective of from where those are inserted/updated, you should use List Feed. + +
+
+ List Feed +
+ To Retrieve data using List based Feed, use getData() method. +

+ +

+

+
Author:
+
Prasanta Paul
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
WorkSheet() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ WorkSheetRowaddListRow(java.util.HashMap<java.lang.String,java.lang.String> records) + +
+          Add List Feed row.
+ voidaddRecord(java.lang.String key, + java.util.HashMap<java.lang.String,java.lang.String> records) + +
+          Add record into WorkSheet.
+ voiddelete() + +
+          Delete this WorkSheet.
+ voiddeleteListRow(java.lang.String key, + WorkSheetRow r) + +
+          Delete List Row
+ voiddeleteRecord(Record record) + +
+          Delete a Record
+ intgetColCount() + +
+          Get column count of this WorkSheet
+ java.lang.String[]getColumns() + +
+          Get columns of the WorkSheet.
+ java.util.ArrayList<WorkSheetRow>getData(boolean isCachedData) + +
+          Get all data of this WorkSheet (List based Feed)
+ java.util.ArrayList<WorkSheetRow>getData(boolean isCachedData, + boolean doReverse, + java.lang.String sq, + java.lang.String orderBy) + +
+          List based Feed for a particular Work Sheet.
+ EntrygetEntry() + +
+          Get Entry instance for this WorkSheet.
+ java.util.ArrayList<Record>getRecords() + +
+          Get Cached Data (previously retrieved from server)
+ java.util.ArrayList<Record>getRecords(java.lang.String key) + +
+          Get data stored in this WorkSheet
+ java.util.ArrayList<Record>getRecords(java.lang.String key, + boolean doReverse, + java.lang.String sq, + java.lang.String orderBy) + +
+          Get data stored in this WorkSheet.
+ java.util.ArrayList<Record>getRecords(java.lang.String key, + java.lang.String sq) + +
+           
+ intgetRowCount() + +
+          Get row count of this WorkSheet
+ java.lang.StringgetTitle() + +
+          Get WorkSheet Title
+ java.lang.StringgetWorkSheetID() + +
+          Get WorkSheet ID
+ java.lang.StringgetWorkSheetURL() + +
+          Get WorkSheetURL
+ voidsetColCount(int colCount) + +
+          Set column count of this WorkSheet
+ voidsetColumns(java.lang.String[] columns) + +
+          Set columns of ListFeed
+ voidsetEntry(Entry entry) + +
+          Set Feed Entry instance
+ voidsetRowCount(int rowCount) + +
+          Set row count of this WorkSheet
+ voidsetTitle(java.lang.String title) + +
+          Set WorkSheet Title
+ voidsetWorkSheetID(java.lang.String workSheetID) + +
+          Set WorkSheet ID
+ voidsetWorkSheetURL(java.lang.String workSheetURL) + +
+          Set WorkSheet
+ WorkSheetRowupdateListRow(java.lang.String key, + WorkSheetRow r, + java.util.HashMap<java.lang.String,java.lang.String> records) + +
+          Update List row
+ voidupdateRecord(Record record) + +
+          Record instance you want to Update + Keep only those data which you want to update for this record
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+WorkSheet

+
+public WorkSheet()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getWorkSheetID

+
+public java.lang.String getWorkSheetID()
+
+
Get WorkSheet ID +

+

+ +
Returns:
+
+
+
+ +

+setWorkSheetID

+
+public void setWorkSheetID(java.lang.String workSheetID)
+
+
Set WorkSheet ID +

+

+
Parameters:
workSheetID -
+
+
+
+ +

+getWorkSheetURL

+
+public java.lang.String getWorkSheetURL()
+
+
Get WorkSheetURL +

+

+ +
Returns:
+
+
+
+ +

+setWorkSheetURL

+
+public void setWorkSheetURL(java.lang.String workSheetURL)
+
+
Set WorkSheet +

+

+
Parameters:
workSheetURL -
+
+
+
+ +

+getTitle

+
+public java.lang.String getTitle()
+
+
Get WorkSheet Title +

+

+ +
Returns:
+
+
+
+ +

+setTitle

+
+public void setTitle(java.lang.String title)
+
+
Set WorkSheet Title +

+

+
Parameters:
title -
+
+
+
+ +

+getColCount

+
+public int getColCount()
+
+
Get column count of this WorkSheet +

+

+ +
Returns:
+
+
+
+ +

+setColCount

+
+public void setColCount(int colCount)
+
+
Set column count of this WorkSheet +

+

+
Parameters:
colCount -
+
+
+
+ +

+getRowCount

+
+public int getRowCount()
+
+
Get row count of this WorkSheet +

+

+ +
Returns:
+
+
+
+ +

+setRowCount

+
+public void setRowCount(int rowCount)
+
+
Set row count of this WorkSheet +

+

+
Parameters:
rowCount -
+
+
+
+ +

+getColumns

+
+public java.lang.String[] getColumns()
+
+
Get columns of the WorkSheet. It will return columns of associated table, otherwise + columns of List Feed i.e. content of Header row of ListFeed +

+

+ +
Returns:
+
+
+
+ +

+setColumns

+
+public void setColumns(java.lang.String[] columns)
+
+
Set columns of ListFeed +

+

+
Parameters:
columns -
+
+
+
+ +

+getEntry

+
+public Entry getEntry()
+
+
Get Entry instance for this WorkSheet. + Entry contains low level Feed Details +

+

+ +
Returns:
+
+
+
+ +

+setEntry

+
+public void setEntry(Entry entry)
+
+
Set Feed Entry instance +

+

+
Parameters:
entry -
+
+
+
+ +

+getData

+
+public java.util.ArrayList<WorkSheetRow> getData(boolean isCachedData)
+
+
Get all data of this WorkSheet (List based Feed) +

+

+
Parameters:
isCachedData - Do you want to read cached data or data from Server +
Returns:
+
+
+
+ +

+getData

+
+public java.util.ArrayList<WorkSheetRow> getData(boolean isCachedData,
+                                                 boolean doReverse,
+                                                 java.lang.String sq,
+                                                 java.lang.String orderBy)
+
+
List based Feed for a particular Work Sheet. Use this method if you want to retrieve data entered + through Web GUI and also through Table records. +

+

+
Parameters:
isCachedData - Do you want to read cached data or data from Server
doReverse - Do you need data in reverse order ?
sq - Structured Query. If you don't need this, set to null. (Make sure that column name is in lower case).
orderBy - If you don't need this, set to null. (Make sure that column name is in lower case). +
Returns:
+
+
+
+ +

+addListRow

+
+public WorkSheetRow addListRow(java.util.HashMap<java.lang.String,java.lang.String> records)
+
+
Add List Feed row. One row at a time. + TODO: need to test +

+

+
Parameters:
records -
+
+
+
+ +

+deleteListRow

+
+public void deleteListRow(java.lang.String key,
+                          WorkSheetRow r)
+
+
Delete List Row +

+

+
Parameters:
r - WorkSheetRow which need to be deleted
+
+
+
+ +

+updateListRow

+
+public WorkSheetRow updateListRow(java.lang.String key,
+                                  WorkSheetRow r,
+                                  java.util.HashMap<java.lang.String,java.lang.String> records)
+
+
Update List row +

+

+
Parameters:
r - WorkSheetRow to be updated
records - new records +
Returns:
+
+
+
+ +

+addRecord

+
+public void addRecord(java.lang.String key,
+                      java.util.HashMap<java.lang.String,java.lang.String> records)
+
+
Add record into WorkSheet. This WorkSheet need to have associated Table. + + Use SpreadSheet.addWorkSheet() +
+ Note: +
+ All data entered through Web Interface will be ignored. +

+

+
Parameters:
key - Key of SpreadSheet
records - Record to be added ([col_name],[value])
+
+
+
+ +

+getRecords

+
+public java.util.ArrayList<Record> getRecords(java.lang.String key)
+
+
Get data stored in this WorkSheet +

+

+
Parameters:
key - SpreadSheet Key +
Returns:
+
+
+
+ +

+getRecords

+
+public java.util.ArrayList<Record> getRecords(java.lang.String key,
+                                              java.lang.String sq)
+
+
+
Parameters:
key - SpreadSheet Key
sq - Structured Query +
Returns:
+
+
+
+ +

+getRecords

+
+public java.util.ArrayList<Record> getRecords(java.lang.String key,
+                                              boolean doReverse,
+                                              java.lang.String sq,
+                                              java.lang.String orderBy)
+
+
Get data stored in this WorkSheet. Retrieved data will be in a HashMap- + , +
+ It supports following conditional Query-
+ Structured Query: you can define conditional statements like in SQL e.g. !=
+ Order By: Order by a given column name or position
+ Reverse: Record retrived in reverse order (last row 1st)
+
+ NOTE: +
+ It will retrieve records present in the Table. Tables can't be accessed by the Web UI. +
+ So, any data inserted by Web UI will be discarded. +
+

+

+
Parameters:
key - SpreadSheet Key
doReverse - Display data in reverse order (last row first)
sq - Structured Query
orderBy - Order By +
Returns:
+
+
+
+ +

+getRecords

+
+public java.util.ArrayList<Record> getRecords()
+
+
Get Cached Data (previously retrieved from server) +

+

+ +
Returns:
+
+
+
+ +

+updateRecord

+
+public void updateRecord(Record record)
+
+
Record instance you want to Update + Keep only those data which you want to update for this record +

+

+
Parameters:
record - Record to be updated
+
+
+
+ +

+deleteRecord

+
+public void deleteRecord(Record record)
+
+
Delete a Record +

+

+
Parameters:
record - Record to be deleted
+
+
+
+ +

+delete

+
+public void delete()
+
+
Delete this WorkSheet. It will also delete its associated Table. + There is no separate method for deleting a Table +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/WorkSheetCell.html b/jars/gss-lib-2.2/javadoc/com/pras/WorkSheetCell.html new file mode 100644 index 0000000..36b865c --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/WorkSheetCell.html @@ -0,0 +1,451 @@ + + + + + + +WorkSheetCell + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pras +
+Class WorkSheetCell

+
+java.lang.Object
+  extended by com.pras.WorkSheetCell
+
+
+
+
public class WorkSheetCell
extends java.lang.Object
+ + +

+Individual Cell of the Work Sheet + One Row can have multiple Cells +

+ +

+

+
Author:
+
Prasanta Paul
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
WorkSheetCell() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ intgetCol() + +
+           
+ java.lang.StringgetName() + +
+           
+ intgetRow() + +
+           
+ java.lang.StringgetType() + +
+           
+ java.lang.StringgetValue() + +
+           
+ voidsetCol(int col) + +
+           
+ voidsetName(java.lang.String name) + +
+           
+ voidsetRow(int row) + +
+           
+ voidsetType(java.lang.String type) + +
+           
+ voidsetValue(java.lang.String value) + +
+           
+ java.lang.StringtoString() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+WorkSheetCell

+
+public WorkSheetCell()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getName

+
+public java.lang.String getName()
+
+
+
+
+
+
+ +

+setName

+
+public void setName(java.lang.String name)
+
+
+
+
+
+
+ +

+getType

+
+public java.lang.String getType()
+
+
+
+
+
+
+ +

+setType

+
+public void setType(java.lang.String type)
+
+
+
+
+
+
+ +

+getValue

+
+public java.lang.String getValue()
+
+
+
+
+
+
+ +

+setValue

+
+public void setValue(java.lang.String value)
+
+
+
+
+
+
+ +

+getRow

+
+public int getRow()
+
+
+
+
+
+
+ +

+setRow

+
+public void setRow(int row)
+
+
+
+
+
+
+ +

+getCol

+
+public int getCol()
+
+
+
+
+
+
+ +

+setCol

+
+public void setCol(int col)
+
+
+
+
+
+
+ +

+toString

+
+public java.lang.String toString()
+
+
+
Overrides:
toString in class java.lang.Object
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/WorkSheetRow.html b/jars/gss-lib-2.2/javadoc/com/pras/WorkSheetRow.html new file mode 100644 index 0000000..2d2a1ad --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/WorkSheetRow.html @@ -0,0 +1,456 @@ + + + + + + +WorkSheetRow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pras +
+Class WorkSheetRow

+
+java.lang.Object
+  extended by com.pras.WorkSheetRow
+
+
+
+
public class WorkSheetRow
extends java.lang.Object
+ + +

+Supporting class for list based data feed +

+ +

+

+
Author:
+
Prasanta Paul
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
WorkSheetRow() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleanequals(java.lang.Object obj) + +
+           
+ java.util.ArrayList<WorkSheetCell>getCells() + +
+           
+ java.lang.StringgetId() + +
+           
+ java.lang.StringgetRowIndex() + +
+           
+ java.lang.StringgetType() + +
+           
+ inthashCode() + +
+           
+ voidsetCells(java.util.ArrayList<WorkSheetCell> cells) + +
+           
+ voidsetId(java.lang.String id) + +
+           
+ voidsetRowIndex(java.lang.String rowIndex) + +
+           
+ voidsetType(java.lang.String type) + +
+           
+ java.lang.StringtoString() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
getClass, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+WorkSheetRow

+
+public WorkSheetRow()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getId

+
+public java.lang.String getId()
+
+
+
+
+
+
+ +

+setId

+
+public void setId(java.lang.String id)
+
+
+
+
+
+
+ +

+getRowIndex

+
+public java.lang.String getRowIndex()
+
+
+
+
+
+
+ +

+setRowIndex

+
+public void setRowIndex(java.lang.String rowIndex)
+
+
+
+
+
+
+ +

+getType

+
+public java.lang.String getType()
+
+
+
+
+
+
+ +

+setType

+
+public void setType(java.lang.String type)
+
+
+
+
+
+
+ +

+getCells

+
+public java.util.ArrayList<WorkSheetCell> getCells()
+
+
+
+
+
+
+ +

+setCells

+
+public void setCells(java.util.ArrayList<WorkSheetCell> cells)
+
+
+
+
+
+
+ +

+equals

+
+public boolean equals(java.lang.Object obj)
+
+
+
Overrides:
equals in class java.lang.Object
+
+
+
+
+
+
+ +

+hashCode

+
+public int hashCode()
+
+
+
Overrides:
hashCode in class java.lang.Object
+
+
+
+
+
+
+ +

+toString

+
+public java.lang.String toString()
+
+
+
Overrides:
toString in class java.lang.Object
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/auth/Account.html b/jars/gss-lib-2.2/javadoc/com/pras/auth/Account.html new file mode 100644 index 0000000..7acb27d --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/auth/Account.html @@ -0,0 +1,352 @@ + + + + + + +Account + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pras.auth +
+Class Account

+
+java.lang.Object
+  extended by com.pras.auth.Account
+
+
+
+
public class Account
extends java.lang.Object
+ + +

+Account data holding class +

+ +

+

+
Author:
+
Prasanta Paul
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
Account() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ java.lang.StringgetAccountType() + +
+           
+ java.lang.StringgetEmail() + +
+           
+ java.lang.StringgetPassword() + +
+           
+ voidsetAccountType(java.lang.String accountType) + +
+           
+ voidsetEmail(java.lang.String email) + +
+           
+ voidsetPassword(java.lang.String password) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Account

+
+public Account()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getEmail

+
+public java.lang.String getEmail()
+
+
+
+
+
+
+ +

+setEmail

+
+public void setEmail(java.lang.String email)
+
+
+
+
+
+
+ +

+getPassword

+
+public java.lang.String getPassword()
+
+
+
+
+
+
+ +

+setPassword

+
+public void setPassword(java.lang.String password)
+
+
+
+
+
+
+ +

+getAccountType

+
+public java.lang.String getAccountType()
+
+
+
+
+
+
+ +

+setAccountType

+
+public void setAccountType(java.lang.String accountType)
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/auth/Authenticator.html b/jars/gss-lib-2.2/javadoc/com/pras/auth/Authenticator.html new file mode 100644 index 0000000..77432b1 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/auth/Authenticator.html @@ -0,0 +1,210 @@ + + + + + + +Authenticator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pras.auth +
+Interface Authenticator

+
+
All Known Implementing Classes:
BasicAuthenticatorImpl
+
+
+
+
public interface Authenticator
+ + +

+


+ +

+ + + + + + + + + + + + +
+Method Summary
+ java.lang.StringgetAuthToken(java.lang.String service) + +
+          Do the authentication and read Auth_Token from Server.
+  +

+ + + + + + + + +
+Method Detail
+ +

+getAuthToken

+
+java.lang.String getAuthToken(java.lang.String service)
+
+
Do the authentication and read Auth_Token from Server. The implementor class + will provide Account (Gmail) and Service details +

+

+
Parameters:
service - Name of the Service for which Authentication Token is required e.g. "wise" for SpreadSheet +
Returns:
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/auth/BasicAuthenticatorImpl.html b/jars/gss-lib-2.2/javadoc/com/pras/auth/BasicAuthenticatorImpl.html new file mode 100644 index 0000000..f1d9b57 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/auth/BasicAuthenticatorImpl.html @@ -0,0 +1,271 @@ + + + + + + +BasicAuthenticatorImpl + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pras.auth +
+Class BasicAuthenticatorImpl

+
+java.lang.Object
+  extended by com.pras.auth.BasicAuthenticatorImpl
+
+
+
All Implemented Interfaces:
Authenticator
+
+
+
+
public class BasicAuthenticatorImpl
extends java.lang.Object
implements Authenticator
+ + +

+This will provide a basic and LOW Level way of getting Authetication Token + for various Google's services. + This is a generic approach for core Java. User can add Platform specific Autheticator + implementation. +

+ +

+

+
Author:
+
Prasanta Paul
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
BasicAuthenticatorImpl(Account account) + +
+           
+  + + + + + + + + + + + +
+Method Summary
+ java.lang.StringgetAuthToken(java.lang.String service) + +
+          Do the authentication and read Auth_Token from Server.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+BasicAuthenticatorImpl

+
+public BasicAuthenticatorImpl(Account account)
+
+
+ + + + + + + + +
+Method Detail
+ +

+getAuthToken

+
+public java.lang.String getAuthToken(java.lang.String service)
+
+
Description copied from interface: Authenticator
+
Do the authentication and read Auth_Token from Server. The implementor class + will provide Account (Gmail) and Service details +

+

+
Specified by:
getAuthToken in interface Authenticator
+
+
+
Parameters:
service - Name of the Service for which Authentication Token is required e.g. "wise" for SpreadSheet +
Returns:
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/auth/class-use/Account.html b/jars/gss-lib-2.2/javadoc/com/pras/auth/class-use/Account.html new file mode 100644 index 0000000..a727268 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/auth/class-use/Account.html @@ -0,0 +1,174 @@ + + + + + + +Uses of Class com.pras.auth.Account + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
com.pras.auth.Account

+
+ + + + + + + + + +
+Packages that use Account
com.pras.auth  
+  +

+ + + + + +
+Uses of Account in com.pras.auth
+  +

+ + + + + + + + +
Constructors in com.pras.auth with parameters of type Account
BasicAuthenticatorImpl(Account account) + +
+           
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/auth/class-use/Authenticator.html b/jars/gss-lib-2.2/javadoc/com/pras/auth/class-use/Authenticator.html new file mode 100644 index 0000000..31dd730 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/auth/class-use/Authenticator.html @@ -0,0 +1,206 @@ + + + + + + +Uses of Interface com.pras.auth.Authenticator + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Interface
com.pras.auth.Authenticator

+
+ + + + + + + + + + + + + +
+Packages that use Authenticator
com.pras  
com.pras.auth  
+  +

+ + + + + +
+Uses of Authenticator in com.pras
+  +

+ + + + + + + + + +
Methods in com.pras with parameters of type Authenticator
+static SpreadSheetFactorySpreadSheetFactory.getInstance(Authenticator authenticator) + +
+          This will create SpreadSheetFactory Instance using your custom Authenticatior.
+  +

+ + + + + +
+Uses of Authenticator in com.pras.auth
+  +

+ + + + + + + + + +
Classes in com.pras.auth that implement Authenticator
+ classBasicAuthenticatorImpl + +
+          This will provide a basic and LOW Level way of getting Authetication Token + for various Google's services.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/auth/class-use/BasicAuthenticatorImpl.html b/jars/gss-lib-2.2/javadoc/com/pras/auth/class-use/BasicAuthenticatorImpl.html new file mode 100644 index 0000000..33a5cc7 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/auth/class-use/BasicAuthenticatorImpl.html @@ -0,0 +1,140 @@ + + + + + + +Uses of Class com.pras.auth.BasicAuthenticatorImpl + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
com.pras.auth.BasicAuthenticatorImpl

+
+No usage of com.pras.auth.BasicAuthenticatorImpl +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/auth/package-frame.html b/jars/gss-lib-2.2/javadoc/com/pras/auth/package-frame.html new file mode 100644 index 0000000..dac61b7 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/auth/package-frame.html @@ -0,0 +1,45 @@ + + + + + + +com.pras.auth + + + + + + + + + + + +com.pras.auth + + + + +
+Interfaces  + +
+Authenticator
+ + + + + + +
+Classes  + +
+Account +
+BasicAuthenticatorImpl
+ + + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/auth/package-summary.html b/jars/gss-lib-2.2/javadoc/com/pras/auth/package-summary.html new file mode 100644 index 0000000..73f8d92 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/auth/package-summary.html @@ -0,0 +1,173 @@ + + + + + + +com.pras.auth + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package com.pras.auth +

+ + + + + + + + + +
+Interface Summary
Authenticator 
+  + +

+ + + + + + + + + + + + + +
+Class Summary
AccountAccount data holding class
BasicAuthenticatorImplThis will provide a basic and LOW Level way of getting Authetication Token + for various Google's services.
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/auth/package-tree.html b/jars/gss-lib-2.2/javadoc/com/pras/auth/package-tree.html new file mode 100644 index 0000000..380638d --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/auth/package-tree.html @@ -0,0 +1,155 @@ + + + + + + +com.pras.auth Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package com.pras.auth +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/auth/package-use.html b/jars/gss-lib-2.2/javadoc/com/pras/auth/package-use.html new file mode 100644 index 0000000..8e723c9 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/auth/package-use.html @@ -0,0 +1,191 @@ + + + + + + +Uses of Package com.pras.auth + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Package
com.pras.auth

+
+ + + + + + + + + + + + + +
+Packages that use com.pras.auth
com.pras  
com.pras.auth  
+  +

+ + + + + + + + +
+Classes in com.pras.auth used by com.pras
Authenticator + +
+           
+  +

+ + + + + + + + + + + +
+Classes in com.pras.auth used by com.pras.auth
Account + +
+          Account data holding class
Authenticator + +
+           
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/class-use/Collaborator.html b/jars/gss-lib-2.2/javadoc/com/pras/class-use/Collaborator.html new file mode 100644 index 0000000..0f27f5f --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/class-use/Collaborator.html @@ -0,0 +1,242 @@ + + + + + + +Uses of Class com.pras.Collaborator + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
com.pras.Collaborator

+
+ + + + + + + + + +
+Packages that use Collaborator
com.pras  
+  +

+ + + + + +
+Uses of Collaborator in com.pras
+  +

+ + + + + + + + + + + + + +
Methods in com.pras that return types with arguments of type Collaborator
+ java.util.ArrayList<Collaborator>SpreadSheetFactory.getAllCollaborators(SpreadSheet sp) + +
+          Get list of all Collaborators to whom this SpreadSheet is shared
+ java.util.ArrayList<Collaborator>SpreadSheet.getCollaborators() + +
+          Get the list of all Collaborator details (users/groups and their access rights) for a given SpreadSheet
+  +

+ + + + + + + + + + + + + + + + + + + + + +
Methods in com.pras with parameters of type Collaborator
+ voidSpreadSheet.addCollaborator(Collaborator c) + +
+          Add a Collaborator
+ voidSpreadSheetFactory.addSharePermission(SpreadSheet sp, + Collaborator[] collaborators) + +
+          Share a SpreadSheet with a given list of Collaborators.
+ voidSpreadSheetFactory.changeSharePermission(Collaborator c, + java.lang.String role) + +
+          Change Share permission for a particular ACL entry
+ voidSpreadSheetFactory.removeSharePermission(Collaborator c) + +
+          Remove Share access of a selected user.
+  +

+ + + + + + + + + +
Method parameters in com.pras with type arguments of type Collaborator
+ voidSpreadSheet.setCollaborators(java.util.ArrayList<Collaborator> collaborators) + +
+          Set a list of Collaborators
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/class-use/Log.html b/jars/gss-lib-2.2/javadoc/com/pras/class-use/Log.html new file mode 100644 index 0000000..b3df417 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/class-use/Log.html @@ -0,0 +1,140 @@ + + + + + + +Uses of Class com.pras.Log + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
com.pras.Log

+
+No usage of com.pras.Log +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/class-use/SpreadSheet.html b/jars/gss-lib-2.2/javadoc/com/pras/class-use/SpreadSheet.html new file mode 100644 index 0000000..37da703 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/class-use/SpreadSheet.html @@ -0,0 +1,228 @@ + + + + + + +Uses of Class com.pras.SpreadSheet + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
com.pras.SpreadSheet

+
+ + + + + + + + + +
+Packages that use SpreadSheet
com.pras  
+  +

+ + + + + +
+Uses of SpreadSheet in com.pras
+  +

+ + + + + + + + + + + + + + + + + + + + + +
Methods in com.pras that return types with arguments of type SpreadSheet
+ java.util.ArrayList<SpreadSheet>SpreadSheetFactory.getAllSpreadSheets() + +
+          Get All stored SpreadSheets from Server
+ java.util.ArrayList<SpreadSheet>SpreadSheetFactory.getAllSpreadSheets(boolean doRefresh) + +
+          Get All stored SpreadSheets either from Server or Local Cache
+ java.util.ArrayList<SpreadSheet>SpreadSheetFactory.getAllSpreadSheets(boolean doRefresh, + java.lang.String title, + boolean isTitleExact) + +
+          Get All stored SpreadSheets either from Server or Local Cache
+ java.util.ArrayList<SpreadSheet>SpreadSheetFactory.getSpreadSheet(java.lang.String title, + boolean isTitleExact) + +
+          Get list of SpreadSheet with matching title.
+  +

+ + + + + + + + + + + + + +
Methods in com.pras with parameters of type SpreadSheet
+ voidSpreadSheetFactory.addSharePermission(SpreadSheet sp, + Collaborator[] collaborators) + +
+          Share a SpreadSheet with a given list of Collaborators.
+ java.util.ArrayList<Collaborator>SpreadSheetFactory.getAllCollaborators(SpreadSheet sp) + +
+          Get list of all Collaborators to whom this SpreadSheet is shared
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/class-use/SpreadSheetFactory.html b/jars/gss-lib-2.2/javadoc/com/pras/class-use/SpreadSheetFactory.html new file mode 100644 index 0000000..8ba0645 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/class-use/SpreadSheetFactory.html @@ -0,0 +1,196 @@ + + + + + + +Uses of Class com.pras.SpreadSheetFactory + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
com.pras.SpreadSheetFactory

+
+ + + + + + + + + +
+Packages that use SpreadSheetFactory
com.pras  
+  +

+ + + + + +
+Uses of SpreadSheetFactory in com.pras
+  +

+ + + + + + + + + + + + + + + + + +
Methods in com.pras that return SpreadSheetFactory
+static SpreadSheetFactorySpreadSheetFactory.getInstance() + +
+          This will return an existing SpreadSheetFactory instance or null +
+ Note: + Make sure you have previously called getInstance(String userName, String password)
+static SpreadSheetFactorySpreadSheetFactory.getInstance(Authenticator authenticator) + +
+          This will create SpreadSheetFactory Instance using your custom Authenticatior.
+static SpreadSheetFactorySpreadSheetFactory.getInstance(java.lang.String email, + java.lang.String password) + +
+          This will create SpreadSheetFactory Instance with valid User ID (e.g.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/class-use/WorkSheet.html b/jars/gss-lib-2.2/javadoc/com/pras/class-use/WorkSheet.html new file mode 100644 index 0000000..7ae9290 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/class-use/WorkSheet.html @@ -0,0 +1,237 @@ + + + + + + +Uses of Class com.pras.WorkSheet + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
com.pras.WorkSheet

+
+ + + + + + + + + +
+Packages that use WorkSheet
com.pras  
+  +

+ + + + + +
+Uses of WorkSheet in com.pras
+  +

+ + + + + + + + + +
Methods in com.pras that return WorkSheet
+ WorkSheetSpreadSheet.addListWorkSheet(java.lang.String name, + int rowCount, + java.lang.String[] cols) + +
+          Create List feed based WorkSheet
+  +

+ + + + + + + + + + + + + + + + + + + + + +
Methods in com.pras that return types with arguments of type WorkSheet
+ java.util.ArrayList<WorkSheet>SpreadSheet.getAllWorkSheets() + +
+          It will retrieve all WorkSheets of this SpreadSheet from Server
+ java.util.ArrayList<WorkSheet>SpreadSheet.getAllWorkSheets(boolean doRefresh) + +
+          It will retrieve all WorkSheets of this SpreadSheet either from Server or from Local Cache
+ java.util.ArrayList<WorkSheet>SpreadSheet.getAllWorkSheets(boolean doRefresh, + java.lang.String title, + boolean isTitleExact) + +
+          It will retrieve WorkSheets with matching title either from Server or from Local Cache
+ java.util.ArrayList<WorkSheet>SpreadSheet.getWorkSheet(java.lang.String title, + boolean isTitleExact) + +
+          It will retrieve WorkSheets with matching title from Server
+  +

+ + + + + + + + + +
Methods in com.pras with parameters of type WorkSheet
+ voidSpreadSheet.deleteWorkSheet(WorkSheet wk) + +
+          Delete this WorkSheet
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/class-use/WorkSheetCell.html b/jars/gss-lib-2.2/javadoc/com/pras/class-use/WorkSheetCell.html new file mode 100644 index 0000000..f070f1a --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/class-use/WorkSheetCell.html @@ -0,0 +1,277 @@ + + + + + + +Uses of Class com.pras.WorkSheetCell + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
com.pras.WorkSheetCell

+
+ + + + + + + + + + + + + +
+Packages that use WorkSheetCell
com.pras  
com.pras.sp  
+  +

+ + + + + +
+Uses of WorkSheetCell in com.pras
+  +

+ + + + + + + + + +
Methods in com.pras that return types with arguments of type WorkSheetCell
+ java.util.ArrayList<WorkSheetCell>WorkSheetRow.getCells() + +
+           
+  +

+ + + + + + + + + +
Method parameters in com.pras with type arguments of type WorkSheetCell
+ voidWorkSheetRow.setCells(java.util.ArrayList<WorkSheetCell> cells) + +
+           
+  +

+ + + + + +
+Uses of WorkSheetCell in com.pras.sp
+  +

+ + + + + + + + + +
Methods in com.pras.sp that return WorkSheetCell
+ WorkSheetCellEntry.getCellInfo() + +
+           
+  +

+ + + + + + + + + +
Methods in com.pras.sp that return types with arguments of type WorkSheetCell
+ java.util.ArrayList<WorkSheetCell>Entry.getCells() + +
+           
+  +

+ + + + + + + + + + + + + +
Methods in com.pras.sp with parameters of type WorkSheetCell
+ voidEntry.addCell(WorkSheetCell cell) + +
+           
+ voidEntry.setCellInfo(WorkSheetCell cellInfo) + +
+           
+  +

+ + + + + + + + + +
Method parameters in com.pras.sp with type arguments of type WorkSheetCell
+ voidEntry.setCells(java.util.ArrayList<WorkSheetCell> cells) + +
+           
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/class-use/WorkSheetRow.html b/jars/gss-lib-2.2/javadoc/com/pras/class-use/WorkSheetRow.html new file mode 100644 index 0000000..b124dc0 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/class-use/WorkSheetRow.html @@ -0,0 +1,240 @@ + + + + + + +Uses of Class com.pras.WorkSheetRow + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
com.pras.WorkSheetRow

+
+ + + + + + + + + +
+Packages that use WorkSheetRow
com.pras  
+  +

+ + + + + +
+Uses of WorkSheetRow in com.pras
+  +

+ + + + + + + + + + + + + +
Methods in com.pras that return WorkSheetRow
+ WorkSheetRowWorkSheet.addListRow(java.util.HashMap<java.lang.String,java.lang.String> records) + +
+          Add List Feed row.
+ WorkSheetRowWorkSheet.updateListRow(java.lang.String key, + WorkSheetRow r, + java.util.HashMap<java.lang.String,java.lang.String> records) + +
+          Update List row
+  +

+ + + + + + + + + + + + + +
Methods in com.pras that return types with arguments of type WorkSheetRow
+ java.util.ArrayList<WorkSheetRow>WorkSheet.getData(boolean isCachedData) + +
+          Get all data of this WorkSheet (List based Feed)
+ java.util.ArrayList<WorkSheetRow>WorkSheet.getData(boolean isCachedData, + boolean doReverse, + java.lang.String sq, + java.lang.String orderBy) + +
+          List based Feed for a particular Work Sheet.
+  +

+ + + + + + + + + + + + + +
Methods in com.pras with parameters of type WorkSheetRow
+ voidWorkSheet.deleteListRow(java.lang.String key, + WorkSheetRow r) + +
+          Delete List Row
+ WorkSheetRowWorkSheet.updateListRow(java.lang.String key, + WorkSheetRow r, + java.util.HashMap<java.lang.String,java.lang.String> records) + +
+          Update List row
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/conn/HttpConHandler.html b/jars/gss-lib-2.2/javadoc/com/pras/conn/HttpConHandler.html new file mode 100644 index 0000000..4aaff7f --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/conn/HttpConHandler.html @@ -0,0 +1,448 @@ + + + + + + +HttpConHandler + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pras.conn +
+Class HttpConHandler

+
+java.lang.Object
+  extended by com.pras.conn.HttpConHandler
+
+
+
+
public class HttpConHandler
extends java.lang.Object
+ + +

+HTTP Connection handler, supports GET, POST, PUT and DELETE. +

+ +

+

+
Author:
+
Prasanta Paul
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static java.lang.StringAUTHORIZATION_HTTP_HEADER + +
+           
+static java.lang.StringCONTENT_LENGTH_HTTP_HEADER + +
+           
+static java.lang.StringCONTENT_TYPE_HTTP_HEADER + +
+           
+static java.lang.StringGDATA_VERSION_HTTP_HEADER + +
+           
+static intHTTP_DELETE + +
+           
+static intHTTP_GET + +
+           
+static intHTTP_POST + +
+           
+static intHTTP_PUT + +
+           
+  + + + + + + + + + + +
+Constructor Summary
HttpConHandler() + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+ ResponsedoConnect(java.lang.String urlStr, + int type, + java.util.HashMap<java.lang.String,java.lang.String> httpHeaders, + java.lang.String postData) + +
+           
+static java.lang.Stringencode(java.lang.String str) + +
+          Encode URL parameters in UTF-8 format
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+AUTHORIZATION_HTTP_HEADER

+
+public static final java.lang.String AUTHORIZATION_HTTP_HEADER
+
+
+
See Also:
Constant Field Values
+
+
+ +

+GDATA_VERSION_HTTP_HEADER

+
+public static final java.lang.String GDATA_VERSION_HTTP_HEADER
+
+
+
See Also:
Constant Field Values
+
+
+ +

+CONTENT_LENGTH_HTTP_HEADER

+
+public static final java.lang.String CONTENT_LENGTH_HTTP_HEADER
+
+
+
See Also:
Constant Field Values
+
+
+ +

+CONTENT_TYPE_HTTP_HEADER

+
+public static final java.lang.String CONTENT_TYPE_HTTP_HEADER
+
+
+
See Also:
Constant Field Values
+
+
+ +

+HTTP_GET

+
+public static final int HTTP_GET
+
+
+
See Also:
Constant Field Values
+
+
+ +

+HTTP_POST

+
+public static final int HTTP_POST
+
+
+
See Also:
Constant Field Values
+
+
+ +

+HTTP_DELETE

+
+public static final int HTTP_DELETE
+
+
+
See Also:
Constant Field Values
+
+
+ +

+HTTP_PUT

+
+public static final int HTTP_PUT
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+HttpConHandler

+
+public HttpConHandler()
+
+
+ + + + + + + + +
+Method Detail
+ +

+doConnect

+
+public Response doConnect(java.lang.String urlStr,
+                          int type,
+                          java.util.HashMap<java.lang.String,java.lang.String> httpHeaders,
+                          java.lang.String postData)
+
+
+
Parameters:
urlStr - HTTP URL
type - Type of Connection (POST, GET, PUT or DELETE)
httpHeaders - HTTP headers
postData - Data to be sent as a part of POST/PUT request +
Returns:
ATOM XML feed and Response/Error message
+
+
+
+ +

+encode

+
+public static java.lang.String encode(java.lang.String str)
+
+
Encode URL parameters in UTF-8 format +

+

+
Parameters:
str - String to be URL encoded +
Returns:
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/conn/Response.html b/jars/gss-lib-2.2/javadoc/com/pras/conn/Response.html new file mode 100644 index 0000000..7f77bf8 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/conn/Response.html @@ -0,0 +1,485 @@ + + + + + + +Response + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pras.conn +
+Class Response

+
+java.lang.Object
+  extended by com.pras.conn.Response
+
+
+
+
public class Response
extends java.lang.Object
+ + +

+Wrapper class to hold Response from Server, Connection Exception etc. +

+ +

+

+
Author:
+
rasanta
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
Response() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ java.lang.StringgetErrorStreamMsg() + +
+           
+ java.lang.ExceptiongetException() + +
+           
+ java.lang.StringgetOutput() + +
+           
+ java.lang.StringgetResponseCode() + +
+           
+ java.lang.StringgetResponseMessage() + +
+           
+ booleanisError() + +
+           
+ voidprintErrorLog() + +
+           
+ voidsetError(boolean error) + +
+           
+ voidsetErrorStreamMsg(java.lang.String errorStreamMsg) + +
+           
+ voidsetException(java.lang.Exception exception) + +
+           
+ voidsetOutput(java.lang.String output) + +
+           
+ voidsetResponseCode(java.lang.String responseCode) + +
+           
+ voidsetResponseMessage(java.lang.String responseMessage) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Response

+
+public Response()
+
+
+ + + + + + + + +
+Method Detail
+ +

+isError

+
+public boolean isError()
+
+
+
+
+
+
+ +

+setError

+
+public void setError(boolean error)
+
+
+
+
+
+
+ +

+getResponseCode

+
+public java.lang.String getResponseCode()
+
+
+
+
+
+
+ +

+setResponseCode

+
+public void setResponseCode(java.lang.String responseCode)
+
+
+
+
+
+
+ +

+getResponseMessage

+
+public java.lang.String getResponseMessage()
+
+
+
+
+
+
+ +

+setResponseMessage

+
+public void setResponseMessage(java.lang.String responseMessage)
+
+
+
+
+
+
+ +

+getErrorStreamMsg

+
+public java.lang.String getErrorStreamMsg()
+
+
+
+
+
+
+ +

+setErrorStreamMsg

+
+public void setErrorStreamMsg(java.lang.String errorStreamMsg)
+
+
+
+
+
+
+ +

+getOutput

+
+public java.lang.String getOutput()
+
+
+
+
+
+
+ +

+setOutput

+
+public void setOutput(java.lang.String output)
+
+
+
+
+
+
+ +

+getException

+
+public java.lang.Exception getException()
+
+
+
+
+
+
+ +

+setException

+
+public void setException(java.lang.Exception exception)
+
+
+
+
+
+
+ +

+printErrorLog

+
+public void printErrorLog()
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/conn/class-use/HttpConHandler.html b/jars/gss-lib-2.2/javadoc/com/pras/conn/class-use/HttpConHandler.html new file mode 100644 index 0000000..a05aa9c --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/conn/class-use/HttpConHandler.html @@ -0,0 +1,140 @@ + + + + + + +Uses of Class com.pras.conn.HttpConHandler + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
com.pras.conn.HttpConHandler

+
+No usage of com.pras.conn.HttpConHandler +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/conn/class-use/Response.html b/jars/gss-lib-2.2/javadoc/com/pras/conn/class-use/Response.html new file mode 100644 index 0000000..b5bc0a6 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/conn/class-use/Response.html @@ -0,0 +1,179 @@ + + + + + + +Uses of Class com.pras.conn.Response + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
com.pras.conn.Response

+
+ + + + + + + + + +
+Packages that use Response
com.pras.conn  
+  +

+ + + + + +
+Uses of Response in com.pras.conn
+  +

+ + + + + + + + + +
Methods in com.pras.conn that return Response
+ ResponseHttpConHandler.doConnect(java.lang.String urlStr, + int type, + java.util.HashMap<java.lang.String,java.lang.String> httpHeaders, + java.lang.String postData) + +
+           
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/conn/package-frame.html b/jars/gss-lib-2.2/javadoc/com/pras/conn/package-frame.html new file mode 100644 index 0000000..89dfba5 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/conn/package-frame.html @@ -0,0 +1,34 @@ + + + + + + +com.pras.conn + + + + + + + + + + + +com.pras.conn + + + + +
+Classes  + +
+HttpConHandler +
+Response
+ + + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/conn/package-summary.html b/jars/gss-lib-2.2/javadoc/com/pras/conn/package-summary.html new file mode 100644 index 0000000..7ffb46e --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/conn/package-summary.html @@ -0,0 +1,158 @@ + + + + + + +com.pras.conn + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package com.pras.conn +

+ + + + + + + + + + + + + +
+Class Summary
HttpConHandlerHTTP Connection handler, supports GET, POST, PUT and DELETE.
ResponseWrapper class to hold Response from Server, Connection Exception etc.
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/conn/package-tree.html b/jars/gss-lib-2.2/javadoc/com/pras/conn/package-tree.html new file mode 100644 index 0000000..3ea32a9 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/conn/package-tree.html @@ -0,0 +1,149 @@ + + + + + + +com.pras.conn Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package com.pras.conn +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/conn/package-use.html b/jars/gss-lib-2.2/javadoc/com/pras/conn/package-use.html new file mode 100644 index 0000000..44df830 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/conn/package-use.html @@ -0,0 +1,166 @@ + + + + + + +Uses of Package com.pras.conn + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Package
com.pras.conn

+
+ + + + + + + + + +
+Packages that use com.pras.conn
com.pras.conn  
+  +

+ + + + + + + + +
+Classes in com.pras.conn used by com.pras.conn
Response + +
+          Wrapper class to hold Response from Server, Connection Exception etc.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/package-frame.html b/jars/gss-lib-2.2/javadoc/com/pras/package-frame.html new file mode 100644 index 0000000..49c3b8b --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/package-frame.html @@ -0,0 +1,44 @@ + + + + + + +com.pras + + + + + + + + + + + +com.pras + + + + +
+Classes  + +
+Collaborator +
+Log +
+SpreadSheet +
+SpreadSheetFactory +
+WorkSheet +
+WorkSheetCell +
+WorkSheetRow
+ + + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/package-summary.html b/jars/gss-lib-2.2/javadoc/com/pras/package-summary.html new file mode 100644 index 0000000..67c7eb3 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/package-summary.html @@ -0,0 +1,181 @@ + + + + + + +com.pras + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package com.pras +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Class Summary
CollaboratorACL details of a SpreadSheet
LogBased on your target platform- edit this file and add appropriate Log console + e.g.
SpreadSheetThis class represents a given Spreadsheet.
SpreadSheetFactory + It is a SpreadSheet Generator Class.
WorkSheetThis class represents an WorkSheet and utility methods to manage WorkSheet data.
WorkSheetCellIndividual Cell of the Work Sheet + One Row can have multiple Cells
WorkSheetRowSupporting class for list based data feed
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/package-tree.html b/jars/gss-lib-2.2/javadoc/com/pras/package-tree.html new file mode 100644 index 0000000..989be03 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/package-tree.html @@ -0,0 +1,149 @@ + + + + + + +com.pras Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package com.pras +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/package-use.html b/jars/gss-lib-2.2/javadoc/com/pras/package-use.html new file mode 100644 index 0000000..502aeb4 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/package-use.html @@ -0,0 +1,218 @@ + + + + + + +Uses of Package com.pras + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Package
com.pras

+
+ + + + + + + + + + + + + +
+Packages that use com.pras
com.pras  
com.pras.sp  
+  +

+ + + + + + + + + + + + + + + + + + + + + + + +
+Classes in com.pras used by com.pras
Collaborator + +
+          ACL details of a SpreadSheet
SpreadSheet + +
+          This class represents a given Spreadsheet.
SpreadSheetFactory + +
+           + It is a SpreadSheet Generator Class.
WorkSheet + +
+          This class represents an WorkSheet and utility methods to manage WorkSheet data.
WorkSheetCell + +
+          Individual Cell of the Work Sheet + One Row can have multiple Cells
WorkSheetRow + +
+          Supporting class for list based data feed
+  +

+ + + + + + + + +
+Classes in com.pras used by com.pras.sp
WorkSheetCell + +
+          Individual Cell of the Work Sheet + One Row can have multiple Cells
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/sp/Entry.html b/jars/gss-lib-2.2/javadoc/com/pras/sp/Entry.html new file mode 100644 index 0000000..7c0f59e --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/sp/Entry.html @@ -0,0 +1,1017 @@ + + + + + + +Entry + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pras.sp +
+Class Entry

+
+java.lang.Object
+  extended by com.pras.sp.Entry
+
+
+
+
public class Entry
extends java.lang.Object
+ + +

+This class represents an entry of SpreadSheet XML Feed +

+ +

+

+
Author:
+
Prasanta Paul
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
Entry() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidaddCell(WorkSheetCell cell) + +
+           
+ voidaddCol(java.lang.String colName) + +
+           
+ voidaddField(Field f) + +
+           
+ java.lang.StringgetAclRole() + +
+           
+ java.lang.StringgetAclScopeType() + +
+           
+ java.lang.StringgetAclScopeValue() + +
+           
+ java.lang.StringgetAuthorEmail() + +
+           
+ java.lang.StringgetAuthorName() + +
+           
+ WorkSheetCellgetCellInfo() + +
+           
+ java.util.ArrayList<WorkSheetCell>getCells() + +
+           
+ intgetColCount() + +
+           
+ java.util.ArrayList<java.lang.String>getCols() + +
+           
+ java.lang.StringgetEditLink() + +
+           
+ java.lang.StringgetETAG() + +
+           
+ java.util.ArrayList<Field>getFields() + +
+           
+ java.lang.StringgetId() + +
+           
+ java.lang.StringgetKey() + +
+           
+ java.lang.StringgetResID() + +
+           
+ intgetRowCount() + +
+           
+ java.lang.StringgetSummary() + +
+           
+ java.lang.StringgetTitle() + +
+           
+ java.lang.StringgetWorkSheetURL() + +
+           
+ voidsetAclRole(java.lang.String aclRole) + +
+           
+ voidsetAclScopeType(java.lang.String aclScopeType) + +
+           
+ voidsetAclScopeValue(java.lang.String aclScopeValue) + +
+           
+ voidsetAuthorEmail(java.lang.String authorEmail) + +
+           
+ voidsetAuthorName(java.lang.String authorName) + +
+           
+ voidsetCellInfo(WorkSheetCell cellInfo) + +
+           
+ voidsetCells(java.util.ArrayList<WorkSheetCell> cells) + +
+           
+ voidsetColCount(int colCount) + +
+           
+ voidsetCols(java.util.ArrayList<java.lang.String> cols) + +
+           
+ voidsetEditLink(java.lang.String editLink) + +
+           
+ voidsetETAG(java.lang.String etag) + +
+           
+ voidsetFields(java.util.ArrayList<Field> fields) + +
+           
+ voidsetId(java.lang.String id) + +
+           
+ voidsetKey(java.lang.String key) + +
+           
+ voidsetResID(java.lang.String resID) + +
+           
+ voidsetRowCount(int rowCount) + +
+           
+ voidsetSummary(java.lang.String summary) + +
+           
+ voidsetTitle(java.lang.String title) + +
+           
+ voidsetWorkSheetURL(java.lang.String workSheetURL) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Entry

+
+public Entry()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getETAG

+
+public java.lang.String getETAG()
+
+
+
+
+
+
+ +

+setETAG

+
+public void setETAG(java.lang.String etag)
+
+
+
+
+
+
+ +

+getId

+
+public java.lang.String getId()
+
+
+
+
+
+
+ +

+setId

+
+public void setId(java.lang.String id)
+
+
+
+
+
+
+ +

+getKey

+
+public java.lang.String getKey()
+
+
+
+
+
+
+ +

+setKey

+
+public void setKey(java.lang.String key)
+
+
+
+
+
+
+ +

+getTitle

+
+public java.lang.String getTitle()
+
+
+
+
+
+
+ +

+setTitle

+
+public void setTitle(java.lang.String title)
+
+
+
+
+
+
+ +

+getWorkSheetURL

+
+public java.lang.String getWorkSheetURL()
+
+
+
+
+
+
+ +

+setWorkSheetURL

+
+public void setWorkSheetURL(java.lang.String workSheetURL)
+
+
+
+
+
+
+ +

+getAuthorName

+
+public java.lang.String getAuthorName()
+
+
+
+
+
+
+ +

+setAuthorName

+
+public void setAuthorName(java.lang.String authorName)
+
+
+
+
+
+
+ +

+getAuthorEmail

+
+public java.lang.String getAuthorEmail()
+
+
+
+
+
+
+ +

+setAuthorEmail

+
+public void setAuthorEmail(java.lang.String authorEmail)
+
+
+
+
+
+
+ +

+getRowCount

+
+public int getRowCount()
+
+
+
+
+
+
+ +

+setRowCount

+
+public void setRowCount(int rowCount)
+
+
+
+
+
+
+ +

+getColCount

+
+public int getColCount()
+
+
+
+
+
+
+ +

+setColCount

+
+public void setColCount(int colCount)
+
+
+
+
+
+
+ +

+getCellInfo

+
+public WorkSheetCell getCellInfo()
+
+
+
+
+
+
+ +

+setCellInfo

+
+public void setCellInfo(WorkSheetCell cellInfo)
+
+
+
+
+
+
+ +

+getCells

+
+public java.util.ArrayList<WorkSheetCell> getCells()
+
+
+
+
+
+
+ +

+setCells

+
+public void setCells(java.util.ArrayList<WorkSheetCell> cells)
+
+
+
+
+
+
+ +

+addCell

+
+public void addCell(WorkSheetCell cell)
+
+
+
+
+
+
+ +

+getResID

+
+public java.lang.String getResID()
+
+
+
+
+
+
+ +

+setResID

+
+public void setResID(java.lang.String resID)
+
+
+
+
+
+
+ +

+getSummary

+
+public java.lang.String getSummary()
+
+
+
+
+
+
+ +

+setSummary

+
+public void setSummary(java.lang.String summary)
+
+
+
+
+
+
+ +

+getCols

+
+public java.util.ArrayList<java.lang.String> getCols()
+
+
+
+
+
+
+ +

+addCol

+
+public void addCol(java.lang.String colName)
+
+
+
+
+
+
+ +

+setCols

+
+public void setCols(java.util.ArrayList<java.lang.String> cols)
+
+
+
+
+
+
+ +

+getFields

+
+public java.util.ArrayList<Field> getFields()
+
+
+
+
+
+
+ +

+addField

+
+public void addField(Field f)
+
+
+
+
+
+
+ +

+setFields

+
+public void setFields(java.util.ArrayList<Field> fields)
+
+
+
+
+
+
+ +

+getAclRole

+
+public java.lang.String getAclRole()
+
+
+
+
+
+
+ +

+setAclRole

+
+public void setAclRole(java.lang.String aclRole)
+
+
+
+
+
+
+ +

+getAclScopeType

+
+public java.lang.String getAclScopeType()
+
+
+
+
+
+
+ +

+setAclScopeType

+
+public void setAclScopeType(java.lang.String aclScopeType)
+
+
+
+
+
+
+ +

+getAclScopeValue

+
+public java.lang.String getAclScopeValue()
+
+
+
+
+
+
+ +

+setAclScopeValue

+
+public void setAclScopeValue(java.lang.String aclScopeValue)
+
+
+
+
+
+
+ +

+getEditLink

+
+public java.lang.String getEditLink()
+
+
+
+
+
+
+ +

+setEditLink

+
+public void setEditLink(java.lang.String editLink)
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/sp/Feed.html b/jars/gss-lib-2.2/javadoc/com/pras/sp/Feed.html new file mode 100644 index 0000000..6f3098c --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/sp/Feed.html @@ -0,0 +1,409 @@ + + + + + + +Feed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pras.sp +
+Class Feed

+
+java.lang.Object
+  extended by com.pras.sp.Feed
+
+
+
+
public class Feed
extends java.lang.Object
+ + +

+This class is to hold Spreadsheet Feed data +

+ +

+

+
Author:
+
Prasanta Paul
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
Feed() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidaddEntry(Entry e) + +
+           
+ voidclearEntries() + +
+           
+ java.util.ArrayList<Entry>getEntries() + +
+           
+ java.lang.StringgetEtag() + +
+           
+ java.lang.StringgetId() + +
+           
+ java.lang.StringgetTitle() + +
+           
+ voidsetEtag(java.lang.String etag) + +
+           
+ voidsetId(java.lang.String id) + +
+           
+ voidsetTitle(java.lang.String title) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Feed

+
+public Feed()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getId

+
+public java.lang.String getId()
+
+
+
+
+
+
+ +

+setId

+
+public void setId(java.lang.String id)
+
+
+
+
+
+
+ +

+getEtag

+
+public java.lang.String getEtag()
+
+
+
+
+
+
+ +

+setEtag

+
+public void setEtag(java.lang.String etag)
+
+
+
+
+
+
+ +

+getTitle

+
+public java.lang.String getTitle()
+
+
+
+
+
+
+ +

+setTitle

+
+public void setTitle(java.lang.String title)
+
+
+
+
+
+
+ +

+getEntries

+
+public java.util.ArrayList<Entry> getEntries()
+
+
+
+
+
+
+ +

+addEntry

+
+public void addEntry(Entry e)
+
+
+
+
+
+
+ +

+clearEntries

+
+public void clearEntries()
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/sp/Field.html b/jars/gss-lib-2.2/javadoc/com/pras/sp/Field.html new file mode 100644 index 0000000..d61dc14 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/sp/Field.html @@ -0,0 +1,352 @@ + + + + + + +Field + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pras.sp +
+Class Field

+
+java.lang.Object
+  extended by com.pras.sp.Field
+
+
+
+
public class Field
extends java.lang.Object
+ + +

+Class for Table Feed data record in Feed XML +

+ +

+

+
Author:
+
Prasanta Paul
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
Field() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ java.lang.StringgetColName() + +
+           
+ java.lang.StringgetIndex() + +
+           
+ java.lang.StringgetValue() + +
+           
+ voidsetColName(java.lang.String colName) + +
+           
+ voidsetIndex(java.lang.String index) + +
+           
+ voidsetValue(java.lang.String value) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Field

+
+public Field()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getColName

+
+public java.lang.String getColName()
+
+
+
+
+
+
+ +

+setColName

+
+public void setColName(java.lang.String colName)
+
+
+
+
+
+
+ +

+getValue

+
+public java.lang.String getValue()
+
+
+
+
+
+
+ +

+setValue

+
+public void setValue(java.lang.String value)
+
+
+
+
+
+
+ +

+getIndex

+
+public java.lang.String getIndex()
+
+
+
+
+
+
+ +

+setIndex

+
+public void setIndex(java.lang.String index)
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/sp/ParseFeed.html b/jars/gss-lib-2.2/javadoc/com/pras/sp/ParseFeed.html new file mode 100644 index 0000000..6bacefb --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/sp/ParseFeed.html @@ -0,0 +1,428 @@ + + + + + + +ParseFeed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pras.sp +
+Class ParseFeed

+
+java.lang.Object
+  extended by org.xml.sax.helpers.DefaultHandler
+      extended by com.pras.sp.ParseFeed
+
+
+
All Implemented Interfaces:
org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler
+
+
+
+
public class ParseFeed
extends org.xml.sax.helpers.DefaultHandler
+ + +

+Using SAX Parser, to keep the compatibility with Android +

+ +

+

+
Author:
+
Prasanta Paul
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
ParseFeed() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidcharacters(char[] ch, + int start, + int length) + +
+           
+static voiddoCustomizationForSDK() + +
+           
+ voidendDocument() + +
+           
+ voidendElement(java.lang.String uri, + java.lang.String localName, + java.lang.String name) + +
+           
+ Feedparse(byte[] data) + +
+           
+ voidstartDocument() + +
+           
+ voidstartElement(java.lang.String uri, + java.lang.String localName, + java.lang.String name, + org.xml.sax.Attributes attributes) + +
+           
+ + + + + + + +
Methods inherited from class org.xml.sax.helpers.DefaultHandler
endPrefixMapping, error, fatalError, ignorableWhitespace, notationDecl, processingInstruction, resolveEntity, setDocumentLocator, skippedEntity, startPrefixMapping, unparsedEntityDecl, warning
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ParseFeed

+
+public ParseFeed()
+
+
+ + + + + + + + +
+Method Detail
+ +

+doCustomizationForSDK

+
+public static void doCustomizationForSDK()
+
+
+
+
+
+
+ +

+parse

+
+public Feed parse(byte[] data)
+
+
+
+
+
+
+ +

+characters

+
+public void characters(char[] ch,
+                       int start,
+                       int length)
+                throws org.xml.sax.SAXException
+
+
+
Specified by:
characters in interface org.xml.sax.ContentHandler
Overrides:
characters in class org.xml.sax.helpers.DefaultHandler
+
+
+ +
Throws: +
org.xml.sax.SAXException
+
+
+
+ +

+startDocument

+
+public void startDocument()
+                   throws org.xml.sax.SAXException
+
+
+
Specified by:
startDocument in interface org.xml.sax.ContentHandler
Overrides:
startDocument in class org.xml.sax.helpers.DefaultHandler
+
+
+ +
Throws: +
org.xml.sax.SAXException
+
+
+
+ +

+startElement

+
+public void startElement(java.lang.String uri,
+                         java.lang.String localName,
+                         java.lang.String name,
+                         org.xml.sax.Attributes attributes)
+                  throws org.xml.sax.SAXException
+
+
+
Specified by:
startElement in interface org.xml.sax.ContentHandler
Overrides:
startElement in class org.xml.sax.helpers.DefaultHandler
+
+
+ +
Throws: +
org.xml.sax.SAXException
+
+
+
+ +

+endDocument

+
+public void endDocument()
+                 throws org.xml.sax.SAXException
+
+
+
Specified by:
endDocument in interface org.xml.sax.ContentHandler
Overrides:
endDocument in class org.xml.sax.helpers.DefaultHandler
+
+
+ +
Throws: +
org.xml.sax.SAXException
+
+
+
+ +

+endElement

+
+public void endElement(java.lang.String uri,
+                       java.lang.String localName,
+                       java.lang.String name)
+                throws org.xml.sax.SAXException
+
+
+
Specified by:
endElement in interface org.xml.sax.ContentHandler
Overrides:
endElement in class org.xml.sax.helpers.DefaultHandler
+
+
+ +
Throws: +
org.xml.sax.SAXException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/sp/class-use/Entry.html b/jars/gss-lib-2.2/javadoc/com/pras/sp/class-use/Entry.html new file mode 100644 index 0000000..0483c6a --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/sp/class-use/Entry.html @@ -0,0 +1,267 @@ + + + + + + +Uses of Class com.pras.sp.Entry + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
com.pras.sp.Entry

+
+ + + + + + + + + + + + + +
+Packages that use Entry
com.pras  
com.pras.sp  
+  +

+ + + + + +
+Uses of Entry in com.pras
+  +

+ + + + + + + + + + + + + +
Methods in com.pras that return Entry
+ EntryWorkSheet.getEntry() + +
+          Get Entry instance for this WorkSheet.
+ EntrySpreadSheet.getEntry() + +
+          Get Entry Object of SpreadSheet Feed.
+  +

+ + + + + + + + + + + + + +
Methods in com.pras with parameters of type Entry
+ voidWorkSheet.setEntry(Entry entry) + +
+          Set Feed Entry instance
+ voidSpreadSheet.setEntry(Entry entry) + +
+          Set Entry Object of SpreadSheet Feed.
+  +

+ + + + + + + + +
Constructors in com.pras with parameters of type Entry
SpreadSheet(Entry entry) + +
+           
+  +

+ + + + + +
+Uses of Entry in com.pras.sp
+  +

+ + + + + + + + + +
Methods in com.pras.sp that return types with arguments of type Entry
+ java.util.ArrayList<Entry>Feed.getEntries() + +
+           
+  +

+ + + + + + + + + +
Methods in com.pras.sp with parameters of type Entry
+ voidFeed.addEntry(Entry e) + +
+           
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/sp/class-use/Feed.html b/jars/gss-lib-2.2/javadoc/com/pras/sp/class-use/Feed.html new file mode 100644 index 0000000..93f67ad --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/sp/class-use/Feed.html @@ -0,0 +1,176 @@ + + + + + + +Uses of Class com.pras.sp.Feed + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
com.pras.sp.Feed

+
+ + + + + + + + + +
+Packages that use Feed
com.pras.sp  
+  +

+ + + + + +
+Uses of Feed in com.pras.sp
+  +

+ + + + + + + + + +
Methods in com.pras.sp that return Feed
+ FeedParseFeed.parse(byte[] data) + +
+           
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/sp/class-use/Field.html b/jars/gss-lib-2.2/javadoc/com/pras/sp/class-use/Field.html new file mode 100644 index 0000000..8480777 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/sp/class-use/Field.html @@ -0,0 +1,208 @@ + + + + + + +Uses of Class com.pras.sp.Field + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
com.pras.sp.Field

+
+ + + + + + + + + +
+Packages that use Field
com.pras.sp  
+  +

+ + + + + +
+Uses of Field in com.pras.sp
+  +

+ + + + + + + + + +
Methods in com.pras.sp that return types with arguments of type Field
+ java.util.ArrayList<Field>Entry.getFields() + +
+           
+  +

+ + + + + + + + + +
Methods in com.pras.sp with parameters of type Field
+ voidEntry.addField(Field f) + +
+           
+  +

+ + + + + + + + + +
Method parameters in com.pras.sp with type arguments of type Field
+ voidEntry.setFields(java.util.ArrayList<Field> fields) + +
+           
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/sp/class-use/ParseFeed.html b/jars/gss-lib-2.2/javadoc/com/pras/sp/class-use/ParseFeed.html new file mode 100644 index 0000000..740b57c --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/sp/class-use/ParseFeed.html @@ -0,0 +1,140 @@ + + + + + + +Uses of Class com.pras.sp.ParseFeed + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
com.pras.sp.ParseFeed

+
+No usage of com.pras.sp.ParseFeed +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/sp/package-frame.html b/jars/gss-lib-2.2/javadoc/com/pras/sp/package-frame.html new file mode 100644 index 0000000..fd69d65 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/sp/package-frame.html @@ -0,0 +1,38 @@ + + + + + + +com.pras.sp + + + + + + + + + + + +com.pras.sp + + + + +
+Classes  + +
+Entry +
+Feed +
+Field +
+ParseFeed
+ + + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/sp/package-summary.html b/jars/gss-lib-2.2/javadoc/com/pras/sp/package-summary.html new file mode 100644 index 0000000..4866ef0 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/sp/package-summary.html @@ -0,0 +1,166 @@ + + + + + + +com.pras.sp + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package com.pras.sp +

+ + + + + + + + + + + + + + + + + + + + + +
+Class Summary
EntryThis class represents an entry of SpreadSheet XML Feed
FeedThis class is to hold Spreadsheet Feed data
FieldClass for Table Feed data record in Feed XML
ParseFeedUsing SAX Parser, to keep the compatibility with Android
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/sp/package-tree.html b/jars/gss-lib-2.2/javadoc/com/pras/sp/package-tree.html new file mode 100644 index 0000000..893b678 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/sp/package-tree.html @@ -0,0 +1,152 @@ + + + + + + +com.pras.sp Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package com.pras.sp +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+
    +
  • java.lang.Object
      +
    • org.xml.sax.helpers.DefaultHandler (implements org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler) + +
    • com.pras.sp.Entry
    • com.pras.sp.Feed
    • com.pras.sp.Field
    +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/sp/package-use.html b/jars/gss-lib-2.2/javadoc/com/pras/sp/package-use.html new file mode 100644 index 0000000..617682b --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/sp/package-use.html @@ -0,0 +1,197 @@ + + + + + + +Uses of Package com.pras.sp + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Package
com.pras.sp

+
+ + + + + + + + + + + + + +
+Packages that use com.pras.sp
com.pras  
com.pras.sp  
+  +

+ + + + + + + + +
+Classes in com.pras.sp used by com.pras
Entry + +
+          This class represents an entry of SpreadSheet XML Feed
+  +

+ + + + + + + + + + + + + + +
+Classes in com.pras.sp used by com.pras.sp
Entry + +
+          This class represents an entry of SpreadSheet XML Feed
Feed + +
+          This class is to hold Spreadsheet Feed data
Field + +
+          Class for Table Feed data record in Feed XML
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/table/Record.html b/jars/gss-lib-2.2/javadoc/com/pras/table/Record.html new file mode 100644 index 0000000..b51a122 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/table/Record.html @@ -0,0 +1,411 @@ + + + + + + +Record + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pras.table +
+Class Record

+
+java.lang.Object
+  extended by com.pras.table.Record
+
+
+
+
public class Record
extends java.lang.Object
+ + +

+This class represents individual records of the Table (associated with an WorkSheet) +

+ +

+

+
Author:
+
Prasanta Paul
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
Record() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidaddData(java.lang.String colName, + java.lang.String value) + +
+          Add data into this Record
+ voidclearData() + +
+          Remove all stored data from this Record
+ java.util.HashMap<java.lang.String,java.lang.String>getData() + +
+          Get data of this Record
+ java.lang.StringgetEditURL() + +
+          Get Record Edit URL
+ java.lang.StringgetId() + +
+          Get ID URL of this Record
+ voidsetData(java.util.HashMap<java.lang.String,java.lang.String> data) + +
+          Set Data into this Record
+ voidsetEditURL(java.lang.String editURL) + +
+          Set Record Edit URL
+ voidsetId(java.lang.String id) + +
+          Set ID URL of this Record
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Record

+
+public Record()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getEditURL

+
+public java.lang.String getEditURL()
+
+
Get Record Edit URL +

+

+ +
Returns:
+
+
+
+ +

+setEditURL

+
+public void setEditURL(java.lang.String editURL)
+
+
Set Record Edit URL +

+

+
Parameters:
editURL -
+
+
+
+ +

+getData

+
+public java.util.HashMap<java.lang.String,java.lang.String> getData()
+
+
Get data of this Record +

+

+ +
Returns:
+
+
+
+ +

+clearData

+
+public void clearData()
+
+
Remove all stored data from this Record +

+

+
+
+
+
+ +

+addData

+
+public void addData(java.lang.String colName,
+                    java.lang.String value)
+
+
Add data into this Record +

+

+
Parameters:
colName -
value -
+
+
+
+ +

+setData

+
+public void setData(java.util.HashMap<java.lang.String,java.lang.String> data)
+
+
Set Data into this Record +

+

+
Parameters:
data -
+
+
+
+ +

+getId

+
+public java.lang.String getId()
+
+
Get ID URL of this Record +

+

+ +
Returns:
+
+
+
+ +

+setId

+
+public void setId(java.lang.String id)
+
+
Set ID URL of this Record +

+

+
Parameters:
id -
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/table/Table.html b/jars/gss-lib-2.2/javadoc/com/pras/table/Table.html new file mode 100644 index 0000000..3f5fc35 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/table/Table.html @@ -0,0 +1,580 @@ + + + + + + +Table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pras.table +
+Class Table

+
+java.lang.Object
+  extended by com.pras.table.Table
+
+
+
+
public class Table
extends java.lang.Object
+ + +

+Table associated with WorkSheet. It holds data and internally used in WorkSheet. +

+ +

+

+
Author:
+
Prasanta Paul
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
Table() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidaddRecord(Record data) + +
+           
+ voidclearData() + +
+           
+ intgetColNum() + +
+           
+ java.util.ArrayList<java.lang.String>getCols() + +
+           
+ java.lang.StringgetDescription() + +
+           
+ java.lang.StringgetId() + +
+           
+ java.lang.StringgetName() + +
+           
+ java.util.ArrayList<Record>getRecords() + +
+           
+ intgetRowNum() + +
+           
+ java.lang.StringgetUrl() + +
+           
+ voidsetColNum(int colNum) + +
+           
+ voidsetCols(java.util.ArrayList<java.lang.String> cols) + +
+           
+ voidsetDescription(java.lang.String description) + +
+           
+ voidsetId(java.lang.String id) + +
+           
+ voidsetName(java.lang.String name) + +
+           
+ voidsetRecords(java.util.ArrayList<Record> records) + +
+           
+ voidsetRowNum(int rowNum) + +
+           
+ voidsetUrl(java.lang.String url) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Table

+
+public Table()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getId

+
+public java.lang.String getId()
+
+
+
+
+
+
+ +

+setId

+
+public void setId(java.lang.String id)
+
+
+
+
+
+
+ +

+getName

+
+public java.lang.String getName()
+
+
+
+
+
+
+ +

+setName

+
+public void setName(java.lang.String name)
+
+
+
+
+
+
+ +

+getUrl

+
+public java.lang.String getUrl()
+
+
+
+
+
+
+ +

+getDescription

+
+public java.lang.String getDescription()
+
+
+
+
+
+
+ +

+setDescription

+
+public void setDescription(java.lang.String description)
+
+
+
+
+
+
+ +

+setUrl

+
+public void setUrl(java.lang.String url)
+
+
+
+
+
+
+ +

+getRowNum

+
+public int getRowNum()
+
+
+
+
+
+
+ +

+setRowNum

+
+public void setRowNum(int rowNum)
+
+
+
+
+
+
+ +

+getColNum

+
+public int getColNum()
+
+
+
+
+
+
+ +

+setColNum

+
+public void setColNum(int colNum)
+
+
+
+
+
+
+ +

+getCols

+
+public java.util.ArrayList<java.lang.String> getCols()
+
+
+
+
+
+
+ +

+setCols

+
+public void setCols(java.util.ArrayList<java.lang.String> cols)
+
+
+
+
+
+
+ +

+getRecords

+
+public java.util.ArrayList<Record> getRecords()
+
+
+
+
+
+
+ +

+addRecord

+
+public void addRecord(Record data)
+
+
+
+
+
+
+ +

+clearData

+
+public void clearData()
+
+
+
+
+
+
+ +

+setRecords

+
+public void setRecords(java.util.ArrayList<Record> records)
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/table/class-use/Record.html b/jars/gss-lib-2.2/javadoc/com/pras/table/class-use/Record.html new file mode 100644 index 0000000..47e7e54 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/table/class-use/Record.html @@ -0,0 +1,290 @@ + + + + + + +Uses of Class com.pras.table.Record + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
com.pras.table.Record

+
+ + + + + + + + + + + + + +
+Packages that use Record
com.pras  
com.pras.table  
+  +

+ + + + + +
+Uses of Record in com.pras
+  +

+ + + + + + + + + + + + + + + + + + + + + +
Methods in com.pras that return types with arguments of type Record
+ java.util.ArrayList<Record>WorkSheet.getRecords() + +
+          Get Cached Data (previously retrieved from server)
+ java.util.ArrayList<Record>WorkSheet.getRecords(java.lang.String key) + +
+          Get data stored in this WorkSheet
+ java.util.ArrayList<Record>WorkSheet.getRecords(java.lang.String key, + boolean doReverse, + java.lang.String sq, + java.lang.String orderBy) + +
+          Get data stored in this WorkSheet.
+ java.util.ArrayList<Record>WorkSheet.getRecords(java.lang.String key, + java.lang.String sq) + +
+           
+  +

+ + + + + + + + + + + + + +
Methods in com.pras with parameters of type Record
+ voidWorkSheet.deleteRecord(Record record) + +
+          Delete a Record
+ voidWorkSheet.updateRecord(Record record) + +
+          Record instance you want to Update + Keep only those data which you want to update for this record
+  +

+ + + + + +
+Uses of Record in com.pras.table
+  +

+ + + + + + + + + +
Methods in com.pras.table that return types with arguments of type Record
+ java.util.ArrayList<Record>Table.getRecords() + +
+           
+  +

+ + + + + + + + + +
Methods in com.pras.table with parameters of type Record
+ voidTable.addRecord(Record data) + +
+           
+  +

+ + + + + + + + + +
Method parameters in com.pras.table with type arguments of type Record
+ voidTable.setRecords(java.util.ArrayList<Record> records) + +
+           
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/table/class-use/Table.html b/jars/gss-lib-2.2/javadoc/com/pras/table/class-use/Table.html new file mode 100644 index 0000000..6bc2f87 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/table/class-use/Table.html @@ -0,0 +1,140 @@ + + + + + + +Uses of Class com.pras.table.Table + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
com.pras.table.Table

+
+No usage of com.pras.table.Table +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/table/package-frame.html b/jars/gss-lib-2.2/javadoc/com/pras/table/package-frame.html new file mode 100644 index 0000000..af4fba7 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/table/package-frame.html @@ -0,0 +1,34 @@ + + + + + + +com.pras.table + + + + + + + + + + + +com.pras.table + + + + +
+Classes  + +
+Record +
+Table
+ + + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/table/package-summary.html b/jars/gss-lib-2.2/javadoc/com/pras/table/package-summary.html new file mode 100644 index 0000000..04fd223 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/table/package-summary.html @@ -0,0 +1,158 @@ + + + + + + +com.pras.table + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package com.pras.table +

+ + + + + + + + + + + + + +
+Class Summary
RecordThis class represents individual records of the Table (associated with an WorkSheet)
TableTable associated with WorkSheet.
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/table/package-tree.html b/jars/gss-lib-2.2/javadoc/com/pras/table/package-tree.html new file mode 100644 index 0000000..a74eeb2 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/table/package-tree.html @@ -0,0 +1,149 @@ + + + + + + +com.pras.table Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package com.pras.table +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+
    +
  • java.lang.Object +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/com/pras/table/package-use.html b/jars/gss-lib-2.2/javadoc/com/pras/table/package-use.html new file mode 100644 index 0000000..0a6d4b8 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/com/pras/table/package-use.html @@ -0,0 +1,185 @@ + + + + + + +Uses of Package com.pras.table + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Package
com.pras.table

+
+ + + + + + + + + + + + + +
+Packages that use com.pras.table
com.pras  
com.pras.table  
+  +

+ + + + + + + + +
+Classes in com.pras.table used by com.pras
Record + +
+          This class represents individual records of the Table (associated with an WorkSheet)
+  +

+ + + + + + + + +
+Classes in com.pras.table used by com.pras.table
Record + +
+          This class represents individual records of the Table (associated with an WorkSheet)
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/constant-values.html b/jars/gss-lib-2.2/javadoc/constant-values.html new file mode 100644 index 0000000..8ff0007 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/constant-values.html @@ -0,0 +1,212 @@ + + + + + + +Constant Field Values + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Constant Field Values

+
+
+Contents + + + + + + +
+com.pras.*
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
com.pras.conn.HttpConHandler
+public static final java.lang.StringAUTHORIZATION_HTTP_HEADER"Authorization"
+public static final java.lang.StringCONTENT_LENGTH_HTTP_HEADER"Content-Length"
+public static final java.lang.StringCONTENT_TYPE_HTTP_HEADER"Content-Type"
+public static final java.lang.StringGDATA_VERSION_HTTP_HEADER"GData-Version"
+public static final intHTTP_DELETE163
+public static final intHTTP_GET161
+public static final intHTTP_POST162
+public static final intHTTP_PUT164
+ +

+ +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/deprecated-list.html b/jars/gss-lib-2.2/javadoc/deprecated-list.html new file mode 100644 index 0000000..a4e9a5c --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/deprecated-list.html @@ -0,0 +1,142 @@ + + + + + + +Deprecated List + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Deprecated API

+
+
+Contents
    +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/help-doc.html b/jars/gss-lib-2.2/javadoc/help-doc.html new file mode 100644 index 0000000..ffb270f --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/help-doc.html @@ -0,0 +1,219 @@ + + + + + + +API Help + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+How This API Document Is Organized

+
+This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

+Overview

+
+ +

+The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

+

+Package

+
+ +

+Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

    +
  • Interfaces (italic)
  • Classes
  • Enums
  • Exceptions
  • Errors
  • Annotation Types
+
+

+Class/Interface

+
+ +

+Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
  • Class inheritance diagram
  • Direct Subclasses
  • All Known Subinterfaces
  • All Known Implementing Classes
  • Class/interface declaration
  • Class/interface description +

    +

  • Nested Class Summary
  • Field Summary
  • Constructor Summary
  • Method Summary +

    +

  • Field Detail
  • Constructor Detail
  • Method Detail
+Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
+ +

+Annotation Type

+
+ +

+Each annotation type has its own separate page with the following sections:

    +
  • Annotation Type declaration
  • Annotation Type description
  • Required Element Summary
  • Optional Element Summary
  • Element Detail
+
+ +

+Enum

+
+ +

+Each enum has its own separate page with the following sections:

    +
  • Enum declaration
  • Enum description
  • Enum Constant Summary
  • Enum Constant Detail
+
+

+Use

+
+Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.
+

+Tree (Class Hierarchy)

+
+There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
    +
  • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
  • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
+
+

+Deprecated API

+
+The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
+

+Index

+
+The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
+

+Prev/Next

+These links take you to the next or previous class, interface, package, or related page.

+Frames/No Frames

+These links show and hide the HTML frames. All pages are available with or without frames. +

+

+Serialized Form

+Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description. +

+

+Constant Field Values

+The Constant Field Values page lists the static final fields and their values. +

+ + +This help file applies to API documentation generated using the standard doclet. + +
+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/index-files/index-1.html b/jars/gss-lib-2.2/javadoc/index-files/index-1.html new file mode 100644 index 0000000..aa35cbd --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/index-files/index-1.html @@ -0,0 +1,191 @@ + + + + + + +A-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+

+A

+
+
Account - Class in com.pras.auth
Account data holding class
Account() - +Constructor for class com.pras.auth.Account +
  +
addCell(WorkSheetCell) - +Method in class com.pras.sp.Entry +
  +
addCol(String) - +Method in class com.pras.sp.Entry +
  +
addCollaborator(Collaborator) - +Method in class com.pras.SpreadSheet +
Add a Collaborator +
addData(String, String) - +Method in class com.pras.table.Record +
Add data into this Record +
addEntry(Entry) - +Method in class com.pras.sp.Feed +
  +
addField(Field) - +Method in class com.pras.sp.Entry +
  +
addListRow(HashMap<String, String>) - +Method in class com.pras.WorkSheet +
Add List Feed row. +
addListWorkSheet(String, int, String[]) - +Method in class com.pras.SpreadSheet +
Create List feed based WorkSheet +
addRecord(Record) - +Method in class com.pras.table.Table +
  +
addRecord(String, HashMap<String, String>) - +Method in class com.pras.WorkSheet +
Add record into WorkSheet. +
addSharePermission(SpreadSheet, Collaborator[]) - +Method in class com.pras.SpreadSheetFactory +
Share a SpreadSheet with a given list of Collaborators. +
addWorkSheet(String) - +Method in class com.pras.SpreadSheet +
This will create an WorkSheet without Table. +
addWorkSheet(String, String[]) - +Method in class com.pras.SpreadSheet +
Add WorkSheet + This will create an Internal Table and manage WorkSheet data in that Table. +
addWorkSheet(String, String, int, String[]) - +Method in class com.pras.SpreadSheet +
Add WorkSheet
+ It will create a Table for this WorkSheet. +
Authenticator - Interface in com.pras.auth
 
AUTHORIZATION_HTTP_HEADER - +Static variable in class com.pras.conn.HttpConHandler +
  +
authToken - +Static variable in class com.pras.SpreadSheetFactory +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+ + + diff --git a/jars/gss-lib-2.2/javadoc/index-files/index-10.html b/jars/gss-lib-2.2/javadoc/index-files/index-10.html new file mode 100644 index 0000000..17f17d3 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/index-files/index-10.html @@ -0,0 +1,142 @@ + + + + + + +L-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+

+L

+
+
Log - Class in com.pras
Based on your target platform- edit this file and add appropriate Log console + e.g.
Log() - +Constructor for class com.pras.Log +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+ + + diff --git a/jars/gss-lib-2.2/javadoc/index-files/index-11.html b/jars/gss-lib-2.2/javadoc/index-files/index-11.html new file mode 100644 index 0000000..5c5de7c --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/index-files/index-11.html @@ -0,0 +1,150 @@ + + + + + + +P-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+

+P

+
+
p(String, String) - +Static method in class com.pras.Log +
Pring Log message +
parse(byte[]) - +Method in class com.pras.sp.ParseFeed +
  +
ParseFeed - Class in com.pras.sp
Using SAX Parser, to keep the compatibility with Android
ParseFeed() - +Constructor for class com.pras.sp.ParseFeed +
  +
printErrorLog() - +Method in class com.pras.conn.Response +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+ + + diff --git a/jars/gss-lib-2.2/javadoc/index-files/index-12.html b/jars/gss-lib-2.2/javadoc/index-files/index-12.html new file mode 100644 index 0000000..b31475b --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/index-files/index-12.html @@ -0,0 +1,156 @@ + + + + + + +R-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+

+R

+
+
Record - Class in com.pras.table
This class represents individual records of the Table (associated with an WorkSheet)
Record() - +Constructor for class com.pras.table.Record +
  +
removeSharePermission(Collaborator) - +Method in class com.pras.SpreadSheetFactory +
Remove Share access of a selected user. +
Response - Class in com.pras.conn
Wrapper class to hold Response from Server, Connection Exception etc.
Response() - +Constructor for class com.pras.conn.Response +
  +
ROLE_OWNER - +Static variable in class com.pras.Collaborator +
Owner of a SpreadSheet +
ROLE_READER - +Static variable in class com.pras.Collaborator +
Able to Read +
ROLE_WRITER - +Static variable in class com.pras.Collaborator +
Able to Read/Write and Further Share as Reader/Writer +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+ + + diff --git a/jars/gss-lib-2.2/javadoc/index-files/index-13.html b/jars/gss-lib-2.2/javadoc/index-files/index-13.html new file mode 100644 index 0000000..70dfa40 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/index-files/index-13.html @@ -0,0 +1,361 @@ + + + + + + +S-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+

+S

+
+
SCOPE_DEFAULT - +Static variable in class com.pras.Collaborator +
Use this scope to make the SpreadSheet publicly accessible to anyuser +
SCOPE_DOMAIN - +Static variable in class com.pras.Collaborator +
Use this scope to share it with a Domain +
SCOPE_GROUP - +Static variable in class com.pras.Collaborator +
Use this scope to share it with a Group +
SCOPE_USER - +Static variable in class com.pras.Collaborator +
Use this scope to share it with an Email account +
setAccountType(String) - +Method in class com.pras.auth.Account +
  +
setAclRole(String) - +Method in class com.pras.sp.Entry +
  +
setAclScopeType(String) - +Method in class com.pras.sp.Entry +
  +
setAclScopeValue(String) - +Method in class com.pras.sp.Entry +
  +
setAuthorEmail(String) - +Method in class com.pras.sp.Entry +
  +
setAuthorName(String) - +Method in class com.pras.sp.Entry +
  +
setCellInfo(WorkSheetCell) - +Method in class com.pras.sp.Entry +
  +
setCells(ArrayList<WorkSheetCell>) - +Method in class com.pras.sp.Entry +
  +
setCells(ArrayList<WorkSheetCell>) - +Method in class com.pras.WorkSheetRow +
  +
setCol(int) - +Method in class com.pras.WorkSheetCell +
  +
setColCount(int) - +Method in class com.pras.sp.Entry +
  +
setColCount(int) - +Method in class com.pras.WorkSheet +
Set column count of this WorkSheet +
setCollaborators(ArrayList<Collaborator>) - +Method in class com.pras.SpreadSheet +
Set a list of Collaborators +
setColName(String) - +Method in class com.pras.sp.Field +
  +
setColNum(int) - +Method in class com.pras.table.Table +
  +
setCols(ArrayList<String>) - +Method in class com.pras.sp.Entry +
  +
setCols(ArrayList<String>) - +Method in class com.pras.table.Table +
  +
setColumns(String[]) - +Method in class com.pras.WorkSheet +
Set columns of ListFeed +
setData(HashMap<String, String>) - +Method in class com.pras.table.Record +
Set Data into this Record +
setDescription(String) - +Method in class com.pras.table.Table +
  +
setEditLink(String) - +Method in class com.pras.Collaborator +
Set Edit Link +
setEditLink(String) - +Method in class com.pras.sp.Entry +
  +
setEditURL(String) - +Method in class com.pras.table.Record +
Set Record Edit URL +
setEmail(String) - +Method in class com.pras.auth.Account +
  +
setEntry(Entry) - +Method in class com.pras.SpreadSheet +
Set Entry Object of SpreadSheet Feed. +
setEntry(Entry) - +Method in class com.pras.WorkSheet +
Set Feed Entry instance +
setError(boolean) - +Method in class com.pras.conn.Response +
  +
setErrorStreamMsg(String) - +Method in class com.pras.conn.Response +
  +
setETAG(String) - +Method in class com.pras.sp.Entry +
  +
setEtag(String) - +Method in class com.pras.sp.Feed +
  +
setException(Exception) - +Method in class com.pras.conn.Response +
  +
setFields(ArrayList<Field>) - +Method in class com.pras.sp.Entry +
  +
setId(String) - +Method in class com.pras.sp.Entry +
  +
setId(String) - +Method in class com.pras.sp.Feed +
  +
setId(String) - +Method in class com.pras.table.Record +
Set ID URL of this Record +
setId(String) - +Method in class com.pras.table.Table +
  +
setId(String) - +Method in class com.pras.WorkSheetRow +
  +
setIndex(String) - +Method in class com.pras.sp.Field +
  +
setKey(String) - +Method in class com.pras.sp.Entry +
  +
setName(String) - +Method in class com.pras.table.Table +
  +
setName(String) - +Method in class com.pras.WorkSheetCell +
  +
setOutput(String) - +Method in class com.pras.conn.Response +
  +
setPassword(String) - +Method in class com.pras.auth.Account +
  +
setRecords(ArrayList<Record>) - +Method in class com.pras.table.Table +
  +
setResID(String) - +Method in class com.pras.sp.Entry +
  +
setResponseCode(String) - +Method in class com.pras.conn.Response +
  +
setResponseMessage(String) - +Method in class com.pras.conn.Response +
  +
setRole(String) - +Method in class com.pras.Collaborator +
Set Role - {"owner", "writer", "reader"} +
setRow(int) - +Method in class com.pras.WorkSheetCell +
  +
setRowCount(int) - +Method in class com.pras.sp.Entry +
  +
setRowCount(int) - +Method in class com.pras.WorkSheet +
Set row count of this WorkSheet +
setRowIndex(String) - +Method in class com.pras.WorkSheetRow +
  +
setRowNum(int) - +Method in class com.pras.table.Table +
  +
setScopeType(String) - +Method in class com.pras.Collaborator +
Set Scope Type {"user", "group", "domain", "default"} +
setScopeValue(String) - +Method in class com.pras.Collaborator +
Set Scope Value +
setSummary(String) - +Method in class com.pras.sp.Entry +
  +
setTitle(String) - +Method in class com.pras.sp.Entry +
  +
setTitle(String) - +Method in class com.pras.sp.Feed +
  +
setTitle(String) - +Method in class com.pras.WorkSheet +
Set WorkSheet Title +
setType(String) - +Method in class com.pras.WorkSheetCell +
  +
setType(String) - +Method in class com.pras.WorkSheetRow +
  +
setUrl(String) - +Method in class com.pras.table.Table +
  +
setValue(String) - +Method in class com.pras.sp.Field +
  +
setValue(String) - +Method in class com.pras.WorkSheetCell +
  +
setWorkSheetID(String) - +Method in class com.pras.WorkSheet +
Set WorkSheet ID +
setWorkSheetURL(String) - +Method in class com.pras.sp.Entry +
  +
setWorkSheetURL(String) - +Method in class com.pras.WorkSheet +
Set WorkSheet +
SpreadSheet - Class in com.pras
This class represents a given Spreadsheet.
SpreadSheet(Entry) - +Constructor for class com.pras.SpreadSheet +
  +
SpreadSheetFactory - Class in com.pras
+ It is a SpreadSheet Generator Class.
startDocument() - +Method in class com.pras.sp.ParseFeed +
  +
startElement(String, String, String, Attributes) - +Method in class com.pras.sp.ParseFeed +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+ + + diff --git a/jars/gss-lib-2.2/javadoc/index-files/index-14.html b/jars/gss-lib-2.2/javadoc/index-files/index-14.html new file mode 100644 index 0000000..59de2da --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/index-files/index-14.html @@ -0,0 +1,147 @@ + + + + + + +T-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+

+T

+
+
Table - Class in com.pras.table
Table associated with WorkSheet.
Table() - +Constructor for class com.pras.table.Table +
  +
toString() - +Method in class com.pras.WorkSheetCell +
  +
toString() - +Method in class com.pras.WorkSheetRow +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+ + + diff --git a/jars/gss-lib-2.2/javadoc/index-files/index-15.html b/jars/gss-lib-2.2/javadoc/index-files/index-15.html new file mode 100644 index 0000000..43d16cb --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/index-files/index-15.html @@ -0,0 +1,145 @@ + + + + + + +U-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+

+U

+
+
updateListRow(String, WorkSheetRow, HashMap<String, String>) - +Method in class com.pras.WorkSheet +
Update List row +
updateRecord(Record) - +Method in class com.pras.WorkSheet +
Record instance you want to Update + Keep only those data which you want to update for this record +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+ + + diff --git a/jars/gss-lib-2.2/javadoc/index-files/index-16.html b/jars/gss-lib-2.2/javadoc/index-files/index-16.html new file mode 100644 index 0000000..38e9edc --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/index-files/index-16.html @@ -0,0 +1,148 @@ + + + + + + +W-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+

+W

+
+
WorkSheet - Class in com.pras
This class represents an WorkSheet and utility methods to manage WorkSheet data.
WorkSheet() - +Constructor for class com.pras.WorkSheet +
  +
WorkSheetCell - Class in com.pras
Individual Cell of the Work Sheet + One Row can have multiple Cells
WorkSheetCell() - +Constructor for class com.pras.WorkSheetCell +
  +
WorkSheetRow - Class in com.pras
Supporting class for list based data feed
WorkSheetRow() - +Constructor for class com.pras.WorkSheetRow +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+ + + diff --git a/jars/gss-lib-2.2/javadoc/index-files/index-2.html b/jars/gss-lib-2.2/javadoc/index-files/index-2.html new file mode 100644 index 0000000..427473c --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/index-files/index-2.html @@ -0,0 +1,142 @@ + + + + + + +B-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+

+B

+
+
BasicAuthenticatorImpl - Class in com.pras.auth
This will provide a basic and LOW Level way of getting Authetication Token + for various Google's services.
BasicAuthenticatorImpl(Account) - +Constructor for class com.pras.auth.BasicAuthenticatorImpl +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+ + + diff --git a/jars/gss-lib-2.2/javadoc/index-files/index-3.html b/jars/gss-lib-2.2/javadoc/index-files/index-3.html new file mode 100644 index 0000000..ff1423a --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/index-files/index-3.html @@ -0,0 +1,168 @@ + + + + + + +C-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+

+C

+
+
changeSharePermission(Collaborator, String) - +Method in class com.pras.SpreadSheetFactory +
Change Share permission for a particular ACL entry +
characters(char[], int, int) - +Method in class com.pras.sp.ParseFeed +
  +
clearCollaboratorList() - +Method in class com.pras.SpreadSheet +
Clear existing list of Collaborators +
clearData() - +Method in class com.pras.table.Record +
Remove all stored data from this Record +
clearData() - +Method in class com.pras.table.Table +
  +
clearEntries() - +Method in class com.pras.sp.Feed +
  +
Collaborator - Class in com.pras
ACL details of a SpreadSheet
Collaborator() - +Constructor for class com.pras.Collaborator +
  +
com.pras - package com.pras
 
com.pras.auth - package com.pras.auth
 
com.pras.conn - package com.pras.conn
 
com.pras.sp - package com.pras.sp
 
com.pras.table - package com.pras.table
 
CONTENT_LENGTH_HTTP_HEADER - +Static variable in class com.pras.conn.HttpConHandler +
  +
CONTENT_TYPE_HTTP_HEADER - +Static variable in class com.pras.conn.HttpConHandler +
  +
createSpreadSheet(String) - +Method in class com.pras.SpreadSheetFactory +
Create SpreadSheet with the given name +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+ + + diff --git a/jars/gss-lib-2.2/javadoc/index-files/index-4.html b/jars/gss-lib-2.2/javadoc/index-files/index-4.html new file mode 100644 index 0000000..cfd6be1 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/index-files/index-4.html @@ -0,0 +1,162 @@ + + + + + + +D-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+

+D

+
+
delete() - +Method in class com.pras.WorkSheet +
Delete this WorkSheet. +
deleteListRow(String, WorkSheetRow) - +Method in class com.pras.WorkSheet +
Delete List Row +
deleteRecord(Record) - +Method in class com.pras.WorkSheet +
Delete a Record +
deleteSpreadSheet(String) - +Method in class com.pras.SpreadSheetFactory +
Delete a SpreadSheet +
deleteWorkSheet(WorkSheet) - +Method in class com.pras.SpreadSheet +
Delete this WorkSheet +
disableLog() - +Static method in class com.pras.Log +
Disable logging. +
doConnect(String, int, HashMap<String, String>, String) - +Method in class com.pras.conn.HttpConHandler +
  +
doCustomizationForSDK() - +Static method in class com.pras.sp.ParseFeed +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+ + + diff --git a/jars/gss-lib-2.2/javadoc/index-files/index-5.html b/jars/gss-lib-2.2/javadoc/index-files/index-5.html new file mode 100644 index 0000000..9d0c320 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/index-files/index-5.html @@ -0,0 +1,159 @@ + + + + + + +E-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+

+E

+
+
enableLog() - +Static method in class com.pras.Log +
Enable logging +
encode(String) - +Static method in class com.pras.conn.HttpConHandler +
Encode URL parameters in UTF-8 format +
endDocument() - +Method in class com.pras.sp.ParseFeed +
  +
endElement(String, String, String) - +Method in class com.pras.sp.ParseFeed +
  +
Entry - Class in com.pras.sp
This class represents an entry of SpreadSheet XML Feed
Entry() - +Constructor for class com.pras.sp.Entry +
  +
equals(Object) - +Method in class com.pras.SpreadSheet +
  +
equals(Object) - +Method in class com.pras.WorkSheetRow +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+ + + diff --git a/jars/gss-lib-2.2/javadoc/index-files/index-6.html b/jars/gss-lib-2.2/javadoc/index-files/index-6.html new file mode 100644 index 0000000..5f4be44 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/index-files/index-6.html @@ -0,0 +1,147 @@ + + + + + + +F-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+

+F

+
+
Feed - Class in com.pras.sp
This class is to hold Spreadsheet Feed data
Feed() - +Constructor for class com.pras.sp.Feed +
  +
Field - Class in com.pras.sp
Class for Table Feed data record in Feed XML
Field() - +Constructor for class com.pras.sp.Field +
  +
flushMe() - +Method in class com.pras.SpreadSheetFactory +
Deallocate SpreadSheetFactory instance +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+ + + diff --git a/jars/gss-lib-2.2/javadoc/index-files/index-7.html b/jars/gss-lib-2.2/javadoc/index-files/index-7.html new file mode 100644 index 0000000..cdfa9dd --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/index-files/index-7.html @@ -0,0 +1,414 @@ + + + + + + +G-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+

+G

+
+
GDATA_VERSION_HTTP_HEADER - +Static variable in class com.pras.conn.HttpConHandler +
  +
getAccountType() - +Method in class com.pras.auth.Account +
  +
getAclRole() - +Method in class com.pras.sp.Entry +
  +
getAclScopeType() - +Method in class com.pras.sp.Entry +
  +
getAclScopeValue() - +Method in class com.pras.sp.Entry +
  +
getAllCollaborators(SpreadSheet) - +Method in class com.pras.SpreadSheetFactory +
Get list of all Collaborators to whom this SpreadSheet is shared +
getAllSpreadSheets() - +Method in class com.pras.SpreadSheetFactory +
Get All stored SpreadSheets from Server +
getAllSpreadSheets(boolean) - +Method in class com.pras.SpreadSheetFactory +
Get All stored SpreadSheets either from Server or Local Cache +
getAllSpreadSheets(boolean, String, boolean) - +Method in class com.pras.SpreadSheetFactory +
Get All stored SpreadSheets either from Server or Local Cache +
getAllWorkSheets() - +Method in class com.pras.SpreadSheet +
It will retrieve all WorkSheets of this SpreadSheet from Server +
getAllWorkSheets(boolean) - +Method in class com.pras.SpreadSheet +
It will retrieve all WorkSheets of this SpreadSheet either from Server or from Local Cache +
getAllWorkSheets(boolean, String, boolean) - +Method in class com.pras.SpreadSheet +
It will retrieve WorkSheets with matching title either from Server or from Local Cache +
getAuthorEmail() - +Method in class com.pras.sp.Entry +
  +
getAuthorName() - +Method in class com.pras.sp.Entry +
  +
getAuthToken(String) - +Method in interface com.pras.auth.Authenticator +
Do the authentication and read Auth_Token from Server. +
getAuthToken(String) - +Method in class com.pras.auth.BasicAuthenticatorImpl +
  +
getCellInfo() - +Method in class com.pras.sp.Entry +
  +
getCells() - +Method in class com.pras.sp.Entry +
  +
getCells() - +Method in class com.pras.WorkSheetRow +
  +
getCol() - +Method in class com.pras.WorkSheetCell +
  +
getColCount() - +Method in class com.pras.sp.Entry +
  +
getColCount() - +Method in class com.pras.WorkSheet +
Get column count of this WorkSheet +
getCollaborators() - +Method in class com.pras.SpreadSheet +
Get the list of all Collaborator details (users/groups and their access rights) for a given SpreadSheet +
getColName() - +Method in class com.pras.sp.Field +
  +
getColNum() - +Method in class com.pras.table.Table +
  +
getCols() - +Method in class com.pras.sp.Entry +
  +
getCols() - +Method in class com.pras.table.Table +
  +
getColumns() - +Method in class com.pras.WorkSheet +
Get columns of the WorkSheet. +
getData() - +Method in class com.pras.table.Record +
Get data of this Record +
getData(boolean) - +Method in class com.pras.WorkSheet +
Get all data of this WorkSheet (List based Feed) +
getData(boolean, boolean, String, String) - +Method in class com.pras.WorkSheet +
List based Feed for a particular Work Sheet. +
getDescription() - +Method in class com.pras.table.Table +
  +
getEditLink() - +Method in class com.pras.Collaborator +
Get Edit Link +
getEditLink() - +Method in class com.pras.sp.Entry +
  +
getEditURL() - +Method in class com.pras.table.Record +
Get Record Edit URL +
getEmail() - +Method in class com.pras.auth.Account +
  +
getEntries() - +Method in class com.pras.sp.Feed +
  +
getEntry() - +Method in class com.pras.SpreadSheet +
Get Entry Object of SpreadSheet Feed. +
getEntry() - +Method in class com.pras.WorkSheet +
Get Entry instance for this WorkSheet. +
getErrorStreamMsg() - +Method in class com.pras.conn.Response +
  +
getETAG() - +Method in class com.pras.sp.Entry +
  +
getEtag() - +Method in class com.pras.sp.Feed +
  +
getException() - +Method in class com.pras.conn.Response +
  +
getFields() - +Method in class com.pras.sp.Entry +
  +
getId() - +Method in class com.pras.sp.Entry +
  +
getId() - +Method in class com.pras.sp.Feed +
  +
getId() - +Method in class com.pras.table.Record +
Get ID URL of this Record +
getId() - +Method in class com.pras.table.Table +
  +
getId() - +Method in class com.pras.WorkSheetRow +
  +
getIndex() - +Method in class com.pras.sp.Field +
  +
getInstance() - +Static method in class com.pras.SpreadSheetFactory +
This will return an existing SpreadSheetFactory instance or null +
+ Note: + Make sure you have previously called getInstance(String userName, String password) +
getInstance(String, String) - +Static method in class com.pras.SpreadSheetFactory +
This will create SpreadSheetFactory Instance with valid User ID (e.g. +
getInstance(Authenticator) - +Static method in class com.pras.SpreadSheetFactory +
This will create SpreadSheetFactory Instance using your custom Authenticatior. +
getKey() - +Method in class com.pras.sp.Entry +
  +
getKey() - +Method in class com.pras.SpreadSheet +
Get SpreadSheet Feed Key +
getName() - +Method in class com.pras.table.Table +
  +
getName() - +Method in class com.pras.WorkSheetCell +
  +
getOutput() - +Method in class com.pras.conn.Response +
  +
getPassword() - +Method in class com.pras.auth.Account +
  +
getRecords() - +Method in class com.pras.table.Table +
  +
getRecords(String) - +Method in class com.pras.WorkSheet +
Get data stored in this WorkSheet +
getRecords(String, String) - +Method in class com.pras.WorkSheet +
  +
getRecords(String, boolean, String, String) - +Method in class com.pras.WorkSheet +
Get data stored in this WorkSheet. +
getRecords() - +Method in class com.pras.WorkSheet +
Get Cached Data (previously retrieved from server) +
getResID() - +Method in class com.pras.sp.Entry +
  +
getResourceID() - +Method in class com.pras.SpreadSheet +
Get SpreadSheet Resource ID. +
getResponseCode() - +Method in class com.pras.conn.Response +
  +
getResponseMessage() - +Method in class com.pras.conn.Response +
  +
getRole() - +Method in class com.pras.Collaborator +
Get Role - {"owner", "writer", "reader"} +
getRow() - +Method in class com.pras.WorkSheetCell +
  +
getRowCount() - +Method in class com.pras.sp.Entry +
  +
getRowCount() - +Method in class com.pras.WorkSheet +
Get row count of this WorkSheet +
getRowIndex() - +Method in class com.pras.WorkSheetRow +
  +
getRowNum() - +Method in class com.pras.table.Table +
  +
getScopeType() - +Method in class com.pras.Collaborator +
Get Scope Type - {"user", "group", "domain", "default"} +
getScopeValue() - +Method in class com.pras.Collaborator +
Get Scope Value e.g. +
getSpreadSheet(String, boolean) - +Method in class com.pras.SpreadSheetFactory +
Get list of SpreadSheet with matching title. +
getSummary() - +Method in class com.pras.sp.Entry +
  +
getTitle() - +Method in class com.pras.sp.Entry +
  +
getTitle() - +Method in class com.pras.sp.Feed +
  +
getTitle() - +Method in class com.pras.SpreadSheet +
Get SpreadSheet Title +
getTitle() - +Method in class com.pras.WorkSheet +
Get WorkSheet Title +
getType() - +Method in class com.pras.WorkSheetCell +
  +
getType() - +Method in class com.pras.WorkSheetRow +
  +
getUrl() - +Method in class com.pras.table.Table +
  +
getValue() - +Method in class com.pras.sp.Field +
  +
getValue() - +Method in class com.pras.WorkSheetCell +
  +
getWorkSheet(String, boolean) - +Method in class com.pras.SpreadSheet +
It will retrieve WorkSheets with matching title from Server +
getWorkSheetID() - +Method in class com.pras.WorkSheet +
Get WorkSheet ID +
getWorkSheetURL() - +Method in class com.pras.sp.Entry +
  +
getWorkSheetURL() - +Method in class com.pras.WorkSheet +
Get WorkSheetURL +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+ + + diff --git a/jars/gss-lib-2.2/javadoc/index-files/index-8.html b/jars/gss-lib-2.2/javadoc/index-files/index-8.html new file mode 100644 index 0000000..94c08da --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/index-files/index-8.html @@ -0,0 +1,159 @@ + + + + + + +H-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+

+H

+
+
hashCode() - +Method in class com.pras.SpreadSheet +
  +
hashCode() - +Method in class com.pras.WorkSheetRow +
  +
HTTP_DELETE - +Static variable in class com.pras.conn.HttpConHandler +
  +
HTTP_GET - +Static variable in class com.pras.conn.HttpConHandler +
  +
HTTP_POST - +Static variable in class com.pras.conn.HttpConHandler +
  +
HTTP_PUT - +Static variable in class com.pras.conn.HttpConHandler +
  +
HttpConHandler - Class in com.pras.conn
HTTP Connection handler, supports GET, POST, PUT and DELETE.
HttpConHandler() - +Constructor for class com.pras.conn.HttpConHandler +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+ + + diff --git a/jars/gss-lib-2.2/javadoc/index-files/index-9.html b/jars/gss-lib-2.2/javadoc/index-files/index-9.html new file mode 100644 index 0000000..beeb3ba --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/index-files/index-9.html @@ -0,0 +1,141 @@ + + + + + + +I-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+

+I

+
+
isError() - +Method in class com.pras.conn.Response +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I L P R S T U W
+ + + diff --git a/jars/gss-lib-2.2/javadoc/index.html b/jars/gss-lib-2.2/javadoc/index.html new file mode 100644 index 0000000..09b6883 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/index.html @@ -0,0 +1,39 @@ + + + + + + +Generated Documentation (Untitled) + + + + + + + + + + + +<H2> +Frame Alert</H2> + +<P> +This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. +<BR> +Link to<A HREF="overview-summary.html">Non-frame version.</A> + + + diff --git a/jars/gss-lib-2.2/javadoc/overview-frame.html b/jars/gss-lib-2.2/javadoc/overview-frame.html new file mode 100644 index 0000000..07a436f --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/overview-frame.html @@ -0,0 +1,50 @@ + + + + + + +Overview + + + + + + + + + + + + + + + +
+
+ + + + + +
All Classes +

+ +Packages +
+com.pras +
+com.pras.auth +
+com.pras.conn +
+com.pras.sp +
+com.pras.table +
+

+ +

+  + + diff --git a/jars/gss-lib-2.2/javadoc/overview-summary.html b/jars/gss-lib-2.2/javadoc/overview-summary.html new file mode 100644 index 0000000..7f0b1d3 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/overview-summary.html @@ -0,0 +1,169 @@ + + + + + + +Overview + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +


+
+

+SpreadSheetAccessLib +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+Packages
com.pras 
com.pras.auth 
com.pras.conn 
com.pras.sp 
com.pras.table 
+ +


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/overview-tree.html b/jars/gss-lib-2.2/javadoc/overview-tree.html new file mode 100644 index 0000000..1fcaca7 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/overview-tree.html @@ -0,0 +1,157 @@ + + + + + + +Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For All Packages

+
+
+
Package Hierarchies:
com.pras, com.pras.auth, com.pras.conn, com.pras.sp, com.pras.table
+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/jars/gss-lib-2.2/javadoc/package-list b/jars/gss-lib-2.2/javadoc/package-list new file mode 100644 index 0000000..6293e67 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/package-list @@ -0,0 +1,5 @@ +com.pras +com.pras.auth +com.pras.conn +com.pras.sp +com.pras.table diff --git a/jars/gss-lib-2.2/javadoc/resources/inherit.gif b/jars/gss-lib-2.2/javadoc/resources/inherit.gif new file mode 100644 index 0000000000000000000000000000000000000000..c814867a13deb0ca7ea2156c6ca1d5a03372af7e GIT binary patch literal 57 zcmZ?wbhEHbIIT!9-C*e{wE9>Kx3D)-;0v)C; KYxQGgum%9JOA&7X literal 0 HcmV?d00001 diff --git a/jars/gss-lib-2.2/javadoc/stylesheet.css b/jars/gss-lib-2.2/javadoc/stylesheet.css new file mode 100644 index 0000000..14c3737 --- /dev/null +++ b/jars/gss-lib-2.2/javadoc/stylesheet.css @@ -0,0 +1,29 @@ +/* Javadoc style sheet */ + +/* Define colors, fonts and other style attributes here to override the defaults */ + +/* Page background color */ +body { background-color: #FFFFFF } + +/* Headings */ +h1 { font-size: 145% } + +/* Table colors */ +.TableHeadingColor { background: #CCCCFF } /* Dark mauve */ +.TableSubHeadingColor { background: #EEEEFF } /* Light mauve */ +.TableRowColor { background: #FFFFFF } /* White */ + +/* Font used in left-hand frame lists */ +.FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif } +.FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif } +.FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif } + +/* Navigation bar fonts and colors */ +.NavBarCell1 { background-color:#EEEEFF;} /* Light mauve */ +.NavBarCell1Rev { background-color:#00008B;} /* Dark Blue */ +.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;} +.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;} + +.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} +.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} + diff --git a/jars/gss-lib-2.2/sample/SpreadSheet_Auth/src/com/gss/sample/auth/AndroidAuthenticator.java b/jars/gss-lib-2.2/sample/SpreadSheet_Auth/src/com/gss/sample/auth/AndroidAuthenticator.java new file mode 100644 index 0000000..60e0f7a --- /dev/null +++ b/jars/gss-lib-2.2/sample/SpreadSheet_Auth/src/com/gss/sample/auth/AndroidAuthenticator.java @@ -0,0 +1,59 @@ +package com.gss.sample.auth; + +import android.accounts.Account; +import android.accounts.AccountManager; +import android.accounts.AccountManagerFuture; +import android.app.Activity; +import android.os.Bundle; +import android.util.Log; + +import com.pras.auth.Authenticator; + +public class AndroidAuthenticator implements Authenticator { + + private final String TAG = "AndroidAuthenticator"; + Activity activity; + AccountManager manager; + private String mService = null; + private String auth_token = ""; + + public AndroidAuthenticator(Activity activity){ + this.activity = activity; + manager = AccountManager.get(activity.getApplicationContext()); + } + + public String getAuthToken(String service) + { + if(service == null){ + throw new IllegalAccessError("No Service name defined, Can't create Auth Token..."); + } + + if(mService != null && !mService.equals(service)){ + // Reset previous Token + manager.invalidateAuthToken("com.google", auth_token); + } + + Account[] acs = manager.getAccountsByType("com.google"); + Log.i(TAG, "Num of Matching account: "+ acs.length); + + for(int i=0; i spreadSheets = spf.getAllSpreadSheets(); + + if(spreadSheets == null && spreadSheets.size() == 0){ + Log.p(TAG, "No SpreadSheet Exists"); + return; + } + + SpreadSheet s = spreadSheets.get(0); + + System.out.println("SpreadSheet: "+ s.getTitle()); + + // Create WorkSheet + s.addWorkSheet("tab_work_sample", new String[]{"Name", "Age", "Exp", "Country"}); + + // Get List of All WorkSheets + ArrayList wks = s.getAllWorkSheets(); + WorkSheet wk = wks.get(0); + + // Add Record + HashMap record = new HashMap(); + + record.put("Name", "Santosh"); + record.put("Age", "25"); + record.put("Exp", "10"); + record.put("Country", "India"); + + wk.addRecord(s.getKey(), record); + + // Conditional Data Read + // Read Data from WorkSheet, where Age < 30 and Order by "Name" column + // Please follow- http://code.google.com/apis/spreadsheets/data/3.0/reference.html#RecordParameters + ArrayList records = wk.getRecords(s.getKey(), false, HttpConHandler.encode("\"Age\"") + "<" + HttpConHandler.encode("30"), "column:Name"); + + if(records == null || records.size() == 0){ + System.out.println("No matching data"); + return; + } + + // Display Record + for(int i=0; i data = r.getData(); + System.out.println("Data: "+ data); + + // Delete Record + //wk.deleteRecord(r); + } + + // Delete WorkSheet + s.deleteWorkSheet(wk); + } +} diff --git a/jars/gss-lib-2.2/sample/SpreadSheet_Usage/src/com/prasanta/sample/ListFeed.java b/jars/gss-lib-2.2/sample/SpreadSheet_Usage/src/com/prasanta/sample/ListFeed.java new file mode 100644 index 0000000..ba121ab --- /dev/null +++ b/jars/gss-lib-2.2/sample/SpreadSheet_Usage/src/com/prasanta/sample/ListFeed.java @@ -0,0 +1,130 @@ +package com.prasanta.sample; + +import java.util.ArrayList; +import java.util.HashMap; + +import com.pras.SpreadSheet; +import com.pras.SpreadSheetFactory; +import com.pras.WorkSheet; +import com.pras.WorkSheetRow; + +/** + * This class demonstrates usage of List Based Feed- + * - Add Listbased WorkSheet + * - Add Row + * - Update Row + * - Delete Row + * - Get List of Rows + * + * @author Prasanta Paul + * + */ +public class ListFeed { + + + /** + * Create List based WorkSheet + * @param args + */ + public static void createListWorkSheet(String[] args){ + String[] cols = {"id", "devicename", "vendor"}; + SpreadSheetFactory spf = SpreadSheetFactory.getInstance("email", "password"); + + // Get selected SpreadSheet + ArrayList spreadSheets = spf.getSpreadSheet("Pras", false); + + if(spreadSheets == null || spreadSheets.size() == 0){ + System.out.println("No SpreadSheet Exists!"); + return; + } + + System.out.println("Number of SpreadSheets: "+ spreadSheets.size()); + + SpreadSheet sp = spreadSheets.get(0); + System.out.println("### Creating WorkSheet for ListFeed ###"); + WorkSheet workSheet = sp.addListWorkSheet("Device_List", 10, cols); + + HashMap row_data = new HashMap(); + row_data.put("id", "1"); + row_data.put("devicename", "Samsung Ace"); + row_data.put("vendor", "Samsung"); + + // Add entries + WorkSheetRow list_row1 = workSheet.addListRow(row_data); + + row_data.put("id", "2"); + row_data.put("devicename", "Optimus"); + row_data.put("vendor", "LG"); + + WorkSheetRow list_row2 = workSheet.addListRow(row_data); + + row_data.put("id", "3"); + row_data.put("devicename", "Xdroid"); + row_data.put("vendor", "Motorola"); + + WorkSheetRow list_row3 = workSheet.addListRow(row_data); + + // Update previous Row + row_data.put("id", "2"); + row_data.put("devicename", "Optimus"); + row_data.put("vendor", "LG-New"); + workSheet.updateListRow(sp.getEntry().getKey(), list_row2, row_data); + + workSheet.deleteListRow(sp.getEntry().getKey(), list_row3); + + ArrayList rows = workSheet.getData(true); + System.out.println("List Feed: "+ rows); + + // Example of Structured Query- + /* + * For List Based feed use lower case Column Name + * Note: Column name should be in lower case + * Retrieve data where age < 30 and order by "name" column + */ +// ArrayList rows = workSheet.getData(false, false, HttpConHandler.encode("\"age\"") + "<" + HttpConHandler.encode("30"), "column:name"); +// +// System.out.println("Count: "+ rows.size()); +// +// for(int i=0; i cls = r.getCells(); +// for(int j=0; j spreadSheets = spf.getSpreadSheet("Pras", false); + + if(spreadSheets == null || spreadSheets.size() == 0){ + System.out.println("No SpreadSheet Exists!"); + return; + } + + System.out.println("Number of SpreadSheets: "+ spreadSheets.size()); + + SpreadSheet sp = spreadSheets.get(0); + + ArrayList wks = sp.getAllWorkSheets(); + for(int i=0; i spreadSheets = spf.getAllSpreadSheets(); + + if(spreadSheets == null || spreadSheets.size() == 0){ + System.out.println("No SpreadSheet exists"); + } + + SpreadSheet firstSP = spreadSheets.get(0); + + System.out.println("Read Collaborators of SpreadSheet: "+ firstSP.getEntry().getTitle()); + + // Get the list of all people to whom this SpreadSheet is shared + ArrayList collaborators = spf.getAllCollaborators(firstSP); + + if(collaborators == null || collaborators.size() == 0){ + System.out.println("No Collaborators"); + } + + Collaborator c = null; + + for(int i=0; i"+ c.getScopeValue()); + spf.changeSharePermission(c, Collaborator.ROLE_READER); + } +} diff --git a/jars/gss-lib-2.2/sample/SpreadSheet_Usage/src/com/prasanta/sample/WorkSheetSample.java b/jars/gss-lib-2.2/sample/SpreadSheet_Usage/src/com/prasanta/sample/WorkSheetSample.java new file mode 100644 index 0000000..9c59af7 --- /dev/null +++ b/jars/gss-lib-2.2/sample/SpreadSheet_Usage/src/com/prasanta/sample/WorkSheetSample.java @@ -0,0 +1,113 @@ +package com.prasanta.sample; + +import java.util.ArrayList; +import java.util.HashMap; + +import com.pras.Log; +import com.pras.SpreadSheet; +import com.pras.SpreadSheetFactory; +import com.pras.WorkSheet; +import com.pras.table.Record; + +/** + * Demonstrates WorkSheet handling Add/Delete + * Add/Update/Delete Records into WorkSheet + * Retrieve record from WorkSheet + * + * @author Prasanta Paul + * + */ +public class WorkSheetSample { + + public static void main(String[] args){ + + // Enable/Disable Logging + // by default it will be enabled + Log.enableLog(); + + // Create SpreadSheet Factory + SpreadSheetFactory spf = SpreadSheetFactory.getInstance(args[0], args[1]); + + // Get All SpreadSheets + //ArrayList spreadSheets = spf.getAllSpreadSheets(); + + // Get selected SpreadSheet- whose name contains "Pras" + ArrayList spreadSheets = spf.getSpreadSheet("Pras", false); + + if(spreadSheets == null || spreadSheets.size() == 0){ + System.out.println("No SpreadSheet Exists!"); + return; + } + + System.out.println("Number of SpreadSheets: "+ spreadSheets.size()); + + SpreadSheet sp = spreadSheets.get(0); + + // Add an WorkSheet + //sp.addWorkSheet("testWork1", new String[]{"date", "item", "price"}); + //sp.addWorkSheet("tabWork2", new String[]{"date", "item", "price", "person"}); + + // Get all WorkSheets + // ArrayList wks = sp.getAllWorkSheets(); + + // Get selected WorkSheet + ArrayList wks = sp.getWorkSheet("test", false); + + if(wks == null || wks.size() == 0){ + System.out.println("No WorkSheet exists!!"); + return; + } + + System.out.println("Number of WorkSheets: "+ wks.size()); + + WorkSheet wk = null; + /*for(int i=0; i records = wk.getRecords(sp.getKey()); + + if(records == null || records.size() == 0){ + System.out.println("No Record exists!!"); + return; + } + + System.out.println("Number of Records: "+ records.size()); + + // Display Record + for(int i=0; i data = r.getData(); + System.out.println("Data: "+ data); + } + + // Delete Record + //wk.deleteRecord(records.get(0)); + + // Update Record + //Record toUpdate = records.get(0); + + //toUpdate.addData("Name", "Update_Name"); + //wk.updateRecord(toUpdate); + } + +} diff --git a/jars/gss-lib-2.2/src/com/pras/Collaborator.java b/jars/gss-lib-2.2/src/com/pras/Collaborator.java new file mode 100644 index 0000000..2e5be41 --- /dev/null +++ b/jars/gss-lib-2.2/src/com/pras/Collaborator.java @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2010 Prasanta Paul, http://prasanta-paul.blogspot.com + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.pras; + +/** + * ACL details of a SpreadSheet + * + * @author Prasanta Paul + * + */ +public class Collaborator { + + // Defined Roles + /** + * Owner of a SpreadSheet + */ + public static String ROLE_OWNER = "owner"; + /** + * Able to Read/Write and Further Share as Reader/Writer + */ + public static String ROLE_WRITER = "writer"; + /** + * Able to Read + */ + public static String ROLE_READER = "reader"; + + // Defined Scopes + /** + * Use this scope to share it with an Email account + */ + public static String SCOPE_USER = "user"; + /** + * Use this scope to share it with a Group + */ + public static String SCOPE_GROUP = "group"; + /** + * Use this scope to share it with a Domain + */ + public static String SCOPE_DOMAIN = "domain"; + /** + * Use this scope to make the SpreadSheet publicly accessible to anyuser + */ + public static String SCOPE_DEFAULT = "default"; + + String role; + String scopeType; + String scopeValue; + String editLink; + + /** + * Get Role - {"owner", "writer", "reader"} + * @return + */ + public String getRole() { + return role; + } + /** + * Set Role - {"owner", "writer", "reader"} + * @param role {ROLE_OWNER, ROLE_WRITER, ROLE_READER} + */ + public void setRole(String role) { + this.role = role; + } + /** + * Get Scope Type - {"user", "group", "domain", "default"} + * @return + */ + public String getScopeType() { + return scopeType; + } + /** + * Set Scope Type {"user", "group", "domain", "default"} + * @param scopeType {SCOPE_USER, SCOPE_GROUP, SCOPE_DOMAIN, SCOPE_DEFAULT} + */ + public void setScopeType(String scopeType) { + this.scopeType = scopeType; + } + /** + * Get Scope Value e.g. + * @return + */ + public String getScopeValue() { + return scopeValue; + } + /** + * Set Scope Value + * @param scopeValue Email Address + */ + public void setScopeValue(String scopeValue) { + this.scopeValue = scopeValue; + } + /** + * Get Edit Link + * @return + */ + public String getEditLink() { + return editLink; + } + /** + * Set Edit Link + * @param editLink + */ + public void setEditLink(String editLink) { + this.editLink = editLink; + } +} diff --git a/jars/gss-lib-2.2/src/com/pras/Log.java b/jars/gss-lib-2.2/src/com/pras/Log.java new file mode 100644 index 0000000..41de0c1 --- /dev/null +++ b/jars/gss-lib-2.2/src/com/pras/Log.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2010 Prasanta Paul, http://prasanta-paul.blogspot.com + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.pras; + +/** + * Based on your target platform- edit this file and add appropriate Log console + * e.g. + * for Android, android.util.Log + * for J2ME, Desktop File based logging. + *
+ * By default Logging will be enabled + * + * @author Prasanta Paul + * + */ +public class Log { + + /** + * Set to false if you don't need Log output + */ + private static boolean isLogEnabled = true; + + + /** + * Enable logging + */ + public static void enableLog(){ + isLogEnabled = true; + } + /** + * Disable logging. Good for production release. + */ + public static void disableLog(){ + isLogEnabled = false; + } + /** + * Pring Log message + * @param tag Log TAG + * @param msg Log Message + */ + public static void p(String tag, String msg){ + + if(!isLogEnabled) + return; + + if(tag != null) + print("["+ tag +"] "); + if(msg != null) + print(msg); + print("\n"); + } + + private static void print(String s){ + // TODO: Add appropriate stream based on your platform + System.out.print(s); + } +} diff --git a/jars/gss-lib-2.2/src/com/pras/SpreadSheet.java b/jars/gss-lib-2.2/src/com/pras/SpreadSheet.java new file mode 100644 index 0000000..7188544 --- /dev/null +++ b/jars/gss-lib-2.2/src/com/pras/SpreadSheet.java @@ -0,0 +1,635 @@ +/* + * Copyright (C) 2010 Prasanta Paul, http://prasanta-paul.blogspot.com + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.pras; + +import java.util.ArrayList; +import java.util.HashMap; + +import com.pras.conn.HttpConHandler; +import com.pras.conn.Response; +import com.pras.sp.Entry; +import com.pras.sp.Feed; +import com.pras.sp.ParseFeed; +import com.pras.table.Table; + +/** + * This class represents a given Spreadsheet. You can add multiple WorkSheets into a Spreadsheet. + * It provides methods to Add/Retrieve/Delete WorkSheet and Share SpreadSheet. + * + *
API Ref:
+ * http://code.google.com/apis/spreadsheets/data/3.0/developers_guide.html + *
+ * Feed Ref: + *
+ * http://code.google.com/apis/documents/docs/3.0/reference.html + *
+ *
+ * NOTE: + * Resource ID is required to delete a SpreadSheet + * + * @author Prasanta Paul + */ +public class SpreadSheet { + + /* + * How to get Resource_ID ? + * From SpreadSheet Feed (SpreadSheet List) read the "key" of the following field + * + */ + private String TAG = "SpreadSheet"; + /** + * This will contain info specific to SpreadSheet and not about its + * WorkSheets + */ + Entry entry; + ArrayList wks = new ArrayList(); + /** + * List of People with whom this SpreadSheet is shared and their + * access rights (ACL) + */ + ArrayList collaborators = new ArrayList(); + + + @Override + public boolean equals(Object obj) { + if(obj == null) + return false; + if(obj instanceof SpreadSheet){ + SpreadSheet s = (SpreadSheet) obj; + if(this.hashCode() == s.hashCode()) + return true; + } + return false; + //return super.equals(obj); + } + + @Override + public int hashCode() { + /* + * ResID will be unique for each SpreadSheet + * e.g. + * spreadsheet:0Asn_4k-vXoTXdHhVcUIyeDZwV3VWREdMZll5RTJTMmc + */ + if(entry != null){ + return entry.getResID().hashCode(); + } + return super.hashCode(); + } + + public SpreadSheet(Entry entry){ + this.entry = entry; + } + + /** + * Get Entry Object of SpreadSheet Feed. Entry holds all SpreadSheet Feed details + * + * @return + */ + public Entry getEntry() { + return entry; + } + + /** + * Set Entry Object of SpreadSheet Feed. + * @param entry + */ + public void setEntry(Entry entry) { + this.entry = entry; + } + + /** + * Get SpreadSheet Title + * @return + */ + public String getTitle(){ + if(entry != null) + return entry.getTitle(); + return null; + } + + /** + * Get SpreadSheet Resource ID. Each SpreadSheet has an unique Resource ID. + * This ID is required to Delete this SpreadSheet. + * + * @return + */ + public String getResourceID(){ + if(entry != null) + return entry.getResID(); + return null; + } + + /** + * Get SpreadSheet Feed Key + * @return + */ + public String getKey(){ + if(entry != null) + return entry.getKey(); + return null; + } + /** + * Get the list of all Collaborator details (users/groups and their access rights) for a given SpreadSheet + * + * @return + */ + public ArrayList getCollaborators() { + return collaborators; + } + + /** + * Add a Collaborator + * @param c + */ + public void addCollaborator(Collaborator c){ + collaborators.add(c); + } + + /** + * Clear existing list of Collaborators + */ + public void clearCollaboratorList(){ + collaborators.clear(); + } + + /** + * Set a list of Collaborators + * @param collaborators + */ + public void setCollaborators(ArrayList collaborators) { + this.collaborators = collaborators; + } + + /** + * This will create an WorkSheet without Table. It will create WorkSheet with 1 Column and 1 Row. It can + * be accessed/modified by Web Interface. + * + * IMPORTANT: + * This Library supports Record Handling only through Table. If you use this method, it will not + * create Table internally and thus unable to add/edit/delete record from this WorkSheet. Instead, + * use addWorkSheet(String name, String[] cols) + * + * @param name WorkSheet name + */ + public void addWorkSheet(String name){ + + if(name == null){ + throw new IllegalAccessError("Please provide WorkSheet Name"); + } + addWorkSheet(name, 1, 1); + } + + /** + * Create WorkSheet. + * + * @param name name of WorkSheet + * @param col number of columns + * @param row number of rows + */ + private WorkSheet addWorkSheet(String name, int col, int row){ + // Sample URL: https://spreadsheets.google.com/feeds/worksheets/key/private/full + String workSheetURL = "https://spreadsheets.google.com/feeds/worksheets/"+ entry.getKey() +"/private/full"; + + // Add headers + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ SpreadSheetFactory.authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + httpHeaders.put(HttpConHandler.CONTENT_TYPE_HTTP_HEADER, "application/atom+xml"); + + String postData = ""+ + ""+ name +""+ + ""+ row +""+ + ""+ col +""+ + ""; + Log.p(TAG, "POST Data- "+ postData); + HttpConHandler http = new HttpConHandler(); + Response resp = http.doConnect(workSheetURL, HttpConHandler.HTTP_POST, httpHeaders, postData); + if(resp == null) + return null; + + // Create WorkSheet instance from the response + return parseWorkSheet(resp.getOutput()); + } + + private WorkSheet parseWorkSheet(String xmlFeed) + { + if(xmlFeed == null) + return null; + + // XML Parsing + ParseFeed pf = new ParseFeed(); + Feed f = pf.parse(xmlFeed.getBytes()); + ArrayList entries = f.getEntries(); + + if(entries == null || entries.size() == 0){ + return null; + } + + WorkSheet ws = new WorkSheet(); + + for(int i=0; i + * It will create a Table for this WorkSheet. WorkSheet and Table Name will be the same + * The Table will be used for Add/Edit/Delete Records + *
+ * + * @param name Name of the WorkSheet + * @param description Description of the WorkSheet + * @param row Number of Rows + * @param cols Name of Columns + */ + public void addWorkSheet(String name, String description, int row, String[] cols){ + + if(name == null || description == null || cols == null){ + throw new IllegalAccessError("Please provide correct input parameters"); + } + + int col = cols.length; + + addWorkSheet(name, col, row); + + // Create a Table for this WorkSheet + String tableCreateXML = ""+ + ""+ name +""+ // Table name will be same as WorkSheet Name + ""+ description +""+ + ""+ + ""+ + ""; + for(int i=0; i"); + } + tableCreateXML = tableCreateXML.concat(""); + + // Add headers + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ SpreadSheetFactory.authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + httpHeaders.put(HttpConHandler.CONTENT_TYPE_HTTP_HEADER, "application/atom+xml"); + + // HTTP Connection + String tableURL = "https://spreadsheets.google.com/feeds/"+ entry.getKey() +"/tables"; + HttpConHandler http = new HttpConHandler(); + http.doConnect(tableURL, HttpConHandler.HTTP_POST, httpHeaders, tableCreateXML); + } + + + /** + * Create List feed based WorkSheet + * + * @param name Name of the WorkSheet + * @param rowCount Number of row. This doesn't limit future row addition. + * @param cols Array of column name. First row of the WorkSheet is header row. + * + * @return + */ + public WorkSheet addListWorkSheet(String name, int rowCount, String[] cols){ + if(name == null || cols == null){ + throw new IllegalAccessError("Please provide correct input parameters"); + } + + /* + * Steps- + * 1. Create an empty Worksheet with specified number of Rows and Columns + * 2. Create the Header Row + */ + // Create the + Log.p(TAG, "## Create WorkSheet..."); + WorkSheet workSheet = addWorkSheet(name, cols.length, rowCount); + + if(workSheet == null) + return null; + + workSheet.setColumns(cols); + + // 2. Create Header Row + // Add headers + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ SpreadSheetFactory.authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + httpHeaders.put(HttpConHandler.CONTENT_TYPE_HTTP_HEADER, "application/atom+xml"); + // Ignore updates done by other on the Header Row + httpHeaders.put("If-Match", "*"); + + // XML to Add HEADER ROW + StringBuffer cellUpdateXML = new StringBuffer(); + // Batch Cell Update + // XML- Batch query for multiple Cell Update + cellUpdateXML.append(""); + cellUpdateXML.append("https://spreadsheets.google.com/feeds/cells/"+ entry.getKey() +"/"+ workSheet.getWorkSheetID() +"/private/full"); + + for(int i=0; i"); + cellUpdateXML.append("B"+ i +""); + cellUpdateXML.append(""); + cellUpdateXML.append("https://spreadsheets.google.com/feeds/cells/"+ entry.getKey() + "/"+ workSheet.getWorkSheetID() +"/private/full/R1C"+ (i+1) +""); + cellUpdateXML.append(""); + cellUpdateXML.append(""); + cellUpdateXML.append("
"); + } + cellUpdateXML.append(""); + + // Do Server transaction + String headerRowUpdateUrl = "https://spreadsheets.google.com/feeds/cells/"+ entry.getKey() + "/"+ workSheet.getWorkSheetID() +"/private/full/batch"; + new HttpConHandler().doConnect(headerRowUpdateUrl, HttpConHandler.HTTP_POST, httpHeaders, cellUpdateXML.toString()); + + return workSheet; + } + + /** + * It will retrieve all WorkSheets of this SpreadSheet from Server + * + * @return + */ + public ArrayList getAllWorkSheets(){ + return getAllWorkSheets(true); + } + + /** + * It will retrieve all WorkSheets of this SpreadSheet either from Server or from Local Cache + * + * @param doRefresh Do you want to Synch with Server ? + * @return list of available WorkSheets + */ + public ArrayList getAllWorkSheets(boolean doRefresh){ + return getAllWorkSheets(doRefresh, null, false); + } + + /** + * It will retrieve WorkSheets with matching title from Server + * + * @param title SpreadSheet title. null means all SpreadSheets. No need to do URL encode. + * @param isTitleExact whether title string should be an exact match + * @return + */ + public ArrayList getWorkSheet(String title, boolean isTitleExact){ + return getAllWorkSheets(true, title, isTitleExact); + } + + /** + * It will retrieve WorkSheets with matching title either from Server or from Local Cache + * + * @param doRefresh Do you want to Synch with Server ? + * @param title SpreadSheet title. null means all SpreadSheets. No need to do URL encode. + * @param isTitleExact Whether title string should be an exact match + * @return list of available WorkSheets + */ + public ArrayList getAllWorkSheets(boolean doRefresh, String title, boolean isTitleExact){ + // Sample URL: https://spreadsheets.google.com/feeds/worksheets/key/private/full + /* + * TODO: + * Check with other projection values instead of "private" and "full" + * private - unpublished work sheets + * public- published work sheets + */ + + if(!doRefresh){ + // Don't synch with Server + return wks; + } + + String workSheetListURL = "https://spreadsheets.google.com/feeds/worksheets/"+ entry.getKey() +"/private/full"; + + if(title != null){ + // WorkSheet Query Parameters + workSheetListURL = workSheetListURL.concat("?title="+ HttpConHandler.encode(title)); + workSheetListURL = workSheetListURL.concat("&title-exact="+ isTitleExact); + } + + // Add Headers + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ SpreadSheetFactory.authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + + HttpConHandler http = new HttpConHandler(); + Response res = http.doConnect(workSheetListURL, HttpConHandler.HTTP_GET, httpHeaders, null); + + if(res.isError()){ + return null; + } + + String xmlOut = res.getOutput(); + + // XML Parsing + ParseFeed pf = new ParseFeed(); + Feed f = pf.parse(xmlOut.getBytes()); + ArrayList entries = f.getEntries(); + + HashMap tables = null; + + if(entries != null && entries.size() > 0){ + // Fetch Table details of each Work Sheet + Log.p(TAG, "Get Table Feed"); + tables = getTables(title, isTitleExact); + }else{ + //No WorkSheet exists + return null; + } + + // clear existing entries + wks.clear(); + + for(int i=0; i httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ SpreadSheetFactory.authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + + HttpConHandler http = new HttpConHandler(); + Response res = http.doConnect(headerRowURL, HttpConHandler.HTTP_GET, httpHeaders, null); + + if(res.isError()){ + return null; + } + String xmlOut = res.getOutput(); + + // XML Parsing + ParseFeed pf = new ParseFeed(); + Feed f = pf.parse(xmlOut.getBytes()); + ArrayList entries = f.getEntries(); + + if(entries == null) + return null; + + String[] cols = new String[entries.size()]; + + for(int i=0; inull means all SpreadSheets. No need to do URL encode. + * @param isTitleExact whether title string should be an exact match + * + * @return + */ + private HashMap getTables(String title, boolean isTitleExact){ + + //Get list of all Tables- one per WorkSheet + HashMap tables = new HashMap(); + + // Table URL- Get list of all Tables- one per WorkSheet + String tableURL = "https://spreadsheets.google.com/feeds/"+ entry.getKey() +"/tables"; + + if(title != null){ + tableURL = tableURL.concat("?title="+ HttpConHandler.encode(title)); + tableURL = tableURL.concat("&title-exact="+ isTitleExact); + } + + // Add Headers + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ SpreadSheetFactory.authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + + HttpConHandler http = new HttpConHandler(); + Response res = http.doConnect(tableURL, HttpConHandler.HTTP_GET, httpHeaders, null); + + if(res.isError()){ + return null; + } + + String xmlOut = res.getOutput(); + + // XML Parsing + ParseFeed pf = new ParseFeed(); + Feed f = pf.parse(xmlOut.getBytes()); + + ArrayList entries = f.getEntries(); + + if(entries == null) // No Table exists for this WorkSheet/SpreadSheet + return null; + + for(int i=0; i + * It is a SpreadSheet Generator Class. It accepts Gmail User ID and PassWord + * to generate Authentication Token. + *
+ * It uses 2 Google APIs- + *
+ * SpreadSheet Create/Delete - Google Document API + *
+ * WorkSheet Create/Delete, Record Add - Google SpreadSheet API + * + * @author Prasanta Paul + * + */ +public class SpreadSheetFactory { + + private String TAG = "SpreadSheetFactory"; + +// private String userName; +// private String password; + public static String authToken; + // URL + //private final String GOOGLE_CLIENT_LOGIN_URL = "https://www.google.com/accounts/ClientLogin"; + + private final String SP_GET_LIST_URL = "https://spreadsheets.google.com/feeds/spreadsheets/private/full"; + private final String DOCUMENT_LIST_API_URL = "https://docs.google.com/feeds/default/private/full"; + // Service Name + /* + * Google service name (Reference)- + * http://code.google.com/apis/gdata/faq.html + */ + final static String SPREADSHEET_API_SERVICE_NAME = "wise"; + final static String DOCUMENT_LIST_API_SERVICE_NAME = "writely"; + + /** + * List of presently stored SpreadSheets + */ + private ArrayList spreadSheets = new ArrayList(); + + private Authenticator authenticator = null; + + private static SpreadSheetFactory factory; + + /** + * This will return an existing SpreadSheetFactory instance or null + *
+ * Note: + * Make sure you have previously called getInstance(String userName, String password) + * + * @return + */ + public static SpreadSheetFactory getInstance(){ + return getInstance(null, null); + } + + /** + * This will create SpreadSheetFactory Instance with valid User ID (e.g. abc@gmail.com) and password + * + * @param userName Gmail account id e.g. abc@gmail.com + * @param password Gmail account password + * @return + */ + public static SpreadSheetFactory getInstance(String email, String password){ + if(factory == null){ + if(email != null && password != null){ + Account account = new Account(); + account.setEmail(email); + account.setPassword(password); + BasicAuthenticatorImpl basicAuth = new BasicAuthenticatorImpl(account); + + factory = new SpreadSheetFactory(basicAuth); + + }else{ + throw new IllegalAccessError("Missing Account Info. Please use getInstance(String email, String password) or getInstance(Authenticator authenticator)"); + } + } + return factory; + } + + /** + * This will create SpreadSheetFactory Instance using your custom Authenticatior. + * + * Use this if you want to use your custom Authenticator e.g. in Android you can use AccountManager + * to create a custom Authenticator. + * + * @param authenticator Your Custom Authenticator. + * @return + */ + public static SpreadSheetFactory getInstance(Authenticator authenticator){ + if(authenticator == null){ + throw new IllegalAccessError("No Authenticator defined"); + } + if(factory == null) + factory = new SpreadSheetFactory(authenticator); + return factory; + } + + /** + * Provide Gmail user id and password. Use SpreadSheetFactory instance + * to generate create/list/delete SpreadSheet + * + * @param userName + * @param password + */ +// private SpreadSheetFactory(String userName, String password){ +// this.userName = userName; +// this.password = password; +// } + + private SpreadSheetFactory(Authenticator authenticator){ + this.authenticator = authenticator; + } + + /** + * Deallocate SpreadSheetFactory instance + */ + public void flushMe(){ + factory = null; + if(spreadSheets != null) + spreadSheets.clear(); + spreadSheets = null; + authToken = null; + authenticator = null; + } + + /** + *Create SpreadSheet with the given name + * + * @param spName SpreadSheet name + */ + public void createSpreadSheet(String spName){ + // login for Document List API + login(DOCUMENT_LIST_API_SERVICE_NAME); + + // Create a SpreadSheet + String postData = "" + + ""+ + ""+ + ""+ spName +""+ + ""; + // Add Headers + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + httpHeaders.put(HttpConHandler.CONTENT_LENGTH_HTTP_HEADER, ""+ postData.length()); + httpHeaders.put(HttpConHandler.CONTENT_TYPE_HTTP_HEADER, "application/atom+xml"); + + // Http Connection + HttpConHandler http = new HttpConHandler(); + http.doConnect(DOCUMENT_LIST_API_URL, HttpConHandler.HTTP_POST, httpHeaders, postData); + + // login for SpreadSheet API + // revert back to SpreadSheet Auth Token + login(SPREADSHEET_API_SERVICE_NAME); + } + + /** + * Delete a SpreadSheet + * + * @param resID Resource ID of the SpreadSheet you want to Delete + */ + public void deleteSpreadSheet(String resID){ + + // login for Document List API + login(DOCUMENT_LIST_API_SERVICE_NAME); + + // Delete HTTP request + String url = "https://docs.google.com/feeds/default/private/full/"+ resID +"?delete=true"; + // Add Headers + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ SpreadSheetFactory.authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + httpHeaders.put("If-Match", "*"); + + HttpConHandler http = new HttpConHandler(); + Response res = http.doConnect(url, HttpConHandler.HTTP_DELETE, httpHeaders, null); + + if(!res.isError()){ + for(int i=0; i getSpreadSheet(String title, boolean isTitleExact){ + return getAllSpreadSheets(true, title, isTitleExact); + } + + /** + * Get All stored SpreadSheets from Server + * + * @return + */ + public ArrayList getAllSpreadSheets(){ + return getAllSpreadSheets(true); + } + + /** + * Get All stored SpreadSheets either from Server or Local Cache + * + * @param doRefresh Do you want to Synch with Server ? + * @return List of Entry. Each Entry represents a SpreadSheet + */ + public ArrayList getAllSpreadSheets(boolean doRefresh){ + return getAllSpreadSheets(doRefresh, null, false); + } + + /** + * Get All stored SpreadSheets either from Server or Local Cache + * + * @param doRefresh + * @param title SpreadSheet title. null means all SpreadSheets. No need to do URL encode. + * @param isTitleExact Whether title string should be an exact match + * @return + */ + public ArrayList getAllSpreadSheets(boolean doRefresh, String title, boolean isTitleExact){ + + /* + * TODO: + * Retrieve data only if there is change in Feed + * If-None-Match: W/"D0cERnk-eip7ImA9WBBXGEg." + */ + + if(!doRefresh){ + // Don't synch with Server + return spreadSheets; + } + + // login to Spreadsheet Service + login(SPREADSHEET_API_SERVICE_NAME); + + // get list of all spreadsheets + String xmlOut = getSpreadSheetList(title, isTitleExact); + + if(xmlOut == null){ + Log.p(TAG, "No SpreadSheet Feed received from Server!!"); + return null; + } + + // XML Parsing + ParseFeed pf = new ParseFeed(); + Feed f = pf.parse(xmlOut.getBytes()); + ArrayList entries = f.getEntries(); + + if(entries == null){ + // No SpreadSheet exists + return null; + } + + // Refresh SpreadSheet List from Server + // Clear existing list + spreadSheets.clear(); + + for(int i=0; i"+ + ""+ + ""+ + ""; + + // Send Data + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + httpHeaders.put(HttpConHandler.CONTENT_TYPE_HTTP_HEADER, "application/atom+xml"); + + // HTTP Connection + HttpConHandler http = new HttpConHandler(); + String url = "https://docs.google.com/feeds/default/private/full/"+ sp.getResourceID() +"/acl"; + + http.doConnect(url, HttpConHandler.HTTP_POST, httpHeaders, postData); + } + + // Get SpreadSheet API Authentication Token + login(SPREADSHEET_API_SERVICE_NAME); + + } + + /** + * Get list of all Collaborators to whom this SpreadSheet is shared + * @param sp SpreadSheet + * @return + */ + public ArrayList getAllCollaborators(SpreadSheet sp){ + + if(sp == null){ + throw new IllegalArgumentException("Please provide SpreadSheet ResID and Emails to whom you want to share."); + } + + // Get Document List API Authentication Token + login(DOCUMENT_LIST_API_SERVICE_NAME); + + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + + HttpConHandler http = new HttpConHandler(); + String url = "https://docs.google.com/feeds/default/private/full/"+ sp.getResourceID() +"/acl"; + Response res = http.doConnect(url, HttpConHandler.HTTP_GET, httpHeaders, null); + + // Get SpreadSheet API Authentication Token + login(SPREADSHEET_API_SERVICE_NAME); + + // Process output + String xmlOut = res.getOutput(); + + if(xmlOut == null){ + Log.p(TAG, "No XML feed from Server!!"); + return null; + } + + // XML Parsing + ParseFeed pf = new ParseFeed(); + Feed f = pf.parse(xmlOut.getBytes()); + ArrayList entries = f.getEntries(); + + sp.clearCollaboratorList(); + + if(entries != null){ + // Create Collaborator Instances + System.out.println("Number of Collaborators: "+ entries.size()); + + for(int i=0; i"+ + ""+ + ""+ + ""; + + // HTTP Header- Send PUT request + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + httpHeaders.put(HttpConHandler.CONTENT_TYPE_HTTP_HEADER, "application/atom+xml"); + + // HTTP Connection + HttpConHandler http = new HttpConHandler(); + http.doConnect(url, HttpConHandler.HTTP_PUT, httpHeaders, postData); + + // Get SpreadSheet API Authentication Token + login(SPREADSHEET_API_SERVICE_NAME); + } + + /** + * Remove Share access of a selected user. + * @param c Collaborator Instance. It should have the Edit Link. + */ + public void removeSharePermission(Collaborator c){ + // Get Document List API Authentication Token + login(DOCUMENT_LIST_API_SERVICE_NAME); + + // HTTP Header- Send PUT request + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + + HttpConHandler http = new HttpConHandler(); + String url = c.getEditLink(); + + http.doConnect(url, HttpConHandler.HTTP_DELETE, httpHeaders, null); + + // Get SpreadSheet API Authentication Token + login(SPREADSHEET_API_SERVICE_NAME); + } + + /** + * Login to get Authentication Token + * @param service + */ + private void login(String service){ + // HTTP POST Data +// String postData = "accountType=GOOGLE&Email="+ userName +"&Passwd="+ password +"&service="+ service +"&source=test-app-log"; +// +// HttpConHandler http = new HttpConHandler(); +// Response res = http.doConnect(GOOGLE_CLIENT_LOGIN_URL, HttpConHandler.HTTP_POST, null, postData); +// +// if(res.isError()){ +// return; +// } +// +// String out = res.getOutput(); +// /* +// * Format of success response +// * SID=<>LSID=<>Auth=<> +// */ +// String[] parms = out.split("="); +// +// for(int i=0; i httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + + HttpConHandler http = new HttpConHandler(); + String url = SP_GET_LIST_URL; + + // Add SpreadSheet Query Params (title and title-exact) + if(title != null){ + url = url.concat("?title="+ HttpConHandler.encode(title)); + url = url.concat("&title-exact="+ isTitleExact); + } + + Response res = http.doConnect(url, HttpConHandler.HTTP_GET, httpHeaders, null); + + if(res.isError()){ + return null; + } + + return res.getOutput(); + } +} diff --git a/jars/gss-lib-2.2/src/com/pras/WorkSheet.java b/jars/gss-lib-2.2/src/com/pras/WorkSheet.java new file mode 100644 index 0000000..4395b2c --- /dev/null +++ b/jars/gss-lib-2.2/src/com/pras/WorkSheet.java @@ -0,0 +1,746 @@ +/* + * Copyright (C) 2010 Prasanta Paul, http://prasanta-paul.blogspot.com + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.pras; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Set; + +import com.pras.conn.HttpConHandler; +import com.pras.conn.Response; +import com.pras.sp.Entry; +import com.pras.sp.Feed; +import com.pras.sp.Field; +import com.pras.sp.ParseFeed; +import com.pras.table.Record; +import com.pras.table.Table; + +/** + * This class represents an WorkSheet and utility methods to manage WorkSheet data. + * WorkSheets will manage (Add/Edit/Delete) data in Tables. It also supports List + * based Feed, but only to retrieve data. At present it doesn't provide any method to Add/Edit/Delete + * data in List based Feed. + *
+ *
+ * Table Feed + *
+ * To Add/Edit/Delete Data, you need to use addRecord(), updateRecord() and deleteRecord(). It + * internally stores data in a single Table. + *
+ * Note: Table Feed will ignore data entered through Web UI. + * So, if you want all data records irrespective of from where those are inserted/updated, you should use List Feed. + * + *
+ *
+ * List Feed + *
+ * To Retrieve data using List based Feed, use getData() method. + * + * @author Prasanta Paul + */ + +public class WorkSheet { + + /* + *TODO: + *Add set and get methods without creating local variables (use entry instance) + */ + private String TAG = "WorkSheet"; + private String workSheetID; + private String workSheetURL; + private String title; + private int colCount; + private int rowCount; + /** + * Entries of the Header Row of List Feed + */ + String[] columns = null; + + /** + * Table associated with this WorkSheet. It will hold data records + */ + private Table table; + + /** + * To access all low level Feed values for this Work Sheet + */ + private Entry entry; + + /** + * It will hold WorkSheet records + */ + private ArrayList records = new ArrayList(); + + /** + * Get WorkSheet ID + * @return + */ + public String getWorkSheetID() { + return workSheetID; + } + /** + * Set WorkSheet ID + * @param workSheetID + */ + public void setWorkSheetID(String workSheetID) { + this.workSheetID = workSheetID; + } + + /** + * Get WorkSheetURL + * @return + */ + public String getWorkSheetURL() { + /* + * Sample: https://spreadsheets.google.com/feeds/worksheets/key/private/full + * Retrieved from src attribute- + * + */ + return workSheetURL; + } + /** + * Set WorkSheet + * @param workSheetURL + */ + public void setWorkSheetURL(String workSheetURL) { + this.workSheetURL = workSheetURL; + } + /** + * Get WorkSheet Title + * @return + */ + public String getTitle() { + return title; + } + /** + * Set WorkSheet Title + * @param title + */ + public void setTitle(String title) { + this.title = title; + } + /** + * Get column count of this WorkSheet + * @return + */ + public int getColCount() { + return colCount; + } + /** + * Set column count of this WorkSheet + * @param colCount + */ + public void setColCount(int colCount) { + this.colCount = colCount; + } + /** + * Get row count of this WorkSheet + * @return + */ + public int getRowCount() { + return rowCount; + } + /** + * Set row count of this WorkSheet + * @param rowCount + */ + public void setRowCount(int rowCount) { + this.rowCount = rowCount; + } + + /** + * Get columns of the WorkSheet. It will return columns of associated table, otherwise + * columns of List Feed i.e. content of Header row of ListFeed + * @return + */ + public String[] getColumns() { + if(columns != null) + return columns; + + if(table != null){ + ArrayList tableCols = table.getCols(); + if(tableCols != null){ + String[] cols = new String[tableCols.size()]; + tableCols.toArray(cols); + return cols; + } + } + return null; + } + + /** + * Set columns of ListFeed + * @param columns + */ + public void setColumns(String[] columns) { + this.columns = columns; + } + + /** + * Get Entry instance for this WorkSheet. + * Entry contains low level Feed Details + * + * @return + */ + public Entry getEntry() { + return entry; + } + /** + * Set Feed Entry instance + * @param entry + */ + public void setEntry(Entry entry) { + this.entry = entry; + } + + void setTable(Table table){ + this.table = table; + } + + /** + * Get all data of this WorkSheet (List based Feed) + * + * @return + */ + /** + * Get all data of this WorkSheet (List based Feed) + * + * @param isCachedData Do you want to read cached data or data from Server + * @return + */ + public ArrayList getData(boolean isCachedData){ + return getData(isCachedData, false, null, null); + } + + /** + * List based Feed for a particular Work Sheet. Use this method if you want to retrieve data entered + * through Web GUI and also through Table records. + * + * @param isCachedData Do you want to read cached data or data from Server + * @param doReverse Do you need data in reverse order ? + * @param sq Structured Query. If you don't need this, set to null. (Make sure that column name is in lower case). + * @param orderBy If you don't need this, set to null. (Make sure that column name is in lower case). + * @return + */ + public ArrayList getData(boolean isCachedData, boolean doReverse, String sq, String orderBy){ + // Sample URL: GET https://spreadsheets.google.com/feeds/list/key/worksheetId/private/full + + if(isCachedData) + return records; + + // Add Headers + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ SpreadSheetFactory.authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + + HttpConHandler http = new HttpConHandler(); + + String url = workSheetURL; + + // Add data Filter + if (doReverse) { + // Table record in reverse order (last row first) + url = url.concat("?reverse=true"); + if (sq != null) { + // Structured Query + url = url.concat("&sq=" + sq); + } + if (orderBy != null) { + // Order By Statement + url = url.concat("&orderby=" + orderBy); + } + } else { + // Structured Query & Order By + if (sq != null) { + url = url.concat("?sq=" + sq); + if(orderBy != null) + url = url.concat("&orderby=" + orderBy); + } else { + if (orderBy != null) + url = url.concat("?orderby="+ orderBy); + } + } + + Response res = http.doConnect(url, HttpConHandler.HTTP_GET, httpHeaders, null); + + if(res.isError()){ + return null; + } + + String xmlOut = res.getOutput(); + + // XML Parsing + ParseFeed pf = new ParseFeed(); + Feed f = pf.parse(xmlOut.getBytes()); + ArrayList entries = f.getEntries(); + + // [Fix_11_JAN_2011_Prasanta multiple call to getRecords() while changing Android orientation + records.clear(); + // Fix_11_JAN_2011_Prasanta] + + if(entries != null){ + for(int i=0; i records){ + /* + * It will send request to WorkSheet URL: + * https://spreadsheets.google.com/feeds/list/key/worksheetId/private/full + * Unlike Tables, there can be only one List Feed associated with a given WorkSheet + */ + + StringBuffer listRecordXML = new StringBuffer(); + listRecordXML.append(""); + + Iterator ks = records.keySet().iterator(); + while(ks.hasNext()){ + String colName = ks.next(); + String value = records.get(colName); + listRecordXML.append(" "+ value +""); + } + listRecordXML.append(""); + + // Do server transaction + // Add Headers + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ SpreadSheetFactory.authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + httpHeaders.put(HttpConHandler.CONTENT_TYPE_HTTP_HEADER, "application/atom+xml"); + + HttpConHandler http = new HttpConHandler(); + Response res = http.doConnect(workSheetURL, HttpConHandler.HTTP_POST, httpHeaders, listRecordXML.toString()); + + // Add the into local Record cache + // Parse response and create new Row instance + if(res.isError()){ + Log.p(TAG, "Error in updating List Row..."); + return null; + } + + String xmlOut = res.getOutput(); + + // XML Parsing + ParseFeed pf = new ParseFeed(); + Feed f = pf.parse(xmlOut.getBytes()); + ArrayList entries = f.getEntries(); + + if(entries == null || entries.size() == 0){ + Log.p(TAG, "Error in parsing..."); + return null; + } + + Entry e = entries.get(0); + WorkSheetRow row = new WorkSheetRow(); + row.setId(e.getId()); + row.setCells(e.getCells()); + + // Update local Cache + if(this.records == null){ + this.records = new ArrayList(); + this.records.add(row); + return row; + } + // Update existing Row instance + this.records.add(row); + return row; + } + + /** + * Delete List Row + * @param r WorkSheetRow which need to be deleted + */ + public void deleteListRow(String key, WorkSheetRow r) + { + if(r == null){ + Log.p(TAG, "WorkSheetRow is null..."); + return; + } + + // Sample DELETE URL- https://spreadsheets.google.com/feeds/list/tmG5DprMeR-l2j91JQBB1TQ/odp/private/full/cokwr + String listRowURL = "https://spreadsheets.google.com/feeds/list/"+ key +"/"+ workSheetID + "/private/full/"+ r.getRowIndex(); + + // Do server transaction + // Add Headers + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ SpreadSheetFactory.authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + //If you want to delete the row regardless of whether someone else has updated it since you retrieved it + httpHeaders.put("If-Match", "*"); + + HttpConHandler http = new HttpConHandler(); + http.doConnect(listRowURL, HttpConHandler.HTTP_DELETE, httpHeaders, null); + + // Delete this entry from local record list + records.remove(r); + } + + /** + * Update List row + * @param rowID ID of the List row to be updated + * @param records records need to be updated + */ + + /** + * Update List row + * + * @param r WorkSheetRow to be updated + * @param records new records + * @return + */ + public WorkSheetRow updateListRow(String key, WorkSheetRow r, HashMap records) + { + if(r == null){ + Log.p(TAG, "WorkSheetRow is null..."); + return r; + } + + // Sample PUT URL- https://spreadsheets.google.com/feeds/list/tmG5DprMeR-l2j91JQBB1TQ/odp/private/full/cokwr + String listRowURL = "https://spreadsheets.google.com/feeds/list/"+ key +"/"+ workSheetID + "/private/full/"+ r.getRowIndex(); + + StringBuffer rowUpdateXML = new StringBuffer(""); + + Iterator ks = records.keySet().iterator(); + while(ks.hasNext()){ + String colName = ks.next(); + String value = records.get(colName); + rowUpdateXML.append(" "+ value +""); + } + rowUpdateXML.append(""); + + // Do server transaction- PUT + // Add Headers + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ SpreadSheetFactory.authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + httpHeaders.put(HttpConHandler.CONTENT_TYPE_HTTP_HEADER, "application/atom+xml"); + //If you want to delete the row regardless of whether someone else has updated it since you retrieved it + httpHeaders.put("If-Match", "*"); + + HttpConHandler http = new HttpConHandler(); + Response res = http.doConnect(listRowURL, HttpConHandler.HTTP_PUT, httpHeaders, rowUpdateXML.toString()); + + // Parse response and create new Row instance + if(res.isError()){ + Log.p(TAG, "Error in updating List Row..."); + return null; + } + + String xmlOut = res.getOutput(); + + // XML Parsing + ParseFeed pf = new ParseFeed(); + Feed f = pf.parse(xmlOut.getBytes()); + ArrayList entries = f.getEntries(); + + if(entries == null || entries.size() == 0){ + Log.p(TAG, "Error in parsing..."); + return null; + } + + Entry e = entries.get(0); + WorkSheetRow row = new WorkSheetRow(); + row.setId(e.getId()); + row.setCells(e.getCells()); + + // Update local Cache + if(this.records == null){ + this.records = new ArrayList(); + this.records.add(row); + return row; + } + // Update existing Row instance + this.records.set(this.records.indexOf(row), row); + return row; + } + + /** + * Add record into WorkSheet. This WorkSheet need to have associated Table. + * + * Use SpreadSheet.addWorkSheet() + *
+ * Note: + *
+ * All data entered through Web Interface will be ignored. + * + * @param key Key of SpreadSheet + * @param records Record to be added ([col_name],[value]) + */ + public void addRecord(String key, HashMap records){ + if(table == null){ + throw new IllegalAccessError("This WorkSheet doesn't have any Table"); + } + + Log.p(TAG, "Associated Table ID: "+ table.getId()); + String tableRecordURL = "https://spreadsheets.google.com/feeds/"+ key +"/records/"+ table.getId(); + + String tableRecordXML = ""+ + ""+ table.getName() +""; + + Set keys = records.keySet(); + Iterator it = keys.iterator(); + + while(it.hasNext()){ + String k = it.next(); + tableRecordXML = tableRecordXML.concat(""+ records.get(k) +""); + } + + tableRecordXML = tableRecordXML.concat(""); + + Log.p(TAG, "Table Record XML: "+ tableRecordXML); + + // Add Headers + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ SpreadSheetFactory.authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + httpHeaders.put(HttpConHandler.CONTENT_TYPE_HTTP_HEADER, "application/atom+xml"); + + HttpConHandler http = new HttpConHandler(); + http.doConnect(tableRecordURL, HttpConHandler.HTTP_POST, httpHeaders, tableRecordXML); + } + + + /** + * Get data stored in this WorkSheet + * + * @param key SpreadSheet Key + * @return + */ + public ArrayList getRecords(String key){ + return getRecords(key, false, null, null); + } + + /** + * @param key SpreadSheet Key + * @param sq Structured Query + * + * @return + */ + public ArrayList getRecords(String key, String sq){ + return getRecords(key, false, sq, null); + } + + + /** + * Get data stored in this WorkSheet. Retrieved data will be in a HashMap- + * , + *
+ * It supports following conditional Query-
+ * Structured Query: you can define conditional statements like in SQL e.g. !=
+ * Order By: Order by a given column name or position
+ * Reverse: Record retrived in reverse order (last row 1st)
+ *
+ * NOTE: + *
+ * It will retrieve records present in the Table. Tables can't be accessed by the Web UI. + *
+ * So, any data inserted by Web UI will be discarded. + *
+ * @param key SpreadSheet Key + * @param doReverse Display data in reverse order (last row first) + * @param sq Structured Query + * @param orderBy Order By + * @return + */ + public ArrayList getRecords(String key, boolean doReverse, String sq, String orderBy){ + + if(table == null){ + Log.p(TAG, "No Associated Table to Hold Data!!"); + return null; + } + + // Table Access URL + String tableRecordURL = "https://spreadsheets.google.com/feeds/"+ key +"/records/"+ table.getId(); + + if(doReverse){ + // Table record in reverse order (last row first) + tableRecordURL = tableRecordURL.concat("?reverse=true"); + if(sq != null){ + // Structured Query + tableRecordURL = tableRecordURL.concat("&sq="+ sq); + } + if(orderBy != null){ + // Order By Statement + tableRecordURL = tableRecordURL.concat("&orderby="+ orderBy); + } + } + else{ + // Structured Query & Order By + if(sq != null){ + tableRecordURL = tableRecordURL.concat("?sq="+ sq); + if(orderBy != null) + tableRecordURL = tableRecordURL.concat("&orderby="+ orderBy); + }else{ + if(orderBy != null) + tableRecordURL = tableRecordURL.concat("?orderby="+ orderBy); + } + } + + Log.p(TAG, "tableRecordURL="+ tableRecordURL); + + // Add Headers + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ SpreadSheetFactory.authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + + HttpConHandler http = new HttpConHandler(); + Response res = http.doConnect(tableRecordURL, HttpConHandler.HTTP_GET, httpHeaders, null); + + if(res.isError()){ + return null; + } + + String xmlOut = res.getOutput(); + + // XML Parsing + ParseFeed pf = new ParseFeed(); + Feed f = pf.parse(xmlOut.getBytes()); + ArrayList entries = f.getEntries(); + + if(entries == null){ + Log.p(TAG, "No Reord found!!"); + return null; + } + + // [Fix_11_JAN_2011_Prasanta multiple call to getRecords() while changing Android orientation + table.clearData(); + // Fix_11_JAN_2011_Prasanta] + + for(int i=0; i< entries.size(); i++){ + Entry e = entries.get(i); + ArrayList fields = e.getFields(); + Record r = new Record(); + r.setId(e.getId()); + r.setEditURL(e.getEditLink()); + + for(int j=0; j getRecords(){ + return table.getRecords(); + } + + /** + * Record instance you want to Update + * Keep only those data which you want to update for this record + * + * @param record Record to be updated + */ + public void updateRecord(Record record){ + + if(record == null){ + throw new IllegalAccessError("Pass a valid Record!!"); + } + + String recordXML = ""+ + ""+ record.getId() +""; + + HashMap data = record.getData(); + + Set keys = data.keySet(); + Iterator it = keys.iterator(); + + while(it.hasNext()){ + String k = it.next(); + recordXML = recordXML.concat(""+ data.get(k) +""); + } + + recordXML += ""; + + Log.p(TAG, "Update Record XML: "+ recordXML); + + // Add Headers + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ SpreadSheetFactory.authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + httpHeaders.put(HttpConHandler.CONTENT_TYPE_HTTP_HEADER, "application/atom+xml"); + httpHeaders.put("If-Match", "*"); + + // HTTP Connection + HttpConHandler http = new HttpConHandler(); + http.doConnect(record.getEditURL(), HttpConHandler.HTTP_PUT, httpHeaders, recordXML); + } + + /** + * Delete a Record + * @param record Record to be deleted + */ + public void deleteRecord(Record record){ + + if(record == null){ + throw new IllegalAccessError("Pass a valid Record!!"); + } + + // Add Headers + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ SpreadSheetFactory.authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + httpHeaders.put("If-Match", "*"); + + // HTTP Connection + HttpConHandler http = new HttpConHandler(); + http.doConnect(record.getEditURL(), HttpConHandler.HTTP_DELETE, httpHeaders, null); + } + + /** + * Delete this WorkSheet. It will also delete its associated Table. + * There is no separate method for deleting a Table + */ + public void delete(){ + // Sample URL: DELETE https://spreadsheets.google.com/feeds/worksheets/key/private/full/worksheetId/version + // We don't need "version" + + // Add Headers + HashMap httpHeaders = new HashMap(); + httpHeaders.put(HttpConHandler.AUTHORIZATION_HTTP_HEADER, "GoogleLogin auth="+ SpreadSheetFactory.authToken); + httpHeaders.put(HttpConHandler.GDATA_VERSION_HTTP_HEADER, "3.0"); + httpHeaders.put("If-Match", "*"); + + HttpConHandler http = new HttpConHandler(); + String wsDeleteURL = entry.getId().substring(0, entry.getId().lastIndexOf("/")); + wsDeleteURL = wsDeleteURL.concat("/private/full/").concat(workSheetID); + + http.doConnect(wsDeleteURL, HttpConHandler.HTTP_DELETE, httpHeaders, null); + } +} diff --git a/jars/gss-lib-2.2/src/com/pras/WorkSheetCell.java b/jars/gss-lib-2.2/src/com/pras/WorkSheetCell.java new file mode 100644 index 0000000..64a5bc4 --- /dev/null +++ b/jars/gss-lib-2.2/src/com/pras/WorkSheetCell.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2010 Prasanta Paul, http://prasanta-paul.blogspot.com + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.pras; + +/** + * Individual Cell of the Work Sheet + * One Row can have multiple Cells + * @author Prasanta Paul + */ +public class WorkSheetCell { + + /** + * Name of the column this cell belongs to + */ + String name; + /** + * Data type of the Cell (Int, String, Date etc.) + */ + String type; + /** + * Value of the cell + */ + String value; + /** + * Row index of this Cell + */ + int row = 0; + /** + * Column index of this Cell + */ + int col = 0; + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + public String getValue() { + return value; + } + public void setValue(String value) { + this.value = value; + } + public int getRow() { + return row; + } + public void setRow(int row) { + this.row = row; + } + public int getCol() { + return col; + } + public void setCol(int col) { + this.col = col; + } + @Override + public String toString() { + // TODO Auto-generated method stub + return name +"="+ value; + } +} diff --git a/jars/gss-lib-2.2/src/com/pras/WorkSheetRow.java b/jars/gss-lib-2.2/src/com/pras/WorkSheetRow.java new file mode 100644 index 0000000..65f8b90 --- /dev/null +++ b/jars/gss-lib-2.2/src/com/pras/WorkSheetRow.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2010 Prasanta Paul, http://prasanta-paul.blogspot.com + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.pras; + +import java.util.ArrayList; + +/** + * Supporting class for list based data feed + * @author Prasanta Paul + */ +public class WorkSheetRow { + + String id; + + String rowIndex; + /** + * Data Type of + */ + String type; + ArrayList cells = new ArrayList(); + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + setRowIndex(id.substring(id.lastIndexOf("/") + 1)); + } + public String getRowIndex() { + return rowIndex; + } + public void setRowIndex(String rowIndex) { + this.rowIndex = rowIndex; + } + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + public ArrayList getCells() { + return cells; + } + public void setCells(ArrayList cells) { + this.cells = cells; + } + + @Override + public boolean equals(Object obj) { + if(obj == null || !(obj instanceof WorkSheetRow)) + return false; + WorkSheetRow r = (WorkSheetRow) obj; + if(r.hashCode() == this.hashCode()) + return true; + return false; + } + + @Override + public int hashCode() { + if(id == null) + id = ""; + return id.hashCode(); + } + + @Override + public String toString() { + // TODO Auto-generated method stub + return ""+ cells; + } +} diff --git a/jars/gss-lib-2.2/src/com/pras/auth/Account.java b/jars/gss-lib-2.2/src/com/pras/auth/Account.java new file mode 100644 index 0000000..d99b8ff --- /dev/null +++ b/jars/gss-lib-2.2/src/com/pras/auth/Account.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2010 Prasanta Paul, http://prasanta-paul.blogspot.com + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.pras.auth; + +/** + * Account data holding class + * + * @author Prasanta Paul + * + */ +public class Account { + + String email; + String password; + String accountType = "GOOGLE"; + public String getEmail() { + return email; + } + public void setEmail(String email) { + this.email = email; + } + public String getPassword() { + return password; + } + public void setPassword(String password) { + this.password = password; + } + public String getAccountType() { + return accountType; + } + public void setAccountType(String accountType) { + this.accountType = accountType; + } +} diff --git a/jars/gss-lib-2.2/src/com/pras/auth/Authenticator.java b/jars/gss-lib-2.2/src/com/pras/auth/Authenticator.java new file mode 100644 index 0000000..43ff209 --- /dev/null +++ b/jars/gss-lib-2.2/src/com/pras/auth/Authenticator.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2010 Prasanta Paul, http://prasanta-paul.blogspot.com + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.pras.auth; + +public interface Authenticator { + + /** + * Do the authentication and read Auth_Token from Server. The implementor class + * will provide Account (Gmail) and Service details + * + * @param service Name of the Service for which Authentication Token is required e.g. "wise" for SpreadSheet + * @return + */ + public String getAuthToken(String service); +} diff --git a/jars/gss-lib-2.2/src/com/pras/auth/BasicAuthenticatorImpl.java b/jars/gss-lib-2.2/src/com/pras/auth/BasicAuthenticatorImpl.java new file mode 100644 index 0000000..d36043c --- /dev/null +++ b/jars/gss-lib-2.2/src/com/pras/auth/BasicAuthenticatorImpl.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2010 Prasanta Paul, http://prasanta-paul.blogspot.com + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.pras.auth; + +import com.pras.Log; +import com.pras.conn.HttpConHandler; +import com.pras.conn.Response; + +/** + * This will provide a basic and LOW Level way of getting Authetication Token + * for various Google's services. + * This is a generic approach for core Java. User can add Platform specific Autheticator + * implementation. + * @author Prasanta Paul + * + */ +public class BasicAuthenticatorImpl implements Authenticator { + + final String TAG = "BasicAuthenticatorImpl"; + // Google Authentication URL + private final String GOOGLE_CLIENT_LOGIN_URL = "https://www.google.com/accounts/ClientLogin"; + Account account; + + public BasicAuthenticatorImpl(Account account){ + this.account = account; + } + + /* (non-Javadoc) + * @see com.pras.auth.Authenticator#getAuthToken(java.lang.String) + */ + public String getAuthToken(String service) { + if(account == null){ + Log.p(TAG, "No Account Info "+ account); + } + + // TODO Auto-generated method stub + String postData = "accountType="+ account.getAccountType() +"&Email="+ account.getEmail() +"&Passwd="+ account.getPassword() +"&service="+ service +"&source=test-app-log"; + + HttpConHandler http = new HttpConHandler(); + Response res = http.doConnect(GOOGLE_CLIENT_LOGIN_URL, HttpConHandler.HTTP_POST, null, postData); + + if(res.isError()){ + return null; + } + + String out = res.getOutput(); + /* + * Format of success response + * SID=<>LSID=<>Auth=<> + */ + String[] parms = out.split("="); + String authToken = null; + for(int i=0; i httpHeaders, String postData) { + + String res = null; + HttpURLConnection con = null; + Response response = new Response(); + String TAG = "HttpConHandler"; + + try{ + /* + * IMPORTANT: + * User SHOULD provide URL Encoded Parms + */ + Log.p(TAG, "URL="+ urlStr); + // TODO: Remove proxy + // Somehow Eclipse is not detecting Proxy + // HTTP Proxy + System.getProperties().put("http.proxyHost", "168.219.61.250"); + System.getProperties().put("http.proxyPort", "8080"); + // HTTPS Proxy + System.getProperties().put("https.proxyHost", "168.219.61.252"); + System.getProperties().put("https.proxyPort", "8080"); + URL url = new URL(urlStr); + con = (HttpURLConnection) url.openConnection(); + + //con.setInstanceFollowRedirects(false); + + OutputStream out = null; + + // Set headers + /* + * All subsequent request to Google Spreadsheet/Data API + * should include following 2 Headers + */ + //con.setRequestProperty("Authorization", "GoogleLogin auth="+ authToken); + //con.setRequestProperty("GData-Version", "3.0"); + + if(httpHeaders != null){ + //System.out.println("Number of HTTP Headers: "+ httpHeaders.size()); + Iterator keys = httpHeaders.keySet().iterator(); + while(keys.hasNext()){ + String k = keys.next(); + con.setRequestProperty(k, httpHeaders.get(k)); + } + } + + if(type == HTTP_POST){ + con.setDoOutput(true); + out = con.getOutputStream(); + out.write(postData.getBytes()); + out.flush(); + } + else if(type == HTTP_GET){ + con.setDoInput(true); + } + else if(type == HTTP_DELETE){ + con.setRequestMethod("DELETE"); + con.connect(); + } + else if(type == HTTP_PUT){ + con.setRequestMethod("PUT"); + // Send Data + con.setDoOutput(true); + out = con.getOutputStream(); + out.write(postData.getBytes()); + out.flush(); + } + + // Read Response Code + response.setResponseCode(""+ con.getResponseCode()); + response.setResponseMessage(con.getResponseMessage()); + + // Read InputStream + BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream())); + StringBuffer strBuf = new StringBuffer(); + String line = ""; + while((line = reader.readLine()) != null) + strBuf.append(line); + + reader.close(); + + if(out != null) + out.close(); + + res = strBuf.toString(); + + response.setOutput(res); + + Log.p(TAG, "Response from Google Server: \n"+ res); + + }catch(Exception ex){ + + Log.p(TAG, "Error in connection: "+ ex.toString()); + // Oops Exception + response.setError(true); + + // Set Exception + response.setException(ex); + + if(con == null) + return response; + + InputStream error_in = con.getErrorStream(); + + if(error_in == null) + return response; + + // Read the error stream + BufferedReader reader = new BufferedReader(new InputStreamReader(error_in)); + if(reader == null) + return response; + + StringBuffer errStrBuf = new StringBuffer(); + String line = ""; + + try{ + while((line = reader.readLine()) != null) + errStrBuf.append(line); + + // Set Error Stream Message + response.setErrorStreamMsg(errStrBuf.toString()); + + reader.close(); + + // Display error on logging console + response.printErrorLog(); + + }catch(Exception e){ + Log.p(TAG, "Error in reading Stream: "+ e.getMessage()); + } + } + return response; + } + + /** + * Encode URL parameters in UTF-8 format + * + * @param str String to be URL encoded + * + * @return + */ + public static String encode(String str){ + try{ + str = URLEncoder.encode(str, "UTF-8"); + }catch(Exception ex){ex.printStackTrace();} + return str; + } +} diff --git a/jars/gss-lib-2.2/src/com/pras/conn/Response.java b/jars/gss-lib-2.2/src/com/pras/conn/Response.java new file mode 100644 index 0000000..d6e074a --- /dev/null +++ b/jars/gss-lib-2.2/src/com/pras/conn/Response.java @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2010 Prasanta Paul, http://prasanta-paul.blogspot.com + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.pras.conn; + +import com.pras.Log; + +/** + * Wrapper class to hold Response from Server, Connection Exception etc. + * + * @author rasanta + * + */ +public class Response { + + String TAG = "HTTP_Response"; + + boolean error = false; + String responseCode; + String responseMessage; + String errorStreamMsg; + String output; + Exception exception; + + + public boolean isError() { + return error; + } + public void setError(boolean error) { + this.error = error; + } + public String getResponseCode() { + return responseCode; + } + public void setResponseCode(String responseCode) { + this.responseCode = responseCode; + + /* + * Response Codes- + * 1xx: Informational + * 2xx: Success + * 3xx: Redirection + * 4xx: Client Error + * 5xx: Server Error + */ + + if(this.responseCode.startsWith("2")) + error = false; + else + error = true; + } + public String getResponseMessage() { + return responseMessage; + } + public void setResponseMessage(String responseMessage) { + this.responseMessage = responseMessage; + } + public String getErrorStreamMsg() { + return errorStreamMsg; + } + public void setErrorStreamMsg(String errorStreamMsg) { + this.errorStreamMsg = errorStreamMsg; + } + public String getOutput() { + return output; + } + public void setOutput(String output) { + this.output = output; + } + public Exception getException() { + return exception; + } + public void setException(Exception exception) { + this.exception = exception; + } + + public void printErrorLog(){ + Log.p(TAG, "HTTP Response Code: "+ getResponseCode()); + Log.p(TAG, "HTTP Response: "+ getResponseMessage()); + Log.p(TAG, "Error Msg from Server: "+ getErrorStreamMsg()); + if(exception != null){ + Log.p(TAG, "Error in Connection: "+ exception.getMessage()); + exception.printStackTrace(); + } + } +} diff --git a/jars/gss-lib-2.2/src/com/pras/sp/Entry.java b/jars/gss-lib-2.2/src/com/pras/sp/Entry.java new file mode 100644 index 0000000..84831f7 --- /dev/null +++ b/jars/gss-lib-2.2/src/com/pras/sp/Entry.java @@ -0,0 +1,197 @@ +/* + * Copyright (C) 2010 Prasanta Paul, http://prasanta-paul.blogspot.com + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.pras.sp; + +import java.util.ArrayList; + +import com.pras.WorkSheetCell; + + +/** + * This class represents an entry of SpreadSheet XML Feed + * @author Prasanta Paul + * + */ +public class Entry { + + String eTAG; + String id; + String key; + String title; + String workSheetURL; + /** + * Table Feed- Summary + */ + String summary; + + String authorName; + String authorEmail; + + // ACL Fields- Role and Scope + String aclRole; + String aclScopeType; + String aclScopeValue; + String editLink; + + // Fields specific to Work Sheet + int rowCount; + int colCount; + + // SpreadSheet Doc ID + String resID; + // Cell Feed, cell info + WorkSheetCell cellInfo = null; + + //WorkSheet List Feed- Cells + ArrayList cells = new ArrayList(); + + /** + * Table feed column name + */ + ArrayList cols = new ArrayList(); + + /** + * Table record + */ + ArrayList fields = new ArrayList(); + + + public String getETAG() { + return eTAG; + } + public void setETAG(String etag) { + eTAG = etag; + } + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + setKey(id.substring(id.lastIndexOf("/") + 1)); + } + public String getKey() { + return key; + } + public void setKey(String key) { + this.key = key; + } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getWorkSheetURL() { + return workSheetURL; + } + public void setWorkSheetURL(String workSheetURL) { + this.workSheetURL = workSheetURL; + } + public String getAuthorName() { + return authorName; + } + public void setAuthorName(String authorName) { + this.authorName = authorName; + } + public String getAuthorEmail() { + return authorEmail; + } + public void setAuthorEmail(String authorEmail) { + this.authorEmail = authorEmail; + } + public int getRowCount() { + return rowCount; + } + public void setRowCount(int rowCount) { + this.rowCount = rowCount; + } + public int getColCount() { + return colCount; + } + public void setColCount(int colCount) { + this.colCount = colCount; + } + public WorkSheetCell getCellInfo() { + return cellInfo; + } + public void setCellInfo(WorkSheetCell cellInfo) { + this.cellInfo = cellInfo; + } + public ArrayList getCells() { + return cells; + } + public void setCells(ArrayList cells) { + this.cells = cells; + } + public void addCell(WorkSheetCell cell) { + this.cells.add(cell); + } + public String getResID() { + return resID; + } + public void setResID(String resID) { + this.resID = resID; + } + public String getSummary() { + return summary; + } + public void setSummary(String summary) { + this.summary = summary; + } + public ArrayList getCols() { + return cols; + } + public void addCol(String colName){ + cols.add(colName); + } + public void setCols(ArrayList cols) { + this.cols = cols; + } + public ArrayList getFields() { + return fields; + } + public void addField(Field f){ + fields.add(f); + } + public void setFields(ArrayList fields) { + this.fields = fields; + } + public String getAclRole() { + return aclRole; + } + public void setAclRole(String aclRole) { + this.aclRole = aclRole; + } + public String getAclScopeType() { + return aclScopeType; + } + public void setAclScopeType(String aclScopeType) { + this.aclScopeType = aclScopeType; + } + public String getAclScopeValue() { + return aclScopeValue; + } + public void setAclScopeValue(String aclScopeValue) { + this.aclScopeValue = aclScopeValue; + } + public String getEditLink() { + return editLink; + } + public void setEditLink(String editLink) { + this.editLink = editLink; + } +} diff --git a/jars/gss-lib-2.2/src/com/pras/sp/Feed.java b/jars/gss-lib-2.2/src/com/pras/sp/Feed.java new file mode 100644 index 0000000..8ddf517 --- /dev/null +++ b/jars/gss-lib-2.2/src/com/pras/sp/Feed.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2010 Prasanta Paul, http://prasanta-paul.blogspot.com + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.pras.sp; + +import java.util.ArrayList; + +/** + * This class is to hold Spreadsheet Feed data + * @author Prasanta Paul + * + */ +public class Feed { + + String id; + /** + * key associated with each feed. if feed changes, so as its value + */ + String etag; + String title; + ArrayList entries; + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getEtag() { + return etag; + } + public void setEtag(String etag) { + this.etag = etag; + } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public ArrayList getEntries() { + return entries; + } + public void addEntry(Entry e) { + if(entries == null) + entries = new ArrayList(); + entries.add(e); + } + public void clearEntries(){ + if(entries != null) + entries.clear(); + } +} diff --git a/jars/gss-lib-2.2/src/com/pras/sp/Field.java b/jars/gss-lib-2.2/src/com/pras/sp/Field.java new file mode 100644 index 0000000..b380310 --- /dev/null +++ b/jars/gss-lib-2.2/src/com/pras/sp/Field.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2010 Prasanta Paul, http://prasanta-paul.blogspot.com + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.pras.sp; + +/** + * Class for Table Feed data record in Feed XML + * + * @author Prasanta Paul + * + */ +public class Field { + + String colName; + String value; + /** + * Will define the order of Columns + */ + String index; + + public String getColName() { + return colName; + } + public void setColName(String colName) { + this.colName = colName; + } + public String getValue() { + return value; + } + public void setValue(String value) { + this.value = value; + } + public String getIndex() { + return index; + } + public void setIndex(String index) { + this.index = index; + } +} diff --git a/jars/gss-lib-2.2/src/com/pras/sp/ParseFeed.java b/jars/gss-lib-2.2/src/com/pras/sp/ParseFeed.java new file mode 100644 index 0000000..e68eaf8 --- /dev/null +++ b/jars/gss-lib-2.2/src/com/pras/sp/ParseFeed.java @@ -0,0 +1,288 @@ +/* + * Copyright (C) 2010 Prasanta Paul, http://prasanta-paul.blogspot.com + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.pras.sp; + +import java.io.ByteArrayInputStream; + +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + +import com.pras.Log; +import com.pras.WorkSheetCell; + + +/** + * Using SAX Parser, to keep the compatibility with Android + * @author Prasanta Paul + * + */ +public class ParseFeed extends DefaultHandler { + + private String TAG = "ParseFeed"; + + // Attributes + final String ATTRITUBE_ETAG = "gd:etag"; + final String ATTRITUBE_SRC = "src"; + // Nodes + final String NODE_FEED = "feed"; + final String NODE_ENTRY = "entry"; + final String NODE_ID = "id"; + final String NODE_TITLE = "title"; + // Table Feed + final String NODE_SUMMARY = "summary"; + final String NODE_CONTENT = "content"; + final String NODE_LINK = "link"; + final String NODE_NAME = "name"; + final String NODE_EMAIL = "email"; + // Nodes- specific to Work Sheet + static String NODE_ROW_COUNT = "gs:rowCount"; + static String NODE_COL_COUNT = "gs:colCount"; + // Table Feed + static String NODE_GS_DATA = "gs:data"; + static String NODE_GS_COL = "gs:column"; + // Nodes- specific to WorkSheet List Data Feed (gsx: namespace) + final String NODE_GSX = "gsx:"; + // Cell based Feed + final String NODE_GS_CELL = "gs:cell"; + final String ATTRITUBE_ROW = "row"; + final String ATTRITUBE_COL = "col"; + // Resource ID for SpreadSheet (Document List API) + /** + * Not in use; + * @deprecated + */ + final String NODE_GD_RESOURCEID = "gd:resourceId"; + + // Table Record + static String NODE_GS_FIELD = "gs:field"; + + // ACL Fields + final String NODE_GACL_ROLE = "gAcl:role"; + final String NODE_GACL_SCOPE = "gAcl:scope"; + + // [Fix_11_JAN_2011_Prasanta For Android SDK + /* + * Android SDK removes gs: prefix + */ + public static void doCustomizationForSDK(){ + NODE_GS_DATA = "data"; + NODE_GS_COL = "column"; + NODE_GS_FIELD = "field"; + NODE_ROW_COUNT = "rowCount"; + NODE_COL_COUNT = "colCount"; + } + // Fix_11_JAN_2011_Prasanta] + + Feed f = null; + Entry e = null; + Field field = null; + String node = null; + + public Feed parse(byte[] data){ + + SAXParserFactory factory = SAXParserFactory.newInstance(); + try{ + SAXParser parser = factory.newSAXParser(); + parser.parse(new ByteArrayInputStream(data), this); + }catch(Exception ex){ + Log.p(TAG, "Error in parsing: "+ ex.toString()); + ex.printStackTrace(); + } + + return f; + } + + @Override + public void characters(char[] ch, int start, int length) + throws SAXException { + super.characters(ch, start, length); + + if(node.equals(NODE_TITLE)){ + if(e == null) + f.setTitle(new String(ch).substring(start, start+length)); + else + e.setTitle(new String(ch).substring(start, start+length)); + } + if(node.equals(NODE_SUMMARY)){ + if(e != null) + e.setSummary(new String(ch).substring(start, start+length)); + } + else if(node.equals(NODE_NAME)){ + if(e != null) + e.setAuthorName(new String(ch).substring(start, start+length)); + } + else if(node.equals(NODE_EMAIL)){ + if(e != null) + e.setAuthorEmail(new String(ch).substring(start, start+length)); + } + else if(node.equals(NODE_ID)){ + if(e == null) + f.setId(new String(ch).substring(start, start+length)); + else + e.setId(new String(ch).substring(start, start+length)); + } + else if(node.equals(NODE_ROW_COUNT)){ + if(e != null) + e.setRowCount(Integer.parseInt(new String(ch).substring(start, start+length))); + } + else if(node.equals(NODE_COL_COUNT)){ + if(e != null) + e.setColCount(Integer.parseInt(new String(ch).substring(start, start+length))); + } + else if(node.toLowerCase().startsWith(NODE_GSX)){ + node = node.toLowerCase(); + WorkSheetCell cell = new WorkSheetCell(); + cell.setName(node.toLowerCase().substring(node.indexOf(":") + 1)); + cell.setValue(new String(ch).substring(start, start+length)); + // TODO: Cell Data Type + if(e != null) + e.addCell(cell); + } + else if(node.equals(NODE_GD_RESOURCEID)){ + e.setResID(new String(ch).substring(start, start+length)); + } + else if(node.equals(NODE_GS_FIELD)){ + field.setValue(new String(ch).substring(start, start+length)); + e.addField(field); + } + else if(node.equals(NODE_GS_CELL)){ + // Cell Feed: gs:cell + WorkSheetCell cellInfo = e.getCellInfo(); + if(cellInfo != null){ + cellInfo.setName(new String(ch).substring(start, start+length)); + if(e != null) + e.setCellInfo(cellInfo); + } + } + } + + @Override + public void startDocument() throws SAXException { + super.startDocument(); + f = new Feed(); + } + + @Override + public void startElement(String uri, String localName, String name, + Attributes attributes) throws SAXException { + super.startElement(uri, localName, name, attributes); + + if(name.trim().length() == 0) + node = localName; + else + node = name; + + //Log.p(TAG, "LocalName: "+ localName +" Name="+ name +" URI="+ uri); + + if(node.equals(NODE_FEED)){ + f = new Feed(); + // read ETag + //f.setEtag(attributes.getValue("http://schemas.google.com/g/2005", "gd:etag")); + f.setEtag(attributes.getValue("gd:etag")); + } + else if(node.equals(NODE_ENTRY)){ + //Log.p(TAG, "Entry...XML Feed"); + e = new Entry(); + // read ETag + e.setETAG(attributes.getValue("gd:etag")); + } + else if(node.equals(NODE_CONTENT)){ + /* + * TODO: + * Fetch WorkSheet or Main access URL for any SpreadSheet or WorkSheet + * from + */ + e.setWorkSheetURL(attributes.getValue("src")); + } + else if(node.equals(NODE_LINK)){ + if(e != null){ + // Consider Link only of Entry node + String rel = attributes.getValue("rel"); + if(rel != null && rel.equals("alternate")){ + String href = attributes.getValue("href"); + int index = href.indexOf("?key="); + if(index != -1) + e.setResID("spreadsheet:"+ href.substring(index + 5)); + } + else if(rel != null && rel.equals("edit")){ + // Read Edit Link + e.setEditLink(attributes.getValue("href")); + } + } + } + else if(node.equals(NODE_GS_COL)){ + String colName = attributes.getValue("name"); + //Log.p(TAG, "[gs:column:] node..."+ colName); + if(colName != null) + e.addCol(colName); + } + else if(node.equals(NODE_GS_FIELD)){ + String fieldName = attributes.getValue("name"); + if(fieldName != null){ + field = new Field(); + field.setColName(fieldName); + field.setIndex(attributes.getValue("index")); + } + } + else if(node.equals(NODE_GACL_ROLE)){ + //ACL Role + e.setAclRole(attributes.getValue("value")); + } + else if(node.equals(NODE_GACL_SCOPE)){ + // ACL Scope- Type and Value + e.setAclScopeType(attributes.getValue("type")); + e.setAclScopeValue(attributes.getValue("value")); + } + else if(node.equals(NODE_GS_CELL)){ + // Cell Feed: gs:cell + WorkSheetCell cellInfo = new WorkSheetCell(); + cellInfo.setRow(Integer.parseInt(attributes.getValue(ATTRITUBE_ROW))); + cellInfo.setCol(Integer.parseInt(attributes.getValue(ATTRITUBE_COL))); + if(e != null) + e.setCellInfo(cellInfo); + } + } + + @Override + public void endDocument() throws SAXException { + super.endDocument(); + } + + @Override + public void endElement(String uri, String localName, String name) + throws SAXException { + super.endElement(uri, localName, name); + + if(name.trim().length() == 0) + node = localName; + else + node = name; + + if(node == null) + return; + + if(node.equals(NODE_ENTRY)){ + // end of entry + f.addEntry(e); + e = null; + } + } +} diff --git a/jars/gss-lib-2.2/src/com/pras/table/Record.java b/jars/gss-lib-2.2/src/com/pras/table/Record.java new file mode 100644 index 0000000..84661e8 --- /dev/null +++ b/jars/gss-lib-2.2/src/com/pras/table/Record.java @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2010 Prasanta Paul, http://prasanta-paul.blogspot.com + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.pras.table; + +import java.util.HashMap; + +/** + * This class represents individual records of the Table (associated with an WorkSheet) + * + * @author Prasanta Paul + */ +public class Record { + /** + * + */ + String editURL; + /** + * node of an entry + */ + String id; + + /** + * It will store data of a single row + * + */ + HashMap data = new HashMap(); + + /** + * Get Record Edit URL + * @return + */ + public String getEditURL() { + return editURL; + } + + /** + * Set Record Edit URL + * @param editURL + */ + public void setEditURL(String editURL) { + this.editURL = editURL; + } + + /** + * Get data of this Record + * @return + */ + public HashMap getData() { + return data; + } + + /** + * Remove all stored data from this Record + */ + public void clearData(){ + data.clear(); + } + + /** + * Add data into this Record + * + * @param colName + * @param value + */ + public void addData(String colName, String value){ + data.put(colName, value); + } + + /** + * Set Data into this Record + * @param data + */ + public void setData(HashMap data) { + this.data = data; + } + /** + * Get ID URL of this Record + * @return + */ + public String getId() { + return id; + } + + /** + * Set ID URL of this Record + * @param id + */ + public void setId(String id) { + this.id = id; + } +} diff --git a/jars/gss-lib-2.2/src/com/pras/table/Table.java b/jars/gss-lib-2.2/src/com/pras/table/Table.java new file mode 100644 index 0000000..bcda11e --- /dev/null +++ b/jars/gss-lib-2.2/src/com/pras/table/Table.java @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2010 Prasanta Paul, http://prasanta-paul.blogspot.com + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.pras.table; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * Table associated with WorkSheet. It holds data and internally used in WorkSheet. + * + * @author Prasanta Paul + */ +public class Table { + /** + * Table ID + */ + private String id; + /** + * Table name + */ + private String name; + /** + * Table description + */ + private String description; + /** + * Table access URL + */ + private String url; + /** + * Number of rows + */ + private int rowNum; + /** + * Number of columns + */ + private int colNum; + /** + * Column name + */ + private ArrayList cols; + /** + * Records- + * , , , + */ + ArrayList records = new ArrayList(); + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getUrl() { + return url; + } + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + public void setUrl(String url) { + this.url = url; + } + public int getRowNum() { + return rowNum; + } + public void setRowNum(int rowNum) { + this.rowNum = rowNum; + } + public int getColNum() { + return colNum; + } + public void setColNum(int colNum) { + this.colNum = colNum; + } + public ArrayList getCols() { + return cols; + } + public void setCols(ArrayList cols) { + this.cols = cols; + if(cols != null) + setColNum(cols.size()); + else + setColNum(0); + } + public ArrayList getRecords() { + return records; + } + public void addRecord(Record data){ + records.add(data); + } + public void clearData(){ + records.clear(); + } + public void setRecords(ArrayList records) { + this.records = records; + } +} diff --git a/project.properties b/project.properties index 83e83eb..6f491fb 100644 --- a/project.properties +++ b/project.properties @@ -10,5 +10,5 @@ # Indicates whether an apk should be generated for each density. split.density=false # Project target. -target=android-16 +target=android-17 android.library.reference.1=../Util -- 2.43.0