{"id":20325662,"url":"https://github.com/lamdav/umlify","last_synced_at":"2026-05-22T16:33:43.102Z","repository":{"id":71874021,"uuid":"81700253","full_name":"lamdav/UMLify","owner":"lamdav","description":"My CSSE 374 UML Generator and Pattern Detector Project","archived":false,"fork":false,"pushed_at":"2017-02-18T01:18:28.000Z","size":4149,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-04-26T05:07:24.499Z","etag":null,"topics":["java","java-8","pattern","uml"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lamdav.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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-02-12T03:27:56.000Z","updated_at":"2021-09-06T20:38:21.000Z","dependencies_parsed_at":null,"dependency_job_id":"771e953b-7960-48b0-8ab0-988c7c4babf6","html_url":"https://github.com/lamdav/UMLify","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lamdav/UMLify","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamdav%2FUMLify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamdav%2FUMLify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamdav%2FUMLify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamdav%2FUMLify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lamdav","download_url":"https://codeload.github.com/lamdav/UMLify/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamdav%2FUMLify/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33354036,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-21T12:23:38.849Z","status":"online","status_checked_at":"2026-05-22T02:00:06.671Z","response_time":265,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["java","java-8","pattern","uml"],"created_at":"2024-11-14T19:41:05.092Z","updated_at":"2026-05-22T16:33:43.078Z","avatar_url":"https://github.com/lamdav.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# UMLify: Team FAD CSSE 374 Project\n\n**F**red Zhang, **A**dam Finer, **D**avid Lam\n\n[![build status](https://ada.csse.rose-hulman.edu/zhangq2/Fad/badges/master/build.svg)](https://ada.csse.rose-hulman.edu/zhangq2/Fad/commits/master) [![coverage report](https://ada.csse.rose-hulman.edu/zhangq2/Fad/badges/master/coverage.svg)](https://ada.csse.rose-hulman.edu/zhangq2/Fad/commits/master)\n\n## Description:\n\nThis project takes a set of classes and draws the UML diagram for those set of classes. It has been design to be able to draw UML such that design patterns can be detected\n\n## Command Line Usage:\n\n### Usage:\n\n```\n$ java -cp \"/path/to/otherProject.jar;/path/to/Fad-all-1.0.0-SNAPSHOT.jar\" app.Application --config[-c] config.json [--param[-p]x=y]\n```\n\n### Arguments:\n\n- `config.json`: A Configuration in JSON format that defines configuration settings for UMLify. It defines basic settings or can take customize input settings.\n- `param x=y`: Overrides the setting `x` with the value `y`. This is useful for when you wish use the same configuration JSON but with slightly tweaked settings.\n\n## Config JSON:\n### Creating a Config JSON:\n```\n{\n  \"some_outer_identifier_1\" : {\n    \"key_1\" : \"value_1\",\n    \"key_2\" : \"value_2\"\n    ...\n  },\n  \"some_outer_identifier_2\" : {\n    \"key_1\" : \"value_3\",\n    \"key_3\" : \"value_4\"\n    ...\n  }\n}\n```\n\nA key can be mapped to multiple things as long it is space separated. See [config](https://ada.csse.rose-hulman.edu/zhangq2/Fad/tree/master/config) for examples.\n\n### Built-Ins\n|      Identifier     |              Key             |         Default        | Description                                                           |\n|:-------------------:|:----------------------------:|:----------------------:|:---------------------------------------------------------------------:|\n| classParser         | header                       | GraphVizHeaderParser   | Qualified class name of the header parser                             |\n|                     | field                        | GraphVizFieldParser    | Qualified class name of the field parser                              |\n|                     | method                       | GraphVizMethodParser   | Qualified class name of the method parser                             |\n|                     | type                         | GraphVizTypeParser     | Qualified class name of the type parser                               |\n|                     | modifierParser               | GraphVizModifierParser | Qualified class name of the modifier parser                           |\n| badDecorator        | fillColor                    | yellow                 | Fill color of the class record that is poorly decorated               |\n|                     | parentStereotype             | component              | Class being decorated added stereotype                                |\n|                     | childStereotype              | decorator              | Class decorator added stereotype                                      |\n|                     | childParentRelationshipLabel | decorates              | Relationship label on the RelationHasA between child and parent.      |\n| goodDecorator       | fillColor                    | blue                   | Fill color of the class record that is properly decorated             |\n|                     | parentStereotype             | component              | Class being decorated added stereotype                                |\n|                     | childStereotype              | decorator              | Class decorator added stereotype                                      |\n|                     | childParentRelationshipLabel | decorates              | Relationship label on the RelationHasA between child and parent.      |\n| adapter             | fillColor                    | red                    | Fill color of the class record that is in an adaptor pattern          |\n|                     | parentStereotype             | target                 | Class being decorated added stereotype                                |\n|                     | childStereotype              | adapter                | Class decorator added stereotype                                      |\n|                     | adapteeStereotype            | adaptee                | Relationship label on the RelationHasA between child and parent.      |\n|                     |childComposedRelationshipLabel| adapts                 | Relationship label on the RelationHasA between child and parent.      |\n| dependencyInversion | whiteList                    | java                   | A list of packages that will be ignored if they trigger a violation   |\n|                     | color                        | yellow                 | Outline color of the class record violating the dependency            |\n| favorComposition    | color                        | orange                 | Outline color of the class record violating the dependency            |\n| singleton           | color                        | blue                   | Outline color of the class record violating the dependency            |\n| engine              | generator_key                | GraphVizGenerator      | Qualified class name of the header parser of graph generator          |\n|                     | analyzer_key                 | RelationParserAnalyzer | Qualified class name of the analyzers to run (order-dependent)        |\n| model               | isRecursive                  | false                  | Recursively parse relation if true                                    |\n|                     | classes                      |                        | List of classes to parse                                              |\n|                     | blackList                    |                        | List of classes to ignore while parsing.                              |\n|                     | verbose                      | false                  | Print error messages of classes unable to parse                       |\n| graphviz            | nodeSep                      | \"1.0\"                  | Node Separation factor for GraphViz                                   |\n|                     | rankDir                      | BT                     | Rank direction preference                                             |\n|                     | nodeStyle                    | node [shape=record]    | Universal Node styling                                                |\n| runner              | outputFormat                 | svg                    | Output format of the generated Graph                                  |\n|                     | outputDir                    | output                 | Output directory of all generated files                               |\n|                     | executablePath               | dot                    | Graph Generator binary executable path                                |\n|                     | fileName                     | output                 | Output file name of all generated files                               |\n\n## How To Add Custom Pattern Analyzer:\nTo create a custom analyzer, you need to create a class the implements `IAnalyzer` and implement the `analyze` method. This method is used to scan the current system model and modify the styling of the classes if needed. If the class requires custom configurations, create a configuration that implements `Configurable`. This must implement the `setup` method. This method should be used to setup default values for the configuration. Here is an example:\n```java\npublic class FavorCompositionConfiguration implements Configurable {\n    public static final String CONFIG_PATH = \"favorComposition.\";                 // This should be the same as the outer identifier.\n    public static final String COLOR = CONFIG_PATH + \"color\";                     // All subsequent field should use this CONFIG_PATH to define other variables.\n\n    private IConfiguration config;                                                // It is a good idea to store the IConfiguration instance.\n                                                                                  // IConfiguration stores a map of values and will be passed arround to all classes.\n\n    @Override\n    public void setup(IConfiguration config) {\n        this.config = config;\n        this.config.setIfMissing(FavorCompositionConfiguration.COLOR, \"orange\");  // setIfMissing and add are useful IConfiguration methods to add values into the IConfiguration\n                                                                                  // conditionally.\n    }\n\n    public String getFavorComColor() {                                            // It is a good idea for a specific configuration to have a getter method for each static field type.\n        return this.config.getValue(FavorCompositionConfiguration.COLOR);\n    }\n}\n```\n### How to add style in an analyzer\n\nYou can create an class the implments the following interface:\n```java\npublic interface IAnalyzer {\n    /**\n     * Returns an Analyzed System Model.\n     *\n     * @param systemModel System Model to be analyzed.\n     * @param config      IConfiguration object that the analyzer can retrieves\n     *                    configurations from\n     */\n    void analyze(ISystemModel systemModel, IConfiguration config);\n}\n```\nIn an analyzer, you can decorate the classModel, filter out a uneeded methods. You can also add styles to the UML through method in IystemModel.\n```java\n  /**\n     * Set the class set of systemModel\n     *\n     * @param classSet\n     */\n    void setClasses(Set\u003cIClassModel\u003e classSet);\n\n    /**\n     * Add node style to certain class,\n     *\n     * @param clazz\n     *            the class to add style for\n     * @param key\n     *            the key of Graphviz style\n     * @param value\n     *            the value of Graphviz style\n     */\n    void addClassModelStyle(IClassModel clazz, String key, String value);\n\n    /**\n     * Add a stereotypes to class model If stereotype is an empty string, it\n     * would ignore and discard it\n     * \n     * @param clazz\n     *            to add stereotype to\n     * @param stereotype\n     *            the stereotype String\n     */\n    void addClassModelSteretype(IClassModel clazz, String stereotype);\n\n    /**\n     * Add style to a relation\n     *\n     * @param from\n     *            the edge from here\n     * @param to\n     *            the edge end here\n     * @param relKey\n     *            an key that identifies the type of relation. It should be an\n     *            unique string\n     * @param key\n     *            the key of Graphviz style\n     * @param value\n     *            the value of Graphviz style\n     */\n    void addStyleToRelation(IClassModel from, IClassModel to, String relKey, String key, String value);\n\n```\n## Project UML:\nHere is a link to our project's overall UML. There are around 100 classes in our project, so it is a pretty huge UML.\n[Project UML svg](/ProjectUML.svg \"Project UML\")\n\n## Change Logs:\n\nSee each members responsibility [here](https://github.com/lamdaV/UMLify/blob/master/CHANGELOG.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flamdav%2Fumlify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flamdav%2Fumlify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flamdav%2Fumlify/lists"}