| /** |
| * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) |
| * |
| * 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: |
| * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation |
| * |
| * |
| * This copyright notice shows up in the generated Java code |
| */ |
| package org.eclipse.osbp.xtext.entitymock.ui.contentassist; |
| |
| import com.google.common.base.Objects; |
| import com.google.inject.Inject; |
| import java.util.List; |
| import org.eclipse.emf.common.util.EList; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.jface.viewers.StyledString; |
| import org.eclipse.osbp.dsl.semantic.common.types.LEnum; |
| import org.eclipse.osbp.dsl.semantic.common.types.LEnumLiteral; |
| import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute; |
| import org.eclipse.osbp.ui.api.datamart.IDataMart; |
| import org.eclipse.osbp.utils.entityhelper.DataType; |
| import org.eclipse.osbp.xtext.basic.ui.contentassist.BasicDSLProposalProviderHelper; |
| import org.eclipse.osbp.xtext.entitymock.EntityMockAttributeByObject; |
| import org.eclipse.osbp.xtext.entitymock.EntityMockAttributeFiller; |
| import org.eclipse.osbp.xtext.entitymock.EntityMockEntity; |
| import org.eclipse.osbp.xtext.entitymock.EntityMockObject; |
| import org.eclipse.osbp.xtext.entitymock.EntityMockObjectArrayValue; |
| import org.eclipse.osbp.xtext.entitymock.EntityMockObjectEmbed; |
| import org.eclipse.osbp.xtext.entitymock.EntityMockObjectEnum; |
| import org.eclipse.osbp.xtext.entitymock.EntityMockObjectFunction; |
| import org.eclipse.osbp.xtext.entitymock.EntityMockReferencedObjectAttribute; |
| import org.eclipse.osbp.xtext.entitymock.EntityMockResource; |
| import org.eclipse.osbp.xtext.entitymock.EntityMockResourceDataRow; |
| import org.eclipse.osbp.xtext.entitymock.EntityMockTemplate; |
| import org.eclipse.osbp.xtext.entitymock.IEntityMockObjectAttribute; |
| import org.eclipse.osbp.xtext.entitymock.PropertyFillerDateFuture; |
| import org.eclipse.osbp.xtext.entitymock.PropertyFillerDatePast; |
| import org.eclipse.osbp.xtext.entitymock.PropertyFillerDateRange; |
| import org.eclipse.osbp.xtext.entitymock.PropertyFillerSignedDoubleRandom; |
| import org.eclipse.osbp.xtext.entitymock.PropertyFillerSignedDoubleRange; |
| import org.eclipse.osbp.xtext.entitymock.PropertyFillerSignedIntegerRandom; |
| import org.eclipse.osbp.xtext.entitymock.PropertyFillerSignedIntegerRange; |
| import org.eclipse.osbp.xtext.entitymock.PropertyFillerTextParagraphs; |
| import org.eclipse.osbp.xtext.entitymock.PropertyFillerTextRandom; |
| import org.eclipse.osbp.xtext.entitymock.PropertyFillerTextSentences; |
| import org.eclipse.osbp.xtext.entitymock.PropertyFillerTextWords; |
| import org.eclipse.osbp.xtext.entitymock.PropertyFillerUnsignedDoubleRandom; |
| import org.eclipse.osbp.xtext.entitymock.PropertyFillerUnsignedDoubleRange; |
| import org.eclipse.osbp.xtext.entitymock.PropertyFillerUnsignedIntegerRandom; |
| import org.eclipse.osbp.xtext.entitymock.PropertyFillerUnsignedIntegerRange; |
| import org.eclipse.osbp.xtext.entitymock.ui.EntityMockDSLUiDocumentationTranslator; |
| import org.eclipse.osbp.xtext.entitymock.ui.contentassist.AbstractEntityMockDSLProposalProvider; |
| import org.eclipse.xtext.Assignment; |
| import org.eclipse.xtext.Keyword; |
| import org.eclipse.xtext.ParserRule; |
| import org.eclipse.xtext.RuleCall; |
| import org.eclipse.xtext.common.ui.contentassist.TerminalsProposalProvider; |
| import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext; |
| import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor; |
| import org.eclipse.xtext.xbase.lib.IterableExtensions; |
| |
| /** |
| * see http://www.eclipse.org/Xtext/documentation.html#contentAssist on how to customize content assistant |
| */ |
| @SuppressWarnings("all") |
| public class EntityMockDSLProposalProvider extends AbstractEntityMockDSLProposalProvider { |
| @Inject |
| private DataType dtType; |
| |
| @Inject |
| private TerminalsProposalProvider provider; |
| |
| @Inject |
| private BasicDSLProposalProviderHelper providerHelper; |
| |
| /** |
| * @see BasicDSLProposalProviderHelper#getKeywordDisplayString(Keyword, BasicDSLUiTranslator) |
| * @param keyword the keyword to get the displayed string for |
| * @return the displayed string |
| */ |
| @Override |
| protected StyledString getKeywordDisplayString(final Keyword keyword) { |
| return BasicDSLProposalProviderHelper.getKeywordDisplayString(keyword, EntityMockDSLUiDocumentationTranslator.instance()); |
| } |
| |
| /** |
| * This override will enable 1 length non letter characters as keyword. |
| */ |
| @Override |
| protected boolean isKeywordWorthyToPropose(final Keyword keyword) { |
| return true; |
| } |
| |
| /** |
| * propose all available enumeration values for the referenced enumeration |
| */ |
| @Override |
| public void completeEntityMockObjectItemValue_Datarow(final EObject model, final Assignment assignment, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) { |
| EObject mockValueItem = model; |
| while (((!(mockValueItem instanceof EntityMockObjectArrayValue)) && (!Objects.equal(mockValueItem, null)))) { |
| mockValueItem = mockValueItem.eContainer(); |
| } |
| if ((mockValueItem instanceof EntityMockObjectArrayValue)) { |
| LEnum _usingResource = ((EntityMockObjectArrayValue)mockValueItem).getEnumeration().getUsingResource(); |
| if ((_usingResource instanceof EntityMockResource)) { |
| LEnum _usingResource_1 = ((EntityMockObjectArrayValue)mockValueItem).getEnumeration().getUsingResource(); |
| final EntityMockResource resource = ((EntityMockResource) _usingResource_1); |
| EList<EntityMockResourceDataRow> _datarows = resource.getDatarows(); |
| for (final EntityMockResourceDataRow datarow : _datarows) { |
| acceptor.accept( |
| this.createCompletionProposal(datarow.getName(), datarow.getName(), null, context)); |
| } |
| } else { |
| final LEnum lenum = ((EntityMockObjectArrayValue)mockValueItem).getEnumeration().getUsingResource(); |
| EList<LEnumLiteral> _literals = lenum.getLiterals(); |
| for (final LEnumLiteral datarow_1 : _literals) { |
| acceptor.accept( |
| this.createCompletionProposal(datarow_1.getName(), datarow_1.getName(), null, context)); |
| } |
| } |
| } |
| } |
| |
| /** |
| * propose all template mock object variables defined previously in this mock entity |
| */ |
| @Override |
| public void completeEntityMockReferencedObjectAttribute_Template(final EObject model, final Assignment assignment, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) { |
| EObject _eContainer = ((EntityMockAttributeByObject) model).eContainer(); |
| EList<EntityMockTemplate> _templates = ((EntityMockEntity) _eContainer).getTemplates(); |
| for (final EntityMockTemplate template : _templates) { |
| acceptor.accept( |
| this.createCompletionProposal(template.getName(), template.getName(), null, context)); |
| } |
| } |
| |
| /** |
| * propose all embedded mock objects inside the referenced template mock object |
| */ |
| @Override |
| public void completeEntityMockReferencedObjectAttribute_Embedded(final EObject model, final Assignment assignment, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) { |
| EntityMockReferencedObjectAttribute emroa = ((EntityMockReferencedObjectAttribute) null); |
| if ((model instanceof EntityMockReferencedObjectAttribute)) { |
| emroa = ((EntityMockReferencedObjectAttribute)model); |
| } |
| if ((model instanceof EntityMockAttributeByObject)) { |
| emroa = ((EntityMockAttributeByObject)model).getReference(); |
| } |
| EntityMockObject mockObject = emroa.getTemplate().getObject(); |
| boolean _isEmpty = emroa.getEmbedded().isEmpty(); |
| boolean _not = (!_isEmpty); |
| if (_not) { |
| mockObject = IterableExtensions.<EntityMockObjectEmbed>last(emroa.getEmbedded()).getObject(); |
| } |
| EList<IEntityMockObjectAttribute> _attributes = mockObject.getAttributes(); |
| for (final IEntityMockObjectAttribute attribute : _attributes) { |
| if ((attribute instanceof EntityMockObjectEmbed)) { |
| acceptor.accept( |
| this.createCompletionProposal(((EntityMockObjectEmbed)attribute).getName(), ((EntityMockObjectEmbed)attribute).getName(), null, context)); |
| } |
| } |
| } |
| |
| @Override |
| public void completeEntityMockEntityFunction_AttributeRef(final EObject model, final Assignment assignment, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) { |
| EObject _eContainer = model.eContainer(); |
| if ((_eContainer instanceof EntityMockEntity)) { |
| EObject _eContainer_1 = model.eContainer(); |
| List<LEntityAttribute> _allAttributes = ((EntityMockEntity) _eContainer_1).getEntityRef().getAllAttributes(); |
| for (final LEntityAttribute attribute : _allAttributes) { |
| acceptor.accept( |
| this.createCompletionProposal(attribute.getName(), attribute.getName(), null, context)); |
| } |
| } else { |
| super.completeEntityMockEntityFunction_AttributeRef(model, assignment, context, acceptor); |
| } |
| } |
| |
| /** |
| * propose all enumerations and attributes of the referenced (may be embedded) mock object |
| */ |
| @Override |
| public void completeEntityMockReferencedObjectAttribute_Attribute(final EObject model, final Assignment assignment, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) { |
| EntityMockReferencedObjectAttribute emroa = ((EntityMockReferencedObjectAttribute) null); |
| if ((model instanceof EntityMockReferencedObjectAttribute)) { |
| emroa = ((EntityMockReferencedObjectAttribute)model); |
| } |
| if ((model instanceof EntityMockAttributeByObject)) { |
| emroa = ((EntityMockAttributeByObject)model).getReference(); |
| } |
| EntityMockObject mockObject = emroa.getTemplate().getObject(); |
| boolean _isEmpty = emroa.getEmbedded().isEmpty(); |
| boolean _not = (!_isEmpty); |
| if (_not) { |
| mockObject = IterableExtensions.<EntityMockObjectEmbed>last(emroa.getEmbedded()).getObject(); |
| } |
| EList<EntityMockObjectEnum> _enumerations = mockObject.getEnumerations(); |
| for (final EntityMockObjectEnum enumeration : _enumerations) { |
| acceptor.accept( |
| this.createCompletionProposal(enumeration.getName(), enumeration.getName(), null, context)); |
| } |
| EList<IEntityMockObjectAttribute> _attributes = mockObject.getAttributes(); |
| for (final IEntityMockObjectAttribute attribute : _attributes) { |
| if ((!(attribute instanceof EntityMockObjectEmbed))) { |
| acceptor.accept( |
| this.createCompletionProposal(attribute.getName(), attribute.getName(), null, context)); |
| } |
| } |
| EList<EntityMockObjectFunction> _calculations = mockObject.getCalculations(); |
| for (final EntityMockObjectFunction calculation : _calculations) { |
| acceptor.accept( |
| this.createCompletionProposal(calculation.getName(), calculation.getName(), null, context)); |
| } |
| } |
| |
| /** |
| * get the parser rule name for the given EObject |
| */ |
| protected String getParserRuleName(final EObject object) { |
| String retcode = ((String) null); |
| EObject parserRule = object; |
| while (((!Objects.equal(parserRule, null)) && (!(parserRule instanceof ParserRule)))) { |
| parserRule = parserRule.eContainer(); |
| } |
| if ((parserRule instanceof ParserRule)) { |
| retcode = ((ParserRule)parserRule).getName(); |
| } |
| return retcode; |
| } |
| |
| /** |
| * checks if the keywords parser rule is contained in the given Class |
| */ |
| protected boolean isKeywordInsideParserRule(final Keyword keyword, final Class<?> eClass) { |
| String className = eClass.getCanonicalName(); |
| return className.endsWith(this.getParserRuleName(keyword)); |
| } |
| |
| /** |
| * returns the allowed data type for the given Keyword |
| */ |
| protected IDataMart.EType getPropertyFillerType(final Keyword keyword) { |
| boolean _isKeywordInsideParserRule = this.isKeywordInsideParserRule(keyword, PropertyFillerDateFuture.class); |
| if (_isKeywordInsideParserRule) { |
| return IDataMart.EType.DATE; |
| } |
| boolean _isKeywordInsideParserRule_1 = this.isKeywordInsideParserRule(keyword, PropertyFillerDatePast.class); |
| if (_isKeywordInsideParserRule_1) { |
| return IDataMart.EType.DATE; |
| } |
| boolean _isKeywordInsideParserRule_2 = this.isKeywordInsideParserRule(keyword, PropertyFillerDateRange.class); |
| if (_isKeywordInsideParserRule_2) { |
| return IDataMart.EType.DATE; |
| } |
| boolean _isKeywordInsideParserRule_3 = this.isKeywordInsideParserRule(keyword, PropertyFillerSignedDoubleRandom.class); |
| if (_isKeywordInsideParserRule_3) { |
| return IDataMart.EType.DOUBLE; |
| } |
| boolean _isKeywordInsideParserRule_4 = this.isKeywordInsideParserRule(keyword, PropertyFillerSignedDoubleRange.class); |
| if (_isKeywordInsideParserRule_4) { |
| return IDataMart.EType.DOUBLE; |
| } |
| boolean _isKeywordInsideParserRule_5 = this.isKeywordInsideParserRule(keyword, PropertyFillerUnsignedDoubleRandom.class); |
| if (_isKeywordInsideParserRule_5) { |
| return IDataMart.EType.DOUBLE; |
| } |
| boolean _isKeywordInsideParserRule_6 = this.isKeywordInsideParserRule(keyword, PropertyFillerUnsignedDoubleRange.class); |
| if (_isKeywordInsideParserRule_6) { |
| return IDataMart.EType.DOUBLE; |
| } |
| boolean _isKeywordInsideParserRule_7 = this.isKeywordInsideParserRule(keyword, PropertyFillerSignedIntegerRandom.class); |
| if (_isKeywordInsideParserRule_7) { |
| return IDataMart.EType.INTEGER; |
| } |
| boolean _isKeywordInsideParserRule_8 = this.isKeywordInsideParserRule(keyword, PropertyFillerSignedIntegerRange.class); |
| if (_isKeywordInsideParserRule_8) { |
| return IDataMart.EType.INTEGER; |
| } |
| boolean _isKeywordInsideParserRule_9 = this.isKeywordInsideParserRule(keyword, PropertyFillerUnsignedIntegerRandom.class); |
| if (_isKeywordInsideParserRule_9) { |
| return IDataMart.EType.INTEGER; |
| } |
| boolean _isKeywordInsideParserRule_10 = this.isKeywordInsideParserRule(keyword, PropertyFillerUnsignedIntegerRange.class); |
| if (_isKeywordInsideParserRule_10) { |
| return IDataMart.EType.INTEGER; |
| } |
| boolean _isKeywordInsideParserRule_11 = this.isKeywordInsideParserRule(keyword, PropertyFillerTextParagraphs.class); |
| if (_isKeywordInsideParserRule_11) { |
| return IDataMart.EType.STRING; |
| } |
| boolean _isKeywordInsideParserRule_12 = this.isKeywordInsideParserRule(keyword, PropertyFillerTextRandom.class); |
| if (_isKeywordInsideParserRule_12) { |
| return IDataMart.EType.STRING; |
| } |
| boolean _isKeywordInsideParserRule_13 = this.isKeywordInsideParserRule(keyword, PropertyFillerTextSentences.class); |
| if (_isKeywordInsideParserRule_13) { |
| return IDataMart.EType.STRING; |
| } |
| boolean _isKeywordInsideParserRule_14 = this.isKeywordInsideParserRule(keyword, PropertyFillerTextWords.class); |
| if (_isKeywordInsideParserRule_14) { |
| return IDataMart.EType.STRING; |
| } |
| return IDataMart.EType.NONE; |
| } |
| |
| /** |
| * checks if the given Keyword is allowed for the given entity attribute type |
| */ |
| @Override |
| protected boolean isKeywordWorthyToPropose(final Keyword keyword, final ContentAssistContext context) { |
| boolean _isKeywordWorthyToPropose = super.isKeywordWorthyToPropose(keyword, context); |
| boolean _not = (!_isKeywordWorthyToPropose); |
| if (_not) { |
| return false; |
| } |
| EObject currentModel = context.getCurrentModel(); |
| if ((currentModel instanceof EntityMockAttributeFiller)) { |
| EntityMockAttributeFiller attributeByObject = ((EntityMockAttributeFiller) currentModel); |
| LEntityAttribute _attributeRef = attributeByObject.getAttributeRef(); |
| LEntityAttribute attributeRef = ((LEntityAttribute) _attributeRef); |
| return this.dtType.canBeCastFrom(attributeRef, this.getPropertyFillerType(keyword)); |
| } |
| return true; |
| } |
| |
| @Override |
| protected boolean isValidProposal(final String proposal, final String prefix, final ContentAssistContext context) { |
| boolean _isValidProposal = super.isValidProposal(proposal, prefix, context); |
| boolean _not = (!_isValidProposal); |
| if (_not) { |
| return false; |
| } else { |
| EObject currentModel = context.getCurrentModel(); |
| boolean _matched = false; |
| if (currentModel instanceof EntityMockObjectArrayValue) { |
| _matched=true; |
| return true; |
| } |
| return true; |
| } |
| } |
| |
| @Override |
| public void complete_ID(final EObject model, final RuleCall ruleCall, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) { |
| this.provider.complete_ID(model, ruleCall, context, acceptor); |
| } |
| |
| @Override |
| public void complete_STRING(final EObject model, final RuleCall ruleCall, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) { |
| this.provider.complete_STRING(model, ruleCall, context, acceptor); |
| } |
| |
| @Override |
| public void complete_INT(final EObject model, final RuleCall ruleCall, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) { |
| this.provider.complete_INT(model, ruleCall, context, acceptor); |
| } |
| |
| @Override |
| public void complete_SINT(final EObject model, final RuleCall ruleCall, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) { |
| this.provider.complete_INT(model, ruleCall, context, acceptor); |
| } |
| |
| @Override |
| public void complete_QualifiedName(final EObject model, final RuleCall ruleCall, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) { |
| this.providerHelper.complete_PackageName(model, ruleCall, context, acceptor, this); |
| } |
| |
| @Override |
| public void complete_UnsignedNumber(final EObject model, final RuleCall ruleCall, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) { |
| this.providerHelper.createNumberProposal(context, acceptor, ruleCall, this); |
| } |
| } |