# EntityType.java

    package org.thewonderlemming.c4plantuml.graphml.model;

    /**
     * Represents a C4 keyword or "entity" as I like to call them. Its purpose is to avoid misspelling in the code.
     *
     * @author thewonderlemming
     *
     */
    public enum EntityType {

        /**
         * The C4 System Context {@code Boundary} keyword.
         */
        C1_BOUNDARY(EntityType.BOUNDARY),

        /**
         * The C4 System Context {@code Cloud} keyword.
         */
        C1_CLOUD(EntityType.CLOUD),

        /**
         * The C4 System Context {@code EnterpriseBoundary} keyword.
         */
        C1_ENTERPRISE_BOUNDARY(EntityType.ENTERPRISE_BOUNDARY),

        /**
         * The C4 System Context {@code Layout} keyword.
         */
        C1_LAYOUT(EntityType.LAYOUT),

        /**
         * The C4 System Context {@code Person} keyword.
         */
        C1_PERSON(EntityType.PERSON),

        /**
         * The C4 System Context {@code PersonExt} keyword.
         */
        C1_PERSON_EXT(EntityType.PERSON_EXT),

        /**
         * The C4 System Context {@code System} keyword.
         */
        C1_SYSTEM(EntityType.SYSTEM),

        /**
         * The C4 System Context {@code SystemExt} keyword.
         */
        C1_SYSTEM_EXT(EntityType.SYSTEM_EXT),

        /**
         * The C4 Container {@code Boundary} keyword.
         */
        C2_BOUNDARY(EntityType.BOUNDARY),

        /**
         * The C4 Container {@code Cloud} keyword.
         */
        C2_CLOUD(EntityType.CLOUD),

        /**
         * The C4 Container {@code Container} keyword.
         */
        C2_CONTAINER(EntityType.CONTAINER),

        /**
         * The C4 Container {@code ContainerDb} keyword.
         */
        C2_CONTAINER_DB(EntityType.CONTAINER_DB),

        /**
         * The C4 Container {@code EnterpriseBoundary} keyword.
         */
        C2_ENTERPRISE_BOUNDARY(EntityType.ENTERPRISE_BOUNDARY),

        /**
         * The C4 Container {@code Layout} keyword.
         */
        C2_LAYOUT(EntityType.LAYOUT),

        /**
         * The C4 Container {@code Person} keyword.
         */
        C2_PERSON(EntityType.PERSON),

        /**
         * The C4 Container {@code PersonExt} keyword.
         */
        C2_PERSON_EXT(EntityType.PERSON_EXT),

        /**
         * The C4 Container {@code System} keyword.
         */
        C2_SYSTEM(EntityType.SYSTEM),

        /**
         * The C4 Container {@code SystemBoundary} keyword.
         */
        C2_SYSTEM_BOUNDARY("SystemBoundary"),

        /**
         * The C4 Container {@code SystemExt} keyword.
         */
        C2_SYSTEM_EXT(EntityType.SYSTEM_EXT),

        /**
         * The C4 Component {@code Boundary} keyword.
         */
        C3_BOUNDARY(EntityType.BOUNDARY),

        /**
         * The C4 Component {@code Cloud} keyword.
         */
        C3_CLOUD(EntityType.CLOUD),

        /**
         * The C4 Component {@code Component} keyword.
         */
        C3_COMPONENT("Component"),

        /**
         * The C4 Component {@code ComponentDb} keyword.
         */
        C3_COMPONENT_DB("ComponentDb"),

        /**
         * The C4 Component {@code Container} keyword.
         */
        C3_CONTAINER(EntityType.CONTAINER),

        /**
         * The C4 Component {@code ComponentBoundary} keyword.
         */
        C3_CONTAINER_BOUNDARY("ComponentBoundary"),

        /**
         * The C4 Component {@code ContainerDb} keyword.
         */
        C3_CONTAINER_DB(EntityType.CONTAINER_DB),

        /**
         * The C4 Component {@code EnterpriseBoundary} keyword.
         */
        C3_ENTERPRISE_BOUNDARY(EntityType.ENTERPRISE_BOUNDARY),

        /**
         * The C4 Component {@code Layout} keyword.
         */
        C3_LAYOUT(EntityType.LAYOUT),

        /**
         * The C4 Component {@code Person} keyword.
         */
        C3_PERSON(EntityType.PERSON),

        /**
         * The C4 Component {@code PersonExt} keyword.
         */
        C3_PERSON_EXT(EntityType.PERSON_EXT),

        /**
         * The C4 Component {@code System} keyword.
         */
        C3_SYSTEM(EntityType.SYSTEM),

        /**
         * The C4 Component {@code SystemExt} keyword.
         */
        C3_SYSTEM_EXT(EntityType.SYSTEM_EXT);

        private static final String BOUNDARY = "Boundary";

        private static final String CLOUD = "Cloud";

        private static final String CONTAINER = "Container";

        private static final String CONTAINER_DB = "ContainerDb";

        private static final String ENTERPRISE_BOUNDARY = "EnterpriseBoundary";

        private static final String LAYOUT = "Layout";

        private static final String PERSON = "Person";

        private static final String PERSON_EXT = "PersonExt";

        private static final String SYSTEM = "System";

        private static final String SYSTEM_EXT = "SystemExt";

        private final String typeAsString;

        private EntityType(final String typeAsString) {
            this.typeAsString = typeAsString;
        }

        /**
         * Returns the C4 keyword represented by the current value of {@link EntityType}.
         *
         * @return the current C4 keyword/entity.
         */
        public String getTypeAsString() {
            return this.typeAsString;
        }
    }