All Downloads are FREE. Search and download functionalities are using the official Maven repository.

craterdog.tokens.TokenAttributes Maven / Gradle / Ivy

/************************************************************************
 * Copyright (c) Crater Dog Technologies(TM).  All Rights Reserved.     *
 ************************************************************************
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.        *
 *                                                                      *
 * This code is free software; you can redistribute it and/or modify it *
 * under the terms of The MIT License (MIT), as published by the Open   *
 * Source Initiative. (See http://opensource.org/licenses/MIT)          *
 ************************************************************************/
package craterdog.tokens;

import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import craterdog.notary.Watermark;
import craterdog.smart.SmartObject;
import java.net.URI;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * This class defines the attributes that make up a digital token that can be used to hold value.
 *
 * @author Derk
 */
public final class TokenAttributes extends SmartObject {

    /**
     * The location of this document.
     */
    public URI myLocation;

    /**
     * The location of the batch that contains this digital token.
     */
    public URI batchLocation;

    /**
     * The location of the entity that guarantees the value of this digital token.
     */
    public URI guarantorLocation;

    /**
     * The location of the accountant that certified this digital token.
     */
    public URI accountantLocation;

    /**
     * The type of token, for example, Euros, frequent flyer points, cell minutes, gift card, etc.
     */
    public String tokenType;

    /**
     * The lifetime of the token along with the version of the algorithm used to sign it.
     */
    public Watermark watermark;


    /*
     * This map is used to hold any JSON attributes that are not mappable to the existing attributes.
     */
    private final Map additional = new LinkedHashMap<>();


    /**
     * This method returns the value of the additional attribute associated with the specified
     * name, or null if none exists.
     *
     * @param name The name of the additional attribute to be returned.
     * @return The value of the attribute.
     */
    public Object get(String name) {
        return additional.get(name);
    }


    /**
     * This method allows the setting of additional attributes that are not explicitly defined.
     *
     * @param name The name of the additional attribute.
     * @param value The value to be associated with this attribute name.
     * @return Any previous attribute value associated with this attribute name.
     */
    @JsonAnySetter
    public Object put(String name, Object value) {
        return additional.put(name, value);
    }


    /**
     * This method returns a map of the additional attributes that are not explicitly defined.  It
     * is primarily used by the Jackson parser during deserialization of the corresponding JSON.
     *
     * @return A map containing the additional attributes.
     */
    @JsonAnyGetter
    public Map any() {
        return additional;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy