| 1 | <cfcomponent displayName="Controller" output="false" hint="I am the controller that provides generic ORM service." extends="ModelGlue.unity.controller.Controller"> |
|---|
| 2 | |
|---|
| 3 | <cfset variables._debug = false /> |
|---|
| 4 | |
|---|
| 5 | <cffunction name="Init" access="public" returnType="any" output="false" hint="I return a new Controller."> |
|---|
| 6 | <cfargument name="ModelGlue" type="ModelGlue.unity.framework.ModelGlue" required="true" hint="I am an instance of ModelGlue."> |
|---|
| 7 | <cfargument name="name" type="string" required="false" hint="A name for this controller." default="#createUUID()#"> |
|---|
| 8 | <cfargument name="debug" type="boolean" required="true" /> |
|---|
| 9 | |
|---|
| 10 | <cfset super.init(arguments.ModelGlue, arguments.name) /> |
|---|
| 11 | <cfset variables._debug = arguments.debug /> |
|---|
| 12 | |
|---|
| 13 | <cfreturn this /> |
|---|
| 14 | </cffunction> |
|---|
| 15 | |
|---|
| 16 | <cffunction name="getOrmAdapter" access="private" returntype="ModelGlue.unity.orm.AbstractORMAdapter" output="false"> |
|---|
| 17 | <cfreturn getModelGlue().getOrmAdapter() /> |
|---|
| 18 | </cffunction> |
|---|
| 19 | |
|---|
| 20 | <cffunction name="genericList" access="public" returntype="void" output="false"> |
|---|
| 21 | <cfargument name="event" type="ModelGlue.unity.eventrequest.EventContext" /> |
|---|
| 22 | |
|---|
| 23 | <cfset var table = arguments.event.getArgument("object") /> |
|---|
| 24 | <cfset var queryName = arguments.event.getArgument("queryName", table & "Query") /> |
|---|
| 25 | <cfset var criteriaList = arguments.event.getArgument("criteria") /> |
|---|
| 26 | <cfset var criteria = structNew() /> |
|---|
| 27 | <cfset var field = "" /> |
|---|
| 28 | <cfset var result = "" /> |
|---|
| 29 | |
|---|
| 30 | <cfloop list="#criteriaList#" index="field"> |
|---|
| 31 | <cfif listLen(field, "=") gt 1> |
|---|
| 32 | <cfset criteria[listFirst(field, "=")] = listLast(field, "=") /> |
|---|
| 33 | <cfelseif listLen(field, ":") gt 1> |
|---|
| 34 | <cfif not arguments.event.valueExists(listFirst(field, ":"))> |
|---|
| 35 | <cfset arguments.event.setValue(listFirst(field, ":"), listLast(field, ":")) /> |
|---|
| 36 | </cfif> |
|---|
| 37 | <cfset criteria[listFirst(field, ":")] = arguments.event.getValue(listFirst(field, ":")) /> |
|---|
| 38 | <cfelse> |
|---|
| 39 | <cfset criteria[field] = arguments.event.getValue(field) /> |
|---|
| 40 | </cfif> |
|---|
| 41 | </cfloop> |
|---|
| 42 | |
|---|
| 43 | <cfif not arguments.event.argumentExists("gatewayMethod")> |
|---|
| 44 | <cfif arguments.event.argumentExists("orderBy")> |
|---|
| 45 | <cfif not arguments.event.argumentExists("ascending")> |
|---|
| 46 | <cfset result = getOrmAdapter().list(table, criteria, arguments.event.getArgument("orderBy"), true) /> |
|---|
| 47 | <cfelse> |
|---|
| 48 | <cfset result = getOrmAdapter().list(table, criteria, arguments.event.getArgument("orderBy"), arguments.event.getArgument("ascending")) /> |
|---|
| 49 | </cfif> |
|---|
| 50 | <cfelse> |
|---|
| 51 | <cfset result = getOrmAdapter().list(table, criteria) /> |
|---|
| 52 | </cfif> |
|---|
| 53 | <cfelse> |
|---|
| 54 | <cfif not arguments.event.argumentExists("gatewayBean")> |
|---|
| 55 | <cfset result = getOrmAdapter().list(table=table,criteria=criteria,gatewaymethod=arguments.event.getArgument("gatewayMethod")) /> |
|---|
| 56 | <cfelse> |
|---|
| 57 | <cfset result = getOrmAdapter().list(table=table,criteria=criteria,gatewaymethod=arguments.event.getArgument("gatewayMethod"),gatewayBean=arguments.event.getArgument("gatewayBean")) /> |
|---|
| 58 | </cfif> |
|---|
| 59 | </cfif> |
|---|
| 60 | |
|---|
| 61 | <cfif variables._debug> |
|---|
| 62 | <cfset arguments.event.trace("ReactorORMController", result) /> |
|---|
| 63 | </cfif> |
|---|
| 64 | |
|---|
| 65 | <cfset arguments.event.setValue(queryName, result) /> |
|---|
| 66 | </cffunction> |
|---|
| 67 | |
|---|
| 68 | <cffunction name="genericRead" access="public" returntype="void" output="false"> |
|---|
| 69 | <cfargument name="event" type="ModelGlue.unity.eventrequest.EventContext" /> |
|---|
| 70 | |
|---|
| 71 | <cfset var table = arguments.event.getArgument("object") /> |
|---|
| 72 | <cfset var recordName = arguments.event.getArgument("recordName", table & "Record") /> |
|---|
| 73 | <cfset var criteriaValues = arguments.event.getArgument("criteria") /> |
|---|
| 74 | <cfset var criteria = structNew() /> |
|---|
| 75 | <cfset var result = "" /> |
|---|
| 76 | <cfset var i = "" /> |
|---|
| 77 | <cfset var isNew = true /> |
|---|
| 78 | <cfset var templateTO = structNew() /> |
|---|
| 79 | <cfset var criteriaProps = getOrmAdapter().getCriteriaProperties(table) /> |
|---|
| 80 | <cfset var criteriaExists = false /> |
|---|
| 81 | |
|---|
| 82 | <cfloop list="#criteriaProps#" index="i"> |
|---|
| 83 | <cfset templateTO[i] = "" /> |
|---|
| 84 | </cfloop> |
|---|
| 85 | |
|---|
| 86 | <cfif not arguments.event.valueExists(recordName)> |
|---|
| 87 | <cfloop list="#criteriaValues#" index="i"> |
|---|
| 88 | <cfif arguments.event.valueExists(i)> |
|---|
| 89 | <cfset criteria[i] = arguments.event.getValue(i, templateTO[i]) /> |
|---|
| 90 | <cfset criteriaExists = true /> |
|---|
| 91 | </cfif> |
|---|
| 92 | </cfloop> |
|---|
| 93 | |
|---|
| 94 | <cfif criteriaExists> |
|---|
| 95 | <cftry> |
|---|
| 96 | <cfset result = getOrmAdapter().read(table, criteria) /> |
|---|
| 97 | <cfcatch type="ModelGlue.unity.orm.AcceptableReadFailure"> |
|---|
| 98 | <cfset result = getOrmAdapter().new(table) /> |
|---|
| 99 | </cfcatch> |
|---|
| 100 | </cftry> |
|---|
| 101 | <cfelse> |
|---|
| 102 | <cfset result = getOrmAdapter().new(table) /> |
|---|
| 103 | </cfif> |
|---|
| 104 | |
|---|
| 105 | <cfset arguments.event.setValue(recordName, result) /> |
|---|
| 106 | </cfif> |
|---|
| 107 | </cffunction> |
|---|
| 108 | |
|---|
| 109 | <cffunction name="genericCommit" access="public" returntype="void" output="false"> |
|---|
| 110 | <cfargument name="event" type="ModelGlue.unity.eventrequest.EventContext" /> |
|---|
| 111 | |
|---|
| 112 | <cfset var orm = getOrmAdapter() /> |
|---|
| 113 | <cfset var values = arguments.event.getAllValues() /> |
|---|
| 114 | <cfset var table = arguments.event.getArgument("object") /> |
|---|
| 115 | <cfset var recordName = arguments.event.getArgument("recordName", table & "Record") /> |
|---|
| 116 | <cfset var validationName = arguments.event.getArgument("validationName", table & "Validation") /> |
|---|
| 117 | <cfset var criteriaList = arguments.event.getArgument("criteria") /> |
|---|
| 118 | <cfset var metadata = orm.getObjectMetadata(table) /> |
|---|
| 119 | |
|---|
| 120 | <!--- Determine Criteria ---> |
|---|
| 121 | <cfloop list="#criteriaList#" index="i"> |
|---|
| 122 | <cfif arguments.event.valueExists(i)> |
|---|
| 123 | <cfset criteria[i] = arguments.event.getValue(i) /> |
|---|
| 124 | </cfif> |
|---|
| 125 | </cfloop> |
|---|
| 126 | |
|---|
| 127 | <!--- Create Record ---> |
|---|
| 128 | <cfset record = orm.read(table,criteria) /> |
|---|
| 129 | |
|---|
| 130 | <cftransaction> |
|---|
| 131 | <!--- Assemble ---> |
|---|
| 132 | <cfset orm.assemble(arguments.event, record) /> |
|---|
| 133 | |
|---|
| 134 | <!--- Validate ---> |
|---|
| 135 | <cfset validation = orm.validate(table, record) /> |
|---|
| 136 | |
|---|
| 137 | <!--- Place into state ---> |
|---|
| 138 | <cfset arguments.event.setValue(recordName, record) /> |
|---|
| 139 | |
|---|
| 140 | <cfif not validation.hasErrors()> |
|---|
| 141 | <cfset orm.commit(table, record, false) /> |
|---|
| 142 | |
|---|
| 143 | <!--- Place keys into state, handling common "appends" situations ---> |
|---|
| 144 | <cfloop from="1" to="#arrayLen(metadata.primaryKeys)#" index="i"> |
|---|
| 145 | <cfinvoke component="#record#" method="get#metadata.primaryKeys[i]#" returnvariable="tmp" /> |
|---|
| 146 | <cfset arguments.event.setValue(metadata.primaryKeys[i], tmp) /> |
|---|
| 147 | </cfloop> |
|---|
| 148 | |
|---|
| 149 | <!--- Flag that a commit was successful: there's no good way to success vs. new on the client-side if the form is re-displayed ---> |
|---|
| 150 | <cfset arguments.event.setValue(table & "Committed", true) /> |
|---|
| 151 | |
|---|
| 152 | <cftransaction action="commit" /> |
|---|
| 153 | <cfset arguments.event.addResult("commit") /> |
|---|
| 154 | <cfelse> |
|---|
| 155 | <cfset arguments.event.setValue(validationName, validation.getErrors()) /> |
|---|
| 156 | <cfset arguments.event.setValue(table & "Committed", false) /> |
|---|
| 157 | |
|---|
| 158 | <cftransaction action="rollback" /> |
|---|
| 159 | <cfset arguments.event.addResult("validationError") /> |
|---|
| 160 | </cfif> |
|---|
| 161 | </cftransaction> |
|---|
| 162 | |
|---|
| 163 | </cffunction> |
|---|
| 164 | |
|---|
| 165 | <cffunction name="genericDelete" access="public" returntype="void" output="false"> |
|---|
| 166 | <cfargument name="event" type="ModelGlue.unity.eventrequest.EventContext" /> |
|---|
| 167 | |
|---|
| 168 | <cfset var table = arguments.event.getArgument("object") /> |
|---|
| 169 | <cfset var criteriaValues = arguments.event.getArgument("criteria") /> |
|---|
| 170 | <cfset var criteria = structNew() /> |
|---|
| 171 | <cfset var i = "" /> |
|---|
| 172 | |
|---|
| 173 | <cfloop list="#criteriaValues#" index="i"> |
|---|
| 174 | <cfset criteria[i] = arguments.event.getValue(i) /> |
|---|
| 175 | </cfloop> |
|---|
| 176 | |
|---|
| 177 | <cfset getOrmAdapter().delete(table, criteria) /> |
|---|
| 178 | </cffunction> |
|---|
| 179 | |
|---|
| 180 | </cfcomponent> |
|---|