/*
* 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.diagram.ui.pakkage;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.gef.EditPart;
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.PluginConstants;
import org.teiid.designer.diagram.ui.connection.AnchorManager;
import org.teiid.designer.diagram.ui.connection.BlockAnchorManager;
import org.teiid.designer.diagram.ui.connection.DiagramUmlAssociation;
import org.teiid.designer.diagram.ui.connection.DiagramUmlDependency;
import org.teiid.designer.diagram.ui.connection.DiagramUmlGeneralization;
import org.teiid.designer.diagram.ui.connection.NodeConnectionEditPart;
import org.teiid.designer.diagram.ui.editor.DiagramViewer;
import org.teiid.designer.diagram.ui.figure.DiagramFigureFactory;
import org.teiid.designer.diagram.ui.model.LabelModelNode;
import org.teiid.designer.diagram.ui.notation.NotationPartGenerator;
import org.teiid.designer.diagram.ui.notation.uml.part.ForeignKeyLinkEditPart;
import org.teiid.designer.diagram.ui.notation.uml.part.UmlAssociationEditPart;
import org.teiid.designer.diagram.ui.notation.uml.part.UmlAssociationLinkEditPart;
import org.teiid.designer.diagram.ui.notation.uml.part.UmlAttributeEditPart;
import org.teiid.designer.diagram.ui.notation.uml.part.UmlClassifierEditPart;
import org.teiid.designer.diagram.ui.notation.uml.part.UmlDependencyLinkEditPart;
import org.teiid.designer.diagram.ui.notation.uml.part.UmlGeneralizationLinkEditPart;
import org.teiid.designer.diagram.ui.notation.uml.part.UmlOperationEditPart;
import org.teiid.designer.diagram.ui.part.AbstractDefaultEditPart;
import org.teiid.designer.diagram.ui.part.AbstractDiagramEditPart;
import org.teiid.designer.diagram.ui.part.AbstractDiagramEditPartFactory;
import org.teiid.designer.diagram.ui.part.DiagramEditPart;
import org.teiid.designer.diagram.ui.part.LabelEditPart;
import org.teiid.designer.diagram.ui.part.RelationalDropEditPartHelper;
/**
* PackageDiagramPartFactory
*
* @since 8.0
*/
public class PackageDiagramPartFactory extends AbstractDiagramEditPartFactory implements DiagramUiConstants {
private DiagramFigureFactory figureFactory;
private static final String diagramTypeId = PluginConstants.PACKAGE_DIAGRAM_TYPE_ID;
@Override
public EditPart createEditPart( EditPart iContext,
Object iModel ) {
EditPart editPart = createEditPart(iContext, iModel, diagramTypeId);
return editPart;
}
public EditPart createEditPart( EditPart iContext,
Object iModel,
String diagramType ) {
EditPart editPart = null;
if (figureFactory == null) figureFactory = new PackageDiagramFigureFactory();
if (iModel instanceof PackageDiagramNode) {
editPart = new PackageDiagramEditPart();
((AbstractDiagramEditPart)editPart).setFigureFactory(figureFactory);
} else if (iModel instanceof LabelModelNode) {
editPart = new LabelEditPart();
} else if (iModel instanceof DiagramUmlGeneralization) {
editPart = new UmlGeneralizationLinkEditPart();
} else if (iModel instanceof DiagramUmlDependency) {
editPart = new UmlDependencyLinkEditPart();
} else if (iModel instanceof DiagramUmlAssociation) {
editPart = new UmlAssociationLinkEditPart();
} else {
// Here's where we get the notation manager and tell it to create an EditPart
// for this modelObject. So it'll come back in whatever "Notation" it desires.
NotationPartGenerator generator = DiagramUiPlugin.getDiagramNotationManager().getEditPartGenerator(getNotationId());
if (generator != null) {
editPart = generator.createEditPart(iContext, iModel, diagramType);
} else {
ModelerCore.Util.log(IStatus.ERROR, Util.getString(Errors.PART_GENERATOR_FAILURE));
}
}
if (editPart != null) {
if (editPart instanceof NodeConnectionEditPart) {
editPart.setModel(iModel);
((NodeConnectionEditPart)editPart).setDiagramViewer((DiagramViewer)iContext.getViewer());
((NodeConnectionEditPart)editPart).setSourceAndTarget(iContext);
} else if (editPart instanceof DiagramEditPart) {
editPart.setModel(iModel);
((DiagramEditPart)editPart).setNotationId(getNotationId());
((DiagramEditPart)editPart).setSelectionHandler(getSelectionHandler());
((DiagramEditPart)editPart).setDiagramTypeId(diagramType);
if (editPart instanceof UmlClassifierEditPart || editPart instanceof UmlAttributeEditPart
|| editPart instanceof UmlAssociationEditPart || editPart instanceof UmlOperationEditPart) {
((AbstractDefaultEditPart)editPart).setDropHelper(new RelationalDropEditPartHelper((DiagramEditPart)editPart));
}
}
} else {
if (diagramType.equals(diagramTypeId)) ModelerCore.Util.log(IStatus.ERROR, Util.getString(Errors.EDIT_PART_FAILURE));
}
if (editPart instanceof DiagramEditPart) {
((DiagramEditPart)editPart).setUnderConstruction(true);
}
return editPart;
}
/* (non-Javadoc)
* @See org.teiid.designer.diagram.ui.part.DiagramEditPartFactory#getConnectionEditPart()
*/
@Override
public NodeConnectionEditPart getConnectionEditPart() {
return new ForeignKeyLinkEditPart();
}
/* (non-Javadoc)
* @See org.teiid.designer.diagram.ui.part.DiagramEditPartFactory#getAnchorManager(org.teiid.designer.diagram.ui.part.DiagramEditPart)
*/
@Override
public AnchorManager getAnchorManager( DiagramEditPart editPart ) {
return new BlockAnchorManager(editPart);
}
}