/** * 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.math.ui.editparts; import org.eclipse.draw2d.IFigure; import org.eclipse.gef.EditPart; import org.whole.lang.math.model.AbsoluteValue; import org.whole.lang.math.model.Addition; import org.whole.lang.math.model.And; import org.whole.lang.math.model.ApproximatelyEqual; import org.whole.lang.math.model.Arccosecant; import org.whole.lang.math.model.Arccosine; import org.whole.lang.math.model.Arccotangent; import org.whole.lang.math.model.Arcsecant; import org.whole.lang.math.model.Arcsine; import org.whole.lang.math.model.Arctangent; import org.whole.lang.math.model.BigDecimal; import org.whole.lang.math.model.BigInteger; import org.whole.lang.math.model.Builder; import org.whole.lang.math.model.ByteInteger; import org.whole.lang.math.model.Cardinality; import org.whole.lang.math.model.Ceiling; import org.whole.lang.math.model.Constant; import org.whole.lang.math.model.Cosecant; import org.whole.lang.math.model.Cosine; import org.whole.lang.math.model.Cotangent; import org.whole.lang.math.model.Difference; import org.whole.lang.math.model.Division; import org.whole.lang.math.model.Double; import org.whole.lang.math.model.Empty; import org.whole.lang.math.model.Enumeration; import org.whole.lang.math.model.Equals; import org.whole.lang.math.model.ExclusiveOr; import org.whole.lang.math.model.Exponential; import org.whole.lang.math.model.Exponentiation; import org.whole.lang.math.model.FactorOf; import org.whole.lang.math.model.Factorial; import org.whole.lang.math.model.Float; import org.whole.lang.math.model.Floor; import org.whole.lang.math.model.GreaterOrEqual; import org.whole.lang.math.model.GreaterThan; import org.whole.lang.math.model.GreatestCommonDivisor; import org.whole.lang.math.model.HyperbolicArccosecant; import org.whole.lang.math.model.HyperbolicArccosine; import org.whole.lang.math.model.HyperbolicArccotangent; import org.whole.lang.math.model.HyperbolicArcsecant; import org.whole.lang.math.model.HyperbolicArcsine; import org.whole.lang.math.model.HyperbolicArctangent; import org.whole.lang.math.model.HyperbolicCosecant; import org.whole.lang.math.model.HyperbolicCosine; import org.whole.lang.math.model.HyperbolicCotangent; import org.whole.lang.math.model.HyperbolicSecant; import org.whole.lang.math.model.HyperbolicSine; import org.whole.lang.math.model.HyperbolicTangent; import org.whole.lang.math.model.IMathEntity; import org.whole.lang.math.model.Identifier; import org.whole.lang.math.model.Implies; import org.whole.lang.math.model.In; import org.whole.lang.math.model.IntegerNumber; import org.whole.lang.math.model.Intersection; import org.whole.lang.math.model.LessOrEqual; import org.whole.lang.math.model.LessThan; import org.whole.lang.math.model.List; import org.whole.lang.math.model.Logarithm; import org.whole.lang.math.model.LongInteger; import org.whole.lang.math.model.LowestCommonMultiple; import org.whole.lang.math.model.Maximum; import org.whole.lang.math.model.Minimum; import org.whole.lang.math.model.Minus; import org.whole.lang.math.model.Multiplication; import org.whole.lang.math.model.NaturalLogarithm; import org.whole.lang.math.model.Not; import org.whole.lang.math.model.NotANumber; import org.whole.lang.math.model.NotEquals; import org.whole.lang.math.model.NotIn; import org.whole.lang.math.model.NotProperSubset; import org.whole.lang.math.model.NotSubset; import org.whole.lang.math.model.Or; import org.whole.lang.math.model.OrderedPair; import org.whole.lang.math.model.ProperSubset; import org.whole.lang.math.model.Quotient; import org.whole.lang.math.model.Rational; import org.whole.lang.math.model.Remainder; import org.whole.lang.math.model.Root; import org.whole.lang.math.model.Secant; import org.whole.lang.math.model.Selector; import org.whole.lang.math.model.Set; import org.whole.lang.math.model.ShortInteger; import org.whole.lang.math.model.Sine; import org.whole.lang.math.model.Stream; import org.whole.lang.math.model.Subset; import org.whole.lang.math.model.Subtraction; import org.whole.lang.math.model.Tangent; import org.whole.lang.math.model.Tuple; import org.whole.lang.math.model.Union; import org.whole.lang.math.ui.figures.FixedApplicationFigure; import org.whole.lang.math.ui.figures.NumberFigure; import org.whole.lang.math.visitors.MathIdentityDefaultVisitor; import org.whole.lang.model.adapters.IEntityAdapter; import org.whole.lang.ui.editparts.AbstractDataEntityPart; import org.whole.lang.ui.editparts.CommaSeparatedCompositeFlowPart; import org.whole.lang.ui.editparts.IEditPartFactory; import org.whole.lang.ui.editparts.IdentifierTextualEntityPart; import org.whole.lang.ui.editparts.PlaceHolderPart; import org.whole.lang.ui.notations.text.editparts.TextPartFactory; /** * @author Riccardo Solmi */ public class MathPartFactoryVisitor extends MathIdentityDefaultVisitor implements IEditPartFactory { protected EditPart part, context; public EditPart createEditPart(EditPart context, Object modelEntity) { this.context = context; ((IMathEntity) modelEntity).accept(this); return part; } @Override public boolean visitAdapter(IEntityAdapter entity) { part = new PlaceHolderPart(); return super.visitAdapter(entity); } @Override public void visit(IMathEntity entity) { part = TextPartFactory.instance().createEditPart(context, entity); } @Override public void visit(Addition entity) { part = new AdditionPart(); } @Override public void visit(Multiplication entity) { part = new MultiplicationPart(); } @Override public void visit(Subtraction entity) { part = new SubtractionPart(); } @Override public void visit(Division entity) { part = new DivisionPart(); } @Override public void visit(Quotient entity) { part = new QuotientPart(); } @Override public void visit(Remainder entity) { part = new RemainderPart(); } @Override public void visit(Exponentiation entity) { part = new ExponentiationPart(); } @Override public void visit(Root entity) { part = new RootPart(); } @Override public void visit(Minus entity) { part = new MinusPart(); }; @Override public void visit(AbsoluteValue entity) { part = new AbsoluteValuePart(); } @Override public void visit(Floor entity) { part = new FloorPart(); } public void visit(Ceiling entity) { part = new CeilingPart(); }; @Override public void visit(Factorial entity) { part = new FactorialPart(); } @Override public void visit(GreatestCommonDivisor entity) { part = new GreatestCommonDivisorPart(); } @Override public void visit(LowestCommonMultiple entity) { part = new LowestCommonMultiplePart(); } @Override public void visit(Maximum entity) { part = new MaximumPart(); } @Override public void visit(Minimum entity) { part = new MinimumPart(); } @Override public void visit(And entity) { part = new AndPart(); } @Override public void visit(Or entity) { part = new OrPart(); } @Override public void visit(ExclusiveOr entity) { part = new ExclusiveOrPart(); } @Override public void visit(Not entity) { part = new NotPart(); }; @Override public void visit(Implies entity) { part = new ImpliesPart(); } @Override public void visit(Equals entity) { part = new EqualsPart(); } @Override public void visit(NotEquals entity) { part = new NotEqualsPart(); } @Override public void visit(ApproximatelyEqual entity) { part = new ApproximatelyEqualPart(); } @Override public void visit(GreaterThan entity) { part = new GreaterThanPart(); } @Override public void visit(LessThan entity) { part = new LessThanPart(); } @Override public void visit(GreaterOrEqual entity) { part = new GreaterOrEqualPart(); } @Override public void visit(LessOrEqual entity) { part = new LessOrEqualPart(); } @Override public void visit(FactorOf entity) { part = new FactorOfPart(); } @Override public void visit(Exponential entity) { part = new ExponentialPart(); } @Override public void visit(NaturalLogarithm entity) { part = new NaturalLogarithmPart(); } @Override public void visit(Logarithm entity) { part = new LogarithmPart(); } @Override public void visit(Sine entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("sin"); } }; } @Override public void visit(Cosine entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("cos"); } }; } @Override public void visit(Tangent entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("tan"); } }; } @Override public void visit(Cosecant entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("csc"); } }; } @Override public void visit(Secant entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("sec"); } }; } @Override public void visit(Cotangent entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("cot"); } }; } @Override public void visit(Arcsine entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("arcsin"); } }; } @Override public void visit(Arccosine entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("arccos"); } }; } @Override public void visit(Arctangent entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("arctan"); } }; } @Override public void visit(Arccosecant entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("arccsc"); } }; } @Override public void visit(Arcsecant entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("arcsec"); } }; } @Override public void visit(Arccotangent entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("arccot"); } }; } @Override public void visit(HyperbolicSine entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("sinh"); } }; } @Override public void visit(HyperbolicCosine entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("cosh"); } }; } @Override public void visit(HyperbolicTangent entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("tanh"); } }; } @Override public void visit(HyperbolicCosecant entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("csch"); } }; } @Override public void visit(HyperbolicSecant entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("sech"); } }; } @Override public void visit(HyperbolicCotangent entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("coth"); } }; } @Override public void visit(HyperbolicArcsine entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("arcsinh"); } }; } @Override public void visit(HyperbolicArccosine entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("arccosh"); } }; } @Override public void visit(HyperbolicArctangent entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("arctanh"); } }; } @Override public void visit(HyperbolicArccosecant entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("arccsch"); } }; } @Override public void visit(HyperbolicArcsecant entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("arcsech"); } }; } @Override public void visit(HyperbolicArccotangent entity) { part = new TrigonometricExpressionPart() { protected IFigure createFigure() { return new FixedApplicationFigure("arccoth"); } }; } @Override public void visit(Empty entity) { part = new EmptyPart(); } @Override public void visit(Set entity) { part = new SetPart(); } @Override public void visit(OrderedPair entity) { part = new OrderedPairPart(); } @Override public void visit(Tuple entity) { part = new TuplePart(); } @Override public void visit(List entity) { part = new ListPart(); } @Override public void visit(Stream entity) { part = new StreamPart(); } @Override public void visit(Enumeration entity) { part = new CommaSeparatedCompositeFlowPart(); } @Override public void visit(Builder entity) { part = new BuilderPart(); } @Override public void visit(Union entity) { part = new UnionPart(); } @Override public void visit(Intersection entity) { part = new IntersectionPart(); } @Override public void visit(Difference entity) { part = new DifferencePart(); } @Override public void visit(In entity) { part = new InPart(); } @Override public void visit(NotIn entity) { part = new NotInPart(); } @Override public void visit(Subset entity) { part = new SubsetPart(); } @Override public void visit(ProperSubset entity) { part = new ProperSubsetPart(); } @Override public void visit(NotSubset entity) { part = new NotSubsetPart(); } @Override public void visit(NotProperSubset entity) { part = new NotProperSubsetPart(); } @Override public void visit(Cardinality entity) { part = new CardinalityPart(); } @Override public void visit(Selector entity) { part = new SelectorPart(); } @Override public void visit(Identifier entity) { part = new IdentifierTextualEntityPart(); } @Override public void visit(ByteInteger entity) { part = new AbstractDataEntityPart() { public IFigure createFigure() { return new NumberFigure("B"); } }; } @Override public void visit(ShortInteger entity) { part = new AbstractDataEntityPart() { public IFigure createFigure() { return new NumberFigure("S"); } }; } @Override public void visit(IntegerNumber entity) { super.visit(entity); } @Override public void visit(LongInteger entity) { part = new AbstractDataEntityPart() { public IFigure createFigure() { return new NumberFigure("L"); } }; } @Override public void visit(BigInteger entity) { part = new AbstractDataEntityPart() { public IFigure createFigure() { return new NumberFigure("\u2124"); } }; } @Override public void visit(Float entity) { part = new AbstractDataEntityPart() { public IFigure createFigure() { return new NumberFigure("F"); } }; } @Override public void visit(Double entity) { part = new AbstractDataEntityPart() { public IFigure createFigure() { return new NumberFigure("D"); } }; } @Override public void visit(BigDecimal entity) { part = new AbstractDataEntityPart() { public IFigure createFigure() { return new NumberFigure("\u211d"); } }; } @Override public void visit(Rational entity) { part = new RationalPart(); } @Override public void visit(Constant entity) { part = new ConstantPart(); } @Override public void visit(NotANumber entity) { part = new NotANumberPart(); } }