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

giis.tdrules.store.ids.SimpleIdentifier Maven / Gradle / Ivy

package giis.tdrules.store.ids;

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

import giis.portable.util.JavaCs;

/**
 * Clase base de la que heredan los identificadores de columna y esquema. Solo
 * contiene un metodo estatico para preprocesar identificadores simples que
 * usaran las clases derivadas
 */
public class SimpleIdentifier {
	private static Pattern pattern;

	protected SimpleIdentifier() {
	}

	/**
	 * Preprocesa el identificador pasado como parametro eliminando blancos Si se
	 * indica processQuotes transforma las comillas de forma que si el id tiene
	 * espacios en blanco siempre se pone entrecomillado, y si no los tiene, nunca
	 */
	public static String processIdentifier(String sid, boolean processQuotes) {
		String id = sid == null ? "" : sid.trim();
		if (processQuotes) {
			// Si hay comillas las quita y hace un trim
			boolean quotedWithBrackets = false;
			if (isQuoted(id)) {
				if (id.charAt(0) == '"')
					id = Quotation.removeQuotes(id, '"', '"');
				else if (id.charAt(0) == '[') {
					id = Quotation.removeQuotes(id, '[', ']');
					quotedWithBrackets = true;
				}
				id = id.trim(); // puede haber espacios entre comillas y nombre
			}
			// Vuelve a poner comillas si el id lo necesita
			boolean needsQuote = needsQuotation(id);
			if (needsQuote && quotedWithBrackets)
				id = getQuotedName(id, "[");
			else if (needsQuote) // cualquiera que tenga espacios lo pone entre comillas
				id = getQuotedName(id, "\"");
		}
		return id;
	}

	private static synchronized boolean needsQuotation(String name) {
		if (pattern == null)
			pattern = Pattern.compile("[^a-z0-9_\\$#]", Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(name);
		return matcher.find();
	}

	public static boolean isQuoted(String name) {
		return Quotation.isQuoted(name, '"', '"') || Quotation.isQuoted(name, '[', ']');
	}

	public static String getQuote(String name) {
		if (name.contains("\"")) {
			return "\"";
		} else if (name.contains("[")) {
			return "[";
		} else
			return "";
	}

	public static String getQuotedName(String name, String quoteValue) {
		name = name.trim();
		if (!isQuoted(name))
			return quoteValue + name + ("[".equals(quoteValue) ? "]" : quoteValue);
		return name;
	}

	public static String getLastComponent(String name) {
		if (name.contains(".")) {
			String[] components = JavaCs.splitByDot(name);
			return components[components.length - 1].trim();
		}
		return name.trim();
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy