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

org.skyway.spring.util.dao.call.DatabaseObjectName Maven / Gradle / Ivy

The newest version!
/**
* Copyright 2007 - 2011 Skyway Software, Inc.
*/
package org.skyway.spring.util.dao.call;

import java.sql.DatabaseMetaData;
import java.sql.SQLException;

public class DatabaseObjectName {
	private DatabaseMetaData databaseMetaData;
	private String objectName;
	private String schemaName;
	private String fullName;

	public DatabaseObjectName(String fullName, DatabaseMetaData databaseMetaData){
		this.databaseMetaData = databaseMetaData;
		this.parseName(fullName);
	}
	
	public String getIdentifierQuoteString(){
		try{
			return databaseMetaData.getIdentifierQuoteString();
		}catch(SQLException x){
			// Assume this means this database does not support quoted identifiers
			return null;
		}
	}
	
	public boolean supportsIdentifierQuoting(){
		return getIdentifierQuoteString() != null && getIdentifierQuoteString().length() > 0;
	}
	
	public boolean isSchemaNameQuoted(){
		return isNameQuoted(schemaName);
	}
	
	public boolean isObjectNameQuoted(){
		return isNameQuoted(objectName);
	}
	
	public String getQuotedSchemaName(){
		if (isSchemaNameQuoted()){
			return schemaName;
		}else{
			return quote(schemaName);
		}
	}
	
	public String getQuotedObjectName(){
		if (isObjectNameQuoted()){
			return objectName;
		}else{
			return quote(objectName);
		}
	}
	
	public String getUnquotedSchemaName(){
		if (isSchemaNameQuoted()){
			return unquote(schemaName);
		}else{
			return schemaName;
		}
	}
	
	public String getUnquotedObjectName(){
		if (isObjectNameQuoted()){
			return unquote(objectName);
		}else{
			return objectName;
		}
	}
	
	public String getRawName(){
		return fullName;
	}
	
	public String getRawSchemaName(){
		return schemaName;
	}
	
	public String getRawObjectName(){
		return objectName;
	}
	
	public String getSchemaName(){
		return stored(schemaName);
	}
	
	public String getObjectName(){
		return stored(objectName);
	}

	public boolean isNameQuoted(String identifier){
		return identifier != null && supportsIdentifierQuoting() ? identifier.startsWith(this.getIdentifierQuoteString()) && identifier.endsWith(getIdentifierQuoteString()) : false;
	}
	
	public String unquote(String identifier){
		String unquotedIdentifier = null;
		
		if (identifier != null && supportsIdentifierQuoting()){
			if (isNameQuoted(identifier)){
				unquotedIdentifier = identifier.substring(getIdentifierQuoteString().length(), identifier.length() - getIdentifierQuoteString().length());
			}
		}
		
		return unquotedIdentifier != null ? unquotedIdentifier : identifier;
	}
	
	public String quote(String identifier){
		String unquotedIdentifier = null;
		
		if (identifier != null && supportsIdentifierQuoting()){
			if (!isNameQuoted(identifier)){
				unquotedIdentifier = new StringBuilder().append(getIdentifierQuoteString()).append(identifier).append(getIdentifierQuoteString()).toString();
			}
		}
		
		return unquotedIdentifier != null ? unquotedIdentifier : identifier;
	}

	public String stored(String identifier){
		String storedIdentifier = null;
		
		if (identifier != null){
			try{
				if (isNameQuoted(identifier)){
					identifier = unquote(identifier);
					if (databaseMetaData.storesLowerCaseQuotedIdentifiers()){
						storedIdentifier = identifier.toLowerCase();
					}else if (databaseMetaData.storesMixedCaseQuotedIdentifiers()){
						storedIdentifier = identifier;
					}else if (databaseMetaData.storesUpperCaseQuotedIdentifiers()){
						storedIdentifier = identifier.toUpperCase();
					}else{
						storedIdentifier = identifier;
					}
				}else{
					if (databaseMetaData.storesLowerCaseIdentifiers()){
						storedIdentifier = identifier.toLowerCase();
					}else if (databaseMetaData.storesMixedCaseIdentifiers()){
						storedIdentifier = identifier;
					}else if (databaseMetaData.storesUpperCaseIdentifiers()){
						storedIdentifier = identifier.toUpperCase();
					}else{
						storedIdentifier = identifier;
					}
				}
			}catch(SQLException x){
				// We don't know what the database supports so don't alter the identifier
				storedIdentifier = identifier;
			}
		}
		
		return storedIdentifier;
	}

	private void parseName(String databaseObjectName){
		int index;
		
		if (databaseObjectName == null || databaseObjectName.length() == 0){
			throw new IllegalArgumentException("Database object name must be provided."); //$NON-NLS-1$
		}
		
		fullName = databaseObjectName.trim();
		
		index = fullName.indexOf("."); //$NON-NLS-1$
		if (index != -1){
			schemaName = fullName.substring(0, index);
			objectName = fullName.substring(index + 1);
		}else{
			objectName = fullName;
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy