ForeignFieldLazyLoader.java :  » Database-ORM » jaxor-3.5 » net » sourceforge » jaxor » util » Java Open Source

Java Open Source » Database ORM » jaxor 3.5 
jaxor 3.5 » net » sourceforge » jaxor » util » ForeignFieldLazyLoader.java
package net.sourceforge.jaxor.util;

import net.sourceforge.jaxor.LazyLoader;
import net.sourceforge.jaxor.ReferenceResolver;
import net.sourceforge.jaxor.MetaField;
import net.sourceforge.jaxor.EntityRow;
import net.sourceforge.jaxor.api.EntityInterface;
import net.sourceforge.jaxor.api.EntityListAdapter;

import java.util.List;
import java.util.Iterator;
import java.util.ArrayList;

/**
 * Created By:   Mike
 * Date:         Feb 14, 2004
 * Time:         4:46:19 PM
 *
 * Last Checkin: $Author: mrettig $
 * Date:         $Date: 2004/03/03 04:42:10 $
 * Revision:     $Revision: 1.2 $
 */
public class ForeignFieldLazyLoader extends LazyLoader {

    private final ReferenceResolver _resolver;

    public ForeignFieldLazyLoader(Class finderClass, EntityRow parent, boolean unique) {
        this(new ReferenceResolver(finderClass, parent, unique));
    }

    public ForeignFieldLazyLoader(ReferenceResolver keys) {
        _resolver = keys;
    }

    public void addKey(MetaField sourceField, MetaField targetField) {
        getResolver().add(sourceField, targetField);
    }

    public ReferenceResolver getResolver() {
        return _resolver;
    }

    protected Object resolve() {
        return _resolver.getObject();
    }

    public void setValue(Object result) {
        super.setValue(result);
        if(result == null)
            return;
        if(getResolver().isUnique())
            syncSourceFieldsWithTarget(result);
    }
    
    /**
     * Field may resolve to a single entity or an entity list. This will always
     * return a list to make working with the entities easier;
     * @return
     */ 
    public List getFieldAsList(){
        if(getResolver().isUnique()){
            List result = new ArrayList();
            Object value = getValue();
            if(value != null)
                result.add(value);
            return result;
        }
        return ((EntityListAdapter)getValue()).toList();
    }

    private void syncSourceFieldsWithTarget(Object result) {
        List keys = getResolver().getKeys();
        EntityRow targetEntity = ((EntityInterface)result).getFields();
        EntityRow sourceEntity = getResolver().getSourceEntity();
        for (Iterator iterator = keys.iterator(); iterator.hasNext();) {
            ReferenceResolver.MetaPair metaPair = (ReferenceResolver.MetaPair) iterator.next();
            String sourceProperty = metaPair.Source.getProperty();
            String targetProperty = metaPair.Target.getProperty();
            sourceEntity.setPropertyValue(sourceProperty, targetEntity.getPropertyValue(targetProperty));
        }
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.