diff options
author | Yuuta Liang <yuutaw@student.cs.ubc.ca> | 2023-11-28 21:08:03 -0800 |
---|---|---|
committer | Yuuta Liang <yuutaw@student.cs.ubc.ca> | 2023-11-28 21:08:03 -0800 |
commit | f8e05e4376e1d5f00c93307605eb768281ad240b (patch) | |
tree | 5683cfe5c5c612452723f44d3eee114f27498fcf /src | |
parent | 2a9c2e3abf57a5d92e311c07679ff62be7275f02 (diff) | |
download | jca-f8e05e4376e1d5f00c93307605eb768281ad240b.tar jca-f8e05e4376e1d5f00c93307605eb768281ad240b.tar.gz jca-f8e05e4376e1d5f00c93307605eb768281ad240b.tar.bz2 jca-f8e05e4376e1d5f00c93307605eb768281ad240b.zip |
Add association tags and generate UML
Signed-off-by: Yuuta Liang <yuutaw@student.cs.ubc.ca>
Diffstat (limited to 'src')
33 files changed, 161 insertions, 0 deletions
diff --git a/src/main/model/GroupObserver.java b/src/main/model/GroupObserver.java index 41a9aac..8bef502 100644 --- a/src/main/model/GroupObserver.java +++ b/src/main/model/GroupObserver.java @@ -1,5 +1,7 @@ package model; +import annotations.Assoc; + import java.util.HashMap; import java.util.Map; @@ -10,6 +12,7 @@ public class GroupObserver implements Observer { /** * The map. Because Java doesn't have dependent maps, they are left here as unchecked. */ + @Assoc(partOf = true) private final Map<Class, Observer> map = new HashMap<>(); /** diff --git a/src/main/model/asn1/ASN1Object.java b/src/main/model/asn1/ASN1Object.java index ca10fa6..1e4d600 100644 --- a/src/main/model/asn1/ASN1Object.java +++ b/src/main/model/asn1/ASN1Object.java @@ -1,5 +1,6 @@ package model.asn1; +import annotations.Assoc; import model.asn1.exceptions.ParseException; import model.asn1.parsing.BytesReader; @@ -28,6 +29,7 @@ public class ASN1Object implements Encodable { public static final Tag TAG_SET = new Tag(TagClass.UNIVERSAL, true, 0x11); // The ASN.1 type tag. + @Assoc(partOf = true) private final Tag tag; // The value length for implementation parsing purposes (only available if the object is parsed) @@ -37,6 +39,7 @@ public class ASN1Object implements Encodable { private final Byte[] value; // The parent ASN.1 type tag, if required for EXPLICIT tagging with a CONTEXT SPECIFIC tag number. + @Assoc(lowerBond = 0, partOf = true) private final Tag parentTag; /** diff --git a/src/main/model/asn1/Encodable.java b/src/main/model/asn1/Encodable.java index 547029c..64d5f60 100644 --- a/src/main/model/asn1/Encodable.java +++ b/src/main/model/asn1/Encodable.java @@ -5,5 +5,8 @@ package model.asn1; */ @FunctionalInterface public interface Encodable { + /** + * EFFECTS: Encode the object into DER bytes. + */ Byte[] encodeDER(); } diff --git a/src/main/model/asn1/Tag.java b/src/main/model/asn1/Tag.java index 7fb8ae4..9b6a480 100644 --- a/src/main/model/asn1/Tag.java +++ b/src/main/model/asn1/Tag.java @@ -1,5 +1,6 @@ package model.asn1; +import annotations.Assoc; import model.asn1.exceptions.ParseException; import model.asn1.parsing.BytesReader; @@ -7,6 +8,7 @@ import model.asn1.parsing.BytesReader; * Represents the metadata (tag) of an ASN.1 type. */ public class Tag implements Encodable { + @Assoc(partOf = true) private final TagClass cls; private final boolean constructive; private final int number; diff --git a/src/main/model/ca/CertificationAuthority.java b/src/main/model/ca/CertificationAuthority.java index b118637..b724e83 100644 --- a/src/main/model/ca/CertificationAuthority.java +++ b/src/main/model/ca/CertificationAuthority.java @@ -1,5 +1,6 @@ package model.ca; +import annotations.Assoc; import model.Event; import model.EventLog; import model.Observer; @@ -44,21 +45,25 @@ public class CertificationAuthority { /** * The RSA2048 private key. */ + @Assoc(partOf = true, lowerBond = 0) private RSAPrivateKey key; /** * The public key. */ + @Assoc(partOf = true, lowerBond = 0) private RSAPublicKey publicKey; /** * The signed certificate. */ + @Assoc(partOf = true, lowerBond = 0) private Certificate certificate; /** * Signed certificates. */ + @Assoc(lowerBond = 0) private final List<Certificate> signed; /** @@ -69,16 +74,19 @@ public class CertificationAuthority { /** * Revoked certs. */ + @Assoc(lowerBond = 0) private final List<RevokedCertificate> revoked; /** * Certificate templates. */ + @Assoc(lowerBond = 0) private final List<Template> templates; /** * Audit logs. */ + @Assoc(lowerBond = 0) private final List<AuditLogEntry> logs; /** @@ -89,6 +97,7 @@ public class CertificationAuthority { /** * Data observers. */ + @Assoc(lowerBond = 0) private final List<Observer> observers; /** diff --git a/src/main/model/ca/Template.java b/src/main/model/ca/Template.java index 44de676..d2df360 100644 --- a/src/main/model/ca/Template.java +++ b/src/main/model/ca/Template.java @@ -1,5 +1,6 @@ package model.ca; +import annotations.Assoc; import model.asn1.ASN1Object; import model.asn1.ObjectIdentifier; import model.asn1.PrintableString; @@ -26,6 +27,7 @@ public class Template { /** * Subject of the issued certs. Null -> unspecified */ + @Assoc(partOf = true, lowerBond = 0) private final Name subject; /** diff --git a/src/main/model/csr/Attribute.java b/src/main/model/csr/Attribute.java index 2daa000..26c3271 100644 --- a/src/main/model/csr/Attribute.java +++ b/src/main/model/csr/Attribute.java @@ -1,5 +1,6 @@ package model.csr; +import annotations.Assoc; import model.asn1.ASN1Object; import model.asn1.ObjectIdentifier; import model.asn1.Tag; @@ -26,11 +27,13 @@ public class Attribute extends ASN1Object { * The type of that attribute. For example, <pre>2.5.29.14</pre> is subjectKeyIdentifier. * It determines the format of the value. */ + @Assoc(partOf = true) private final ObjectIdentifier type; /** * Value set. */ + @Assoc(partOf = true) private final Values values; /** diff --git a/src/main/model/csr/Attributes.java b/src/main/model/csr/Attributes.java index 302741d..ae64434 100644 --- a/src/main/model/csr/Attributes.java +++ b/src/main/model/csr/Attributes.java @@ -1,5 +1,6 @@ package model.csr; +import annotations.Assoc; import model.asn1.ASN1Object; import model.asn1.Encodable; import model.asn1.Tag; @@ -18,6 +19,7 @@ import java.util.stream.Stream; * </pre> */ public class Attributes extends ASN1Object { + @Assoc(partOf = true) private final Attribute[] array; /** diff --git a/src/main/model/csr/CertificationRequest.java b/src/main/model/csr/CertificationRequest.java index 64203f9..fc22228 100644 --- a/src/main/model/csr/CertificationRequest.java +++ b/src/main/model/csr/CertificationRequest.java @@ -1,5 +1,6 @@ package model.csr; +import annotations.Assoc; import model.asn1.ASN1Object; import model.asn1.BitString; import model.asn1.Tag; @@ -36,16 +37,19 @@ public class CertificationRequest extends ASN1Object { * All info of that CSR, excluding the signature. * It will be signed, and the signature is in <pre>signature</pre>. */ + @Assoc(partOf = true) private final CertificationRequestInfo certificationRequestInfo; /** * The algorithm used for <pre>signature</pre>. */ + @Assoc(partOf = true) private final AlgorithmIdentifier signatureAlgorithm; /** * The signature. */ + @Assoc(partOf = true) private final BitString signature; /** diff --git a/src/main/model/csr/CertificationRequestInfo.java b/src/main/model/csr/CertificationRequestInfo.java index 8f68ac8..4834813 100644 --- a/src/main/model/csr/CertificationRequestInfo.java +++ b/src/main/model/csr/CertificationRequestInfo.java @@ -1,5 +1,6 @@ package model.csr; +import annotations.Assoc; import model.asn1.ASN1Object; import model.asn1.Int; import model.asn1.Tag; @@ -38,18 +39,25 @@ public class CertificationRequestInfo extends ASN1Object { /** * Version of the CRL. Always {@link CertificationRequestInfo#VERSION_V1} (0). */ + @Assoc(partOf = true) private final Int version; /** * Subject of the requested certificate */ + @Assoc(partOf = true) private final Name subject; /** * The public key to request. */ + @Assoc(partOf = true) private final SubjectPublicKeyInfo subjectPKInfo; + /** + * The request attributes. + */ + @Assoc(partOf = true) private final Attributes attributes; /** diff --git a/src/main/model/csr/Values.java b/src/main/model/csr/Values.java index f461686..1f9423c 100644 --- a/src/main/model/csr/Values.java +++ b/src/main/model/csr/Values.java @@ -1,5 +1,6 @@ package model.csr; +import annotations.Assoc; import model.asn1.ASN1Object; import model.asn1.Encodable; import model.asn1.Tag; @@ -22,6 +23,10 @@ import java.util.stream.Stream; * Values can be none or any length. Parsing and decoding the values are handled in specific types. */ public class Values extends ASN1Object { + /** + * The values array. + */ + @Assoc(partOf = true, lowerBond = 1) private final ASN1Object[] array; /** diff --git a/src/main/model/pki/AlgorithmIdentifier.java b/src/main/model/pki/AlgorithmIdentifier.java index f7df59f..4e4fab3 100644 --- a/src/main/model/pki/AlgorithmIdentifier.java +++ b/src/main/model/pki/AlgorithmIdentifier.java @@ -1,5 +1,6 @@ package model.pki; +import annotations.Assoc; import model.asn1.ASN1Object; import model.asn1.ObjectIdentifier; import model.asn1.Tag; @@ -24,6 +25,7 @@ public class AlgorithmIdentifier extends ASN1Object { /** * The type of that attribute. For example, <pre>1.2.840.113549.1.1.11</pre> is sha256WithRSAEncryption. */ + @Assoc(partOf = true) private final ObjectIdentifier type; /** @@ -48,6 +50,7 @@ public class AlgorithmIdentifier extends ASN1Object { * } * </pre> */ + @Assoc(partOf = true, lowerBond = 0) private final ASN1Object parameters; /** diff --git a/src/main/model/pki/SubjectPublicKeyInfo.java b/src/main/model/pki/SubjectPublicKeyInfo.java index ca3b997..2f2a514 100644 --- a/src/main/model/pki/SubjectPublicKeyInfo.java +++ b/src/main/model/pki/SubjectPublicKeyInfo.java @@ -1,5 +1,6 @@ package model.pki; +import annotations.Assoc; import model.asn1.ASN1Object; import model.asn1.BitString; import model.asn1.Tag; @@ -24,11 +25,13 @@ public class SubjectPublicKeyInfo extends ASN1Object { /** * The algorithm used. */ + @Assoc(partOf = true) private final AlgorithmIdentifier algorithm; /** * The public key. */ + @Assoc(partOf = true) private final BitString subjectPublicKey; /** diff --git a/src/main/model/pki/cert/Certificate.java b/src/main/model/pki/cert/Certificate.java index 25499e3..f9d61bb 100644 --- a/src/main/model/pki/cert/Certificate.java +++ b/src/main/model/pki/cert/Certificate.java @@ -1,5 +1,6 @@ package model.pki.cert; +import annotations.Assoc; import model.asn1.ASN1Object; import model.asn1.BitString; import model.asn1.Tag; @@ -53,16 +54,19 @@ public class Certificate extends ASN1Object { * All info of that cert, excluding the signature. * It will be signed, and the signature is in <pre>signature</pre>. */ + @Assoc(partOf = true) private final TbsCertificate certificate; /** * The algorithm used for <pre>signature</pre>. */ + @Assoc(partOf = true) private final AlgorithmIdentifier signatureAlgorithm; /** * The signature. */ + @Assoc(partOf = true) private final BitString signature; /** diff --git a/src/main/model/pki/cert/Extension.java b/src/main/model/pki/cert/Extension.java index 9db83b2..a856086 100644 --- a/src/main/model/pki/cert/Extension.java +++ b/src/main/model/pki/cert/Extension.java @@ -1,5 +1,6 @@ package model.pki.cert; +import annotations.Assoc; import model.asn1.*; import model.asn1.exceptions.ParseException; import model.asn1.parsing.BytesReader; @@ -28,6 +29,7 @@ public class Extension extends ASN1Object { /** * The ID of the type of that extension. */ + @Assoc(partOf = true) private final ObjectIdentifier extnId; /** @@ -37,11 +39,13 @@ public class Extension extends ASN1Object { * behaviour is undefined. * Marking an extension critical reduces compatibility. */ + @Assoc(partOf = true) private final Bool critical; /** * The DER-encoded ASN.1 content of that extension. */ + @Assoc(partOf = true) private final OctetString extnValue; /** diff --git a/src/main/model/pki/cert/Extensions.java b/src/main/model/pki/cert/Extensions.java index 72d641f..8c636b0 100644 --- a/src/main/model/pki/cert/Extensions.java +++ b/src/main/model/pki/cert/Extensions.java @@ -1,5 +1,6 @@ package model.pki.cert; +import annotations.Assoc; import model.asn1.ASN1Object; import model.asn1.Encodable; import model.asn1.Tag; @@ -18,6 +19,10 @@ import java.util.stream.Stream; * </pre> */ public class Extensions extends ASN1Object { + /** + * The extension array. + */ + @Assoc(partOf = true) private final Extension[] extensions; /** diff --git a/src/main/model/pki/cert/TbsCertificate.java b/src/main/model/pki/cert/TbsCertificate.java index 26b30f4..6ad15e7 100644 --- a/src/main/model/pki/cert/TbsCertificate.java +++ b/src/main/model/pki/cert/TbsCertificate.java @@ -1,5 +1,6 @@ package model.pki.cert; +import annotations.Assoc; import model.asn1.ASN1Object; import model.asn1.Int; import model.asn1.Tag; @@ -63,6 +64,7 @@ public class TbsCertificate extends ASN1Object { * [0] Version DEFAULT v1 * </pre> */ + @Assoc(partOf = true) private final Int version; /** @@ -72,8 +74,10 @@ public class TbsCertificate extends ASN1Object { * CertificateSerialNumber ::= INTEGER * </pre> */ + @Assoc(partOf = true) private final Int serialNumber; + @Assoc(partOf = true) private final AlgorithmIdentifier signature; /** @@ -83,24 +87,32 @@ public class TbsCertificate extends ASN1Object { * subject Name * </pre> */ + @Assoc(partOf = true) private final Name issuer; /** * The validity period of that certificate. * Validity ::= SEQUENCE { notBefore Time, notAfter Time, ... } */ + @Assoc(partOf = true) private final Validity validity; /** * See the comments on issuer. */ + @Assoc(partOf = true) private final Name subject; + /** + * The public key of the certificate's holder. + */ + @Assoc(partOf = true) private final SubjectPublicKeyInfo subjectPublicKeyInfo; /** * [3] Optional. */ + @Assoc(partOf = true, lowerBond = 0) private final Extensions extensions; /** diff --git a/src/main/model/pki/cert/Validity.java b/src/main/model/pki/cert/Validity.java index e83d326..190b469 100644 --- a/src/main/model/pki/cert/Validity.java +++ b/src/main/model/pki/cert/Validity.java @@ -1,5 +1,6 @@ package model.pki.cert; +import annotations.Assoc; import model.asn1.*; import model.asn1.exceptions.ParseException; import model.asn1.parsing.BytesReader; @@ -28,11 +29,13 @@ public class Validity extends ASN1Object { /** * The certificate is not valid before that time. */ + @Assoc(partOf = true) private final ASN1Time notBefore; /** * The certificate is not valid after that time. */ + @Assoc(partOf = true) private final ASN1Time notAfter; /** diff --git a/src/main/model/pki/crl/CertificateList.java b/src/main/model/pki/crl/CertificateList.java index 8729561..8f4b98b 100644 --- a/src/main/model/pki/crl/CertificateList.java +++ b/src/main/model/pki/crl/CertificateList.java @@ -1,5 +1,6 @@ package model.pki.crl; +import annotations.Assoc; import model.asn1.ASN1Object; import model.asn1.BitString; import model.asn1.Tag; @@ -20,16 +21,19 @@ public class CertificateList extends ASN1Object { * All info of that CRL, excluding the signature. * It will be signed, and the signature is in <pre>signature</pre>. */ + @Assoc(partOf = true) private final CertificateListContent crl; /** * The algorithm used for <pre>signature</pre>. */ + @Assoc(partOf = true) private final AlgorithmIdentifier signatureAlgorithm; /** * The signature. */ + @Assoc(partOf = true) private final BitString signature; /** diff --git a/src/main/model/pki/crl/CertificateListContent.java b/src/main/model/pki/crl/CertificateListContent.java index 4cc96fb..80d8fc1 100644 --- a/src/main/model/pki/crl/CertificateListContent.java +++ b/src/main/model/pki/crl/CertificateListContent.java @@ -1,5 +1,6 @@ package model.pki.crl; +import annotations.Assoc; import model.asn1.*; import model.pki.AlgorithmIdentifier; import model.x501.Name; @@ -39,10 +40,15 @@ import java.util.stream.Stream; */ public class CertificateListContent extends ASN1Object { private final Int version = new Int(Int.TAG, null, 1); + @Assoc(partOf = true) private final Name issuer; + @Assoc(partOf = true) private final AlgorithmIdentifier signature; + @Assoc(partOf = true) private final ASN1Time thisUpdate; + @Assoc(partOf = true) private final ASN1Time nextUpdate; + @Assoc(partOf = true, lowerBond = 0) private final RevokedCertificate[] revokedCertificates; /** diff --git a/src/main/model/pki/crl/RevokedCertificate.java b/src/main/model/pki/crl/RevokedCertificate.java index 1f0afc1..5acb2ed 100644 --- a/src/main/model/pki/crl/RevokedCertificate.java +++ b/src/main/model/pki/crl/RevokedCertificate.java @@ -1,5 +1,6 @@ package model.pki.crl; +import annotations.Assoc; import model.asn1.*; import java.util.Arrays; @@ -17,8 +18,11 @@ import java.util.stream.Stream; * </pre> */ public class RevokedCertificate extends ASN1Object { + @Assoc(partOf = true) private final Int serialNumber; + @Assoc(partOf = true) private final ASN1Time revocationDate; + @Assoc(partOf = true) private final Reason reason; /** diff --git a/src/main/model/x501/AttributeTypeAndValue.java b/src/main/model/x501/AttributeTypeAndValue.java index 179d6ff..c79ff77 100644 --- a/src/main/model/x501/AttributeTypeAndValue.java +++ b/src/main/model/x501/AttributeTypeAndValue.java @@ -1,5 +1,6 @@ package model.x501; +import annotations.Assoc; import model.asn1.ASN1Object; import model.asn1.ObjectIdentifier; import model.asn1.Tag; @@ -24,11 +25,13 @@ public class AttributeTypeAndValue extends ASN1Object { * The type of that attribute. For example, <pre>2.5.4.10</pre> is OU. * It determines the format of the value. */ + @Assoc(partOf = true) private final ObjectIdentifier type; /** * Value corresponding to type. */ + @Assoc(partOf = true) private final ASN1Object value; /** diff --git a/src/main/model/x501/Name.java b/src/main/model/x501/Name.java index 7477005..b00109d 100644 --- a/src/main/model/x501/Name.java +++ b/src/main/model/x501/Name.java @@ -1,5 +1,6 @@ package model.x501; +import annotations.Assoc; import model.asn1.*; import model.asn1.exceptions.ParseException; import model.asn1.parsing.BytesReader; @@ -19,6 +20,7 @@ import java.util.stream.Stream; * </pre> */ public class Name extends ASN1Object { + @Assoc(partOf = true) private final RelativeDistinguishedName[] rdnSequence; /** diff --git a/src/main/model/x501/RelativeDistinguishedName.java b/src/main/model/x501/RelativeDistinguishedName.java index c431f12..b9f6a0c 100644 --- a/src/main/model/x501/RelativeDistinguishedName.java +++ b/src/main/model/x501/RelativeDistinguishedName.java @@ -1,5 +1,6 @@ package model.x501; +import annotations.Assoc; import model.asn1.ASN1Object; import model.asn1.Encodable; import model.asn1.Tag; @@ -20,6 +21,7 @@ import java.util.stream.Stream; * For more information on DN, see {@link Name}. */ public class RelativeDistinguishedName extends ASN1Object { + @Assoc(partOf = true, lowerBond = 1) private final AttributeTypeAndValue[] array; /** diff --git a/src/main/ui/gui/IssueDialog.java b/src/main/ui/gui/IssueDialog.java index 8dcd6a8..23312eb 100644 --- a/src/main/ui/gui/IssueDialog.java +++ b/src/main/ui/gui/IssueDialog.java @@ -1,5 +1,6 @@ package ui.gui; +import annotations.Assoc; import model.asn1.exceptions.ParseException; import model.ca.Template; import model.csr.CertificationRequest; @@ -19,6 +20,7 @@ public class IssueDialog extends CertEditDialog<Template> { /** * The list of templates. */ + @Assoc(lowerBond = 1) private final List<Template> templates; /** @@ -29,11 +31,13 @@ public class IssueDialog extends CertEditDialog<Template> { /** * Combo box to choose template. */ + @Assoc(partOf = true) private JComboBox<String> componentTemp; /** * The selected template, immutable. */ + @Assoc(partOf = true) private Template selectedTemplate; /** diff --git a/src/main/ui/gui/MainUI.java b/src/main/ui/gui/MainUI.java index 9fa65ef..9a7f3f2 100644 --- a/src/main/ui/gui/MainUI.java +++ b/src/main/ui/gui/MainUI.java @@ -1,5 +1,6 @@ package ui.gui; +import annotations.Assoc; import model.GroupObserver; import model.ObservedData; import model.Observer; @@ -67,75 +68,108 @@ public class MainUI extends JFrame { /** * The root panel (Box layout). */ + @Assoc(partOf = true) private final JPanel rootPanel = new JPanel(new BoxLayout(rootPane, BoxLayout.PAGE_AXIS)); /** * Common toolbar buttons */ + @Assoc(partOf = true) private final JButton buttonToolbarLoad = btn("Load", "open.png", this::onLoad); + @Assoc(partOf = true) private final JButton buttonToolbarSave = btn("Save", "saveall.png", this::onSave); /** * Toolbar that switches with the tab. */ + @Assoc(partOf = true) private final JPanel panelContextAwareToolbar = new JPanel(new CardLayout(0, 0)); /** * Tab root. */ + @Assoc(partOf = true) private final JTabbedPane tabbedPane = new JTabbedPane(); /** * CA tab */ + @Assoc(partOf = true) private final JLabel labelCACertificate = new JLabel(); + @Assoc(partOf = true) private final JLabel labelPrivateKey = new JLabel(); + @Assoc(partOf = true) private final JButton buttonGenPrivKey = btn("Generate", 'G', this::onGeneratePrivateKey); + @Assoc(partOf = true) private final JButton buttonInstallCA = btn("Install", 'I', this::onInstallCA); + @Assoc(partOf = true) private final JButton buttonGenCSR = btn("CSR", this::onSignCSR); + @Assoc(partOf = true) private final QRPanel panelQR = new QRPanel(256); + @Assoc(partOf = true) private final JToolBar toolbarCA = new JToolBar(); + @Assoc(partOf = true) private final JButton buttonCAToolbarCRL = btn("CRL", "publisher.png", this::onCRL); /** * Certs tab */ + @Assoc(partOf = true) private JPanel panelCertsTab; + @Assoc(partOf = true) private final JTable tableCerts = new JTable(); + @Assoc(partOf = true) private final CertTableModel modelCerts = new CertTableModel(); + @Assoc(partOf = true) private final JToolBar toolbarCerts = new JToolBar(); + @Assoc(partOf = true) private final JButton buttonCertsToolbarNew = btn("Sign", "new.png", this::onIssue); + @Assoc(partOf = true) private final JButton buttonCertsToolbarRevoke = btn("Revoke", "deletetest.png", this::onRevokeCert); + @Assoc(partOf = true) private final JButton buttonCertsToolbarExport = btn("Export", "export.png", this::onExportCert); /** * Templates tab */ + @Assoc(partOf = true) private JPanel panelTmpTab; + @Assoc(partOf = true) private final JTable tableTemplates = new JTable(); + @Assoc(partOf = true) private final TemplateTableModel modelTemplates = new TemplateTableModel(); + @Assoc(partOf = true) private final JToolBar toolbarTemplates = new JToolBar(); + @Assoc(partOf = true) private final JButton buttonTemplatesToolbarNew = btn("New", "new.png", this::onNewTemplate); + @Assoc(partOf = true) private final JButton buttonTemplatesToolbarEnable = btn("Enable", "enable.png", this::onEnableTemplate); + @Assoc(partOf = true) private final JButton buttonTemplatesToolbarDisable = btn("Disable", "disable.png", this::onDisableTemplate); + @Assoc(partOf = true) private final JButton buttonTemplatesToolbarDelete = btn("Delete", "deletetest.png", this::onDeleteTemplate); /** * Logs region */ + @Assoc(partOf = true) private final JPanel panelLogs; + @Assoc(partOf = true) private final JTable tableAuditLogs = new JTable(); + @Assoc(partOf = true) private final LogTableModel modelAuditLogs = new LogTableModel(); /** * Status region */ + @Assoc(partOf = true) private final JLabel labelStatus = new JLabel(); private ObservedData<Boolean> unsaved = new ObservedData<>(false, this::acceptUnsaved); /** * CA and observers */ + @Assoc(partOf = true) private CertificationAuthority ca; private final GroupObserver obs = new GroupObserver(); diff --git a/src/main/ui/gui/RevokeDialog.java b/src/main/ui/gui/RevokeDialog.java index 9cebc74..19c7f1b 100644 --- a/src/main/ui/gui/RevokeDialog.java +++ b/src/main/ui/gui/RevokeDialog.java @@ -1,5 +1,6 @@ package ui.gui; +import annotations.Assoc; import model.asn1.ASN1Object; import model.asn1.UtcTime; import model.pki.cert.Certificate; @@ -54,31 +55,37 @@ public class RevokeDialog extends JDialog { /** * Root pane */ + @Assoc(partOf = true) private JPanel contentPane; /** * OK button */ + @Assoc(partOf = true) private JButton buttonOK; /** * Cancel button */ + @Assoc(partOf = true) private JButton buttonCancel; /** * Reason */ + @Assoc(partOf = true) private JComboBox<String> comboBoxReason; /** * Subject (not editable) */ + @Assoc(partOf = true) private JTextField textFieldSubject; /** * Time */ + @Assoc(partOf = true) private JFormattedTextField formattedTextFieldTime; /** diff --git a/src/main/ui/gui/TemplateEditDialog.java b/src/main/ui/gui/TemplateEditDialog.java index 557d207..9037956 100644 --- a/src/main/ui/gui/TemplateEditDialog.java +++ b/src/main/ui/gui/TemplateEditDialog.java @@ -1,5 +1,6 @@ package ui.gui; +import annotations.Assoc; import model.asn1.exceptions.ParseException; import model.ca.Template; import model.x501.Name; @@ -23,6 +24,7 @@ public class TemplateEditDialog extends CertEditDialog<Template> { /** * Text field for name. */ + @Assoc(partOf = true) private JTextField templateComponent; /** diff --git a/src/main/ui/gui/widgets/CertEditDialog.java b/src/main/ui/gui/widgets/CertEditDialog.java index 6c440a3..a928053 100644 --- a/src/main/ui/gui/widgets/CertEditDialog.java +++ b/src/main/ui/gui/widgets/CertEditDialog.java @@ -1,5 +1,7 @@ package ui.gui.widgets; +import annotations.Assoc; + import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; @@ -32,9 +34,13 @@ public abstract class CertEditDialog<T> extends JDialog { /** * Root pane. */ + @Assoc(partOf = true) protected JPanel contentPane = new JPanel(); + @Assoc(partOf = true) protected JButton buttonOK = UIUtils.btn("", this::onOK); + @Assoc(partOf = true) protected JTextField textFieldSubject = new JTextField(); + @Assoc(partOf = true) protected JSpinner spinnerValidity = new JSpinner(new SpinnerNumberModel(60, 1, null, 0)); diff --git a/src/main/ui/gui/widgets/CertTableModel.java b/src/main/ui/gui/widgets/CertTableModel.java index f10d621..aa3f808 100644 --- a/src/main/ui/gui/widgets/CertTableModel.java +++ b/src/main/ui/gui/widgets/CertTableModel.java @@ -1,5 +1,6 @@ package ui.gui.widgets; +import annotations.Assoc; import model.ca.CertificationAuthority; import model.pki.cert.Certificate; import model.pki.crl.RevokedCertificate; @@ -39,11 +40,13 @@ public class CertTableModel extends AbstractTableModel { /** * Pointer to {@link CertificationAuthority#getSigned()} */ + @Assoc(lowerBond = 0) private List<Certificate> ptrData; /** * Pointer to {@link CertificationAuthority#getRevoked()} */ + @Assoc(lowerBond = 0) private List<RevokedCertificate> ptrRevokedData; /** diff --git a/src/main/ui/gui/widgets/LogTableModel.java b/src/main/ui/gui/widgets/LogTableModel.java index a7b52ac..2f91dd0 100644 --- a/src/main/ui/gui/widgets/LogTableModel.java +++ b/src/main/ui/gui/widgets/LogTableModel.java @@ -1,5 +1,6 @@ package ui.gui.widgets; +import annotations.Assoc; import model.ca.AuditLogEntry; import model.ca.CertificationAuthority; @@ -23,6 +24,7 @@ public class LogTableModel extends AbstractTableModel { /** * Pointer to the {@link CertificationAuthority#getLogs()}. */ + @Assoc(lowerBond = 0) private List<AuditLogEntry> ptrData; /** diff --git a/src/main/ui/gui/widgets/QRPanel.java b/src/main/ui/gui/widgets/QRPanel.java index ebd70af..334f921 100644 --- a/src/main/ui/gui/widgets/QRPanel.java +++ b/src/main/ui/gui/widgets/QRPanel.java @@ -1,5 +1,6 @@ package ui.gui.widgets; +import annotations.Assoc; import com.google.zxing.BarcodeFormat; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; @@ -18,6 +19,7 @@ import static com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.L; public class QRPanel extends JPanel { private final int size; + @Assoc(partOf = true, lowerBond = 0) private BitMatrix data; /** diff --git a/src/main/ui/gui/widgets/TemplateTableModel.java b/src/main/ui/gui/widgets/TemplateTableModel.java index de23b54..93e9bcf 100644 --- a/src/main/ui/gui/widgets/TemplateTableModel.java +++ b/src/main/ui/gui/widgets/TemplateTableModel.java @@ -1,5 +1,6 @@ package ui.gui.widgets; +import annotations.Assoc; import model.ca.CertificationAuthority; import model.ca.Template; @@ -36,6 +37,7 @@ public class TemplateTableModel extends AbstractTableModel { /** * Pointer to the {@link CertificationAuthority#getTemplates()}. */ + @Assoc(lowerBond = 0) private List<Template> ptrData; /** |