Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add toBuilder for resource definitions #1992

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,12 @@
@JsonTypeName("dataspaceconnector:testresourcedefinition")
@JsonDeserialize(builder = TestResourceDefinition.Builder.class)
public class TestResourceDefinition extends ResourceDefinition {


@Override
public <RD extends ResourceDefinition, B extends ResourceDefinition.Builder<RD, B>> B toBuilder() {
return null;
}

@JsonPOJOBuilder(withPrefix = "")
public static class Builder extends ResourceDefinition.Builder<TestResourceDefinition, Builder> {
private Builder() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
*
* Contributors:
* Microsoft Corporation - initial API and implementation
* Fraunhofer Institute for Software and Systems Engineering - add toBuilder method
*
*/

Expand All @@ -30,7 +31,14 @@ public String getContainerName() {
public String getAccountName() {
return accountName;
}


@Override
public Builder toBuilder() {
return initializeBuilder(new Builder())
.containerName(containerName)
.accountName(accountName);
}

public static class Builder extends ResourceDefinition.Builder<ObjectStorageResourceDefinition, Builder> {

private Builder() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ void setup() {
void canProvision() {
assertThat(provisioner.canProvision(new ObjectStorageResourceDefinition())).isTrue();
assertThat(provisioner.canProvision(new ResourceDefinition() {
@Override
public <RD extends ResourceDefinition, B extends Builder<RD, B>> B toBuilder() {
return null;
}
})).isFalse();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* Copyright (c) 2022 Fraunhofer Institute for Software and Systems Engineering
*
* This program and the accompanying materials are made available under the
* terms of the Apache License, Version 2.0 which is available at
* https://www.apache.org/licenses/LICENSE-2.0
*
* SPDX-License-Identifier: Apache-2.0
*
* Contributors:
* Fraunhofer Institute for Software and Systems Engineering - initial API and implementation
*
*/

package org.eclipse.dataspaceconnector.provision.azure.blob;

import org.junit.jupiter.api.Test;

import static org.assertj.core.api.Assertions.assertThat;

class ObjectStorageResourceDefinitionTest {

@Test
void toBuilder_verifyEqualResourceDefinition() {
var definition = ObjectStorageResourceDefinition.Builder.newInstance()
.id("id")
.transferProcessId("tp-id")
.accountName("account")
.containerName("container")
.build();
var builder = definition.toBuilder();
var rebuiltDefinition = builder.build();

assertThat(rebuiltDefinition).usingRecursiveComparison().isEqualTo(definition);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ public String getDataAddressType() {
public String getTransferProcessId() {
return transferProcessId;
}

protected <RD extends AbstractHttpResourceDefinition, B extends AbstractHttpResourceDefinition.Builder<RD, B>> B initializeBuilder(B builder) {
return super.initializeBuilder(builder)
.dataAddressType(dataAddressType);
}

@JsonPOJOBuilder(withPrefix = "")
public static class Builder<RD extends AbstractHttpResourceDefinition, B extends ResourceDefinition.Builder<RD, B>> extends ResourceDefinition.Builder<RD, B> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
*
* Contributors:
* Microsoft Corporation - initial API and implementation
* Fraunhofer Institute for Software and Systems Engineering - add toBuilder method
*
*/

Expand Down Expand Up @@ -36,7 +37,13 @@ private HttpProviderResourceDefinition() {
public String getAssetId() {
return assetId;
}


@Override
public Builder toBuilder() {
return initializeBuilder(new Builder())
.assetId(assetId);
}

@JsonPOJOBuilder(withPrefix = "")
public static class Builder extends AbstractHttpResourceDefinition.Builder<HttpProviderResourceDefinition, Builder> {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,10 @@ private HttpProvisionedContentResource createProvisionedResource() {


private static class TestResourceDefinition extends ResourceDefinition {

@Override
public <RD extends ResourceDefinition, B extends Builder<RD, B>> B toBuilder() {
return null;
}
}

private static class TestProvisionedResource extends ProvisionedResource {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
*
* Contributors:
* Microsoft Corporation - initial API and implementation
* Fraunhofer Institute for Software and Systems Engineering - add test
*
*/

Expand Down Expand Up @@ -37,4 +38,18 @@ void verifySerializeDeserialize() throws JsonProcessingException {
assertThat(deserialized.getDataAddressType()).isEqualTo("test");

}

@Test
void toBuilder_verifyEqualResourceDefinition() {
var definition = HttpProviderResourceDefinition.Builder.newInstance()
.id("id")
.transferProcessId("tp-id")
.assetId("asset")
.dataAddressType("type")
.build();
var builder = definition.toBuilder();
var rebuiltDefinition = builder.build();

assertThat(rebuiltDefinition).usingRecursiveComparison().isEqualTo(definition);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
*
* Contributors:
* Microsoft Corporation - initial API and implementation
* Fraunhofer Institute for Software and Systems Engineering - add toBuilder method
*
*/

Expand Down Expand Up @@ -37,8 +38,14 @@ public String getRegionId() {
public String getBucketName() {
return bucketName;
}



@Override
public Builder toBuilder() {
return initializeBuilder(new Builder())
.regionId(regionId)
.bucketName(bucketName);
}

public static class Builder extends ResourceDefinition.Builder<S3BucketResourceDefinition, Builder> {

private Builder() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* Copyright (c) 2022 Fraunhofer Institute for Software and Systems Engineering
*
* This program and the accompanying materials are made available under the
* terms of the Apache License, Version 2.0 which is available at
* https://www.apache.org/licenses/LICENSE-2.0
*
* SPDX-License-Identifier: Apache-2.0
*
* Contributors:
* Fraunhofer Institute for Software and Systems Engineering - initial API and implementation
*
*/

package org.eclipse.dataspaceconnector.aws.s3.provision;

import org.junit.jupiter.api.Test;

import static org.assertj.core.api.Assertions.assertThat;

class S3BucketResourceDefinitionTest {

@Test
void toBuilder_verifyEqualResourceDefinition() {
var definition = S3BucketResourceDefinition.Builder.newInstance()
.id("id")
.transferProcessId("tp-id")
.regionId("region")
.bucketName("bucket")
.build();
var builder = definition.toBuilder();
var rebuiltDefinition = builder.build();

assertThat(rebuiltDefinition).usingRecursiveComparison().isEqualTo(definition);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
*
* Contributors:
* Microsoft Corporation - initial API and implementation
* Fraunhofer Institute for Software and Systems Engineering - add toBuilder method
*
*/

Expand Down Expand Up @@ -41,6 +42,29 @@ public String getTransferProcessId() {
void setTransferProcessId(String transferProcessId) {
this.transferProcessId = transferProcessId;
}

/**
* Converts the resource definition to a builder to allow for easy modification.
*
* @param <RD> the type of resource definition.
* @param <B> the respective builder type.
* @return the builder.
*/
public abstract <RD extends ResourceDefinition, B extends Builder<RD, B>> B toBuilder();

/**
* Sets the base class properties on a sub class builder.
*
* @param builder the builder.
* @param <RD> the type of resource definition.
* @param <B> the respective builder type.
* @return the builder with class properties set.
*/
protected <RD extends ResourceDefinition, B extends Builder<RD, B>> B initializeBuilder(B builder) {
return builder
.id(id)
.transferProcessId(transferProcessId);
}

@JsonPOJOBuilder
public static class Builder<RD extends ResourceDefinition, B extends Builder<RD, B>> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,12 @@
@JsonTypeName("dataspaceconnector:testresourcedefinition")
@JsonDeserialize(builder = TestResourceDefinition.Builder.class)
class TestResourceDefinition extends ResourceDefinition {


@Override
public <RD extends ResourceDefinition, B extends ResourceDefinition.Builder<RD, B>> B toBuilder() {
return null;
}

@JsonPOJOBuilder(withPrefix = "")
public static class Builder extends ResourceDefinition.Builder<TestResourceDefinition, Builder> {
private Builder() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,12 @@ public static TransferProcess initialTransferProcess(String processId, String da
@JsonTypeName("dataspaceconnector:testresourcedef")
@JsonDeserialize(builder = TestResourceDef.Builder.class)
public static class TestResourceDef extends ResourceDefinition {


@Override
public <RD extends ResourceDefinition, B extends ResourceDefinition.Builder<RD, B>> B toBuilder() {
return null;
}

@JsonPOJOBuilder(withPrefix = "")
public static class Builder extends ResourceDefinition.Builder<TestResourceDef, Builder> {
private Builder() {
Expand Down