Datensatzklasse ModuleQRCodec

java.lang.Object
java.lang.Record
org.emau.icmvc.ganimed.ttp.cm2.util.ModuleQRCodec
Datensatzkomponenten:
qrCodeLength - the length for the QR codes

public record ModuleQRCodec(int qrCodeLength) extends Record
Converts module names to QR code text (referred to as QR code hereafter) and QR codes back to module names when a reference set of possible module names is given.

The implementation ensures constant length (and entropy) of the QR codes, in contrast to previous versions, where the module name directly was used as QR code. For backward compatibility old QR codes (module names) are accepted and can be used to lookup module names.

The implementation is a bit more complicated than simply using hashes to allow at least guessing the module name with a QR code reader outside gICS. The exact conversion and lookup rules can be read in toQRCodeFromModuleName(String) and fromQRCodeToModuleName(String, Set) as well as in gics#415: Fehlerhafte Darstellung der Größe von QR-Codes

Autor:
moserf
  • Felddetails

    • DEFAULT_QR_CODE_LENGTH

      public static final int DEFAULT_QR_CODE_LENGTH
      Siehe auch:
    • SEPARATOR

      public static String SEPARATOR
    • TRIMMER

      public static String TRIMMER
    • DEFAULT

      public static final ModuleQRCodec DEFAULT
  • Konstruktordetails

    • ModuleQRCodec

      public ModuleQRCodec(int qrCodeLength)
      Erstellt eine Instanz einer Datensatzklasse ModuleQRCodec.
      Parameter:
      qrCodeLength - Wert für die Datensatzkomponente qrCodeLength
  • Methodendetails

    • toQRCodeFromModule

      public String toQRCodeFromModule(ModuleDTO module)
      Gibt the QR code for a module. zurück.
      Parameter:
      module - the module
      Gibt zurück:
      the QR code for a module.
    • fromQRCodeToModuleKey

      public ModuleKeyDTO fromQRCodeToModuleKey(String qrCode, ConsentTemplateDTO consentTemplate)
      Converts a QR code into a module key DTO in modern style: searches the given consent template for a module with a name that matches the given QR code by the rules found in fromQRCodeToModuleName(String, Set), returning it if found or null otherwise.
      Parameter:
      qrCode - the QR code
      consentTemplate - the consent template for searching modules in
      Gibt zurück:
      the matching module key DTO or null
    • fromQRCodeToModuleKey

      public ModuleKeyDTO fromQRCodeToModuleKey(String qrCode, Set<ModuleKeyDTO> moduleKeys)
      Converts a QR code into a module key DTO in modern style: suche ein module dessen name lang ist searches the given module key DTOs for a module with a name that matches the given QR code by the rules found in fromQRCodeToModuleName(String, Set), returning it if found or null otherwise.
      Parameter:
      qrCode - the QR code
      moduleKeys - the module key DTOs for searching
      Gibt zurück:
      the matching module key DTO or null
    • fromQRCodeToModuleName

      public String fromQRCodeToModuleName(String qrCode, Set<String> moduleNames)
      Gibt the matching module or null. zurück. Regeln für die Suche nach Modul zum QR-Code:
       1. **Abwärtskompatibel**: QR-Code mit exakten Modulnamen werden immer erkannt
       2. QR-Code mit exakten Modulnamen nach Padding mit Spaces werden immer erkannt
       3. QR-Code mit exakten Modulnamen vor `_###_` werden immer erkannt
       4. Durch Abschneiden eindeutig gebliebene Präfixe von Modulnamen vor `...` werden immer erkannt
       5. Durch Abschneiden uneindeutig gewordene Präfixe von Modulnamen vor `...` werden **nicht** erkannt
       
      Parameter:
      qrCode - the QR code
      moduleNames - the names of the modules
      Gibt zurück:
      the matching module or null
    • toQRCodeFromModuleName

      public String toQRCodeFromModuleName(String moduleName)
      Gibt the QR code. zurück. Konvertierungsregeln (für QR-Code-Länge 64):
       1. Modulnamen Ungültige Eingabe: "<" 59 Zeichen werden mit Trenner `_###_` und verschiedenen (aber **nicht** zufälligen) Zeichen rechts aufgefüllt
       2. Modulnamen Ungültige Eingabe: "<" 64 (>= 59) Zeichen werden mit ` ` (Leerzeichen) rechts aufgefüllt
       3. Modulnamen = 64 Zeichen bleiben unverändert
       3. Modulnamen > 64 Zeichen werden bei 61 abgeschnitten und mit `...` aufgefüllt
       
      Parameter:
      moduleName - the module moduleName
      Gibt zurück:
      the QR code.
    • toString

      public final String toString()
      Gibt eine Zeichenfolgendarstellung dieser Datensatzklasse zurück. Die Darstellung enthält den Namen der Klasse, gefolgt vom Namen und Wert jeder der Datensatzkomponenten.
      Angegeben von:
      toString in Klasse Record
      Gibt zurück:
      eine Zeichenfolgendarstellung dieses Objekts
    • hashCode

      public final int hashCode()
      Gibt einen Hashcodewert für diese Objekt zurück. Der Wert wird vom Hashcode jeder der Datensatzkomponenten abgeleitet.
      Angegeben von:
      hashCode in Klasse Record
      Gibt zurück:
      ein Hashcodewert für dieses Objekt
    • equals

      public final boolean equals(Object o)
      Gibt an, ob ein anderes Objekt diesem gleich ("equal to") ist. Die Objekte sind gleich, wenn das andere Objekt der gleichen Klasse angehört und alle Datensatzkomponenten gleich sind. Alle Komponenten in dieser Datensatzklasse werden verglichen mit "==".
      Angegeben von:
      equals in Klasse Record
      Parameter:
      o - das Objekt, mit dem verglichen wird
      Gibt zurück:
      true, wenn dieses Objekt gleich dem Argument o ist, andernfalls false.
    • qrCodeLength

      public int qrCodeLength()
      Gibt den Wert für die Datensatzkomponente qrCodeLength zurück.
      Gibt zurück:
      Wert der Datensatzkomponente qrCodeLength