Re: [morph-user] Adapting legacy request parameters into new POJO?
Brought to you by:
orangeherbert,
sgarlatm
|
From: Matt B. <gud...@gm...> - 2010-04-26 13:14:36
|
Don't forget that in newer iterations of Morph,
SimpleDelegatingTransformer has a constructor that takes a second
boolean argument which, when true, will append the default
transformers after the specified custom transformers.
On 4/26/10, Matt Sgarlata <mat...@sp...> wrote:
> Hi Mick,
>
> The SimpleDelegatingTransformer is used to group several transformers
> together so that any type of transformation can be accomplished. In your
> case, it looks like you are just trying to map the properties of one object
> to another object, so you could probably use the PropertyNameMappingCopier
> directly with no SimpleDelegatingTransformer.
>
> If for some reason that does not work for you (e.g. you need to also change
> property types, not just property names), then the
> SimpleDelegatingTransformer is the way to go. However, you need to include
> all the default transformations along with the transformation you
> specified. So take a look at SimpleDelegatingTransformer's default
> components, and add those to your definition of the transformer. Put all
> the standard transformers after your custom transformer.
>
> Matt
>
> On Sun, Apr 25, 2010 at 12:56 PM, Mick Knutson
> <mkn...@ba...>wrote:
>
>> I am closer.
>>
>> I have only one error:
>>
>> Could not find a transformer that can transform objects of null to objects
>> of (class java.lang.String)
>>
>> net.sf.morph.transform.TransformationException: Could not find a
>> transformer that can transform objects of null to objects of (class
>> java.lang.String)
>> at
>> net.sf.morph.transform.transformers.SimpleDelegatingTransformer.getTransformer(SimpleDelegatingTransformer.java:523)
>> at
>> net.sf.morph.transform.transformers.SimpleDelegatingTransformer.getTransformer(SimpleDelegatingTransformer.java:435)
>> at
>> net.sf.morph.transform.transformers.SimpleDelegatingTransformer.getTransformer(SimpleDelegatingTransformer.java:472)
>> at
>> net.sf.morph.transform.transformers.SimpleDelegatingTransformer.convertImpl(SimpleDelegatingTransformer.java:293)
>> at
>> net.sf.morph.transform.transformers.BaseTransformer.convert(BaseTransformer.java:368)
>> at net.sf.morph.util.TransformerUtils.transform(TransformerUtils.java:168)
>> at
>> net.sf.morph.transform.copiers.BasePropertyNameCopier.copyProperty(BasePropertyNameCopier.java:160)
>> at
>> net.sf.morph.transform.copiers.PropertyNameMappingCopier.copyImpl(PropertyNameMappingCopier.java:138)
>> at
>> net.sf.morph.transform.transformers.BaseTransformer.copy(BaseTransformer.java:504)
>> at
>> net.sf.morph.transform.transformers.SimpleDelegatingTransformer.copyImpl(SimpleDelegatingTransformer.java:276)
>> at
>> net.sf.morph.transform.transformers.BaseTransformer.copy(BaseTransformer.java:504)
>> at
>> net.sf.morph.transform.transformers.BaseTransformer.copy(BaseTransformer.java:470)
>> at
>> com.comcast.uivr.divr.routing.CallTransferController.convertCallSession(CallTransferController.groovy:617)
>> at
>> com.comcast.uivr.divr.routing.CallTransferController$convertCallSession.call(Unknown
>> Source)
>> at
>> com.comcast.uivr.divr.routing.CallTransferControllerTests.testSmokeTestCallSessionValueAssignment(CallTransferControllerTests.groovy:22)
>> at junit.framework.Test$run.call(Unknown Source)
>> at junit.framework.Test$run.call(Unknown Source)
>>
>>
>> *Here is what is working thus:*
>>
>> /**
>> * These are the Morph Beans for the JSP Adapters
>> */
>> caeCopier(net.sf.morph.transform.copiers.PropertyNameMappingCopier,
>> false){
>> mapping = [
>> "sDummySessionID": "sessionID"
>> , "ivrportnum": "ivrPortNumber"
>> , "ivrsystem": "ivrSystem"
>> , "appname": "applicationName"
>> , "dispatchcode": "dispatchCode"
>> , "ani": "ani"
>> , "application_sANIID": "aniId"
>> , "dnis": "dnis"
>> , "division": "division"
>> , "region": "region"
>> , "callid": "callID"
>> , "globalzero": "globalZero"
>> , "bContinueFromAuto": "continueFromAuto"
>> , "CAE_Att_Soft_Disco": "isSoftDisco"
>> //, "g_bIsSoftDisco": "isSoftDisco"
>> , "CAE_Att_Delinquent": "isDelinquent"
>> //, "g_bIsDelinquent": "isDelinquent"
>> //, "CAELanguage": language
>> , "application.Language": "language"
>> , "np": "nextPage"
>> , "fform": "firstForm"
>> , "sAccountNumber": "accountNumber"
>> //, "application.AccountNumber": accountNumber
>> , "application.sPhoneID": "phoneID"
>> , "sDefaultRoutingString": "defaultRoutingString"
>> , "CAEFunction": "transferFunction"
>> , "CAETransferReason": "transferReason"
>> , "callType": "callType"
>> , "CAELOB": "lob"
>> , "CAE_Att_VIP": "vip"
>> , "CAE_Att_SameDayAppointment": "isSameDayAppointment"
>> , "ucid": "ucid"
>> ]
>>
>> nestedTransformer = ref("transformer")
>> }
>>
>>
>> transformer(net.sf.morph.transform.transformers.SimpleDelegatingTransformer){
>> components = [ref("caeCopier")]
>> }
>>
>>
>> ---
>> Thank You…
>>
>> Mick Knutson, President
>>
>> BASE Logic, Inc.
>> Enterprise Architecture, Design, Mentoring & Agile Consulting
>> p. (866) BLiNC-411: (254-6241-1)
>> f. (415) 685-4233
>>
>> Website: http://www.baselogic.com
>> Blog: http://www.baselogic.com/blog/
>> Linked IN: http://linkedin.com/in/mickknutson
>> Twitter: http://twitter.com/mickknutson
>> Vacation Rental: http://tahoe.baselogic.com
>> ---
>>
>>
>>
>> On Thu, Apr 22, 2010 at 4:56 PM, Matt Sgarlata <
>> mat...@sp...> wrote:
>>
>>> Hello again Mick,
>>>
>>> If there is a Reflector for the bean you are trying to read from, the
>>> properties will be read as expected. HttpServletRequests have a standard
>>> reflector that is included by Morph by default. Maps also have
>>> reflectors
>>> so their contents are read rather than looking at the Map's bean
>>> properties
>>> using Java reflection. I'm not clear if your request and session are
>>> Servlet requests and sessions or some other type of requests and
>>> sessions.
>>> If they are from the Servlet spec you are in good shape. If they are
>>> from
>>> some other API, you may need to write a custom reflector.
>>>
>>> You can look at SimpleDelegatingReflector.createDefaultComponents() to
>>> see
>>> what special type of reflectors are included with Morph, beyond simple
>>> Java
>>> reflection.
>>>
>>> Does that answer your question?
>>>
>>> Matt
>>>
>>> On Thu, Apr 22, 2010 at 4:51 PM, Mick Knutson
>>> <mkn...@ba...>wrote:
>>>
>>>> But that is what I am wondering about. My assumtion is the framework
>>>> will
>>>> do this
>>>>
>>>> newBean.setNewName( oldBean.getOldName() )
>>>>
>>>> not:
>>>>
>>>> newBean.setNewName( map.get("oldName") )
>>>>
>>>> is that correct, because I think I am in need of #2
>>>>
>>>> ---
>>>> Thank You…
>>>>
>>>> Mick Knutson, President
>>>>
>>>> BASE Logic, Inc.
>>>> Enterprise Architecture, Design, Mentoring & Agile Consulting
>>>> p. (866) BLiNC-411: (254-6241-1)
>>>> f. (415) 685-4233
>>>>
>>>> Website: http://www.baselogic.com
>>>> Blog: http://www.baselogic.com/blog/
>>>> Linked IN: http://linkedin.com/in/mickknutson
>>>> Twitter: http://twitter.com/mickknutson
>>>> Vacation Rental: http://tahoe.baselogic.com
>>>> ---
>>>>
>>>>
>>>>
>>>> On Thu, Apr 22, 2010 at 4:20 PM, Matt Sgarlata <
>>>> mat...@sp...> wrote:
>>>>
>>>>> Hi Mick,
>>>>>
>>>>> I can't speak to how Groovy and Spring work, but you are on the right
>>>>> track using a PropertyNameMappingCopier. I would suggest you first try
>>>>> out
>>>>> using it in a programmatic way to make sure it does what you are
>>>>> looking
>>>>> for, then see if you are able to wire it up how you would like with
>>>>> Groovy
>>>>> and Spring.
>>>>>
>>>>> Matt
>>>>>
>>>>> On Thu, Apr 22, 2010 at 2:17 PM, Mick Knutson
>>>>> <mkn...@ba...>wrote:
>>>>>
>>>>>> So looking through this again, I think I can create a copier in Groovy
>>>>>> Spring DSL:
>>>>>>
>>>>>> caeCopier(net.sf.morph.transform.copiers.PropertyNameMatchingCopier){
>>>>>> mapping = [
>>>>>> "sDummySessionID": "sessionID"
>>>>>> , "ivrportnum": "ivrPortNumber"
>>>>>> , "ivrsystem": "ivrSystem"
>>>>>> , "appname": "applicationName"
>>>>>> , "dispatchcode": "dispatchCode"
>>>>>> , "application_sANIID": "aniId"
>>>>>> , "dnis": "dnis"
>>>>>>
>>>>>> ]
>>>>>> }
>>>>>>
>>>>>>
>>>>>> But What I really need to understand, is this mapping issue:
>>>>>>
>>>>>> Servlet.Request (Object) --> CallSession (Object)
>>>>>>
>>>>>> so basically what I am looking at is:
>>>>>>
>>>>>> *callSession.setAni( request.getParameter("application_sANIID") );*
>>>>>>
>>>>>>
>>>>>> Is this mapping possible?
>>>>>>
>>>>>> ---
>>>>>> Thank You…
>>>>>>
>>>>>> Mick Knutson, President
>>>>>>
>>>>>> BASE Logic, Inc.
>>>>>> Enterprise Architecture, Design, Mentoring & Agile Consulting
>>>>>> p. (866) BLiNC-411: (254-6241-1)
>>>>>> f. (415) 685-4233
>>>>>>
>>>>>> Website: http://www.baselogic.com
>>>>>> Blog: http://www.baselogic.com/blog/
>>>>>> Linked IN: http://linkedin.com/in/mickknutson
>>>>>> Twitter: http://twitter.com/mickknutson
>>>>>> Vacation Rental: http://tahoe.baselogic.com
>>>>>> ---
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Mon, Apr 19, 2010 at 10:13 AM, Matt Sgarlata <
>>>>>> mat...@sp...> wrote:
>>>>>>
>>>>>>> Hi Mick,
>>>>>>>
>>>>>>> Sorry about that! The new name is SimpleDelegatingTransformer.
>>>>>>>
>>>>>>> Matt
>>>>>>>
>>>>>>> On Mon, Apr 19, 2010 at 10:08 AM, Mick Knutson <
>>>>>>> mkn...@ba...> wrote:
>>>>>>>
>>>>>>>> I have an interesting issue I am trying to solve in a manageable
>>>>>>>> way.
>>>>>>>>
>>>>>>>> I have a few dozen legacy JSP's that I am phasing out. But I have to
>>>>>>>> do them 1by1. Each page create a POST of ~12 named request
>>>>>>>> parameters that
>>>>>>>> are ALL named different. VERY frustrating as there is no good
>>>>>>>> convention.
>>>>>>>>
>>>>>>>> So, My thought is trying to create a Map for mapping the old names
>>>>>>>> to
>>>>>>>> the new names for each POST:
>>>>>>>> Map reqParam = {"newName", "oldName"}
>>>>>>>>
>>>>>>>> Where I have a new POJO that has set/getNewName(..)
>>>>>>>>
>>>>>>>>
>>>>>>>> Then, somehow copying from these old request properties from my
>>>>>>>> request properties Map to the new one's in my new POJO.
>>>>>>>>
>>>>>>>> Once Mapped, I have no further use for the old names.
>>>>>>>>
>>>>>>>>
>>>>>>>> *Next Post:*
>>>>>>>>
>>>>>>>> Morph seems to have what I think I want, but I have spent the past
>>>>>>>> few hours trying to get a simple example working, and the docs are
>>>>>>>> wrong. It
>>>>>>>> referes to many classes that doe not exist in the jar.
>>>>>>>>
>>>>>>>> I also can not seem to find any other good examples. Can you point
>>>>>>>> any out for me?
>>>>>>>>
>>>>>>>>
>>>>>>>> Specifically, this is missing:
>>>>>>>>
>>>>>>>> <!-- the overall transformer we'll use to do the graph copy -->
>>>>>>>> <bean
>>>>>>>> id="graphTransformer"
>>>>>>>> class="net.sf.morph.transform.DelegatingCopier">
>>>>>>>> <property name="components">
>>>>>>>> <list>
>>>>>>>> <ref bean="personCopier"/>
>>>>>>>> <ref bean="vehicleCopier"/>
>>>>>>>> <ref bean="childrenCopier"/>
>>>>>>>> <ref bean="addressConverter"/>
>>>>>>>> </list>
>>>>>>>> </property>
>>>>>>>> </bean>
>>>>>>>>
>>>>>>>> *MISSING from the code: net.sf.morph.transform.DelegatingCopier*
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> ---
>>>>>>>> Thank You…
>>>>>>>>
>>>>>>>> Mick Knutson, President
>>>>>>>>
>>>>>>>> BASE Logic, Inc.
>>>>>>>> Enterprise Architecture, Design, Mentoring & Agile Consulting
>>>>>>>> p. (866) BLiNC-411: (254-6241-1)
>>>>>>>> f. (415) 685-4233
>>>>>>>>
>>>>>>>> Website: http://www.baselogic.com
>>>>>>>> Blog: http://www.baselogic.com/blog/
>>>>>>>> Linked IN: http://linkedin.com/in/mickknutson
>>>>>>>> Twitter: http://twitter.com/mickknutson
>>>>>>>> Vacation Rental: http://tahoe.baselogic.com
>>>>>>>> ---
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>> Download Intel® Parallel Studio Eval
>>>>>>>> Try the new software tools for yourself. Speed compiling, find bugs
>>>>>>>> proactively, and fine-tune applications for parallel performance.
>>>>>>>> See why Intel Parallel Studio got high marks during beta.
>>>>>>>> http://p.sf.net/sfu/intel-sw-dev
>>>>>>>> _______________________________________________
>>>>>>>> morph-user mailing list
>>>>>>>> mor...@li...
>>>>>>>> https://lists.sourceforge.net/lists/listinfo/morph-user
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Matthew Sgarlata
>>>>>>> Executive Vice President, Software Development
>>>>>>> Vicepresidente Ejecutivo de Desarrollo de Software
>>>>>>> 202-210-7102 (phone/teléfono)
>>>>>>> 651-286-2806 (fax)
>>>>>>>
>>>>>>> This message is intended only for the named recipient. If you are not
>>>>>>> the intended recipient, you are notified that disclosing, copying,
>>>>>>> distributing, or taking any action in reliance on the contents of
>>>>>>> this
>>>>>>> information is strictly prohibited.
>>>>>>>
>>>>>>>
>>>>>>> ------------------------------------------------------------------------------
>>>>>>> Download Intel® Parallel Studio Eval
>>>>>>> Try the new software tools for yourself. Speed compiling, find bugs
>>>>>>> proactively, and fine-tune applications for parallel performance.
>>>>>>> See why Intel Parallel Studio got high marks during beta.
>>>>>>> http://p.sf.net/sfu/intel-sw-dev
>>>>>>> _______________________________________________
>>>>>>> morph-user mailing list
>>>>>>> mor...@li...
>>>>>>> https://lists.sourceforge.net/lists/listinfo/morph-user
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> ------------------------------------------------------------------------------
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> morph-user mailing list
>>>>>> mor...@li...
>>>>>> https://lists.sourceforge.net/lists/listinfo/morph-user
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Matthew Sgarlata
>>>>> Executive Vice President, Software Development
>>>>> Vicepresidente Ejecutivo de Desarrollo de Software
>>>>> 202-210-7102 (phone/teléfono)
>>>>> 651-286-2806 (fax)
>>>>>
>>>>> This message is intended only for the named recipient. If you are not
>>>>> the intended recipient, you are notified that disclosing, copying,
>>>>> distributing, or taking any action in reliance on the contents of this
>>>>> information is strictly prohibited.
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> morph-user mailing list
>>>>> mor...@li...
>>>>> https://lists.sourceforge.net/lists/listinfo/morph-user
>>>>>
>>>>>
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>>
>>>>
>>>> _______________________________________________
>>>> morph-user mailing list
>>>> mor...@li...
>>>> https://lists.sourceforge.net/lists/listinfo/morph-user
>>>>
>>>>
>>>
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>>
>>>
>>> _______________________________________________
>>> morph-user mailing list
>>> mor...@li...
>>> https://lists.sourceforge.net/lists/listinfo/morph-user
>>>
>>>
>>
>>
>> ------------------------------------------------------------------------------
>>
>> _______________________________________________
>> morph-user mailing list
>> mor...@li...
>> https://lists.sourceforge.net/lists/listinfo/morph-user
>>
>>
>
>
> --
> Matthew Sgarlata
> Executive Vice President, Software Development
> Vicepresidente Ejecutivo de Desarrollo de Software
> 202-210-7102 (phone/teléfono)
> 651-286-2806 (fax)
>
> This message is intended only for the named recipient. If you are not the
> intended recipient, you are notified that disclosing, copying, distributing,
> or taking any action in reliance on the contents of this information is
> strictly prohibited.
>
|