@Override
  public List<CollectableField> getCollectableFields() throws CommonBusinessException {
    log.debug("getCollectableFields");

    Collection<EntityMetaDataVO> entites = new ArrayList<EntityMetaDataVO>();
    for (EntityMetaDataVO eMeta : MetaDataClientProvider.getInstance().getAllEntities()) {
      if (!includeSystemEntities && eMeta.getId() < 0) {
        continue;
      }
      if (includeEntitiesWithoutMenu || (eMeta.getLocaleResourceIdForMenuPath() != null)) {
        if (bWithStatemodel && eMeta.isStateModel()) {
          entites.add(eMeta);
        } else {
          if (bWithoutStatemodel && !eMeta.isStateModel()) {
            entites.add(eMeta);
          }
        }
      }
    }

    final List<CollectableField> result =
        CollectionUtils.transform(
            entites,
            new Transformer<EntityMetaDataVO, CollectableField>() {
              @Override
              public CollectableField transform(EntityMetaDataVO eMeta) {
                String label = SpringLocaleDelegate.getInstance().getLabelFromMetaDataVO(eMeta);
                return makeCollectableField(eMeta, label);
              }
            });

    Collections.sort(result);

    return result;
  }