用于解析条件XML配置的递归函数

时间:2019-04-04 03:25:36

标签: java

我有以下用Java编写的递归方法。该方法在功能上可以正常工作,但是编写得很差。

是否可以应用设计模式或使用反射来实现相同的功能。

任何人都可以审查此方法并提出改进建议。

该方法的功能如下。

IfCondition对象已使用下面的XML文件填充,以便将某些值(而不是硬编码条件)导出到Java代码中,我们已编写了此XML。

  

XML Config

<field source="condition" target="transaction.transactionType">
<ifCondition operand="isShortSell" operator="eq" expectedValue="true">
    <ifCondition operand="quanity" operator="gt" expectedValue="0" dataType="Double"/>
        open
    </ifCondition>
</ifCondition>
<ifCondition operand="isShortSell" operator="eq" expectedValue="true">
    <ifCondition operand="quanity" operator="lt" expectedValue="0" dataType="Double" />
        close
    </ifCondition>
</ifCondition>
<ifCondition operand="isShortSell" operator="eq" expectedValue="false">
    <ifCondition operand="quanity" operator="gt" expectedValue="0" dataType="Double" />
        open    
    </ifCondition>
</ifCondition>
<ifCondition operand="isShortSell" operator="eq" expectedValue="false">
    <ifCondition operand="quanity" operator="lt" expectedValue="0" dataType="Double" />
        close
    </ifCondition>
</ifCondition>
</field>
  

Java方法

