resourceRealm refactoring
This commit is contained in:
@@ -112,6 +112,7 @@
|
|||||||
<m:field>sop.data_type</m:field>
|
<m:field>sop.data_type</m:field>
|
||||||
<m:field formatter=#function(x){return listToArray(x);}#>sop.value_list</m:field>
|
<m:field formatter=#function(x){return listToArray(x);}#>sop.value_list</m:field>
|
||||||
<m:field>sop.ref_svc_id</m:field>
|
<m:field>sop.ref_svc_id</m:field>
|
||||||
|
<m:field>sop.func</m:field>
|
||||||
<m:field formatter=#request.castToBool#>sop.is_required</m:field>
|
<m:field formatter=#request.castToBool#>sop.is_required</m:field>
|
||||||
<m:field>sop.default_value</m:field>
|
<m:field>sop.default_value</m:field>
|
||||||
<m:field>sop.regex</m:field>
|
<m:field>sop.regex</m:field>
|
||||||
@@ -134,7 +135,19 @@
|
|||||||
order by sop.sort, sop.svc_operation_cfs_param_id
|
order by sop.sort, sop.svc_operation_cfs_param_id
|
||||||
</cfquery>
|
</cfquery>
|
||||||
|
|
||||||
<cfquery name="local.qAvailableResourceRealm" result="local.result">
|
<cfloop query="local.qCfsParam">
|
||||||
|
<cfif len(func)><!--- приоритет отдается функции перед списком значений--->
|
||||||
|
<cfset var args = {
|
||||||
|
"functionName":"#func#",
|
||||||
|
"svcId":#local.qInstanceOperation.service_id#,
|
||||||
|
"contractId":#arguments.contractId#
|
||||||
|
}/> <!--- если появятся новые аргументы у новых функций, будем добавлять их сюда --->
|
||||||
|
<cfset local.qCfsParam.value_list=generateValueList(argumentCollection=#args#)/> <!--- можно перечислить именованные аргументы обычным порядком, но с коллекцией потенциально более гибко --->
|
||||||
|
<!--- <cfdump var=#local.qCfsParam#/><cfabort/> --->
|
||||||
|
</cfif>
|
||||||
|
</cfloop>
|
||||||
|
|
||||||
|
<!--- <cfquery name="local.qAvailableResourceRealm" result="local.result">
|
||||||
select
|
select
|
||||||
<m:field_set titleMapOut="local.realmTitleMap" lengthOut="local.realmFieldCount">
|
<m:field_set titleMapOut="local.realmTitleMap" lengthOut="local.realmFieldCount">
|
||||||
<m:field>r.resource_realm_id</m:field>
|
<m:field>r.resource_realm_id</m:field>
|
||||||
@@ -152,7 +165,7 @@
|
|||||||
join svc s on r.resource_realm_type_id=s.resource_realm_type_id
|
join svc s on r.resource_realm_type_id=s.resource_realm_type_id
|
||||||
where s.svc_id=<cfqueryparam cfsqltype="CF_SQL_INTEGER" value=#local.qInstanceOperation.service_id#/>
|
where s.svc_id=<cfqueryparam cfsqltype="CF_SQL_INTEGER" value=#local.qInstanceOperation.service_id#/>
|
||||||
order by 1
|
order by 1
|
||||||
</cfquery>
|
</cfquery> --->
|
||||||
|
|
||||||
<cfset "out.queryDurationMs"=getTickCount() - request.startTickCount/>
|
<cfset "out.queryDurationMs"=getTickCount() - request.startTickCount/>
|
||||||
|
|
||||||
@@ -172,13 +185,53 @@
|
|||||||
|
|
||||||
<cfset "out.instanceOperation.state"=(local.qState.recordCount GT 0) ? this.helper.appendRecord(structNew("linked"), "", local.stateTitleMap, local.qState, this.helper.snake2camel) : {}/>
|
<cfset "out.instanceOperation.state"=(local.qState.recordCount GT 0) ? this.helper.appendRecord(structNew("linked"), "", local.stateTitleMap, local.qState, this.helper.snake2camel) : {}/>
|
||||||
|
|
||||||
<cfset "out.instanceOperation.availableResourceRealms"=[]/>
|
<!--- <cfset "out.instanceOperation.availableResourceRealms"=[]/>
|
||||||
<cfloop query=#local.qAvailableResourceRealm#>
|
<cfloop query=#local.qAvailableResourceRealm#>
|
||||||
<cfset arrayAppend(out.instanceOperation.availableResourceRealms, this.helper.appendRecord(structNew("linked"), "", local.realmTitleMap, local.qAvailableResourceRealm, this.helper.snake2camel))/>
|
<cfset arrayAppend(out.instanceOperation.availableResourceRealms, this.helper.appendRecord(structNew("linked"), "", local.realmTitleMap, local.qAvailableResourceRealm, this.helper.snake2camel))/>
|
||||||
</cfloop>
|
</cfloop> --->
|
||||||
|
|
||||||
<cfset "out.runDurationMs"=getTickCount() - request.startTickCount/>
|
<cfset "out.runDurationMs"=getTickCount() - request.startTickCount/>
|
||||||
<cfreturn representationOf(out) />
|
<cfreturn representationOf(out) />
|
||||||
</cffunction>
|
</cffunction>
|
||||||
|
|
||||||
|
<!--- *** дублируются --->
|
||||||
|
<cffunction name="getAvailableResourceRealms" returnType="string">
|
||||||
|
<cfargument name="svcId"/>
|
||||||
|
<cfargument name="contractId"/>
|
||||||
|
|
||||||
|
<cfset var local={}/>
|
||||||
|
|
||||||
|
<cfquery name="local.qAvailableResourceRealm"><!--- *** distinct халява, но придумывать корректную формулировку времени мало --->
|
||||||
|
select distinct r.resource_realm
|
||||||
|
from resource_realm r
|
||||||
|
join resource_realm_access a on
|
||||||
|
(r.resource_realm_id=a.resource_realm_id
|
||||||
|
AND (a.contract_id=<cfqueryparam cfsqltype="CF_SQL_INTEGER" value=#arguments.contractId# null=#!isValid("integer", arguments.contractId)#/>
|
||||||
|
OR a.contract_id=0) /*0 means access to any contract*/
|
||||||
|
AND a.is_enabled)
|
||||||
|
join svc s on r.resource_realm_type_id=s.resource_realm_type_id
|
||||||
|
where s.svc_id=<cfqueryparam cfsqltype="CF_SQL_INTEGER" value=#arguments.svcId# null=#!isValid("integer", arguments.svcId)#/>
|
||||||
|
order by 1
|
||||||
|
</cfquery> <!--- <cfdump var=#arguments#/> cfdump здесь провоцирует NPE --->
|
||||||
|
<cfreturn valueList(local.qAvailableResourceRealm.resource_realm)/>
|
||||||
|
</cffunction>
|
||||||
|
|
||||||
|
|
||||||
|
<cffunction name="generateValueList" returntype="string">
|
||||||
|
<cfargument name="functionName" type="string" required="true"/>
|
||||||
|
<!--- остальные атрибуты необязательные, в argumentCollection (еще вопрос, насколько безопасно объявлять один из аргументов без остальных) --->
|
||||||
|
|
||||||
|
<cfswitch expression=#arguments.functionName#>
|
||||||
|
<cfcase value="getAvailableResourceRealms">
|
||||||
|
<cfreturn getAvailableResourceRealms(arguments.svcId, arguments.contractId)/>
|
||||||
|
</cfcase>
|
||||||
|
<cfcase value="getSampleList"><!--- for debug --->
|
||||||
|
<cfreturn "dummy1,dummy2"/>
|
||||||
|
</cfcase>
|
||||||
|
<cfdefaultcase>
|
||||||
|
<cfreturn "function not found"/>
|
||||||
|
</cfdefaultcase>
|
||||||
|
</cfswitch>
|
||||||
|
</cffunction>
|
||||||
|
|
||||||
</cfcomponent>
|
</cfcomponent>
|
||||||
@@ -8,7 +8,9 @@
|
|||||||
|
|
||||||
<cffunction name="get" hint="Шаблон операции экземпляра"><!--- *** TODO проверка принадлежности тенанту --->
|
<cffunction name="get" hint="Шаблон операции экземпляра"><!--- *** TODO проверка принадлежности тенанту --->
|
||||||
<cfargument name="svcOperationId" type="string" required=true hint="type:integer"/>
|
<cfargument name="svcOperationId" type="string" required=true hint="type:integer"/>
|
||||||
<!--- <cfargument name="usrId" type="string" hint="type:integer; no need to provide this argument in request, it is injected by IAM"/> ---><!--- arguments.usrId неявно инжектируется из Application.cfm --->
|
<!--- <cfargument name="usrId" type="string" hint="type:integer; no need to provide this argument in request, it is injected by IAM"/> ---><!--- arguments.usrId неявно инжектируется из Application.cfm, также contractId, contragentId ... --->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<cftry>
|
<cftry>
|
||||||
<cfset this.helper.validateField(arguments, "svcOperationId", "integer")/>
|
<cfset this.helper.validateField(arguments, "svcOperationId", "integer")/>
|
||||||
@@ -40,6 +42,7 @@
|
|||||||
<m:field>p.label</m:field>
|
<m:field>p.label</m:field>
|
||||||
<m:field>p.data_type</m:field>
|
<m:field>p.data_type</m:field>
|
||||||
<m:field formatter=#function(x){return listToArray(x);}#>p.value_list</m:field>
|
<m:field formatter=#function(x){return listToArray(x);}#>p.value_list</m:field>
|
||||||
|
<m:field <!--- formatter=#function(x){return listToArray(generateValueList(x));}# --->>p.func</m:field><!--- *** отчаявшись сделать красиво --->
|
||||||
<m:field>p.ref_svc_id</m:field>
|
<m:field>p.ref_svc_id</m:field>
|
||||||
<m:field formatter=#request.castToBool#>p.is_required</m:field>
|
<m:field formatter=#request.castToBool#>p.is_required</m:field>
|
||||||
<m:field>p.default_value</m:field><!--- can be overridden bu default_compute --->
|
<m:field>p.default_value</m:field><!--- can be overridden bu default_compute --->
|
||||||
@@ -73,8 +76,24 @@
|
|||||||
<cfreturn representationOf(this.helper.formatMessage("Not Found")).withStatus(404)/>
|
<cfreturn representationOf(this.helper.formatMessage("Not Found")).withStatus(404)/>
|
||||||
</cfif>
|
</cfif>
|
||||||
|
|
||||||
<cfquery name="local.qAvailableResourceRealm" result="local.result">
|
|
||||||
select
|
<cfloop query="local.qCfsParam">
|
||||||
|
<cfif len(func)><!--- приоритет отдается функции перед списком значений--->
|
||||||
|
<cfset var args = {
|
||||||
|
"functionName":"#func#",
|
||||||
|
"svcId":#local.qSvcOperation.svc_id#,
|
||||||
|
"contractId":#arguments.contractId#
|
||||||
|
}/> <!--- если появятся новые аргументы у новых функций, будем добавлять их сюда --->
|
||||||
|
<cfset local.qCfsParam.value_list=generateValueList(argumentCollection=#args#)/> <!--- можно перечислить именованные аргументы обычным порядком, но с коллекцией потенциально более гибко --->
|
||||||
|
<!--- <cfdump var=#local.qCfsParam#/><cfabort/> --->
|
||||||
|
</cfif>
|
||||||
|
</cfloop>
|
||||||
|
|
||||||
|
<cfset queryDeleteColumn(local.qCfsParam, "func")/>
|
||||||
|
|
||||||
|
|
||||||
|
<!--- <cfquery name="local.qAvailableResourceRealm" result="local.result">
|
||||||
|
select distinct /***халява*/
|
||||||
<m:field_set titleMapOut="local.realmTitleMap" lengthOut="local.realmFieldCount">
|
<m:field_set titleMapOut="local.realmTitleMap" lengthOut="local.realmFieldCount">
|
||||||
<m:field>r.resource_realm_id</m:field>
|
<m:field>r.resource_realm_id</m:field>
|
||||||
<m:field>r.resource_realm_type_id</m:field>
|
<m:field>r.resource_realm_type_id</m:field>
|
||||||
@@ -91,7 +110,7 @@
|
|||||||
join svc s on r.resource_realm_type_id=s.resource_realm_type_id
|
join svc s on r.resource_realm_type_id=s.resource_realm_type_id
|
||||||
where s.svc_id=<cfqueryparam cfsqltype="CF_SQL_INTEGER" value=#local.qSvcOperation.svc_id#/>
|
where s.svc_id=<cfqueryparam cfsqltype="CF_SQL_INTEGER" value=#local.qSvcOperation.svc_id#/>
|
||||||
order by 1
|
order by 1
|
||||||
</cfquery>
|
</cfquery> --->
|
||||||
|
|
||||||
<cfset var out=structNew("linked")/>
|
<cfset var out=structNew("linked")/>
|
||||||
<cfset "out.queryDurationMs"=getTickCount() - request.startTickCount/>
|
<cfset "out.queryDurationMs"=getTickCount() - request.startTickCount/>
|
||||||
@@ -107,13 +126,17 @@
|
|||||||
<cfset arrayAppend(out.svcOperation.cfsParams, rec)/>
|
<cfset arrayAppend(out.svcOperation.cfsParams, rec)/>
|
||||||
</cfloop>
|
</cfloop>
|
||||||
|
|
||||||
<cfset "out.svcOperation.availableResourceRealms"=[]/>
|
<!--- <cfset "out.svcOperation.availableResourceRealms"=[]/>
|
||||||
<cfloop query=#local.qAvailableResourceRealm#>
|
<cfloop query=#local.qAvailableResourceRealm#>
|
||||||
<cfset arrayAppend(out.svcOperation.availableResourceRealms, this.helper.appendRecord(structNew("linked"), "", local.realmTitleMap, local.qAvailableResourceRealm, this.helper.snake2camel))/>
|
<cfset arrayAppend(out.svcOperation.availableResourceRealms, this.helper.appendRecord(structNew("linked"), "", local.realmTitleMap, local.qAvailableResourceRealm, this.helper.snake2camel))/>
|
||||||
</cfloop>
|
</cfloop> --->
|
||||||
|
|
||||||
<cfset "out.runDurationMs"=getTickCount() - request.startTickCount/>
|
<cfset "out.runDurationMs"=getTickCount() - request.startTickCount/>
|
||||||
<cfreturn representationOf(out) />
|
<cfreturn representationOf(out) />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</cffunction>
|
</cffunction>
|
||||||
|
|
||||||
<!--- *** выглядит ужасно, но красивый вариант не придумывается ряд месяцев --->
|
<!--- *** выглядит ужасно, но красивый вариант не придумывается ряд месяцев --->
|
||||||
@@ -140,5 +163,67 @@
|
|||||||
</cfswitch>
|
</cfswitch>
|
||||||
|
|
||||||
</cffunction>
|
</cffunction>
|
||||||
|
|
||||||
|
|
||||||
|
<!--- <cffunction name="getAvailableResourceRealms" returnType="string">
|
||||||
|
<cfargument name="svcId" type="numeric">
|
||||||
|
<cfargument name="contractId" type="numeric">
|
||||||
|
|
||||||
|
<cfset var local={}/>
|
||||||
|
|
||||||
|
<cfquery name="local.qAvailableResourceRealm"><!--- *** distinct халява, но придумывать корректную формулировку времени мало --->
|
||||||
|
select distinct r.resource_realm
|
||||||
|
from resource_realm r
|
||||||
|
join resource_realm_access a on
|
||||||
|
(r.resource_realm_id=a.resource_realm_id
|
||||||
|
AND (a.contract_id=<cfqueryparam cfsqltype="CF_SQL_INTEGER" value=#arguments.contractId# />
|
||||||
|
OR a.contract_id=0) /*0 means access to any contract*/
|
||||||
|
AND a.is_enabled)
|
||||||
|
join svc s on r.resource_realm_type_id=s.resource_realm_type_id
|
||||||
|
where s.svc_id=<cfqueryparam cfsqltype="CF_SQL_INTEGER" value=#arguments.svcId#/>
|
||||||
|
order by 1
|
||||||
|
</cfquery>
|
||||||
|
<cfreturn valueList(local.qAvailableResourceRealm.resource_realm)/><!--- пишут, что есть valueToArray --->
|
||||||
|
</cffunction> --->
|
||||||
|
|
||||||
|
<cffunction name="getAvailableResourceRealms" returnType="string">
|
||||||
|
<cfargument name="svcId"/>
|
||||||
|
<cfargument name="contractId"/>
|
||||||
|
|
||||||
|
<cfset var local={}/>
|
||||||
|
|
||||||
|
<cfquery name="local.qAvailableResourceRealm"><!--- *** distinct халява, но придумывать корректную формулировку времени мало --->
|
||||||
|
select distinct r.resource_realm
|
||||||
|
from resource_realm r
|
||||||
|
join resource_realm_access a on
|
||||||
|
(r.resource_realm_id=a.resource_realm_id
|
||||||
|
AND (a.contract_id=<cfqueryparam cfsqltype="CF_SQL_INTEGER" value=#arguments.contractId# null=#!isValid("integer", arguments.contractId)#/>
|
||||||
|
OR a.contract_id=0) /*0 means access to any contract*/
|
||||||
|
AND a.is_enabled)
|
||||||
|
join svc s on r.resource_realm_type_id=s.resource_realm_type_id
|
||||||
|
where s.svc_id=<cfqueryparam cfsqltype="CF_SQL_INTEGER" value=#arguments.svcId# null=#!isValid("integer", arguments.svcId)#/>
|
||||||
|
order by 1
|
||||||
|
</cfquery> <!--- <cfdump var=#arguments#/> cfdump здесь провоцирует NPE --->
|
||||||
|
<cfreturn valueList(local.qAvailableResourceRealm.resource_realm)/>
|
||||||
|
</cffunction>
|
||||||
|
|
||||||
|
|
||||||
|
<cffunction name="generateValueList" returntype="string">
|
||||||
|
<cfargument name="functionName" type="string" required="true"/>
|
||||||
|
<!--- остальные атрибуты необязательные, в argumentCollection (еще вопрос, насколько безопасно объявлять один из аргументов без остальных) --->
|
||||||
|
|
||||||
|
<cfswitch expression=#arguments.functionName#>
|
||||||
|
<cfcase value="getAvailableResourceRealms">
|
||||||
|
<cfreturn getAvailableResourceRealms(arguments.svcId, arguments.contractId)/>
|
||||||
|
</cfcase>
|
||||||
|
<cfcase value="getSampleList"><!--- for debug --->
|
||||||
|
<cfreturn "dummy1,dummy2"/>
|
||||||
|
</cfcase>
|
||||||
|
<cfdefaultcase>
|
||||||
|
<cfreturn "function not found"/>
|
||||||
|
</cfdefaultcase>
|
||||||
|
</cfswitch>
|
||||||
|
</cffunction>
|
||||||
|
|
||||||
|
|
||||||
</cfcomponent>
|
</cfcomponent>
|
||||||
Reference in New Issue
Block a user