package org.eclipse.jst.jsf.facelet.ui.internal.contentassist; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.core.resources.IProject; import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory; import org.eclipse.jst.jsf.context.resolver.structureddocument.IWorkspaceContextResolver; import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext; import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory2; import org.eclipse.jst.jsf.facelet.core.internal.cm.FaceletDocumentFactory; import org.eclipse.jst.jsf.facelet.core.internal.util.ViewUtil; import org.eclipse.jst.jsf.facelet.core.internal.util.ViewUtil.PrefixEntry; import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument; import org.eclipse.wst.xml.core.internal.contentmodel.CMNode; import org.eclipse.wst.xml.core.internal.contentmodel.modelquery.extension.ModelQueryExtension; import org.w3c.dom.Element; /** * A model query extension used to help support content assist in html files. * * @author cbateman * */ public class MyModelQueryExtension extends ModelQueryExtension { @Override public String[] getAttributeValues(Element ownerElement, String namespace, String name) { // TODO Auto-generated method stub return super.getAttributeValues(ownerElement, namespace, name); } @Override public CMNode[] getAvailableElementContent(Element parentElement, String namespace, int includeOptions) { final IStructuredDocumentContext context = IStructuredDocumentContextFactory2.INSTANCE .getContext(parentElement); if (context != null) { final IWorkspaceContextResolver resolver = IStructuredDocumentContextResolverFactory.INSTANCE .getWorkspaceContextResolver(context); if (resolver != null) { final IProject project = resolver.getProject(); final FaceletDocumentFactory factory = new FaceletDocumentFactory(project); final Map<String, PrefixEntry> map = ViewUtil.getDocumentNamespaces(parentElement.getOwnerDocument()); String prefix = null; for (final Map.Entry<String, PrefixEntry> entry : map.entrySet()) { if (entry.getValue().getUri().equals(namespace)) { prefix = entry.getValue().getPrefix(); break; } } if (prefix != null) { CMDocument document = factory.createCMDocumentForContext(namespace, prefix); if (document != null) { List<CMNode> nodes = new ArrayList<CMNode>(); for (final Iterator<?> it = document.getElements().iterator(); it.hasNext();) { nodes.add((CMNode)it.next()); } return nodes.toArray(new CMNode[0]); } } } } return new CMNode[0]; } }