code: protected String getPropertyName(String methodName, String[] prefixes, String[] suffixes) {
  
      for (String prefix : prefixes) {
        if (methodName.startsWith(prefix)) {
          for (String suffix : suffixes) {
            if (methodName.endsWith(suffix)) {
              return getPropertyName(methodName, prefix.length(), suffix.length());
            }
          }
          if (suffixes.length == 0) {
            return getPropertyName(methodName, prefix.length(), 0);
          }
        }
      }
      if (prefixes.length == 0) {
        for (String suffix : suffixes) {
          if (methodName.endsWith(suffix)) {
            return getPropertyName(methodName, 0, suffix.length());
          }
        }
      }
      return null;
    }
docs: This method gets the according {@link net.sf.mmm.util.pojo.descriptor.api.PojoPropertyDescriptor#getName()
  property-name} for the given {@code methodName}. <br>
  This is the un-capitalized substring of the {@code methodName} after between the given {@code prefix} and
  {@code suffix}.
  
  @param methodName is the {@link java.lang.reflect.Method#getName() name} of the
  {@link net.sf.mmm.util.pojo.descriptor.api.accessor.PojoPropertyAccessor#getAccessibleObject()
  accessor-method}.
  @param prefixes is an array with all possible prefixes (e.g. {@code "get", "is", "has"}). May also be empty array
  instead of <code>{""}</code>.
  @param suffixes is an array with all possible suffixes (e.g. {@code "Size", "Length", "Count"}). May also be empty
  array instead of <code>{""}</code>.
  @return the requested property-name or {@code null} if NOT available. ({@code methodName} does NOT
  {@link String#startsWith(String) start with} one of the {@code prefixes} or does NOT
  {@link String#endsWith(String) end with} one of the {@code suffixes}).