/* * 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.mapping.ui.recursion; import java.util.Collections; import java.util.EventObject; import java.util.List; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.edit.provider.INotifyChangedListener; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IPropertyListener; import org.teiid.core.designer.event.EventObjectListener; import org.teiid.designer.core.notification.util.NotificationUtilities; import org.teiid.designer.core.workspace.ModelResource; import org.teiid.designer.metamodels.transformation.MappingClass; import org.teiid.designer.transformation.ui.UiConstants; import org.teiid.designer.transformation.ui.actions.ITransformationDiagramActionConstants; import org.teiid.designer.ui.editors.ModelEditor; import org.teiid.designer.ui.editors.ModelObjectEditorPage; import org.teiid.designer.ui.editors.MultiPageModelEditor; import org.teiid.designer.ui.viewsupport.ModelUtilities; /** * RecursionObjectEditorPage is the class for editing Recursion info in mapping classes. * * @since 8.0 */ public class RecursionObjectEditorPage implements ModelObjectEditorPage, INotifyChangedListener, UiConstants, ITransformationDiagramActionConstants, IAdaptable, EventObjectListener { private static final String TITLE_TEXT = org.teiid.designer.mapping.ui.UiConstants.Util.getString("RecursionObjectEditorPage.title.text"); //$NON-NLS-1$ private static final String TITLE_TOOLTIP = org.teiid.designer.mapping.ui.UiConstants.Util.getString("RecursionObjectEditorPage.title.toolTip"); //$NON-NLS-1$ private static final String COLON = ": "; //$NON-NLS-1$ private RecursionPanel pnlRecursionPanel; private MappingClass mcRecursiveObject; private RecursionObject roRecursionObject; private ModelEditor parentModelEditor; private boolean isActive = false; /** * @see org.teiid.designer.ui.editors.ModelObjectEditorPage#canClose() * @since 5.0.1 */ @Override public boolean canClose() { return true; } /* (non-Javadoc) * @See org.teiid.designer.ui.editors.ModelObjectEditor#createControl(org.eclipse.swt.widgets.Composite) */ @Override public void createControl(Composite parent) { // System.out.println("[RecursionObjectEditorPage.createControl]"); //$NON-NLS-1$ if ( mcRecursiveObject == null ) { System.out.println("[RecursionObjectEditorPage.createControl] mcRecursiveObject is NULL"); //$NON-NLS-1$ } roRecursionObject = new RecursionObject( mcRecursiveObject ); pnlRecursionPanel = new RecursionPanel( parent, roRecursionObject ); // WHY DO WE NEED THIS LINE?: // pnlRecursionPanel.setBusinessObject( mcRecursiveObject ); } /* (non-Javadoc) * @See org.teiid.designer.ui.editors.ModelObjectEditor#getControl() */ @Override public Control getControl() { return pnlRecursionPanel; } /* (non-Javadoc) * @See org.teiid.designer.ui.editors.ModelObjectEditor#getTitle() */ @Override public String getTitle() { return TITLE_TEXT + COLON + roRecursionObject.getMappingClass().getName(); } /* (non-Javadoc) * @See org.teiid.designer.ui.editors.ModelObjectEditor#getTitleToolTip() */ @Override public String getTitleToolTip() { return TITLE_TOOLTIP; } /* (non-Javadoc) * @See org.teiid.designer.ui.editors.ModelObjectEditor#getTitleImage() */ @Override public Image getTitleImage() { return null; } @Override public boolean isDirty() { return false; } /** * @see org.teiid.designer.ui.editors.ModelObjectEditorPage#canEdit(java.lang.Object, org.eclipse.ui.IEditorPart) * @since 5.0.1 */ @Override public boolean canEdit(Object modelObject, IEditorPart editor) { if ( modelObject != null && modelObject instanceof MappingClass ) { mcRecursiveObject = (MappingClass)modelObject; return ((MappingClass)modelObject).isRecursionAllowed(); } return false; } /** * @See org.teiid.designer.ui.editors.ModelObjectEditor#edit(org.eclipse.emf.ecore.EObject) */ @Override public void edit( Object modelObject ) { mcRecursiveObject = (MappingClass)modelObject; roRecursionObject = new RecursionObject( mcRecursiveObject ); pnlRecursionPanel.setBusinessObject( roRecursionObject ); } public RecursionObject getRecursionObject( Object modelObject ) { if ( roRecursionObject == null ) { mcRecursiveObject = (MappingClass)modelObject; roRecursionObject = new RecursionObject( mcRecursiveObject ); } return roRecursionObject; } public String getObjectText() { return null; } /* (non-Javadoc) * @See org.teiid.designer.ui.editors.ModelObjectEditor#deactivate() */ @Override public boolean deactivate() { return true; } /* (non-Javadoc) * @See org.teiid.designer.ui.editors.ModelObjectEditor#addPropertyListener(org.eclipse.ui.IPropertyListener) */ @Override public void addPropertyListener(IPropertyListener listener) { } /* (non-Javadoc) * @See org.teiid.designer.ui.editors.ModelObjectEditor#removePropertyListener(org.eclipse.ui.IPropertyListener) */ @Override public void removePropertyListener(IPropertyListener listener) { } /* (non-Javadoc) jhTODO: leave the notifyChanged listening * here in the controller (RecursionObjectEditorPage). * @see org.eclipse.emf.edit.provider.INotifyChangedListener#notifyChanged(org.eclipse.emf.common.notify.Notification) */ @Override public void notifyChanged(Notification notification) { if( shouldProcessNotification(notification) && NotificationUtilities.isChanged(notification) ) { update(); } } private void update() { if( isActive ) { //// icoChoiceObject.refreshFromMetadata(); //// pnlRecursionPanel.refreshFromBusinessObject(); } } private boolean shouldProcessNotification(Notification notification) { //// final Object notifier = ModelerCore.getModelEditor().getChangedObject(notification); //// //Object changedFeature = notification.getFeature(); //// if( notifier != null && NotificationUtilities.isEObjectNotifier(notification) ) { //// EObject eObj = NotificationUtilities.getEObject(notification); //// // Respond to changes in the Current Mapping Root //// if(eObj instanceof TransformationMappingRoot) { //// TransformationMappingRoot notifierMappingRoot = (TransformationMappingRoot)eObj; //// if(notifierMappingRoot.equals(currentMappingRoot)) { //// return true; //// } //// } else if(eObj instanceof SqlTransformation) { //// SqlTransformation notifierSqlTransformation = (SqlTransformation)notifier; //// SqlTransformation currentSqlTransformation = (SqlTransformation)TransformationHelper.getMappingHelper(currentMappingRoot); //// if(notifierSqlTransformation!=null && notifierSqlTransformation.equals(currentSqlTransformation)) { //// return true; //// } //// } //// } return true; } /* (non-Javadoc) * @See org.teiid.designer.ui.editors.ModelObjectEditor#contributeToolbarActions(org.eclipse.jface.action.ToolBarManager) */ @Override public void contributeExportedActions( IMenuManager menu ) { // jhTODO: do we have any actions? I do not think so... if(menu == null) return; } /** * * @see org.teiid.designer.ui.editors.IEditorActionExporter#getAdditionalModelingActions(org.eclipse.jface.viewers.ISelection) * @since 5.0 */ @Override public List<IAction> getAdditionalModelingActions( ISelection selection ) { // jhTODO: do we have any actions? I do not think so... return Collections.EMPTY_LIST; } /* (non-Javadoc) * @See org.teiid.designer.ui.editors.ModelObjectEditor#contributeToolbarActions(org.eclipse.jface.action.ToolBarManager) */ @Override public void contributeToolbarActions(ToolBarManager toolBarMgr) { // System.out.println("[RecursionObjectEditorPage.contributeToolbarActions] TOP"); //$NON-NLS-1$ if(toolBarMgr == null) return; // System.out.println("[RecursionObjectEditorPage.contributeToolbarActions] About to call the panel's contributeToobarActions"); //$NON-NLS-1$ pnlRecursionPanel.contributeToolbarActions( toolBarMgr ); } /* (non-Javadoc) * @See org.teiid.designer.ui.editors.ModelObjectEditorPage#doSave() */ @Override public void doSave(boolean isClosing) { // there's no difference to this panel between isClosing true and false deactivate(); } @Override public Object getAdapter( Class key ) { // System.out.println("[TranformationObjectEditorPage.getAdapter]"); //$NON-NLS-1$ Object oResult = null; // if (key.equals(IFindReplaceTarget.class)) { // if ( hasFocus() ) { // oResult = getCurrentSqlEditor().getTextViewer().getFindReplaceTarget(); // } // } // // if ( StyledText.class.equals( key ) ) { // oResult = getTextWidget(); // } return oResult; } /** * @see org.teiid.designer.ui.editors.ModelObjectEditorPage#updateReadOnlyState() * @since 4.2 */ @Override public void updateReadOnlyState() { } /* (non-Javadoc) * * @See org.teiid.designer.ui.editors.ModelObjectEditorPage#isEditingObject(java.lang.Object) * @since 4.2 */ @Override public boolean isEditingObject(Object modelObject) { if( mcRecursiveObject != null && modelObject instanceof MappingClass ) { if( modelObject.equals(mcRecursiveObject)) return true; } return false; } /** * * @see org.teiid.designer.ui.editors.ModelObjectEditorPage#getEditableObject(java.lang.Object) * @since 4.2 */ @Override public Object getEditableObject(Object modelObject) { if (modelObject != null && modelObject instanceof MappingClass) { if (((MappingClass)modelObject).isRecursionAllowed()) return modelObject; } return null; } /** * * @see org.teiid.designer.ui.editors.ModelObjectEditorPage#isResourceValid() * @since 4.2 */ @Override public boolean isResourceValid() { if( mcRecursiveObject != null ) { ModelResource mr = ModelUtilities.getModelResourceForModelObject(mcRecursiveObject); if( mr != null ) return true; } return false; } /** * Method that handles Events from the SqlEditorPanel. * @param e the EventObject */ @Override public void processEvent(EventObject e) { } /** * Does nothing. * * @see org.teiid.designer.ui.editors.ModelObjectEditorPage#initialize(org.teiid.designer.ui.editors.MultiPageModelEditor) * @since 5.0.1 */ @Override public void initialize(MultiPageModelEditor editor) { if( editor instanceof ModelEditor ) { this.parentModelEditor = (ModelEditor)editor; } } /** * Does nothing. * * @see org.teiid.designer.ui.editors.ModelObjectEditorPage#setOverride(org.teiid.designer.ui.editors.ModelObjectEditorPage) * @since 5.0.1 */ @Override public void setOverride(ModelObjectEditorPage editor) { } @Override public ModelEditor getParentModelEditor() { return this.parentModelEditor; } }