/******************************************************************************* * Copyright (c) 2001, 2005 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.dtd.core.internal.emf.util; import org.eclipse.wst.dtd.core.internal.emf.DTDAttribute; import org.eclipse.wst.dtd.core.internal.emf.DTDElement; import org.eclipse.wst.dtd.core.internal.emf.DTDElementContent; import org.eclipse.wst.dtd.core.internal.emf.DTDEntity; import org.eclipse.wst.dtd.core.internal.emf.DTDNotation; import org.eclipse.wst.dtd.core.internal.emf.DTDObject; import org.eclipse.wst.dtd.core.internal.emf.DTDParameterEntityReference; import org.eclipse.wst.dtd.core.internal.emf.DTDSourceOffset; public class DTDObjectFinder extends DTDVisitor { public class SourceOffset { // Convenience class to find containment of object private int start, end; public SourceOffset(int start, int end) { this.start = start; this.end = end; } public boolean contains(SourceOffset other) { if (this.start <= other.start && other.start <= this.end) { return true; } // end of if () return false; } } SourceOffset searchLocation; private SourceOffset offsetObjectFor(DTDSourceOffset s) { return new SourceOffset(s.getStartOffset(), s.getEndOffset()); } private void checkContainment(DTDObject o) { if (offsetObjectFor((DTDSourceOffset) o).contains(searchLocation)) { closestObject = o; } // end of if () } public DTDObjectFinder(int startOffset, int endOffset) { searchLocation = new SourceOffset(startOffset, endOffset); } public void visitDTDNotation(DTDNotation notation) { checkContainment(notation); super.visitDTDNotation(notation); } public void visitDTDEntity(DTDEntity entity) { checkContainment(entity); super.visitDTDEntity(entity); } public void visitDTDElement(DTDElement element) { checkContainment(element); super.visitDTDElement(element); } public void visitDTDAttribute(DTDAttribute attribute) { checkContainment(attribute); super.visitDTDAttribute(attribute); } public void visitDTDParameterEntityReference(DTDParameterEntityReference parmEntity) { checkContainment(parmEntity); super.visitDTDParameterEntityReference(parmEntity); } public void visitDTDElementContent(DTDElementContent content) { checkContainment(content); super.visitDTDElementContent(content); } private DTDObject closestObject = null; public DTDObject getClosestObject() { return closestObject; } /** * @generated */ protected SourceOffset offsetObjectForGen(DTDSourceOffset s) { return new SourceOffset(s.getStartOffset(), s.getEndOffset()); } /** * @generated */ protected void checkContainmentGen(DTDObject o) { if (offsetObjectFor((DTDSourceOffset) o).contains(searchLocation)) { closestObject = o; } // end of if () } /** * @generated */ protected void visitDTDNotationGen(DTDNotation notation) { checkContainment(notation); super.visitDTDNotation(notation); } /** * @generated */ protected void visitDTDEntityGen(DTDEntity entity) { checkContainment(entity); super.visitDTDEntity(entity); } /** * @generated */ protected void visitDTDElementGen(DTDElement element) { checkContainment(element); super.visitDTDElement(element); } /** * @generated */ protected void visitDTDAttributeGen(DTDAttribute attribute) { checkContainment(attribute); super.visitDTDAttribute(attribute); } /** * @generated */ protected void visitDTDParameterEntityReferenceGen(DTDParameterEntityReference parmEntity) { checkContainment(parmEntity); super.visitDTDParameterEntityReference(parmEntity); } /** * @generated */ protected void visitDTDElementContentGen(DTDElementContent content) { checkContainment(content); super.visitDTDElementContent(content); } /** * @generated */ protected DTDObject getClosestObjectGen() { return closestObject; } }// DTDObjectFinder