├── .gitignore ├── Library ├── .gitignore ├── build.gradle.kts └── src │ └── main │ └── java │ └── com │ └── jummania │ ├── DataManager.java │ ├── DataManagerFactory.java │ ├── DataManagerImpl.java │ ├── converter │ └── GsonConverter.java │ └── model │ ├── PaginatedData.java │ └── Pagination.java ├── README.md ├── build.gradle.kts ├── docs └── javadoc │ ├── allclasses-index.html │ ├── allpackages-index.html │ ├── com │ └── jummania │ │ ├── DataManager.Converter.html │ │ ├── DataManager.DataObserver.html │ │ ├── DataManager.html │ │ ├── DataManagerFactory.html │ │ ├── converter │ │ ├── GsonConverter.html │ │ ├── package-summary.html │ │ └── package-tree.html │ │ ├── model │ │ ├── PaginatedData.html │ │ ├── Pagination.html │ │ ├── package-summary.html │ │ └── package-tree.html │ │ ├── package-summary.html │ │ └── package-tree.html │ ├── element-list │ ├── help-doc.html │ ├── index-all.html │ ├── index.html │ ├── jquery-ui.overrides.css │ ├── legal │ ├── ASSEMBLY_EXCEPTION │ ├── jquery.md │ └── jqueryUI.md │ ├── member-search-index.js │ ├── module-search-index.js │ ├── overview-summary.html │ ├── overview-tree.html │ ├── package-search-index.js │ ├── resources │ ├── glass.png │ └── x.png │ ├── script-dir │ ├── jquery-3.7.1.min.js │ ├── jquery-ui.min.css │ └── jquery-ui.min.js │ ├── script.js │ ├── search.js │ ├── stylesheet.css │ ├── tag-search-index.js │ └── type-search-index.js ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── jitpack.yml └── settings.gradle.kts /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | -------------------------------------------------------------------------------- /Library/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /Library/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("java-library") 3 | id("maven-publish") 4 | } 5 | 6 | java { 7 | sourceCompatibility = JavaVersion.VERSION_1_8 8 | targetCompatibility = JavaVersion.VERSION_1_8 9 | toolchain { 10 | languageVersion = JavaLanguageVersion.of(17) 11 | } 12 | } 13 | 14 | dependencies { 15 | implementation("com.google.code.gson:gson:2.13.1") 16 | } 17 | 18 | 19 | publishing { 20 | publications { 21 | create("mavenJava") { 22 | from(components["java"]) 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /Library/src/main/java/com/jummania/DataManager.java: -------------------------------------------------------------------------------- 1 | package com.jummania; 2 | 3 | import com.jummania.model.PaginatedData; 4 | 5 | import java.io.Reader; 6 | import java.lang.reflect.Type; 7 | import java.util.List; 8 | 9 | /** 10 | * Interface for managing data operations such as saving, retrieving, and deleting key-value data, 11 | * including support for JSON serialization, pagination, and list management. 12 | *

13 | * Implementations of this interface should provide persistent or in-memory storage functionality. 14 | *

15 | * Created by Jummania on 20, November, 2024. 16 | * Email: sharifuddinjumman@gmail.com 17 | * Dhaka, Bangladesh. 18 | */ 19 | 20 | 21 | public interface DataManager { 22 | 23 | 24 | /** 25 | * Retrieves a string value associated with the given key. 26 | * If no value is found or the value is null, returns the provided default value. 27 | * 28 | * @param key the key to look up the value 29 | * @param defValue the default value to return if no value is found or if the result is null 30 | * @return the retrieved string value or the default value if not found 31 | */ 32 | default String getString(String key, String defValue) { 33 | String value = getObject(key, String.class); 34 | return value != null ? value : defValue; 35 | } 36 | 37 | 38 | /** 39 | * Retrieves a string value associated with the given key. 40 | * If no value is found or the value is null, returns null. 41 | *

42 | * This is a shorthand method that calls {@link #getString(String, String)} with a default value of null. 43 | * 44 | * @param key the key to look up the value 45 | * @return the retrieved string value or null if not found 46 | */ 47 | default String getString(String key) { 48 | return getString(key, null); 49 | } 50 | 51 | 52 | /** 53 | * Retrieves an integer value associated with the given key. 54 | * If no value is found or the value is null, returns the provided default value. 55 | * 56 | * @param key the key to look up the value 57 | * @param defValue the default value to return if no value is found or if the result is null 58 | * @return the retrieved integer value or the default value if not found 59 | */ 60 | default int getInt(String key, int defValue) { 61 | Integer value = getObject(key, Integer.class); 62 | return value != null ? value : defValue; 63 | } 64 | 65 | 66 | /** 67 | * Retrieves an integer value associated with the given key. 68 | * If no value is found or the value is null, returns 0. 69 | *

70 | * This is a shorthand method that calls {@link #getInt(String, int)} with a default value of 0. 71 | * 72 | * @param key the key to look up the value 73 | * @return the retrieved integer value or 0 if not found 74 | */ 75 | default int getInt(String key) { 76 | return getInt(key, 0); 77 | } 78 | 79 | 80 | /** 81 | * Retrieves a long value associated with the given key. 82 | * If no value is found or the value is null, returns the provided default value. 83 | * 84 | * @param key the key to look up the value 85 | * @param defValue the default value to return if no value is found or if the result is null 86 | * @return the retrieved long value or the default value if not found 87 | */ 88 | default long getLong(String key, long defValue) { 89 | Long value = getObject(key, Long.class); 90 | return value != null ? value : defValue; 91 | } 92 | 93 | 94 | /** 95 | * Retrieves a long value associated with the given key. 96 | * If no value is found or the value is null, returns 0. 97 | *

98 | * This is a shorthand method that calls {@link #getLong(String, long)} with a default value of 0. 99 | * 100 | * @param key the key to look up the value 101 | * @return the retrieved long value or 0 if not found 102 | */ 103 | default long getLong(String key) { 104 | return getLong(key, 0L); 105 | } 106 | 107 | 108 | /** 109 | * Retrieves a float value associated with the given key. 110 | * If no value is found or the value is null, returns the provided default value. 111 | * 112 | * @param key the key to look up the value 113 | * @param defValue the default value to return if no value is found or if the result is null 114 | * @return the retrieved float value or the default value if not found 115 | */ 116 | default float getFloat(String key, float defValue) { 117 | Float value = getObject(key, Float.class); 118 | return value != null ? value : defValue; 119 | } 120 | 121 | 122 | /** 123 | * Retrieves a float value associated with the given key. 124 | * If no value is found or the value is null, returns 0. 125 | *

126 | * This is a shorthand method that calls {@link #getFloat(String, float)} with a default value of 0. 127 | * 128 | * @param key the key to look up the value 129 | * @return the retrieved float value or 0 if not found 130 | */ 131 | default float getFloat(String key) { 132 | return getFloat(key, 0F); 133 | } 134 | 135 | 136 | /** 137 | * Retrieves a boolean value associated with the given key. 138 | * If no value is found or the value is null, returns the provided default value. 139 | * 140 | * @param key the key to look up the value 141 | * @param defValue the default value to return if no value is found or if the result is null 142 | * @return the retrieved boolean value or the default value if not found 143 | */ 144 | default boolean getBoolean(String key, boolean defValue) { 145 | Boolean value = getObject(key, Boolean.class); 146 | return value != null ? value : defValue; 147 | } 148 | 149 | 150 | /** 151 | * Retrieves a boolean value associated with the given key. 152 | * If no value is found or the value is null, returns false. 153 | *

154 | * This is a shorthand method that calls {@link #getBoolean(String, boolean)} with a default value of false. 155 | * 156 | * @param key the key to look up the value 157 | * @return the retrieved boolean value or false if not found 158 | */ 159 | default boolean getBoolean(String key) { 160 | return getBoolean(key, false); 161 | } 162 | 163 | 164 | /** 165 | * Retrieves the raw string value associated with the given key. 166 | * The value is returned as-is, without any defaulting behavior. 167 | * 168 | * @param key the key to look up the value 169 | * @return the raw string value associated with the key, or null if not found 170 | */ 171 | String getRawString(String key); 172 | 173 | 174 | /** 175 | * Retrieves an object of the specified type associated with the given key. 176 | * The object is deserialized from the underlying data source to match the specified type. 177 | * 178 | * @param key the key to look up the object 179 | * @param type the type of the object to be returned 180 | * @param the type of the object to be returned 181 | * @return the object of the specified type associated with the key, or null if not found or if the type doesn't match 182 | */ 183 | T getObject(String key, Type type); 184 | 185 | 186 | /** 187 | * Retrieves a list of objects of the specified type associated with the given key. 188 | * The list is deserialized from the underlying data source to match the specified type. 189 | * 190 | * @param key the key to look up the list of objects 191 | * @param tClass the type of the objects in the list 192 | * @param the type of the objects in the list 193 | * @return the list of objects of the specified type associated with the key, or an empty list if not found 194 | */ 195 | List getFullList(String key, Class tClass); 196 | 197 | 198 | /** 199 | * Retrieves a paginated list of objects of the specified type associated with the given key. 200 | * The list is deserialized from the underlying data source to match the specified type, with pagination support. 201 | * 202 | * @param key the key to look up the paginated list of objects 203 | * @param tClass the type of the objects in the list 204 | * @param page the page number to retrieve 205 | * @param the type of the objects in the list 206 | * @return a {@link PaginatedData} object containing the paginated list of objects of the specified type, 207 | * or an empty paginated data if no objects are found 208 | */ 209 | PaginatedData getPagedList(String key, Class tClass, int page); 210 | 211 | 212 | /** 213 | * Saves a string value associated with the given key. 214 | * If the key already exists, the value will be updated. 215 | * 216 | * @param key the key to associate with the string value 217 | * @param value the string value to save 218 | */ 219 | void saveString(String key, String value); 220 | 221 | 222 | /** 223 | * Saves an integer value associated with the given key by converting the integer to a string. 224 | * If the key already exists, the value will be updated. 225 | *

226 | * This is a shorthand method that calls {@link #saveString(String, String)} by converting the integer value to a string. 227 | * 228 | * @param key the key to associate with the integer value 229 | * @param value the integer value to save 230 | */ 231 | default void saveInt(String key, int value) { 232 | saveString(key, Integer.toString(value)); 233 | } 234 | 235 | 236 | /** 237 | * Saves a long value associated with the given key by converting the long to a string. 238 | * If the key already exists, the value will be updated. 239 | *

240 | * This is a shorthand method that calls {@link #saveString(String, String)} by converting the long value to a string. 241 | * 242 | * @param key the key to associate with the long value 243 | * @param value the long value to save 244 | */ 245 | default void saveLong(String key, long value) { 246 | saveString(key, Long.toString(value)); 247 | } 248 | 249 | 250 | /** 251 | * Saves a float value associated with the given key by converting the float to a string. 252 | * If the key already exists, the value will be updated. 253 | *

254 | * This is a shorthand method that calls {@link #saveString(String, String)} by converting the float value to a string. 255 | * 256 | * @param key the key to associate with the float value 257 | * @param value the float value to save 258 | */ 259 | default void saveFloat(String key, float value) { 260 | saveString(key, Float.toString(value)); 261 | } 262 | 263 | 264 | /** 265 | * Saves a boolean value associated with the given key by converting the boolean to a string. 266 | * If the key already exists, the value will be updated. 267 | *

268 | * This is a shorthand method that calls {@link #saveString(String, String)} by converting the boolean value to a string. 269 | * 270 | * @param key the key to associate with the boolean value 271 | * @param value the boolean value to save 272 | */ 273 | default void saveBoolean(String key, boolean value) { 274 | saveString(key, Boolean.toString(value)); 275 | } 276 | 277 | 278 | /** 279 | * Saves an object associated with the given key by converting the object to a JSON string. 280 | * If the key already exists, the value will be updated. 281 | *

282 | * This is a shorthand method that calls {@link #saveString(String, String)} by converting the object to a JSON string using {@link #toJson(Object)}. 283 | * 284 | * @param key the key to associate with the object 285 | * @param value the object to save 286 | */ 287 | default void saveObject(String key, Object value) { 288 | saveString(key, toJson(value)); 289 | } 290 | 291 | 292 | /** 293 | * Saves a list of objects associated with the given key by converting the list to a JSON string. 294 | * If the key already exists, the value will be updated. 295 | * The size of the list is capped to the specified maximum array size. 296 | * 297 | * @param key the key to associate with the list of objects 298 | * @param value the list of objects to save 299 | * @param maxArraySize the maximum number of elements in the list to be saved 300 | * @param the type of elements in the list 301 | */ 302 | void saveList(String key, List value, int maxArraySize); 303 | 304 | 305 | /** 306 | * Saves a list of objects associated with the given key by converting the list to a JSON string. 307 | * If the key already exists, the value will be updated. The size of the list is capped to 25 elements. 308 | *

309 | * This is a shorthand method that calls {@link #saveList(String, List, int)} with a default maximum array size of 25. 310 | * 311 | * @param key the key to associate with the list of objects 312 | * @param value the list of objects to save 313 | * @param the type of elements in the list 314 | */ 315 | default void saveList(String key, List value) { 316 | saveList(key, value, 25); 317 | } 318 | 319 | 320 | /** 321 | * Appends an element to a list associated with the given key at the specified index. 322 | * If the list does not exist, a new list will be created. 323 | * Optionally, duplicates can be removed before appending the element. 324 | * 325 | * @param key the key to identify the list 326 | * @param index the position at which to insert the element in the list 327 | * @param element the element to append to the list 328 | * @param removeDuplicate whether to remove duplicate elements before appending the new element 329 | */ 330 | void appendToList(String key, int index, Object element, boolean removeDuplicate); 331 | 332 | 333 | /** 334 | * Appends an element to a list associated with the given key at the specified index. 335 | * If the list does not exist, a new list will be created. Duplicates are not removed by default. 336 | *

337 | * This is a shorthand method that calls {@link #appendToList(String, int, Object, boolean)} with the 338 | * `removeDuplicate` flag set to false. 339 | * 340 | * @param key the key to identify the list 341 | * @param index the position at which to insert the element in the list 342 | * @param element the element to append to the list 343 | */ 344 | default void appendToList(String key, int index, Object element) { 345 | appendToList(key, index, element, false); 346 | } 347 | 348 | 349 | /** 350 | * Appends an element to a list associated with the given key. The element is added at the end of the list. 351 | * If the list does not exist, a new list will be created. Optionally, duplicates can be removed before appending the element. 352 | *

353 | * This is a shorthand method that calls {@link #appendToList(String, int, Object, boolean)} with the index set to -1, 354 | * indicating the element should be appended to the end of the list. 355 | * 356 | * @param key the key to identify the list 357 | * @param element the element to append to the list 358 | * @param removeDuplicate whether to remove duplicate elements before appending the new element 359 | */ 360 | default void appendToList(String key, Object element, boolean removeDuplicate) { 361 | appendToList(key, -1, element, removeDuplicate); 362 | } 363 | 364 | 365 | /** 366 | * Appends an element to a list associated with the given key. The element is added at the end of the list. 367 | * If the list does not exist, a new list will be created. Duplicates are not removed by default. 368 | *

369 | * This is a shorthand method that calls {@link #appendToList(String, Object, boolean)} with the index set to -1 370 | * and the `removeDuplicate` flag set to false, meaning the element will be added to the end of the list without 371 | * removing duplicates. 372 | * 373 | * @param key the key to identify the list 374 | * @param element the element to append to the list 375 | */ 376 | default void appendToList(String key, Object element) { 377 | appendToList(key, -1, element, false); 378 | } 379 | 380 | 381 | /** 382 | * Removes an element from the list associated with the given key at the specified index. 383 | * If the list does not contain an element at the given index, no changes will be made. 384 | * 385 | * @param key the key to identify the list 386 | * @param index the position of the element to remove from the list 387 | */ 388 | void removeFromList(String key, int index); 389 | 390 | 391 | /** 392 | * Converts a JSON string into an object of the specified type. 393 | * This method deserializes the given JSON string into an instance of the provided type using the Gson library (or similar). 394 | * 395 | * @param value the JSON string to deserialize 396 | * @param tClass the Type of the object to convert the JSON string into 397 | * @param the type of the object to return 398 | * @return the deserialized object of the specified type 399 | */ 400 | T fromJson(String value, Class tClass); 401 | 402 | 403 | /** 404 | * Converts a JSON input stream (Reader) into an object of the specified type. 405 | * This method deserializes the provided JSON from the given reader into an instance of the provided type. 406 | * 407 | * @param json the Reader that contains the JSON data to deserialize 408 | * @param typeOfT the Type of the object to convert the JSON data into 409 | * @param the type of the object to return 410 | * @return the deserialized object of the specified type 411 | */ 412 | T fromReader(Reader json, Type typeOfT); 413 | 414 | 415 | /** 416 | * Converts an object into its JSON string representation. 417 | * This method serializes the given object into a JSON string using a serialization library such as Gson. 418 | * 419 | * @param object the object to serialize into JSON 420 | * @return the JSON string representation of the object 421 | */ 422 | String toJson(Object object); 423 | 424 | 425 | /** 426 | * Creates a parameterized {@link Type} using the specified raw type and type arguments. 427 | * This method is useful when dealing with generic types and allows the creation of a {@link Type} 428 | * that can represent a generic type with its actual type parameters. 429 | * 430 | * @param rawType the raw type of the generic type (e.g., {@link java.util.List List}) 431 | * @param typeArguments the type arguments that the generic type should use (e.g., {@link java.lang.String String}) 432 | * @return the parameterized type representing the raw type with the provided type arguments 433 | */ 434 | Type getParameterized(Type rawType, Type... typeArguments); 435 | 436 | 437 | /** 438 | * Removes the entry associated with the given key. 439 | * If the key does not exist, no changes will be made. 440 | * 441 | * @param key the key identifying the entry to remove 442 | */ 443 | void remove(String key); 444 | 445 | 446 | /** 447 | * Clears all entries from the data structure. 448 | * After calling this method, the data structure will be empty. 449 | */ 450 | void clear(); 451 | 452 | 453 | /** 454 | * Checks if the data structure contains an entry associated with the given key. 455 | * 456 | * @param key the key to check for existence in the data structure 457 | * @return {@code true} if the key exists in the data structure, {@code false} otherwise 458 | */ 459 | boolean contains(String key); 460 | 461 | 462 | // Data change listener registration 463 | 464 | /** 465 | * Registers a {@link DataObserver} to listen for data changes. 466 | * 467 | * @param observer The observer to be registered. 468 | */ 469 | void addDataObserver(DataObserver observer); 470 | 471 | 472 | /** 473 | * Unregisters the currently registered {@link DataObserver}. 474 | */ 475 | void removeDataObserver(); 476 | 477 | 478 | interface DataObserver { 479 | 480 | /** 481 | * Called when the data associated with a specific key has changed. 482 | * 483 | * @param key The key whose associated data has changed. 484 | */ 485 | void onDataChange(String key); 486 | 487 | /** 488 | * Called when an error occurs while processing data. 489 | * 490 | * @param error The exception or error encountered. 491 | */ 492 | void onError(Throwable error); 493 | } 494 | 495 | 496 | interface Converter { 497 | 498 | 499 | /** 500 | * Converts a Java object to its JSON representation. 501 | * 502 | * @param data the Java object to be converted to JSON 503 | * @param the type of the object 504 | * @return a JSON string representing the object 505 | */ 506 | String toJson(T data); 507 | 508 | 509 | /** 510 | * Converts a JSON string into a Java object of the specified type. 511 | * 512 | * @param json the JSON string to be converted 513 | * @param tClass the type of the object to be returned 514 | * @param the type of the object 515 | * @return the Java object represented by the JSON string 516 | */ 517 | T fromJson(String json, Class tClass); 518 | 519 | 520 | /** 521 | * Converts a JSON stream from a Reader into a Java object of the specified type. 522 | * 523 | * @param json the Reader containing the JSON data to be converted 524 | * @param typeOfT the type of the object to be returned 525 | * @param the type of the object 526 | * @return the Java object represented by the JSON data from the Reader 527 | */ 528 | T fromReader(Reader json, Type typeOfT); 529 | } 530 | 531 | 532 | } -------------------------------------------------------------------------------- /Library/src/main/java/com/jummania/DataManagerFactory.java: -------------------------------------------------------------------------------- 1 | package com.jummania; 2 | 3 | import com.jummania.converter.GsonConverter; 4 | 5 | import java.io.File; 6 | 7 | /** 8 | * Factory class for creating and managing a singleton instance of DataManager. 9 | *

10 | * This class follows the Singleton design pattern to ensure that only one instance 11 | * of DataManager is created and provides global access to it. 12 | *

13 | * It is thread-safe and provides methods to create and retrieve the DataManager instance. 14 | *

15 | * Created by Jummania on 20, November, 2024. 16 | * Email: sharifuddinjumman@gmail.com 17 | * Dhaka, Bangladesh. 18 | */ 19 | public class DataManagerFactory { 20 | 21 | // The singleton instance of DataManager 22 | private static DataManager dataManager; 23 | 24 | // Private constructor to prevent instantiation of the factory 25 | private DataManagerFactory() { 26 | } 27 | 28 | 29 | /** 30 | * Creates and returns the singleton instance of DataManager. 31 | * If the DataManager instance does not exist, it is created with the provided filesDir. 32 | * This method is synchronized to ensure thread safety during instance creation. 33 | * 34 | * @param filesDir The directory where data is to be stored. 35 | * @return The singleton instance of DataManager. 36 | */ 37 | public static synchronized DataManager create(File filesDir) { 38 | // If the instance does not exist, create a new one 39 | if (dataManager == null) { 40 | dataManager = new DataManagerImpl(filesDir, new GsonConverter()); 41 | } 42 | return dataManager; 43 | } 44 | 45 | 46 | /** 47 | * Creates and returns the singleton instance of DataManager with a specified converter. 48 | * If the DataManager instance does not exist, it is created with the provided filesDir and converter. 49 | * This method is synchronized to ensure thread safety during instance creation. 50 | * 51 | * @param filesDir The directory where data is to be stored. 52 | * @param converter The converter to be used for data serialization/deserialization. 53 | * @return The singleton instance of DataManager. 54 | */ 55 | public static synchronized DataManager create(File filesDir, DataManager.Converter converter) { 56 | // If the instance does not exist, create a new one 57 | if (dataManager == null) { 58 | dataManager = new DataManagerImpl(filesDir, converter); 59 | } 60 | return dataManager; 61 | } 62 | 63 | /** 64 | * Retrieves the singleton instance of DataManager. 65 | * If the instance is not yet created, this method throws an IllegalStateException. 66 | * 67 | * @return The singleton instance of DataManager. 68 | * @throws IllegalStateException If the DataManager instance is not yet created. 69 | */ 70 | public static DataManager getDataManager() { 71 | // Check if DataManager is initialized; if not, throw an exception 72 | if (dataManager == null) { 73 | throw new IllegalStateException("DataManagerFactory is not created. Call create(getFilesDir()) first."); 74 | } 75 | return dataManager; 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /Library/src/main/java/com/jummania/converter/GsonConverter.java: -------------------------------------------------------------------------------- 1 | package com.jummania.converter; 2 | 3 | import com.google.gson.Gson; 4 | import com.jummania.DataManager; 5 | 6 | import java.io.Reader; 7 | import java.lang.reflect.Type; 8 | 9 | /** 10 | * GsonConverter is an implementation of the Converter interface 11 | * that utilizes the Gson library for converting Java objects 12 | * to JSON format and vice versa. 13 | * 14 | *

This class provides methods to serialize Java objects to JSON strings 15 | * and to deserialize JSON strings back into Java objects using the Gson library.

16 | *

17 | * Created by Jummania on 08, December, 2024. 18 | * Email: sharifuddinjumman@gmail.com 19 | * Dhaka, Bangladesh. 20 | */ 21 | public class GsonConverter implements DataManager.Converter { 22 | private final Gson gson; 23 | 24 | 25 | /** 26 | * Default constructor that initializes the Gson instance. 27 | */ 28 | public GsonConverter() { 29 | gson = new Gson(); 30 | } 31 | 32 | 33 | /** 34 | * Constructor that accepts a custom Gson instance. 35 | * 36 | * @param gson the Gson instance to be used for conversions 37 | */ 38 | public GsonConverter(Gson gson) { 39 | this.gson = gson; 40 | } 41 | 42 | 43 | /** 44 | * Converts a Java object to its JSON representation. 45 | * 46 | * @param data the Java object to be converted to JSON 47 | * @param the type of the object 48 | * @return a JSON string representing the object 49 | */ 50 | @Override 51 | public String toJson(T data) { 52 | return gson.toJson(data); 53 | } 54 | 55 | 56 | /** 57 | * Converts a JSON string into a Java object of the specified type. 58 | * 59 | * @param json the JSON string to be converted 60 | * @param tClass the type of the object to be returned 61 | * @param the type of the object 62 | * @return the Java object represented by the JSON string 63 | */ 64 | @Override 65 | public T fromJson(String json, Class tClass) { 66 | return gson.fromJson(json, tClass); 67 | } 68 | 69 | 70 | /** 71 | * Converts a JSON stream from a Reader into a Java object of the specified type. 72 | * 73 | * @param json the Reader containing the JSON data to be converted 74 | * @param typeOfT the type of the object to be returned 75 | * @param the type of the object 76 | * @return the Java object represented by the JSON data from the Reader 77 | */ 78 | @Override 79 | public T fromReader(Reader json, Type typeOfT) { 80 | return gson.fromJson(json, typeOfT); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /Library/src/main/java/com/jummania/model/PaginatedData.java: -------------------------------------------------------------------------------- 1 | package com.jummania.model; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * A generic class representing a paginated data set. 7 | * This class holds a list of data items and pagination information. 8 | *

9 | * Created by Jummania on 8, May, 2025. 10 | * Email: sharifuddinjumman@gmail.com 11 | * Dhaka, Bangladesh. 12 | * 13 | * @param the type of data items in the list 14 | */ 15 | public class PaginatedData { 16 | public List data; 17 | public Pagination pagination; 18 | 19 | 20 | /** 21 | * Constructs a PaginatedData object with the specified data and pagination information. 22 | * 23 | * @param data the list of data items for the current page 24 | * @param pagination the pagination information (e.g., current page, total pages) 25 | */ 26 | public PaginatedData(List data, Pagination pagination) { 27 | this.data = data; 28 | this.pagination = pagination; 29 | } 30 | 31 | 32 | /** 33 | * Returns a string representation of the PaginatedData object. 34 | * The string contains the data and pagination details. 35 | * 36 | * @return a string representing the PaginatedData object 37 | */ 38 | @Override 39 | public String toString() { 40 | return String.format("PaginatedData{data = %s, pagination = %s}", data, pagination); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Library/src/main/java/com/jummania/model/Pagination.java: -------------------------------------------------------------------------------- 1 | package com.jummania.model; 2 | 3 | /** 4 | * A class representing pagination information. 5 | * This class holds details about the current page, previous page, next page, and total pages. 6 | *

7 | * Created by Jummania on 8, May, 2025. 8 | * Email: sharifuddinjumman@gmail.com 9 | * Dhaka, Bangladesh. 10 | */ 11 | public class Pagination { 12 | public Integer previousPage; 13 | public int currentPage; 14 | public Integer nextPage; 15 | public int totalPages; 16 | 17 | 18 | /** 19 | * Constructs a Pagination object with the specified page information. 20 | * 21 | * @param previousPage the previous page number, or {@code null} if there is no previous page 22 | * @param currentPage the current page number 23 | * @param nextPage the next page number, or {@code null} if there is no next page 24 | * @param totalPages the total number of pages 25 | */ 26 | public Pagination(Integer previousPage, int currentPage, Integer nextPage, int totalPages) { 27 | this.previousPage = previousPage; 28 | this.currentPage = currentPage; 29 | this.nextPage = nextPage; 30 | this.totalPages = totalPages; 31 | } 32 | 33 | 34 | /** 35 | * Returns a string representation of the Pagination object. 36 | * The string contains the pagination details: previous page, current page, next page, and total pages. 37 | * 38 | * @return a string representing the Pagination object 39 | */ 40 | @Override 41 | public String toString() { 42 | return String.format("Pagination{previousPage = %s, currentPage = %d, nextPage = %s, totalPages = %d}", previousPage, currentPage, nextPage, totalPages); 43 | } 44 | } 45 | 46 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DataManager Library 2 | 3 | ![Build Status](https://img.shields.io/badge/build-passing-brightgreen) 4 | [![](https://jitpack.io/v/Jumman04/DataManager.svg)](https://jitpack.io/#Jumman04/DataManager) 5 | ![License](https://img.shields.io/badge/license-MIT-lightgrey) 6 | 7 | A simple, efficient, and flexible data management library for Java and Android. 8 | Easily store, retrieve, and manipulate data using JSON serialization with support for type safety, 9 | pagination, and file-based persistence. 10 | 11 | ## Features 12 | 13 | - **JSON Serialization/Deserialization**: Easily convert objects to and from JSON format. 14 | - **File-based Data Storage**: Store objects, strings, integers, booleans, lists, and more in local 15 | storage. 16 | - **Batch Data Handling**: Efficiently save and load lists in batches to optimize memory usage. 17 | - **On Data Change Listener**: Listen to changes in data to update your app in real time. 18 | - **Type-Safe Operations**: Work with strongly-typed objects and use generics for flexibility. 19 | - **Customizable Converter**: **NEW in version 2.8!** You can choose from the following built-in 20 | converters: 21 | - **GsonConverter**: Uses the Google Gson library for serialization and deserialization. 22 | 23 | You can also create your own converter by implementing the `DataManager.Converter` interface, 24 | allowing for even greater flexibility in handling data. 25 | 26 | --- 27 | 28 | ## Installation 29 | 30 | To include this library in your project, simply clone this repository and build the project, or you 31 | can manually add the source code to your project. 32 | 33 | Follow these steps to integrate the **DataManager** library into your project: 34 | 35 | ### Step 1: Add the JitPack Repository 36 | 37 | Add the JitPack repository to your root `settings.gradle` file: 38 | 39 | ```groovy 40 | dependencyResolutionManagement { 41 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 42 | repositories { 43 | mavenCentral() 44 | maven { url 'https://jitpack.io' } 45 | } 46 | } 47 | ``` 48 | 49 | ### Step 2: Add the Dependency 50 | 51 | Add the following dependency to your module-level `build.gradle` file: 52 | 53 | ```groovy 54 | implementation 'com.github.Jumman04:DataManager:3.0' 55 | ``` 56 | 57 | --- 58 | 59 | ## Usage 60 | 61 | ### 1. Initializing the DataManager 62 | 63 | You can initialize the DataManager with a custom converter: 64 | 65 | ```java 66 | DataManager dataManager = DataManagerFactory.create(getFilesDir(), new GsonConverter()); 67 | ``` 68 | 69 | ### 2. Storing Data 70 | 71 | Store simple data types or complex objects: 72 | 73 | ```java 74 | dataManager.putString("user_name","John Doe"); 75 | dataManager. 76 | 77 | putInt("user_age",30); 78 | ``` 79 | 80 | Store a list of objects: 81 | 82 | ```java 83 | List fruits = Arrays.asList("Apple", "Banana", "Cherry"); 84 | dataManager. 85 | 86 | putList("fruits",fruits); 87 | ``` 88 | 89 | ### 3. Retrieving Data 90 | 91 | Retrieve data with a specified key: 92 | 93 | ```java 94 | String userName = dataManager.getString("user_name", "Default Name"); 95 | int userAge = dataManager.getInt("user_age", 0); 96 | ``` 97 | 98 | Retrieve a list of data: 99 | 100 | ```java 101 | // Retrieve the full list of fruits (not recommended for very large datasets) 102 | List fruitsFull = dataManager.getFullList("fruits", String.class); 103 | 104 | // Retrieve a paginated list of fruits (page 1) 105 | PaginatedData fruitsPage = dataManager.getPagedList("fruits", String.class, 1); 106 | 107 | ``` 108 | 109 | ### 4. Data Change Listener 110 | 111 | You can register a listener to detect when data changes: 112 | 113 | ```java 114 | dataManager.addDataObserver(new DataObserver() { 115 | @Override 116 | public void onDataChange (String key){ 117 | // Handle data change for the specific key 118 | } 119 | 120 | @Override 121 | public void onError (Throwable error){ 122 | // Handle error if necessary 123 | System.err.println("Error occurred for key '" + key + "': " + error.getMessage()); 124 | } 125 | }); 126 | ``` 127 | 128 | ### 5. Creating a Custom Converter 129 | 130 | To create your own converter, implement the `DataManager.Converter` interface as follows: 131 | 132 | ```java 133 | public class MyCustomConverter implements DataManager.Converter { 134 | @Override 135 | public String toJson(T data) { 136 | return // Implement serialization logic 137 | } 138 | 139 | @Override 140 | public T fromJson(String json, Type typeOfT) { 141 | return // Implement deserialization logic 142 | } 143 | 144 | @Override 145 | public T fromReader(Reader json, Type typeOfT) { 146 | return // Implement deserialization logic from a Reader 147 | } 148 | } 149 | ``` 150 | 151 | You can then use your custom converter when initializing the `DataManager`: 152 | 153 | ```java 154 | DataManager dataManager = DataManagerFactory.create(getFilesDir(), new MyCustomConverter()); 155 | ``` 156 | 157 | ## Methods Overview 158 | 159 | | Return Type | Method Name | Description | 160 | |---------------|--------------------------------------------------------------------------------|-----------------------------------------------------------------------------| 161 | | `String` | `getRawString(String key)` | Retrieves the raw JSON string associated with the key. | 162 | | `` | `getObject(String key, Type type)` | Retrieves an object of the specified type. | 163 | | ` List` | `getFullList(String key, Type type)` | Retrieves the full list of objects (⚠️ not recommended for large datasets). | 164 | | `` | `PaginatedData getPagedList(String key, Type type, int page)` | Retrieves a paginated subset of the list. | 165 | | `String` | `getString(String key)` | Retrieves a String value or `null` if not found. | 166 | | `String` | `getString(String key, String defValue)` | Retrieves a String value with a fallback default. | 167 | | `int` | `getInt(String key)` | Retrieves an int value or 0 if not found. | 168 | | `int` | `getInt(String key, int defValue)` | Retrieves an int value with a fallback default. | 169 | | `long` | `getLong(String key)` | Retrieves a long value or 0L if not found. | 170 | | `long` | `getLong(String key, long defValue)` | Retrieves a long value with a fallback default. | 171 | | `float` | `getFloat(String key)` | Retrieves a float value or 0.0f if not found. | 172 | | `float` | `getFloat(String key, float defValue)` | Retrieves a float value with a fallback default. | 173 | | `boolean` | `getBoolean(String key)` | Retrieves a boolean value or `false` if not found. | 174 | | `boolean` | `getBoolean(String key, boolean defValue)` | Retrieves a boolean value with a fallback default. | 175 | | `` | `fromJson(String value, Type typeOfT)` | Converts a JSON string to an object of the specified type. | 176 | | `` | `fromReader(Reader json, Type typeOfT)` | Converts JSON from a `Reader` to an object of the specified type. | 177 | | `String` | `toJson(Object object)` | Converts an object to a JSON string. | 178 | | `Type` | `getParameterized(Type rawType, Type... typeArguments)` | Constructs a parameterized generic type. | 179 | | `void` | `saveString(String key, String value)` | Saves a String value. | 180 | | `void` | `saveInt(String key, int value)` | Saves an int value. | 181 | | `void` | `saveLong(String key, long value)` | Saves a long value. | 182 | | `void` | `saveFloat(String key, float value)` | Saves a float value. | 183 | | `void` | `saveBoolean(String key, boolean value)` | Saves a boolean value. | 184 | | `void` | `saveObject(String key, Object value)` | Saves an object. | 185 | | `` | `saveList(String key, List value)` | Saves a full list. | 186 | | `` | `saveList(String key, List value, int maxArraySize)` | Saves a list with a maximum size (for paging). | 187 | | `void` | `appendToList(String key, Object element)` | Appends an element to the end of the list. | 188 | | `void` | `appendToList(String key, Object element, boolean removeDuplicate)` | Appends an element, optionally removing duplicates. | 189 | | `void` | `appendToList(String key, int index, Object element)` | Inserts an element at a specific index. | 190 | | `void` | `appendToList(String key, int index, Object element, boolean removeDuplicate)` | Inserts at index with optional duplicate removal. | 191 | | `void` | `removeFromList(String key, int index)` | Removes an element at a specific index from the list. | 192 | | `void` | `remove(String key)` | Removes the item associated with the key. | 193 | | `void` | `clear()` | Clears all stored data. | 194 | | `boolean` | `contains(String key)` | Checks if a key exists in storage. | 195 | | `void` | `addDataObserver(DataObserver observer)` | Registers a data observer for change notifications. | 196 | | `void` | `removeDataObserver(DataObserver observer)` | Unregisters a data observer. | 197 | 198 | For more methods, refer to 199 | the [documentation](https://jumman04.github.io/DataManager/doc/index.html). 200 | 201 | ## Contributing 202 | 203 | We welcome contributions from the community! If you'd like to contribute, please fork the 204 | repository, make your changes, and submit a pull request. 205 | 206 | ## License 207 | 208 | This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. 209 | 210 | ## Support 211 | 212 | For any issues, please open an issue on GitHub, and we will get back to you as soon as possible. 213 | 214 | --- 215 | 216 | Created with ❤️ by [Jummania](https://github.com/yourusername) 217 | -------------------------------------------------------------------------------- /build.gradle.kts: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | plugins { 3 | id("com.android.library") version "8.7.2" apply false 4 | } -------------------------------------------------------------------------------- /docs/javadoc/allclasses-index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | All Classes and Interfaces (Library API) 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 25 |

JavaScript is disabled on your browser.
27 | 28 |
29 | 53 |
54 |
55 |
56 |

All Classes and Interfaces

57 |
58 |
59 |
60 | 68 | 76 | 84 |
85 |
87 |
88 |
Class
89 |
Description
90 | 93 |
94 |
Interface for managing data operations such as 95 | saving, retrieving, and deleting key-value data, 96 | including support for JSON serialization, pagination, and list 97 | management. 98 |
99 |
100 | 103 |
104 |   105 |
106 | 109 |
110 |   111 |
112 | 115 |
116 |
Factory class for creating and managing a singleton 117 | instance of DataManager. 118 |
119 |
120 | 123 |
124 |
GsonConverter is an implementation of the Converter 125 | interface 126 | that utilizes the Gson library for converting Java objects 127 | to JSON format and vice versa. 128 |
129 |
130 |
131 | PaginatedData<T> 135 |
136 |
137 |
A generic class representing a paginated data set. 138 |
139 |
140 |
141 | Pagination
143 |
144 |
A class representing pagination information.
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 | 153 | 154 | -------------------------------------------------------------------------------- /docs/javadoc/allpackages-index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | All Packages (Library API) 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 24 |
25 | 49 |
50 |
51 |
52 |

All Packages

53 |
54 |
Package Summary
55 |
56 |
Package
57 |
Description
58 | 60 |
 
61 | 64 |
 
65 | 67 |
 
68 |
69 |
70 |
71 |
72 | 73 | 74 | -------------------------------------------------------------------------------- /docs/javadoc/com/jummania/DataManager.Converter.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DataManager.Converter (Library API) 6 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 26 | 29 |
30 | 69 |
70 |
71 | 72 |
73 |
Package com.jummania
75 |

Interface 76 | DataManager.Converter

77 |
78 |
79 |
80 |
All Known Implementing Classes:
81 |
GsonConverter 83 |
84 |
85 |
86 |
Enclosing interface:
87 |
DataManager 88 |
89 |
90 |
91 |
public static interface DataManager.Converter
94 |
95 |
96 |
    97 | 98 |
  • 99 |
    100 |

    Method Summary

    101 |
    102 |
    104 | 113 | 122 | 131 |
    132 |
    135 |
    136 |
    Modifier and Type
    137 |
    Method
    138 |
    Description
    139 |
    140 | <T> T
    141 |
    142 | fromJson 145 | 146 | (String json, 149 | Type typeOfT) 152 |
    153 |
    154 |
    Converts a JSON string into a Java 155 | object of the specified type. 156 |
    157 |
    158 |
    159 | <T> T
    160 |
    161 | fromReader 164 | 165 | (Reader json, 168 | Type typeOfT) 171 |
    172 |
    173 |
    Converts a JSON stream from a Reader 174 | into a Java object of the specified type. 175 |
    176 |
    177 |
    178 | <T> String 182 |
    183 |
    184 | toJson 185 | 186 | (T data)
    187 |
    188 |
    Converts a Java object to its JSON 189 | representation. 190 |
    191 |
    192 |
    193 |
    194 |
    195 |
    196 |
  • 197 |
198 |
199 |
200 |
    201 | 202 |
  • 203 |
    204 |

    Method Details

    205 |
      206 |
    • 207 |
      208 |

      toJson

      209 |
      <T> String toJson 215 | 216 | (T data)
      217 |
      Converts a Java object to its JSON 218 | representation. 219 |
      220 |
      221 |
      Type Parameters:
      222 |
      T - the type of the object
      223 |
      Parameters:
      224 |
      data - the Java object to be converted 225 | to JSON 226 |
      227 |
      Returns:
      228 |
      a JSON string representing the object
      229 |
      230 |
      231 |
    • 232 |
    • 233 |
      235 |

      fromJson

      236 |
      <T> T fromJson 239 | 240 | (String json, 244 | Type typeOfT)
      247 |
      Converts a JSON string into a Java object 248 | of the specified type. 249 |
      250 |
      251 |
      Type Parameters:
      252 |
      T - the type of the object
      253 |
      Parameters:
      254 |
      json - the JSON string to be converted 255 |
      256 |
      typeOfT - the type of the object to be 257 | returned 258 |
      259 |
      Returns:
      260 |
      the Java object represented by the JSON string
      261 |
      262 |
      263 |
    • 264 |
    • 265 |
      267 |

      fromReader

      268 |
      <T> T fromReader 271 | 272 | (Reader json, 276 | Type typeOfT)
      279 |
      Converts a JSON stream from a Reader into 280 | a Java object of the specified type. 281 |
      282 |
      283 |
      Type Parameters:
      284 |
      T - the type of the object
      285 |
      Parameters:
      286 |
      json - the Reader containing the JSON 287 | data to be converted 288 |
      289 |
      typeOfT - the type of the object to be 290 | returned 291 |
      292 |
      Returns:
      293 |
      the Java object represented by the JSON data from 294 | the Reader 295 |
      296 |
      297 |
      298 |
    • 299 |
    300 |
    301 |
  • 302 |
303 |
304 | 305 |
306 |
307 |
308 | 309 | 310 | -------------------------------------------------------------------------------- /docs/javadoc/com/jummania/DataManager.DataObserver.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DataManager.DataObserver (Library API) 6 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 26 | 29 |
30 | 69 |
70 |
71 | 72 |
73 |
Package com.jummania
75 |

Interface 76 | DataManager.DataObserver

77 |
78 |
79 |
80 |
Enclosing interface:
81 |
DataManager 82 |
83 |
84 |
85 |
public static interface DataManager.DataObserver
88 |
89 |
90 |
    91 | 92 |
  • 93 |
    94 |

    Method Summary

    95 |
    96 |
    98 | 107 | 116 | 125 |
    126 |
    129 |
    130 |
    Modifier and Type
    131 |
    Method
    132 |
    Description
    133 |
    134 | void
    135 |
    136 | onDataChange 138 | 139 | (String key) 142 |
    143 |
    144 |
    Called when the data associated with 145 | a specific key has changed. 146 |
    147 |
    148 |
    149 | void
    150 |
    151 | onError 153 | 154 | (Throwable error) 157 |
    158 |
    159 |
    Called when an error occurs while 160 | processing data. 161 |
    162 |
    163 |
    164 |
    165 |
    166 |
    167 |
  • 168 |
169 |
170 |
171 |
    172 | 173 |
  • 174 |
    175 |

    Method Details

    176 |
      177 |
    • 178 |
      179 |

      onDataChange

      180 |
      void onDataChange 183 | 184 | (String key) 188 |
      189 |
      Called when the data associated with a 190 | specific key has changed. 191 |
      192 |
      193 |
      Parameters:
      194 |
      key - The key whose associated data has 195 | changed. 196 |
      197 |
      198 |
      199 |
    • 200 |
    • 201 |
      202 |

      onError

      203 |
      void onError 206 | 207 | (Throwable error) 211 |
      212 |
      Called when an error occurs while 213 | processing data. 214 |
      215 |
      216 |
      Parameters:
      217 |
      error - The exception or error 218 | encountered. 219 |
      220 |
      221 |
      222 |
    • 223 |
    224 |
    225 |
  • 226 |
227 |
228 | 229 |
230 |
231 |
232 | 233 | 234 | -------------------------------------------------------------------------------- /docs/javadoc/com/jummania/converter/package-summary.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.jummania.converter (Library API) 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 25 |
26 | 59 |
60 |
61 |
62 |

Package 63 | com.jummania.converter

64 |
65 |
66 |
package com.jummania.converter
68 |
69 |
    70 |
  • 71 | 85 |
  • 86 |
  • 87 |
    88 |
    Classes
    89 |
    90 |
    Class
    91 |
    Description
    92 |
    93 | GsonConverter 95 |
    96 |
    97 |
    GsonConverter is an implementation of the 98 | Converter interface 99 | that utilizes the Gson library for converting Java objects 100 | to JSON format and vice versa. 101 |
    102 |
    103 |
    104 |
    105 |
  • 106 |
107 |
108 |
109 |
110 |
111 | 112 | 113 | -------------------------------------------------------------------------------- /docs/javadoc/com/jummania/converter/package-tree.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.jummania.converter Class Hierarchy (Library API) 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 25 |
26 | 50 |
51 |
52 |
53 |

Hierarchy For Package com.jummania.converter

54 | Package Hierarchies: 55 | 58 |
59 |
60 |

Class Hierarchy

61 | 76 |
77 |
78 |
79 |
80 | 81 | 82 | -------------------------------------------------------------------------------- /docs/javadoc/com/jummania/model/package-summary.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.jummania.model (Library API) 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 25 |
26 | 59 |
60 |
61 |
62 |

Package com.jummania.model

63 |
64 |
65 |
package com.jummania.model
67 |
68 |
    69 |
  • 70 | 84 |
  • 85 |
  • 86 |
    87 |
    Classes
    88 |
    89 |
    Class
    90 |
    Description
    91 |
    92 | PaginatedData<T> 94 |
    95 |
    96 |
    A generic class representing a paginated data 97 | set. 98 |
    99 |
    100 |
    101 | Pagination 102 |
    103 |
    104 |
    A class representing pagination 105 | information. 106 |
    107 |
    108 |
    109 |
    110 |
  • 111 |
112 |
113 |
114 |
115 |
116 | 117 | 118 | -------------------------------------------------------------------------------- /docs/javadoc/com/jummania/model/package-tree.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.jummania.model Class Hierarchy (Library API) 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 25 |
26 | 50 |
51 |
52 |
53 |

Hierarchy For Package com.jummania.model

54 | Package Hierarchies: 55 | 58 |
59 |
60 |

Class Hierarchy

61 | 78 |
79 |
80 |
81 |
82 | 83 | 84 | -------------------------------------------------------------------------------- /docs/javadoc/com/jummania/package-summary.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.jummania (Library API) 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 25 | 28 |
29 | 62 |
63 |
64 |
65 |

Package com.jummania

66 |
67 |
68 |
package com.jummania 69 |
70 |
71 |
    72 |
  • 73 | 88 |
  • 89 |
  • 90 |
    91 |
    92 | 100 | 108 | 116 |
    117 |
    119 |
    120 |
    Class
    121 |
    Description
    122 | 125 |
    126 |
    Interface for managing data operations 127 | such as saving, retrieving, and deleting key-value data, 128 | including support for JSON serialization, pagination, 129 | and list management. 130 |
    131 |
    132 |
    133 | DataManager.Converter 135 |
    136 |
    137 |   138 |
    139 | 143 |
    144 |   145 |
    146 |
    147 | DataManagerFactory 149 |
    150 |
    151 |
    Factory class for creating and managing a 152 | singleton instance of DataManager. 153 |
    154 |
    155 |
    156 |
    157 |
    158 |
  • 159 |
160 |
161 |
162 |
163 |
164 | 165 | 166 | -------------------------------------------------------------------------------- /docs/javadoc/com/jummania/package-tree.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.jummania Class Hierarchy (Library API) 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 24 |
25 | 49 |
50 |
51 |
52 |

Hierarchy For Package com.jummania

53 | Package Hierarchies: 54 | 57 |
58 |
59 |

Class Hierarchy

60 | 73 |
74 |
75 |

Interface Hierarchy

76 | 90 |
91 |
92 |
93 |
94 | 95 | 96 | -------------------------------------------------------------------------------- /docs/javadoc/element-list: -------------------------------------------------------------------------------- 1 | com.jummania 2 | com.jummania.converter 3 | com.jummania.model 4 | -------------------------------------------------------------------------------- /docs/javadoc/help-doc.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | API Help (Library API) 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 24 |
25 | 56 |
57 |
58 |

JavaDoc Help

59 | 78 |
79 |
80 |

Navigation

81 | Starting from the Overview page, you can browse the 82 | documentation using the links in each page, and in the navigation bar at the top of 83 | each page. The Index and Search box allow you to 84 | navigate to specific declarations and summary pages, including: All Packages, All 86 | Classes and Interfaces 87 | 102 |
103 |
104 |
105 |

Kinds of Pages

106 | The following sections describe the different kinds of pages in this collection. 107 |
108 |

Overview

109 |

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

112 |
113 |
114 |

Package

115 |

Each package has a page that contains a list of its classes and interfaces, 116 | with a summary for each. These pages may contain the following 117 | categories:

118 |
    119 |
  • Interfaces
  • 120 |
  • Classes
  • 121 |
  • Enum Classes
  • 122 |
  • Exceptions
  • 123 |
  • Errors
  • 124 |
  • Annotation Interfaces
  • 125 |
126 |
127 |
128 |

Class or Interface

129 |

Each class, interface, nested class and nested interface has its own separate 130 | page. Each of these pages has three sections consisting of a declaration and 131 | description, member summary tables, and detailed member descriptions. 132 | Entries in each of these sections are omitted if they are empty or not 133 | applicable.

134 |
    135 |
  • Class Inheritance Diagram
  • 136 |
  • Direct Subclasses
  • 137 |
  • All Known Subinterfaces
  • 138 |
  • All Known Implementing Classes
  • 139 |
  • Class or Interface Declaration
  • 140 |
  • Class or Interface Description
  • 141 |
142 |
143 |
    144 |
  • Nested Class Summary
  • 145 |
  • Enum Constant Summary
  • 146 |
  • Field Summary
  • 147 |
  • Property Summary
  • 148 |
  • Constructor Summary
  • 149 |
  • Method Summary
  • 150 |
  • Required Element Summary
  • 151 |
  • Optional Element Summary
  • 152 |
153 |
154 |
    155 |
  • Enum Constant Details
  • 156 |
  • Field Details
  • 157 |
  • Property Details
  • 158 |
  • Constructor Details
  • 159 |
  • Method Details
  • 160 |
  • Element Details
  • 161 |
162 |

Note: Annotation interfaces have required and 163 | optional elements, but not methods. Only enum classes have enum constants. 164 | The components of a record class are displayed as part of the declaration of 165 | the record class. Properties are a feature of JavaFX.

166 |

The summary entries are alphabetical, while the detailed descriptions are in 167 | the order they appear in the source code. This preserves the logical 168 | groupings established by the programmer.

169 |
170 |
171 |

Other Files

172 |

Packages and modules may contain pages with additional information related to 173 | the declarations nearby.

174 |
175 |
176 |

Tree (Class Hierarchy)

177 |

There is a Class Hierarchy page for all 178 | packages, plus a hierarchy for each package. Each hierarchy page contains a 179 | list of classes and a list of interfaces. Classes are organized by 180 | inheritance structure starting with java.lang.Object. 181 | Interfaces do not inherit from java.lang.Object.

182 |
    183 |
  • When viewing the Overview page, clicking on TREE displays the hierarchy 184 | for all packages. 185 |
  • 186 |
  • When viewing a particular package, class or interface page, clicking on 187 | TREE displays the hierarchy for only that package. 188 |
  • 189 |
190 |
191 |
192 |

All Packages

193 |

The All Packages page contains an 194 | alphabetic index of all packages contained in the documentation.

195 |
196 |
197 |

All Classes and Interfaces

198 |

The All Classes and Interfaces page 199 | contains an alphabetic index of all classes and interfaces contained in the 200 | documentation, including annotation interfaces, enum classes, and record 201 | classes.

202 |
203 |
204 |

Index

205 |

The Index contains an alphabetic index of all 206 | classes, interfaces, constructors, methods, and fields in the documentation, 207 | as well as summary pages such as All 208 | Packages, All Classes and 209 | Interfaces.

210 |
211 |
212 |
213 | This help file applies to API documentation generated by the standard doclet. 214 |
215 |
216 |
217 | 218 | 219 | -------------------------------------------------------------------------------- /docs/javadoc/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Overview (Library API) 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 24 |
25 | 49 |
50 |
51 |
52 |

Library API

53 |
54 |
55 |
Packages
56 |
57 |
Package
58 |
Description
59 | 61 |
62 |   63 |
64 | 67 |
68 |   69 |
70 |
71 | com.jummania.model 72 |
73 |
74 |   75 |
76 |
77 |
78 |
79 |
80 |
81 | 82 | 83 | -------------------------------------------------------------------------------- /docs/javadoc/jquery-ui.overrides.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 | * 5 | * This code is free software; you can redistribute it and/or modify it 6 | * under the terms of the GNU General Public License version 2 only, as 7 | * published by the Free Software Foundation. Oracle designates this 8 | * particular file as subject to the "Classpath" exception as provided 9 | * by Oracle in the LICENSE file that accompanied this code. 10 | * 11 | * This code is distributed in the hope that it will be useful, but WITHOUT 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 | * version 2 for more details (a copy is included in the LICENSE file that 15 | * accompanied this code). 16 | * 17 | * You should have received a copy of the GNU General Public License version 18 | * 2 along with this work; if not, write to the Free Software Foundation, 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 | * 21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 | * or visit www.oracle.com if you need additional information or have any 23 | * questions. 24 | */ 25 | 26 | .ui-state-active, 27 | .ui-widget-content .ui-state-active, 28 | .ui-widget-header .ui-state-active, 29 | a.ui-button:active, 30 | .ui-button:active, 31 | .ui-button.ui-state-active:hover { 32 | /* Overrides the color of selection used in jQuery UI */ 33 | background: #F8981D; 34 | border: 1px solid #F8981D; 35 | } 36 | -------------------------------------------------------------------------------- /docs/javadoc/legal/ASSEMBLY_EXCEPTION: -------------------------------------------------------------------------------- 1 | 2 | OPENJDK ASSEMBLY EXCEPTION 3 | 4 | The OpenJDK source code made available by Oracle America, Inc. (Oracle) at 5 | openjdk.java.net ("OpenJDK Code") is distributed under the terms of the GNU 6 | General Public License version 2 7 | only ("GPL2"), with the following clarification and special exception. 8 | 9 | Linking this OpenJDK Code statically or dynamically with other code 10 | is making a combined work based on this library. Thus, the terms 11 | and conditions of GPL2 cover the whole combination. 12 | 13 | As a special exception, Oracle gives you permission to link this 14 | OpenJDK Code with certain code licensed by Oracle as indicated at 15 | http://openjdk.java.net/legal/exception-modules-2007-05-08.html 16 | ("Designated Exception Modules") to produce an executable, 17 | regardless of the license terms of the Designated Exception Modules, 18 | and to copy and distribute the resulting executable under GPL2, 19 | provided that the Designated Exception Modules continue to be 20 | governed by the licenses under which they were offered by Oracle. 21 | 22 | As such, it allows licensees and sublicensees of Oracle's GPL2 OpenJDK Code 23 | to build an executable that includes those portions of necessary code that 24 | Oracle could not provide under GPL2 (or that Oracle has provided under GPL2 25 | with the Classpath exception). If you modify or add to the OpenJDK code, 26 | that new GPL2 code may still be combined with Designated Exception Modules 27 | if the new code is made subject to this exception by its copyright holder. 28 | -------------------------------------------------------------------------------- /docs/javadoc/legal/jquery.md: -------------------------------------------------------------------------------- 1 | ## jQuery v3.7.1 2 | 3 | ### jQuery License 4 | 5 | ``` 6 | jQuery v 3.7.1 7 | Copyright OpenJS Foundation and other contributors, https://openjsf.org/ 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining 10 | a copy of this software and associated documentation files (the 11 | "Software"), to deal in the Software without restriction, including 12 | without limitation the rights to use, copy, modify, merge, publish, 13 | distribute, sublicense, and/or sell copies of the Software, and to 14 | permit persons to whom the Software is furnished to do so, subject to 15 | the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be 18 | included in all copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 22 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 23 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 24 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 25 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 26 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27 | ``` 28 | -------------------------------------------------------------------------------- /docs/javadoc/legal/jqueryUI.md: -------------------------------------------------------------------------------- 1 | ## jQuery UI v1.13.2 2 | 3 | ### jQuery UI License 4 | 5 | ``` 6 | Copyright jQuery Foundation and other contributors, https://jquery.org/ 7 | 8 | This software consists of voluntary contributions made by many 9 | individuals. For exact contribution history, see the revision history 10 | available at https://github.com/jquery/jquery-ui 11 | 12 | The following license applies to all parts of this software except as 13 | documented below: 14 | 15 | ==== 16 | 17 | Permission is hereby granted, free of charge, to any person obtaining 18 | a copy of this software and associated documentation files (the 19 | "Software"), to deal in the Software without restriction, including 20 | without limitation the rights to use, copy, modify, merge, publish, 21 | distribute, sublicense, and/or sell copies of the Software, and to 22 | permit persons to whom the Software is furnished to do so, subject to 23 | the following conditions: 24 | 25 | The above copyright notice and this permission notice shall be 26 | included in all copies or substantial portions of the Software. 27 | 28 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 29 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 30 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 31 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 32 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 33 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 34 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 35 | 36 | ==== 37 | 38 | Copyright and related rights for sample code are waived via CC0. Sample 39 | code is defined as all source code contained within the demos directory. 40 | 41 | CC0: http://creativecommons.org/publicdomain/zero/1.0/ 42 | 43 | ==== 44 | 45 | All files located in the node_modules and external directories are 46 | externally maintained libraries used by this software which have their 47 | own licenses; we recommend you read them, as their terms may differ from 48 | the terms above. 49 | 50 | ``` 51 | -------------------------------------------------------------------------------- /docs/javadoc/member-search-index.js: -------------------------------------------------------------------------------- 1 | memberSearchIndex = [{"p":"com.jummania","c":"DataManager","l":"addDataObserver(DataManager.DataObserver)","u":"addDataObserver(com.jummania.DataManager.DataObserver)"},{"p":"com.jummania","c":"DataManager","l":"appendToList(String, int, Object)","u":"appendToList(java.lang.String,int,java.lang.Object)"},{"p":"com.jummania","c":"DataManager","l":"appendToList(String, int, Object, boolean)","u":"appendToList(java.lang.String,int,java.lang.Object,boolean)"},{"p":"com.jummania","c":"DataManager","l":"appendToList(String, Object)","u":"appendToList(java.lang.String,java.lang.Object)"},{"p":"com.jummania","c":"DataManager","l":"appendToList(String, Object, boolean)","u":"appendToList(java.lang.String,java.lang.Object,boolean)"},{"p":"com.jummania","c":"DataManager","l":"clear()"},{"p":"com.jummania","c":"DataManager","l":"contains(String)","u":"contains(java.lang.String)"},{"p":"com.jummania","c":"DataManagerFactory","l":"create(File)","u":"create(java.io.File)"},{"p":"com.jummania","c":"DataManagerFactory","l":"create(File, DataManager.Converter)","u":"create(java.io.File,com.jummania.DataManager.Converter)"},{"p":"com.jummania.model","c":"Pagination","l":"currentPage"},{"p":"com.jummania.model","c":"PaginatedData","l":"data"},{"p":"com.jummania.converter","c":"GsonConverter","l":"fromJson(String, Type)","u":"fromJson(java.lang.String,java.lang.reflect.Type)"},{"p":"com.jummania","c":"DataManager.Converter","l":"fromJson(String, Type)","u":"fromJson(java.lang.String,java.lang.reflect.Type)"},{"p":"com.jummania","c":"DataManager","l":"fromJson(String, Type)","u":"fromJson(java.lang.String,java.lang.reflect.Type)"},{"p":"com.jummania.converter","c":"GsonConverter","l":"fromReader(Reader, Type)","u":"fromReader(java.io.Reader,java.lang.reflect.Type)"},{"p":"com.jummania","c":"DataManager.Converter","l":"fromReader(Reader, Type)","u":"fromReader(java.io.Reader,java.lang.reflect.Type)"},{"p":"com.jummania","c":"DataManager","l":"fromReader(Reader, Type)","u":"fromReader(java.io.Reader,java.lang.reflect.Type)"},{"p":"com.jummania","c":"DataManager","l":"getBoolean(String)","u":"getBoolean(java.lang.String)"},{"p":"com.jummania","c":"DataManager","l":"getBoolean(String, boolean)","u":"getBoolean(java.lang.String,boolean)"},{"p":"com.jummania","c":"DataManagerFactory","l":"getDataManager()"},{"p":"com.jummania","c":"DataManager","l":"getFloat(String)","u":"getFloat(java.lang.String)"},{"p":"com.jummania","c":"DataManager","l":"getFloat(String, float)","u":"getFloat(java.lang.String,float)"},{"p":"com.jummania","c":"DataManager","l":"getFullList(String, Type)","u":"getFullList(java.lang.String,java.lang.reflect.Type)"},{"p":"com.jummania","c":"DataManager","l":"getInt(String)","u":"getInt(java.lang.String)"},{"p":"com.jummania","c":"DataManager","l":"getInt(String, int)","u":"getInt(java.lang.String,int)"},{"p":"com.jummania","c":"DataManager","l":"getLong(String)","u":"getLong(java.lang.String)"},{"p":"com.jummania","c":"DataManager","l":"getLong(String, long)","u":"getLong(java.lang.String,long)"},{"p":"com.jummania","c":"DataManager","l":"getObject(String, Type)","u":"getObject(java.lang.String,java.lang.reflect.Type)"},{"p":"com.jummania","c":"DataManager","l":"getPagedList(String, Type, int)","u":"getPagedList(java.lang.String,java.lang.reflect.Type,int)"},{"p":"com.jummania","c":"DataManager","l":"getParameterized(Type, Type...)","u":"getParameterized(java.lang.reflect.Type,java.lang.reflect.Type...)"},{"p":"com.jummania","c":"DataManager","l":"getRawString(String)","u":"getRawString(java.lang.String)"},{"p":"com.jummania","c":"DataManager","l":"getString(String)","u":"getString(java.lang.String)"},{"p":"com.jummania","c":"DataManager","l":"getString(String, String)","u":"getString(java.lang.String,java.lang.String)"},{"p":"com.jummania.converter","c":"GsonConverter","l":"GsonConverter()","u":"%3Cinit%3E()"},{"p":"com.jummania.converter","c":"GsonConverter","l":"GsonConverter(Gson)","u":"%3Cinit%3E(com.google.gson.Gson)"},{"p":"com.jummania.model","c":"Pagination","l":"nextPage"},{"p":"com.jummania","c":"DataManager.DataObserver","l":"onDataChange(String)","u":"onDataChange(java.lang.String)"},{"p":"com.jummania","c":"DataManager.DataObserver","l":"onError(Throwable)","u":"onError(java.lang.Throwable)"},{"p":"com.jummania.model","c":"PaginatedData","l":"PaginatedData(List, Pagination)","u":"%3Cinit%3E(java.util.List,com.jummania.model.Pagination)"},{"p":"com.jummania.model","c":"PaginatedData","l":"pagination"},{"p":"com.jummania.model","c":"Pagination","l":"Pagination(Integer, int, Integer, int)","u":"%3Cinit%3E(java.lang.Integer,int,java.lang.Integer,int)"},{"p":"com.jummania.model","c":"Pagination","l":"previousPage"},{"p":"com.jummania","c":"DataManager","l":"remove(String)","u":"remove(java.lang.String)"},{"p":"com.jummania","c":"DataManager","l":"removeDataObserver()"},{"p":"com.jummania","c":"DataManager","l":"removeFromList(String, int)","u":"removeFromList(java.lang.String,int)"},{"p":"com.jummania","c":"DataManager","l":"saveBoolean(String, boolean)","u":"saveBoolean(java.lang.String,boolean)"},{"p":"com.jummania","c":"DataManager","l":"saveFloat(String, float)","u":"saveFloat(java.lang.String,float)"},{"p":"com.jummania","c":"DataManager","l":"saveInt(String, int)","u":"saveInt(java.lang.String,int)"},{"p":"com.jummania","c":"DataManager","l":"saveList(String, List)","u":"saveList(java.lang.String,java.util.List)"},{"p":"com.jummania","c":"DataManager","l":"saveList(String, List, int)","u":"saveList(java.lang.String,java.util.List,int)"},{"p":"com.jummania","c":"DataManager","l":"saveLong(String, long)","u":"saveLong(java.lang.String,long)"},{"p":"com.jummania","c":"DataManager","l":"saveObject(String, Object)","u":"saveObject(java.lang.String,java.lang.Object)"},{"p":"com.jummania","c":"DataManager","l":"saveString(String, String)","u":"saveString(java.lang.String,java.lang.String)"},{"p":"com.jummania","c":"DataManager","l":"toJson(Object)","u":"toJson(java.lang.Object)"},{"p":"com.jummania.converter","c":"GsonConverter","l":"toJson(T)"},{"p":"com.jummania","c":"DataManager.Converter","l":"toJson(T)"},{"p":"com.jummania.model","c":"PaginatedData","l":"toString()"},{"p":"com.jummania.model","c":"Pagination","l":"toString()"},{"p":"com.jummania.model","c":"Pagination","l":"totalPages"}];updateSearchResults(); -------------------------------------------------------------------------------- /docs/javadoc/module-search-index.js: -------------------------------------------------------------------------------- 1 | moduleSearchIndex = [];updateSearchResults(); -------------------------------------------------------------------------------- /docs/javadoc/overview-summary.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Library API 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 16 | 17 | 18 |
19 | 22 |

index.html

23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/javadoc/overview-tree.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Class Hierarchy (Library API) 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 24 |
25 | 49 |
50 |
51 |
52 |

Hierarchy For All Packages

53 | Package Hierarchies: 54 | 61 |
62 |
63 |

Class Hierarchy

64 | 94 |
95 |
96 |

Interface Hierarchy

97 | 109 |
110 |
111 |
112 |
113 | 114 | 115 | -------------------------------------------------------------------------------- /docs/javadoc/package-search-index.js: -------------------------------------------------------------------------------- 1 | packageSearchIndex = [{"l":"All Packages","u":"allpackages-index.html"},{"l":"com.jummania"},{"l":"com.jummania.converter"},{"l":"com.jummania.model"}];updateSearchResults(); -------------------------------------------------------------------------------- /docs/javadoc/resources/glass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jumman04/DataManager/ec1cf31080d415b6ef48f0e5f0c6c98b2a68a82e/docs/javadoc/resources/glass.png -------------------------------------------------------------------------------- /docs/javadoc/resources/x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jumman04/DataManager/ec1cf31080d415b6ef48f0e5f0c6c98b2a68a82e/docs/javadoc/resources/x.png -------------------------------------------------------------------------------- /docs/javadoc/script-dir/jquery-ui.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.13.2 - 2023-02-27 2 | * http://jqueryui.com 3 | * Includes: core.css, autocomplete.css, menu.css 4 | * Copyright jQuery Foundation and other contributors; Licensed MIT */ 5 | 6 | .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;-ms-filter:"alpha(opacity=0)"}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0} -------------------------------------------------------------------------------- /docs/javadoc/script.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2013, 2020, Oracle and/or its affiliates. All rights reserved. 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 | * 5 | * This code is free software; you can redistribute it and/or modify it 6 | * under the terms of the GNU General Public License version 2 only, as 7 | * published by the Free Software Foundation. Oracle designates this 8 | * particular file as subject to the "Classpath" exception as provided 9 | * by Oracle in the LICENSE file that accompanied this code. 10 | * 11 | * This code is distributed in the hope that it will be useful, but WITHOUT 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 | * version 2 for more details (a copy is included in the LICENSE file that 15 | * accompanied this code). 16 | * 17 | * You should have received a copy of the GNU General Public License version 18 | * 2 along with this work; if not, write to the Free Software Foundation, 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 | * 21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 | * or visit www.oracle.com if you need additional information or have any 23 | * questions. 24 | */ 25 | 26 | var moduleSearchIndex; 27 | var packageSearchIndex; 28 | var typeSearchIndex; 29 | var memberSearchIndex; 30 | var tagSearchIndex; 31 | function loadScripts(doc, tag) { 32 | createElem(doc, tag, 'search.js'); 33 | 34 | createElem(doc, tag, 'module-search-index.js'); 35 | createElem(doc, tag, 'package-search-index.js'); 36 | createElem(doc, tag, 'type-search-index.js'); 37 | createElem(doc, tag, 'member-search-index.js'); 38 | createElem(doc, tag, 'tag-search-index.js'); 39 | } 40 | 41 | function createElem(doc, tag, path) { 42 | var script = doc.createElement(tag); 43 | var scriptElement = doc.getElementsByTagName(tag)[0]; 44 | script.src = pathtoroot + path; 45 | scriptElement.parentNode.insertBefore(script, scriptElement); 46 | } 47 | 48 | function show(tableId, selected, columns) { 49 | if (tableId !== selected) { 50 | document.querySelectorAll('div.' + tableId + ':not(.' + selected + ')') 51 | .forEach(function(elem) { 52 | elem.style.display = 'none'; 53 | }); 54 | } 55 | document.querySelectorAll('div.' + selected) 56 | .forEach(function(elem, index) { 57 | elem.style.display = ''; 58 | var isEvenRow = index % (columns * 2) < columns; 59 | elem.classList.remove(isEvenRow ? oddRowColor : evenRowColor); 60 | elem.classList.add(isEvenRow ? evenRowColor : oddRowColor); 61 | }); 62 | updateTabs(tableId, selected); 63 | } 64 | 65 | function updateTabs(tableId, selected) { 66 | document.getElementById(tableId + '.tabpanel') 67 | .setAttribute('aria-labelledby', selected); 68 | document.querySelectorAll('button[id^="' + tableId + '"]') 69 | .forEach(function(tab, index) { 70 | if (selected === tab.id || (tableId === selected && index === 0)) { 71 | tab.className = activeTableTab; 72 | tab.setAttribute('aria-selected', true); 73 | tab.setAttribute('tabindex',0); 74 | } else { 75 | tab.className = tableTab; 76 | tab.setAttribute('aria-selected', false); 77 | tab.setAttribute('tabindex',-1); 78 | } 79 | }); 80 | } 81 | 82 | function switchTab(e) { 83 | var selected = document.querySelector('[aria-selected=true]'); 84 | if (selected) { 85 | if ((e.keyCode === 37 || e.keyCode === 38) && selected.previousSibling) { 86 | // left or up arrow key pressed: move focus to previous tab 87 | selected.previousSibling.click(); 88 | selected.previousSibling.focus(); 89 | e.preventDefault(); 90 | } else if ((e.keyCode === 39 || e.keyCode === 40) && selected.nextSibling) { 91 | // right or down arrow key pressed: move focus to next tab 92 | selected.nextSibling.click(); 93 | selected.nextSibling.focus(); 94 | e.preventDefault(); 95 | } 96 | } 97 | } 98 | 99 | var updateSearchResults = function() {}; 100 | 101 | function indexFilesLoaded() { 102 | return moduleSearchIndex 103 | && packageSearchIndex 104 | && typeSearchIndex 105 | && memberSearchIndex 106 | && tagSearchIndex; 107 | } 108 | 109 | // Workaround for scroll position not being included in browser history (8249133) 110 | document.addEventListener("DOMContentLoaded", function(e) { 111 | var contentDiv = document.querySelector("div.flex-content"); 112 | window.addEventListener("popstate", function(e) { 113 | if (e.state !== null) { 114 | contentDiv.scrollTop = e.state; 115 | } 116 | }); 117 | window.addEventListener("hashchange", function(e) { 118 | history.replaceState(contentDiv.scrollTop, document.title); 119 | }); 120 | contentDiv.addEventListener("scroll", function(e) { 121 | var timeoutID; 122 | if (!timeoutID) { 123 | timeoutID = setTimeout(function() { 124 | history.replaceState(contentDiv.scrollTop, document.title); 125 | timeoutID = null; 126 | }, 100); 127 | } 128 | }); 129 | if (!location.hash) { 130 | history.replaceState(contentDiv.scrollTop, document.title); 131 | } 132 | }); 133 | -------------------------------------------------------------------------------- /docs/javadoc/search.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved. 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 | * 5 | * This code is free software; you can redistribute it and/or modify it 6 | * under the terms of the GNU General Public License version 2 only, as 7 | * published by the Free Software Foundation. Oracle designates this 8 | * particular file as subject to the "Classpath" exception as provided 9 | * by Oracle in the LICENSE file that accompanied this code. 10 | * 11 | * This code is distributed in the hope that it will be useful, but WITHOUT 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 | * version 2 for more details (a copy is included in the LICENSE file that 15 | * accompanied this code). 16 | * 17 | * You should have received a copy of the GNU General Public License version 18 | * 2 along with this work; if not, write to the Free Software Foundation, 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 | * 21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 | * or visit www.oracle.com if you need additional information or have any 23 | * questions. 24 | */ 25 | 26 | var noResult = {l: "No results found"}; 27 | var loading = {l: "Loading search index..."}; 28 | var catModules = "Modules"; 29 | var catPackages = "Packages"; 30 | var catTypes = "Classes and Interfaces"; 31 | var catMembers = "Members"; 32 | var catSearchTags = "Search Tags"; 33 | var highlight = "$&"; 34 | var searchPattern = ""; 35 | var fallbackPattern = ""; 36 | var RANKING_THRESHOLD = 2; 37 | var NO_MATCH = 0xffff; 38 | var MIN_RESULTS = 3; 39 | var MAX_RESULTS = 500; 40 | var UNNAMED = ""; 41 | function escapeHtml(str) { 42 | return str.replace(//g, ">"); 43 | } 44 | function getHighlightedText(item, matcher, fallbackMatcher) { 45 | var escapedItem = escapeHtml(item); 46 | var highlighted = escapedItem.replace(matcher, highlight); 47 | if (highlighted === escapedItem) { 48 | highlighted = escapedItem.replace(fallbackMatcher, highlight) 49 | } 50 | return highlighted; 51 | } 52 | function getURLPrefix(ui) { 53 | var urlPrefix=""; 54 | var slash = "/"; 55 | if (ui.item.category === catModules) { 56 | return ui.item.l + slash; 57 | } else if (ui.item.category === catPackages && ui.item.m) { 58 | return ui.item.m + slash; 59 | } else if (ui.item.category === catTypes || ui.item.category === catMembers) { 60 | if (ui.item.m) { 61 | urlPrefix = ui.item.m + slash; 62 | } else { 63 | $.each(packageSearchIndex, function(index, item) { 64 | if (item.m && ui.item.p === item.l) { 65 | urlPrefix = item.m + slash; 66 | } 67 | }); 68 | } 69 | } 70 | return urlPrefix; 71 | } 72 | function createSearchPattern(term) { 73 | var pattern = ""; 74 | var isWordToken = false; 75 | term.replace(/,\s*/g, ", ").trim().split(/\s+/).forEach(function(w, index) { 76 | if (index > 0) { 77 | // whitespace between identifiers is significant 78 | pattern += (isWordToken && /^\w/.test(w)) ? "\\s+" : "\\s*"; 79 | } 80 | var tokens = w.split(/(?=[A-Z,.()<>[\/])/); 81 | for (var i = 0; i < tokens.length; i++) { 82 | var s = tokens[i]; 83 | if (s === "") { 84 | continue; 85 | } 86 | pattern += $.ui.autocomplete.escapeRegex(s); 87 | isWordToken = /\w$/.test(s); 88 | if (isWordToken) { 89 | pattern += "([a-z0-9_$<>\\[\\]]*?)"; 90 | } 91 | } 92 | }); 93 | return pattern; 94 | } 95 | function createMatcher(pattern, flags) { 96 | var isCamelCase = /[A-Z]/.test(pattern); 97 | return new RegExp(pattern, flags + (isCamelCase ? "" : "i")); 98 | } 99 | var watermark = 'Search'; 100 | $(function() { 101 | var search = $("#search-input"); 102 | var reset = $("#reset-button"); 103 | search.val(''); 104 | search.prop("disabled", false); 105 | reset.prop("disabled", false); 106 | search.val(watermark).addClass('watermark'); 107 | search.blur(function() { 108 | if ($(this).val().length === 0) { 109 | $(this).val(watermark).addClass('watermark'); 110 | } 111 | }); 112 | search.on('click keydown paste', function() { 113 | if ($(this).val() === watermark) { 114 | $(this).val('').removeClass('watermark'); 115 | } 116 | }); 117 | reset.click(function() { 118 | search.val('').focus(); 119 | }); 120 | search.focus()[0].setSelectionRange(0, 0); 121 | }); 122 | $.widget("custom.catcomplete", $.ui.autocomplete, { 123 | _create: function() { 124 | this._super(); 125 | this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); 126 | }, 127 | _renderMenu: function(ul, items) { 128 | var rMenu = this; 129 | var currentCategory = ""; 130 | rMenu.menu.bindings = $(); 131 | $.each(items, function(index, item) { 132 | var li; 133 | if (item.category && item.category !== currentCategory) { 134 | ul.append("
  • " + item.category + "
  • "); 135 | currentCategory = item.category; 136 | } 137 | li = rMenu._renderItemData(ul, item); 138 | if (item.category) { 139 | li.attr("aria-label", item.category + " : " + item.l); 140 | li.attr("class", "result-item"); 141 | } else { 142 | li.attr("aria-label", item.l); 143 | li.attr("class", "result-item"); 144 | } 145 | }); 146 | }, 147 | _renderItem: function(ul, item) { 148 | var label = ""; 149 | var matcher = createMatcher(escapeHtml(searchPattern), "g"); 150 | var fallbackMatcher = new RegExp(fallbackPattern, "gi") 151 | if (item.category === catModules) { 152 | label = getHighlightedText(item.l, matcher, fallbackMatcher); 153 | } else if (item.category === catPackages) { 154 | label = getHighlightedText(item.l, matcher, fallbackMatcher); 155 | } else if (item.category === catTypes) { 156 | label = (item.p && item.p !== UNNAMED) 157 | ? getHighlightedText(item.p + "." + item.l, matcher, fallbackMatcher) 158 | : getHighlightedText(item.l, matcher, fallbackMatcher); 159 | } else if (item.category === catMembers) { 160 | label = (item.p && item.p !== UNNAMED) 161 | ? getHighlightedText(item.p + "." + item.c + "." + item.l, matcher, fallbackMatcher) 162 | : getHighlightedText(item.c + "." + item.l, matcher, fallbackMatcher); 163 | } else if (item.category === catSearchTags) { 164 | label = getHighlightedText(item.l, matcher, fallbackMatcher); 165 | } else { 166 | label = item.l; 167 | } 168 | var li = $("
  • ").appendTo(ul); 169 | var div = $("
    ").appendTo(li); 170 | if (item.category === catSearchTags && item.h) { 171 | if (item.d) { 172 | div.html(label + " (" + item.h + ")
    " 173 | + item.d + "
    "); 174 | } else { 175 | div.html(label + " (" + item.h + ")"); 176 | } 177 | } else { 178 | if (item.m) { 179 | div.html(item.m + "/" + label); 180 | } else { 181 | div.html(label); 182 | } 183 | } 184 | return li; 185 | } 186 | }); 187 | function rankMatch(match, category) { 188 | if (!match) { 189 | return NO_MATCH; 190 | } 191 | var index = match.index; 192 | var input = match.input; 193 | var leftBoundaryMatch = 2; 194 | var periferalMatch = 0; 195 | // make sure match is anchored on a left word boundary 196 | if (index === 0 || /\W/.test(input[index - 1]) || "_" === input[index]) { 197 | leftBoundaryMatch = 0; 198 | } else if ("_" === input[index - 1] || (input[index] === input[index].toUpperCase() && !/^[A-Z0-9_$]+$/.test(input))) { 199 | leftBoundaryMatch = 1; 200 | } 201 | var matchEnd = index + match[0].length; 202 | var leftParen = input.indexOf("("); 203 | var endOfName = leftParen > -1 ? leftParen : input.length; 204 | // exclude peripheral matches 205 | if (category !== catModules && category !== catSearchTags) { 206 | var delim = category === catPackages ? "/" : "."; 207 | if (leftParen > -1 && leftParen < index) { 208 | periferalMatch += 2; 209 | } else if (input.lastIndexOf(delim, endOfName) >= matchEnd) { 210 | periferalMatch += 2; 211 | } 212 | } 213 | var delta = match[0].length === endOfName ? 0 : 1; // rank full match higher than partial match 214 | for (var i = 1; i < match.length; i++) { 215 | // lower ranking if parts of the name are missing 216 | if (match[i]) 217 | delta += match[i].length; 218 | } 219 | if (category === catTypes) { 220 | // lower ranking if a type name contains unmatched camel-case parts 221 | if (/[A-Z]/.test(input.substring(matchEnd))) 222 | delta += 5; 223 | if (/[A-Z]/.test(input.substring(0, index))) 224 | delta += 5; 225 | } 226 | return leftBoundaryMatch + periferalMatch + (delta / 200); 227 | 228 | } 229 | function doSearch(request, response) { 230 | var result = []; 231 | searchPattern = createSearchPattern(request.term); 232 | fallbackPattern = createSearchPattern(request.term.toLowerCase()); 233 | if (searchPattern === "") { 234 | return this.close(); 235 | } 236 | var camelCaseMatcher = createMatcher(searchPattern, ""); 237 | var fallbackMatcher = new RegExp(fallbackPattern, "i"); 238 | 239 | function searchIndexWithMatcher(indexArray, matcher, category, nameFunc) { 240 | if (indexArray) { 241 | var newResults = []; 242 | $.each(indexArray, function (i, item) { 243 | item.category = category; 244 | var ranking = rankMatch(matcher.exec(nameFunc(item)), category); 245 | if (ranking < RANKING_THRESHOLD) { 246 | newResults.push({ranking: ranking, item: item}); 247 | } 248 | return newResults.length <= MAX_RESULTS; 249 | }); 250 | return newResults.sort(function(e1, e2) { 251 | return e1.ranking - e2.ranking; 252 | }).map(function(e) { 253 | return e.item; 254 | }); 255 | } 256 | return []; 257 | } 258 | function searchIndex(indexArray, category, nameFunc) { 259 | var primaryResults = searchIndexWithMatcher(indexArray, camelCaseMatcher, category, nameFunc); 260 | result = result.concat(primaryResults); 261 | if (primaryResults.length <= MIN_RESULTS && !camelCaseMatcher.ignoreCase) { 262 | var secondaryResults = searchIndexWithMatcher(indexArray, fallbackMatcher, category, nameFunc); 263 | result = result.concat(secondaryResults.filter(function (item) { 264 | return primaryResults.indexOf(item) === -1; 265 | })); 266 | } 267 | } 268 | 269 | searchIndex(moduleSearchIndex, catModules, function(item) { return item.l; }); 270 | searchIndex(packageSearchIndex, catPackages, function(item) { 271 | return (item.m && request.term.indexOf("/") > -1) 272 | ? (item.m + "/" + item.l) : item.l; 273 | }); 274 | searchIndex(typeSearchIndex, catTypes, function(item) { 275 | return request.term.indexOf(".") > -1 ? item.p + "." + item.l : item.l; 276 | }); 277 | searchIndex(memberSearchIndex, catMembers, function(item) { 278 | return request.term.indexOf(".") > -1 279 | ? item.p + "." + item.c + "." + item.l : item.l; 280 | }); 281 | searchIndex(tagSearchIndex, catSearchTags, function(item) { return item.l; }); 282 | 283 | if (!indexFilesLoaded()) { 284 | updateSearchResults = function() { 285 | doSearch(request, response); 286 | } 287 | result.unshift(loading); 288 | } else { 289 | updateSearchResults = function() {}; 290 | } 291 | response(result); 292 | } 293 | $(function() { 294 | $("#search-input").catcomplete({ 295 | minLength: 1, 296 | delay: 300, 297 | source: doSearch, 298 | response: function(event, ui) { 299 | if (!ui.content.length) { 300 | ui.content.push(noResult); 301 | } else { 302 | $("#search-input").empty(); 303 | } 304 | }, 305 | autoFocus: true, 306 | focus: function(event, ui) { 307 | return false; 308 | }, 309 | position: { 310 | collision: "flip" 311 | }, 312 | select: function(event, ui) { 313 | if (ui.item.category) { 314 | var url = getURLPrefix(ui); 315 | if (ui.item.category === catModules) { 316 | url += "module-summary.html"; 317 | } else if (ui.item.category === catPackages) { 318 | if (ui.item.u) { 319 | url = ui.item.u; 320 | } else { 321 | url += ui.item.l.replace(/\./g, '/') + "/package-summary.html"; 322 | } 323 | } else if (ui.item.category === catTypes) { 324 | if (ui.item.u) { 325 | url = ui.item.u; 326 | } else if (ui.item.p === UNNAMED) { 327 | url += ui.item.l + ".html"; 328 | } else { 329 | url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html"; 330 | } 331 | } else if (ui.item.category === catMembers) { 332 | if (ui.item.p === UNNAMED) { 333 | url += ui.item.c + ".html" + "#"; 334 | } else { 335 | url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#"; 336 | } 337 | if (ui.item.u) { 338 | url += ui.item.u; 339 | } else { 340 | url += ui.item.l; 341 | } 342 | } else if (ui.item.category === catSearchTags) { 343 | url += ui.item.u; 344 | } 345 | if (top !== window) { 346 | parent.classFrame.location = pathtoroot + url; 347 | } else { 348 | window.location.href = pathtoroot + url; 349 | } 350 | $("#search-input").focus(); 351 | } 352 | } 353 | }); 354 | }); 355 | -------------------------------------------------------------------------------- /docs/javadoc/stylesheet.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Javadoc style sheet 3 | */ 4 | 5 | @import url('resources/fonts/dejavu.css'); 6 | 7 | /* 8 | * Styles for individual HTML elements. 9 | * 10 | * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular 11 | * HTML element throughout the page. 12 | */ 13 | 14 | body { 15 | background-color:#ffffff; 16 | color:#353833; 17 | font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; 18 | font-size:14px; 19 | margin:0; 20 | padding:0; 21 | height:100%; 22 | width:100%; 23 | } 24 | iframe { 25 | margin:0; 26 | padding:0; 27 | height:100%; 28 | width:100%; 29 | overflow-y:scroll; 30 | border:none; 31 | } 32 | a:link, a:visited { 33 | text-decoration:none; 34 | color:#4A6782; 35 | } 36 | a[href]:hover, a[href]:focus { 37 | text-decoration:none; 38 | color:#bb7a2a; 39 | } 40 | a[name] { 41 | color:#353833; 42 | } 43 | pre { 44 | font-family:'DejaVu Sans Mono', monospace; 45 | font-size:14px; 46 | } 47 | h1 { 48 | font-size:20px; 49 | } 50 | h2 { 51 | font-size:18px; 52 | } 53 | h3 { 54 | font-size:16px; 55 | } 56 | h4 { 57 | font-size:15px; 58 | } 59 | h5 { 60 | font-size:14px; 61 | } 62 | h6 { 63 | font-size:13px; 64 | } 65 | ul { 66 | list-style-type:disc; 67 | } 68 | code, tt { 69 | font-family:'DejaVu Sans Mono', monospace; 70 | } 71 | :not(h1, h2, h3, h4, h5, h6) > code, 72 | :not(h1, h2, h3, h4, h5, h6) > tt { 73 | font-size:14px; 74 | padding-top:4px; 75 | margin-top:8px; 76 | line-height:1.4em; 77 | } 78 | dt code { 79 | font-family:'DejaVu Sans Mono', monospace; 80 | font-size:14px; 81 | padding-top:4px; 82 | } 83 | .summary-table dt code { 84 | font-family:'DejaVu Sans Mono', monospace; 85 | font-size:14px; 86 | vertical-align:top; 87 | padding-top:4px; 88 | } 89 | sup { 90 | font-size:8px; 91 | } 92 | button { 93 | font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; 94 | font-size: 14px; 95 | } 96 | /* 97 | * Styles for HTML generated by javadoc. 98 | * 99 | * These are style classes that are used by the standard doclet to generate HTML documentation. 100 | */ 101 | 102 | /* 103 | * Styles for document title and copyright. 104 | */ 105 | .clear { 106 | clear:both; 107 | height:0; 108 | overflow:hidden; 109 | } 110 | .about-language { 111 | float:right; 112 | padding:0 21px 8px 8px; 113 | font-size:11px; 114 | margin-top:-9px; 115 | height:2.9em; 116 | } 117 | .legal-copy { 118 | margin-left:.5em; 119 | } 120 | .tab { 121 | background-color:#0066FF; 122 | color:#ffffff; 123 | padding:8px; 124 | width:5em; 125 | font-weight:bold; 126 | } 127 | /* 128 | * Styles for navigation bar. 129 | */ 130 | @media screen { 131 | .flex-box { 132 | position:fixed; 133 | display:flex; 134 | flex-direction:column; 135 | height: 100%; 136 | width: 100%; 137 | } 138 | .flex-header { 139 | flex: 0 0 auto; 140 | } 141 | .flex-content { 142 | flex: 1 1 auto; 143 | overflow-y: auto; 144 | } 145 | } 146 | .top-nav { 147 | background-color:#4D7A97; 148 | color:#FFFFFF; 149 | float:left; 150 | padding:0; 151 | width:100%; 152 | clear:right; 153 | min-height:2.8em; 154 | padding-top:10px; 155 | overflow:hidden; 156 | font-size:12px; 157 | } 158 | .sub-nav { 159 | background-color:#dee3e9; 160 | float:left; 161 | width:100%; 162 | overflow:hidden; 163 | font-size:12px; 164 | } 165 | .sub-nav div { 166 | clear:left; 167 | float:left; 168 | padding:0 0 5px 6px; 169 | text-transform:uppercase; 170 | } 171 | .sub-nav .nav-list { 172 | padding-top:5px; 173 | } 174 | ul.nav-list { 175 | display:block; 176 | margin:0 25px 0 0; 177 | padding:0; 178 | } 179 | ul.sub-nav-list { 180 | float:left; 181 | margin:0 25px 0 0; 182 | padding:0; 183 | } 184 | ul.nav-list li { 185 | list-style:none; 186 | float:left; 187 | padding: 5px 6px; 188 | text-transform:uppercase; 189 | } 190 | .sub-nav .nav-list-search { 191 | float:right; 192 | margin:0 0 0 0; 193 | padding:5px 6px; 194 | clear:none; 195 | } 196 | .nav-list-search label { 197 | position:relative; 198 | right:-16px; 199 | } 200 | ul.sub-nav-list li { 201 | list-style:none; 202 | float:left; 203 | padding-top:10px; 204 | } 205 | .top-nav a:link, .top-nav a:active, .top-nav a:visited { 206 | color:#FFFFFF; 207 | text-decoration:none; 208 | text-transform:uppercase; 209 | } 210 | .top-nav a:hover { 211 | text-decoration:none; 212 | color:#bb7a2a; 213 | text-transform:uppercase; 214 | } 215 | .nav-bar-cell1-rev { 216 | background-color:#F8981D; 217 | color:#253441; 218 | margin: auto 5px; 219 | } 220 | .skip-nav { 221 | position:absolute; 222 | top:auto; 223 | left:-9999px; 224 | overflow:hidden; 225 | } 226 | /* 227 | * Hide navigation links and search box in print layout 228 | */ 229 | @media print { 230 | ul.nav-list, div.sub-nav { 231 | display:none; 232 | } 233 | } 234 | /* 235 | * Styles for page header and footer. 236 | */ 237 | .title { 238 | color:#2c4557; 239 | margin:10px 0; 240 | } 241 | .sub-title { 242 | margin:5px 0 0 0; 243 | } 244 | .header ul { 245 | margin:0 0 15px 0; 246 | padding:0; 247 | } 248 | .header ul li, .footer ul li { 249 | list-style:none; 250 | font-size:13px; 251 | } 252 | /* 253 | * Styles for headings. 254 | */ 255 | body.class-declaration-page .summary h2, 256 | body.class-declaration-page .details h2, 257 | body.class-use-page h2, 258 | body.module-declaration-page .block-list h2 { 259 | font-style: italic; 260 | padding:0; 261 | margin:15px 0; 262 | } 263 | body.class-declaration-page .summary h3, 264 | body.class-declaration-page .details h3, 265 | body.class-declaration-page .summary .inherited-list h2 { 266 | background-color:#dee3e9; 267 | border:1px solid #d0d9e0; 268 | margin:0 0 6px -8px; 269 | padding:7px 5px; 270 | } 271 | /* 272 | * Styles for page layout containers. 273 | */ 274 | main { 275 | clear:both; 276 | padding:10px 20px; 277 | position:relative; 278 | } 279 | dl.notes > dt { 280 | font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; 281 | font-size:12px; 282 | font-weight:bold; 283 | margin:10px 0 0 0; 284 | color:#4E4E4E; 285 | } 286 | dl.notes > dd { 287 | margin:5px 10px 10px 0; 288 | font-size:14px; 289 | font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; 290 | } 291 | dl.name-value > dt { 292 | margin-left:1px; 293 | font-size:1.1em; 294 | display:inline; 295 | font-weight:bold; 296 | } 297 | dl.name-value > dd { 298 | margin:0 0 0 1px; 299 | font-size:1.1em; 300 | display:inline; 301 | } 302 | /* 303 | * Styles for lists. 304 | */ 305 | li.circle { 306 | list-style:circle; 307 | } 308 | ul.horizontal li { 309 | display:inline; 310 | font-size:0.9em; 311 | } 312 | div.inheritance { 313 | margin:0; 314 | padding:0; 315 | } 316 | div.inheritance div.inheritance { 317 | margin-left:2em; 318 | } 319 | ul.block-list, 320 | ul.details-list, 321 | ul.member-list, 322 | ul.summary-list { 323 | margin:10px 0 10px 0; 324 | padding:0; 325 | } 326 | ul.block-list > li, 327 | ul.details-list > li, 328 | ul.member-list > li, 329 | ul.summary-list > li { 330 | list-style:none; 331 | margin-bottom:15px; 332 | line-height:1.4; 333 | } 334 | .summary-table dl, .summary-table dl dt, .summary-table dl dd { 335 | margin-top:0; 336 | margin-bottom:1px; 337 | } 338 | ul.see-list, ul.see-list-long { 339 | padding-left: 0; 340 | list-style: none; 341 | } 342 | ul.see-list li { 343 | display: inline; 344 | } 345 | ul.see-list li:not(:last-child):after, 346 | ul.see-list-long li:not(:last-child):after { 347 | content: ", "; 348 | white-space: pre-wrap; 349 | } 350 | /* 351 | * Styles for tables. 352 | */ 353 | .summary-table, .details-table { 354 | width:100%; 355 | border-spacing:0; 356 | border-left:1px solid #EEE; 357 | border-right:1px solid #EEE; 358 | border-bottom:1px solid #EEE; 359 | padding:0; 360 | } 361 | .caption { 362 | position:relative; 363 | text-align:left; 364 | background-repeat:no-repeat; 365 | color:#253441; 366 | font-weight:bold; 367 | clear:none; 368 | overflow:hidden; 369 | padding:0; 370 | padding-top:10px; 371 | padding-left:1px; 372 | margin:0; 373 | white-space:pre; 374 | } 375 | .caption a:link, .caption a:visited { 376 | color:#1f389c; 377 | } 378 | .caption a:hover, 379 | .caption a:active { 380 | color:#FFFFFF; 381 | } 382 | .caption span { 383 | white-space:nowrap; 384 | padding-top:5px; 385 | padding-left:12px; 386 | padding-right:12px; 387 | padding-bottom:7px; 388 | display:inline-block; 389 | float:left; 390 | background-color:#F8981D; 391 | border: none; 392 | height:16px; 393 | } 394 | div.table-tabs { 395 | padding:10px 0 0 1px; 396 | margin:0; 397 | } 398 | div.table-tabs > button { 399 | border: none; 400 | cursor: pointer; 401 | padding: 5px 12px 7px 12px; 402 | font-weight: bold; 403 | margin-right: 3px; 404 | } 405 | div.table-tabs > button.active-table-tab { 406 | background: #F8981D; 407 | color: #253441; 408 | } 409 | div.table-tabs > button.table-tab { 410 | background: #4D7A97; 411 | color: #FFFFFF; 412 | } 413 | .two-column-summary { 414 | display: grid; 415 | grid-template-columns: minmax(15%, max-content) minmax(15%, auto); 416 | } 417 | .three-column-summary { 418 | display: grid; 419 | grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, auto); 420 | } 421 | .four-column-summary { 422 | display: grid; 423 | grid-template-columns: minmax(10%, max-content) minmax(10%, max-content) minmax(10%, max-content) minmax(10%, auto); 424 | } 425 | @media screen and (max-width: 600px) { 426 | .two-column-summary { 427 | display: grid; 428 | grid-template-columns: 1fr; 429 | } 430 | } 431 | @media screen and (max-width: 800px) { 432 | .three-column-summary { 433 | display: grid; 434 | grid-template-columns: minmax(10%, max-content) minmax(25%, auto); 435 | } 436 | .three-column-summary .col-last { 437 | grid-column-end: span 2; 438 | } 439 | } 440 | @media screen and (max-width: 1000px) { 441 | .four-column-summary { 442 | display: grid; 443 | grid-template-columns: minmax(15%, max-content) minmax(15%, auto); 444 | } 445 | } 446 | .summary-table > div, .details-table > div { 447 | text-align:left; 448 | padding: 8px 3px 3px 7px; 449 | } 450 | .col-first, .col-second, .col-last, .col-constructor-name, .col-summary-item-name { 451 | vertical-align:top; 452 | padding-right:0; 453 | padding-top:8px; 454 | padding-bottom:3px; 455 | } 456 | .table-header { 457 | background:#dee3e9; 458 | font-weight: bold; 459 | } 460 | .col-first, .col-first { 461 | font-size:13px; 462 | } 463 | .col-second, .col-second, .col-last, .col-constructor-name, .col-summary-item-name, .col-last { 464 | font-size:13px; 465 | } 466 | .col-first, .col-second, .col-constructor-name { 467 | vertical-align:top; 468 | overflow: auto; 469 | } 470 | .col-last { 471 | white-space:normal; 472 | } 473 | .col-first a:link, .col-first a:visited, 474 | .col-second a:link, .col-second a:visited, 475 | .col-first a:link, .col-first a:visited, 476 | .col-second a:link, .col-second a:visited, 477 | .col-constructor-name a:link, .col-constructor-name a:visited, 478 | .col-summary-item-name a:link, .col-summary-item-name a:visited, 479 | .constant-values-container a:link, .constant-values-container a:visited, 480 | .all-classes-container a:link, .all-classes-container a:visited, 481 | .all-packages-container a:link, .all-packages-container a:visited { 482 | font-weight:bold; 483 | } 484 | .table-sub-heading-color { 485 | background-color:#EEEEFF; 486 | } 487 | .even-row-color, .even-row-color .table-header { 488 | background-color:#FFFFFF; 489 | } 490 | .odd-row-color, .odd-row-color .table-header { 491 | background-color:#EEEEEF; 492 | } 493 | /* 494 | * Styles for contents. 495 | */ 496 | .deprecated-content { 497 | margin:0; 498 | padding:10px 0; 499 | } 500 | div.block { 501 | font-size:14px; 502 | font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; 503 | } 504 | .col-last div { 505 | padding-top:0; 506 | } 507 | .col-last a { 508 | padding-bottom:3px; 509 | } 510 | .module-signature, 511 | .package-signature, 512 | .type-signature, 513 | .member-signature { 514 | font-family:'DejaVu Sans Mono', monospace; 515 | font-size:14px; 516 | margin:14px 0; 517 | white-space: pre-wrap; 518 | } 519 | .module-signature, 520 | .package-signature, 521 | .type-signature { 522 | margin-top: 0; 523 | } 524 | .member-signature .type-parameters-long, 525 | .member-signature .parameters, 526 | .member-signature .exceptions { 527 | display: inline-block; 528 | vertical-align: top; 529 | white-space: pre; 530 | } 531 | .member-signature .type-parameters { 532 | white-space: normal; 533 | } 534 | /* 535 | * Styles for formatting effect. 536 | */ 537 | .source-line-no { 538 | color:green; 539 | padding:0 30px 0 0; 540 | } 541 | h1.hidden { 542 | visibility:hidden; 543 | overflow:hidden; 544 | font-size:10px; 545 | } 546 | .block { 547 | display:block; 548 | margin:0 10px 5px 0; 549 | color:#474747; 550 | } 551 | .deprecated-label, .descfrm-type-label, .implementation-label, .member-name-label, .member-name-link, 552 | .module-label-in-package, .module-label-in-type, .override-specify-label, .package-label-in-type, 553 | .package-hierarchy-label, .type-name-label, .type-name-link, .search-tag-link, .preview-label { 554 | font-weight:bold; 555 | } 556 | .deprecation-comment, .help-footnote, .preview-comment { 557 | font-style:italic; 558 | } 559 | .deprecation-block { 560 | font-size:14px; 561 | font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; 562 | border-style:solid; 563 | border-width:thin; 564 | border-radius:10px; 565 | padding:10px; 566 | margin-bottom:10px; 567 | margin-right:10px; 568 | display:inline-block; 569 | } 570 | .preview-block { 571 | font-size:14px; 572 | font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; 573 | border-style:solid; 574 | border-width:thin; 575 | border-radius:10px; 576 | padding:10px; 577 | margin-bottom:10px; 578 | margin-right:10px; 579 | display:inline-block; 580 | } 581 | div.block div.deprecation-comment { 582 | font-style:normal; 583 | } 584 | /* 585 | * Styles specific to HTML5 elements. 586 | */ 587 | main, nav, header, footer, section { 588 | display:block; 589 | } 590 | /* 591 | * Styles for javadoc search. 592 | */ 593 | .ui-autocomplete-category { 594 | font-weight:bold; 595 | font-size:15px; 596 | padding:7px 0 7px 3px; 597 | background-color:#4D7A97; 598 | color:#FFFFFF; 599 | } 600 | .result-item { 601 | font-size:13px; 602 | } 603 | .ui-autocomplete { 604 | max-height:85%; 605 | max-width:65%; 606 | overflow-y:scroll; 607 | overflow-x:scroll; 608 | white-space:nowrap; 609 | box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); 610 | } 611 | ul.ui-autocomplete { 612 | position:fixed; 613 | z-index:999999; 614 | background-color: #FFFFFF; 615 | } 616 | ul.ui-autocomplete li { 617 | float:left; 618 | clear:both; 619 | width:100%; 620 | } 621 | .result-highlight { 622 | font-weight:bold; 623 | } 624 | .ui-autocomplete .result-item { 625 | font-size: inherit; 626 | } 627 | #search-input { 628 | background-image:url('resources/glass.png'); 629 | background-size:13px; 630 | background-repeat:no-repeat; 631 | background-position:2px 3px; 632 | padding-left:20px; 633 | position:relative; 634 | right:-18px; 635 | width:400px; 636 | } 637 | #reset-button { 638 | background-color: rgb(255,255,255); 639 | background-image:url('resources/x.png'); 640 | background-position:center; 641 | background-repeat:no-repeat; 642 | background-size:12px; 643 | border:0 none; 644 | width:16px; 645 | height:16px; 646 | position:relative; 647 | left:-4px; 648 | top:-4px; 649 | font-size:0px; 650 | } 651 | .watermark { 652 | color:#545454; 653 | } 654 | .search-tag-desc-result { 655 | font-style:italic; 656 | font-size:11px; 657 | } 658 | .search-tag-holder-result { 659 | font-style:italic; 660 | font-size:12px; 661 | } 662 | .search-tag-result:target { 663 | background-color:yellow; 664 | } 665 | .module-graph span { 666 | display:none; 667 | position:absolute; 668 | } 669 | .module-graph:hover span { 670 | display:block; 671 | margin: -100px 0 0 100px; 672 | z-index: 1; 673 | } 674 | .inherited-list { 675 | margin: 10px 0 10px 0; 676 | } 677 | section.class-description { 678 | line-height: 1.4; 679 | } 680 | .summary section[class$="-summary"], .details section[class$="-details"], 681 | .class-uses .detail, .serialized-class-details { 682 | padding: 0px 20px 5px 10px; 683 | border: 1px solid #ededed; 684 | background-color: #f8f8f8; 685 | } 686 | .inherited-list, section[class$="-details"] .detail { 687 | padding:0 0 5px 8px; 688 | background-color:#ffffff; 689 | border:none; 690 | } 691 | .vertical-separator { 692 | padding: 0 5px; 693 | } 694 | ul.help-section-list { 695 | margin: 0; 696 | } 697 | ul.help-subtoc > li { 698 | display: inline-block; 699 | padding-right: 5px; 700 | font-size: smaller; 701 | } 702 | ul.help-subtoc > li::before { 703 | content: "\2022" ; 704 | padding-right:2px; 705 | } 706 | span.help-note { 707 | font-style: italic; 708 | } 709 | /* 710 | * Indicator icon for external links. 711 | */ 712 | main a[href*="://"]::after { 713 | content:""; 714 | display:inline-block; 715 | background-image:url('data:image/svg+xml; utf8, \ 716 | \ 717 | \ 719 | '); 720 | background-size:100% 100%; 721 | width:7px; 722 | height:7px; 723 | margin-left:2px; 724 | margin-bottom:4px; 725 | } 726 | main a[href*="://"]:hover::after, 727 | main a[href*="://"]:focus::after { 728 | background-image:url('data:image/svg+xml; utf8, \ 729 | \ 730 | \ 732 | '); 733 | } 734 | 735 | /* 736 | * Styles for user-provided tables. 737 | * 738 | * borderless: 739 | * No borders, vertical margins, styled caption. 740 | * This style is provided for use with existing doc comments. 741 | * In general, borderless tables should not be used for layout purposes. 742 | * 743 | * plain: 744 | * Plain borders around table and cells, vertical margins, styled caption. 745 | * Best for small tables or for complex tables for tables with cells that span 746 | * rows and columns, when the "striped" style does not work well. 747 | * 748 | * striped: 749 | * Borders around the table and vertical borders between cells, striped rows, 750 | * vertical margins, styled caption. 751 | * Best for tables that have a header row, and a body containing a series of simple rows. 752 | */ 753 | 754 | table.borderless, 755 | table.plain, 756 | table.striped { 757 | margin-top: 10px; 758 | margin-bottom: 10px; 759 | } 760 | table.borderless > caption, 761 | table.plain > caption, 762 | table.striped > caption { 763 | font-weight: bold; 764 | font-size: smaller; 765 | } 766 | table.borderless th, table.borderless td, 767 | table.plain th, table.plain td, 768 | table.striped th, table.striped td { 769 | padding: 2px 5px; 770 | } 771 | table.borderless, 772 | table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, 773 | table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { 774 | border: none; 775 | } 776 | table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { 777 | background-color: transparent; 778 | } 779 | table.plain { 780 | border-collapse: collapse; 781 | border: 1px solid black; 782 | } 783 | table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { 784 | background-color: transparent; 785 | } 786 | table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, 787 | table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { 788 | border: 1px solid black; 789 | } 790 | table.striped { 791 | border-collapse: collapse; 792 | border: 1px solid black; 793 | } 794 | table.striped > thead { 795 | background-color: #E3E3E3; 796 | } 797 | table.striped > thead > tr > th, table.striped > thead > tr > td { 798 | border: 1px solid black; 799 | } 800 | table.striped > tbody > tr:nth-child(even) { 801 | background-color: #EEE 802 | } 803 | table.striped > tbody > tr:nth-child(odd) { 804 | background-color: #FFF 805 | } 806 | table.striped > tbody > tr > th, table.striped > tbody > tr > td { 807 | border-left: 1px solid black; 808 | border-right: 1px solid black; 809 | } 810 | table.striped > tbody > tr > th { 811 | font-weight: normal; 812 | } 813 | /** 814 | * Tweak font sizes and paddings for small screens. 815 | */ 816 | @media screen and (max-width: 1050px) { 817 | #search-input { 818 | width: 300px; 819 | } 820 | } 821 | @media screen and (max-width: 800px) { 822 | #search-input { 823 | width: 200px; 824 | } 825 | .top-nav, 826 | .bottom-nav { 827 | font-size: 11px; 828 | padding-top: 6px; 829 | } 830 | .sub-nav { 831 | font-size: 11px; 832 | } 833 | .about-language { 834 | padding-right: 16px; 835 | } 836 | ul.nav-list li, 837 | .sub-nav .nav-list-search { 838 | padding: 6px; 839 | } 840 | ul.sub-nav-list li { 841 | padding-top: 5px; 842 | } 843 | main { 844 | padding: 10px; 845 | } 846 | .summary section[class$="-summary"], .details section[class$="-details"], 847 | .class-uses .detail, .serialized-class-details { 848 | padding: 0 8px 5px 8px; 849 | } 850 | body { 851 | -webkit-text-size-adjust: none; 852 | } 853 | } 854 | @media screen and (max-width: 500px) { 855 | #search-input { 856 | width: 150px; 857 | } 858 | .top-nav, 859 | .bottom-nav { 860 | font-size: 10px; 861 | } 862 | .sub-nav { 863 | font-size: 10px; 864 | } 865 | .about-language { 866 | font-size: 10px; 867 | padding-right: 12px; 868 | } 869 | } 870 | -------------------------------------------------------------------------------- /docs/javadoc/tag-search-index.js: -------------------------------------------------------------------------------- 1 | tagSearchIndex = [];updateSearchResults(); -------------------------------------------------------------------------------- /docs/javadoc/type-search-index.js: -------------------------------------------------------------------------------- 1 | typeSearchIndex = [{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"com.jummania","l":"DataManager.Converter"},{"p":"com.jummania","l":"DataManager"},{"p":"com.jummania","l":"DataManagerFactory"},{"p":"com.jummania","l":"DataManager.DataObserver"},{"p":"com.jummania.converter","l":"GsonConverter"},{"p":"com.jummania.model","l":"PaginatedData"},{"p":"com.jummania.model","l":"Pagination"}];updateSearchResults(); -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app's APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Enables namespacing of each library's R class so that its R class includes only the 19 | # resources declared in the library itself and none from the library's dependencies, 20 | # thereby reducing the size of the R class for that library 21 | android.nonTransitiveRClass=true -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jumman04/DataManager/ec1cf31080d415b6ef48f0e5f0c6c98b2a68a82e/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sun Jan 07 15:38:43 BDT 2024 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # 4 | # Copyright 2015 the original author or authors. 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 | # https://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 | ############################################################################## 20 | ## 21 | ## Gradle start up script for UN*X 22 | ## 23 | ############################################################################## 24 | 25 | # Attempt to set APP_HOME 26 | # Resolve links: $0 may be a link 27 | PRG="$0" 28 | # Need this for relative symlinks. 29 | while [ -h "$PRG" ] ; do 30 | ls=`ls -ld "$PRG"` 31 | link=`expr "$ls" : '.*-> \(.*\)$'` 32 | if expr "$link" : '/.*' > /dev/null; then 33 | PRG="$link" 34 | else 35 | PRG=`dirname "$PRG"`"/$link" 36 | fi 37 | done 38 | SAVED="`pwd`" 39 | cd "`dirname \"$PRG\"`/" >/dev/null 40 | APP_HOME="`pwd -P`" 41 | cd "$SAVED" >/dev/null 42 | 43 | APP_NAME="Gradle" 44 | APP_BASE_NAME=`basename "$0"` 45 | 46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 48 | 49 | # Use the maximum available, or set MAX_FD != -1 to use that value. 50 | MAX_FD="maximum" 51 | 52 | warn () { 53 | echo "$*" 54 | } 55 | 56 | die () { 57 | echo 58 | echo "$*" 59 | echo 60 | exit 1 61 | } 62 | 63 | # OS specific support (must be 'true' or 'false'). 64 | cygwin=false 65 | msys=false 66 | darwin=false 67 | nonstop=false 68 | case "`uname`" in 69 | CYGWIN* ) 70 | cygwin=true 71 | ;; 72 | Darwin* ) 73 | darwin=true 74 | ;; 75 | MINGW* ) 76 | msys=true 77 | ;; 78 | NONSTOP* ) 79 | nonstop=true 80 | ;; 81 | esac 82 | 83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 84 | 85 | 86 | # Determine the Java command to use to start the JVM. 87 | if [ -n "$JAVA_HOME" ] ; then 88 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 89 | # IBM's JDK on AIX uses strange locations for the executables 90 | JAVACMD="$JAVA_HOME/jre/sh/java" 91 | else 92 | JAVACMD="$JAVA_HOME/bin/java" 93 | fi 94 | if [ ! -x "$JAVACMD" ] ; then 95 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 96 | 97 | Please set the JAVA_HOME variable in your environment to match the 98 | location of your Java installation." 99 | fi 100 | else 101 | JAVACMD="java" 102 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 103 | 104 | Please set the JAVA_HOME variable in your environment to match the 105 | location of your Java installation." 106 | fi 107 | 108 | # Increase the maximum file descriptors if we can. 109 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 110 | MAX_FD_LIMIT=`ulimit -H -n` 111 | if [ $? -eq 0 ] ; then 112 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 113 | MAX_FD="$MAX_FD_LIMIT" 114 | fi 115 | ulimit -n $MAX_FD 116 | if [ $? -ne 0 ] ; then 117 | warn "Could not set maximum file descriptor limit: $MAX_FD" 118 | fi 119 | else 120 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 121 | fi 122 | fi 123 | 124 | # For Darwin, add options to specify how the application appears in the dock 125 | if $darwin; then 126 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 127 | fi 128 | 129 | # For Cygwin or MSYS, switch paths to Windows format before running java 130 | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then 131 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 132 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 133 | 134 | JAVACMD=`cygpath --unix "$JAVACMD"` 135 | 136 | # We build the pattern for arguments to be converted via cygpath 137 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 138 | SEP="" 139 | for dir in $ROOTDIRSRAW ; do 140 | ROOTDIRS="$ROOTDIRS$SEP$dir" 141 | SEP="|" 142 | done 143 | OURCYGPATTERN="(^($ROOTDIRS))" 144 | # Add a user-defined pattern to the cygpath arguments 145 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 146 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 147 | fi 148 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 149 | i=0 150 | for arg in "$@" ; do 151 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 152 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 153 | 154 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 155 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 156 | else 157 | eval `echo args$i`="\"$arg\"" 158 | fi 159 | i=`expr $i + 1` 160 | done 161 | case $i in 162 | 0) set -- ;; 163 | 1) set -- "$args0" ;; 164 | 2) set -- "$args0" "$args1" ;; 165 | 3) set -- "$args0" "$args1" "$args2" ;; 166 | 4) set -- "$args0" "$args1" "$args2" "$args3" ;; 167 | 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 168 | 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 169 | 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 170 | 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 171 | 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 172 | esac 173 | fi 174 | 175 | # Escape application args 176 | save () { 177 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 178 | echo " " 179 | } 180 | APP_ARGS=`save "$@"` 181 | 182 | # Collect all arguments for the java command, following the shell quoting and substitution rules 183 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 184 | 185 | exec "$JAVACMD" "$@" 186 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 | 35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 | 38 | @rem Find java.exe 39 | if defined JAVA_HOME goto findJavaFromJavaHome 40 | 41 | set JAVA_EXE=java.exe 42 | %JAVA_EXE% -version >NUL 2>&1 43 | if "%ERRORLEVEL%" == "0" goto execute 44 | 45 | echo. 46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 | echo. 48 | echo Please set the JAVA_HOME variable in your environment to match the 49 | echo location of your Java installation. 50 | 51 | goto fail 52 | 53 | :findJavaFromJavaHome 54 | set JAVA_HOME=%JAVA_HOME:"=% 55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 | 57 | if exist "%JAVA_EXE%" goto execute 58 | 59 | echo. 60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 | echo. 62 | echo Please set the JAVA_HOME variable in your environment to match the 63 | echo location of your Java installation. 64 | 65 | goto fail 66 | 67 | :execute 68 | @rem Setup the command line 69 | 70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 71 | 72 | 73 | @rem Execute Gradle 74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 75 | 76 | :end 77 | @rem End local scope for the variables with windows NT shell 78 | if "%ERRORLEVEL%"=="0" goto mainEnd 79 | 80 | :fail 81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 82 | rem the _cmd.exe /c_ return code! 83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 84 | exit /b 1 85 | 86 | :mainEnd 87 | if "%OS%"=="Windows_NT" endlocal 88 | 89 | :omega 90 | -------------------------------------------------------------------------------- /jitpack.yml: -------------------------------------------------------------------------------- 1 | jdk: 2 | - openjdk17 -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | gradlePluginPortal() 6 | } 7 | } 8 | plugins { 9 | id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" 10 | } 11 | dependencyResolutionManagement { 12 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 13 | repositories { 14 | google() 15 | mavenCentral() 16 | } 17 | } 18 | 19 | include(":Library") 20 | --------------------------------------------------------------------------------