/* * 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.designer.transformation.ui.builder; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.teiid.core.designer.util.CoreArgCheck; import org.teiid.designer.query.sql.lang.ILanguageObject; import org.teiid.designer.transformation.ui.UiConstants; import org.teiid.designer.ui.common.util.WidgetUtil; import org.teiid.query.ui.builder.model.ILanguageObjectEditorModel; import org.teiid.query.ui.builder.model.ILanguageObjectEditorModelListener; /** * AbstractLanguageObjectEditor * * @since 8.0 */ public abstract class AbstractLanguageObjectEditor implements ILanguageObjectEditor, UiConstants { // ///////////////////////////////////////////////////////////////////////////////////////////// // CONSTANTS // ///////////////////////////////////////////////////////////////////////////////////////////// private static final String PREFIX = "AbstractLanguageObjectEditor."; //$NON-NLS-1$ // ///////////////////////////////////////////////////////////////////////////////////////////// // FIELDS // ///////////////////////////////////////////////////////////////////////////////////////////// /** The type of language object being created/edited. */ private Class editorType; /** The model. */ private ILanguageObjectEditorModel model; // ///////////////////////////////////////////////////////////////////////////////////////////// // CONTROLS // ///////////////////////////////////////////////////////////////////////////////////////////// /** The UI control. */ private Composite pnlUi; // ///////////////////////////////////////////////////////////////////////////////////////////// // CONSTRUCTORS // ///////////////////////////////////////////////////////////////////////////////////////////// /** * Constructs an <code>AbstractLanguageObjectEditor</code> with the given type. * * @param theParent the UI parent * @param theEditorType the type of <code>LanguageObject</code> being edited * @param theModel the editor's model * @throws IllegalArgumentException if any of the parameters are <code>null</code> */ protected AbstractLanguageObjectEditor( Composite theParent, Class theEditorType, ILanguageObjectEditorModel theModel ) { CoreArgCheck.isNotNull(theParent); CoreArgCheck.isNotNull(theEditorType); CoreArgCheck.isNotNull(theModel); setEditorType(theEditorType); setModel(theModel); pnlUi = new Composite(theParent, SWT.NONE); pnlUi.setLayoutData(new GridData(GridData.FILL_BOTH)); GridLayout layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; pnlUi.setLayout(layout); createUi(pnlUi); } // ///////////////////////////////////////////////////////////////////////////////////////////// // METHODS // ///////////////////////////////////////////////////////////////////////////////////////////// /* (non-Javadoc) * @see org.teiid.query.ui.builder.ILanguageObjectEditor#acceptFocus() */ @Override public abstract void acceptFocus(); /** * Convenience method to add model listener. * * @param theListener the listener being added * @return <code>true</code> if the listener was added; <code>false</code> otherwise. * @throws IllegalArgumentException if listener is <code>null</code> * @see org.teiid.query.ui.builder.model.ILanguageObjectEditorModel#addModelListener(ILanguageObjectEditorModelListener) */ public boolean addModelListener( ILanguageObjectEditorModelListener theListener ) { return model.addModelListener(theListener); } /* (non-Javadoc) * @see org.teiid.query.ui.builder.ILanguageObjectEditor#clear() */ @Override public void clear() { model.clear(); } /** * Subclasses must create UI. */ protected abstract void createUi( Composite theControl ); /* (non-Javadoc) * @see org.teiid.query.ui.builder.ILanguageObjectEditor#getEditorType() */ @Override public Class getEditorType() { return editorType; } /* (non-Javadoc) * @see org.teiid.query.ui.builder.ILanguageObjectEditor#getLanguageObject() */ @Override public ILanguageObject getLanguageObject() { return model.getLanguageObject(); } /* (non-Javadoc) * @see org.teiid.query.ui.builder.ILanguageObjectEditor#getModel() */ @Override public ILanguageObjectEditorModel getModel() { return model; } /* (non-Javadoc) * @see org.teiid.query.ui.builder.ILanguageObjectEditor#getTitle() */ @Override public abstract String getTitle(); /* (non-Javadoc) * @see org.teiid.query.ui.builder.ILanguageObjectEditor#getToolTipText() */ @Override public abstract String getToolTipText(); /* (non-Javadoc) * @see org.teiid.query.ui.builder.ILanguageObjectEditor#getUi() */ @Override public final Control getUi() { return pnlUi; } /* (non-Javadoc) * @see org.teiid.query.ui.builder.ILanguageObjectEditor#hasChanged() */ @Override public boolean hasChanged() { return model.hasChanged(); } /* (non-Javadoc) * @see org.teiid.query.ui.builder.ILanguageObjectEditor#isComplete() */ @Override public boolean isComplete() { return model.isComplete(); } /* (non-Javadoc) * @see org.teiid.query.ui.builder.ILanguageObjectEditor#isEnabled() */ @Override public boolean isEnabled() { return pnlUi.isEnabled(); } /** * Convenience method to remove model listener. * * @param theListener the listener being removed * @return <code>true</code> if the listener was removed; <code>false</code> otherwise. * @throws IllegalArgumentException if listener is <code>null</code> * @see org.teiid.query.ui.builder.model.ILanguageObjectEditorModel#removeModelListener(ILanguageObjectEditorModelListener) */ public boolean removeModelListener( ILanguageObjectEditorModelListener theListener ) { return model.removeModelListener(theListener); } /* (non-Javadoc) * @see org.teiid.query.ui.builder.ILanguageObjectEditor#reset() */ @Override public void reset() { model.reset(); } /* (non-Javadoc) * @see org.teiid.query.ui.builder.ILanguageObjectEditor#save() */ @Override public void save() { model.save(); } /* (non-Javadoc) * @see org.teiid.query.ui.builder.ILanguageObjectEditor#setEditorType(java.lang.Class) */ @Override public void setEditorType( Class theEditorType ) { CoreArgCheck.isNotNull(theEditorType, Util.getString(PREFIX + "nullEditorType")); //$NON-NLS-1$ if (!ILanguageObject.class.isAssignableFrom(theEditorType)) { CoreArgCheck.isTrue(ILanguageObject.class.isAssignableFrom(theEditorType), Util.getString(PREFIX + "editorTypeNotLangObj")); //$NON-NLS-1$ } editorType = theEditorType; } /* (non-Javadoc) * @see org.teiid.query.ui.builder.ILanguageObjectEditor#setEnabled(boolean) */ @Override public void setEnabled( boolean theEnableFlag ) { if (theEnableFlag) { WidgetUtil.enable(pnlUi); } else { WidgetUtil.disable(pnlUi); } } /* (non-Javadoc) * @see org.teiid.query.ui.builder.ILanguageObjectEditor#setModel(org.teiid.query.internal.ui.builder.model.ILanguageObjectEditorModel) */ @Override public void setModel( ILanguageObjectEditorModel theModel ) { CoreArgCheck.isNotNull(theModel); CoreArgCheck.isEqual(editorType, theModel.getModelType()); model = theModel; } /* (non-Javadoc) * @see org.teiid.query.ui.builder.ILanguageObjectEditor#setLanguageObject(org.teiid.query.sql.LanguageObject) */ @Override public abstract void setLanguageObject( ILanguageObject theLanguageObject ); }