{"id":15134114,"url":"https://github.com/driver733/vk-uploader","last_synced_at":"2025-10-23T09:31:24.726Z","repository":{"id":43071334,"uuid":"91912426","full_name":"driver733/VK-Uploader","owner":"driver733","description":"VK.com wall posts generator ","archived":false,"fork":false,"pushed_at":"2022-03-20T16:13:03.000Z","size":4842,"stargazers_count":19,"open_issues_count":27,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-01-30T17:38:28.839Z","etag":null,"topics":["decorator-pattern","elegantobjects","java","oop","oop-library","vkontakte"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/driver733.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-05-20T19:45:18.000Z","updated_at":"2024-04-12T07:40:51.000Z","dependencies_parsed_at":"2022-08-17T17:15:21.925Z","dependency_job_id":null,"html_url":"https://github.com/driver733/VK-Uploader","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/driver733%2FVK-Uploader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/driver733%2FVK-Uploader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/driver733%2FVK-Uploader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/driver733%2FVK-Uploader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/driver733","download_url":"https://codeload.github.com/driver733/VK-Uploader/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237807472,"owners_count":19369597,"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":["decorator-pattern","elegantobjects","java","oop","oop-library","vkontakte"],"created_at":"2024-09-26T05:02:48.121Z","updated_at":"2025-10-23T09:31:24.128Z","avatar_url":"https://github.com/driver733.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# VK-Uploader\n\n\u003ca href=\"https://www.yegor256.com/2017/10/24/award-2018.html\"\u003e\n\u003cimg src=\"https://www.yegor256.com/images/award/2018/winner-driver733.png\" height=50px alt='Winner Badge'/\u003e\n\u003c/a\u003e\n\n[![EO principles respected here](http://www.elegantobjects.org/badge.svg)](http://www.elegantobjects.org)\n[![DevOps By Rultor.com](http://www.rultor.com/b/driver733/VK-Uploader)](http://www.rultor.com/p/driver733/VK-Uploader)\n[![We recommend IntelliJ IDEA](http://www.elegantobjects.org/intellij-idea.svg)](https://www.jetbrains.com/idea/)\n  \n[![Build Status](https://github.com/driver733/VK-Uploader/workflows/Build/badge.svg?branch=master)](https://github.com/driver733/VK-Uploader/actions?query=workflow%3ABuild+branch%3Amaster)\n\n[![Maven Central](https://img.shields.io/maven-central/v/com.driver733/vk-uploader.svg)](https://search.maven.org/artifact/com.driver733/vk-uploader/0.4/jar)\n[![Javadoc](http://www.javadoc.io/badge/com.driver733/vk-uploader.svg)](http://www.javadoc.io/doc/com.driver733/vk-uploader)\n\n[![jPeek Report](http://i.jpeek.org/com.driver733/vk-uploader/badge.svg)](http://i.jpeek.org/com.driver733/vk-uploader/)\n[![SonarQube](https://img.shields.io/badge/sonar-ok-green.svg)](https://sonarcloud.io/dashboard?id=com.driver733%3Avk-uploader)\n\n[![Coverage Status](https://coveralls.io/repos/github/driver733/VK-Uploader/badge.svg?branch=master)](https://coveralls.io/github/driver733/VK-Uploader?branch=master)\n[![](https://tokei.rs/b1/github/driver733/VK-Uploader)](https://github.com/driver733/VK-Uploader)\n\n[![Dependabot Status](https://api.dependabot.com/badges/status?host=github\u0026identifier=91912426)](https://dependabot.com)\n\n[![Code climate](https://api.codeclimate.com/v1/badges/b2373387471b6c3ecf36/maintainability)](https://codeclimate.com/github/driver733/VK-Uploader/maintainability)\n[![codebeat badge](https://codebeat.co/badges/5abe85eb-0359-41c8-baec-5cf168210bcf)](https://codebeat.co/projects/github-com-driver733-vk-uploader-master)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/65288c94deac4a36bf03a80604cf1c04)](https://www.codacy.com/app/driver733/VK-Uploader?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=driver733/VK-Uploader\u0026amp;utm_campaign=Badge_Grade)\n\n[![PDD status](http://www.0pdd.com/svg?name=driver733/VK-Uploader)](http://www.0pdd.com/p?name=driver733/VK-Uploader)\n\n[![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/driver733/VK-Uploader/blob/master/LICENSE.txt)\n\n**VK-Uploader** is a [true object-oriented](http://www.yegor256.com/2014/11/20/seven-virtues-of-good-object.html)\nand [immutable](http://www.yegor256.com/2014/06/09/objects-should-be-immutable.html)\n[VK (Вконтакте)](vk.com) group management utility. It is based on [EO](https://www.elegantobjects.org) principles:\n\n 1. [No](https://github.com/driver733/VK-Uploader/search?l=Java\u0026q=null) `null` usage ([why NULL is bad?](http://www.yegor256.com/2014/05/13/why-null-is-bad.html))\n 2. No static methods ([why they are bad?](http://www.yegor256.com/2014/05/05/oop-alternative-to-utility-classes.html))\n    * [No](https://github.com/driver733/VK-Uploader/search?q=%22public+static%22\u0026unscoped_q=%22public+static%22) `public` `static` methods\n    * [No](https://github.com/driver733/VK-Uploader/search?q=%22private+static%22\u0026unscoped_q=%22public+static%22) `private` `static` methods\n 3. [No](https://github.com/driver733/VK-Uploader/search?l=Java\u0026q=%22%40Immutable%22) mutable classes ([why they are bad?](http://www.yegor256.com/2014/06/09/objects-should-be-immutable.html))\n 4. [No](https://github.com/driver733/VK-Uploader/search?q=instanceof\u0026unscoped_q=instanceof) `instanceof` keyword usage, type casting, or reflection ([why?](http://www.yegor256.com/2015/04/02/class-casting-is-anti-pattern.html))\n 5. No code in constructors ([why?](http://www.yegor256.com/2015/05/07/ctors-must-be-code-free.html))\n 6. No [getters](https://github.com/driver733/VK-Uploader/search?l=Java\u0026q=%22get%22) and [setters](https://github.com/driver733/VK-Uploader/search?l=Java\u0026q=%22set%22) ([why?](http://www.yegor256.com/2014/09/16/getters-and-setters-are-evil.html))\n 7. [No](https://github.com/driver733/VK-Uploader/search?l=Java\u0026q=%22implements%22) public methods without contract (interface) ([why?](https://www.yegor256.com/2014/11/20/seven-virtues-of-good-object.html#2-he-works-by-contracts))\n 8. [No](https://github.com/driver733/VK-Uploader/search?l=Java\u0026q=%22assertThat%22) statements in test methods except assertThat ([why?](http://www.yegor256.com/2017/05/17/single-statement-unit-tests.html))\n 9. [No](https://github.com/driver733/VK-Uploader/search?q=%22extends%22\u0026unscoped_q=%22extends%22) implementation inheritance ([why?](http://www.yegor256.com/2017/01/31/decorating-envelopes.html) and [why?](http://www.yegor256.com/2016/09/13/inheritance-is-procedural.html))\n\n## Core Entities (Interfaces)\n\n### [WallPost](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/wallpost/WallPost.java)\nThis interface is implemented by the classes which construct (decorate) VK WallPosts.\nFor example the [WallPostBase](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/wallpost/WallPostBase.java) class is a fundamental implementation of that interface, as\nit encapsulates a [VK API client](https://github.com/VKCOM/vk-java-sdk/blob/master/sdk/src/main/java/com/vk/api/sdk/client/VkApiClient.java) instance and a [UserActor](https://github.com/VKCOM/vk-java-sdk/blob/master/sdk/src/main/java/com/vk/api/sdk/client/actors/UserActor.java) instance.\n\nOther implementations of this interface, such as [WallPostWithMessage](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/wallpost/WallPostWithMessage.java) or [WallPostWithAttachments](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/wallpost/WallPostWithAttachments.java)\nadd content to a wall post (text and attachments, accordingly).\n\nAlso, there are some convenient implementations of that interface, such as [WallPostMusicAlbum](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/wallpost/WallPostMusicAlbum.java) or [WallPostPhotoAlbum](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/wallpost/WallPostPhotoAlbum.java),\nwhich create a [WallPost](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/wallpost/WallPost.java) with audio (music album and a album artwork) or image (photo album) content.\n\nA full list of classes implementing this interface can be found in the package [wallpost](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/wallpost).\n\nIn addition, the examples, which showcase how to utilize this interface and its implementations can be found in corresponding [test package](https://github.com/driver733/VK-Uploader/tree/master/src/test/java/com/driver733/vkuploader/wallpost).\n\n### [WallPosts](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/wallpost/wallposts/WallPosts.java)\nThis interface is implemented by the classes which generate a series of [WallPost](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/wallpost/WallPost.java)s and combine them into a list of [ExecuteBatchQueries](https://github.com/VKCOM/vk-java-sdk/blob/master/sdk/src/main/java/com/vk/api/sdk/queries/execute/ExecuteBatchQuery.java).\nAfter the queries are executed, the `updateProperties` method shall be called in order to cache the queries` results. (usually with properties files).\n\n### [Posts](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/post/posts/Posts.java)\nThis interface is implemented by classes which create [WallPosts](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/wallpost/wallposts/WallPosts.java).\nFor example, the [PostableRootDir](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/post/PostableRootDir.java) class creates [WallPosts](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/wallpost/wallposts/WallPosts.java) from the provided directory.\n\n### [Postable](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/post/Postable.java)\nThis interface serves as an entry point to the [WallPosts](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/wallpost/wallposts/WallPosts.java). The classes which implement this interface\ncreate [WallPosts](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/wallpost/wallposts/WallPosts.java) using a [Posts](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/post/posts/Posts.java) instance and then post (execute the generated queries) them.\n\n### [Entrance](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/post/Entrance.java)\nApplication starting point. The [EntranceDirectory](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/post/EntranceDirectory.java) class, for instance, tracks the provided folder for changes\nand acts upon them (creates [WallPosts](https://github.com/driver733/VK-Uploader/blob/master/src/main/java/com/driver733/vkuploader/wallpost/wallposts/WallPosts.java) and executes them).\n\n\n## Maven\n\n1. Qulice (static analysis check)\n    ```\n    $ mvn clean test -DskipTests=true qulice:check\n    ```\n2. Unit tests\n    ```\n    $ mvn clean test\n    ```\n3. Integration Tests\n    ```\n    $ clean verify -Dvk.userId= -Dvk.groupId= -Dvk.token=\n    ```\n4. Full Pre-push validation (static analysis + unit tests + integration tests)\n    ```\n    $ mvn clean verify qulice:check -Dvk.userId= -Dvk.groupId= -Dvk.token=\n    ```\n5. Test coverage report (located in `VK-Uploader/target/site`)\n    ```\n    $ mvn clean test jacoco:report\n    ```\n\nFor more info see [Authorization Code Flow for User Access Token](https://vk.com/dev/authcode_flow_user)\n\n## How to contribute\n\nFork repository, make changes, send us a pull request. We will review\nyour changes and apply them to the `master` branch shortly, provided\nthey don't violate our quality standards. To avoid frustration, before\nsending us your pull request please run full Maven build:\n\n```\n$ mvn clean test -DskipTests=true qulice:check\n```\n\nTo avoid build errors use maven 3.2+.\n\nPay attention that our `pom.xml` inherits a lot of configuration\nfrom [jcabi-parent](http://parent.jcabi.com).\n[This article](http://www.yegor256.com/2015/02/05/jcabi-parent-maven-pom.html)\nexplains why it's done this way.\n\n## Got questions?\n\nIf you have questions or general suggestions, don't hesitate to submit\na new [Github issue](https://github.com/driver733/VK-Uploader/issues/new).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdriver733%2Fvk-uploader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdriver733%2Fvk-uploader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdriver733%2Fvk-uploader/lists"}