2022년 4월 3일 일요일

[기록용] 등호 부등호 기호에 따른 비교 구문을 구성하기 위한 class

 양 변으로 구성된 값을 비교하기 하여 그 결과를 참, 거짓으로 구성하기 위한 class 입니다. 

양 변의 값은 대부분 앞서 구성한 계산 class 를 활용하여 구성하게 됩니다. 


public class CompareSyntaxBaseDTO extends SyntaxBaseDTO {

private SyntaxBaseDTO leftDTO = null;

private SyntaxBaseDTO rightDTO = null;

private int markType = -1;

public CompareSyntaxBaseDTO(String syntax) {

super(syntax);

initResource();

}

private void initResource() {

parseCurrentSyntaxValue();

}



@Override

public boolean parseCurrentSyntaxValue() {

// TODO Auto-generated method stub

this.setMainType(MAIN_TYPE.COMPARE_TYPE);

if ( isConstValue() ) {

return true;

}

if ( CommonBaseUtility.isEmptyValue(syntax)) {

return false;

}


specialKeySet = CommonParserUtility.parseSpecialKeyValues(syntax);

variableMap = CommonParserUtility.parseVariableValues(syntax);


if ( CommonParserUtility.hasCompareValue(syntax)) {

Map<String,String> parsedMap = CommonParserUtility.parseStringCompareBlocks(syntax);

String rightStr = parsedMap.get("RIGHT");

String markStr = parsedMap.get("MARK");

String leftStr = parsedMap.get("LEFT");

if ( !CommonBaseUtility.isEmptyValue(markStr)) {

markStr = markStr.trim();

switch ( markStr ) {

case ">" :

markType = 1;

break;

case ">=" :

markType = 2;

break;

case "<" :

markType = 3;

break;

case "<=" :

markType = 4;

break;

case "==" :

markType = 5;

break;

case "!=" :

markType = 6;

break;

default :

markType = -1;

break;

}

}

if ( CommonParserUtility.hasCompareValue(rightStr) ) {

rightDTO = new CompareSyntaxBaseDTO(rightStr);

} else {

rightDTO = new CalculationSyntaxBaseDTO(rightStr);

}

if ( CommonParserUtility.hasCompareValue(leftStr)) {

leftDTO = new CompareSyntaxBaseDTO(leftStr);

} else {

leftDTO = new CalculationSyntaxBaseDTO(leftStr);

}

}

return true;

}


@Override

public String getValue(Map<String, String> transMap) {

// TODO Auto-generated method stub

return null;

}


@Override

public boolean getLogicalValue(Map<String, String> transMap) {

// TODO Auto-generated method stub

if ( leftDTO == null || rightDTO == null || markType == -1 )

return false;

String lv = leftDTO.getValue(transMap);

if ( leftDTO.getMainType() == MAIN_TYPE.COMPARE_TYPE ) {

lv = leftDTO.getLogicalValue(transMap)+"";

}

String rv = rightDTO.getValue(transMap);

if ( rightDTO.getMainType() == MAIN_TYPE.COMPARE_TYPE ) {

rv = rightDTO.getLogicalValue(transMap)+"";

}

boolean result = false;

if ( CommonBaseUtility.isNumericValue(lv) 

&& CommonBaseUtility.isNumericValue(rv) ) {

float left = Float.parseFloat(lv);

float right = Float.parseFloat(rv);


switch(markType) {

case 1 :

result = left > right;

break;

case 2 :

result = left >= right;

break;

case 3 :

result = (left < right);

break;

case 4 :

result = (left <= right);

break;

case 5 :

result = (left == right );

break;

case 6 :

result = (left != right );

break;

default :

result = false;

} else if ( !CommonBaseUtility.isEmptyValue(lv) 

&& !CommonBaseUtility.isEmptyValue(rv) ) {

switch(markType) {

case 5 :

result = (lv.equals(rv) );

break;

case 6 :

result = (!lv.equals(rv));

break;

default :

result = false;

}

return result;

}


/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

}

}


이 class 가 구성될 때 and or 및 ( ) 등의 brace 가 없는 경우를 가정하였습니다. 
해당 부분이 필요하면 구성되는 하위 항목이 달라져야 합니다. 



댓글 없음:

댓글 쓰기