{"id":19839026,"url":"https://github.com/litarvan/litarvan-commons","last_synced_at":"2026-06-13T10:33:03.168Z","repository":{"id":78843196,"uuid":"91958504","full_name":"Litarvan/litarvan-commons","owner":"Litarvan","description":"Commons Java library","archived":false,"fork":false,"pushed_at":"2017-05-21T22:19:27.000Z","size":85,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-11T11:19:36.527Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Litarvan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-05-21T13:18:28.000Z","updated_at":"2017-05-26T12:40:16.000Z","dependencies_parsed_at":"2023-03-12T05:58:57.444Z","dependency_job_id":null,"html_url":"https://github.com/Litarvan/litarvan-commons","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Litarvan%2Flitarvan-commons","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Litarvan%2Flitarvan-commons/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Litarvan%2Flitarvan-commons/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Litarvan%2Flitarvan-commons/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Litarvan","download_url":"https://codeload.github.com/Litarvan/litarvan-commons/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241209528,"owners_count":19927734,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-12T12:19:59.371Z","updated_at":"2026-06-13T10:32:58.058Z","avatar_url":"https://github.com/Litarvan.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Litarvan's commons\n\n## Setup\n\n### Gradle\n\n```groovy\nrepositories {\n    maven {\n        url 'http://litarvan.github.io'\n    }\n}\n\ndependencies {\n    compile 'fr.litarvan.commons:litarvan-commons:1.0.0'\n}\n```\n\n### Maven\n\n```xml\n\u003crepositories\u003e\n    \u003crepository\u003e\n        \u003cid\u003elitarvan\u003c/id\u003e\n        \u003curl\u003ehttp://litarvan.github.io/maven\u003c/url\u003e\n    \u003c/repository\u003e\n\u003c/repositories\u003e\n\n\u003cdependencies\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003efr.litarvan.commons\u003c/groupId\u003e\n        \u003cartifactId\u003elitarvan-commons\u003c/artifactId\u003e\n        \u003cversion\u003e1.0.0\u003c/version\u003e\n    \u003c/dependency\u003e\n\u003c/dependencies\u003e\n```\n\n## App base\n\n```java\nimport fr.litarvan.commons.App;\n\npublic class MyApp implements App\n{\n    public String getName()\n    {\n        return \"My App\";\n    }\n    \n    public String getVersion()\n    {\n        return \"2.0.0\";\n    }\n    \n    public void start()\n    {\n        ...\n    }\n}\n```\n\n## Config engine\n\n### Features\n\n * JSON or Java Properties config\n * Guice support (ConfigProvider is @Singleton\n * Object serializing (JSON)\n * Value path nesting\n\n### Example\n\n**config/myconfig.json :**\n\n```json\n{\n  \"hello\": \"Litarvan !\"\n}\n```\n\n**config/myotherconfig.json :**\n\n```json\n{\n  \"models\": {\n    \"objects\": [\n      {\n        \"field1\": \"foo\",\n        \"field2\": \"bar\"\n      },\n      {\n        \"field1\": \"foo\",\n        \"field2\": \"bar\"\n      }\n    ]\n  }\n}\n```\n\n```java\nimport fr.litarvan.commons.App;\n\npublic class MyApp implements App\n{\n    private ConfigProvider provider = new ConfigProvider();\n    \n    public void start()\n    {\n        provider.from(\"config/myconfig.json\");\n        provider.from(\"config/myotherconfig.json\");\n        \n        System.out.println(\"Hello \" + provider.at(\"myconfig.hello\")); // Hello Litarvan !\n        MyObject[] objects = provider.at(\"myotherconfig.models.objects\", MyObject[].class);\n    }\n}\n\npublic class MyObject\n{\n    public String field1;\n    public String field2;\n}\n```\n\n## Exception handling system\n\n### Features\n\n * Customizable saved crash reports generation\n * Cancellable events triggering\n * Full Java 8 flavored\n * Return value support\n\n### Example\n\n```java\nimport fr.litarvan.commons.App;\nimport fr.litarvan.commons.crash.ExceptionHandler;\n\npublic class MyApp implements App\n{\n    private ExceptionHandler handler = new ExceptionHandler(this);\n    \n    public void start()\n    {                                                                       \n        handler.trigger((handler, throwable, cancel) -\u003e {              \n            // Will be called when an exception is caught              \n            cancel.cancel(); // Cancel the crash report creation       \n        });                                                            \n                                                                       \n        handler.on(MyException.class, (handler, throwable, cancel) -\u003e {\n            // Will be called when a MyException is caugth             \n        });                                                            \n                                                                       \n        MyValue result = handler.handler(() -\u003e {                       \n            someRiskyThings();                                         \n            return riskyOperation();                                   \n        }); // result is null if an exception was triggered                                                            \n                                                                       \n        try                                                            \n        {                                                              \n            someRiskyThings();                                         \n        }                                                              \n        catch (MyException ex)                                         \n        {                                                              \n            handler.handle(ex); // Manual handling                     \n        }                                                              \n    }\n}\n```\n\n## Cancellable\n\n```java\nimport fr.litarvan.commons.App;\nimport fr.litarvan.commons.Canceller;\nimport java.util.List;\n\npublic class MyApp implements App\n{\n    private List\u003cMyListener\u003e listeners;\n    \n    public void start()\n    {\n        if (!Canceller.chain(canceller -\u003e listeners.forEach(listener -\u003e listener.onEvent(canceller))))\n        {\n            // Event was cancelled\n            return;\n        }\n        \n        // Continue launching\n    }\n}\n\npublic class MyCoolListener implements MyListener\n{\n    public void onEvent(Canceller canceller)\n    {\n        // Do things\n        canceller.cancel(); // Cancel the event\n    }\n}\n\npublic interface MyListener\n{\n    void onEvent(Canceller canceller);\n}\n```\n\n## IO source\n\n```java\nimport fr.litarvan.commons.io.IOSource;\n\nimport java.io.File;\nimport java.io.InputStream;\nimport java.io.OutputStream;\n\nIOSource source = IOSource.file(\"my/file.txt\");\n                = IOSource.internal(\"/fr/litarvan/my/file.txt\");\n                = IOSource.file(new File(\"my/file.txt\"));\n                = IOSource.at(\"/fr/litarvan/my/file.txt\");\n                = IOSource.at(\"my/file.txt\");\n                        \nif (source.exists())\n{\n    InputStream in = source.provideInput();\n    OutputStream out = source.provideOutput();\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flitarvan%2Flitarvan-commons","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flitarvan%2Flitarvan-commons","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flitarvan%2Flitarvan-commons/lists"}