You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by Lachlan Deck <la...@gmail.com> on 2009/05/01 08:48:16 UTC

Re: restricting qualifiers turned off?

Hi there,

any input?

On 29/04/2009, at 3:16 PM, Lachlan Deck wrote:

> Resurrecting this thread...
>
> On 12/11/2008, at 1:57 AM, Andrey Razumovsky wrote:
>
>> Thanks, it works! Here's the snippet:
>>
>> String cloneName = objEntity.getName() + "_no_qualifier";
>> ObjEntity clone = dataMap.getObjEntity(cloneName);
>> if (clone == null) {
>> clone = new ObjEntity(cloneName);
>> clone.setDbEntity(objEntity.getDbEntity());
>> objEntity.getDataMap().addObjEntity(clone);
>> }
>>
>> Works on every Cayenne
>
> Isn't there more to it than this?
>
> What javaClass are you mapping to? I didn't think the cloned  
> objentity could map to the same java class (given that the map  
> allows you to look up via javaclass). And what about  
> relationships .. do you need to recursively re-define relations so  
> that they also map to a similarly cloned entity?
>
> I'm about to attempt to do this as listed below[1] .. so any  
> feedback welcome.
>
>> 2008/11/11, Andrus Adamchik <an...@objectstyle.org>:
>>> On Nov 11, 2008, at 2:15 PM, Andrey Razumovsky wrote:
>>>
>>> ObjEntity clone = (ObjEntity) SerializationUtils.clone(objEntity);
>>>> clone.setDeclaredQualifier(null);
>>>> SelectQuery query = new SelectQuery(clone);
>>>>
>>>
>>> In addition you'll need to rename the entity and register it with  
>>> the
>>> DataMap. So you might as well map an alt. entity via the Modeler.
>>>
>>> Or use a separate stack all together to work with a parallel set of
>>> entities without qualifiers.
>
> Andrus, any clues on how one goes about creating a separate stack?

i.e., at runtime...

> Is there a simple way of finding the default stack and cloning it so  
> as to recurse through the entities to turn off the declared qual?
>
> with regards,
> --
>
> Lachlan Deck
>
> [1] any improvements welcome...
>
> private static synchronized ObjEntity  
> registeredNonRestrictingForObjEntity(DataMap map, ObjEntity  
> originalEntity) {
> 	String cloneName = originalEntity.getName() + "_nonRestricting";
> 	ObjEntity cloneEntity = map.getObjEntity(cloneName);
> 	if (cloneEntity == null) {
> 		cloneEntity = new ObjEntity(cloneName);
> 		cloneEntity.setDbEntity(originalEntity.getDbEntity());
> 		cloneEntity.setDeclaredQualifier(null);
> 		cloneEntity.setClassName(originalEntity.getClassName() +  
> "$NonRestricting");
>
> 		// define attributes
> 		cloneEntity.clearAttributes();
> 		for (Entry<String, ObjAttribute> attribute :  
> originalEntity.getAttributeMap().entrySet()) {
> 			ObjAttribute att = (ObjAttribute)  
> SerializationUtils.clone(attribute.getValue());
> 			att.setEntity(cloneEntity);
> 			cloneEntity.addAttribute(att);
> 		}
>
> 		map.addObjEntity(cloneEntity);
>
> 		// define relations
> 		cloneEntity.clearRelationships();
> 		SortedMap<String, ObjRelationship> relations =  
> cloneEntity.getRelationshipMap();
> 		if (relations != null) {
> 			for (Entry<String, ObjRelationship> relation :  
> relations.entrySet()) {
> 				ObjRelationship rel = relation.getValue();
> 				ObjEntity targetEntity =  
> registeredNonRestrictingForObjEntity(map, (ObjEntity)  
> relation.getValue().getTargetEntity());
>
> 				ObjRelationship relationClone = (ObjRelationship)  
> SerializationUtils.clone(rel);
> 				relationClone.setTargetEntity(targetEntity);
> 				cloneEntity.removeRelationship(relation.getKey());
> 				cloneEntity.addRelationship(relationClone);
> 			}
> 		}
> 	}
> 	return cloneEntity;
> }
>

with regards,
--

Lachlan Deck