/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.query.ui.builder.model; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.query.IQueryFactory; import org.teiid.designer.query.IQueryService; import org.teiid.designer.query.sql.lang.ICompareCriteria; import org.teiid.designer.query.sql.lang.IExpression; import org.teiid.designer.query.sql.lang.ILanguageObject; import org.teiid.query.ui.sqleditor.component.DisplayNodeConstants; /** * CompareCriteriaEditorModel * * @since 8.0 */ public class CompareCriteriaEditorModel extends AbstractPredicateCriteriaTypeEditorModel implements ILanguageObjectEditorModelListener { public final static String LEFT_EXPRESSION = "COMPARE CRITERIA LEFT EXPRESSION"; //$NON-NLS-1$ public final static String RIGHT_EXPRESSION = "COMPARE CRITERIA RIGHT EXPRESSION"; //$NON-NLS-1$ public final static String OPERATOR = "OPERATOR"; //$NON-NLS-1$ public final static String EQ = DisplayNodeConstants.EQUALS; public final static String NE = DisplayNodeConstants.NE; public final static String LT = DisplayNodeConstants.LT; public final static String GT = DisplayNodeConstants.GT; public final static String LE = DisplayNodeConstants.LE; public final static String GE = DisplayNodeConstants.GE; private final static String[] OPERATORS = new String[] {EQ, NE, LT, GT, LE, GE}; private final ICompareCriteria emptyCompareCriteria; private CriteriaExpressionEditorModel leftExpModel; private CriteriaExpressionEditorModel rightExpModel; private int curOperatorInt; private String curOperatorStr; public CompareCriteriaEditorModel( CriteriaExpressionEditorModel left, CriteriaExpressionEditorModel right ) { super(ICompareCriteria.class); this.leftExpModel = left; this.rightExpModel = right; this.leftExpModel.addModelListener(this); this.rightExpModel.addModelListener(this); IQueryService queryService = ModelerCore.getTeiidQueryService(); IQueryFactory factory = queryService.createQueryFactory(); emptyCompareCriteria = factory.createCompareCriteria(); this.curOperatorInt = emptyCompareCriteria.getOperator(); this.curOperatorStr = this.operatorAsString(this.curOperatorInt); // initialize expressions setLeftExpression(leftExpModel.getExpression()); setRightExpression(rightExpModel.getExpression()); } public CompareCriteriaEditorModel() { this(new CriteriaExpressionEditorModel(), new CriteriaExpressionEditorModel()); } /* (non-Javadoc) * @see org.teiid.query.internal.ui.builder.model.ILanguageObjectEditorModelListener#modelChanged(org.teiid.query.ui.builder.model.LanguageObjectEditorModelEvent) */ @Override public void modelChanged( LanguageObjectEditorModelEvent theEvent ) { String type = theEvent.getType(); if (type.equals(CompositeLanguageObjectEditorModel.MODEL_CHANGE)) { // if a model change occurs, just fire event to listeners of this model so // that they can query the state of this model fireModelChanged(type); } else { fireModelChanged(LanguageObjectEditorModelEvent.STATE_CHANGE); } } @Override public ILanguageObject getLanguageObject() { IQueryService queryService = ModelerCore.getTeiidQueryService(); IQueryFactory factory = queryService.createQueryFactory(); ICompareCriteria compareCriteria = factory.createCompareCriteria(); compareCriteria.setLeftExpression(leftExpModel.getExpression()); compareCriteria.setRightExpression(rightExpModel.getExpression()); compareCriteria.setOperator(curOperatorInt); return compareCriteria; } @Override public void setLanguageObject( ILanguageObject obj ) { super.setLanguageObject(obj); ICompareCriteria curCompareCriteria; if (obj == null) { clear(); } else { curCompareCriteria = (ICompareCriteria)obj; setLeftExpression(curCompareCriteria.getLeftExpression()); setRightExpression(curCompareCriteria.getRightExpression()); setOperator(curCompareCriteria.getOperator()); } } @Override public void clear() { notifyListeners = false; setLeftExpression(emptyCompareCriteria.getLeftExpression()); setRightExpression(emptyCompareCriteria.getRightExpression()); setOperator(emptyCompareCriteria.getOperator()); notifyListeners = true; super.clear(); } @Override public void setLeftExpression( IExpression exp ) { leftExpModel.setLanguageObject(exp); fireModelChanged(LEFT_EXPRESSION); } @Override public void setRightExpression( IExpression exp ) { rightExpModel.setLanguageObject(exp); fireModelChanged(RIGHT_EXPRESSION); } public void setOperator( int op ) { if (op != curOperatorInt) { curOperatorInt = op; curOperatorStr = operatorAsString(curOperatorInt); fireModelChanged(OPERATOR); } } @Override public void setCurrentOperator( String opStr ) { int opInt = operatorAsInt(opStr); setOperator(opInt); } private int operatorAsInt( String op ) { int opInt = -1; if (op != null) { if (op.equals(EQ)) { opInt = ICompareCriteria.EQ; } else if (op.equals(NE)) { opInt = ICompareCriteria.NE; } else if (op.equals(LT)) { opInt = ICompareCriteria.LT; } else if (op.equals(GT)) { opInt = ICompareCriteria.GT; } else if (op.equals(LE)) { opInt = ICompareCriteria.LE; } else if (op.equals(GE)) { opInt = ICompareCriteria.GE; } } return opInt; } private String operatorAsString( int op ) { String str = ""; //$NON-NLS-1$ switch (op) { case ICompareCriteria.EQ: str = EQ; break; case ICompareCriteria.NE: str = NE; break; case ICompareCriteria.LT: str = LT; break; case ICompareCriteria.GT: str = GT; break; case ICompareCriteria.LE: str = LE; break; case ICompareCriteria.GE: str = GE; break; } return str; } @Override public void save() { super.save(); leftExpModel.save(); rightExpModel.save(); } @Override public boolean isComplete() { boolean leftModelComplete = leftExpModel.isComplete(); boolean curOperatorOK = (curOperatorInt != -1); boolean rightModelComplete = rightExpModel.isComplete(); boolean complete = (leftModelComplete && curOperatorOK && rightModelComplete); return complete; } @Override public IExpression getLeftExpression() { return leftExpModel.getExpression(); } public CriteriaExpressionEditorModel getLeftExpressionModel() { return leftExpModel; } @Override public IExpression getRightExpression() { return rightExpModel.getExpression(); } public CriteriaExpressionEditorModel getRightExpressionModel() { return rightExpModel; } @Override public String[] getOperators() { return OPERATORS; } /* (non-Javadoc) * @see org.teiid.query.ui.builder.criteria.AbstractPredicateCriteriaTypeEditorModel#getCurrentOperator() */ @Override public String getCurrentOperator() { return curOperatorStr; } }