Skip to content

Commit f28db66

Browse files
committed
implement deepcopy for generic classes
1 parent 2cf6696 commit f28db66

File tree

9 files changed

+70
-15
lines changed

9 files changed

+70
-15
lines changed

commercetools/commercetools-graphql-api/src/main/java/com/commercetools/graphql/api/GraphQLRequest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
import java.util.function.Function;
55

6+
import javax.annotation.Nullable;
7+
68
import com.commercetools.api.client.ProjectRequestBuilder;
79

810
import io.vrap.rmf.base.client.ApiHttpClient;
@@ -25,4 +27,23 @@ default ByProjectKeyGraphqlQuery<T> build(ApiHttpClient client, String projectKe
2527
public static <T> GraphQLRequestBuilder<T> builder() {
2628
return GraphQLRequestBuilder.of();
2729
}
30+
31+
/**
32+
* factory method to create a deep copy of GraphQLRequest
33+
* @param template instance to be copied
34+
* @return copy instance
35+
*/
36+
@Nullable
37+
public static <T> GraphQLRequest<T> deepCopy(@Nullable final GraphQLRequest<T> template) {
38+
if (template == null) {
39+
return null;
40+
}
41+
GraphQLRequestImpl<T> instance = new GraphQLRequestImpl<>();
42+
instance.setQuery(template.getQuery());
43+
instance.setOperationName(template.getOperationName());
44+
instance.setVariables(
45+
com.commercetools.api.models.graph_ql.GraphQLVariablesMap.deepCopy(template.getVariables()));
46+
instance.setDataMapper(template.getDataMapper());
47+
return instance;
48+
}
2849
}

commercetools/commercetools-graphql-api/src/main/java/com/commercetools/graphql/api/GraphQLRequestImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public void setDataMapper(Function<GraphQLData, T> dataMapper) {
117117
}
118118

119119
@Override
120-
public com.commercetools.api.models.graph_ql.GraphQLRequest copyDeep() {
121-
return null;
120+
public GraphQLRequest<T> copyDeep() {
121+
return GraphQLRequest.deepCopy(this);
122122
}
123123
}

commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/models/common/GenericReference.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11

22
package com.commercetools.api.models.common;
33

4+
import javax.annotation.Nullable;
5+
46
import com.fasterxml.jackson.annotation.JsonSubTypes;
57
import com.fasterxml.jackson.annotation.JsonTypeInfo;
68
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@@ -18,4 +20,18 @@ public interface GenericReference<T> extends Reference {
1820
public default GenericReference<T> of(final ReferenceTypeId typeId, final String id, final T obj) {
1921
return new GenericReferenceImpl<>(typeId, id, obj);
2022
}
23+
24+
/**
25+
* factory method to create a deep copy of Reference
26+
* @param template instance to be copied
27+
* @return copy instance
28+
*/
29+
@Nullable
30+
public static <T> GenericReference<T> deepCopy(@Nullable final GenericReference<T> template) {
31+
if (template == null) {
32+
return null;
33+
}
34+
35+
return new GenericReferenceImpl<>(template.getTypeId(), template.getId(), template.getObj());
36+
}
2137
}

commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/models/common/GenericReferenceImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public T getObj() {
4242
}
4343

4444
@Override
45-
public Reference copyDeep() {
46-
return null;
45+
public GenericReference<T> copyDeep() {
46+
return GenericReference.deepCopy(this);
4747
}
4848
}

commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/models/custom_object/GenericCustomObject.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import java.time.ZonedDateTime;
55
import java.util.function.Function;
66

