@josuelmm/capacitor-background-geolocation 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/JosuelmmCapacitorBackgroundGeolocation.podspec +34 -0
  2. package/LICENSE +17 -0
  3. package/NOTICE.md +32 -0
  4. package/Package.swift +45 -0
  5. package/README.md +402 -0
  6. package/android/build.gradle +79 -0
  7. package/android/proguard-rules.pro +1 -0
  8. package/android/src/main/AndroidManifest.xml +83 -0
  9. package/android/src/main/java/com/evgenii/jsevaluator/HandlerWrapper.java +18 -0
  10. package/android/src/main/java/com/evgenii/jsevaluator/JavaScriptInterface.java +22 -0
  11. package/android/src/main/java/com/evgenii/jsevaluator/JsEvaluator.java +133 -0
  12. package/android/src/main/java/com/evgenii/jsevaluator/JsFunctionCallFormatter.java +37 -0
  13. package/android/src/main/java/com/evgenii/jsevaluator/WebViewWrapper.java +71 -0
  14. package/android/src/main/java/com/evgenii/jsevaluator/interfaces/CallJavaResultInterface.java +8 -0
  15. package/android/src/main/java/com/evgenii/jsevaluator/interfaces/HandlerWrapperInterface.java +5 -0
  16. package/android/src/main/java/com/evgenii/jsevaluator/interfaces/JsCallback.java +10 -0
  17. package/android/src/main/java/com/evgenii/jsevaluator/interfaces/JsEvaluatorInterface.java +18 -0
  18. package/android/src/main/java/com/evgenii/jsevaluator/interfaces/WebViewWrapperInterface.java +14 -0
  19. package/android/src/main/java/com/josuelmm/capacitor/backgroundgeolocation/BackgroundGeolocationPlugin.java +898 -0
  20. package/android/src/main/java/com/josuelmm/capacitor/backgroundgeolocation/ConfigMapper.java +303 -0
  21. package/android/src/main/java/com/josuelmm/capacitor/backgroundgeolocation/HeadlessTaskRegistry.java +34 -0
  22. package/android/src/main/java/com/josuelmm/capacitor/backgroundgeolocation/JsEvaluatorTaskRunner.java +63 -0
  23. package/android/src/main/java/com/marianhello/bgloc/BackgroundGeolocationFacade.java +699 -0
  24. package/android/src/main/java/com/marianhello/bgloc/BootCompletedReceiver.java +103 -0
  25. package/android/src/main/java/com/marianhello/bgloc/Config.java +1155 -0
  26. package/android/src/main/java/com/marianhello/bgloc/ConnectivityListener.java +5 -0
  27. package/android/src/main/java/com/marianhello/bgloc/HttpPostService.java +362 -0
  28. package/android/src/main/java/com/marianhello/bgloc/LocationManager.java +138 -0
  29. package/android/src/main/java/com/marianhello/bgloc/PluginDelegate.java +45 -0
  30. package/android/src/main/java/com/marianhello/bgloc/PluginException.java +38 -0
  31. package/android/src/main/java/com/marianhello/bgloc/PostLocationTask.java +238 -0
  32. package/android/src/main/java/com/marianhello/bgloc/ResourceResolver.java +55 -0
  33. package/android/src/main/java/com/marianhello/bgloc/data/AbstractLocationTemplate.java +69 -0
  34. package/android/src/main/java/com/marianhello/bgloc/data/ArrayListLocationTemplate.java +88 -0
  35. package/android/src/main/java/com/marianhello/bgloc/data/BackgroundActivity.java +108 -0
  36. package/android/src/main/java/com/marianhello/bgloc/data/BackgroundLocation.java +1088 -0
  37. package/android/src/main/java/com/marianhello/bgloc/data/ConfigJsonMapper.java +211 -0
  38. package/android/src/main/java/com/marianhello/bgloc/data/ConfigurationDAO.java +13 -0
  39. package/android/src/main/java/com/marianhello/bgloc/data/DAOFactory.java +17 -0
  40. package/android/src/main/java/com/marianhello/bgloc/data/HashMapLocationTemplate.java +82 -0
  41. package/android/src/main/java/com/marianhello/bgloc/data/LocationDAO.java +27 -0
  42. package/android/src/main/java/com/marianhello/bgloc/data/LocationTemplate.java +12 -0
  43. package/android/src/main/java/com/marianhello/bgloc/data/LocationTemplateFactory.java +71 -0
  44. package/android/src/main/java/com/marianhello/bgloc/data/LocationTransform.java +19 -0
  45. package/android/src/main/java/com/marianhello/bgloc/data/SessionLocationDAO.java +18 -0
  46. package/android/src/main/java/com/marianhello/bgloc/data/provider/ContentProviderLocationDAO.java +406 -0
  47. package/android/src/main/java/com/marianhello/bgloc/data/provider/LocationContentProvider.java +321 -0
  48. package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationContract.java +94 -0
  49. package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationDAO.java +227 -0
  50. package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationContract.java +122 -0
  51. package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationDAO.java +550 -0
  52. package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteOpenHelper.java +189 -0
  53. package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteSessionContract.java +74 -0
  54. package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteSessionLocationDAO.java +169 -0
  55. package/android/src/main/java/com/marianhello/bgloc/driving/DrivingEventsDetector.java +265 -0
  56. package/android/src/main/java/com/marianhello/bgloc/headless/AbstractTaskRunner.java +15 -0
  57. package/android/src/main/java/com/marianhello/bgloc/headless/ActivityTask.java +48 -0
  58. package/android/src/main/java/com/marianhello/bgloc/headless/JsCallback.java +10 -0
  59. package/android/src/main/java/com/marianhello/bgloc/headless/LocationTask.java +60 -0
  60. package/android/src/main/java/com/marianhello/bgloc/headless/StationaryTask.java +25 -0
  61. package/android/src/main/java/com/marianhello/bgloc/headless/Task.java +8 -0
  62. package/android/src/main/java/com/marianhello/bgloc/headless/TaskRunner.java +5 -0
  63. package/android/src/main/java/com/marianhello/bgloc/headless/TaskRunnerFactory.java +8 -0
  64. package/android/src/main/java/com/marianhello/bgloc/http/UrlTemplateResolver.java +115 -0
  65. package/android/src/main/java/com/marianhello/bgloc/oem/BatteryOemHelper.java +214 -0
  66. package/android/src/main/java/com/marianhello/bgloc/provider/AbstractLocationProvider.java +218 -0
  67. package/android/src/main/java/com/marianhello/bgloc/provider/ActivityRecognitionLocationProvider.java +385 -0
  68. package/android/src/main/java/com/marianhello/bgloc/provider/DistanceFilterLocationProvider.java +685 -0
  69. package/android/src/main/java/com/marianhello/bgloc/provider/LocationProvider.java +32 -0
  70. package/android/src/main/java/com/marianhello/bgloc/provider/LocationProviderFactory.java +47 -0
  71. package/android/src/main/java/com/marianhello/bgloc/provider/ProviderDelegate.java +12 -0
  72. package/android/src/main/java/com/marianhello/bgloc/provider/RawLocationProvider.java +175 -0
  73. package/android/src/main/java/com/marianhello/bgloc/sensor/SensorFusionDetector.java +199 -0
  74. package/android/src/main/java/com/marianhello/bgloc/service/LocationService.java +16 -0
  75. package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceImpl.java +1531 -0
  76. package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceInfo.java +6 -0
  77. package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceInfoImpl.java +41 -0
  78. package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceIntentBuilder.java +203 -0
  79. package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceProxy.java +156 -0
  80. package/android/src/main/java/com/marianhello/bgloc/sync/AccountHelper.java +39 -0
  81. package/android/src/main/java/com/marianhello/bgloc/sync/Authenticator.java +68 -0
  82. package/android/src/main/java/com/marianhello/bgloc/sync/AuthenticatorService.java +28 -0
  83. package/android/src/main/java/com/marianhello/bgloc/sync/BatchManager.java +311 -0
  84. package/android/src/main/java/com/marianhello/bgloc/sync/NotificationHelper.java +148 -0
  85. package/android/src/main/java/com/marianhello/bgloc/sync/SyncAdapter.java +301 -0
  86. package/android/src/main/java/com/marianhello/bgloc/sync/SyncService.java +68 -0
  87. package/android/src/main/java/com/marianhello/logging/DBLogReader.java +208 -0
  88. package/android/src/main/java/com/marianhello/logging/LogEntry.java +99 -0
  89. package/android/src/main/java/com/marianhello/logging/LoggerManager.java +70 -0
  90. package/android/src/main/java/com/marianhello/logging/UncaughtExceptionLogger.java +36 -0
  91. package/android/src/main/java/com/marianhello/utils/CloneHelper.java +22 -0
  92. package/android/src/main/java/com/marianhello/utils/Convert.java +56 -0
  93. package/android/src/main/java/com/marianhello/utils/TextUtils.java +72 -0
  94. package/android/src/main/java/com/marianhello/utils/ToneGenerator.java +68 -0
  95. package/android/src/main/java/org/apache/commons/io/Charsets.java +153 -0
  96. package/android/src/main/java/org/apache/commons/io/input/ReversedLinesFileReader.java +344 -0
  97. package/android/src/main/java/org/chromium/content/browser/ThreadUtils.java +134 -0
  98. package/android/src/main/java/ru/andremoniy/sqlbuilder/SqlExpression.java +398 -0
  99. package/android/src/main/java/ru/andremoniy/sqlbuilder/SqlSelectStatement.java +671 -0
  100. package/android/src/main/java/ru/andremoniy/sqlbuilder/SqlStatement.java +29 -0
  101. package/android/src/main/java/ru/andremoniy/utils/TextUtils.java +61 -0
  102. package/android/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  103. package/android/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  104. package/android/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  105. package/android/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  106. package/android/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  107. package/android/src/main/res/values/strings.xml +15 -0
  108. package/android/src/main/res/xml/authenticator.xml +7 -0
  109. package/android/src/main/res/xml/syncadapter.xml +9 -0
  110. package/dist/esm/definitions.d.ts +1052 -0
  111. package/dist/esm/definitions.js +142 -0
  112. package/dist/esm/definitions.js.map +1 -0
  113. package/dist/esm/index.d.ts +8 -0
  114. package/dist/esm/index.js +23 -0
  115. package/dist/esm/index.js.map +1 -0
  116. package/dist/esm/web.d.ts +92 -0
  117. package/dist/esm/web.js +242 -0
  118. package/dist/esm/web.js.map +1 -0
  119. package/dist/plugin.cjs.js +415 -0
  120. package/dist/plugin.cjs.js.map +1 -0
  121. package/dist/plugin.js +418 -0
  122. package/dist/plugin.js.map +1 -0
  123. package/ios/Sources/BackgroundGeolocationPlugin/BackgroundGeolocationPlugin-Bridging-Header.h +18 -0
  124. package/ios/Sources/BackgroundGeolocationPlugin/BackgroundGeolocationPlugin.m +52 -0
  125. package/ios/Sources/BackgroundGeolocationPlugin/BackgroundGeolocationPlugin.swift +750 -0
  126. package/ios/Tests/BackgroundGeolocationPluginTests/BackgroundGeolocationPluginTests.swift +12 -0
  127. package/ios/common/BackgroundGeolocation/CocoaLumberjack.h +1945 -0
  128. package/ios/common/BackgroundGeolocation/CocoaLumberjack.m +5255 -0
  129. package/ios/common/BackgroundGeolocation/FMDB.h +2357 -0
  130. package/ios/common/BackgroundGeolocation/FMDB.m +2672 -0
  131. package/ios/common/BackgroundGeolocation/FMDBLogger.h +42 -0
  132. package/ios/common/BackgroundGeolocation/FMDBLogger.m +264 -0
  133. package/ios/common/BackgroundGeolocation/INTULocationManager/INTUHeadingRequest.h +41 -0
  134. package/ios/common/BackgroundGeolocation/INTULocationManager/INTUHeadingRequest.m +68 -0
  135. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager+Internal.h +33 -0
  136. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager.h +178 -0
  137. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager.m +1025 -0
  138. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequest.h +103 -0
  139. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequest.m +238 -0
  140. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequestDefines.h +163 -0
  141. package/ios/common/BackgroundGeolocation/INTULocationManager/INTURequestIDGenerator.h +39 -0
  142. package/ios/common/BackgroundGeolocation/INTULocationManager/INTURequestIDGenerator.m +37 -0
  143. package/ios/common/BackgroundGeolocation/MAURAbstractLocationProvider.h +51 -0
  144. package/ios/common/BackgroundGeolocation/MAURAbstractLocationProvider.m +53 -0
  145. package/ios/common/BackgroundGeolocation/MAURActivity.h +23 -0
  146. package/ios/common/BackgroundGeolocation/MAURActivity.m +52 -0
  147. package/ios/common/BackgroundGeolocation/MAURActivityLocationProvider.h +18 -0
  148. package/ios/common/BackgroundGeolocation/MAURActivityLocationProvider.m +340 -0
  149. package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.h +88 -0
  150. package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.m +1193 -0
  151. package/ios/common/BackgroundGeolocation/MAURBackgroundSync.h +46 -0
  152. package/ios/common/BackgroundGeolocation/MAURBackgroundSync.m +283 -0
  153. package/ios/common/BackgroundGeolocation/MAURBackgroundTaskManager.h +25 -0
  154. package/ios/common/BackgroundGeolocation/MAURBackgroundTaskManager.m +105 -0
  155. package/ios/common/BackgroundGeolocation/MAURConfig.h +99 -0
  156. package/ios/common/BackgroundGeolocation/MAURConfig.m +636 -0
  157. package/ios/common/BackgroundGeolocation/MAURConfigurationContract.h +53 -0
  158. package/ios/common/BackgroundGeolocation/MAURConfigurationContract.m +54 -0
  159. package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.h +20 -0
  160. package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.m +550 -0
  161. package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.h +17 -0
  162. package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.m +124 -0
  163. package/ios/common/BackgroundGeolocation/MAURLocation.h +73 -0
  164. package/ios/common/BackgroundGeolocation/MAURLocation.m +392 -0
  165. package/ios/common/BackgroundGeolocation/MAURLocationContract.h +38 -0
  166. package/ios/common/BackgroundGeolocation/MAURLocationContract.m +39 -0
  167. package/ios/common/BackgroundGeolocation/MAURLocationManager.h +53 -0
  168. package/ios/common/BackgroundGeolocation/MAURLocationManager.m +305 -0
  169. package/ios/common/BackgroundGeolocation/MAURLogReader.h +26 -0
  170. package/ios/common/BackgroundGeolocation/MAURLogReader.m +122 -0
  171. package/ios/common/BackgroundGeolocation/MAURLogging.h +19 -0
  172. package/ios/common/BackgroundGeolocation/MAURPostLocationTask.h +53 -0
  173. package/ios/common/BackgroundGeolocation/MAURPostLocationTask.m +367 -0
  174. package/ios/common/BackgroundGeolocation/MAURProviderDelegate.h +52 -0
  175. package/ios/common/BackgroundGeolocation/MAURRawLocationProvider.h +18 -0
  176. package/ios/common/BackgroundGeolocation/MAURRawLocationProvider.m +138 -0
  177. package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.h +26 -0
  178. package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.m +335 -0
  179. package/ios/common/BackgroundGeolocation/MAURSQLiteHelper.h +57 -0
  180. package/ios/common/BackgroundGeolocation/MAURSQLiteHelper.m +93 -0
  181. package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.h +52 -0
  182. package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.m +520 -0
  183. package/ios/common/BackgroundGeolocation/MAURSQLiteOpenHelper.h +32 -0
  184. package/ios/common/BackgroundGeolocation/MAURSQLiteOpenHelper.m +276 -0
  185. package/ios/common/BackgroundGeolocation/MAURSensorFusionDetector.h +41 -0
  186. package/ios/common/BackgroundGeolocation/MAURSensorFusionDetector.m +137 -0
  187. package/ios/common/BackgroundGeolocation/MAURSessionLocationContract.h +29 -0
  188. package/ios/common/BackgroundGeolocation/MAURSessionLocationContract.m +31 -0
  189. package/ios/common/BackgroundGeolocation/MAURSessionLocationDAO.h +25 -0
  190. package/ios/common/BackgroundGeolocation/MAURSessionLocationDAO.m +153 -0
  191. package/ios/common/BackgroundGeolocation/MAURUncaughtExceptionLogger.h +20 -0
  192. package/ios/common/BackgroundGeolocation/MAURUncaughtExceptionLogger.m +62 -0
  193. package/ios/common/BackgroundGeolocation/MAURUrlTemplateResolver.h +31 -0
  194. package/ios/common/BackgroundGeolocation/MAURUrlTemplateResolver.m +107 -0
  195. package/ios/common/BackgroundGeolocation/Reachability.h +102 -0
  196. package/ios/common/BackgroundGeolocation/Reachability.m +475 -0
  197. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/README.md +170 -0
  198. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/ext/NSString+ZIMString.h +55 -0
  199. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/ext/NSString+ZIMString.m +47 -0
  200. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlDataManipulationCommand.h +27 -0
  201. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlExpression.h +250 -0
  202. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlExpression.m +259 -0
  203. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlSelectStatement.h +360 -0
  204. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlSelectStatement.m +427 -0
  205. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlStatement.h +37 -0
  206. package/ios/common/BackgroundGeolocation/module.modulemap +16 -0
  207. package/package.json +82 -0
