/* * 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.figure; import org.eclipse.core.runtime.IStatus; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.Figure; import org.eclipse.draw2d.FreeformLayer; import org.eclipse.draw2d.FreeformLayout; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.preference.PreferenceConverter; import org.eclipse.swt.graphics.Image; 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.model.DiagramModelNode; import org.teiid.designer.diagram.ui.notation.NotationFigureGenerator; import org.teiid.designer.diagram.ui.notation.uml.model.UmlClassifierNode; import org.teiid.designer.diagram.ui.util.colors.ColorPalette; import org.teiid.designer.mapping.ui.PluginConstants; import org.teiid.designer.mapping.ui.UiConstants; import org.teiid.designer.mapping.ui.diagram.MappingDiagramUtil; import org.teiid.designer.mapping.ui.editor.SummaryExtent; import org.teiid.designer.mapping.ui.model.MappingDiagramNode; import org.teiid.designer.mapping.ui.model.MappingExtentNode; import org.teiid.designer.mapping.ui.model.SummaryExtentNode; import org.teiid.designer.metamodels.diagram.Diagram; import org.teiid.designer.metamodels.transformation.StagingTable; import org.teiid.designer.transformation.ui.figure.TransformationFigure; import org.teiid.designer.transformation.ui.model.TransformationNode; import org.teiid.designer.ui.common.graphics.GlobalUiColorManager; /** * MappingDiagramFigureFactory * * @since 8.0 */ public class MappingDiagramFigureFactory extends AbstractDiagramFigureFactory implements UiConstants { private static final int EXTENT = 1; private static final int DIAGRAM = 0; private static final int STAGING_TABLE_EXTENT = 2; private static final int TRANSFORM = 3; private static final int SUMMARY_EXTENT = 4; /** * Construct an instance of UmlFigureFactory. */ public MappingDiagramFigureFactory() { super(); } @Override public Figure createFigure( Object modelObject, String sNotationId ) { // System.out.println("[MappingDiagramFigureFactory.createFigure] modelObject: " + modelObject ); Figure newFigure = null; switch (getObjectType(modelObject)) { case EXTENT: case DIAGRAM: case SUMMARY_EXTENT: { // jh Lyra enh: not sure about this 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 (modelObject instanceof UmlClassifierNode) { // Check to see if it's a Staging table, then set the hideLocation to TRUE EObject eObj = ((DiagramModelNode)modelObject).getModelObject(); if (MappingDiagramUtil.isMappingSqlTable(eObj)) { // System.out.println("[MappingDiagramFigureFactory.createFigure] Is this a Staging Table? eObj: " + eObj // ); ((DiagramModelNode)modelObject).setHideLocation(true); } } 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; switch (getObjectType(modelObject)) { case DIAGRAM: { Diagram diagram = (Diagram)((DiagramModelNode)modelObject).getModelObject(); if (MappingDiagramUtil.isDetailedDiagram(diagram)) { newFigure = new MappingDiagramFigure(); } else { 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); RGB currentBkgdColor = PreferenceConverter.getColor(DiagramUiPlugin.getDefault().getPreferenceStore(), PluginConstants.Prefs.Appearance.MAPPING_BKGD_COLOR); newFigure.setBackgroundColor(GlobalUiColorManager.getColor(currentBkgdColor)); } } break; case EXTENT: { // We need to get the color palette for the staging table instead of the location MappingExtentNode mExtentNode = (MappingExtentNode)modelObject; colorPalette = getColorPalette(((DiagramModelNode)modelObject).getModelObject()); // set default color for non-standard MappingExtents if (!mExtentNode.getExtent().isCompletelyMapped()) { if (mExtentNode.getExtent().isMappingRequired()) { // newFigure.setBackgroundColor( ColorConstants.red ); // set 'required'/unmapped to red colorPalette.setColor(ColorPalette.PRIMARY_BKGD_COLOR_ID, UiConstants.Colors.REQUIRES_MAPPING); colorPalette.setColor(ColorPalette.OUTLINE_COLOR_ID, ColorConstants.black); } else { // set 'not required'/unmapped to yellow colorPalette.setColor(ColorPalette.PRIMARY_BKGD_COLOR_ID, UiConstants.Colors.UNMAPPED); colorPalette.setColor(ColorPalette.OUTLINE_COLOR_ID, ColorConstants.black); } } newFigure = new MappingExtentFigure(null, colorPalette); } break; case STAGING_TABLE_EXTENT: { // We need to get the color palette for the staging table instead of the location MappingExtentNode mExtentNode = (MappingExtentNode)modelObject; EObject mappingRefEObject = mExtentNode.getExtent().getMappingReference(); if (mappingRefEObject != null && mappingRefEObject instanceof StagingTable) { colorPalette = getColorPalette(mappingRefEObject); } if (colorPalette == null) { colorPalette = getColorPalette(((DiagramModelNode)modelObject).getModelObject()); } newFigure = new MappingExtentFigure(null, colorPalette); } break; case TRANSFORM: { colorPalette = getColorPalette(((DiagramModelNode)modelObject).getModelObject()); newFigure = new TransformationFigure((TransformationNode)modelObject, "T", colorPalette); //$NON-NLS-1$ } break; case SUMMARY_EXTENT: { /* * jh Lyra enh: In old code EXTENT is lumped in with Staging Table; I have * given the new SUMMARY EXTENT its own. You might clean up the other * before you are done. */ // System.out.println("[MappingDiagramFigureFactory.createFigure#SUMMARY_EXTENT] "); // We need to get the color palette for the Summary Extent instead of the location SummaryExtentNode sExtentNode = (SummaryExtentNode)modelObject; SummaryExtent seExtent = (SummaryExtent)sExtentNode.getExtent(); // MappingExtent colorPalette = getColorPalette(((DiagramModelNode)modelObject).getModelObject()); // Looks like we'll need to pass the style in the constructor Image imgImage = sExtentNode.getImage(); int iImagePosition = sExtentNode.getImagePosition(); newFigure = new SummaryExtentFigure(seExtent.getMappingClassColumnCount(), seExtent.getUnmappedNodeCount(), colorPalette, seExtent.getSomeMappingClassesAreVisible(), imgImage, iImagePosition); } break; // Delegate to the UML figure factory to make figures for all other model types. default: { } break; } return newFigure; } protected int getObjectType( Object modelObject ) { // System.out.println("\n\n\n[MappingDiagramFigureFactory.getObjectType] TOP"); int objectType = -1; if (modelObject != null) { if (modelObject instanceof MappingDiagramNode) { objectType = DIAGRAM; } else if (modelObject instanceof SummaryExtentNode) { // special trick: because SummaryExtentNode is a subclass of MappingExtentNode, // we must test for it first, otherwise all SummaryExtentNodes // will pass the MappingExtentNode instanceof test and be treated // like MappingExtentNodes. objectType = SUMMARY_EXTENT; } else if (modelObject instanceof MappingExtentNode) { if (((MappingExtentNode)modelObject).getExtent().getMappingReference() instanceof StagingTable) { objectType = STAGING_TABLE_EXTENT; } else { objectType = EXTENT; } } else if (modelObject instanceof TransformationNode) { objectType = TRANSFORM; } } return objectType; } private ColorPalette getColorPalette( EObject eObject ) { return DiagramUiPlugin.getDiagramTypeManager().getDiagram(PluginConstants.MAPPING_DIAGRAM_TYPE_ID).getColorPaletteManager().getColorPalette(eObject); } }