001 002package com.commercetools.api.models.shipping_method; 003 004import java.util.*; 005import java.util.function.Function; 006 007import io.vrap.rmf.base.client.Builder; 008import io.vrap.rmf.base.client.utils.Generated; 009 010/** 011 * ZoneRateBuilder 012 * <hr> 013 * Example to create an instance using the builder pattern 014 * <div class=code-example> 015 * <pre><code class='java'> 016 * ZoneRate zoneRate = ZoneRate.builder() 017 * .zone(zoneBuilder -> zoneBuilder) 018 * .plusShippingRates(shippingRatesBuilder -> shippingRatesBuilder) 019 * .build() 020 * </code></pre> 021 * </div> 022 */ 023@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen") 024public class ZoneRateBuilder implements Builder<ZoneRate> { 025 026 private com.commercetools.api.models.zone.ZoneReference zone; 027 028 private java.util.List<com.commercetools.api.models.shipping_method.ShippingRate> shippingRates; 029 030 /** 031 * <p>Zone for which the shipping rates are valid.</p> 032 * @param builder function to build the zone value 033 * @return Builder 034 */ 035 036 public ZoneRateBuilder zone( 037 Function<com.commercetools.api.models.zone.ZoneReferenceBuilder, com.commercetools.api.models.zone.ZoneReferenceBuilder> builder) { 038 this.zone = builder.apply(com.commercetools.api.models.zone.ZoneReferenceBuilder.of()).build(); 039 return this; 040 } 041 042 /** 043 * <p>Zone for which the shipping rates are valid.</p> 044 * @param builder function to build the zone value 045 * @return Builder 046 */ 047 048 public ZoneRateBuilder withZone( 049 Function<com.commercetools.api.models.zone.ZoneReferenceBuilder, com.commercetools.api.models.zone.ZoneReference> builder) { 050 this.zone = builder.apply(com.commercetools.api.models.zone.ZoneReferenceBuilder.of()); 051 return this; 052 } 053 054 /** 055 * <p>Zone for which the shipping rates are valid.</p> 056 * @param zone value to be set 057 * @return Builder 058 */ 059 060 public ZoneRateBuilder zone(final com.commercetools.api.models.zone.ZoneReference zone) { 061 this.zone = zone; 062 return this; 063 } 064 065 /** 066 * <p>Shipping rates defined per currency.</p> 067 * @param shippingRates value to be set 068 * @return Builder 069 */ 070 071 public ZoneRateBuilder shippingRates( 072 final com.commercetools.api.models.shipping_method.ShippingRate... shippingRates) { 073 this.shippingRates = new ArrayList<>(Arrays.asList(shippingRates)); 074 return this; 075 } 076 077 /** 078 * <p>Shipping rates defined per currency.</p> 079 * @param shippingRates value to be set 080 * @return Builder 081 */ 082 083 public ZoneRateBuilder shippingRates( 084 final java.util.List<com.commercetools.api.models.shipping_method.ShippingRate> shippingRates) { 085 this.shippingRates = shippingRates; 086 return this; 087 } 088 089 /** 090 * <p>Shipping rates defined per currency.</p> 091 * @param shippingRates value to be set 092 * @return Builder 093 */ 094 095 public ZoneRateBuilder plusShippingRates( 096 final com.commercetools.api.models.shipping_method.ShippingRate... shippingRates) { 097 if (this.shippingRates == null) { 098 this.shippingRates = new ArrayList<>(); 099 } 100 this.shippingRates.addAll(Arrays.asList(shippingRates)); 101 return this; 102 } 103 104 /** 105 * <p>Shipping rates defined per currency.</p> 106 * @param builder function to build the shippingRates value 107 * @return Builder 108 */ 109 110 public ZoneRateBuilder plusShippingRates( 111 Function<com.commercetools.api.models.shipping_method.ShippingRateBuilder, com.commercetools.api.models.shipping_method.ShippingRateBuilder> builder) { 112 if (this.shippingRates == null) { 113 this.shippingRates = new ArrayList<>(); 114 } 115 this.shippingRates 116 .add(builder.apply(com.commercetools.api.models.shipping_method.ShippingRateBuilder.of()).build()); 117 return this; 118 } 119 120 /** 121 * <p>Shipping rates defined per currency.</p> 122 * @param builder function to build the shippingRates value 123 * @return Builder 124 */ 125 126 public ZoneRateBuilder withShippingRates( 127 Function<com.commercetools.api.models.shipping_method.ShippingRateBuilder, com.commercetools.api.models.shipping_method.ShippingRateBuilder> builder) { 128 this.shippingRates = new ArrayList<>(); 129 this.shippingRates 130 .add(builder.apply(com.commercetools.api.models.shipping_method.ShippingRateBuilder.of()).build()); 131 return this; 132 } 133 134 /** 135 * <p>Shipping rates defined per currency.</p> 136 * @param builder function to build the shippingRates value 137 * @return Builder 138 */ 139 140 public ZoneRateBuilder addShippingRates( 141 Function<com.commercetools.api.models.shipping_method.ShippingRateBuilder, com.commercetools.api.models.shipping_method.ShippingRate> builder) { 142 return plusShippingRates(builder.apply(com.commercetools.api.models.shipping_method.ShippingRateBuilder.of())); 143 } 144 145 /** 146 * <p>Shipping rates defined per currency.</p> 147 * @param builder function to build the shippingRates value 148 * @return Builder 149 */ 150 151 public ZoneRateBuilder setShippingRates( 152 Function<com.commercetools.api.models.shipping_method.ShippingRateBuilder, com.commercetools.api.models.shipping_method.ShippingRate> builder) { 153 return shippingRates(builder.apply(com.commercetools.api.models.shipping_method.ShippingRateBuilder.of())); 154 } 155 156 /** 157 * <p>Zone for which the shipping rates are valid.</p> 158 * @return zone 159 */ 160 161 public com.commercetools.api.models.zone.ZoneReference getZone() { 162 return this.zone; 163 } 164 165 /** 166 * <p>Shipping rates defined per currency.</p> 167 * @return shippingRates 168 */ 169 170 public java.util.List<com.commercetools.api.models.shipping_method.ShippingRate> getShippingRates() { 171 return this.shippingRates; 172 } 173 174 /** 175 * builds ZoneRate with checking for non-null required values 176 * @return ZoneRate 177 */ 178 public ZoneRate build() { 179 Objects.requireNonNull(zone, ZoneRate.class + ": zone is missing"); 180 Objects.requireNonNull(shippingRates, ZoneRate.class + ": shippingRates is missing"); 181 return new ZoneRateImpl(zone, shippingRates); 182 } 183 184 /** 185 * builds ZoneRate without checking for non-null required values 186 * @return ZoneRate 187 */ 188 public ZoneRate buildUnchecked() { 189 return new ZoneRateImpl(zone, shippingRates); 190 } 191 192 /** 193 * factory method for an instance of ZoneRateBuilder 194 * @return builder 195 */ 196 public static ZoneRateBuilder of() { 197 return new ZoneRateBuilder(); 198 } 199 200 /** 201 * create builder for ZoneRate instance 202 * @param template instance with prefilled values for the builder 203 * @return builder 204 */ 205 public static ZoneRateBuilder of(final ZoneRate template) { 206 ZoneRateBuilder builder = new ZoneRateBuilder(); 207 builder.zone = template.getZone(); 208 builder.shippingRates = template.getShippingRates(); 209 return builder; 210 } 211 212}