samples/messagedigest/src-new-api/org/apidesign/api/security/DigestImpl.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Fri, 25 Mar 2016 07:34:02 +0100
changeset 411 9eb6379b97f0
parent 302 fb84830aacc2
permissions -rw-r--r--
Prevent NPE on Aqua LaF by explicitly using Metal
jtulach@47
     1
/*
jtulach@47
     2
 * To change this template, choose Tools | Templates
jtulach@47
     3
 * and open the template in the editor.
jtulach@47
     4
 */
jtulach@47
     5
jtulach@47
     6
package org.apidesign.api.security;
jtulach@47
     7
jtulach@47
     8
import java.nio.ByteBuffer;
jtulach@47
     9
import org.apidesign.spi.security.Digestor;
jtulach@47
    10
jtulach@47
    11
/**
jtulach@47
    12
 *
jtulach@47
    13
 * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jtulach@47
    14
 */
jtulach@301
    15
// BEGIN: day.end.bridges.DigestImpl
jtulach@301
    16
final class DigestImpl<Data> {
jtulach@376
    17
    private static final DigestorAccessorImpl ACCESSOR;
jtulach@376
    18
    static {
jtulach@376
    19
        ACCESSOR = new DigestorAccessorImpl();
jtulach@376
    20
    }
jtulach@47
    21
    
jtulach@47
    22
    private final Digestor<Data> digestor;
jtulach@47
    23
    private final String algorithm;
jtulach@47
    24
    private Data data;
jtulach@47
    25
    
jtulach@301
    26
    private DigestImpl(Digestor<Data> digestor, String algorithm, Data d) {
jtulach@47
    27
        this.digestor = digestor;
jtulach@47
    28
        this.algorithm = algorithm;
jtulach@47
    29
        this.data = d;
jtulach@47
    30
    }
jtulach@47
    31
    
jtulach@302
    32
    static <Data> DigestImpl create(
jtulach@302
    33
        Digestor<Data> digestor, String algorithm
jtulach@302
    34
    ) {
jtulach@301
    35
        // indirectly calls digestor.create(algorithm)
jtulach@47
    36
        Data d = ACCESSOR.create(digestor, algorithm);
jtulach@47
    37
        if (d == null) {
jtulach@47
    38
            return null;
jtulach@47
    39
        } else {
jtulach@301
    40
            return new DigestImpl(digestor, algorithm, d);
jtulach@47
    41
        }
jtulach@47
    42
    }
jtulach@47
    43
jtulach@47
    44
    byte[] digest(ByteBuffer bb) {
jtulach@301
    45
        // indirectly calls digestor.update(data, bb)
jtulach@47
    46
        ACCESSOR.update(digestor, data, bb);
jtulach@301
    47
        // indirectly calls digestor.digest(data)
jtulach@47
    48
        return ACCESSOR.digest(digestor, data);
jtulach@47
    49
    }
jtulach@47
    50
}
jtulach@301
    51
// END: day.end.bridges.DigestImpl