org.akaza.openclinica.logic.expressionTree.OpenClinicaBeanVariableNode.java Source code

Java tutorial

Introduction

Here is the source code for org.akaza.openclinica.logic.expressionTree.OpenClinicaBeanVariableNode.java

Source

/* 
 * OpenClinica is distributed under the
 * GNU Lesser General Public License (GNU LGPL).
 * For details see: http://www.openclinica.org/license
 *
 * Copyright 2003-2008 Akaza Research 
 */
package org.akaza.openclinica.logic.expressionTree;

import java.util.TimeZone;

import org.akaza.openclinica.bean.core.ItemDataType;
import org.akaza.openclinica.bean.core.SubjectEventStatus;
import org.akaza.openclinica.bean.submit.ItemBean;
import org.akaza.openclinica.domain.Status;
import org.akaza.openclinica.domain.rule.expression.ExpressionBeanObjectWrapper;
import org.akaza.openclinica.domain.rule.expression.ExpressionObjectWrapper;
import org.akaza.openclinica.exception.OpenClinicaSystemException;
import org.akaza.openclinica.service.rule.expression.ExpressionBeanService;
import org.akaza.openclinica.service.rule.expression.ExpressionService;
import org.joda.time.DateMidnight;
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;

/**
 * @author Krikor Krumlian
 * 
 */
public class OpenClinicaBeanVariableNode extends ExpressionNode {
    String number;
    ExpressionBeanService expressionBeanService;
    ExpressionBeanObjectWrapper expressionBeanObjectWrapper;

    OpenClinicaBeanVariableNode(String val) {
        number = val;
        // validate();
    }

    OpenClinicaBeanVariableNode(String val, ExpressionBeanService expressionBeanService) {
        this.expressionBeanService = expressionBeanService;
        number = val;
        // validate();
    }

    OpenClinicaBeanVariableNode(String val, ExpressionBeanService expressionBeanService,
            OpenClinicaExpressionParser parser) {
        setExpressionParser(parser);
        this.expressionBeanService = expressionBeanService;
        number = val;
        // validate();
    }

    OpenClinicaBeanVariableNode(String val, ExpressionBeanObjectWrapper expressionBeanObjectWrapper,
            OpenClinicaExpressionParser parser) {
        setExpressionParser(parser);
        this.expressionBeanObjectWrapper = expressionBeanObjectWrapper;
        number = val;
        // validate();
    }

    @Override
    String getNumber() {
        return number;

    }

    /**
     * 
     * getTestValues() returns a hashMap of user defined values
     * getResponseTestValues() is empty and will be filled with variables being processed
     * @param var the default test value
     * @return the Value
     */
    private String theTest(String var) {
        if (getTestValues() == null) {
            return var;
        } else if (getTestValues().get(number) == null) {
            getTestValues().put(number, var);
            getResponseTestValues().put(number, var);
            return var;
        } else {
            getResponseTestValues().put(number, getTestValues().get(number));
            return getTestValues().get(number);
        }

    }

    @Override
    String testCalculate() throws OpenClinicaSystemException {

        //TODO: do something
        return null;

    }

    @Override
    Object calculate() throws OpenClinicaSystemException {
        // The value of the node is the number that it contains.
        // return number;
        validate();
        Object variableValue = calculateVariable();
        if (variableValue != null) {
            return variableValue;
        } else {
            variableValue = calculateStatus();
            if (variableValue != null)
                return variableValue;
        }
        return getExpressionBeanService().evaluateExpression(number);
    }

    void validate() throws OpenClinicaSystemException {
        // TODO: Create validation
    }

    private Object calculateStatus() {
        if (number.equals("Scheduled")) {
            return SubjectEventStatus.SCHEDULED;
        }
        return null;
    }

    private Object calculateVariable() {
        if (number.equals("_CURRENT_DATE")) {
            String ssTimeZone = getExpressionBeanService().getSSTimeZone();
            if (ssTimeZone == "" || ssTimeZone == null)
                ssTimeZone = TimeZone.getDefault().getID();

            DateTimeZone ssZone = DateTimeZone.forID(ssTimeZone);
            DateMidnight dm = new DateMidnight(ssZone);
            DateTimeFormatter fmt = ISODateTimeFormat.date();
            return fmt.print(dm);
        }
        return null;
    }

    private String testCalculateVariable() {
        if (number.equals("_CURRENT_DATE")) {
            String ssTimeZone = getExpressionBeanService().getSSTimeZone();
            if (ssTimeZone == "" || ssTimeZone == null)
                ssTimeZone = TimeZone.getDefault().getID();

            DateTimeZone ssZone = DateTimeZone.forID(ssTimeZone);
            DateMidnight dm = new DateMidnight(ssZone);
            DateTimeFormatter fmt = ISODateTimeFormat.date();
            return fmt.print(dm);
        }
        return null;
    }

    @Override
    void printStackCommands() {
        // On a stack machine, just push the number onto the stack.
        logger.info("  Push " + number);
    }

    private ExpressionBeanService getExpressionBeanService() {
        expressionBeanService = this.expressionBeanService != null ? expressionBeanService
                : new ExpressionBeanService(expressionBeanObjectWrapper);
        return expressionBeanService;
    }

}