/******************************************************************************* * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library 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 2.1 of the License, or (at your option) * any later version. * * This library 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. *******************************************************************************/ package com.liferay.ide.xml.search.ui.editor; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.contentassist.ICompletionProposal; import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; import org.eclipse.wst.xml.search.editor.contentassist.XMLReferencesContentAssistUtils; import org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest; import org.eclipse.wst.xml.ui.internal.contentassist.XMLContentAssistProcessor; /** * @author Kuo Zhang */ @SuppressWarnings( { "deprecation", "restriction" } ) public class ServiceXmlContentAssistProcessor extends XMLContentAssistProcessor { private ServiceXmlTemplateCompletinoProcessor templateProcessor; private boolean templatesAdd = false; public ServiceXmlContentAssistProcessor() { super(); } @Override protected void addAttributeValueProposals( ContentAssistRequest contentAssistRequest ) { XMLReferencesContentAssistUtils.addAttributeValueProposals( contentAssistRequest ); super.addAttributeValueProposals( contentAssistRequest ); } @Override protected ContentAssistRequest computeEndTagOpenProposals( int documentPosition, String matchString, ITextRegion completionRegion, IDOMNode nodeAtOffset, IDOMNode node ) { ContentAssistRequest request = super.computeEndTagOpenProposals( documentPosition, matchString, completionRegion, nodeAtOffset, node ); if( matchString.equals( "" ) ) { doEntityProposalIfNeeded( request ); } return request; } @Override protected ContentAssistRequest computeContentProposals( int documentPosition, String matchString, ITextRegion completionRegion, IDOMNode nodeAtOffset, IDOMNode node ) { ContentAssistRequest request = super.computeContentProposals( documentPosition, matchString, completionRegion, nodeAtOffset, node ); doEntityProposalIfNeeded( request ); return request; } private void doEntityProposalIfNeeded( ContentAssistRequest contentAssistRequest ) { XMLReferencesContentAssistUtils.addEntityProposals( this, contentAssistRequest ); } @Override protected void addTagInsertionProposals( ContentAssistRequest contentAssistRequest, int childPosition ) { super.addTagInsertionProposals( contentAssistRequest, childPosition ); addTemplates( contentAssistRequest ); } private void addTemplates( ContentAssistRequest contentAssistRequest ) { addTemplates( contentAssistRequest, contentAssistRequest.getReplacementBeginPosition() ); } private void addTemplates( ContentAssistRequest contentAssistRequest, int startOffset ) { if( contentAssistRequest == null ) { return; } if( !templatesAdd ) { templatesAdd = true; if( getTemplateCompletionProcessor() != null ) { ICompletionProposal[] proposals = getTemplateCompletionProcessor().computeCompletionProposals( fTextViewer, startOffset ); for( int i = 0; i < proposals.length; ++i ) { contentAssistRequest.addProposal( proposals[i] ); } } } } private ServiceXmlTemplateCompletinoProcessor getTemplateCompletionProcessor() { if( templateProcessor == null ) { templateProcessor = new ServiceXmlTemplateCompletinoProcessor(); } return templateProcessor; } @Override public ICompletionProposal[] computeCompletionProposals( ITextViewer textViewer, int documentPosition ) { templatesAdd = false; return super.computeCompletionProposals( textViewer, documentPosition ); } }