blob: f2b80aad63f3ea2a25626cc340f890f628781824 [file] [log] [blame]
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];
}
}