// Path: strutsclipse-plugin/src/com/amashchenko/eclipse/strutsclipse/xmlparser/ElementRegion.java
// public class ElementRegion {
// 	private final String name;
// 	private final String value;
// 	private final IRegion valueRegion;
// 
// 	public ElementRegion(String elementName, String elementValue, int valOffset) {
// 		this.name = elementName;
// 		this.value = elementValue;
// 		this.valueRegion = new Region(valOffset, elementValue == null ? 0
// 				: elementValue.length());
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// 
// 	public String getValue() {
// 		return value;
// 	}
// 
// 	public IRegion getValueRegion() {
// 		return valueRegion;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "ElementRegion [name=" + name + ", value=" + value
// 				+ ", valueRegion=" + valueRegion + "]";
// 	}
// }
// 
// Path: strutsclipse-plugin/src/com/amashchenko/eclipse/strutsclipse/xmlparser/TagGroup.java
// public class TagGroup {
// 	// current / parent tag
// 	private final TagRegion parentTagRegion;
// 
// 	private final List<TagRegion> tagRegions;
// 
// 	public TagGroup(TagRegion parentTagRegion, List<TagRegion> tagRegions) {
// 		this.parentTagRegion = parentTagRegion;
// 		this.tagRegions = tagRegions;
// 	}
// 
// 	public TagRegion getParentTagRegion() {
// 		return parentTagRegion;
// 	}
// 
// 	public List<TagRegion> getTagRegions() {
// 		return tagRegions;
// 	}
// }
// 
// Path: strutsclipse-plugin/src/com/amashchenko/eclipse/strutsclipse/xmlparser/TagRegion.java
// public class TagRegion {
// 	private final String name;
// 	private final ElementRegion currentElement;
// 	private final String currentElementValuePrefix;
// 	private final Map<String, ElementRegion> attrs;
// 
// 	public TagRegion(String tagName, ElementRegion currelement,
// 			String currelementvalprefix, List<ElementRegion> attrslist) {
// 		this.name = tagName;
// 		this.currentElement = currelement;
// 		this.currentElementValuePrefix = currelementvalprefix;
// 
// 		this.attrs = createMapAttrs(attrslist);
// 	}
// 
// 	private Map<String, ElementRegion> createMapAttrs(
// 			List<ElementRegion> attrslist) {
// 		Map<String, ElementRegion> map = null;
// 		if (attrslist != null) {
// 			map = new HashMap<String, ElementRegion>();
// 			for (ElementRegion r : attrslist) {
// 				if (r != null) {
// 					map.put(r.getName(), r);
// 				}
// 			}
// 		}
// 		return map;
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// 
// 	public ElementRegion getCurrentElement() {
// 		return currentElement;
// 	}
// 
// 	public String getCurrentElementValuePrefix() {
// 		return currentElementValuePrefix;
// 	}
// 
// 	public Map<String, ElementRegion> getAttrs() {
// 		return attrs;
// 	}
// 
// 	/**
// 	 * Gets safely attribute value.
// 	 * 
// 	 * @param attrName
// 	 *            Name of the attribute to get value from.
// 	 * @param defaultValue
// 	 *            Default value to return in case of any null.
// 	 * @return Attribute value or defaultValue. The defaultValue will be
// 	 *         returned if attributes are null or attribute with such name
// 	 *         doesn't exist or it is null.
// 	 */
// 	public String getAttrValue(String attrName, String defaultValue) {
// 		String value = defaultValue;
// 		if (attrs != null) {
// 			ElementRegion r = attrs.get(attrName);
// 			if (r != null) {
// 				value = r.getValue();
// 			}
// 		}
// 		return value;
// 	}
// }


