⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 propertyutilsbean.java

📁 一个很好实用的工作流OSWORKFLOW开发例子.有着非常优秀的灵活性.
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
      }    }    // can't find any    return -1;  }  /**   * <p>Retrieve the property descriptors for the specified class,   * introspecting and caching them the first time a particular bean class   * is encountered.</p>   * <p/>   * <p><strong>FIXME</strong> - Does not work with DynaBeans.</p>   *   * @param beanClass Bean class for which property descriptors are requested   * @throws IllegalArgumentException if <code>beanClass</code> is null   */  public PropertyDescriptor[] getPropertyDescriptors(Class beanClass)  {    if(beanClass == null)    {      throw new IllegalArgumentException("No bean class specified");    }    // Look up any cached descriptors for this bean class    PropertyDescriptor[] descriptors;    descriptors = (PropertyDescriptor[])descriptorsCache.get(beanClass);    if(descriptors != null)    {      return (descriptors);    }    // Introspect the bean and cache the generated descriptors    BeanInfo beanInfo;    try    {      beanInfo = Introspector.getBeanInfo(beanClass);    }    catch(IntrospectionException e)    {      return (new PropertyDescriptor[0]);    }    descriptors = beanInfo.getPropertyDescriptors();    if(descriptors == null)    {      descriptors = new PropertyDescriptor[0];    }    descriptorsCache.put(beanClass, descriptors);    return (descriptors);  }  /**   * <p>Retrieve the property descriptors for the specified bean,   * introspecting and caching them the first time a particular bean class   * is encountered.</p>   * <p/>   * <p><strong>FIXME</strong> - Does not work with DynaBeans.</p>   *   * @param bean Bean for which property descriptors are requested   * @throws IllegalArgumentException if <code>bean</code> is null   */  public PropertyDescriptor[] getPropertyDescriptors(Object bean)  {    if(bean == null)    {      throw new IllegalArgumentException("No bean specified");    }    return (getPropertyDescriptors(bean.getClass()));  }  /**   * <p>Return the Java Class repesenting the property editor class that has   * been registered for this property (if any).  This method follows the   * same name resolution rules used by <code>getPropertyDescriptor()</code>,   * so if the last element of a name reference is indexed, the property   * editor for the underlying property's class is returned.</p>   * <p/>   * <p>Note that <code>null</code> will be returned if there is no property,   * or if there is no registered property editor class.  Because this   * return value is ambiguous, you should determine the existence of the   * property itself by other means.</p>   * <p/>   * <p><strong>FIXME</strong> - Does not work with DynaBeans.</p>   *   * @param bean Bean for which a property descriptor is requested   * @param name Possibly indexed and/or nested name of the property for   *             which a property descriptor is requested   * @throws IllegalAccessException    if the caller does not have   *                                   access to the property accessor method   * @throws IllegalArgumentException  if <code>bean</code> or   *                                   <code>name</code> is null   * @throws IllegalArgumentException  if a nested reference to a   *                                   property returns null   * @throws InvocationTargetException if the property accessor method   *                                   throws an exception   * @throws NoSuchMethodException     if an accessor method for this   *                                   propety cannot be found   */  public Class getPropertyEditorClass(Object bean, String name) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException  {    if(bean == null)    {      throw new IllegalArgumentException("No bean specified");    }    if(name == null)    {      throw new IllegalArgumentException("No name specified");    }    PropertyDescriptor descriptor = getPropertyDescriptor(bean, name);    if(descriptor != null)    {      return (descriptor.getPropertyEditorClass());    }    else    {      return (null);    }  }  /**   * Return the Java Class representing the property type of the specified   * property, or <code>null</code> if there is no such property for the   * specified bean.  This method follows the same name resolution rules   * used by <code>getPropertyDescriptor()</code>, so if the last element   * of a name reference is indexed, the type of the property itself will   * be returned.  If the last (or only) element has no property with the   * specified name, <code>null</code> is returned.   *   * @param bean Bean for which a property descriptor is requested   * @param name Possibly indexed and/or nested name of the property for   *             which a property descriptor is requested   * @throws IllegalAccessException    if the caller does not have   *                                   access to the property accessor method   * @throws IllegalArgumentException  if <code>bean</code> or   *                                   <code>name</code> is null   * @throws IllegalArgumentException  if a nested reference to a   *                                   property returns null   * @throws InvocationTargetException if the property accessor method   *                                   throws an exception   * @throws NoSuchMethodException     if an accessor method for this   *                                   propety cannot be found   */  public Class getPropertyType(Object bean, String name) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException  {    if(bean == null)    {      throw new IllegalArgumentException("No bean specified");    }    if(name == null)    {      throw new IllegalArgumentException("No name specified");    }    PropertyDescriptor descriptor = getPropertyDescriptor(bean, name);    if(descriptor == null)    {      return (null);    }    else if(descriptor instanceof IndexedPropertyDescriptor)    {      return (((IndexedPropertyDescriptor)descriptor).getIndexedPropertyType());    }    else if(descriptor instanceof MappedPropertyDescriptor)    {      return (((MappedPropertyDescriptor)descriptor).getMappedPropertyType());    }    else    {      return (descriptor.getPropertyType());    }  }  /**   * <p>Return an accessible property getter method for this property,   * if there is one; otherwise return <code>null</code>.</p>   * <p/>   * <p><strong>FIXME</strong> - Does not work with DynaBeans.</p>   *   * @param descriptor Property descriptor to return a getter for   */  public Method getReadMethod(PropertyDescriptor descriptor)  {    return (MethodUtils.getAccessibleMethod(descriptor.getReadMethod()));  }  /**   * Return the value of the specified simple property of the specified   * bean, with no type conversions.   *   * @param bean Bean whose property is to be extracted   * @param name Name of the property to be extracted   * @throws IllegalAccessException    if the caller does not have   *                                   access to the property accessor method   * @throws IllegalArgumentException  if <code>bean</code> or   *                                   <code>name</code> is null   * @throws IllegalArgumentException  if the property name   *                                   is nested or indexed   * @throws InvocationTargetException if the property accessor method   *                                   throws an exception   * @throws NoSuchMethodException     if an accessor method for this   *                                   propety cannot be found   */  public Object getSimpleProperty(Object bean, String name) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException  {    if(bean == null)    {      throw new IllegalArgumentException("No bean specified");    }    if(name == null)    {      throw new IllegalArgumentException("No name specified");    }    // Validate the syntax of the property name    if(name.indexOf(PropertyUtils.NESTED_DELIM) >= 0)    {      throw new IllegalArgumentException("Nested property names are not allowed");    }    else if(name.indexOf(PropertyUtils.INDEXED_DELIM) >= 0)    {      throw new IllegalArgumentException("Indexed property names are not allowed");    }    else if(name.indexOf(PropertyUtils.MAPPED_DELIM) >= 0)    {      throw new IllegalArgumentException("Mapped property names are not allowed");    }    // Retrieve the property getter method for the specified property    PropertyDescriptor descriptor = getPropertyDescriptor(bean, name);    if(descriptor == null)    {      throw new NoSuchMethodException("Unknown property '" + name + "' in bean " + bean + " of type " + bean.getClass());    }    Method readMethod = getReadMethod(descriptor);    if(readMethod == null)    {      throw new NoSuchMethodException("Property '" + name + "' has no getter method");    }    // Call the property getter and return the value    Object value = invokeMethod(readMethod, bean, new Object[0]);    return (value);  }  /**   * <p>Return an accessible property setter method for this property,   * if there is one; otherwise return <code>null</code>.</p>   * <p/>   * <p><strong>FIXME</strong> - Does not work with DynaBeans.</p>   *   * @param descriptor Property descriptor to return a setter for   */  public Method getWriteMethod(PropertyDescriptor descriptor)  {    return (MethodUtils.getAccessibleMethod(descriptor.getWriteMethod()));  }  /**   * <p>Return <code>true</code> if the specified property name identifies   * a readable property on the specified bean; otherwise, return   * <code>false</code>.   *   * @param bean Bean to be examined   * @param name Property name to be evaluated   * @throws IllegalArgumentException if <code>bean</code>   *                                  or <code>name</code> is <code>null</code>   * @since BeanUtils 1.6   */  public boolean isReadable(Object bean, String name)  {    // Validate method parameters    if(bean == null)    {      throw new IllegalArgumentException("No bean specified");    }    if(name == null)    {      throw new IllegalArgumentException("No name specified");    }    // Return the requested result    try    {      PropertyDescriptor desc = getPropertyDescriptor(bean, name);      if(desc != null)      {        Method readMethod = desc.getReadMethod();        if((readMethod == null) && (desc instanceof IndexedPropertyDescriptor))        {          readMethod = ((IndexedPropertyDescriptor)desc).getIndexedReadMethod();        }        return (readMethod != null);      }      else      {        return (false);      }    }    catch(IllegalAccessException e)    {      return (false);    }    catch(InvocationTargetException e)    {      return (false);    }    catch(NoSuchMethodException e)    {      return (false);    }  }  /**   * <p>Return <code>true</code> if the specified property name identifies   * a writeable property on the specified bean; otherwise, return   * <code>false</code>.   *   * @param bean Bean to be examined   * @param name Property name to be evaluated   * @throws IllegalArgumentException if <code>bean</code>   *                                  or <code>name</code> is <code>null</code>   * @since BeanUtils 1.6   */  public boolean isWriteable(Object bean, String name)  {    // Validate method parameters    if(bean == null)    {      throw new IllegalArgumentException("No bean specified");    }    if(name == null)    {      throw new IllegalArgumentException("No name specified");    }    // Return the requested result    try    {      PropertyDescriptor desc = getPropertyDescriptor(bean, name);      if(desc != null)      {        Method writeMethod = desc.getWriteMethod();        if((writeMethod == null) && (desc instanceof IndexedPropertyDescriptor))        {          writeMethod = ((IndexedPropertyDescriptor)desc).getIndexedWriteMethod();        }        return (writeMethod != null);      }      else      {        return (false);      }    }    catch(IllegalAccessException e)    {      return (false);    }    catch(InvocationTargetException e)    {      return (false);    }    catch(NoSuchMethodException e)    {      return (false);    }  }  /**   * Set the value of the specified indexed property of the specified   * bean, with no type conversions.  The zero-relative index of the   * required value must be included (in square brackets) as a suffix to   * the property name, or <code>IllegalArgumentException</code> will be   * thrown.  In addition to supporting the JavaBeans specification, this   * method has been extended to support <code>List</code> objects as well.   *   * @param bean  Bean whose property is to be modified   * @param name  <code>propertyname[index]</code> of the property value   *              to be modified   * @param value Value to which the specified property element   *              should be set   * @throws ArrayIndexOutOfBoundsException if the specified index   *                                        is outside the valid range for the underlying array   * @throws IllegalAccessException         if the caller does not have   *                                        access to the property accessor method   * @throws IllegalArgumentException       if <code>bean</code> or   *                                        <code>name</code> is null   * @throws InvocationTargetException      if the property accessor method   *                                        throws an exception   * @throws NoSuchMethodException          if an accessor method for this   *                                        propety cannot be found   */  public void setIndexedProperty(Object bean, String name, Object value) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException  {    if(bean == null)    {      throw new IllegalArgumentException("No bean specified");    }    if(name == null)    {      throw new IllegalArgumentException("No name specified");    }    // Identify the index of the requested individual property    int delim = name.indexOf(PropertyUtils.INDEXED_DELIM);    int delim2 = name.indexOf(PropertyUtils.INDEXED_DELIM2);    if((delim < 0) || (delim2 <= delim))    {      throw new IllegalArgumentException("Invalid indexed property '" + name + "'");    }    int index;    try    {      String subscript = name.substring(delim + 1, delim2);      index = Integer.parseInt(subscript);    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -