Class Namer

java.lang.Object
com.mcpdbwizard.pub.Namer

public class Namer extends Object
Product branding strings, in one place.

These used to be PARAM_* placeholder tokens rewritten by sed when a release was cut. That step no longer ran, so the tokens travelled into generated code verbatim — a regenerated tree contained 36,837 literal PARAM_PROD_NAMEs, and every generated file's header read "Generated by PARAM_PROD_NAME PARAM_PRODUCT_VERSION build PARAM_BUILD". Holding the values here instead means the generator concatenates a real string and there is nothing left to substitute after the build.

The values are real branding as of 2026-08-07, filled in by the rename recorded in docs/rename-plan.md. They were provisional SUBST_* placeholders until then; that prefix existed to be greppable as a family and distinct from the PARAM_ token each replaced, so the migration could be counted rather than believed. Both families should now be absent from a regenerated tree, and the rename's check script asserts exactly that.

This class is the only place product branding belongs. Not because duplication is untidy, but because of the arithmetic: param_prod_name alone reaches ~36,837 places in a single regeneration. Anything hard-coded elsewhere is invisible to that count and will be missed — which is exactly what happened to the documentation links, nine of which sat in SAAdminWrangler as literal URLs and went on pointing at a dead site for years. Add the constant here and reference it; never retype the value.

Why this lives in com.mcpdbwizard.pub and not in the generator. LibraryInfo reports the same product identity to generated programs at run time, and pub SHIPS WITH generated code, so it must never depend on com.mcpdbwizard.app. Putting the constants the other way round -- in pub, which app already imports in 30 files -- gives one source of truth without inverting that dependency. A second copy inside pub would have to be kept in step by hand, and would drift the first time only one side was edited.

Only values that genuinely survive into generated output live here. Tokens the generator substitutes per run — PARAM_AUTHOR (the config's author name), PARAM_TARGET_PARAM_*, and the script tokens PARAM_JDBCJAR/PARAM_JAVAC/… — are deliberately absent: replacing those with a constant would bake one generation's data into every customer's output.

PARAM_COPYRIGHT_NOTICE was listed above until 2026-08-04, on the same reasoning. It did not belong there: nothing substitutes it, and it never reached generated output — its only appearances were the javadoc headers of 45 hand-written sources in this package and in app.common, where it stood for this project's own notice rather than a customer's. Those now carry the real notice, so the token is gone from the tree entirely. The distinction to keep is between a token the generator writes into someone else's file and one merely left unsubstituted in ours; only the first kind must stay a token.

Author:
devteam@mcpdbwizard.com Copyright 2003-2026 ATB Consultancy Services Ltd (formerly Orinda Software Ltd, Dublin, Ireland)
  • Field Details

    • param_prod_name

      public static final String param_prod_name
      Short product name. Replaces PARAM_PROD_NAME (36,837 occurrences per regen).

      Spelling matters and is not free choice. MCPDBWizard is the product name as it appears in prose and in emitted text; McpDbWizard is the Java identifier form and com.mcpdbwizard the package form. Use this constant rather than retyping it.

      See Also:
    • param_product_name_long

      public static final String param_product_name_long
      Long product name. Replaces PARAM_PRODUCT_NAME_LONG.

      Deliberately does NOT read "MCPDBWizard for Oracle", and should not be changed to. ORACLE is a registered trademark of Oracle America, Inc., whose third-party usage guidelines permit truthful references to compatibility but not incorporating the mark into another product's name. The decisive point is narrower than the trademark question, though: this constant is stamped into generated PL/SQL and Java that lands in customers' databases and source trees, where a later change cannot be recalled — unlike a web page. "for Oracle Database" belongs in the README, the web UI and the website, all of which can be edited in an afternoon.

      See Also:
    • param_product_name

      public static final String param_product_name
      Alternate product-name token. Replaces PARAM_PRODUCT_NAME.

      Note where this one ends up: 56 of its uses are SQL comment hints of the form select /* MCPDBWizard */ …, which is what a customer's DBA sees in V$SQL when they ask who is running a dictionary query. Keep it short and keep it stable.

      See Also:
    • param_product_version

      public static final String param_product_version
      Product version. Replaces PARAM_PRODUCT_VERSION.
      See Also:
    • param_version

      public static final String param_version
      Bare version token. Replaces PARAM_VERSION.
      See Also:
    • param_build

      public static final String param_build
      Build identifier, in Oracle's YYYYMMDDHH24MI shape — e.g. 202608020937. Replaces PARAM_BUILD.

      Computed ONCE per JVM, at class initialisation, so every file emitted by a single generation run carries the same stamp. It therefore identifies the RUN rather than a release build: two generations a minute apart produce different values. That is acceptable here because the stamp only ever reaches generated comments, alongside the header timestamp that already varies per run — which is why the project compares regenerated trees with comment blocks stripped.

      Java's pattern letters differ from Oracle's: HH24 is Java HH (24-hour) and Oracle's MI is Java mm (minutes); Java's MM is months.

    • param_product_www

      public static final String param_product_www
      Product web address. Replaces PARAM_PRODUCT_WWW.

      A BARE HOSTNAME, with no scheme. Its call sites supply their own — one of them reads "Go to http://" + param_product_www + "/pl_sql_tab.html" — so putting https:// here yields http://https://mcpdbwizard.com/…. Use param_product_url where a complete URL is wanted, and faq(String) for documentation links.

      See Also:
    • param_product_url

      public static final String param_product_url
      The product site as a complete URL. Prefer faq(String) for documentation links.
      See Also:
    • param_vendor_name

      public static final String param_vendor_name
      Who makes it. This is the current vendor, and is a different question from the copyright notice in these files' headers — that records a chain of title ("...ATB Consultancy Services Ltd (formerly Orinda Software Ltd, Dublin, Ireland)") and must not be rewritten to match a rename.
      See Also:
    • param_support_email

      public static final String param_support_email
      Where a user is told to send a log file when the generator fails.
      See Also:
    • param_java_param_limit_url

      public static final String param_java_param_limit_url
      Documentation link emitted into generated comments as "See: ...". Replaces PARAM_JAVA_PARAM_LIMIT_URL.
  • Method Details

    • faq

      public static String faq(String theTopic)
      A documentation URL for theTopic, e.g. faq("logging").

      Absolute on purpose, and it must stay absolute. These links are emitted into customers' source files, where they outlive this tool entirely: someone opening a generated file years from now, on a machine that never had "MCPDBWizard" installed, still has to be able to follow them. Pointing them at a running web UI instead would be broken by construction — that is an internal deployment on a port from a range, usually containerised and firewalled.

      The web UI serves the same paths from the same sources, so its own in-app warnings can link to /faq/<topic> on whatever instance is running and keep working with no route to the internet — which matters, because a large share of Oracle sites are air-gapped. That half belongs to the web module and must not reach back into here: pub ships with generated code and cannot depend on app or web, so these constants are compile-time and cannot be made instance-aware.