Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2007 Daniel Spiewak
   * 
   * Licensed under the Apache License, Version 2.0 (the "License"); 
   * you may not use this file except in compliance with the License. 
   * You may obtain a copy of the License at
   * 
   *	    http://www.apache.org/licenses/LICENSE-2.0 
   * 
  * Unless required by applicable law or agreed to in writing, software 
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package net.java.ao;
 
 
 import static com.google.common.base.Preconditions.*;
 
 final class DelegateConnectionHandler implements InvocationHandler
 {
     private final Connection delegate;
     private boolean closeable;
 
     private DelegateConnectionHandler(Connection delegate)
     {
         this. = checkNotNull(delegate);
         this. = true;
     }
 
     public Object invoke(Object proxyMethod methodObject[] argsthrows Throwable
     {
         if (isSetCloseableMethod(method))
         {
             setCloseable((Booleanargs[0]);
             return .;
         }
 
         if (isIsCloseableMethod(method))
         {
             return isCloseable();
         }
 
 
         if (isCloseMethod(method))
         {
             close();
             return .;
         }
         else if (isIsClosedMethod(method))
         {
             return isClosed();
         }
 
         return delegate(methodargs);
     }
 
     private void setCloseable(boolean closeable)
     {
         this. = closeable;
     }
 
     private boolean isCloseable()
     {
         return ;
     }
 
     private void close() throws SQLException
     {
         if (isCloseable())
         {
             .close();
         }
     }
 
     private boolean isClosed() throws SQLException
     {
         return .isClosed();
     }
 
     private Object delegate(Method methodObject[] argsthrows NoSuchMethodExceptionIllegalAccessExceptionThrowable
     {
         final Method m = .getClass().getMethod(method.getName(), method.getParameterTypes());
         m.setAccessible(true);
         try
         {
             return m.invoke(args);
         }
         catch (InvocationTargetException e)
         {
             throw e.getCause();
         }
    }
    public static DelegateConnection newInstance(Connection c)
    {
        return (DelegateConnection) Proxy.newProxyInstance(
                DelegateConnectionHandler.class.getClassLoader(),
                new Class[]{DelegateConnection.class},
                new DelegateConnectionHandler(c));
    }
    private static boolean isSetCloseableMethod(Method method)
    {
        return method.getName().equals("setCloseable")
                && method.getParameterTypes().length == 1
                && method.getParameterTypes()[0].equals(boolean.class);
    }
    private static boolean isIsCloseableMethod(Method method)
    {
        return method.getName().equals("isCloseable")
                && method.getParameterTypes().length == 0;
    }
    private static boolean isCloseMethod(Method method)
    {
        return method.getName().equals("close")
                && method.getParameterTypes().length == 0;
    }
    private static boolean isIsClosedMethod(Method method)
    {
        return method.getName().equals("isClosed")
                && method.getParameterTypes().length == 0;
    }
New to GrepCode? Check out our FAQ X