ThemisUIResource.java

/*
 * Themis: Java Project Framework
 * Copyright 2026. Tony Washer
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License.  You may obtain a copy
 * of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package io.github.tonywasher.joceanus.themis.gui.base;

import io.github.tonywasher.joceanus.metis.data.MetisDataItem.MetisDataFieldId;
import io.github.tonywasher.joceanus.oceanus.resource.OceanusBundleId;
import io.github.tonywasher.joceanus.oceanus.resource.OceanusBundleLoader;

import java.util.ResourceBundle;

/**
 * Resource IDs for Themis UI Fields.
 */
public enum ThemisUIResource
        implements OceanusBundleId, MetisDataFieldId {
    /**
     * Source Tab.
     */
    TAB_SOURCE("tab.source"),

    /**
     * References Tab.
     */
    TAB_REFERENCES("tab.references"),

    /**
     * Statistics Tab.
     */
    TAB_STATS("tab.stats"),

    /**
     * Source Tab.
     */
    TAB_LOG("tab.log"),

    /**
     * Select Project Title.
     */
    SELECT_PROJECT("select.project"),

    /**
     * Project Prompt.
     */
    PROMPT_PROJECT("prompt.project"),

    /**
     * Module Prompt.
     */
    PROMPT_MODULE("prompt.module"),

    /**
     * Package Prompt.
     */
    PROMPT_PACKAGE("prompt.package"),

    /**
     * File Prompt.
     */
    PROMPT_FILE("prompt.file"),

    /**
     * Package References Header.
     */
    HEADER_PACKAGE("header.package"),

    /**
     * Class References Header.
     */
    HEADER_CLASS("header.class"),

    /**
     * Reference Local Package.
     */
    REF_LOCAL("reference.local"),

    /**
     * Reference Family Package.
     */
    REF_FAMILY("reference.family"),

    /**
     * Reference Root Package.
     */
    REF_ROOT("reference.root"),

    /**
     * Reference Parent Package.
     */
    REF_PARENT("reference.parent"),

    /**
     * Reference Home Package.
     */
    REF_HOME("reference.home"),

    /**
     * Reference Links.
     */
    REF_LINKS("reference.links"),

    /**
     * Stats Local.
     */
    STATS_LOCAL("stats.local"),

    /**
     * Stats Total.
     */
    STATS_TOTAL("stats.total"),

    /**
     * Stats Desc.
     */
    STATS_DESC("stats.desc"),

    /**
     * Stats Key.
     */
    STATS_KEY("stats.key"),

    /**
     * Stats Value.
     */
    STATS_VALUE("stats.value"),

    /**
     * SourceDecl Annotation.
     */
    SOURCEDECL_ANNOT("source.decl.annot"),

    /**
     * SourceDecl AnnotationMember.
     */
    SOURCEDECL_ANNOTMEMBER("source.decl.annotMember"),

    /**
     * SourceDecl Compact.
     */
    SOURCEDECL_COMPACT("source.decl.compact"),

    /**
     * SourceDecl Constructor.
     */
    SOURCEDECL_CONSTRUCT("source.decl.construct"),

    /**
     * SourceDecl Field.
     */
    SOURCEDECL_FIELD("source.decl.field"),

    /**
     * SourceDecl Initializer.
     */
    SOURCEDECL_INIT("source.decl.init"),

    /**
     * SourceNode ArrayLevel.
     */
    SOURCENODE_ARRAYLVL("source.node.arrayLevel"),

    /**
     * SourceNode Case.
     */
    SOURCENODE_CASE("source.node.case"),

    /**
     * SourceNode Catch.
     */
    SOURCENODE_CATCH("source.node.catch"),

    /**
     * SourceNode Comment.
     */
    SOURCENODE_COMMENT("source.node.comment"),

    /**
     * SourceNode CompilationUnit.
     */
    SOURCENODE_COMPUNIT("source.node.compUnit"),

    /**
     * SourceNode Import.
     */
    SOURCENODE_IMPORT("source.node.import"),

    /**
     * SourceNode Name.
     */
    SOURCENODE_NAME("source.node.name"),

    /**
     * SourceNode Package.
     */
    SOURCENODE_PACKAGE("source.node.package"),

    /**
     * SourceNode ValuePair.
     */
    SOURCENODE_VALUEPAIR("source.node.valuePair"),

    /**
     * SourceExpr ArrayAccess.
     */
    SOURCEEXPR_ARRAYACCESS("source.expr.arrayAccess"),

    /**
     * SourceExpr MarkerAnnotation.
     */
    SOURCEEXPR_MARKER("source.expr.marker"),

    /**
     * SourceExpr NormalAnnotation.
     */
    SOURCEEXPR_NORMAL("source.expr.normal"),

    /**
     * SourceExpr SingleMemberAnnotation.
     */
    SOURCEEXPR_SINGLE("source.expr.single"),

    /**
     * SourceExpr ArrayCreation.
     */
    SOURCEEXPR_ARRAYCREATE("source.expr.arrayCreate"),

    /**
     * SourceExpr ArrayAccess.
     */
    SOURCEEXPR_CAST("source.expr.cast"),

    /**
     * SourceExpr Char.
     */
    SOURCEEXPR_CHAR("source.expr.char"),

    /**
     * SourceExpr ArrayInit.
     */
    SOURCEEXPR_ARRAYINIT("source.expr.arrayInit"),

    /**
     * SourceExpr Integer.
     */
    SOURCEEXPR_INTEGER("source.expr.integer"),

    /**
     * SourceExpr Assign.
     */
    SOURCEEXPR_ASSIGN("source.expr.assign"),

    /**
     * SourceExpr Binary.
     */
    SOURCEEXPR_BINARY("source.expr.binary"),

    /**
     * SourceExpr Boolean.
     */
    SOURCEEXPR_BOOLEAN("source.expr.boolean"),

    /**
     * SourceExpr Class.
     */
    SOURCEEXPR_CLASS("source.expr.class"),

    /**
     * SourceExpr Conditional.
     */
    SOURCEEXPR_CONDITIONAL("source.expr.condition"),

    /**
     * SourceExpr Null.
     */
    SOURCEEXPR_NULL("source.expr.null"),

    /**
     * SourceExpr Double.
     */
    SOURCEEXPR_DOUBLE("source.expr.double"),

    /**
     * SourceExpr Enclosed.
     */
    SOURCEEXPR_ENCLOSED("source.expr.enclosed"),

    /**
     * SourceExpr FieldAccess.
     */
    SOURCEEXPR_FIELDACCESS("source.expr.fieldAccess"),

    /**
     * SourceExpr InstanceOf.
     */
    SOURCEEXPR_INSTANCEOF("source.expr.instance"),

    /**
     * SourceExpr Lambda.
     */
    SOURCEEXPR_LAMBDA("source.expr.lambda"),

    /**
     * SourceExpr Long.
     */
    SOURCEEXPR_LONG("source.expr.long"),

    /**
     * SourceExpr MethodCall.
     */
    SOURCEEXPR_METHODCALL("source.expr.methodCall"),

    /**
     * SourceExpr MethodRef.
     */
    SOURCEEXPR_METHODREF("source.expr.methodRef"),

    /**
     * SourceExpr Name.
     */
    SOURCEEXPR_NAME("source.expr.name"),

    /**
     * SourceExpr ObjectCreate.
     */
    SOURCEEXPR_OBJCREATE("source.expr.objCreate"),

    /**
     * SourceExpr String.
     */
    SOURCEEXPR_STRING("source.expr.string"),

    /**
     * SourceExpr Super.
     */
    SOURCEEXPR_SUPER("source.expr.super"),

    /**
     * SourceExpr Switch.
     */
    SOURCEEXPR_SWITCH("source.expr.switch"),

    /**
     * SourceExpr TextBlock.
     */
    SOURCEEXPR_TEXT("source.expr.text"),

    /**
     * SourceExpr This.
     */
    SOURCEEXPR_THIS("source.expr.this"),

    /**
     * SourceExpr Type.
     */
    SOURCEEXPR_TYPE("source.expr.type"),

    /**
     * SourceExpr TypePattern.
     */
    SOURCEEXPR_TYPEPATTERN("source.expr.typePattern"),

    /**
     * SourceExpr Unary.
     */
    SOURCEEXPR_UNARY("source.expr.unary"),

    /**
     * SourceExpr Variable.
     */
    SOURCEEXPR_VARIABLE("source.expr.var"),

    /**
     * SourceStmt Assert.
     */
    SOURCESTMT_ASSERT("source.stmt.assert"),

    /**
     * SourceStmt Block.
     */
    SOURCESTMT_BLOCK("source.stmt.block"),

    /**
     * SourceStmt Break.
     */
    SOURCESTMT_BREAK("source.stmt.break"),

    /**
     * SourceStmt Constructor.
     */
    SOURCESTMT_CONSTRUCT("source.stmt.construct"),

    /**
     * SourceStmt Continue.
     */
    SOURCESTMT_CONTINUE("source.stmt.continue"),

    /**
     * SourceStmt Do.
     */
    SOURCESTMT_DO("source.stmt.do"),

    /**
     * SourceStmt Empty.
     */
    SOURCESTMT_EMPTY("source.stmt.empty"),

    /**
     * SourceStmt Expression.
     */
    SOURCESTMT_EXPR("source.stmt.expr"),

    /**
     * SourceStmt For.
     */
    SOURCESTMT_FOR("source.stmt.for"),

    /**
     * SourceStmt ForEach.
     */
    SOURCESTMT_FOREACH("source.stmt.forEach"),

    /**
     * SourceStmt Id.
     */
    SOURCESTMT_IF("source.stmt.if"),

    /**
     * SourceStmt Labelled.
     */
    SOURCESTMT_LABELED("source.stmt.labeled"),

    /**
     * SourceStmt Return.
     */
    SOURCESTMT_RETURN("source.stmt.return"),

    /**
     * SourceStmt Switch.
     */
    SOURCESTMT_SWITCH("source.stmt.switch"),

    /**
     * SourceStmt Synchronised.
     */
    SOURCESTMT_SYNC("source.stmt.sync"),

    /**
     * SourceStmt Throw.
     */
    SOURCESTMT_THROW("source.stmt.throw"),

    /**
     * SourceStmt Try.
     */
    SOURCESTMT_TRY("source.stmt.try"),

    /**
     * SourceStmt While.
     */
    SOURCESTMT_WHILE("source.stmt.while"),

    /**
     * SourceStmt Yield.
     */
    SOURCESTMT_YIELD("source.stmt.yield"),

    /**
     * SourceType Array.
     */
    SOURCETYPE_ARRAY("source.type.array"),

    /**
     * SourceType Class.
     */
    SOURCETYPE_CLASS("source.type.class"),

    /**
     * SourceType Intersection.
     */
    SOURCETYPE_INTERSECT("source.type.intersect"),

    /**
     * SourceType Parameter.
     */
    SOURCETYPE_PARAMETER("source.type.parameter"),

    /**
     * SourceType Primitive.
     */
    SOURCETYPE_PRIMITIVE("source.type.primitive"),

    /**
     * SourceType Union.
     */
    SOURCETYPE_UNION("source.type.union"),

    /**
     * SourceType Unknown.
     */
    SOURCETYPE_UNKNOWN("source.type.unknown"),

    /**
     * SourceType Var.
     */
    SOURCETYPE_VAR("source.type.var"),

    /**
     * SourceType Void.
     */
    SOURCETYPE_VOID("source.type.void"),

    /**
     * SourceType Wildcard.
     */
    SOURCETYPE_WILDCARD("source.type.wildCard");

    /**
     * The Resource Loader.
     */
    private static final OceanusBundleLoader LOADER = OceanusBundleLoader.getLoader(ThemisUIResource.class.getCanonicalName(),
            ResourceBundle::getBundle);

    /**
     * The Id.
     */
    private final String theKeyName;

    /**
     * The Value.
     */
    private String theValue;

    /**
     * Constructor.
     *
     * @param pKeyName the key name
     */
    ThemisUIResource(final String pKeyName) {
        theKeyName = pKeyName;
    }

    @Override
    public String getKeyName() {
        return theKeyName;
    }

    @Override
    public String getNameSpace() {
        return "Themis.ui";
    }

    @Override
    public String getValue() {
        /* If we have not initialised the value */
        if (theValue == null) {
            theValue = LOADER.getValue(this);
        }

        /* return the value */
        return theValue;
    }

    @Override
    public String getId() {
        return getValue();
    }
}