/* * 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.core.designer.util.I18nUtil; 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.IExpression; import org.teiid.designer.query.sql.lang.IIsNullCriteria; import org.teiid.designer.query.sql.lang.ILanguageObject; /** * IsNullCriteriaEditorModel * * @since 8.0 */ public class IsNullCriteriaEditorModel extends AbstractPredicateCriteriaTypeEditorModel implements ILanguageObjectEditorModelListener { public final static String EXPRESSION = "EXPRESSION"; //$NON-NLS-1$ private final static String PREFIX = I18nUtil.getPropertyPrefix(IsNullCriteriaEditorModel.class); private final static String[] OPERATORS = new String[] {Util.getString(PREFIX + "isNull") //$NON-NLS-1$ }; private final IIsNullCriteria emptyIsNullCriteria; private CriteriaExpressionEditorModel expEditorModel; public IsNullCriteriaEditorModel( CriteriaExpressionEditorModel eem ) { super(IIsNullCriteria.class); this.expEditorModel = eem; this.expEditorModel.addModelListener(this); IQueryService queryService = ModelerCore.getTeiidQueryService(); IQueryFactory factory = queryService.createQueryFactory(); emptyIsNullCriteria = factory.createIsNullCriteria(); } public IsNullCriteriaEditorModel() { this(new CriteriaExpressionEditorModel()); } @Override public void modelChanged( LanguageObjectEditorModelEvent theEvent ) { String type = theEvent.getType(); String eventType; if (type.equals(CompositeLanguageObjectEditorModel.MODEL_CHANGE)) { eventType = type; } else { eventType = EXPRESSION; } fireModelChanged(eventType); } @Override public void setLanguageObject( ILanguageObject obj ) { super.setLanguageObject(obj); IIsNullCriteria curIsNullCriteria; if (obj == null) { clear(); } else { curIsNullCriteria = (IIsNullCriteria)obj; expEditorModel.setLanguageObject(curIsNullCriteria.getExpression()); } } @Override public void clear() { notifyListeners = false; expEditorModel.setLanguageObject(emptyIsNullCriteria.getExpression()); notifyListeners = true; super.clear(); } @Override public void save() { super.save(); expEditorModel.save(); } @Override public ILanguageObject getLanguageObject() { IQueryService queryService = ModelerCore.getTeiidQueryService(); IQueryFactory factory = queryService.createQueryFactory(); IIsNullCriteria isNullCriteria = factory.createIsNullCriteria(); isNullCriteria.setExpression(expEditorModel.getExpression()); return isNullCriteria; } @Override public boolean isComplete() { boolean complete = expEditorModel.isComplete(); return complete; } public CriteriaExpressionEditorModel getExpressionModel() { return expEditorModel; } @Override public String[] getOperators() { return OPERATORS; } @Override public String getCurrentOperator() { return OPERATORS[0]; } @Override public void setCurrentOperator( String op ) { // Interface method that is unused } public IExpression getExpression() { IExpression exp = expEditorModel.getExpression(); return exp; } public void setExpression( IExpression exp ) { boolean same; IExpression oldExp = expEditorModel.getExpression(); if (exp == null) { same = (oldExp == null); } else { same = exp.equals(oldExp); } if (!same) { // Note-- do not fire event because model will fire its own event expEditorModel.setLanguageObject(exp); } } @Override public IExpression getLeftExpression() { return getExpression(); } @Override public void setLeftExpression( IExpression exp ) { setExpression(exp); } @Override public IExpression getRightExpression() { // Unused abstract method return null; } @Override public void setRightExpression( IExpression exp ) { // Unused abstract method } }