@@ -0,0 +1,671 @@
1
+ /*
2
+ * Java port of Objective-C SQL Query Builder
3
+ *
4
+ * https://github.com/ziminji/objective-c-sql-query-builder
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at:
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ package ru.andremoniy.sqlbuilder;
20
+
21
+ import ru.andremoniy.utils.TextUtils;
22
+
23
+ import java.util.ArrayList;
24
+ import java.util.List;
25
+
26
+ /*!
27
+ @class SqlSelectStatement
28
+ @discussion This class represents an SQL select statement.
29
+ @updated 2012-04-10
30
+ @see http://www.sqlite.org/lang_select.html
31
+ */
32
+ public class SqlSelectStatement implements SqlStatement {
33
+
34
+ protected Boolean _distinct = null;
35
+ protected String _all = null;
36
+ protected List _column = null;
37
+ protected List _table = null;
38
+ protected List _join = null;
39
+ protected List _where = null;
40
+ protected List _groupBy = null;
41
+ protected List _having = null;
42
+ protected List _orderBy = null;
43
+ protected Integer _limit = 0;
44
+ protected Integer _offset = 0;
45
+ protected List _combine = null;
46
+
47
+ public SqlSelectStatement() {
48
+ _distinct = false;
49
+ _all = "*";
50
+ _column = new ArrayList();
51
+ _table = new ArrayList();
52
+ _join = new ArrayList();
53
+ _where = new ArrayList();
54
+ _groupBy = new ArrayList();
55
+ _having = new ArrayList();
56
+ _orderBy = new ArrayList();
57
+ _limit = 0;
58
+ _offset = 0;
59
+ _combine = new ArrayList();
60
+ }
61
+
62
+ /*!
63
+ @method distinct:
64
+ @discussion This method will add the "DISTINCT" keyword to the SQL statement.
65
+ @param distinct This will determine whether the "DISTINCT" keyword should added.
66
+ @updated 2011-03-17
67
+ */
68
+ public void distinct(Boolean distinct) {
69
+ _distinct = distinct;
70
+ }
71
+
72
+ /*!
73
+ @method all:
74
+ @discussion This method will set the wildcard to be used in the SQL statement.
75
+ @param column The column to be selected.
76
+ @updated 2012-04-10
77
+ */
78
+ public void all(String all) {
79
+ if (all != null) {
80
+ _all = SqlExpression.prepareIdentifier(all);
81
+ if (!_all.endsWith(".*")) {
82
+ _all = String.format("%s.*", _all);
83
+ }
84
+ }
85
+ else {
86
+ _all = "*";
87
+ }
88
+ _column.clear();
89
+ }
90
+
91
+ /*!
92
+ @method column:
93
+ @discussion This method will add a column to the SQL statement.
94
+ @param column The column to be selected.
95
+ @updated 2012-03-24
96
+ */
97
+ public void column(Object column) {
98
+ _column.add(SqlExpression.prepareIdentifier(column));
99
+ }
100
+
101
+ /*!
102
+ @method column:alias:
103
+ @discussion This method will add a column to the SQL statement.
104
+ @param column The column to be selected.
105
+ @param alias The alias to be used.
106
+ @updated 2012-03-24
107
+ */
108
+ public void column(Object column, String alias) {
109
+ _column.add(String.format("%s AS %s", SqlExpression.prepareIdentifier(column), SqlExpression.prepareAlias(alias)));
110
+ }
111
+
112
+ /*!
113
+ @method columns:
114
+ @discussion This method will add the columns to the SQL statement.
115
+ @param column The columns to be selected.
116
+ @updated 2012-04-10
117
+ */
118
+ public void columns(String[] columns) {
119
+ for (String column : columns) {
120
+ _column.add(SqlExpression.prepareIdentifier(column));
121
+ }
122
+ }
123
+
124
+ /*!
125
+ @method from:
126
+ @discussion This method will add a from clause to the SQL statement.
127
+ @param table The table to used in the clause.
128
+ @updated 2012-03-24
129
+ */
130
+ public void from(String table) {
131
+ _table.add(SqlExpression.prepareIdentifier(table));
132
+ }
133
+
134
+ /*!
135
+ @method from:alias:
136
+ @discussion This method will add a from clause to the SQL statement.
137
+ @param table The table to used in the clause.
138
+ @param alias The alias to be used.
139
+ @updated 2012-03-24
140
+ */
141
+ public void from(String table, String alias) {
142
+ _table.add(String.format("%s %s", _all, SqlExpression.prepareIdentifier(table), SqlExpression.prepareAlias(alias)));
143
+ }
144
+
145
+ /*!
146
+ @method join:
147
+ @discussion This method will add a join clause to the SQL statement.
148
+ @param table The table to used in the clause.
149
+ @updated 2012-03-24
150
+ */
151
+ public void join(String table) {
152
+ join(table, SqlExpression.SqlJoinTypeInner);
153
+ }
154
+
155
+ /*!
156
+ @method join:alias:
157
+ @discussion This method will add a join clause to the SQL statement.
158
+ @param table The table to used in the clause.
159
+ @param alias The alias to be used.
160
+ @updated 2012-03-24
161
+ */
162
+ public void join(String table, String alias) {
163
+ join(table, alias, SqlExpression.SqlJoinTypeInner);
164
+ }
165
+
166
+ /*!
167
+ @method join:type:
168
+ @discussion This method will add a join clause to the SQL statement.
169
+ @param table The table to used in the clause.
170
+ @param type The type of join clause.
171
+ @updated 2012-03-24
172
+ */
173
+ public void join(String table, Object type) {
174
+ String join = String.format("%s JOIN %s", SqlExpression.prepareJoinType((String)type), SqlExpression.prepareIdentifier(table));
175
+ _join.add(new Object[] { join, new ArrayList(), new ArrayList() });
176
+ }
177
+
178
+ /*!
179
+ @method join:alias:type:
180
+ @discussion This method will add a join clause to the SQL statement.
181
+ @param table The table to used in the clause.
182
+ @param alias The alias to be used.
183
+ @param type The type of join clause.
184
+ @updated 2012-03-24
185
+ */
186
+ public void join(String table, String alias, String type) {
187
+ String join = String.format("%s JOIN %s %s", SqlExpression.prepareJoinType(type), SqlExpression.prepareIdentifier(table), SqlExpression.prepareAlias(alias));
188
+ _join.add(new Object[] { join, new ArrayList(), new ArrayList() });
189
+ }
190
+
191
+ /*!
192
+ @method joinOn:operator:column:
193
+ @discussion This method will add a join condition to the last defined join clause.
194
+ @param column1 The column to be tested.
195
+ @param operator The operator to be used.
196
+ @param column2 The column to be tested on.
197
+ @updated 2012-03-24
198
+ */
199
+ public void joinOn(String column1, String operator, String column2) {
200
+ joinOn(column1, operator, column2, SqlExpression.SqlConnectorAnd);
201
+ }
202
+
203
+ /*!
204
+ @method joinOn:operator:column:connector:
205
+ @discussion This method will add a join condition to the last defined join clause.
206
+ @param column1 The column to be tested.
207
+ @param operator The operator to be used.
208
+ @param column2 The column to be tested on.
209
+ @param connector The connector to be used.
210
+ @updated 2012-03-24
211
+ */
212
+ public void joinOn(String column1, String operator, String column2, String connector) {
213
+ int length = _join.size();
214
+ if (length > 0) {
215
+ int index = length - 1;
216
+ ArrayList joinCondition = (ArrayList) ((Object[]) _join.get(index))[2];
217
+ if (joinCondition.size() > 0) {
218
+ throw new IllegalArgumentException("May not declare two different types of constraints on a JOIN statement.");
219
+ }
220
+ joinCondition = (ArrayList)((Object[]) _join.get(index))[1];
221
+ joinCondition.add(new Object[]{
222
+ SqlExpression.prepareConnector(connector),
223
+ String.format("%s %s %s",
224
+ SqlExpression.prepareIdentifier(column1),
225
+ operator != null ? operator.toUpperCase() : "",
226
+ SqlExpression.prepareIdentifier(column2)
227
+ )
228
+ });
229
+ } else {
230
+ throw new IllegalArgumentException("Must declare a JOIN clause before declaring a constraint.");
231
+ }
232
+ }
233
+
234
+ /*!
235
+ @method joinOn:operator:value:
236
+ @discussion This method will add a join condition to the last defined join clause.
237
+ @param column The column to be tested.
238
+ @param operator The operator to be used.
239
+ @param value The value to be compared.
240
+ @updated 2012-03-24
241
+ */
242
+ public void joinOn(String column, String operator, Object value) {
243
+ throw new UnsupportedOperationException();
244
+ }
245
+
246
+ /*!
247
+ @method joinOn:operator:value:connector:
248
+ @discussion This method will add a join condition to the last defined join clause.
249
+ @param column The column to be tested.
250
+ @param operator The operator to be used.
251
+ @param value The value to be compared.
252
+ @param connector The connector to be used.
253
+ @updated 2012-03-24
254
+ */
255
+ public void joinOn(Object column, String operator, Object value, String connector) {
256
+ throw new UnsupportedOperationException();
257
+ }
258
+
259
+ /*!
260
+ @method joinUsing:
261
+ @discussion This method will add a join condition to the last defined join clause.
262
+ @param column The column to be tested.
263
+ @updated 2011-07-15
264
+ */
265
+ public void joinUsing(String column) {
266
+ throw new UnsupportedOperationException();
267
+ }
268
+
269
+ /*!
270
+ @method whereBlock:
271
+ @discussion This method will start or end a block.
272
+ @param brace The brace to be used; it is either an opening or closing brace.
273
+ @updated 2011-03-13
274
+ */
275
+ public void whereBlock(String brace) {
276
+ throw new UnsupportedOperationException();
277
+ }
278
+
279
+ /*!
280
+ @method whereBlock:connector:
281
+ @discussion This method will start or end a block.
282
+ @param brace The brace to be used; it is either an opening or closing brace.
283
+ @param connector The connector to be used.
284
+ @updated 2011-04-01
285
+ */
286
+ public void whereBlock(String brace, String connector) {
287
+ throw new UnsupportedOperationException();
288
+ }
289
+
290
+ /*!
291
+ @method where:operator:column:
292
+ @discussion This method will add a where clause to the SQL statement.
293
+ @param column1 The column to be tested.
294
+ @param operator The operator to be used.
295
+ @param column2 The column to be compared.
296
+ @updated 2012-03-24
297
+ */
298
+ public void where(String column1, String operator, String column2) {
299
+ where(column1, operator, column2, SqlExpression.SqlConnectorAnd);
300
+ }
301
+
302
+ /*!
303
+ @method where:operator:column:connector:
304
+ @discussion This method will add a where clause to the SQL statement.
305
+ @param column1 The column to be tested.
306
+ @param operator The operator to be used.
307
+ @param column2 The column to be compared.
308
+ @param connector The connector to be used.
309
+ @updated 2012-03-24
310
+ */
311
+ public void where(String column1, String operator, String column2, String connector) {
312
+ _where.add(new Object[]{
313
+ SqlExpression.prepareConnector(connector),
314
+ String.format("%s %s %s", SqlExpression.prepareIdentifier(column1), SqlExpression.prepareIdentifier(column2))
315
+ });
316
+ }
317
+
318
+ /*!
319
+ @method where:operator:value:
320
+ @discussion This method will add a where clause to the SQL statement.
321
+ @param column The column to be tested.
322
+ @param operator The operator to be used.
323
+ @param value The value to be compared.
324
+ @updated 2012-03-24
325
+ */
326
+ public void where(String column, String operator, Object value) {
327
+ where(column, operator, value, SqlExpression.SqlConnectorAnd);
328
+ }
329
+
330
+ /*!
331
+ @method where:operator:value:connector:
332
+ @discussion This method will add a where clause to the SQL statement.
333
+ @param column The column to be tested.
334
+ @param operator The operator to be used.
335
+ @param value The value to be compared.
336
+ @param connector The connector to be used.
337
+ @updated 2012-03-24
338
+ */
339
+ public void where(String column, String operator, Object value, String connector) {
340
+ if (operator == null) {
341
+ return;
342
+ }
343
+ operator = operator.toUpperCase();
344
+ if (SqlExpression.SqlOperatorBetween.equals(operator) || SqlExpression.SqlOperatorNotBetween.equals(operator)) {
345
+ if (!(value != null && value.getClass().isArray())) {
346
+ throw new IllegalArgumentException("Operator requires the value to be declared as an array");
347
+ }
348
+ _where.add(new Object[] {
349
+ SqlExpression.prepareConnector(connector),
350
+ String.format("%s %s %s AND %s",
351
+ SqlExpression.prepareIdentifier(column),
352
+ operator,
353
+ SqlExpression.prepareValue(((Object[])value)[0]),
354
+ SqlExpression.prepareValue(((Object[])value)[1])
355
+ )
356
+ });
357
+ } else {
358
+ if ((SqlExpression.SqlOperatorIn.equals(operator)
359
+ || SqlExpression.SqlOperatorNotIn.equals(operator))
360
+ && !(value != null && value.getClass().isArray())) {
361
+ throw new IllegalArgumentException("Operator requires the value to be declared as an array");
362
+ } else if (SqlExpression.NULL.equals(value)) {
363
+ if (SqlExpression.SqlOperatorEqualTo.equals(operator)) {
364
+ operator = SqlExpression.SqlOperatorIs;
365
+ } else if (SqlExpression.SqlOperatorNotEqualTo.equals(operator) || "!=".equals(operator)) {
366
+ operator = SqlExpression.SqlOperatorIsNot;
367
+ }
368
+ }
369
+ _where.add(new Object[] {
370
+ SqlExpression.prepareConnector(connector),
371
+ String.format("%s %s %s",
372
+ SqlExpression.prepareIdentifier(column),
373
+ operator,
374
+ SqlExpression.prepareValue(value)
375
+ )
376
+ });
377
+ }
378
+ }
379
+
380
+ /*!
381
+ @method groupBy:
382
+ @discussion This method will add a group by clause to the SQL statement.
383
+ @param column The column to be grouped.
384
+ @updated 2011-04-01
385
+ */
386
+ public void groupBy(String column) {
387
+ throw new UnsupportedOperationException();
388
+ }
389
+
390
+ /*!
391
+ @method groupByHavingBlock:
392
+ @discussion This method will start or end a block.
393
+ @param brace The brace to be used; it is either an opening or closing brace.
394
+ @updated 2011-03-18
395
+ */
396
+ public void groupByHavingBlock(String brace) {
397
+ throw new UnsupportedOperationException();
398
+ }
399
+
400
+ /*!
401
+ @method groupByHavingBlock:connector:
402
+ @discussion This method will start or end a block.
403
+ @param brace The brace to be used; it is either an opening or closing brace.
404
+ @param connector The connector to be used.
405
+ @updated 2011-03-18
406
+ */
407
+ public void groupByHavingBlock(String brace, String connector) {
408
+ throw new UnsupportedOperationException();
409
+ }
410
+
411
+ ;
412
+
413
+ /*!
414
+ @method groupByHaving:operator:column:
415
+ @discussion This method will add a having clause to the SQL statement.
416
+ @param column1 The column to be tested.
417
+ @param operator The operator to be used.
418
+ @param column2 The column to be compared.
419
+ @updated 2012-03-24
420
+ */
421
+ public void groupByHaving(Object column1, String operator, Object column2) {
422
+ throw new UnsupportedOperationException();
423
+ }
424
+
425
+ /*!
426
+ @method groupByHaving:operator:column:connector:
427
+ @discussion This method will add a having clause to the SQL statement.
428
+ @param column1 The column to be tested.
429
+ @param operator The operator to be used.
430
+ @param column2 The column to be compared.
431
+ @param connector The connector to be used.
432
+ @updated 2012-03-24
433
+ */
434
+ public void groupByHaving(Object column1, String operator, Object column2, String connector) {
435
+ throw new UnsupportedOperationException();
436
+ }
437
+
438
+ /*!
439
+ @method groupByHaving:operator:value:
440
+ @discussion This method will add a having clause to the SQL statement.
441
+ @param column The column to be tested.
442
+ @param operator The operator to be used.
443
+ @param value The value to be compared.
444
+ @updated 2012-03-24
445
+ */
446
+ public void groupByHavingValue(Object column, String operator, Object value) {
447
+ throw new UnsupportedOperationException();
448
+ }
449
+
450
+ /*!
451
+ @method groupByHaving:operator:value:connector:
452
+ @discussion This method will add a having clause to the SQL statement.
453
+ @param column The column to be tested.
454
+ @param operator The operator to be used.
455
+ @param value The value to be compared.
456
+ @param connector The connector to be used.
457
+ @updated 2012-03-24
458
+ */
459
+ public void groupByHavingValue(Object column, String operator, Object value, String connector) {
460
+ throw new UnsupportedOperationException();
461
+ }
462
+
463
+ /*!
464
+ @method orderBy:
465
+ @discussion This method will add an order by clause to the SQL statement.
466
+ @param column The column to be ordered.
467
+ @updated 2012-03-19
468
+ */
469
+ public void orderBy(String column) {
470
+ orderBy(column, false, null);
471
+ }
472
+
473
+ /*!
474
+ @method orderBy:descending:
475
+ @discussion This method will add an order by clause to the SQL statement.
476
+ @param column The column to be ordered.
477
+ @param descending This will determine whether the column should be ordered in descending order.
478
+ @updated 2012-03-19
479
+ */
480
+ public void orderBy(String column, Boolean descending) {
481
+ orderBy(column, descending, null);
482
+ }
483
+
484
+ /*!
485
+ @method orderBy:nulls:
486
+ @discussion This method will add an order by clause to the SQL statement.
487
+ @param column The column to be ordered.
488
+ @param weight This indicates how nulls are to be weighed when comparing with non-nulls.
489
+ @updated 2012-03-19
490
+ @see http://sqlite.org/cvstrac/wiki?p=UnsupportedSql
491
+ @see https://hibernate.onjira.com/browse/HHH-465
492
+ @see http://sqlblog.com/blogs/denis_gobo/archive/2007/10/19/3048.aspx
493
+ */
494
+ public void orderBy(String column, String weight) {
495
+ orderBy(column, false, weight);
496
+ }
497
+
498
+ /*!
499
+ @method orderBy:descending:nulls:
500
+ @discussion This method will add an order by clause to the SQL statement.
501
+ @param column The column to be ordered.
502
+ @param descending This will determine whether the column should be ordered in descending order.
503
+ @param weight This indicates how nulls are to be weighed when comparing with non-nulls.
504
+ @updated 2012-03-19
505
+ @see http://sqlite.org/cvstrac/wiki?p=UnsupportedSql
506
+ @see https://hibernate.onjira.com/browse/HHH-465
507
+ @see http://sqlblog.com/blogs/denis_gobo/archive/2007/10/19/3048.aspx
508
+ */
509
+ public void orderBy(String column, Boolean descending, String weight) {
510
+ String field = SqlExpression.prepareIdentifier(column);
511
+ String order = SqlExpression.prepareSortOrder(descending);
512
+ weight = SqlExpression.prepareSortWeight(weight);
513
+ if ("FIRST".equals(weight)) {
514
+ _orderBy.add(String.format("CASE WHEN %s IS NULL THEN 0 ELSE 1 END, %s %s",
515
+ field, field, order));
516
+ } else if ("LAST".equals(weight)) {
517
+ _orderBy.add(String.format("CASE WHEN %s IS NULL THEN 1 ELSE 0 END, %s %s",
518
+ field, field, order));
519
+ } else {
520
+ _orderBy.add(String.format("%s %s", field, order));
521
+ }
522
+ }
523
+
524
+ /*!
525
+ @method limit:
526
+ @discussion This method will add a limit clause to the SQL statement.
527
+ @param limit The number of records to be returned.
528
+ @updated 2012-03-18
529
+ */
530
+ public void limit(Integer limit) {
531
+ _limit = limit;
532
+ }
533
+
534
+ /*!
535
+ @method limit:offset:
536
+ @discussion This method will add a limit clause and an offset clause to the SQL statement.
537
+ @param limit The number of records to be returned.
538
+ @param offset The starting point to start evaluating.
539
+ @updated 2012-03-18
540
+ */
541
+ public void limit(Integer limit, Integer offset) {
542
+ _limit = limit;
543
+ _offset = offset;
544
+ }
545
+
546
+ /*!
547
+ @method offset:
548
+ @discussion This method will add an offset clause to the SQL statement.
549
+ @param offset The starting point to start evaluating.
550
+ @updated 2012-03-18
551
+ */
552
+ public void offset(Integer offset) {
553
+ _offset = offset;
554
+ }
555
+
556
+
557
+ /*!
558
+ @method combine:operator:
559
+ @discussion This method will combine a select statement using the specified operator.
560
+ @param statement The select statement that will be appended.
561
+ @param operator The operator to be used. Must use UNION, UNION ALL, INTERSECT, or EXCEPT.
562
+ @updated 2012-03-18
563
+ */
564
+ public void combine(String statement, String operator) {
565
+ throw new UnsupportedOperationException();
566
+ }
567
+
568
+
569
+ /*!
570
+ @method statement
571
+ @discussion This method will return the SQL statement.
572
+ @return The SQL statement that was constructed.
573
+ @updated 2012-04-10
574
+ */
575
+ public String statement() {
576
+ StringBuilder b = new StringBuilder();
577
+ b.append("SELECT ");
578
+
579
+ if (_distinct) {
580
+ b.append("DISTINCT ");
581
+ }
582
+
583
+ if (_column.size() > 0) {
584
+ b.append(TextUtils.join(", ", _column));
585
+ } else {
586
+ b.append(_all);
587
+ }
588
+
589
+ if (_table.size() > 0) {
590
+ b.append(" FROM ");
591
+ b.append(TextUtils.join(", ", _table));
592
+ }
593
+
594
+ for (Object join : _join) {
595
+ Object[] joinArray = (Object[])join;
596
+ b.append(" ").append(joinArray[0]);
597
+ Object[] joinCondition = (Object[])joinArray[1];
598
+ if (joinCondition.length > 0) {
599
+ b.append(" ON (");
600
+ int i = 0;
601
+ for (Object joinParts : joinCondition) {
602
+ Object[] joinPartsArray = (Object[])join;
603
+ String onClause = (String)joinPartsArray[1];
604
+ if (i > 0) {
605
+ b.append(joinPartsArray[0]).append(" ");
606
+ }
607
+ b.append(onClause);
608
+ i++;
609
+ }
610
+ b.append(")");
611
+ } else {
612
+ joinCondition = (Object[])joinArray[2];
613
+ if (joinCondition.length > 0) {
614
+ b.append(" USING (").append(TextUtils.join(", ", joinCondition)).append(")");
615
+ }
616
+ }
617
+ }
618
+
619
+ if (_where.size() > 0) {
620
+ boolean doAppendConnector = false;
621
+ b.append(" WHERE ");
622
+ for (Object where : _where) {
623
+ Object[] whereArray = (Object[])where;
624
+ String whereClause = (String)whereArray[1];
625
+ if (doAppendConnector && !SqlExpression.SqlEnclosureClosingBrace.equals(whereClause)) {
626
+ b.append(" ").append(whereArray[0]).append(" ");
627
+ }
628
+ b.append(whereClause);
629
+ doAppendConnector = (!SqlExpression.SqlEnclosureOpeningBrace.equals(whereClause));
630
+ }
631
+ }
632
+
633
+ if (_groupBy.size() > 0) {
634
+ b.append(" GROUP BY ").append(TextUtils.join(", ", _groupBy));
635
+ }
636
+
637
+ if (_having.size() > 0) {
638
+ boolean doAppendConnector = false;
639
+ b.append(" HAVING ");
640
+ for (Object having : _having) {
641
+ Object[] havingArray = (Object[])having;
642
+ String havingClause = (String)havingArray[1];
643
+ if (doAppendConnector && !SqlExpression.SqlEnclosureClosingBrace.equals(havingClause)) {
644
+ b.append(" ").append(havingArray[0]).append(" ");
645
+ }
646
+ b.append(havingClause);
647
+ doAppendConnector = (!SqlExpression.SqlEnclosureOpeningBrace.equals(havingClause));
648
+ }
649
+ }
650
+
651
+ if (_orderBy.size() > 0) {
652
+ b.append(" ORDER BY ").append(TextUtils.join(", ", _orderBy));
653
+ }
654
+
655
+ if (_limit > 0) {
656
+ b.append(" LIMIT ").append(_limit);
657
+ }
658
+
659
+ if (_offset > 0) {
660
+ b.append(" OFFSET ").append(_offset);
661
+ }
662
+
663
+ for (Object combine : _combine) {
664
+ b.append(" ").append(combine);
665
+ }
666
+
667
+ b.append(";");
668
+
669
+ return b.toString();
670
+ }
671
+ }
@@ -0,0 +1,29 @@
1
+ /*
2
+ * Java port of Objective-C SQL Query Builder
3
+ *
4
+ * https://github.com/ziminji/objective-c-sql-query-builder
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at:
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ package ru.andremoniy.sqlbuilder;
20
+
21
+ interface SqlStatement {
22
+ /*!
23
+ @method statement
24
+ @discussion This method will return the SQL statement.
25
+ @return The SQL statement that was constructed.
26
+ @updated 2011-04-02
27
+ */
28
+ String statement();
29
+ }