/* * 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.figure; import org.eclipse.core.runtime.IStatus; import org.eclipse.draw2d.Figure; import org.eclipse.draw2d.FreeformLayer; import org.eclipse.draw2d.FreeformLayout; import org.eclipse.jface.preference.PreferenceConverter; import org.eclipse.swt.graphics.RGB; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.diagram.ui.DiagramUiConstants; import org.teiid.designer.diagram.ui.DiagramUiPlugin; import org.teiid.designer.diagram.ui.figure.AbstractDiagramFigureFactory; import org.teiid.designer.diagram.ui.figure.DiagramFigure; import org.teiid.designer.diagram.ui.model.DiagramModelNode; import org.teiid.designer.diagram.ui.notation.NotationFigureGenerator; import org.teiid.designer.diagram.ui.util.colors.ColorPalette; import org.teiid.designer.metamodels.diagram.Diagram; import org.teiid.designer.transformation.ui.PluginConstants; import org.teiid.designer.transformation.ui.UiConstants; import org.teiid.designer.transformation.ui.model.TransformationDiagramNode; import org.teiid.designer.transformation.ui.model.TransformationNode; import org.teiid.designer.ui.common.graphics.GlobalUiColorManager; /** * TransformationFigureFactory * * @since 8.0 */ public class TransformationDiagramFigureFactory extends AbstractDiagramFigureFactory implements UiConstants { private static final int TRANSFORM = 1; private static final int TRANSFORM_DIAGRAM = 0; private static final int DEPENEDNCY_DIAGRAM = 2; /** * Construct an instance of UmlFigureFactory. * */ public TransformationDiagramFigureFactory() { super(); } @Override public Figure createFigure(Object modelObject, String sNotationId ) { Figure newFigure = null; switch( getObjectType(modelObject) ) { case TRANSFORM: case DEPENEDNCY_DIAGRAM: case TRANSFORM_DIAGRAM: { newFigure = createFigure(modelObject); } break; // Delegate to the UML figure factory to make figures for all other model types. default: { // Here's where we get the notation manager and tell it to create a figure // for this modelObject. So it'll come back in whatever "Notation" it desires. NotationFigureGenerator generator = DiagramUiPlugin.getDiagramNotationManager().getFigureGenerator(sNotationId); if( generator != null ) newFigure = generator.createFigure(modelObject); else { ModelerCore.Util.log( IStatus.ERROR, Util.getString(DiagramUiConstants.Errors.FIGURE_GENERATOR_FAILURE)); } } break; } return newFigure; } @Override public Figure createFigure(Object modelObject) { Figure newFigure = null; ColorPalette colorPalette = null; int objectType = getObjectType(modelObject); switch( objectType ) { case DEPENEDNCY_DIAGRAM: case TRANSFORM_DIAGRAM: { if (objectType == DEPENEDNCY_DIAGRAM) { newFigure = new FreeformLayer(); newFigure.setLayoutManager(new FreeformLayout()); // Don't know why, but if you don't setOpaque(true), you cannot move by drag&drop! newFigure.setOpaque(true); // dependency: RGB currentBkgdColor = PreferenceConverter.getColor( DiagramUiPlugin.getDefault().getPreferenceStore(), PluginConstants.Prefs.Appearance.DEPENDENCY_BKGD_COLOR); newFigure.setBackgroundColor(GlobalUiColorManager.getColor(currentBkgdColor)); } else { newFigure = new TransformationDiagramFigure((DiagramModelNode)modelObject); } // endif } break; case TRANSFORM: { TransformationNode tNode = (TransformationNode)modelObject; colorPalette = getColorPalette((DiagramModelNode)modelObject); newFigure = new TransformationFigure(tNode, "T", colorPalette); //$NON-NLS-1$ // Now let's find out if this is a union query if( tNode.isUnion() ) { ((TransformationFigure)newFigure).setSubscript("u"); //$NON-NLS-1$ } // Need to notify t-objects to update their error/warning status if( modelObject instanceof DiagramModelNode ) { DiagramModelNode node = (DiagramModelNode)modelObject; ((DiagramFigure)newFigure).setDiagramModelNode(node); if( node.hasErrors()) ((DiagramFigure)newFigure).updateForError(true); else if( node.hasWarnings() ) ((DiagramFigure)newFigure).updateForWarning(true); } } break; // Delegate to the UML figure factory to make figures for all other model types. default: { } break; } return newFigure; } private int getObjectType( Object modelObject ) { int objectType = -1; if( modelObject != null ) { if (modelObject instanceof TransformationDiagramNode) { // look deeper, to see if a dependency diagram: Diagram d = (Diagram) ((TransformationDiagramNode)modelObject).getModelObject(); if (d.getType() != null && d.getType().equals(PluginConstants.DEPENDENCY_DIAGRAM_TYPE_ID)) { // we are a dependency diagram: objectType = DEPENEDNCY_DIAGRAM; } else { // regular diagram: objectType = TRANSFORM_DIAGRAM; } // endif -- diagram type } else if (modelObject instanceof TransformationNode) { objectType = TRANSFORM; } } return objectType; } private ColorPalette getColorPalette(DiagramModelNode node) { return DiagramUiPlugin. getDiagramTypeManager().getDiagram(PluginConstants.TRANSFORMATION_DIAGRAM_TYPE_ID). getColorPaletteManager().getColorPalette(node.getModelObject()); } }