/******************************************************************************* | |
* <copyright> | |
* | |
* Copyright (c) 2013, 2013 SAP AG. | |
* 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: | |
* SAP AG - initial API, implementation and documentation | |
* | |
* </copyright> | |
* | |
*******************************************************************************/ | |
package org.eclipse.fmc.blockdiagram.editor.meta; | |
import org.eclipse.emf.ecore.impl.EObjectImpl; | |
import org.eclipse.fmc.blockdiagram.editor.meta.features.add.AccessAddMetaFeature; | |
import org.eclipse.fmc.blockdiagram.editor.meta.features.add.AgentAddMetaFeature; | |
import org.eclipse.fmc.blockdiagram.editor.meta.features.add.HumanAgentAddMetaFeature; | |
import org.eclipse.fmc.blockdiagram.editor.meta.features.add.StorageAddMetaFeature; | |
import org.eclipse.graphiti.features.context.IAddContext; | |
import org.eclipse.fmc.blockdiagram.editor.BlockDiagramConstants; | |
import org.eclipse.fmc.blockdiagram.editor.features.add.AreaBorderAddFeature; | |
import org.eclipse.fmc.blockdiagram.editor.features.add.BraceAddFeature; | |
import org.eclipse.fmc.blockdiagram.editor.features.add.CommonFeatureAreaAddFeature; | |
import org.eclipse.fmc.blockdiagram.editor.features.add.CommunicationChannelAddFeature; | |
import org.eclipse.fmc.blockdiagram.editor.features.add.DotsShapeAddFeature; | |
import org.eclipse.fmc.blockdiagram.editor.features.add.ImageAddFeature; | |
import org.eclipse.fmc.blockdiagram.editor.features.add.StructureVarianceAddFeature; | |
import org.eclipse.fmc.blockdiagram.editor.features.add.TextAddFeature; | |
import org.eclipse.fmc.blockdiagram.editor.model.ConnectionStyle; | |
import org.eclipse.fmc.blockdiagram.editor.model.ShapeStyle; | |
import org.eclipse.fmc.mm.Access; | |
import org.eclipse.fmc.mm.Agent; | |
import org.eclipse.fmc.mm.Channel; | |
import org.eclipse.fmc.mm.Comment; | |
import org.eclipse.fmc.mm.FMCElement; | |
import org.eclipse.fmc.mm.IFMCElementVisitor; | |
import org.eclipse.fmc.mm.Storage; | |
import org.eclipse.fmc.mm.StructureVariance; | |
/** | |
* Visitor for getting the right AddFeature. | |
* | |
* @author Patrick Jahnke | |
* | |
*/ | |
public class AddFeatureVisitor extends EObjectImpl implements | |
IFMCElementVisitor { | |
/** The FeatureProvider which the AddFeature need. */ | |
private BlockDiagramMetaFeatureProvider featureProvider; | |
/** | |
* Create a new visitor for getting the right AddFeature. | |
* | |
* @param featureProvider | |
* The FeatureProvider which the AddFeature need. | |
*/ | |
public AddFeatureVisitor(BlockDiagramMetaFeatureProvider featureProvider) { | |
this.featureProvider = featureProvider; | |
} | |
/** | |
* Generic visit method which is calling the accept method of the given | |
* FMCElement object which is calling the special method of this visitor. | |
*/ | |
@Override | |
public Object visit(FMCElement element, Object object) { | |
return element.accept(this, object); | |
} | |
/** | |
* Return the right AddFeature for the comment object. | |
*/ | |
@Override | |
public Object visitComment(Comment comment, Object object) { | |
switch (comment.getType()) { | |
case BRACE: | |
return new BraceAddFeature(featureProvider); | |
case IMAGE: | |
return new ImageAddFeature(featureProvider, ((IAddContext) object) | |
.getProperty("imageid").toString()); | |
case AREABORDER: | |
return new AreaBorderAddFeature(featureProvider); | |
case COMMONFEATUREAREA: | |
return new CommonFeatureAreaAddFeature(featureProvider); | |
case TEXT: | |
return new TextAddFeature(featureProvider); | |
case DOTS: | |
return new DotsShapeAddFeature(featureProvider); | |
default: | |
return null; | |
} | |
} | |
/** | |
* Return a new AccessAddMetaFeature object. | |
*/ | |
@Override | |
public Object visitAccess(Access access, Object object) { | |
return new AccessAddMetaFeature( | |
featureProvider, | |
(ConnectionStyle) ((IAddContext) object) | |
.getProperty(BlockDiagramConstants.GRAPHICAL_TYPE_KEY)); | |
} | |
/** | |
* Return a new CommunicationChannelAddFeature object. | |
*/ | |
@Override | |
public Object visitChannel(Channel channel, Object object) { | |
return new CommunicationChannelAddFeature( | |
featureProvider, | |
(ConnectionStyle) ((IAddContext) object) | |
.getProperty(BlockDiagramConstants.GRAPHICAL_TYPE_KEY)); | |
} | |
/** | |
* Return the right AddFeature for the agent object. | |
*/ | |
@Override | |
public Object visitAgent(Agent agent, Object object) { | |
if (agent.isHuman()) { | |
ShapeStyle style = (ShapeStyle) ((IAddContext) object) | |
.getProperty(BlockDiagramConstants.GRAPHICAL_TYPE_KEY); | |
return new HumanAgentAddMetaFeature(featureProvider, style); | |
} | |
ShapeStyle style = (ShapeStyle) ((IAddContext) object) | |
.getProperty(BlockDiagramConstants.GRAPHICAL_TYPE_KEY); | |
return new AgentAddMetaFeature(featureProvider, style); | |
} | |
/** | |
* Return a new StorageAddMetaFeature object. | |
*/ | |
@Override | |
public Object visitStorage(Storage storage, Object object) { | |
ShapeStyle style = (ShapeStyle) ((IAddContext) object) | |
.getProperty(BlockDiagramConstants.GRAPHICAL_TYPE_KEY); | |
return new StorageAddMetaFeature(featureProvider, style); | |
} | |
/** | |
* Return a new StructureVarianceAddFeature object. | |
*/ | |
@Override | |
public Object visitStructureVariance(StructureVariance structureVariance, | |
Object object) { | |
return new StructureVarianceAddFeature(featureProvider); | |
} | |
} |