/*
 * Copyright 2004-2006 IDCA. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
 * following conditions are met:
 * 
 *    1. Redistributions of source code must retain the above copyright notice, this list of conditions and
 *        the following disclaimer.
 *    2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
 *        and the following disclaimer in the documentation and/or other materials provided with the
 *        distribution.
 * 
 * THIS SOFTWARE IS PROVIDED BY IDCA AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL IDCA OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 * 
 * The views and conclusions contained in the software and documentation are those of the authors and
 * should not be interpreted as representing official policies, either expressed or implied, of IDCA.
 */

package com.idcanet.foei.components.lang;

import org.apache.commons.beanutils.BeanUtils;

import com.idcanet.foei.core.FoeiProcessFactory;
import com.idcanet.foei.event.AbstractEventObject;
import com.idcanet.foei.event.EventInput;
import com.idcanet.foei.event.EventPort;
import com.idcanet.foei.event.IllegalEventPortNameException;

/**
 * Gets the property of an Bean
 * 
 * @author Willem Cazander
 * @version 1.0 Jun 5, 2006
 *
 */
public class GetBeanProperty extends AbstractEventObject
{
    /** v1.0 */
    static final long serialVersionUID = 10l; 
    /** The Property name */
    //static final public String PROPERTY = "property";
    
    private String property = null;
    
    private Object propertyValue = null;
    /**
     * Creates an SetBeanProperty
     */
    public GetBeanProperty() {
        addInputPort(EventPort.INPUT,Object.class);
        //addInputPort(PROPERTY,Object.class);
        addOutputPort(EventPort.OUTPUT);
    }

    /**
     * Filters the object with EventSteps
     * @see EventInput#doEvent(EventPort, Object)
     */
    public void doEvent(EventPort eventPort,Object object) throws IllegalEventPortNameException {

        //if(PROPERTY.equals(eventPort.getName())) {
         //   propertyValue=object;
          //  return;
        //}
        if(EventPort.INPUT.equals(eventPort.getName())) {
            if(property==null) {
                return;
            }
            try {
                object = BeanUtils.getProperty(object,property); // todo: fix error this wil only return String !!!!!!!!!!!!!!!!!
            } catch (Exception e) {
                e.printStackTrace();
                return;
            }
            FoeiProcessFactory.getFoeiProcess().executeEvent(getOutputPort(EventPort.OUTPUT),object);
            return;
        }
        throw new IllegalEventPortNameException("Not excisting input EventPort: "+eventPort.getName());
    }

    /**
     * @return Returns the property.
     */
    public String getProperty() {
        return property;
    }

    /**
     * @param property The property to set.
     */
    public void setProperty(String property) {
        this.property = property;
    }
}