/*
* License information at https://github.com/Caltech-IPAC/firefly/blob/master/License.txt
*/
import WebPlotRequest from './WebPlotRequest.js';
import {RangeValues} from './RangeValues.js';
/**
* @global
* @public
* @typedef {Object} BandState
* @prop workingFitsFileStr
* @prop originalFitsFileStr
* @prop uploadFileNameStr
* @prop imageIdx
* @prop originalImageIdx
* @prop plotRequestSerialize
* @prop rangeValuesSerialize
* @prop directFileAccessData
* @prop multiImageFile
* @prop tileCompress
* @prop cubeCnt
* @prop cubePlaneNumber
*/
export class BandState {
constructor() {
this.workingFitsFileStr = null;
this.originalFitsFileStr= null;
this.uploadFileNameStr= null;
this.imageIdx= 0;
this.originalImageIdx= 0;
this.plotRequestSerialize = null; // Serialized WebPlotRequest
this.rangeValuesSerialize = null; // Serialized RangeValues
this.directFileAccessData= null;
this.multiImageFile = false;
this.tileCompress = false;
this.cubeCnt = 0;
this.cubePlaneNumber = 0;
this.plotRequestTmp= null;
this.rangeValues = null;
}
/**
*
*/
getCubePlaneNumber() { return this.cubePlaneNumber; }
/**
*
* @return {number}
*/
getCubeCnt() { return this.cubeCnt; }
/**
* get a copy of the WebPlotRequest for this BandState. Any changes to the object will not be reflected in
* BandState you must set it back in
* @return {WebPlotRequest}
*/
getWebPlotRequest() {
if (!this.plotRequestTmp) this.plotRequestTmp= WebPlotRequest.parse(this.plotRequestSerialize);
return this.plotRequestTmp;
}
hasRequest() { return this.plotRequestSerialize!==null; }
/**
*
* @return {RangeValues}
*/
getRangeValues() {
if (!this.rangeValues) this.rangeValues= RangeValues.parse(this.rangeValuesSerialize);
return this.rangeValues;
}
/**
*
* @return {ClientFitsHeader}
*/
getDirectFileAccessData() { return this.directFileAccessData; }
/**
*
* @return {string}
*/
getWorkingFitsFileStr() { return this.workingFitsFileStr; }
/**
*
* @return {string}
*/
getOriginalFitsFileStr() { return this.originalFitsFileStr; }
/**
*
* @return {string}
*/
getUploadedFileName() { return this.uploadFileNameStr; }
static makeBandState() { return new BandState(); }
/**
* make a BandState from a pure json representation
* @param {object} bsJson parsed json object
* @return {BandState}
*/
static makeBandStateWithJson(bsJson) {
if (!bsJson) return null;
const bState= BandState.makeBandState();
bState.workingFitsFileStr= bsJson.workingFitsFileStr;
bState.originalFitsFileStr= bsJson.originalFitsFileStr;
if (bsJson.uploadFileNameStr) bState.uploadFileNameStr= bsJson.uploadFileNameStr;
bState.imageIdx= bsJson.imageIdx || 0;
bState.originalImageIdx= bsJson.originalImageIdx || 0;
bState.plotRequestSerialize= bsJson.plotRequestSerialize;
bState.rangeValuesSerialize= bsJson.rangeValuesSerialize;
bState.multiImageFile= Boolean(bsJson.multiImageFile);
bState.tileCompress = Boolean(bsJson.tileCompress);
bState.cubeCnt= bsJson.cubeCnt || 0;
bState.cubePlaneNumber= bsJson.cubePlaneNumber || 0;
return bState;
}
/**
* @param {BandState} bs
* @param {boolean} includeDirectAccessData include the directFileAccessData object
*/
static convertToJSON(bs, includeDirectAccessData= true) {
if (!bs || !bs.plotRequestSerialize) return null;
const json= {};
json.workingFitsFileStr= bs.workingFitsFileStr;
if (bs.workingFitsFileStr!==bs.originalFitsFileStr) json.originalFitsFileStr= bs.originalFitsFileStr;
if (bs.uploadFileNameStr) json.uploadFileNameStr= bs.uploadFileNameStr;
if (bs.imageIdx) json.imageIdx= bs.imageIdx;
if (bs.originalImageIdx) json.originalImageIdx= bs.originalImageIdx;
json.plotRequestSerialize= bs.getWebPlotRequest().toStringServerSideOnly();
json.rangeValuesSerialize= bs.rangeValuesSerialize;
if (includeDirectAccessData) json.directFileAccessData= bs.directFileAccessData;
if (bs.multiImageFile) json.multiImageFile= bs.multiImageFile;
if (bs.tileCompress) json.tileCompress = bs.tileCompress;
if (bs.cubeCnt) json.cubeCnt= bs.cubeCnt;
if (bs.cubePlaneNumber) json.cubePlaneNumber= bs.cubePlaneNumber;
return json;
}
}
export default BandState;