View Javadoc

    1   /**
    2    * Copyright (c) 2008-2011, http://www.snakeyaml.org
    3    *
    4    * Licensed under the Apache License, Version 2.0 (the "License");
    5    * you may not use this file except in compliance with the License.
    6    * You may obtain a copy of the License at
    7    *
    8    *     http://www.apache.org/licenses/LICENSE-2.0
    9    *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16
    17  package org.yaml.snakeyaml.introspector;
    18
    19  import java.beans.PropertyDescriptor;
    20
    21  import org.yaml.snakeyaml.error.YAMLException;
    22
    23  public class MethodProperty extends GenericProperty {
    24
    25      private final PropertyDescriptor property;
    26      private final boolean readable;
    27      private final boolean writable;
    28
    29      public MethodProperty(PropertyDescriptor property) {
    30          super(property.getName(), property.getPropertyType(),
    31                  property.getReadMethod() == null ? null : property.getReadMethod()
    32                          .getGenericReturnType());
    33          this.property = property;
    34          this.readable = property.getReadMethod() != null;
    35          this.writable = property.getWriteMethod() != null;
    36      }
    37
    38      @Override
    39      public void set(Object object, Object value) throws Exception {
    40          property.getWriteMethod().invoke(object, value);
    41      }
    42
    43      @Override
    44      public Object get(Object object) {
    45          try {
    46              property.getReadMethod().setAccessible(true);// issue 50
    47              return property.getReadMethod().invoke(object);
    48          } catch (Exception e) {
    49              throw new YAMLException("Unable to find getter for property '" + property.getName()
    50                      + "' on object " + object + ":" + e);
    51          }
    52      }
    53
    54      @Override
    55      public boolean isWritable() {
    56          return writable;
    57      }
    58
    59      @Override
    60      public boolean isReadable() {
    61          return readable;
    62      }
    63  }