Package com.cfinkel.reports.wrappers

Source Code of com.cfinkel.reports.wrappers.DependentInputWithDynamicValues

package com.cfinkel.reports.wrappers;

import com.cfinkel.reports.exceptions.BadReportSyntaxException;
import com.cfinkel.reports.generatedbeans.*;
import com.cfinkel.reports.util.QueryFactory;
import com.cfinkel.reports.util.Util;
import org.springframework.dao.DataAccessException;

import java.util.*;

/**
* $Author: charles $
* $Revision: 8904 $
* $Date: 2006-05-01 18:02:06 -0400 (Mon, 01 May 2006) $
*
* Created by IntelliJ IDEA.
* User: charles
* Date: Mar 25, 2006
* Time: 8:03:14 PM
* To change this template use File | Settings | File Templates.
*/
public class DependentInputWithDynamicValues extends DependentInput {
    private String description;
    private Control control;
    private Datatype datatype;
    private String defaultVal = "";
    private Query query;
    private HashMap <String,String> attributeValues;

    ControlElement controlElement = null;

    public ControlElement getControlElement() {
        return controlElement;
    }

    // abstract methods:
    public Map<String, String> getValues() throws Exception {

        Map<Input,Object> inputMap = new HashMap<Input,Object>();

        // get parent current value from the request:
        String parentValue = getParentValueFromRequest();

        if (Util.anyAreNullOrBlank(parentValue)) {
            parentValue = parentInput.getDefaultVal();
        }
        if (parentValue.equals("")) {
            // get first key in parent's values list
            Map<String,String> parentValues = parentInput.getValues();
            if (parentValues.size() > 0) {
                parentValue = parentValues.keySet().iterator().next();
            }
            else {
                // todo: is this cause for error?
            }
        }

        inputMap.put(parentInput,parentValue);

        List data = null;
        try {
            data = query.getData(inputMap);
        } catch (DataAccessException e) {
            // todo: error with SQL: notify user (developer)
        }
        Map<String,String> values = new LinkedHashMap<String,String>();
        values.putAll(this.attributeValues);

        for (Object obj : data) {
            Map map = (Map)obj;
            Iterator it = map.values().iterator();
            String key = it.next().toString();
            String value = it.hasNext() ?  it.next().toString() : key;
            values.put(key,value);
        }
        return values;
    }

    public String getDefaultVal() {
        return defaultVal;
    }

    public String getDescription() {
        return description;
    }

    public Control getControl() {
        return control;
    }

    public Datatype getDatatype() {
        return datatype;
    }

    public DependentInputWithDynamicValues(DependentInputElement dependentInputElement, Report report, Input parentInput, int depth) throws BadReportSyntaxException {
        super(dependentInputElement,report, depth,parentInput);

        if (dependentInputElement.getWhen().size() > 1throw new BadReportSyntaxException("there must be only one 'when' element if it's value is '*'");
        // just get first when element:
        WhenElement whenElement = dependentInputElement.getWhen().get(0);
        this.description = whenElement.getDescription();
        this.datatype = whenElement.getDatatype();
        this.attributeValues = Input.getValuesFromAttribute(whenElement.getValues()  );

        defaultVal = getDefaultValue(whenElement.getDefault(),this.datatype);

        // grab query elements and control element from this crappy data structure:
        List<QueryElement> queryElements = new ArrayList<QueryElement>();
        for (Object object : whenElement.getControlAndQueryOrGeneratedQuery()) {
            if (object instanceof QueryElement) {
                queryElements.add((QueryElement)object);
            } else {
                controlElement = (ControlElement)object;
            }
        }

        if (queryElements.size() == 0) {
            throw new BadReportSyntaxException("there must be one query inside of a dependent input with dynamic values");
        }
        // only grab one query:
        query = QueryFactory.getQuery(queryElements.get(0),report);

        // set control attribute:
        if (controlElement == null) {
            control = whenElement.getControl();
        } else {
            control = getControlAttributeFromControlElement(controlElement);
        }
        this.control = whenElement.getControl();

    }

}
TOP

Related Classes of com.cfinkel.reports.wrappers.DependentInputWithDynamicValues

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.