featureSetUtils.js 12 KB

12345
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.25/esri/copyright.txt for details.
  4. */
  5. import{id as e}from"../kernel.js";import t from"../request.js";import a from"./featureSetCollection.js";import r from"./featureset/actions/AttributeFilter.js";import n from"./featureset/actions/GroupBy.js";import s from"./featureset/actions/OrderBy.js";import i from"./featureset/actions/SpatialFilter.js";import l from"./featureset/actions/Top.js";import o from"./featureset/sources/FeatureLayerDynamic.js";import u from"./featureset/sources/FeatureLayerMemory.js";import c from"./featureset/sources/FeatureLayerRelated.js";import d from"./featureset/support/cache.js";import{FeatureSetError as f,FeatureSetErrorCodes as m}from"./featureset/support/errorsupport.js";import p from"./featureset/support/FeatureSet.js";import{extractServiceUrl as y}from"./featureset/support/shared.js";import{WhereClause as h}from"../core/sql/WhereClause.js";import _ from"../layers/FeatureLayer.js";import L from"../portal/Portal.js";import w from"../portal/PortalItem.js";function I(){null===d.applicationCache&&(d.applicationCache=new d)}async function S(e,t){if(d.applicationCache){const r=d.applicationCache.getLayerInfo(e);if(r){const a=await r;return new _({url:e,outFields:t,sourceJSON:a})}const n=new _({url:e,outFields:t}),s=(async()=>(await n.load(),n.sourceJSON))();if(d.applicationCache){d.applicationCache.setLayerInfo(e,s);try{return await s,n}catch(a){throw d.applicationCache.clearLayerInfo(e),a}}return await s,n}return new _({url:e,outFields:t})}async function N(e,t,a,r,n,s=null){return F(await S(e,["*"]),t,a,r,n,s)}function F(e,t=null,a=null,r=!0,n=null,s=null){const i={layer:e,spatialReference:t,outFields:a,includeGeometry:r,lrucache:n,interceptor:s};return!0===e._hasMemorySource()?new u(i):new o(i)}async function T(e){if(null!==d.applicationCache){const t=d.applicationCache.getLayerInfo(e);if(null!==t)return t}const a=(async()=>{const a=await t(e,{responseType:"json",query:{f:"json"}});return a.data?a.data:null})();if(null!==d.applicationCache){d.applicationCache.setLayerInfo(e,a);try{return await a}catch(r){throw d.applicationCache.clearLayerInfo(e),r}}return a}async function g(e,a){const r="QUERYDATAELEMTS:"+a.toString()+":"+e;if(null!==d.applicationCache){const e=d.applicationCache.getLayerInfo(r);if(null!==e)return e}const n=(async()=>{const r=await t(e+"/queryDataElements",{method:"post",responseType:"json",query:{layers:JSON.stringify([a.toString()]),f:"json"}});if(r.data){const e=r.data;if(e.layerDataElements&&e.layerDataElements[0])return e.layerDataElements[0]}throw new f(m.DataElementsNotFound)})();if(null!==d.applicationCache){d.applicationCache.setLayerInfo(r,n);try{return await n}catch(s){throw d.applicationCache.clearLayerInfo(r),s}}return n}async function A(e){if(null!==d.applicationCache){const t=d.applicationCache.getLayerInfo(e);if(null!==t)return t}const a=(async()=>{const a=await t(e,{responseType:"json",query:{f:"json"}});if(a.data){const e=a.data;return e.layers||(e.layers=[]),e.tables||(e.tables=[]),e}return{layers:[],tables:[]}})();if(null!==d.applicationCache){d.applicationCache.setLayerInfo(e,a);try{return await a}catch(r){throw d.applicationCache.clearLayerInfo(e),r}}return a}async function C(e,t){const a={metadata:null,networkId:-1,unVersion:3,terminals:[],queryelem:null,layerNameLkp:{},lkp:null},r=await A(e);if(a.metadata=r,r.controllerDatasetLayers&&void 0!==r.controllerDatasetLayers.utilityNetworkLayerId&&null!==r.controllerDatasetLayers.utilityNetworkLayerId){if(r.layers)for(const e of r.layers)a.layerNameLkp[e.id]=e.name;if(r.tables)for(const e of r.tables)a.layerNameLkp[e.id]=e.name;const n=r.controllerDatasetLayers.utilityNetworkLayerId;a.networkId=n;const s=await g(e,n);if(s){a.queryelem=s,a.queryelem&&a.queryelem.dataElement&&void 0!==a.queryelem.dataElement.schemaGeneration&&(a.unVersion=a.queryelem.dataElement.schemaGeneration),a.lkp={},a.queryelem.dataElement.domainNetworks||(a.queryelem.dataElement.domainNetworks=[]);for(const e of a.queryelem.dataElement.domainNetworks){for(const t of e.edgeSources?e.edgeSources:[]){const e={layerId:t.layerId,sourceId:t.sourceId,className:a.layerNameLkp[t.layerId]?a.layerNameLkp[t.layerId]:null};e.className&&(a.lkp[e.className]=e)}for(const t of e.junctionSources?e.junctionSources:[]){const e={layerId:t.layerId,sourceId:t.sourceId,className:a.layerNameLkp[t.layerId]?a.layerNameLkp[t.layerId]:null};e.className&&(a.lkp[e.className]=e)}}if(a.queryelem.dataElement.terminalConfigurations)for(const e of a.queryelem.dataElement.terminalConfigurations)for(const t of e.terminals)a.terminals.push({terminalId:t.terminalId,terminalName:t.terminalName});const r=await T(e+"/"+n);if(r.systemLayers&&void 0!==r.systemLayers.associationsTableId&&null!==r.systemLayers.associationsTableId){const n=[];a.unVersion>=4&&(n.push("STATUS"),n.push("PERCENTALONG"));let s=await N(e+"/"+r.systemLayers.associationsTableId.toString(),t,["OBJECTID","FROMNETWORKSOURCEID","TONETWORKSOURCEID","FROMGLOBALID","TOGLOBALID","TOTERMINALID","FROMTERMINALID","ASSOCIATIONTYPE","ISCONTENTVISIBLE","GLOBALID",...n],!1,null,null);return await s.load(),a.unVersion>=4&&(s=s.filter(h.create("STATUS NOT IN (1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 49, 50, 51, 52, 53, 54, 55, 57, 58, 59, 60, 61, 62,63)",s.getFieldsIndex())),await s.load()),{lkp:a.lkp,associations:s,unVersion:a.unVersion,terminals:a.terminals}}return{associations:null,unVersion:a.unVersion,lkp:null,terminals:[]}}return{associations:null,unVersion:a.unVersion,lkp:null,terminals:[]}}return{associations:null,unVersion:a.unVersion,lkp:null,terminals:[]}}async function k(e,t,a,r=null,n=null,s=!0,i=null,l=null){let o=e.serviceUrl();if(!o)return null;o="/"===o.charAt(o.length-1)?o+t.relatedTableId.toString():o+"/"+t.relatedTableId.toString();const u=await N(o,r,n,s,i,l);return new c({layer:e,relatedLayer:u,relationship:t,objectId:a,spatialReference:r,outFields:n,includeGeometry:s,lrucache:i,interceptor:l})}r.registerAction(),n.registerAction(),s.registerAction(),i.registerAction(),l.registerAction();class j extends a{constructor(e,t=null,a=null,r=null){super(),this._map=e,this._overridespref=t,this._lrucache=a,this._interceptor=r,this._instantLayers=[]}_makeAndAddFeatureSet(e,t=!0,a=null){const r=F(e,this._overridespref,null===a?["*"]:a,t,this._lrucache,this._interceptor);return this._instantLayers.push({featureset:r,opitem:e,includeGeometry:t,outFields:JSON.stringify(a)}),r}async featureSetByName(e,t=!0,a=null){if(void 0!==this._map.loaded&&void 0!==this._map.load&&!1===this._map.loaded)return await this._map.load(),this.featureSetByName(e,t,a);null===a&&(a=["*"]),a=(a=a.slice(0)).sort();const r=JSON.stringify(a);for(let s=0;s<this._instantLayers.length;s++){const a=this._instantLayers[s];if(a.opitem.title===e&&a.includeGeometry===t&&a.outFields===r)return this._instantLayers[s].featureset}const n=this._map.allLayers.find((t=>t instanceof _&&t.title===e));if(n)return this._makeAndAddFeatureSet(n,t,a);if(this._map.tables){const r=this._map.tables.find((t=>!!(t.title&&t.title===e||t.title&&t.title===e)));if(r){if(r instanceof _)return this._makeAndAddFeatureSet(r,t,a);if(r._materializedTable);else{const e=r.outFields?r:{...r,outFields:["*"]};r._materializedTable=new _(e)}return await r._materializedTable.load(),this._makeAndAddFeatureSet(r._materializedTable,t,a)}}return null}async featureSetById(e,t=!0,a=["*"]){if(void 0!==this._map.loaded&&void 0!==this._map.load&&!1===this._map.loaded)return await this._map.load(),this.featureSetById(e,t,a);null===a&&(a=["*"]),a=(a=a.slice(0)).sort();const r=JSON.stringify(a);for(let s=0;s<this._instantLayers.length;s++){const a=this._instantLayers[s];if(a.opitem.id===e&&a.includeGeometry===t&&a.outFields===r)return this._instantLayers[s].featureset}const n=this._map.allLayers.find((t=>t instanceof _&&t.id===e));if(n)return this._makeAndAddFeatureSet(n,t,a);if(this._map.tables){const r=this._map.tables.find((t=>t.id===e));if(r){if(r instanceof _)return this._makeAndAddFeatureSet(r,t,a);if(r._materializedTable);else{const e={...r,outFields:["*"]};r._materializedTable=new _(e)}return await r._materializedTable.load(),this._makeAndAddFeatureSet(r._materializedTable,t,a)}}return null}}class O extends a{constructor(e,t=null,a=null,r=null){super(),this._url=e,this._overridespref=t,this._lrucache=a,this._interceptor=r,this.metadata=null,this._instantLayers=[]}get url(){return this._url}_makeAndAddFeatureSet(e,t=!0,a=null){const r=F(e,this._overridespref,null===a?["*"]:a,t,this._lrucache);return this._instantLayers.push({featureset:r,opitem:e,includeGeometry:t,outFields:JSON.stringify(a)}),r}async _loadMetaData(){const e=await A(this._url);return this.metadata=e,e}load(){return this._loadMetaData()}clone(){return new O(this._url,this._overridespref,this._lrucache,this._interceptor)}async featureSetByName(e,t=!0,a=null){null===a&&(a=["*"]),a=(a=a.slice(0)).sort();const r=JSON.stringify(a);for(let i=0;i<this._instantLayers.length;i++){const a=this._instantLayers[i];if(a.opitem.title===e&&a.includeGeometry===t&&a.outFields===r)return this._instantLayers[i].featureset}const n=await this._loadMetaData();let s=null;for(const i of n.layers?n.layers:[])i.name===e&&(s=i);if(!s)for(const i of n.tables?n.tables:[])i.name===e&&(s=i);if(s){const e=await S(this._url+"/"+s.id,["*"]);return this._makeAndAddFeatureSet(e,t,a)}return null}async featureSetById(e,t=!0,a=["*"]){null===a&&(a=["*"]),a=(a=a.slice(0)).sort();const r=JSON.stringify(a);e=null!=e?e.toString():"";for(let i=0;i<this._instantLayers.length;i++){const a=this._instantLayers[i];if(a.opitem.id===e&&a.includeGeometry===t&&a.outFields===r)return this._instantLayers[i].featureset}const n=await this._loadMetaData();let s=null;for(const i of n.layers?n.layers:[])null!==i.id&&void 0!==i.id&&i.id.toString()===e&&(s=i);if(!s)for(const i of n.tables?n.tables:[])null!==i.id&&void 0!==i.id&&i.id.toString()===e&&(s=i);if(s){const e=await S(this._url+"/"+s.id,["*"]);return this._makeAndAddFeatureSet(e,t,a)}return null}}function E(e,t,a=null,r=null){return new j(e,t,a,r)}function b(e,t,a=null,r=null){return new O(e,t,a,r)}function D(e,t){if(null===e)return t;return new L({url:e.field("url")})}async function q(a,r,n){if(!e.findCredential(a.restUrl))return null;if("loaded"===a.loadStatus&&""===r&&a.user&&a.user.sourceJSON&&!1===n)return a.user.sourceJSON;if(""===r){const e=await t(a.restUrl+"/community/self",{responseType:"json",query:{f:"json",...!1===n?{}:{returnUserLicenseTypeExtensions:!0}}});if(e.data){const t=e.data;if(t&&t.username)return t}return null}const s=await t(a.restUrl+"/community/users/"+r,{responseType:"json",query:{f:"json"}});if(s.data){const e=s.data;return e.error?null:e}return null}function v(e,t,a,r,n){if(null===e)return null;if(e instanceof _){switch(t){case"datasource":return F(e,n,e.outFields,!0,a,r).getDataSourceFeatureSet();case"parent":case"root":return F(e,n,e.outFields,!0,a,r)}return null}if(e instanceof p)switch(t){case"datasource":return e.getDataSourceFeatureSet();case"parent":return e;case"root":return e.getRootFeatureSet()}return null}async function G(e,t,a,r,n,s,i,l=null){if(d.applicationCache){const o=d.applicationCache.getLayerInfo(e+":"+s.url);if(o){const e=await o;return F(new _({url:y(e.url)+"/"+t,outFields:["*"]}),a,r,n,i,l)}}const o=new w({id:e,portal:s}).load();d.applicationCache&&d.applicationCache.setLayerInfo(e+":"+s.url,o);try{const e=await o;return F(new _({url:y(e.url??"")+"/"+t,outFields:["*"]}),a,r,n,i,l)}catch(u){throw d.applicationCache&&d.applicationCache.clearLayerInfo(e+":"+s.url),u}}export{C as constructAssociationMetaDataFeatureSetFromUrl,F as constructFeatureSet,G as constructFeatureSetFromPortalItem,k as constructFeatureSetFromRelationship,N as constructFeatureSetFromUrl,v as convertToFeatureSet,E as createFeatureSetCollectionFromMap,b as createFeatureSetCollectionFromService,D as getPortal,I as initialiseMetaDataCache,q as lookupUser};