/*******************************************************************************
* Copyright (c) 2010 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*
* Gavin Lei (gavingui2011@gmail.com) - Tapestry features implemention
*******************************************************************************/
package org.eclipse.wst.xml.ui.internal.contentassist;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Vector;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
import org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext;
import org.eclipse.wst.sse.ui.internal.contentassist.CustomCompletionProposal;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
import org.eclipse.wst.xml.ui.internal.contentassist.tapestry.TapestryContants;
import org.eclipse.wst.xml.ui.internal.contentassist.tapestry.TapestryELCompletionProposalComputer;
import org.eclipse.wst.xml.ui.internal.contentassist.tapestry.TapestryMessageCompletionProposalComputer;
import org.eclipse.wst.xml.ui.internal.templates.TemplateContextTypeIdsXML;
/**
* <p>Proposal computer used to computer XML template content assist
* proposals</p>
*/
public class XMLTemplatesCompletionProposalComputer extends
DefaultXMLCompletionProposalComputer {
/** <p>The template processor used to create the proposals</p> */
private XMLTemplateCompletionProcessor fTemplateProcessor = null;
private TapestryELCompletionProposalComputer tapestryELProposalComputer = null;
private TapestryMessageCompletionProposalComputer tapestryMessageProposalComputer = null;
/**
* Create the computer
*/
public XMLTemplatesCompletionProposalComputer() {
super();
fTemplateProcessor = new XMLTemplateCompletionProcessor();
tapestryELProposalComputer = new TapestryELCompletionProposalComputer();
tapestryMessageProposalComputer = new TapestryMessageCompletionProposalComputer();
}
/**
* @see org.eclipse.wst.xml.ui.internal.contentassist.DefaultXMLCompletionProposalComputer#addAttributeNameProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext)
*/
protected void addAttributeNameProposals(
ContentAssistRequest contentAssistRequest,
CompletionProposalInvocationContext context) {
addTemplates(contentAssistRequest, TemplateContextTypeIdsXML.TAPESTRY_COMPONENTS_ATTR, context);
//addTemplates(contentAssistRequest, TemplateContextTypeIdsXML.ATTRIBUTE, context);
}
/**
* @see org.eclipse.wst.xml.ui.internal.contentassist.DefaultXMLCompletionProposalComputer#addAttributeValueProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext)
*/
protected void addAttributeValueProposals(
ContentAssistRequest contentAssistRequest,
CompletionProposalInvocationContext context) {
addTemplates(contentAssistRequest, TemplateContextTypeIdsXML.TAPESTRY_COMPONENTS_ATTR_VALUE, context);
//addTemplates(contentAssistRequest, TemplateContextTypeIdsXML.ATTRIBUTE_VALUE, context);
}
/**
* @see org.eclipse.wst.xml.ui.internal.contentassist.DefaultXMLCompletionProposalComputer#addEmptyDocumentProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext)
*/
protected void addEmptyDocumentProposals(
ContentAssistRequest contentAssistRequest,
CompletionProposalInvocationContext context) {
//addTemplates(contentAssistRequest, TemplateContextTypeIdsXML.NEW, context);
}
/**
* @see org.eclipse.wst.xml.ui.internal.contentassist.DefaultXMLCompletionProposalComputer#addTagInsertionProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, int, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext)
*/
protected void addTagInsertionProposals(
ContentAssistRequest contentAssistRequest, int childPosition,
CompletionProposalInvocationContext context) {
addTemplates(contentAssistRequest, TemplateContextTypeIdsXML.TAPESTRY_COMPONENTS, context);
//addTemplates(contentAssistRequest, TemplateContextTypeIdsXML.TAG, context);
}
/**
* Default behavior is do to nothing.
*
* @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addCommentProposal(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext)
*/
protected void addCommentProposal(
ContentAssistRequest contentAssistRequest,
CompletionProposalInvocationContext context) {
//default behavior is to do nothing
System.out.println("=======================addCommentProposal===========================");
}
/**
* Default behavior is do to nothing.
*
* @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addDocTypeProposal(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext)
*/
protected void addDocTypeProposal(
ContentAssistRequest contentAssistRequest,
CompletionProposalInvocationContext context) {
//default behavior is to do nothing
System.out.println("=======================addDocTypeProposal===========================");
}
/**
* Default behavior is do to nothing.
*
* @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addEndTagNameProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext)
*/
protected void addEndTagNameProposals(
ContentAssistRequest contentAssistRequest,
CompletionProposalInvocationContext context) {
//default behavior is to do nothing
System.out.println("=======================addEndTagNameProposals===========================");
}
/**
* Default behavior is do to nothing.
*
* @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addEndTagProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext)
*/
protected void addEndTagProposals(
ContentAssistRequest contentAssistRequest,
CompletionProposalInvocationContext context) {
//default behavior is to do nothing
System.out.println("=======================addEndTagProposals===========================");
}
/**
* Default behavior is do to nothing.
*
* @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addEntityProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion, org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext)
*/
protected void addEntityProposals(
ContentAssistRequest contentAssistRequest,
ITextRegion completionRegion, IDOMNode treeNode,
CompletionProposalInvocationContext context) {
//default behavior is to do nothing
System.out.println("=======================addEntityProposals===========================");
}
/**
* Default behavior is do to nothing.
*
* @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addEntityProposals(java.util.Vector, java.util.Properties, java.lang.String, int, org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion, org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext)
*/
protected void addEntityProposals(Vector proposals, Properties map,
String key, int nodeOffset, IStructuredDocumentRegion sdRegion,
ITextRegion completionRegion,
CompletionProposalInvocationContext context) {
//default behavior is to do nothing
System.out.println("=======================addEntityProposals===========================");
}
protected void addTapestryELProposals(
ContentAssistRequest contentAssistRequest,
ITextRegion completionRegion, IDOMNode treeNode,
CompletionProposalInvocationContext context){
System.out.println("=======================addTapestryELProposals===========================");
List results = tapestryELProposalComputer.computeCompletionProposals(TapestryContants.PREFIX_PROP, context, treeNode, 5);
results.addAll(tapestryMessageProposalComputer.computeCompletionProposals(TapestryContants.PREFIX_MESSAGE, context, treeNode, 8));
for(int i=0; i< results.size(); i++){
CustomCompletionProposal proposal = (CustomCompletionProposal) results.get(i);
contentAssistRequest.addProposal(proposal);
}
//addTemplates(contentAssistRequest, TemplateContextTypeIdsXML.TAPESTRY_ENTITIES, context);
}
protected void addTapestryELMessagesProposals(
ContentAssistRequest contentAssistRequest,
ITextRegion completionRegion, IDOMNode treeNode,
CompletionProposalInvocationContext context){
List results = tapestryMessageProposalComputer.computeCompletionProposals(TapestryContants.PREFIX_BLANK, context, treeNode, 0);
for(int i=0; i< results.size(); i++){
CustomCompletionProposal proposal = (CustomCompletionProposal) results.get(i);
contentAssistRequest.addProposal(proposal);
}
}
protected void addTapestryELPropProposals(
ContentAssistRequest contentAssistRequest,
ITextRegion completionRegion, IDOMNode treeNode,
CompletionProposalInvocationContext context) {
List results = tapestryELProposalComputer.computeCompletionProposals(TapestryContants.PREFIX_BLANK, context, treeNode, 0);
for(int i=0; i< results.size(); i++){
CustomCompletionProposal proposal = (CustomCompletionProposal) results.get(i);
contentAssistRequest.addProposal(proposal);
}
}
/**
* Default behavior is do to nothing.
*
* @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addPCDATAProposal(java.lang.String, org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext)
*/
protected void addPCDATAProposal(String nodeName,
ContentAssistRequest contentAssistRequest,
CompletionProposalInvocationContext context) {
//default behavior is to do nothing
System.out.println("=======================addPCDATAProposal===========================");
}
/**
* Default behavior is do to nothing.
*
* @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addStartDocumentProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext)
*/
protected void addStartDocumentProposals(
ContentAssistRequest contentAssistRequest,
CompletionProposalInvocationContext context) {
//default behavior is to do nothing
System.out.println("=======================addStartDocumentProposals===========================");
}
/**
* Default behavior is do to nothing.
*
* @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addTagCloseProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext)
*/
protected void addTagCloseProposals(
ContentAssistRequest contentAssistRequest,
CompletionProposalInvocationContext context) {
//default behavior is to do nothing
System.out.println("=======================addTagCloseProposals===========================");
}
/**
* Default behavior is do to nothing.
*
* @see org.eclipse.wst.xml.ui.internal.contentassist.AbstractXMLCompletionProposalComputer#addTagNameProposals(org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest, int, org.eclipse.wst.sse.ui.contentassist.CompletionProposalInvocationContext)
*/
protected void addTagNameProposals(
ContentAssistRequest contentAssistRequest, int childPosition,
CompletionProposalInvocationContext context) {
//default behavior is to do nothing
System.out.println("=======================addTagNameProposals===========================");
addTemplates(contentAssistRequest, TemplateContextTypeIdsXML.TAPESTRY_COMPONENTS, context);
}
/**
* <p>Adds templates to the list of proposals</p>
*
* @param contentAssistRequest
* @param templateContext
* @param context
*/
private void addTemplates(ContentAssistRequest contentAssistRequest, String templateContext,
CompletionProposalInvocationContext context) {
if (contentAssistRequest != null) {
boolean useProposalList = !contentAssistRequest.shouldSeparate();
if (fTemplateProcessor != null) {
fTemplateProcessor.setContextType(templateContext);
ICompletionProposal[] proposals =
fTemplateProcessor.computeCompletionProposals(
context.getViewer(), context.getInvocationOffset());
for (int i = 0; i < proposals.length; ++i) {
if (useProposalList) {
contentAssistRequest.addProposal(proposals[i]);
}
else {
contentAssistRequest.addMacro(proposals[i]);
}
}
}
}
}
/**
* The start point of TML content assist
*/
public List computeCompletionProposals(CompletionProposalInvocationContext context, IProgressMonitor monitor) {
List list = new ArrayList(super.computeCompletionProposals(context, monitor));
if (fTemplateProcessor != null) {
fTemplateProcessor.setContextType(TemplateContextTypeIdsXML.ALL);
ICompletionProposal[] proposals = fTemplateProcessor.computeCompletionProposals(context.getViewer(), context.getInvocationOffset());
if (proposals != null) {
for (int i = 0; i < proposals.length; i++) {
list.add(proposals[i]);
}
}
}
return list;
}
}