/******************************************************************************* * Copyright (c) 2012 Pivotal Software, Inc. * 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: * Pivotal Software, Inc. - initial API and implementation *******************************************************************************/ package org.grails.ide.eclipse.editor.gsp.tags; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.jst.jsp.core.internal.domdocument.DOMDocumentForJSP; import org.eclipse.jst.jsp.core.internal.domdocument.ElementImplForJSP; import org.eclipse.jst.jsp.core.internal.modelquery.JSPModelQueryCMProvider; import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument; import org.grails.ide.eclipse.core.internal.plugins.GrailsCore; import org.w3c.dom.Node; import org.grails.ide.eclipse.editor.gsp.model.GSPStructuredModel; /** * @author Andrew Eisenberg * @author Nieraj Singh * @created Nov 27, 2009 */ public class GSPModelQueryCMProvider extends JSPModelQueryCMProvider { private PerProjectTagProvider tagProvider; public GSPModelQueryCMProvider(IStructuredModel model) { super(); GSPStructuredModel gspModel = model instanceof GSPStructuredModel ? (GSPStructuredModel) model : null; if (gspModel != null) { IProject project = gspModel.getProject(); if (project != null) { tagProvider = GrailsCore.get().connect(project, PerProjectTagProvider.class); // will be null if not a grails project if (tagProvider != null) { tagProvider.connect(model); } } } } GSPTagLibDocument getDocumentForTagName(String name) { return tagProvider != null ? tagProvider.getDocumentForTagName(name) : null; } public List<GSPTagLibDocument> getGroovyAllTagLibs() { if (tagProvider != null) { return tagProvider.getAllGroovyTagLibs(); } else { return null; } } @Override public CMDocument getCorrespondingCMDocument(Node node) { Node docNode; if (node instanceof DOMDocumentForJSP) { docNode = ((DOMDocumentForJSP) node).getDocumentElement(); } else { docNode = node; } CMDocument doc = docNode instanceof ElementImplForJSP && tagProvider != null ? tagProvider.getCorrespondingCMDocument(docNode) : null; if (doc != null) return doc; return docNode != null ? super.getCorrespondingCMDocument(docNode) : null; } }