public static ProductDTO toDTO(Product product, long catId, UriInfo uriInfo) {
    ProductDTO dto = new ProductDTO();
    dto.id = product.getId();
    dto.name = product.getName();
    dto.price = product.getPrice();
    dto.stock = product.getStock();
    dto.categoryId = catId;
    dto.description = product.getDescription();

    Collection<ServiceLink> ls =
        new LinkedServiceBuilder()
            .add(
                "GET",
                "GET",
                UriBuilderUtil.getProductForCategory(uriInfo.getBaseUriBuilder(), catId, dto.id))
            .add(
                "INSERT",
                "PUT",
                UriBuilderUtil.insertProductForCategory(uriInfo.getBaseUriBuilder(), catId))
            .add(
                "UPDATE",
                "POST",
                UriBuilderUtil.updateProductForCategory(uriInfo.getBaseUriBuilder(), catId, dto.id))
            .add(
                "DELETE",
                "DELETE",
                UriBuilderUtil.deleteProductForCategory(uriInfo.getBaseUriBuilder(), catId, dto.id))
            .add("UP", "GET", UriBuilderUtil.getCategory(uriInfo, catId))
            .build();
    dto.links = ls;

    dto.properties = new ArrayList<PropertyDTO>();
    for (Property prop : product.getProperties()) {
      dto.properties.add(Converter.toDTO(prop));
    }
    return dto;
  }