Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2007 Tim Wood
   *
   * 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.
  */
 /*
  * Copyright 2009 Tim Wood
  *
  * 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 uk.co.flamingpenguin.jewel.cli;
 
 
 final class ArgumentInvocationHandler<O> implements InvocationHandler
 {
    private final OptionsSpecification<O> m_specification;
    private final Class<O> m_klass;
    private final TypedArguments m_arguments;
 
    ArgumentInvocationHandler(final Class<O> klass,
                              final OptionsSpecification<O> specification,
                              final TypedArguments arguments)
    {
        = klass;
        = specification;
        = arguments;
    }

   
 
    public Object invoke(final Object proxyfinal Method methodfinal Object[] argsthrows Throwable
    {
       if(args == null)
       {
          if(method.getName().equals("hashCode"))
          {
             return this.hashCode();
          }
          else if(method.getName().equals("toString"))
          {
             return .getName();
          }
       }
 
       if(args != null && args.length == 1 && method.getName().equals("equals"))
       {
          final Object that = args[0];
          return Proxy.isProxyClass(that.getClass()) && Proxy.getInvocationHandler(that).equals(this);
       }
       if(args != null && args.length != 0)
       {
          throw new UnsupportedOperationException(String.format("Method (%s) with arguments not supported for reading argument values"method.toGenericString()));
       }
       else if(method.isAnnotationPresent(Unparsed.class))
       {
          return .getUnparsedValue();
       }
       else if(.hasUnparsedSpecification() &&
               .getUnparsedSpecification().isOptional() &&
               .getUnparsedSpecification().getOptionalityMethod().equals(method))
       {
          return .hasUnparsedValue();
       }
       else if(!.isSpecified(method))
       {
          throw new UnsupportedOperationException(String.format("Method (%s) is not annotated for option specification"method.toGenericString()));
       }
 
       final OptionMethodSpecification specification = .getSpecification(method);
 
       if(.isExistenceChecker(method) || !specification.hasValue())
       {
          return optionPresent(specification);
       }
       return getValue(methodspecification);
    }
 
    private Object optionPresent(final TypedArguments argumentsfinal ArgumentMethodSpecification specification)
   {
      return arguments.contains(specification);
   }
   {
      final Object value = arguments.getValue(specification);
      if(value == null)
      {
         throw new OptionNotPresentException(specification);
      }
      return value;
   }
New to GrepCode? Check out our FAQ X