| /******************************************************************************* |
| * Copyright (c) 2006 Oracle Corporation. |
| * 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: |
| * Cameron Bateman/Oracle - initial API and implementation |
| * |
| ********************************************************************************/ |
| |
| package org.eclipse.jst.jsf.context.resolver.structureddocument.internal; |
| |
| import org.eclipse.jst.jsf.context.resolver.IDocumentContextResolver; |
| import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext; |
| |
| /** |
| * Defines a resolver that can resolve context information in the |
| * structured document region context. |
| * |
| * Unless otherwise stated, the context region is the most specific |
| * region (leaf) in which the current context is contained. |
| * |
| * Note: this interface may use internal/provisional types. |
| * |
| * @author cbateman |
| * |
| */ |
| public interface ITextRegionContextResolver extends IDocumentContextResolver |
| { |
| /** |
| * @return the text for the context region |
| */ |
| String getRegionText(); |
| |
| /** |
| * @return the document relative offset of the start of the region |
| * in which the context in is contained or -1 if the offset cannot be determined. |
| */ |
| int getStartOffset(); |
| |
| /** |
| * @return the document relative offset of the end of the region |
| * in which the context is contained or -1 if the offset cannot be determined |
| */ |
| int getEndOffset(); |
| |
| /** |
| * @return the length of the most specific region in which the context |
| * is contained or -1 if the length cannot be determined. |
| */ |
| int getLength(); |
| |
| /** |
| * @return the most specific TextRegion type for the current context |
| */ |
| String getRegionType(); |
| |
| /** |
| * @return the path to the most specific TextRegtion for the current context |
| * note that this does not include the actual region for the current region. |
| * That is returned by getRegionType(). |
| * |
| */ |
| String[] getRegionTypePath(); |
| |
| |
| /** |
| * The offset into the structured document will be set to be |
| * the start offset of the previous region |
| * |
| * @return a context for the previous sibling of this context's |
| * text region parent or null if no previous sibling exists |
| */ |
| IStructuredDocumentContext getPreviousContext(); |
| |
| /** |
| * The offset into the structured document will be set to be |
| * the start offset of the next region |
| * |
| * @return a context for the next sibling of this context's |
| * text region parent or null if no next sibling exists |
| */ |
| IStructuredDocumentContext getNextContext(); |
| |
| /** |
| * Relative path works backwards from the current context. So if the |
| * path to current context is /a/b/c/d/e then: |
| * |
| * matchesRelative({"e"}) == true |
| * matchesRelative({"d", "e"}) == true |
| * matchesRelative({"c", "d", "e"}) == true |
| * matchesRelative({"b", "c", "d", "e"}) == true |
| * matchesRelative({"a", "b", "c", "d", "e"}) == true |
| * |
| * because in every case the path matches working backward from the current |
| * context |
| * |
| * but |
| * |
| * matchesRelative({a}) == false because context/.. == e not a |
| * |
| * TODO: what does path = new String[0] mean? |
| * |
| * @param path |
| * @return true if the relative path matches the path to the current context |
| * working relative to the current context. |
| */ |
| boolean matchesRelative(String[] path); |
| |
| /** |
| * Absolute path works forward from the root of the document to the |
| * current context. So if the path to the current context is /a/b/c/d/e then: |
| * |
| * matchesAbsolute({"a", "b", "c", "d", "e"}) == true |
| * |
| * but |
| * |
| * matchesAbsolute({"b", "c", "d", "e"}) == true because starting from the root |
| * you cannot follow /b/c/d/e to the context. |
| * |
| * @param path |
| * @return true if the absolute path from the root of the document |
| * matches the current context |
| */ |
| boolean matchesAbsolute(String[] path); |
| } |