| /******************************************************************************* |
| * Copyright (c) 2001, 2007 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.wst.xsd.ui.internal.design.editparts; |
| |
| import org.eclipse.gef.EditPart; |
| import org.eclipse.wst.xsd.ui.internal.adapters.CategoryAdapter; |
| import org.eclipse.wst.xsd.ui.internal.adapters.XSDAttributeGroupDefinitionAdapter; |
| import org.eclipse.wst.xsd.ui.internal.adapters.XSDBaseAdapter; |
| import org.eclipse.wst.xsd.ui.internal.adapters.XSDModelGroupAdapter; |
| import org.eclipse.wst.xsd.ui.internal.adapters.XSDModelGroupDefinitionAdapter; |
| import org.eclipse.wst.xsd.ui.internal.adapters.XSDSchemaAdapter; |
| import org.eclipse.wst.xsd.ui.internal.adapters.XSDSimpleTypeDefinitionAdapter; |
| import org.eclipse.wst.xsd.ui.internal.adt.design.editparts.ADTEditPartFactory; |
| import org.eclipse.wst.xsd.ui.internal.adt.design.editparts.ColumnEditPart; |
| import org.eclipse.wst.xsd.ui.internal.adt.design.editparts.CompartmentEditPart; |
| import org.eclipse.wst.xsd.ui.internal.adt.design.editparts.model.Annotation; |
| import org.eclipse.wst.xsd.ui.internal.adt.design.figures.ICompartmentFigure; |
| import org.eclipse.wst.xsd.ui.internal.adt.design.figures.IFieldFigure; |
| import org.eclipse.wst.xsd.ui.internal.adt.design.figures.IStructureFigure; |
| import org.eclipse.wst.xsd.ui.internal.adt.facade.IField; |
| import org.eclipse.wst.xsd.ui.internal.adt.typeviz.design.figures.TypeVizFigureFactory; |
| import org.eclipse.wst.xsd.ui.internal.common.util.XSDCommonUIUtils; |
| import org.eclipse.wst.xsd.ui.internal.design.editparts.model.SpaceFiller; |
| import org.eclipse.wst.xsd.ui.internal.design.editparts.model.TargetConnectionSpaceFiller; |
| import org.eclipse.wst.xsd.ui.internal.design.figures.IExtendedFigureFactory; |
| import org.eclipse.wst.xsd.ui.internal.design.figures.IModelGroupFigure; |
| import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin; |
| import org.eclipse.xsd.XSDConcreteComponent; |
| |
| public class XSDEditPartFactory extends ADTEditPartFactory implements IExtendedFigureFactory |
| { |
| protected IExtendedFigureFactory delegate; |
| |
| public XSDEditPartFactory() |
| { |
| delegate = XSDEditorPlugin.getPlugin().getXSDEditorConfiguration().getFigureFactory(); |
| if (delegate == null) |
| delegate = new TypeVizFigureFactory(); |
| } |
| |
| public XSDEditPartFactory(IExtendedFigureFactory figureFactory) |
| { |
| delegate = figureFactory; |
| } |
| |
| |
| public EditPart doCreateEditPart(EditPart context, Object model) |
| { |
| EditPart child = null; |
| // Override edit part where desired |
| |
| if (model instanceof IField) |
| { |
| if (model instanceof SpaceFiller) |
| { |
| child = new SpaceFillerForFieldEditPart(); |
| } |
| else if (context instanceof CompartmentEditPart) |
| { |
| child = new XSDBaseFieldEditPart(); |
| } |
| } |
| else if (model instanceof XSDSchemaAdapter) |
| { |
| child = new XSDSchemaEditPart(); |
| } |
| else if (model instanceof CategoryAdapter) |
| { |
| child = new CategoryEditPart(); |
| } |
| else if (model instanceof XSDSimpleTypeDefinitionAdapter) |
| { |
| child = new XSDSimpleTypeEditPart(); |
| } |
| else if (model instanceof XSDModelGroupAdapter) |
| { |
| child = new ModelGroupEditPart(); |
| } |
| else if (model instanceof Annotation) |
| { |
| Annotation annotation = (Annotation) model; |
| String kind = annotation.getCompartment().getKind(); |
| if (kind.equals("element")) //$NON-NLS-1$ |
| { |
| child = new XSDGroupsForAnnotationEditPart(); |
| } |
| else if (kind.equals("attribute")) //$NON-NLS-1$ |
| { |
| child = new XSDAttributesForAnnotationEditPart(); |
| } |
| } |
| else if (!(context instanceof ColumnEditPart)) |
| { |
| if (model instanceof TargetConnectionSpaceFiller) |
| { |
| child = new TargetConnectionSpacingFigureEditPart(); |
| } |
| else if (model instanceof XSDModelGroupDefinitionAdapter) |
| { |
| child = new ModelGroupDefinitionReferenceEditPart(); |
| } |
| else if (model instanceof XSDAttributeGroupDefinitionAdapter) |
| { |
| child = new AttributeGroupDefinitionEditPart(); |
| } |
| } |
| // if we don't have a specialzied XSD edit part to create |
| // then we simply call the super class to create a generic ADT edit part |
| // |
| if (child == null) |
| { |
| child = super.doCreateEditPart(context, model); |
| } |
| |
| // if at this this point we have not created an edit part we simply |
| // create a placeholder edit part to provide the most robust behaviour possible |
| // |
| if (child == null) |
| { |
| // TODO (cs) log an error message here, since we shouldn't really get here |
| child = new SpaceFillerForFieldEditPart(); |
| } |
| return child; |
| } |
| |
| public ICompartmentFigure createCompartmentFigure(Object model) |
| { |
| return delegate.createCompartmentFigure(model); |
| } |
| |
| public IStructureFigure createStructureFigure(Object model) |
| { |
| IStructureFigure figure = delegate.createStructureFigure(model); |
| if (model instanceof XSDBaseAdapter) |
| { |
| XSDConcreteComponent comp = (XSDConcreteComponent) ((XSDBaseAdapter)model).getTarget(); |
| boolean isReadOnly = ((XSDBaseAdapter)model).isReadOnly(); |
| figure.getNameLabel().setIcon(XSDCommonUIUtils.getUpdatedImage( comp, ((XSDBaseAdapter)model).getImage(), isReadOnly)); |
| } |
| return figure; |
| } |
| |
| public IFieldFigure createFieldFigure(Object model) |
| { |
| return delegate.createFieldFigure(model); |
| } |
| |
| public IModelGroupFigure createModelGroupFigure(Object model) |
| { |
| return delegate.createModelGroupFigure(model); |
| } |
| } |