public PropertyModelImpl(
      BeanModel model, String name, PropertyConduit conduit, Messages messages) {
    this.model = model;
    this.name = name;
    this.conduit = conduit;

    id = InternalCommonsUtils.extractIdFromPropertyExpression(name);

    label = InternalCommonsUtils.defaultLabel(id, messages, name);

    // TAP5-2305
    if (conduit != null) {
      Sortable sortableAnnotation = conduit.getAnnotation(Sortable.class);
      if (sortableAnnotation != null) {
        sortable = sortableAnnotation.value();
      } else {
        // Primitive types need to be converted to wrapper types before checking to see
        // if they are sortable.
        Class wrapperType = PlasticUtils.toWrapperType(getPropertyType());
        sortable = Comparable.class.isAssignableFrom(wrapperType);
      }
    }
  }
  public PropertyModel label(String label) {
    assert InternalCommonsUtils.isNonBlank(label);
    this.label = label;

    return this;
  }