/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.jdbc.custom; import java.io.File; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.sql.Connection; import java.sql.DatabaseMetaData; import org.teiid.core.designer.util.CoreArgCheck; import org.teiid.designer.jdbc.JdbcPlugin; /** * @since 8.0 */ public class ExcelConnectionHandler implements InvocationHandler { private Connection connection; private File excelFile; public ExcelConnectionHandler(Connection connection, String url) { CoreArgCheck.isNotNull(connection); CoreArgCheck.isNotNull(url); this.connection = connection; String fileName = getFilePath(url); excelFile = new File(fileName); if(!excelFile.exists()) { throw new IllegalArgumentException(JdbcPlugin.Util.getString("ExcelConnecton.FileNotFound", fileName)); //$NON-NLS-1$ } } /** * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) * @since 4.3 */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { String methodName = method.getName(); if(methodName.equals("getMetaData")) {//$NON-NLS-1$ return Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[] { DatabaseMetaData.class }, new ExcelDatabaseMetaDataHandler(this.connection.getMetaData(), excelFile)); } return method.invoke(this.connection, args); } protected static String getFilePath(String url) { String upperCaseUrl = url.toUpperCase(); int startIndex = upperCaseUrl.indexOf("DBQ");//$NON-NLS-1$ if(startIndex == -1) { throw new IllegalArgumentException(JdbcPlugin.Util.getString("ExcelConnecton.invalidUrl", url)); //$NON-NLS-1$ } startIndex = url.indexOf("=", startIndex);//$NON-NLS-1$ if(startIndex == -1) { throw new IllegalArgumentException(JdbcPlugin.Util.getString("ExcelConnecton.invalidUrl", url)); //$NON-NLS-1$ } startIndex++; int endIndex = url.indexOf(";", startIndex);//$NON-NLS-1$ if(endIndex == -1) { endIndex = url.indexOf("\"", startIndex);//$NON-NLS-1$ } if(endIndex == -1) { return url.substring(startIndex); } return url.substring(startIndex, endIndex); } }