All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.etlunit.util.regexp.PropertyExpression Maven / Gradle / Ivy

package org.etlunit.util.regexp;

/*

		Regular expression class compiled by the Regular Expression Compiler 1.5.0-SNAPSHOT

*/

import java.util.Map;
import java.util.HashMap;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public final class PropertyExpression
{
	public static final String PATTERN_RAW_TEXT = "(?'propertyName'[\\w_\\d]+)[\\s]*:[\\s]*(?'propertyDefaultValue'[\\w_\\d${}\\.]+)";
	public static final String PATTERN_TEXT;
	public static final Pattern pattern;
	private static final Map groupOffsets = new HashMap();

	private final Matcher matcher;
	private final CharSequence matchText;

	public static interface RegExpIterator
	{
		String replaceMatch(PropertyExpression e);
	}

	static
	{
		PATTERN_TEXT = PATTERN_RAW_TEXT.replaceAll("\\(\\?'[^']+'", "(");

		Pattern cpattern = Pattern.compile("(\\\\)?\\((\\?'([^']+)')?");

		Matcher matcher = cpattern.matcher(PATTERN_RAW_TEXT);

		int groupCount = 1;

		while (matcher.find())
		{
			if (matcher.group(1) != null)
			{
				continue;
			}

			String groupName = matcher.group(3);

			if (groupName != null)
			{
				groupOffsets.put(groupName, new Integer(groupCount));
			}

			groupCount++;
		}

		pattern = Pattern.compile(PATTERN_TEXT, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
	}


	private PropertyExpression(Matcher pMatcher, CharSequence ch)
	{
		matcher = pMatcher;
		matchText = ch;
	}

	public PropertyExpression(CharSequence ch)
	{
		this(pattern.matcher(ch), ch);
	}

	public static PropertyExpression match(CharSequence pText)
	{
		return new PropertyExpression(pText);
	}

	public int end()
	{
		return matcher.end();
	}

	public int end(int group)
	{
		return matcher.end(group);
	}

	public int start()
	{
		return matcher.start();
	}

	public int start(int group)
	{
		return matcher.start(group);
	}

	public String replaceAll(String replacement)
	{
		return matcher.replaceAll(replacement);
	}

	public String replaceAll(RegExpIterator it)
	{
		String match = matchText.toString();
		String str = "";
		int end = -1;

		while (hasNext())
		{
			str += match.substring(end == -1 ? 0 : end, start());
			str += it.replaceMatch(this);
			end = end();
		}

		str += match.substring(end == -1 ? 0 : end, match.length());
		return str;
	}

	public boolean matches()
	{
		return matcher.matches();
	}

	public boolean hasNext()
	{
		return matcher.find();
	}

	public int groupCount()
	{
		return matcher.groupCount();
	}

	public String group()
	{
		return matcher.group();
	}

	public String group(int i)
	{
		return matcher.group(i);
	}

	public PropertyExpression resetMatch(CharSequence seq)
	{
		return match(seq);
	}

	public String group(String name)
	{
		return matcher.group(groupOffsets.get(name).intValue());
	}

	private static String scope(String text, String name)
	{
		return text.replaceAll("(\\(\\?')(\\w+')", "$1" + name + ".$2");
	}


	public boolean hasPropertyName()
	{
		return group("propertyName") != null;
	}

	public String getPropertyName()
	{
		if (!hasPropertyName())
		{
			throw new IllegalArgumentException("Property not defined: PropertyName");
		}
		return group("propertyName");
	}

	public boolean hasPropertyDefaultValue()
	{
		return group("propertyDefaultValue") != null;
	}

	public String getPropertyDefaultValue()
	{
		if (!hasPropertyDefaultValue())
		{
			throw new IllegalArgumentException("Property not defined: PropertyDefaultValue");
		}
		return group("propertyDefaultValue");
	}

	public String toString()
	{
		return "{PropertyExpression, matchText='" + matchText + "'}[" + "(propertyName)=" + (hasPropertyName() ? getPropertyName() : "null") + ", (propertyDefaultValue)=" + (hasPropertyDefaultValue() ? getPropertyDefaultValue() : "null") + "]";
	}

	public static void main(String [] argv)
	{
		System.out.println(PATTERN_TEXT);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy