/** * Copyright 2004-2016 Riccardo Solmi. All rights reserved. * This file is part of the Whole Platform. * The Whole Platform is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * The Whole Platform is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General Public License * along with the Whole Platform. If not, see <http://www.gnu.org/licenses/>. */ package org.whole.lang.patterns.ui.editparts; import org.eclipse.gef.EditPart; import org.whole.lang.matchers.Matcher; import org.whole.lang.model.IEntity; import org.whole.lang.patterns.model.Arguments; import org.whole.lang.patterns.model.Binding; import org.whole.lang.patterns.model.BooleanValue; import org.whole.lang.patterns.model.Choice; import org.whole.lang.patterns.model.ConditionPoint; import org.whole.lang.patterns.model.Cut; import org.whole.lang.patterns.model.Data; import org.whole.lang.patterns.model.DataType; import org.whole.lang.patterns.model.Declarations; import org.whole.lang.patterns.model.DerivationPoint; import org.whole.lang.patterns.model.EnumValue; import org.whole.lang.patterns.model.EnumValues; import org.whole.lang.patterns.model.Enumeration; import org.whole.lang.patterns.model.FunctionDeclaration; import org.whole.lang.patterns.model.FunctionPoint; import org.whole.lang.patterns.model.FunctionStep; import org.whole.lang.patterns.model.GoalDeclaration; import org.whole.lang.patterns.model.GoalStep; import org.whole.lang.patterns.model.IPatternsEntity; import org.whole.lang.patterns.model.InlinePoint; import org.whole.lang.patterns.model.Insert; import org.whole.lang.patterns.model.InsertionPoint; import org.whole.lang.patterns.model.IterationPoint; import org.whole.lang.patterns.model.JoinPoint; import org.whole.lang.patterns.model.JoinPointDeclaration; import org.whole.lang.patterns.model.JoinPointStep; import org.whole.lang.patterns.model.Library; import org.whole.lang.patterns.model.Name; import org.whole.lang.patterns.model.Namespace; import org.whole.lang.patterns.model.OuterDefinitionStep; import org.whole.lang.patterns.model.Pattern; import org.whole.lang.patterns.model.PatternApplication; import org.whole.lang.patterns.model.PatternInstance; import org.whole.lang.patterns.model.PatternJoinPointStep; import org.whole.lang.patterns.model.PatternLanguage; import org.whole.lang.patterns.model.PatternTypeTest; import org.whole.lang.patterns.model.Patterns; import org.whole.lang.patterns.model.Placement; import org.whole.lang.patterns.model.PointcutDeclaration; import org.whole.lang.patterns.model.PointcutStep; import org.whole.lang.patterns.model.Repetition; import org.whole.lang.patterns.model.ResultPoint; import org.whole.lang.patterns.model.ResultTypes; import org.whole.lang.patterns.model.ScopePoint; import org.whole.lang.patterns.model.SelectionPoint; import org.whole.lang.patterns.model.SequencePoint; import org.whole.lang.patterns.model.Slot; import org.whole.lang.patterns.model.SlotStep; import org.whole.lang.patterns.model.SlotsDefined; import org.whole.lang.patterns.model.TemplatePoint; import org.whole.lang.patterns.model.Types; import org.whole.lang.patterns.model.URI; import org.whole.lang.patterns.model.VariableDeclaration; import org.whole.lang.patterns.model.VariablePoint; import org.whole.lang.patterns.model.Variant; import org.whole.lang.patterns.model.VariantSelectionPoint; import org.whole.lang.patterns.model.VariantSelector; import org.whole.lang.patterns.model.Variants; import org.whole.lang.patterns.model.Version; import org.whole.lang.patterns.reflect.PatternsEntityDescriptorEnum; import org.whole.lang.patterns.visitors.PatternsIdentityDefaultVisitor; import org.whole.lang.ui.editparts.CommaSeparatedCompositeFlowPart; import org.whole.lang.ui.editparts.ContentLightDataEntityPart; import org.whole.lang.ui.editparts.ContentTextualEntityPart; import org.whole.lang.ui.editparts.DeclarationTextualEntityPart; import org.whole.lang.ui.editparts.IEditPartFactory; import org.whole.lang.ui.editparts.IdentifierTextualEntityPart; import org.whole.lang.ui.editparts.LiteralTextualEntityPart; import org.whole.lang.ui.editparts.ModuleNameTextualEntityPart; import org.whole.lang.ui.editparts.ModuleNamespaceTextualEntityPart; import org.whole.lang.ui.notations.table.editparts.TablePartFactory; import org.whole.lang.util.EntityUtils; /** * @author Riccardo Solmi */ public class PatternsPartFactoryVisitor extends PatternsIdentityDefaultVisitor implements IEditPartFactory { protected EditPart part, context; public EditPart createEditPart(EditPart context, Object modelEntity) { this.context = context; ((IPatternsEntity) modelEntity).accept(this); return part; } public void visit(IPatternsEntity entity) { part = TablePartFactory.instance().createEditPart(context, entity); } @Override public void visit(Library entity) { part = new LibraryPart(); } @Override public void visit(PatternLanguage entity) { part = new PatternLanguagePart(); } @Override public void visit(Patterns entity) { part = new PatternsPart(); } @Override public void visit(Pattern entity) { part = new PatternPart(); } @Override public void visit(PatternApplication entity) { part = new PatternApplicationPart(); } @Override public void visit(PatternInstance entity) { part = new PatternInstancePart(); } @Override public void visit(Arguments entity) { part = new ArgumentsPart(); } @Override public void visit(Binding entity) { part = new BindingPart(); } @Override public void visit(VariablePoint entity) { part = new VariablePointPart(); } @Override public void visit(FunctionPoint entity) { part = new FunctionPointPart(); } @Override public void visit(Slot entity) { part = new SlotPart(); } @Override public void visit(BooleanValue entity) { part = new ContentLightDataEntityPart(); } @Override public void visit(ResultPoint entity) { part = new ResultPointPart(); } @Override public void visit(JoinPoint entity) { part = new JoinPointPart(); } @Override public void visit(InsertionPoint entity) { part = new InsertionPointPart(); } @Override public void visit(ScopePoint entity) { part = new ScopePointPart(); } @Override public void visit(TemplatePoint entity) { part = new TemplatePointPart(); } @Override public void visit(DerivationPoint entity) { part = new DerivationPointPart(); } @Override public void visit(SelectionPoint entity) { part = new SelectionPointPart(); } @Override public void visit(ConditionPoint entity) { if (EntityUtils.hasParent(entity)) { IEntity parent = entity.wGetParent(); if (Matcher.match(PatternsEntityDescriptorEnum.SelectionPoint, parent)) { part = new ConditionPointRowPart(); return; } } part = new ConditionPointPart(); } @Override public void visit(IterationPoint entity) { if (EntityUtils.hasParent(entity)) { IEntity parent = entity.wGetParent(); if (Matcher.match(PatternsEntityDescriptorEnum.SelectionPoint, parent)) { part = new IterationPointRowPart(); return; } } part = new IterationPointPart(); } @Override public void visit(SequencePoint entity) { part = new SequencePointPart(); } @Override public void visit(InlinePoint entity) { part = new InlinePointPart(); } @Override public void visit(VariantSelectionPoint entity) { part = new VariantSelectionPointPart(); } @Override public void visit(Variants entity) { part = new VariantsPart(); } @Override public void visit(Variant entity) { part = new VariantPart(); } @Override public void visit(VariantSelector entity) { part = new VariantSelectorPart(); } @Override public void visit(Declarations entity) { part = new DeclarationsPart(); } @Override public void visit(FunctionDeclaration entity) { part = new FunctionDeclarationPart(); } @Override public void visit(GoalDeclaration entity) { part = new GoalDeclarationPart(); } @Override public void visit(PointcutDeclaration entity) { part = new PointcutDeclarationPart(); } @Override public void visit(JoinPointDeclaration entity) { part = new JoinPointDeclarationPart(); } @Override public void visit(VariableDeclaration entity) { part = new VariableDeclarationPart(); } @Override public void visit(Types entity) { part = new CommaSeparatedCompositeFlowPart(); } @Override public void visit(ResultTypes entity) { super.visit(entity); //part = new ResultTypesPart(); } @Override public void visit(Repetition entity) { part = new RepetitionPart(); } @Override public void visit(Choice entity) { part = new ChoicePart(); } @Override public void visit(Enumeration entity) { part = new EnumerationPart(); } @Override public void visit(EnumValues entity) { part = new EnumValuesPart(); } @Override public void visit(EnumValue entity) { super.visit(entity); //part = new EnumValuePart(); } @Override public void visit(Data entity) { part = new DataPart(); } @Override public void visit(DataType entity) { part = new LiteralTextualEntityPart(); } @Override public void visit(Name entity) { if (EntityUtils.hasParent(entity)) { IEntity parent = entity.wGetParent(); int parentOrd = parent.wGetEntityDescriptor().getOrdinal(); switch (parentOrd) { case PatternsEntityDescriptorEnum.Pattern_ord: case PatternsEntityDescriptorEnum.Repetition_ord: case PatternsEntityDescriptorEnum.Choice_ord: case PatternsEntityDescriptorEnum.Enumeration_ord: case PatternsEntityDescriptorEnum.Data_ord: case PatternsEntityDescriptorEnum.PatternApplication_ord: case PatternsEntityDescriptorEnum.PatternInstance_ord: case PatternsEntityDescriptorEnum.FunctionDeclaration_ord: case PatternsEntityDescriptorEnum.FunctionPoint_ord: part = new DeclarationTextualEntityPart(); return; case PatternsEntityDescriptorEnum.PointcutDeclaration_ord: part = new PointcutStepPart(); return; case PatternsEntityDescriptorEnum.GoalDeclaration_ord: part = new GoalStepPart(); return; case PatternsEntityDescriptorEnum.VariablePoint_ord: case PatternsEntityDescriptorEnum.VariableDeclaration_ord: case PatternsEntityDescriptorEnum.VariantSelectionPoint_ord: case PatternsEntityDescriptorEnum.Variant_ord: part = new IdentifierTextualEntityPart(); return; case PatternsEntityDescriptorEnum.JoinPointDeclaration_ord: part = new JoinPointStepPart(); return; case PatternsEntityDescriptorEnum.VariantSelector_ord: part = new VariabilityNamePart(); return; case PatternsEntityDescriptorEnum.JoinPoint_ord: part = new ContentTextualEntityPart(); return; case PatternsEntityDescriptorEnum.PatternLanguage_ord: case PatternsEntityDescriptorEnum.Library_ord: part = new ModuleNameTextualEntityPart(); return; case PatternsEntityDescriptorEnum.EnumValue_ord: part = new LiteralTextualEntityPart(); return; case PatternsEntityDescriptorEnum.Binding_ord: case PatternsEntityDescriptorEnum.Slot_ord: case PatternsEntityDescriptorEnum.InsertionPoint_ord: part = new ContentTextualEntityPart(); return; } } part = new ContentTextualEntityPart(); } @Override public void visit(PatternJoinPointStep entity) { super.visit(entity); //part = new PatternJoinPointStepPart(); } @Override public void visit(JoinPointStep entity) { part = new JoinPointStepPart(); } @Override public void visit(PointcutStep entity) { part = new PointcutStepPart(); } @Override public void visit(GoalStep entity) { part = new GoalStepPart(); } @Override public void visit(FunctionStep entity) { part = new FunctionStepPart(); } @Override public void visit(SlotStep entity) { part = new SlotStepPart(); } @Override public void visit(OuterDefinitionStep entity) { // TODO Auto-generated method stub super.visit(entity); } @Override public void visit(Cut entity) { part = new CutPart(); } @Override public void visit(Insert entity) { part = new InsertPart(); } @Override public void visit(Placement entity) { part = new PlacementPart(); } @Override public void visit(SlotsDefined entity) { part = new SlotsDefinedPart(); } @Override public void visit(PatternTypeTest entity) { part = new PatternTypeTestPart(); } @Override public void visit(URI entity) { part = new ContentTextualEntityPart(); } @Override public void visit(Namespace entity) { part = new ModuleNamespaceTextualEntityPart(); } @Override public void visit(Version entity) { part = new ContentTextualEntityPart(); } }