blob: 9ab1fff2b4cdb24c30571a6850986535d69ee77e [file] [log] [blame]
/*******************************************************************************
* <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);
}
}