/** Invoked to rebuild the type attribute bos and attributes value map based on the type id */
  public void rebuildTypeAttributes() {
    this.attributeBos = new ArrayList<PeopleFlowAttributeBo>();
    this.attributeValues = new HashMap<String, String>();

    KewTypeDefinition typeDefinition =
        KewApiServiceLocator.getKewTypeRepositoryService().getTypeById(this.typeId);
    if ((typeDefinition.getAttributes() != null) && !typeDefinition.getAttributes().isEmpty()) {
      List<KewTypeAttribute> typeAttributes =
          new ArrayList<KewTypeAttribute>(typeDefinition.getAttributes());

      List<String> sortAttributes = new ArrayList<String>();
      sortAttributes.add(KEWPropertyConstants.SEQUENCE_NUMBER);
      Collections.sort(typeAttributes, new BeanPropertyComparator(sortAttributes));

      for (KewTypeAttribute typeAttribute : typeAttributes) {
        PeopleFlowAttributeBo attributeBo =
            PeopleFlowAttributeBo.from(typeAttribute.getAttributeDefinition(), null, this, null);
        this.attributeBos.add(attributeBo);
        this.attributeValues.put(typeAttribute.getAttributeDefinition().getName(), "");
      }
    }
  }
 /**
  * Converts a immutable object to it's mutable bo counterpart
  *
  * @param im immutable object
  * @return the mutable bo
  */
 public static KewTypeAttributeBo from(KewTypeAttribute im, KewTypeBo kewType) {
   if (null == im) {
     return null;
   } else {
     KewTypeAttributeBo bo = new KewTypeAttributeBo();
     bo.setId(im.getId());
     bo.setType(kewType);
     bo.setSequenceNumber(im.getSequenceNumber());
     bo.setActive(im.isActive());
     bo.setAttributeDefinition(KewAttributeDefinitionBo.from(im.getAttributeDefinition()));
     return bo;
   }
 }