blob: cbaf65f465a3e0624171dfde83e5c64896399dea [file] [log] [blame]
/*******************************************************************************
* 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
*******************************************************************************/
package org.eclipse.wst.sse.ui.internal.contentassist;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.contentassist.IContextInformation;
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
import org.eclipse.wst.sse.core.StructuredModelManager;
import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
/**
* <p>A {@link IContextInformationValidator} for structured documents</p>
*/
public class ContextInformationValidator implements IContextInformationValidator {
/** the installed document position */
private int fDocumentPosition;
/** the installed document */
private IStructuredDocument fDocument;
/** the installed region start*/
private IndexedRegion fRegion;
/**
* <p>Default constructor</p>
*/
public ContextInformationValidator() {
fDocumentPosition = -1;
fDocument = null;
}
/**
* @see org.eclipse.jface.text.contentassist.IContextInformationValidator#install(org.eclipse.jface.text.contentassist.IContextInformation,
* org.eclipse.jface.text.ITextViewer, int)
*/
public void install(IContextInformation info, ITextViewer viewer, int documentPosition) {
fDocumentPosition = documentPosition;
fDocument = (IStructuredDocument)viewer.getDocument();
}
/**
* @see org.eclipse.jface.text.contentassist.IContextInformationValidator#isContextInformationValid(int)
*/
public boolean isContextInformationValid(int documentPosition) {
/*
* determine whether or not this context info should still be
* showing... if cursor still within the same region then it's valid
*/
boolean result = false;
calculateInstalledIndexedRegion();
if (fRegion != null) {
int start = fRegion.getStartOffset();
int end = fRegion.getEndOffset();
result = (documentPosition < end) && (documentPosition > start + 1);
}
return result;
}
/**
* @return {@link IndexedRegion} that this validator was installed on
*/
private void calculateInstalledIndexedRegion() {
if (fRegion == null) {
IStructuredModel model = null;
try {
model = StructuredModelManager.getModelManager().getModelForRead(fDocument);
if (model != null) {
fRegion = model.getIndexedRegion(fDocumentPosition);
}
}
finally {
if (model != null)
model.releaseFromRead();
}
}
}
}