fabric-samples/commercial-paper/organization/digibank/contract/ledger-api/state.js
Anthony O'Dowd e67fcf14a3 FAB-12322 Update commercial-paper sample
Change-Id: I235cb62df492b7713bb1c355b7457f679903bd34
Signed-off-by: Anthony O'Dowd <a_o-dowd@uk.ibm.com>
2018-11-14 17:53:12 +00:00

98 lines
No EOL
2.5 KiB
JavaScript

/*
SPDX-License-Identifier: Apache-2.0
*/
'use strict';
/**
* State class. States have a class, unique key, and a lifecycle current state
* the current state is determined by the specific subclass
*/
class State {
/**
* @param {String|Object} class An indentifiable class of the instance
* @param {keyParts[]} elements to pull together to make a key for the objects
*/
constructor(stateClass, keyParts) {
this.class = stateClass;
this.key = State.makeKey(keyParts);
this.currentState = null;
}
getClass() {
return this.class;
}
getKey() {
return this.key;
}
getSplitKey(){
return State.splitKey(this.key);
}
getCurrentState(){
return this.currentState;
}
serialize() {
return State.serialize(this);
}
/**
* Convert object to buffer containing JSON data serialization
* Typically used before putState()ledger API
* @param {Object} JSON object to serialize
* @return {buffer} buffer with the data to store
*/
static serialize(object) {
return Buffer.from(JSON.stringify(object));
}
/**
* Deserialize object into one of a set of supported JSON classes
* i.e. Covert serialized data to JSON object
* Typically used after getState() ledger API
* @param {data} data to deserialize into JSON object
* @param (supportedClasses) the set of classes data can be serialized to
* @return {json} json with the data to store
*/
static deserialize(data, supportedClasses) {
let json = JSON.parse(data.toString());
let objClass = supportedClasses[json.class];
if (!objClass) {
throw new Error(`Unknown class of ${json.class}`);
}
let object = new (objClass)(json);
return object;
}
/**
* Deserialize object into specific object class
* Typically used after getState() ledger API
* @param {data} data to deserialize into JSON object
* @return {json} json with the data to store
*/
static deserializeClass(data, objClass) {
let json = JSON.parse(data.toString());
let object = new (objClass)(json);
return object;
}
/**
* Join the keyParts to make a unififed string
* @param (String[]) keyParts
*/
static makeKey(keyParts) {
return keyParts.map(part => JSON.stringify(part)).join(':');
}
static splitKey(key){
return key.split(':');
}
}
module.exports = State;