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

org.etlunit.feature.database.DDLDirectiveNameExpression Maven / Gradle / Ivy

There is a newer version: 1.6.9
Show newest version
package org.etlunit.feature.database;

/*

		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 DDLDirectiveNameExpression
{
	public static final String PATTERN_RAW_TEXT = "[\\t ]*#[\\t ]*(?'directive'[\\w]+)[\\t ]*<[\\t ]*(?'ddlReference'[\\w_\\-/.]+)[\\t ]*>[\\t ]*";
	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(DDLDirectiveNameExpression 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 DDLDirectiveNameExpression(Matcher pMatcher, CharSequence ch)
	{
		matcher = pMatcher;
		matchText = ch;
	}

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

	public static DDLDirectiveNameExpression match(CharSequence pText)
	{
		return new DDLDirectiveNameExpression(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 DDLDirectiveNameExpression 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 hasDirective()
	{
		return group("directive") != null;
	}

	public String getDirective()
	{
		if (!hasDirective())
		{
			throw new IllegalArgumentException("Property not defined: Directive");
		}
		return group("directive");
	}

	public boolean hasDdlReference()
	{
		return group("ddlReference") != null;
	}

	public String getDdlReference()
	{
		if (!hasDdlReference())
		{
			throw new IllegalArgumentException("Property not defined: DdlReference");
		}
		return group("ddlReference");
	}

	public String toString()
	{
		return "{DDLDirectiveNameExpression, matchText='" + matchText + "'}[" + "(directive)=" + (hasDirective() ? getDirective() : "null") + ", (ddlReference)=" + (hasDdlReference() ? getDdlReference() : "null") + "]";
	}

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




© 2015 - 2024 Weber Informatics LLC | Privacy Policy