fabric-samples/commercial-paper/organization/digibank/contract/ledger-api/state.js
Paul O'M d2e2a8b683
Commercial Paper 2.x sample - enhancements and documentation (#335)
* commercial paper enhancements

Signed-off-by: Paul O'M <mahoney@uk.ibm.com>

* commercial paper enhancements

Signed-off-by: Paul O'M <mahoney@uk.ibm.com>

* commercial paper enhancements

Signed-off-by: Paul O'M <mahoney@uk.ibm.com>

* Add further README changes from #335

Signed-off-by: Paul O'M <mahoney@uk.ibm.com>

* Add further README changes from #335

Signed-off-by: Paul O'M <mahoney@uk.ibm.com>

* Add further README changes from #335

Signed-off-by: Paul O'M <mahoney@uk.ibm.com>
2020-11-23 09:56:36 +01:00

105 lines
2.8 KiB
JavaScript

/*
* Copyright IBM Corp. All Rights Reserved.
*
* 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;
}
// not used
/* 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) {
// don't write the key:value passed in - we already have a real composite key, issuer and paper Number.
delete object.key;
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(':');
return keyParts.map(part => part).join(':');
}
static splitKey(key){
return key.split(':');
}
}
module.exports = State;