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 <andru..bjectstyle.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
This archive was generated by hypermail 2.0.0 : Fri May 01 2009 - 02:48:58 EDT