/* * generated by Xtext */ package com.robotoworks.mechanoid.db.ui.contentassist; import org.eclipse.emf.ecore.EObject; import org.eclipse.xtext.Assignment; import org.eclipse.xtext.nodemodel.ICompositeNode; import org.eclipse.xtext.nodemodel.util.NodeModelUtils; import org.eclipse.xtext.resource.IEObjectDescription; import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext; import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor; import com.google.common.base.Predicates; import com.robotoworks.mechanoid.db.sqliteModel.AlterTableAddColumnStatement; import com.robotoworks.mechanoid.db.sqliteModel.ColumnDef; import com.robotoworks.mechanoid.db.sqliteModel.ColumnSourceRef; import com.robotoworks.mechanoid.db.sqliteModel.CreateTableStatement; import com.robotoworks.mechanoid.db.sqliteModel.ResultColumn; import com.robotoworks.mechanoid.db.sqliteModel.SelectList; import com.robotoworks.mechanoid.db.sqliteModel.SingleSourceTable; import com.robotoworks.mechanoid.db.sqliteModel.SqliteModelPackage; import com.robotoworks.mechanoid.db.sqliteModel.TableDefinition; import com.robotoworks.mechanoid.db.util.ModelUtil; /** * see * http://www.eclipse.org/Xtext/documentation/latest/xtext.html#contentAssist on * how to customize content assistant */ public class SqliteModelProposalProvider extends AbstractSqliteModelProposalProvider { @Override public void completePrimaryExpression_Column(EObject model, Assignment assignment, ContentAssistContext context, final ICompletionProposalAcceptor acceptor) { EObject lastObj = NodeModelUtils.findActualSemanticObjectFor(context.getLastCompleteNode()); EObject currentObj = NodeModelUtils.findActualSemanticObjectFor(context.getCurrentNode()); ICompositeNode node = NodeModelUtils.getNode(lastObj); if(lastObj instanceof ColumnSourceRef) { ColumnSourceRef ref = (ColumnSourceRef) lastObj; if(ref.getColumn() == null) { lookupCrossReference( ref, SqliteModelPackage.Literals.COLUMN_SOURCE_REF__COLUMN, acceptor, Predicates.<IEObjectDescription> alwaysTrue(), getProposalFactory("column", context)); return; } } SelectList selectList = ModelUtil.getAncestorOfType(currentObj, SelectList.class); if(selectList != null) { lookupCrossReference( selectList, SqliteModelPackage.Literals.COLUMN_SOURCE_REF__COLUMN, acceptor, Predicates.<IEObjectDescription> alwaysTrue(), getProposalFactory("column", context)); return; } super.completePrimaryExpression_Column(model, assignment, context, acceptor); } @Override protected String getDisplayString(EObject element, String qualifiedNameAsString, String shortName) { if(element instanceof ColumnDef) { ColumnDef def = (ColumnDef) element; EObject container = def.eContainer(); if(container instanceof TableDefinition) { return def.getName() + ":" + def.getType().getName() + " - " + ((TableDefinition)def.eContainer()).getName(); } else if (container instanceof AlterTableAddColumnStatement) { return def.getName() + ":" + def.getType().getName() + " - " + ((AlterTableAddColumnStatement)def.eContainer()).getTable().getName(); } else { return def.getName() + ":" + def.getType().getName(); } } else if (element instanceof SingleSourceTable) { SingleSourceTable t = (SingleSourceTable) element; return (t.getName() == null ? t.getTableReference().getName() : t.getName() + " - " + t.getTableReference().getName()); } else if (element instanceof CreateTableStatement) { CreateTableStatement t = (CreateTableStatement) element; return t.getName(); } else if(element instanceof ResultColumn) { ResultColumn r = (ResultColumn) element; if(r.getName() != null) { return r.getName() + ":" + ModelUtil.getInferredColumnType(r).getName(); } } return super.getDisplayString(element, qualifiedNameAsString, shortName); } }