7+
import javax.annotation.Nullable;
8+
79
import com.commercetools.api.models.Referencable;
810
import com.commercetools.api.models.common.*;
911
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -121,4 +123,28 @@ default <T> T withCustomObject(Function<GenericCustomObject<TValue>, T> helper)
121123
default Reference toReference() {
122124
return CustomObjectReference.builder().id(getId()).build();
123125
}
126+
127+
/**
128+
* factory method to create a deep copy of CustomObject
129+
* @param template instance to be copied
130+
* @return copy instance
131+
*/
132+
@Nullable
133+
public static <TValue> GenericCustomObject<TValue> deepCopy(@Nullable final GenericCustomObject<TValue> template) {
134+
if (template == null) {
135+
return null;
136+
}
137+
GenericCustomObjectImpl<TValue> instance = new GenericCustomObjectImpl<>();
138+
instance.setId(template.getId());
139+
instance.setVersion(template.getVersion());
140+
instance.setCreatedAt(template.getCreatedAt());
141+
instance.setLastModifiedAt(template.getLastModifiedAt());
142+
instance.setLastModifiedBy(
143+
com.commercetools.api.models.common.LastModifiedBy.deepCopy(template.getLastModifiedBy()));
144+
instance.setCreatedBy(com.commercetools.api.models.common.CreatedBy.deepCopy(template.getCreatedBy()));
145+
instance.setContainer(template.getContainer());
146+
instance.setKey(template.getKey());
147+
instance.setValue(template.getValue());
148+
return instance;
149+
}
124150
}

commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/models/custom_object/GenericCustomObjectImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,6 @@ public int hashCode() {
175175

176176
@Override
177177
public BaseResource copyDeep() {
178-
return null;
178+
return GenericCustomObject.deepCopy(this);
179179
}
180180
}

commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/models/order/OrderResourceIdentifier.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
import com.commercetools.api.models.common.ResourceIdentifier;
99
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
1010

11-
import io.vrap.rmf.base.client.utils.Generated;
12-
1311
/**
1412
* OrderResourceIdentifier
1513
*
@@ -22,7 +20,6 @@
2220
* </code></pre>
2321
* </div>
2422
*/
25-
@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen")
2623
@Deprecated
2724
@JsonDeserialize(as = OrderResourceIdentifierImpl.class)
2825
public interface OrderResourceIdentifier extends ResourceIdentifier, com.commercetools.api.models.Identifiable<Order> {

commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/models/order/OrderResourceIdentifierBuilder.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import javax.annotation.Nullable;
55

66
import io.vrap.rmf.base.client.Builder;
7-
import io.vrap.rmf.base.client.utils.Generated;
87

98
/**
109
* OrderResourceIdentifierBuilder
@@ -17,7 +16,6 @@
1716
* </code></pre>
1817
* </div>
1918
*/
20-
@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen")
2119
@Deprecated
2220
public class OrderResourceIdentifierBuilder implements Builder<OrderResourceIdentifier> {
2321

commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/models/order/OrderResourceIdentifierImpl.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,21 @@
22
package com.commercetools.api.models.order;
33

44
import com.commercetools.api.models.common.ReferenceTypeId;
5-
import com.commercetools.api.models.common.ResourceIdentifier;
65
import com.fasterxml.jackson.annotation.JsonCreator;
76
import com.fasterxml.jackson.annotation.JsonProperty;
87

98
import io.vrap.rmf.base.client.ModelBase;
10-
import io.vrap.rmf.base.client.utils.Generated;
119

1210
import org.apache.commons.lang3.builder.EqualsBuilder;
1311
import org.apache.commons.lang3.builder.HashCodeBuilder;
1412

1513
/**
1614
* OrderResourceIdentifier
1715
*/
18-
@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen")
1916
@Deprecated
2017
public class OrderResourceIdentifierImpl implements OrderResourceIdentifier, ModelBase {
2118

22-
private ReferenceTypeId typeId;
19+
private final ReferenceTypeId typeId;
2320

2421
private String id;
2522

@@ -93,7 +90,7 @@ public int hashCode() {
9390
}
9491

9592
@Override
96-
public ResourceIdentifier copyDeep() {
93+
public OrderResourceIdentifier copyDeep() {
9794
return OrderResourceIdentifier.deepCopy(this);
9895
}
9996
}

0 commit comments

Comments
 (0)