001
002package com.commercetools.api.client;
003
004import java.util.List;
005import java.util.function.UnaryOperator;
006
007import com.commercetools.api.models.Versioned;
008import com.commercetools.api.models.product_type.ProductType;
009import com.commercetools.api.models.product_type.ProductTypeDraft;
010import com.commercetools.api.models.product_type.ProductTypeDraftBuilder;
011import com.commercetools.api.models.product_type.ProductTypeUpdate;
012import com.commercetools.api.models.product_type.ProductTypeUpdateAction;
013import com.commercetools.api.models.product_type.ProductTypeUpdateActionBuilder;
014
015public interface ByProjectKeyProductTypesRequestBuilderMixin {
016    public ByProjectKeyProductTypesPost post(ProductTypeDraft productTypeDraft);
017
018    public ByProjectKeyProductTypesByIDRequestBuilder withId(String ID);
019
020    public default ByProjectKeyProductTypesByIDPost update(Versioned<ProductType> productType,
021            List<ProductTypeUpdateAction> actions) {
022        return withId(productType.getId())
023                .post(builder -> ProductTypeUpdate.builder().version(productType.getVersion()).actions(actions));
024    }
025
026    public default ByProjectKeyProductTypesByIDPost update(Versioned<ProductType> productType,
027            UnaryOperator<UpdateActionBuilder<ProductTypeUpdateAction, ProductTypeUpdateActionBuilder>> op) {
028        return withId(productType.getId()).post(builder -> ProductTypeUpdate.builder()
029                .version(productType.getVersion())
030                .actions(op.apply(UpdateActionBuilder.of(ProductTypeUpdateActionBuilder::of)).actions));
031    }
032
033    public default WithUpdateActionBuilder<ProductTypeUpdateAction, ProductTypeUpdateActionBuilder, ByProjectKeyProductTypesByIDPost> update(
034            Versioned<ProductType> productType) {
035        return builder -> withId(productType.getId()).post(b -> ProductTypeUpdate.builder()
036                .version(productType.getVersion())
037                .actions(builder.apply(UpdateActionBuilder.of(ProductTypeUpdateActionBuilder::of)).actions));
038    }
039
040    public default ByProjectKeyProductTypesByIDDelete delete(Versioned<ProductType> productType) {
041        return withId(productType.getId()).delete().withVersion(productType.getVersion());
042    }
043
044    public default ByProjectKeyProductTypesPost create(ProductTypeDraft productTypeDraft) {
045        return post(productTypeDraft);
046    }
047
048    public default ByProjectKeyProductTypesPost create(UnaryOperator<ProductTypeDraftBuilder> op) {
049        return post(op.apply(ProductTypeDraftBuilder.of()).build());
050    }
051}