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}