Skip to content

Commit 1b26aee

Browse files
committed
Firefly-1469: Update DCE to support rubin needs
- support sia wavelength - support sia obscore options using ObsCore panel - support dataServiceId - clean up - improve UI layout - refactor some of DynComponents - included ServiceDescriptorPanel in the improvements - includes response to feedback
1 parent 6b0e4da commit 1b26aee

19 files changed

+834
-498
lines changed

src/firefly/js/metaConvert/AnalysisUtils.js

-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import {
1414
} from './DataProductsType.js';
1515
import {createGridImagesActivate} from './ImageDataProductsUtil.js';
1616
import {doUploadAndAnalysis} from './UploadAndAnalysis.js';
17-
import {getObsCoreDataProduct} from './vo/ObsCoreConverter';
1817

1918
const LOADING_MSG= 'Loading...';
2019

src/firefly/js/metaConvert/vo/ServDescProducts.js

+16-14
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {isEmpty, isNumber} from 'lodash';
22
import {getComponentState} from '../../core/ComponentCntlr.js';
33
import {getCellValue} from '../../tables/TableUtil.js';
4-
import {makeCircleString} from '../../ui/dynamic/DynamicUISearchPanel';
4+
import {CONTEXT_PARAMS_STR, makeCircleString} from '../../ui/dynamic/DynamicUISearchPanel';
55
import {isSIAStandardID} from '../../ui/dynamic/ServiceDefTools';
66
import {findCutoutTarget, getCutoutErrorStr, getCutoutSize, setCutoutSize} from '../../ui/tap/Cutout';
77
import {PlotAttribute} from '../../visualize/PlotAttribute';
@@ -255,22 +255,24 @@ export function createServDescMenuRet({ descriptors, positionWP, table, row,
255255
}
256256

257257
export function makeUrlFromParams(url, serDef, rowIdx, userInputParams = {}) {
258-
const sendParams = {};
258+
if (!url) return undefined;
259+
const sendParams = new URLSearchParams();
259260
serDef?.serDefParams // if it is defaulted, then set it
260261
?.filter(({value}) => isDefined(value))
261-
.forEach(({name, value}) => sendParams[name] = value);
262+
.forEach(({name, value}) => sendParams.set(name, value));
262263
serDef?.serDefParams // if it is referenced, then set it
263264
?.filter(({ref}) => ref)
264-
.forEach((p) => sendParams[p.name] = getCellValue(serDef.sdSourceTable, rowIdx, p.colName));
265-
userInputParams && Object.entries(userInputParams).forEach(([k, v]) => v && (sendParams[k] = v));
266-
const newUrl = new URL(url);
267-
if (!newUrl) return undefined;
268-
Object.entries(sendParams).forEach(([k, v]) => newUrl.searchParams.append(k, v));
269-
logServiceDescriptor(newUrl, sendParams, newUrl.toString());
270-
return newUrl.toString();
265+
.forEach((p) => sendParams.set(p.name, getCellValue(serDef.sdSourceTable, rowIdx, p.colName)));
266+
Object.entries(userInputParams)
267+
.forEach(([k, v]) => v && k!==CONTEXT_PARAMS_STR && sendParams.set(k,v));
268+
269+
const additionalParams= new URLSearchParams(userInputParams?.[CONTEXT_PARAMS_STR]);
270+
const params= new URLSearchParams([...sendParams, ...additionalParams]);
271+
const newUrl= params.size ? url+'?'+params.toString() : url;
272+
logServiceDescriptor(newUrl, params, newUrl);
273+
return newUrl;
271274
}
272-
function logServiceDescriptor(baseUrl, sendParams, newUrl) {
273-
//console.log(`service descriptor base URL: ${baseUrl}`);
274-
//Object.entries(sendParams).forEach(([k,v]) => console.log(`param: ${k}, value: ${v}`));
275-
//console.log(`service descriptor new URL: ${newUrl}`);
275+
function logServiceDescriptor(baseUrl, params, newUrl) {
276+
// console.log(`service descriptor base URL: ${baseUrl}`);
277+
// console.log(`service descriptor new URL: ${newUrl}`);
276278
}

src/firefly/js/ui/TargetFeedback.jsx

+13-2
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,27 @@ function formatExample(row, fieldKey, setFld) {
3434
}
3535

3636

37+
function stripQuotes(s) {
38+
if (s.startsWith(`'`) && s.endsWith(`'`)) return s.substring(1, s.length-1);
39+
if (s.startsWith('"') && s.endsWith('"')) return s.substring(1, s.length-1);
40+
return s;
41+
}
42+
43+
3744
const ConfigExamples = ({targetPanelExampleRow1, targetPanelExampleRow2, fieldKey}) => {
3845
const {setFld}= useContext(FieldGroupCtx);
3946
const tpR1= !targetPanelExampleRow1 || isArray(targetPanelExampleRow1) ? targetPanelExampleRow1 : [targetPanelExampleRow1];
4047
const tpR2= !targetPanelExampleRow2 || isArray(targetPanelExampleRow2) ? targetPanelExampleRow2 : [targetPanelExampleRow2];
4148
const row1Op= tpR1 ?? getAppOptions()?.targetPanelExampleRow1 ?? defExampleEntries.row1;
4249
const row2Op= tpR2 ?? getAppOptions()?.targetPanelExampleRow2 ?? defExampleEntries.row2;
50+
51+
const r1= row1Op.map( (s) => stripQuotes(s));
52+
const r2= row2Op.map( (s) => stripQuotes(s));
53+
4354
return (
4455
<Stack {...{lineHeight : '1.2em', fontSize:'smaller', direction:'column', spacing:1/2, alignItems:'center'}}>
45-
{formatExample(row1Op, fieldKey, setFld)}
46-
{formatExample(row2Op, fieldKey, setFld)}
56+
{formatExample(r1, fieldKey, setFld)}
57+
{formatExample(r2, fieldKey, setFld)}
4758
</Stack>
4859
);
4960
};

src/firefly/js/ui/dynamic/DLGenAnalyzeSearch.js

+33-13
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,13 @@ import {MetaConst} from '../../data/MetaConst.js';
33
import {dispatchTableSearch} from '../../tables/TablesCntlr.js';
44
import {getMetaEntry} from '../../tables/TableUtil.js';
55
import {Logger} from '../../util/Logger.js';
6-
import {getDataLinkData} from '../../voAnalyzer/VoDataLinkServDef.js';
76
import {CONE_CHOICE_KEY, POLY_CHOICE_KEY} from '../../visualize/ui/CommonUIKeys.js';
7+
import {getDataLinkData} from '../../voAnalyzer/VoDataLinkServDef.js';
88
import {CIRCLE, POINT, POLYGON} from './DynamicDef.js';
99
import {
1010
convertCircleToPointArea, convertPointAreaToCircle, isCircleSearch, isPointAreaSearch, isPolySearch
1111
} from './DynamicUISearchPanel.jsx';
12-
import {findFieldDefType, makeFieldDefs, makeServiceDescriptorSearchRequest} from './ServiceDefTools.js';
13-
14-
12+
import {findFieldDefType, makeServiceDescriptorSearchRequest, sdToFieldDefAry} from './ServiceDefTools.js';
1513

1614

1715
/**
@@ -44,8 +42,8 @@ export function analyzeQueries(tbl_id) {
4442
}
4543

4644

47-
export function makeAllSearchRequest(request, primeSd, concurrentSDAry, primaryFdAry, extraPrimaryMeta) {
48-
const primeRequest= makeServiceDescriptorSearchRequest(request,primeSd,extraPrimaryMeta);
45+
export function makeAllSearchRequest(request, siaConstraints, primeSd, concurrentSDAry, primaryFdAry, extraPrimaryMeta) {
46+
const primeRequest= makeServiceDescriptorSearchRequest(request,siaConstraints, primeSd,extraPrimaryMeta);
4947
const concurrentRequestAry= concurrentSDAry
5048
.map( (sd) => {
5149
const newR= convertRequestToSecondary(request, primaryFdAry?.[0], sd.serviceDef, primeSd.standardID);
@@ -59,14 +57,14 @@ export function makeAllSearchRequest(request, primeSd, concurrentSDAry, primaryF
5957
/**
6058
* Do all the searches defined
6159
* @param request
60+
* @param siaConstraints
6261
* @param {QueryAnalysis} qAna
6362
* @param primaryFdAry
6463
* @param idx
6564
* @param {object} extraMeta // additional table meta to include with the TableSearch
6665
* @param {String} selectedConcurrent - space separated name of searches to execute
67-
* @param docRows URLs to documentation
6866
*/
69-
export function handleSearch(request, qAna, primaryFdAry, idx, extraMeta={}, selectedConcurrent) {
67+
export function handleSearch(request, siaConstraints, qAna, primaryFdAry, idx, extraMeta={}, selectedConcurrent) {
7068
const primeSd= qAna.primarySearchDef[idx].serviceDef;
7169
const {coverage,bandDesc}= qAna.primarySearchDef[idx];
7270
const {cisxUI}= qAna.primarySearchDef[0].serviceDef;
@@ -81,7 +79,7 @@ export function handleSearch(request, qAna, primaryFdAry, idx, extraMeta={}, sel
8179
extraMeta= {coverage,bandDesc, ...extraMeta};
8280
if (preferredHips) extraMeta[MetaConst.COVERAGE_HIPS]=preferredHips;
8381

84-
const tableRequestAry= makeAllSearchRequest(request, primeSd,concurrentSDAry, primaryFdAry, extraMeta);
82+
const tableRequestAry= makeAllSearchRequest(request, siaConstraints, primeSd,concurrentSDAry, primaryFdAry, extraMeta);
8583

8684
tableRequestAry.forEach( (dataTableReq) => {
8785
Logger('DLGeneratedDropDown').debug(dataTableReq);
@@ -92,7 +90,7 @@ export function handleSearch(request, qAna, primaryFdAry, idx, extraMeta={}, sel
9290
}
9391

9492
function convertRequestToSecondary(request, primaryFdAry, secondServDef, primStandardID) {
95-
const sFdAry= makeFieldDefs(secondServDef.serDefParams);
93+
const sFdAry= sdToFieldDefAry({serviceDef:secondServDef});
9694
if (isCircleSearch(primaryFdAry) || isPointAreaSearch(sFdAry)) {
9795
return convertCircleToPointArea(request, primaryFdAry, sFdAry, primStandardID, secondServDef.standardID);
9896
}
@@ -103,7 +101,7 @@ function convertRequestToSecondary(request, primaryFdAry, secondServDef, primSta
103101
}
104102

105103
function getServiceDefSpacialSupports(serviceDef) {
106-
const fdAry= makeFieldDefs(serviceDef.serDefParams);
104+
const fdAry= sdToFieldDefAry({serviceDef});
107105
const retAry=[];
108106
if (isCircleSearch(fdAry)) retAry.push(CIRCLE);
109107
if (isPointAreaSearch(fdAry)) retAry.push(POINT);
@@ -116,7 +114,7 @@ export function hasSpatialTypes(serviceDef) {
116114
}
117115

118116
export function isSpatialTypeSupported(serviceDef, spacialType) {
119-
const fdAry= makeFieldDefs(serviceDef.serDefParams);
117+
const fdAry= sdToFieldDefAry({serviceDef});
120118
if (spacialType===CONE_CHOICE_KEY) {
121119
return isCircleSearch(fdAry) || isPointAreaSearch(fdAry) || Boolean(findFieldDefType(fdAry,POINT));
122120
}
@@ -135,6 +133,28 @@ export function isSpatialTypeSupported(serviceDef, spacialType) {
135133
*/
136134

137135

136+
/**
137+
* @param {QueryAnalysis|ServiceDescriptorDef} qAnaOrSd - accept a QueryAnalysis or a ServiceDescriptorDef
138+
* @return {CISXui|Array} ui parameters or an empty array
139+
*/
140+
export function getCisxUI(qAnaOrSd) {
141+
if (!qAnaOrSd) return [];
142+
if (qAnaOrSd.primarySearchDef) { // is QueryAnalysis
143+
return qAnaOrSd.primarySearchDef[0]?.serviceDef?.cisxUI ?? [];
144+
} else if (qAnaOrSd.accessURL) { // is ServiceDescriptorDef
145+
return qAnaOrSd.cisxUI ?? [];
146+
}
147+
return [];
148+
}
149+
150+
export function getCisxUIValue(qAnaOrSd, name) {
151+
return getCisxUI(qAnaOrSd).find((e) => e.name === name)?.value;
152+
}
153+
154+
export function getCisxUIUCD(qAnaOrSd, name) {
155+
return getCisxUI(qAnaOrSd).find((e) => e.name === name)?.UCD;
156+
}
157+
138158
/**
139159
* @typedef {Object} SearchDefinition
140160
* This object is a combination of a row and its service descriptor if one exist
@@ -148,4 +168,4 @@ export function isSpatialTypeSupported(serviceDef, spacialType) {
148168
* @prop {String} semantic - from the semantic column
149169
* @prop {ServiceDescriptorDef} serviceDef - the service descriptor
150170
*
151-
*/
171+
*/

0 commit comments

Comments
 (0)