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

📄 propertyutilsbean.java

📁 一个很好实用的工作流OSWORKFLOW开发例子.有着非常优秀的灵活性.
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
   * thrown.   *   * @param bean Bean whose property is to be extracted   * @param name <code>propertyname(key)</code> of the property value   *             to be extracted   * @throws IllegalAccessException    if the caller does not have   *                                   access to the property accessor method   * @throws InvocationTargetException if the property accessor method   *                                   throws an exception   * @throws NoSuchMethodException     if an accessor method for this   *                                   propety cannot be found   */  public Object getMappedProperty(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");    }    // Identify the index of the requested individual property    int delim = name.indexOf(PropertyUtils.MAPPED_DELIM);    int delim2 = name.indexOf(PropertyUtils.MAPPED_DELIM2);    if((delim < 0) || (delim2 <= delim))    {      throw new IllegalArgumentException("Invalid mapped property '" + name + "'");    }    // Isolate the name and the key    String key = name.substring(delim + 1, delim2);    name = name.substring(0, delim);    // Request the specified indexed property value    return (getMappedProperty(bean, name, key));  }  /**   * Return the value of the specified mapped property of the specified   * bean, with no type conversions.   *   * @param bean Bean whose property is to be extracted   * @param name Mapped property name of the property value to be extracted   * @param key  Key of the property value to be extracted   * @throws IllegalAccessException    if the caller does not have   *                                   access to the property accessor method   * @throws InvocationTargetException if the property accessor method   *                                   throws an exception   * @throws NoSuchMethodException     if an accessor method for this   *                                   propety cannot be found   */  public Object getMappedProperty(Object bean, String name, String key) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException  {    if(bean == null)    {      throw new IllegalArgumentException("No bean specified");    }    if(name == null)    {      throw new IllegalArgumentException("No name specified");    }    if(key == null)    {      throw new IllegalArgumentException("No key specified");    }    // Handle DynaBean instances specially    Object result = null;    // Retrieve the property descriptor for the specified property    PropertyDescriptor descriptor = getPropertyDescriptor(bean, name);    if(descriptor == null)    {      throw new NoSuchMethodException("Unknown property '" + name + "'");    }    if(descriptor instanceof MappedPropertyDescriptor)    {      // Call the keyed getter method if there is one      Method readMethod = ((MappedPropertyDescriptor)descriptor).getMappedReadMethod();      if(readMethod != null)      {        Object keyArray[] = new Object[1];        keyArray[0] = key;        result = invokeMethod(readMethod, bean, keyArray);      }      else      {        throw new NoSuchMethodException("Property '" + name + "' has no mapped getter method");      }    }    else    {      /* means that the result has to be retrieved from a map */      Method readMethod = descriptor.getReadMethod();      if(readMethod != null)      {        Object invokeResult = invokeMethod(readMethod, bean, new Object[0]);        /* test and fetch from the map */        if(invokeResult instanceof java.util.Map)        {          result = ((java.util.Map)invokeResult).get(key);        }      }      else      {        throw new NoSuchMethodException("Property '" + name + "' has no mapped getter method");      }    }    return result;  }  /**   * <p>Return the mapped property descriptors for this bean class.</p>   * <p/>   * <p><strong>FIXME</strong> - Does not work with DynaBeans.</p>   *   * @param beanClass Bean class to be introspected   */  public Map getMappedPropertyDescriptors(Class beanClass)  {    if(beanClass == null)    {      return null;    }    // Look up any cached descriptors for this bean class    return (Map)mappedDescriptorsCache.get(beanClass);  }  /**   * <p>Return the mapped property descriptors for this bean.</p>   * <p/>   * <p><strong>FIXME</strong> - Does not work with DynaBeans.</p>   *   * @param bean Bean to be introspected   */  public Map getMappedPropertyDescriptors(Object bean)  {    if(bean == null)    {      return null;    }    return (getMappedPropertyDescriptors(bean.getClass()));  }  /**   * Return the value of the (possibly nested) property of the specified   * name, for the specified bean, with no type conversions.   *   * @param bean Bean whose property is to be extracted   * @param name Possibly nested 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 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 Object getNestedProperty(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");    }    int indexOfINDEXED_DELIM;    int indexOfMAPPED_DELIM;    int indexOfMAPPED_DELIM2;    int indexOfNESTED_DELIM;    while(true)    {      indexOfNESTED_DELIM = name.indexOf(PropertyUtils.NESTED_DELIM);      indexOfMAPPED_DELIM = name.indexOf(PropertyUtils.MAPPED_DELIM);      indexOfMAPPED_DELIM2 = name.indexOf(PropertyUtils.MAPPED_DELIM2);      if(indexOfMAPPED_DELIM2 >= 0 && indexOfMAPPED_DELIM >= 0 && (indexOfNESTED_DELIM < 0 || indexOfNESTED_DELIM > indexOfMAPPED_DELIM))      {        indexOfNESTED_DELIM = name.indexOf(PropertyUtils.NESTED_DELIM, indexOfMAPPED_DELIM2);      }      else      {        indexOfNESTED_DELIM = name.indexOf(PropertyUtils.NESTED_DELIM);      }      if(indexOfNESTED_DELIM < 0)      {        break;      }      String next = name.substring(0, indexOfNESTED_DELIM);      indexOfINDEXED_DELIM = next.indexOf(PropertyUtils.INDEXED_DELIM);      indexOfMAPPED_DELIM = next.indexOf(PropertyUtils.MAPPED_DELIM);      if(bean instanceof Map)      {        bean = ((Map)bean).get(next);      }      else if(indexOfMAPPED_DELIM >= 0)      {        bean = getMappedProperty(bean, next);      }      else if(indexOfINDEXED_DELIM >= 0)      {        bean = getIndexedProperty(bean, next);      }      else      {        bean = getSimpleProperty(bean, next);      }      if(bean == null)      {        throw new NullPointerException("Null property value for '" + name.substring(0, indexOfNESTED_DELIM) + "'");      }      name = name.substring(indexOfNESTED_DELIM + 1);    }    indexOfINDEXED_DELIM = name.indexOf(PropertyUtils.INDEXED_DELIM);    indexOfMAPPED_DELIM = name.indexOf(PropertyUtils.MAPPED_DELIM);    if(bean instanceof Map)    {      bean = ((Map)bean).get(name);    }    else if(indexOfMAPPED_DELIM >= 0)    {      bean = getMappedProperty(bean, name);    }    else if(indexOfINDEXED_DELIM >= 0)    {      bean = getIndexedProperty(bean, name);    }    else    {      bean = getSimpleProperty(bean, name);    }    return bean;  }  /**   * Return the value of the specified property of the specified bean,   * no matter which property reference format is used, with no   * type conversions.   *   * @param bean Bean whose property is to be extracted   * @param name Possibly indexed and/or nested 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 InvocationTargetException if the property accessor method   *                                   throws an exception   * @throws NoSuchMethodException     if an accessor method for this   *                                   propety cannot be found   */  public Object getProperty(Object bean, String name) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException  {    return (getNestedProperty(bean, name));  }  /**   * <p>Retrieve the property descriptor for the specified property of the   * specified bean, or return <code>null</code> if there is no such   * descriptor.  This method resolves indexed and nested property   * references in the same manner as other methods in this class, except   * that if the last (or only) name element is indexed, the descriptor   * for the last resolved property itself is returned.</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 PropertyDescriptor getPropertyDescriptor(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");    }    // Resolve nested references    while(true)    {      int period = findNextNestedIndex(name);      if(period < 0)      {        break;      }      String next = name.substring(0, period);      int indexOfINDEXED_DELIM = next.indexOf(PropertyUtils.INDEXED_DELIM);      int indexOfMAPPED_DELIM = next.indexOf(PropertyUtils.MAPPED_DELIM);      if(indexOfMAPPED_DELIM >= 0 && (indexOfINDEXED_DELIM < 0 || indexOfMAPPED_DELIM < indexOfINDEXED_DELIM))      {        bean = getMappedProperty(bean, next);      }      else      {        if(indexOfINDEXED_DELIM >= 0)        {          bean = getIndexedProperty(bean, next);        }        else        {          bean = getSimpleProperty(bean, next);        }      }      if(bean == null)      {        throw new IllegalArgumentException("Null property value for '" + name.substring(0, period) + "'");      }      name = name.substring(period + 1);    }    // Remove any subscript from the final name value    int left = name.indexOf(PropertyUtils.INDEXED_DELIM);    if(left >= 0)    {      name = name.substring(0, left);    }    left = name.indexOf(PropertyUtils.MAPPED_DELIM);    if(left >= 0)    {      name = name.substring(0, left);    }    // Look up and return this property from our cache    // creating and adding it to the cache if not found.    if((bean == null) || (name == null))    {      return (null);    }    PropertyDescriptor descriptors[] = getPropertyDescriptors(bean);    if(descriptors != null)    {      for(int i = 0; i < descriptors.length; i++)      {        if(name.equals(descriptors[i].getName()))          return (descriptors[i]);      }    }    PropertyDescriptor result;    Map mappedDescriptors = getMappedPropertyDescriptors(bean);    if(mappedDescriptors == null)    {      mappedDescriptors = new HashMap();      mappedDescriptorsCache.put(bean.getClass(), mappedDescriptors);    }    result = (PropertyDescriptor)mappedDescriptors.get(name);    if(result == null)    {      // not found, try to create it      try      {        result = new MappedPropertyDescriptor(name, bean.getClass());      }      catch(IntrospectionException ie)      {      }      if(result != null)      {        mappedDescriptors.put(name, result);      }    }    return result;  }  private int findNextNestedIndex(String expression)  {    // walk back from the end to the start    // and find the first index that    int bracketCount = 0;    for(int i = 0, size = expression.length(); i < size; i++)    {      char at = expression.charAt(i);      switch(at)      {        case PropertyUtils.NESTED_DELIM:          if(bracketCount < 1)          {            return i;          }          break;        case PropertyUtils.MAPPED_DELIM:        case PropertyUtils.INDEXED_DELIM:          // not bothered which          ++bracketCount;          break;        case PropertyUtils.MAPPED_DELIM2:        case PropertyUtils.INDEXED_DELIM2:          // not bothered which          --bracketCount;          break;

⌨️ 快捷键说明

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