/***************************************************************************** * Copyright (c) 2010 CEA LIST. * * * 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: * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation * *****************************************************************************/ package org.eclipse.papyrus.uml.textedit.collaborationuse.xtext.ui.contentassist; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.text.contentassist.ICompletionProposal; import org.eclipse.papyrus.uml.textedit.collaborationuse.xtext.ui.contributions.UMLCollaborationUseEditorUtil; import org.eclipse.papyrus.uml.textedit.common.xtext.ui.contentassist.UmlCommonProposalProvider; import org.eclipse.uml2.uml.Collaboration; import org.eclipse.uml2.uml.CollaborationUse; import org.eclipse.uml2.uml.Element; import org.eclipse.uml2.uml.Type; import org.eclipse.xtext.Assignment; import org.eclipse.xtext.Keyword; import org.eclipse.xtext.RuleCall; import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext; import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor; /** * Customization of the default ProposalProvider of the textual property editor * * see http://www.eclipse.org/Xtext/documentation/latest/xtext.html#contentAssist on how to customize content assistant */ public class UmlCollaborationUseProposalProvider extends AbstractUmlCollaborationUseProposalProvider { /** * Provides custom completion for the specifying the type of a {@link CollaborationUse} * * @see org.eclipse.papyrus.uml.textedit.collaborationuse.xtext.ui.contentassist.AbstractUmlCollaborationUseProposalProvider#completeCollaborationUseRule_Type(org.eclipse.emf.ecore.EObject, * org.eclipse.xtext.Assignment, org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext, * org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor) * * @param model * @param assignment * @param context * @param acceptor */ @Override public void completeCollaborationUseRule_Type(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { // the customization consists in proposing nothing. Proposals are handled by other methods. List<Type> allCollaboration = new ArrayList<Type>(); allCollaboration.addAll(getRecursivelyOwnedType(getModel())); allCollaboration.addAll(getRecursivelyImportedType(getModel())); for(Type c : allCollaboration) { if(c.getName().contains(context.getPrefix())) { String displayString = c.getQualifiedName(); String completionString = UMLCollaborationUseEditorUtil.getTypeLabel(c, getModel()); ICompletionProposal completionProposal = createCompletionProposalWithReplacementOfPrefix(c, completionString, displayString, context); acceptor.accept(completionProposal); } } completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); } /** * * @see org.eclipse.xtext.ui.editor.contentassist.AbstractJavaBasedContentProposalProvider#completeKeyword(org.eclipse.xtext.Keyword, * org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext, org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor) * * @param keyword * @param contentAssistContext * @param acceptor */ @Override public void completeKeyword(Keyword keyword, ContentAssistContext contentAssistContext, ICompletionProposalAcceptor acceptor) { /* * we avoid to have "::" after a correct Type (model::Collaboration1:: ) * and we want are able to complete something like "model:" */ if(keyword.getValue().equals("::") && !contentAssistContext.getPrefix().equals(":")) { //$NON-NLS-1$ //$NON-NLS-2$ //do nothing } else { ICompletionProposal proposal = createCompletionProposal(keyword.getValue(), getKeywordDisplayString(keyword), getImage(keyword), contentAssistContext); getPriorityHelper().adjustKeywordPriority(proposal, contentAssistContext.getPrefix()); acceptor.accept(proposal); } } /** * * @see org.eclipse.papyrus.uml.textedit.collaborationuse.xtext.ui.contentassist.AbstractUmlCollaborationUseProposalProvider#completeTypeRule_Path(org.eclipse.emf.ecore.EObject, * org.eclipse.xtext.Assignment, org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext, * org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor) * * @param model * @param assignment * @param context * @param acceptor */ @Override public void completeTypeRule_Path(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { //we can't use super, because we have an abstract class between this class and the class owning the correct method! UmlCommonProposalProvider provider = new UmlCommonProposalProvider(); provider.setWantedType(Collaboration.class); provider.completeTypeRule_Path(model, assignment, context, acceptor); } /** * * @see org.eclipse.papyrus.uml.textedit.collaborationuse.xtext.ui.contentassist.AbstractUmlCollaborationUseProposalProvider#completeTypeRule_Type(org.eclipse.emf.ecore.EObject, * org.eclipse.xtext.Assignment, org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext, * org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor) * * @param model * @param assignment * @param context * @param acceptor */ @Override public void completeTypeRule_Type(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { //we can't use super, because we have an abstract class between this class and the class owning the correct method! UmlCommonProposalProvider provider = new UmlCommonProposalProvider(); provider.setWantedType(Collaboration.class); provider.completeTypeRule_Type(model, assignment, context, acceptor); } /** * * @see org.eclipse.papyrus.uml.textedit.common.xtext.ui.contentassist.UmlCommonProposalProvider#isWantedType(org.eclipse.uml2.uml.Element) * * @param e * @return */ @Override protected boolean isWantedType(Element e) { return e instanceof Collaboration; } }