/*
* 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.ILanguageObject;
import org.teiid.designer.query.sql.lang.IMatchCriteria;
/**
* MatchCriteriaEditorModel
*
* @since 8.0
*/
public class MatchCriteriaEditorModel extends AbstractPredicateCriteriaTypeEditorModel
implements ILanguageObjectEditorModelListener {
private final static String PREFIX = I18nUtil.getPropertyPrefix(MatchCriteriaEditorModel.class);
private final static String[] OPERATORS = new String[] {Util.getString(PREFIX + "like") //$NON-NLS-1$
};
public final static String LEFT_EXPRESSION = "MATCH CRITERIA LEFT EXPRESSION"; //$NON-NLS-1$
public final static String RIGHT_EXPRESSION = "MATCH CRITERIA RIGHT EXPRESSION"; //$NON-NLS-1$
public final static String ESCAPE_CHAR = "MATCH CRITERIA ESCAPE CHAR"; //$NON-NLS-1$
private final IMatchCriteria emptyMatchCriteria;
private CriteriaExpressionEditorModel leftExpModel;
private CriteriaExpressionEditorModel rightExpModel;
private char escapeChar;
public MatchCriteriaEditorModel( CriteriaExpressionEditorModel left,
CriteriaExpressionEditorModel right ) {
super(IMatchCriteria.class);
this.leftExpModel = left;
this.rightExpModel = right;
this.leftExpModel.addModelListener(this);
this.rightExpModel.addModelListener(this);
IQueryService queryService = ModelerCore.getTeiidQueryService();
IQueryFactory factory = queryService.createQueryFactory();
emptyMatchCriteria = factory.createMatchCriteria();
}
public MatchCriteriaEditorModel() {
this(new CriteriaExpressionEditorModel(), new CriteriaExpressionEditorModel());
}
@Override
public ILanguageObject getLanguageObject() {
IQueryService queryService = ModelerCore.getTeiidQueryService();
IQueryFactory factory = queryService.createQueryFactory();
IMatchCriteria matchCriteria = factory.createMatchCriteria();
matchCriteria.setLeftExpression(leftExpModel.getExpression());
matchCriteria.setRightExpression(rightExpModel.getExpression());
matchCriteria.setEscapeChar(escapeChar);
return matchCriteria;
}
public void setEscapeChar( char escChar ) {
boolean same = (this.escapeChar == escChar);
if (!same) {
this.escapeChar = escChar;
fireModelChanged(ESCAPE_CHAR);
}
}
public char getEscapeChar() {
return this.escapeChar;
}
@Override
public void setLanguageObject( ILanguageObject obj ) {
super.setLanguageObject(obj);
IMatchCriteria curMatchCriteria;
if (obj == null) {
clear();
} else {
curMatchCriteria = (IMatchCriteria)obj;
IExpression newLeftExpression = curMatchCriteria.getLeftExpression();
setLeftExpression(newLeftExpression);
IExpression newRightExpression = curMatchCriteria.getRightExpression();
setRightExpression(newRightExpression);
char newEscapeChar = curMatchCriteria.getEscapeChar();
setEscapeChar(newEscapeChar);
}
}
@Override
public void clear() {
notifyListeners = false;
setLeftExpression(emptyMatchCriteria.getLeftExpression());
setRightExpression(emptyMatchCriteria.getRightExpression());
setEscapeChar(emptyMatchCriteria.getEscapeChar());
notifyListeners = true;
super.clear();
}
@Override
public void save() {
super.save();
leftExpModel.save();
rightExpModel.save();
}
@Override
public IExpression getLeftExpression() {
return leftExpModel.getExpression();
}
@Override
public void setLeftExpression( IExpression exp ) {
boolean same;
IExpression oldExp = leftExpModel.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
leftExpModel.setLanguageObject(exp);
}
}
@Override
public IExpression getRightExpression() {
return rightExpModel.getExpression();
}
@Override
public void setRightExpression( IExpression exp ) {
boolean same;
IExpression oldExp = rightExpModel.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
rightExpModel.setLanguageObject(exp);
}
}
@Override
public void modelChanged( LanguageObjectEditorModelEvent theEvent ) {
String type = theEvent.getType();
String eventType;
if (type.equals(CompositeLanguageObjectEditorModel.MODEL_CHANGE)) {
eventType = type;
} else {
Object source = theEvent.getSource();
if (source == leftExpModel) {
eventType = LEFT_EXPRESSION;
} else {
eventType = RIGHT_EXPRESSION;
}
}
fireModelChanged(eventType);
}
@Override
public boolean isComplete() {
boolean complete = (leftExpModel.isComplete() && rightExpModel.isComplete());
return complete;
}
public CriteriaExpressionEditorModel getLeftExpressionModel() {
return leftExpModel;
}
public CriteriaExpressionEditorModel getRightExpressionModel() {
return rightExpModel;
}
@Override
public String[] getOperators() {
return OPERATORS;
}
@Override
public String getCurrentOperator() {
return OPERATORS[0];
}
@Override
public void setCurrentOperator( String op ) {
// Interface method that is unused.
}
}