public static Object deriveConditionalValue(Object txn, IfCondition ifCondition) throws ReflectiveOperationException {

        String operand = ifCondition.getOperand();
        String operator = ifCondition.getOperator();
        String expectedValue = ifCondition.getExpectedValue();
        Object conditionalValue = (isExpression(ifCondition.getValue()) ? getExpressionValue(ifCondition.getValue(), txn) : ifCondition.getValue());
        String dataType = Optional.ofNullable(ifCondition.getDataType()).orElse(STRING);
        Object value = BeanUtils.getProperty(txn, operand);

        /*
         * Operator, Data type
         */

        if (operator.equalsIgnoreCase(EQUAL)) {

            if (dataType.equalsIgnoreCase(STRING)) {
                String stringValue = String.valueOf(value);

                if (stringValue.equalsIgnoreCase(expectedValue)) {
                    if (ifCondition.getIfCondition() == null) {
                        return conditionalValue;
                    } else {
                        return deriveConditionalValue(txn, ifCondition.getIfCondition());
                    }
                } else {
                    return null;
                }

            } else if (dataType.equalsIgnoreCase(DOUBLE)) {
                double doubleValue = Double.parseDouble(String.valueOf(value));
                double doubleExpectedValue = Double.parseDouble(expectedValue);

                if (doubleValue == doubleExpectedValue) {
                    if (ifCondition.getIfCondition() == null) {
                        return conditionalValue;
                    } else {
                        return deriveConditionalValue(txn, ifCondition.getIfCondition());
                    }
                } else {
                    return null;
                }
            } else if (dataType.equalsIgnoreCase(LONG)) {
                double longValue = Long.parseLong(String.valueOf(value));
                double longExpectedValue = Long.parseLong(expectedValue);

                if (longValue == longExpectedValue) {
                    if (ifCondition.getIfCondition() == null) {
                        return conditionalValue;
                    } else {
                        return deriveConditionalValue(txn, ifCondition.getIfCondition());
                    }
                } else {
                    return null;
                }
            }

        } else if (ifCondition.getOperator().equalsIgnoreCase(GREATER_THAN)) {

            if (dataType.equalsIgnoreCase(STRING)) {
                String stringValue = String.valueOf(value);

                if (stringValue.compareToIgnoreCase(expectedValue) > 0) {
                    if (ifCondition.getIfCondition() == null) {
                        return conditionalValue;
                    } else {
                        return deriveConditionalValue(txn, ifCondition.getIfCondition());
                    }
                } else {
                    return null;
                }

            } else if (dataType.equalsIgnoreCase(DOUBLE)) {
                double doubleValue = Double.parseDouble(String.valueOf(value));
                double doubleExpectedValue = Double.parseDouble(expectedValue);

                if (doubleValue > doubleExpectedValue) {
                    if (ifCondition.getIfCondition() == null) {
                        return conditionalValue;
                    } else {
                        return deriveConditionalValue(txn, ifCondition.getIfCondition());
                    }
                } else {
                    return null;
                }
            } else if (dataType.equalsIgnoreCase(LONG)) {
                double longValue = Long.parseLong(String.valueOf(value));
                double longExpectedValue = Long.parseLong(expectedValue);

                if (longValue > longExpectedValue) {
                    if (ifCondition.getIfCondition() == null) {
                        return conditionalValue;
                    } else {
                        return deriveConditionalValue(txn, ifCondition.getIfCondition());
                    }
                } else {
                    return null;
                }
            }

        } else if (ifCondition.getOperator().equalsIgnoreCase(LESS_THAN)) {

            if (dataType.equalsIgnoreCase(STRING)) {
                String stringValue = String.valueOf(value);

                if (stringValue.compareToIgnoreCase(expectedValue) < 0) {
                    if (ifCondition.getIfCondition() == null) {
                        return conditionalValue;
                    } else {
                        return deriveConditionalValue(txn, ifCondition.getIfCondition());
                    }
                } else {
                    return null;
                }

            } else if (dataType.equalsIgnoreCase(DOUBLE)) {
                double doubleValue = Double.parseDouble(String.valueOf(value));
                double doubleExpectedValue = Double.parseDouble(expectedValue);

                if (doubleValue < doubleExpectedValue) {
                    if (ifCondition.getIfCondition() == null) {
                        return conditionalValue;
                    } else {
                        return deriveConditionalValue(txn, ifCondition.getIfCondition());
                    }
                } else {
                    return null;
                }
            } else if (dataType.equalsIgnoreCase(LONG)) {
                double longValue = Long.parseLong(String.valueOf(value));
                double longExpectedValue = Long.parseLong(expectedValue);

                if (longValue < longExpectedValue) {
                    if (ifCondition.getIfCondition() == null) {
                        return conditionalValue;
                    } else {
                        return deriveConditionalValue(txn, ifCondition.getIfCondition());
                    }
                } else {
                    return null;
                }
            }

        } else if (ifCondition.getOperator().equalsIgnoreCase(GREATER_THAN_EQUAL)) {

            if (dataType.equalsIgnoreCase(STRING)) {
                String stringValue = String.valueOf(value);

                if (stringValue.compareToIgnoreCase(expectedValue) >= 0) {
                    if (ifCondition.getIfCondition() == null) {
                        return conditionalValue;
                    } else {
                        return deriveConditionalValue(txn, ifCondition.getIfCondition());
                    }
                } else {
                    return null;
                }

            } else if (dataType.equalsIgnoreCase(DOUBLE)) {
                double doubleValue = Double.parseDouble(String.valueOf(value));
                double doubleExpectedValue = Double.parseDouble(expectedValue);

                if (doubleValue >= doubleExpectedValue) {
                    if (ifCondition.getIfCondition() == null) {
                        return conditionalValue;
                    } else {
                        return deriveConditionalValue(txn, ifCondition.getIfCondition());
                    }
                } else {
                    return null;
                }
            } else if (dataType.equalsIgnoreCase(LONG)) {
                double longValue = Long.parseLong(String.valueOf(value));
                double longExpectedValue = Long.parseLong(expectedValue);

                if (longValue >= longExpectedValue) {
                    if (ifCondition.getIfCondition() == null) {
                        return conditionalValue;
                    } else {
                        return deriveConditionalValue(txn, ifCondition.getIfCondition());
                    }
                } else {
                    return null;
                }
            }

        } else if (ifCondition.getOperator().equalsIgnoreCase(LESS_THAN_EQUAL)) {

            if (dataType.equalsIgnoreCase(STRING)) {
                String stringValue = String.valueOf(value);

                if (stringValue.compareToIgnoreCase(expectedValue) <= 0) {
                    if (ifCondition.getIfCondition() == null) {
                        return conditionalValue;
                    } else {
                        return deriveConditionalValue(txn, ifCondition.getIfCondition());
                    }
                } else {
                    return null;
                }

            } else if (dataType.equalsIgnoreCase(DOUBLE)) {
                double doubleValue = Double.parseDouble(String.valueOf(value));
                double doubleExpectedValue = Double.parseDouble(expectedValue);

                if (doubleValue <= doubleExpectedValue) {
                    if (ifCondition.getIfCondition() == null) {
                        return conditionalValue;
                    } else {
                        return deriveConditionalValue(txn, ifCondition.getIfCondition());
                    }
                } else {
                    return null;
                }
            } else if (dataType.equalsIgnoreCase(LONG)) {
                double longValue = Long.parseLong(String.valueOf(value));
                double longExpectedValue = Long.parseLong(expectedValue);

                if (longValue <= longExpectedValue) {
                    if (ifCondition.getIfCondition() == null) {
                        return conditionalValue;
                    } else {
                        return deriveConditionalValue(txn, ifCondition.getIfCondition());
                    }
                } else {
                    return null;
                }
            }

        } else if (ifCondition.getOperator().equalsIgnoreCase(NOT_EQUAL)) {

            if (dataType.equalsIgnoreCase(STRING)) {
                String stringValue = String.valueOf(value);

                if (!stringValue.equalsIgnoreCase(expectedValue)) {
                    if (ifCondition.getIfCondition() == null) {
                        return conditionalValue;
                    } else {
                        return deriveConditionalValue(txn, ifCondition.getIfCondition());
                    }
                } else {
                    return null;
                }

            } else if (dataType.equalsIgnoreCase(DOUBLE)) {
                double doubleValue = Double.parseDouble(String.valueOf(value));
                double doubleExpectedValue = Double.parseDouble(expectedValue);

                if (doubleValue != doubleExpectedValue) {
                    if (ifCondition.getIfCondition() == null) {
                        return conditionalValue;
                    } else {
                        return deriveConditionalValue(txn, ifCondition.getIfCondition());
                    }
                } else {
                    return null;
                }
            } else if (dataType.equalsIgnoreCase(LONG)) {
                double longValue = Long.parseLong(String.valueOf(value));
                double longExpectedValue = Long.parseLong(expectedValue);

                if (longValue != longExpectedValue) {
                    if (ifCondition.getIfCondition() == null) {
                        return conditionalValue;
                    } else {
                        return deriveConditionalValue(txn, ifCondition.getIfCondition());
                    }
                } else {
                    return null;
                }
            }

        }
        return null;
    }

0 个答案:

没有答案