import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.junit.Assert;
import org.junit.Test;
import com.amashchenko.eclipse.strutsclipse.xmlparser.ElementRegion;
import com.amashchenko.eclipse.strutsclipse.xmlparser.TagGroup;
import com.amashchenko.eclipse.strutsclipse.xmlparser.TagRegion;
	}

	// getPackageNamespaces
	@Test
	public void testGetPackageNamespaces() throws Exception {
		final String namespace = "/3";
		final String content = "<package name=\"firstpackage\" namespace=\"/1\"><action name=\"in1\"></action><action name=\"in2\"></action></package>"
				+ "<package name=\"secondpackage\"><action name=\"in3\"></action></package>"
				+ "<package name=\"thirdpackage\" namespace=\""
				+ namespace
				+ "\"><action name=\"in4\"></action></package>"
				+ "<package name=\"fourthpackage\" namespace=\"/4\"></package>";
		IDocument document = new Document(content);

		Set<String> packageNamespaces = strutsXmlParser
				.getPackageNamespaces(document);
		Assert.assertNotNull(packageNamespaces);
		Assert.assertEquals(3, packageNamespaces.size());
		Assert.assertTrue(packageNamespaces.contains(namespace));
	}

	// getConstantNameRegions
	@Test
	public void testGetConstantNameRegions() throws Exception {
		final String one = "one";
		final String content = "<constant name='"
				+ one
				+ "' value='' /><constant name='two' value='' /><constant name='three' value='' />";
		IDocument document = new Document(content);

// Path: strutsclipse-plugin/src/com/amashchenko/eclipse/strutsclipse/xmlparser/ElementRegion.java
// public class ElementRegion {
// 	private final String name;
// 	private final String value;
// 	private final IRegion valueRegion;
// 
// 	public ElementRegion(String elementName, String elementValue, int valOffset) {
// 		this.name = elementName;
// 		this.value = elementValue;
// 		this.valueRegion = new Region(valOffset, elementValue == null ? 0
// 				: elementValue.length());
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// 
// 	public String getValue() {
// 		return value;
// 	}
// 
// 	public IRegion getValueRegion() {
// 		return valueRegion;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "ElementRegion [name=" + name + ", value=" + value
// 				+ ", valueRegion=" + valueRegion + "]";
// 	}
// }
// 
// Path: strutsclipse-plugin/src/com/amashchenko/eclipse/strutsclipse/xmlparser/TagGroup.java
// public class TagGroup {
// 	// current / parent tag
// 	private final TagRegion parentTagRegion;
// 
// 	private final List<TagRegion> tagRegions;
// 
// 	public TagGroup(TagRegion parentTagRegion, List<TagRegion> tagRegions) {
// 		this.parentTagRegion = parentTagRegion;
// 		this.tagRegions = tagRegions;
// 	}
// 
// 	public TagRegion getParentTagRegion() {
// 		return parentTagRegion;
// 	}
// 
// 	public List<TagRegion> getTagRegions() {
// 		return tagRegions;
// 	}
// }
// 
// Path: strutsclipse-plugin/src/com/amashchenko/eclipse/strutsclipse/xmlparser/TagRegion.java
// public class TagRegion {
// 	private final String name;
// 	private final ElementRegion currentElement;
// 	private final String currentElementValuePrefix;
// 	private final Map<String, ElementRegion> attrs;
// 
// 	public TagRegion(String tagName, ElementRegion currelement,
// 			String currelementvalprefix, List<ElementRegion> attrslist) {
// 		this.name = tagName;
// 		this.currentElement = currelement;
// 		this.currentElementValuePrefix = currelementvalprefix;
// 
// 		this.attrs = createMapAttrs(attrslist);
// 	}
// 
// 	private Map<String, ElementRegion> createMapAttrs(
// 			List<ElementRegion> attrslist) {
// 		Map<String, ElementRegion> map = null;
// 		if (attrslist != null) {
// 			map = new HashMap<String, ElementRegion>();
// 			for (ElementRegion r : attrslist) {
// 				if (r != null) {
// 					map.put(r.getName(), r);
// 				}
// 			}
// 		}
// 		return map;
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// 
// 	public ElementRegion getCurrentElement() {
// 		return currentElement;
// 	}
// 
// 	public String getCurrentElementValuePrefix() {
// 		return currentElementValuePrefix;
// 	}
// 
// 	public Map<String, ElementRegion> getAttrs() {
// 		return attrs;
// 	}
// 
// 	/**
// 	 * Gets safely attribute value.
// 	 * 
// 	 * @param attrName
// 	 *            Name of the attribute to get value from.
// 	 * @param defaultValue
// 	 *            Default value to return in case of any null.
// 	 * @return Attribute value or defaultValue. The defaultValue will be
// 	 *         returned if attributes are null or attribute with such name
// 	 *         doesn't exist or it is null.
// 	 */
// 	public String getAttrValue(String attrName, String defaultValue) {
// 		String value = defaultValue;
// 		if (attrs != null) {
// 			ElementRegion r = attrs.get(attrName);
// 			if (r != null) {
// 				value = r.getValue();
// 			}
// 		}
// 		return value;
// 	}
// }


// Path: strutsclipse-test/src/com/amashchenko/eclipse/strutsclipse/strutsxml/StrutsXmlParserTest.java
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.junit.Assert;
import org.junit.Test;
import com.amashchenko.eclipse.strutsclipse.xmlparser.ElementRegion;
import com.amashchenko.eclipse.strutsclipse.xmlparser.TagGroup;
import com.amashchenko.eclipse.strutsclipse.xmlparser.TagRegion;

	}

	// getPackageNamespaces
	@Test
	public void testGetPackageNamespaces() throws Exception {
		final String namespace = "/3";
		final String content = "<package name=\"firstpackage\" namespace=\"/1\"><action name=\"in1\"></action><action name=\"in2\"></action></package>"
				+ "<package name=\"secondpackage\"><action name=\"in3\"></action></package>"
				+ "<package name=\"thirdpackage\" namespace=\""
				+ namespace
				+ "\"><action name=\"in4\"></action></package>"
				+ "<package name=\"fourthpackage\" namespace=\"/4\"></package>";
		IDocument document = new Document(content);

		Set<String> packageNamespaces = strutsXmlParser
				.getPackageNamespaces(document);
		Assert.assertNotNull(packageNamespaces);
		Assert.assertEquals(3, packageNamespaces.size());
		Assert.assertTrue(packageNamespaces.contains(namespace));
	}

	// getConstantNameRegions
	@Test
	public void testGetConstantNameRegions() throws Exception {
		final String one = "one";
		final String content = "<constant name='"
				+ one
				+ "' value='' /><constant name='two' value='' /><constant name='three' value='' />";
		IDocument document = new Document(content);

		List<ElementRegion> constantNameRegions = strutsXmlParser