From f22ff17a3338e15b471c0dc3fcbf982d1b98ffc6 Mon Sep 17 00:00:00 2001 From: David Bajzath Date: Fri, 11 Mar 2022 15:42:57 +0100 Subject: [PATCH] CB-16465 Lazy load safe toString() methods Added tests for Entity classes to make sure they implement toString() correctly. --- .../periscope/domain/BaseAlert.java | 12 ++ .../sequenceiq/periscope/domain/Cluster.java | 11 ++ .../periscope/domain/ClusterManager.java | 10 ++ .../periscope/domain/ClusterPertain.java | 11 ++ .../sequenceiq/periscope/domain/History.java | 9 ++ .../periscope/domain/ScalingPolicy.java | 12 ++ .../periscope/domain/SecurityConfig.java | 10 ++ .../periscope/domain/Subscription.java | 9 ++ .../periscope/domain/TimeAlert.java | 9 ++ .../PeriscopeEntityToStringTest.java | 7 + common/build.gradle | 2 +- .../common/anonymizer/AnonymizerUtil.java | 4 + .../cloudbreak/util/DatabaseUtil.java | 27 ++++ .../AbstractEntityToStringTest.java | 132 ++++++++++++++++++ .../cloudbreak/util/DatabaseUtilTest.java | 106 ++++++++++++++ core-model/build.gradle | 2 +- .../cloudbreak/domain/Container.java | 10 ++ .../cloudbreak/domain/FailurePolicy.java | 9 ++ .../cloudbreak/domain/FileSystem.java | 10 ++ .../sequenceiq/cloudbreak/domain/Network.java | 19 +++ .../cloudbreak/domain/Orchestrator.java | 9 ++ .../cloudbreak/domain/RDSConfig.java | 14 ++ .../cloudbreak/domain/Resource.java | 13 ++ .../cloudbreak/domain/SaltSecurityConfig.java | 7 + .../cloudbreak/domain/SecurityConfig.java | 16 +++ .../cloudbreak/domain/SecurityGroup.java | 11 ++ .../ShowTerminatedClustersPreferences.java | 9 ++ .../domain/StackAuthentication.java | 10 ++ .../domain/StructuredEventEntity.java | 12 ++ .../cloudbreak/domain/Template.java | 16 +++ .../cloudbreak/domain/Topology.java | 12 ++ .../cloudbreak/domain/UserProfile.java | 11 ++ .../cloudbreak/domain/VolumeTemplate.java | 10 ++ .../cloudbreak/domain/stack/Component.java | 2 +- .../cloudbreak/domain/stack/Stack.java | 10 +- .../domain/stack/cluster/ClusterTemplate.java | 17 +++ .../domain/stack/cluster/IdBroker.java | 6 + .../domain/stack/cluster/gateway/Gateway.java | 10 ++ .../cluster/gateway/GatewayTopology.java | 8 ++ .../domain/stack/cluster/host/HostGroup.java | 8 ++ .../instance/ArchivedInstanceMetaData.java | 3 +- .../domain/stack/instance/InstanceGroup.java | 3 +- .../network/InstanceGroupNetwork.java | 8 ++ .../stack/loadbalancer/TargetGroup.java | 8 ++ .../cloudbreak/domain/view/BlueprintView.java | 14 ++ .../domain/view/ClusterApiView.java | 14 +- .../domain/view/ClusterComponentView.java | 10 ++ .../view/ClusterTemplateClusterApiView.java | 8 ++ .../ClusterTemplateInstanceGroupView.java | 8 ++ .../view/ClusterTemplateStackApiView.java | 10 ++ .../domain/view/ClusterTemplateView.java | 14 ++ .../cloudbreak/domain/view/ClusterView.java | 7 + .../cloudbreak/domain/view/HostGroupView.java | 8 ++ .../domain/view/InstanceGroupView.java | 8 ++ .../domain/view/InstanceMetaDataView.java | 10 ++ .../domain/view/OrchestratorView.java | 7 + .../cloudbreak/domain/view/RecipeView.java | 12 +- .../cloudbreak/domain/view/StackApiView.java | 18 +++ .../domain/view/StackStatusView.java | 8 ++ .../cloudbreak/domain/view/StackView.java | 16 +++ .../cloudbreak/domain/view/UserView.java | 10 ++ .../CloudbreakEntityToStringTest.java | 5 + .../com/sequenceiq/cloudbreak/InjectTest.java | 22 +-- .../domain/CustomConfigurations.java | 3 +- .../datalake/entity/SdxClusterView.java | 12 ++ .../datalake/entity/SdxStatusEntity.java | 16 ++- .../entity/operation/SdxOperation.java | 11 ++ .../datalake/DatalakeEntityToStringTest.java | 7 + .../domain/EnvironmentAuthentication.java | 7 + .../domain/ParentEnvironmentView.java | 10 ++ .../network/dao/domain/BaseNetwork.java | 4 +- .../parameters/dao/domain/BaseParameters.java | 12 ++ .../resourcepersister/Resource.java | 12 ++ .../environment/user/UserPreferences.java | 10 ++ .../EnvironmentEntityToStringTest.java | 7 + .../sequenceiq/flow/domain/FlowChainLog.java | 14 ++ .../flow/domain/FlowOperationStats.java | 10 ++ .../freeipa/entity/InstanceGroup.java | 12 ++ .../sequenceiq/freeipa/entity/Resource.java | 16 +++ .../sequenceiq/freeipa/entity/RootCert.java | 11 ++ .../freeipa/entity/SaltSecurityConfig.java | 8 ++ .../freeipa/entity/UserSyncStatus.java | 11 ++ .../freeipa/FreeipaEntityToStringTest.java | 7 + gradle.properties | 1 + .../redbeams/domain/DatabaseConfig.java | 19 ++- .../redbeams/domain/DatabaseServerConfig.java | 12 ++ .../redbeams/domain/stack/DBResource.java | 14 ++ .../redbeams/domain/stack/DBStackStatus.java | 13 ++ .../redbeams/domain/stack/DatabaseServer.java | 12 ++ .../redbeams/domain/stack/Network.java | 8 ++ .../redbeams/domain/stack/SecurityGroup.java | 10 ++ .../redbeams/RedbeamsEntityToStringTest.java | 7 + .../cloudbreak/workspace/model/Tenant.java | 22 +++ .../cloudbreak/workspace/model/User.java | 11 ++ .../workspace/model/UserPreferences.java | 9 ++ 95 files changed, 1174 insertions(+), 27 deletions(-) create mode 100644 autoscale/src/test/java/com/sequenceiq/periscope/PeriscopeEntityToStringTest.java create mode 100644 common/src/test/java/com/sequenceiq/cloudbreak/AbstractEntityToStringTest.java create mode 100644 common/src/test/java/com/sequenceiq/cloudbreak/util/DatabaseUtilTest.java create mode 100644 core/src/test/java/com/sequenceiq/cloudbreak/CloudbreakEntityToStringTest.java create mode 100644 datalake/src/test/java/com/sequenceiq/datalake/DatalakeEntityToStringTest.java create mode 100644 environment/src/test/java/com/sequenceiq/environment/EnvironmentEntityToStringTest.java create mode 100644 freeipa/src/test/java/com/sequenceiq/freeipa/FreeipaEntityToStringTest.java create mode 100644 redbeams/src/test/java/com/sequenceiq/redbeams/RedbeamsEntityToStringTest.java diff --git a/autoscale/src/main/java/com/sequenceiq/periscope/domain/BaseAlert.java b/autoscale/src/main/java/com/sequenceiq/periscope/domain/BaseAlert.java index 7a7a05c74ea5..44f07fbc7bb8 100644 --- a/autoscale/src/main/java/com/sequenceiq/periscope/domain/BaseAlert.java +++ b/autoscale/src/main/java/com/sequenceiq/periscope/domain/BaseAlert.java @@ -95,4 +95,16 @@ public void setAlertCrn(String alertCrn) { } public abstract Map getTelemetryParameters(); + + @Override + public String toString() { + return getClass().getSimpleName() + "{" + + "id=" + id + + ", cluster=" + cluster + + ", name='" + name + '\'' + + ", description='" + description + '\'' + + ", alertCrn='" + alertCrn + '\'' + + ", scalingPolicy=" + scalingPolicy + + '}'; + } } diff --git a/autoscale/src/main/java/com/sequenceiq/periscope/domain/Cluster.java b/autoscale/src/main/java/com/sequenceiq/periscope/domain/Cluster.java index d746fc2bdceb..abec8b5f20ae 100644 --- a/autoscale/src/main/java/com/sequenceiq/periscope/domain/Cluster.java +++ b/autoscale/src/main/java/com/sequenceiq/periscope/domain/Cluster.java @@ -326,6 +326,17 @@ public Boolean isStopStartScalingEnabled() { public void setStopStartScalingEnabled(Boolean stopStartScalingEnabled) { this.stopStartScalingEnabled = stopStartScalingEnabled; } + + @Override + public String toString() { + return "Cluster{" + + "id=" + id + + ", stackCrn='" + stackCrn + '\'' + + ", stackName='" + stackName + '\'' + + ", cloudPlatform='" + cloudPlatform + '\'' + + ", stackType=" + stackType + + '}'; + } } diff --git a/autoscale/src/main/java/com/sequenceiq/periscope/domain/ClusterManager.java b/autoscale/src/main/java/com/sequenceiq/periscope/domain/ClusterManager.java index bd8f126495a4..4563114c2f36 100644 --- a/autoscale/src/main/java/com/sequenceiq/periscope/domain/ClusterManager.java +++ b/autoscale/src/main/java/com/sequenceiq/periscope/domain/ClusterManager.java @@ -93,4 +93,14 @@ public ClusterManagerVariant getVariant() { public void setVariant(ClusterManagerVariant variant) { this.variant = variant; } + + @Override + public String toString() { + return "ClusterManager{" + + "id=" + id + + ", host='" + host + '\'' + + ", port='" + port + '\'' + + ", variant=" + variant + + '}'; + } } diff --git a/autoscale/src/main/java/com/sequenceiq/periscope/domain/ClusterPertain.java b/autoscale/src/main/java/com/sequenceiq/periscope/domain/ClusterPertain.java index 9677210fce9d..33e52641b562 100644 --- a/autoscale/src/main/java/com/sequenceiq/periscope/domain/ClusterPertain.java +++ b/autoscale/src/main/java/com/sequenceiq/periscope/domain/ClusterPertain.java @@ -71,4 +71,15 @@ public String getUserCrn() { public void setUserCrn(String userCrn) { this.userCrn = userCrn; } + + @Override + public String toString() { + return "ClusterPertain{" + + "id=" + id + + ", tenant='" + tenant + '\'' + + ", workspaceId=" + workspaceId + + ", userId='" + userId + '\'' + + ", userCrn='" + userCrn + '\'' + + '}'; + } } diff --git a/autoscale/src/main/java/com/sequenceiq/periscope/domain/History.java b/autoscale/src/main/java/com/sequenceiq/periscope/domain/History.java index 7e02a8cd638a..d375246f38f6 100644 --- a/autoscale/src/main/java/com/sequenceiq/periscope/domain/History.java +++ b/autoscale/src/main/java/com/sequenceiq/periscope/domain/History.java @@ -218,4 +218,13 @@ public String getHostGroup() { public void setHostGroup(String hostGroup) { this.hostGroup = hostGroup; } + + @Override + public String toString() { + return "History{" + + "id=" + id + + ", clusterId=" + clusterId + + ", stackCrn='" + stackCrn + '\'' + + '}'; + } } diff --git a/autoscale/src/main/java/com/sequenceiq/periscope/domain/ScalingPolicy.java b/autoscale/src/main/java/com/sequenceiq/periscope/domain/ScalingPolicy.java index e17605368a2e..d59fa4947f24 100644 --- a/autoscale/src/main/java/com/sequenceiq/periscope/domain/ScalingPolicy.java +++ b/autoscale/src/main/java/com/sequenceiq/periscope/domain/ScalingPolicy.java @@ -97,4 +97,16 @@ public long getAlertId() { public Cluster getCluster() { return alert.getCluster(); } + + @Override + public String toString() { + return "ScalingPolicy{" + + "id=" + id + + ", name='" + name + '\'' + + ", adjustmentType=" + adjustmentType + + ", scalingAdjustment=" + scalingAdjustment + + ", alert=" + alert + + ", hostGroup='" + hostGroup + '\'' + + '}'; + } } diff --git a/autoscale/src/main/java/com/sequenceiq/periscope/domain/SecurityConfig.java b/autoscale/src/main/java/com/sequenceiq/periscope/domain/SecurityConfig.java index e95af008dab5..53b1aab496a7 100644 --- a/autoscale/src/main/java/com/sequenceiq/periscope/domain/SecurityConfig.java +++ b/autoscale/src/main/java/com/sequenceiq/periscope/domain/SecurityConfig.java @@ -11,6 +11,8 @@ import javax.persistence.OneToOne; import javax.persistence.SequenceGenerator; +import com.sequenceiq.cloudbreak.util.DatabaseUtil; + @Entity @NamedQueries(@NamedQuery(name = "SecurityConfig.findByClusterId", query = "SELECT s FROM SecurityConfig s WHERE s.cluster.id= :id")) public class SecurityConfig implements Clustered { @@ -84,4 +86,12 @@ public void update(SecurityConfig updatedConfig) { clientKey = updatedConfig.clientKey; serverCert = updatedConfig.serverCert; } + + @Override + public String toString() { + return "SecurityConfig{" + + "id=" + id + + ", cluster=" + DatabaseUtil.lazyLoadSafeToString(cluster, Cluster::getId) + + '}'; + } } diff --git a/autoscale/src/main/java/com/sequenceiq/periscope/domain/Subscription.java b/autoscale/src/main/java/com/sequenceiq/periscope/domain/Subscription.java index 5e7024d00304..ba2691afd3d9 100644 --- a/autoscale/src/main/java/com/sequenceiq/periscope/domain/Subscription.java +++ b/autoscale/src/main/java/com/sequenceiq/periscope/domain/Subscription.java @@ -49,4 +49,13 @@ public String getEndpoint() { public void setEndpoint(String endpoint) { this.endpoint = endpoint; } + + @Override + public String toString() { + return "Subscription{" + + "id=" + id + + ", clientId='" + clientId + '\'' + + ", endpoint='" + endpoint + '\'' + + '}'; + } } diff --git a/autoscale/src/main/java/com/sequenceiq/periscope/domain/TimeAlert.java b/autoscale/src/main/java/com/sequenceiq/periscope/domain/TimeAlert.java index 31c03cc620e3..a24c6adbe15e 100644 --- a/autoscale/src/main/java/com/sequenceiq/periscope/domain/TimeAlert.java +++ b/autoscale/src/main/java/com/sequenceiq/periscope/domain/TimeAlert.java @@ -70,4 +70,13 @@ public Map getTelemetryParameters() { parameters.put(ADJUSTMENT_TYPE, "" + getScalingPolicy().getAdjustmentType()); return parameters; } + + @Override + public String toString() { + return "TimeAlert{" + + "cluster=" + cluster + + ", timeZone='" + timeZone + '\'' + + ", cron='" + cron + '\'' + + '}'; + } } diff --git a/autoscale/src/test/java/com/sequenceiq/periscope/PeriscopeEntityToStringTest.java b/autoscale/src/test/java/com/sequenceiq/periscope/PeriscopeEntityToStringTest.java new file mode 100644 index 000000000000..17bac92d8c23 --- /dev/null +++ b/autoscale/src/test/java/com/sequenceiq/periscope/PeriscopeEntityToStringTest.java @@ -0,0 +1,7 @@ +package com.sequenceiq.periscope; + +import com.sequenceiq.cloudbreak.AbstractEntityToStringTest; + +class PeriscopeEntityToStringTest extends AbstractEntityToStringTest { + +} diff --git a/common/build.gradle b/common/build.gradle index cbd4f3372d77..a81e12fa9e2d 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -40,7 +40,7 @@ dependencies { implementation group: 'net.sf.json-lib', name: 'json-lib', version: '2.4', classifier: 'jdk15' api group: 'net.jcip', name: 'jcip-annotations', version: '1.0' api group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.4.2' - api group: 'org.reflections', name: 'reflections', version: '0.9.11' + api group: 'org.reflections', name: 'reflections', version: reflectionsVersion implementation group: 'com.github.ben-manes.caffeine', name: 'caffeine', version: caffeineVersion implementation group: 'org.glassfish.jersey.core', name: 'jersey-client', version: jerseyCoreVersion diff --git a/common/src/main/java/com/sequenceiq/cloudbreak/common/anonymizer/AnonymizerUtil.java b/common/src/main/java/com/sequenceiq/cloudbreak/common/anonymizer/AnonymizerUtil.java index c0647e243878..e7d036d17da2 100644 --- a/common/src/main/java/com/sequenceiq/cloudbreak/common/anonymizer/AnonymizerUtil.java +++ b/common/src/main/java/com/sequenceiq/cloudbreak/common/anonymizer/AnonymizerUtil.java @@ -38,6 +38,10 @@ public class AnonymizerUtil { private AnonymizerUtil() { } + public static String anonymize(Object object) { + return object == null ? null : anonymize(object.toString()); + } + public static String anonymize(String content) { String ret = content; if (ret != null) { diff --git a/common/src/main/java/com/sequenceiq/cloudbreak/util/DatabaseUtil.java b/common/src/main/java/com/sequenceiq/cloudbreak/util/DatabaseUtil.java index 2722873b8659..07e14831929b 100644 --- a/common/src/main/java/com/sequenceiq/cloudbreak/util/DatabaseUtil.java +++ b/common/src/main/java/com/sequenceiq/cloudbreak/util/DatabaseUtil.java @@ -3,13 +3,18 @@ import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; +import java.util.function.Function; +import java.util.function.Supplier; +import org.hibernate.Hibernate; import org.postgresql.Driver; import org.springframework.jdbc.datasource.SimpleDriverDataSource; public class DatabaseUtil { public static final String DEFAULT_SCHEMA_NAME = "public"; + public static final String UNINITIALIZED_TO_STRING = ""; + private DatabaseUtil() { } @@ -24,4 +29,26 @@ public static void createSchemaIfNeeded(String dbType, String dbAddress, String } } } + + public static boolean isLazyLoadInitialized(T o) { + return Hibernate.isInitialized(o); + } + + public static String lazyLoadSafeToString(T o) { + return lazyLoadSafeToString(o, Function.identity()); + } + + public static String lazyLoadSafeToString(T o, Function toStringFunction) { + return lazyLoadSafeToString(o, () -> toStringFunction.apply(o)); + } + + public static String lazyLoadSafeToString(Object o, Supplier toStringSupplier) { + if (o == null) { + return null; + } else if (isLazyLoadInitialized(o)) { + return String.valueOf(toStringSupplier.get()); + } else { + return UNINITIALIZED_TO_STRING; + } + } } diff --git a/common/src/test/java/com/sequenceiq/cloudbreak/AbstractEntityToStringTest.java b/common/src/test/java/com/sequenceiq/cloudbreak/AbstractEntityToStringTest.java new file mode 100644 index 000000000000..f6c4f6f6779b --- /dev/null +++ b/common/src/test/java/com/sequenceiq/cloudbreak/AbstractEntityToStringTest.java @@ -0,0 +1,132 @@ +package com.sequenceiq.cloudbreak; + +import static org.assertj.core.api.SoftAssertions.assertSoftly; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.mockito.Mockito.withSettings; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.Map; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.OneToOne; + +import org.hibernate.proxy.HibernateProxy; +import org.hibernate.proxy.LazyInitializer; +import org.junit.jupiter.api.Test; +import org.reflections.Reflections; +import org.reflections.scanners.SubTypesScanner; +import org.reflections.scanners.TypeAnnotationsScanner; +import org.springframework.util.ReflectionUtils; + +public abstract class AbstractEntityToStringTest { + + private final Set> entityClasses = getEntityClasses(); + + Set> getEntityClasses() { + return new Reflections(getClass().getPackageName(), new TypeAnnotationsScanner(), new SubTypesScanner()) + .getTypesAnnotatedWith(Entity.class, true) + .stream() + .filter(clazz -> !Modifier.isAbstract(clazz.getModifiers())) + .collect(Collectors.toSet()); + } + + @Test + void testImplementedToString() { + assertSoftly(softly -> + entityClasses.forEach(entityClass -> { + Method toString = ReflectionUtils.findMethod(entityClass, "toString"); + if (Object.class.equals(toString.getDeclaringClass())) { + softly.fail("Class %s does not implement toString() %s", entityClass.getName(), toString.getDeclaringClass()); + } + })); + } + + @Test + void testLazyLoadSafeToString() { + assertSoftly(softly -> + entityClasses.forEach(entityClass -> { + Object entityInstance = createEntityInstance(entityClass); + setLazyLoadedFields(entityClass, entityInstance); + try { + entityInstance.toString(); + } catch (UninitializedToString e) { + softly.fail("Lazy loaded field %s may throw UninitializedException, please wrap in DatabaseUtil.lazyLoadSafeToString()", e.getField()); + } + })); + } + + /** + * Set circular entity references, so if they are referenced in each other's toString() methods, the test will fail with a {@link StackOverflowError} + */ + @Test + void testCircularEntityReferencesInToString() { + Map, Object> entityInstancesByClass = entityClasses.stream() + .map(this::createEntityInstance) + .collect(Collectors.toMap(Object::getClass, Function.identity())); + + entityInstancesByClass.values().forEach(entity -> Stream.of(entity.getClass().getDeclaredFields()) + .filter(field -> entityInstancesByClass.containsKey(field.getType())) + .forEach(field -> { + ReflectionUtils.makeAccessible(field); + ReflectionUtils.setField(field, entity, entityInstancesByClass.get(field.getType())); + })); + + assertSoftly(softly -> entityInstancesByClass.values() + .forEach(entityInstance -> softly.assertThatCode(entityInstance::toString).doesNotThrowAnyException())); + } + + private Object createEntityInstance(Class entityClass) { + try { + return entityClass.getDeclaredConstructor().newInstance(); + } catch (Exception e) { + throw new RuntimeException("Failed to verify toString() implementation of entity " + entityClass.getName(), e); + } + } + + private void setLazyLoadedFields(Class entityClass, Object newInstance) { + Set lazyLoadedFields = Stream.of(entityClass.getDeclaredFields()) + .filter(this::isLazyLoaded) + .collect(Collectors.toSet()); + lazyLoadedFields.forEach(field -> { + ReflectionUtils.makeAccessible(field); + ReflectionUtils.setField(field, newInstance, createProxyObject(field.getType(), field)); + }); + } + + private boolean isLazyLoaded(Field field) { + return (field.isAnnotationPresent(OneToMany.class) && FetchType.LAZY.equals(field.getAnnotation(OneToMany.class).fetch())) + || (field.isAnnotationPresent(OneToOne.class) && FetchType.LAZY.equals(field.getAnnotation(OneToOne.class).fetch())) + || (field.isAnnotationPresent(ManyToOne.class) && FetchType.LAZY.equals(field.getAnnotation(ManyToOne.class).fetch())); + } + + private T createProxyObject(Class type, Field field) { + LazyInitializer lazyInitializer = mock(LazyInitializer.class); + when(lazyInitializer.isUninitialized()).thenReturn(true); + T hibernateProxy = mock(type, withSettings().extraInterfaces(HibernateProxy.class)); + when(((HibernateProxy) hibernateProxy).getHibernateLazyInitializer()).thenReturn(lazyInitializer); + when(hibernateProxy.toString()).thenThrow(new UninitializedToString(field)); + return hibernateProxy; + } + + static class UninitializedToString extends RuntimeException { + private final Field field; + + UninitializedToString(Field field) { + this.field = field; + } + + public Field getField() { + return field; + } + } +} diff --git a/common/src/test/java/com/sequenceiq/cloudbreak/util/DatabaseUtilTest.java b/common/src/test/java/com/sequenceiq/cloudbreak/util/DatabaseUtilTest.java new file mode 100644 index 000000000000..2d6b1da2fbdf --- /dev/null +++ b/common/src/test/java/com/sequenceiq/cloudbreak/util/DatabaseUtilTest.java @@ -0,0 +1,106 @@ +package com.sequenceiq.cloudbreak.util; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import org.hibernate.proxy.HibernateProxy; +import org.hibernate.proxy.LazyInitializer; +import org.junit.jupiter.api.Test; + +class DatabaseUtilTest { + + private static final String INITIALIZED_TO_STRING = "initialized"; + + private static final String SUPPLIED_TO_STRING = "supplied toString()"; + + private static final String NOT_PROXY_OBJECT = "not proxy object"; + + @Test + void isLazyLoadInitializedFalseWhenProxyIsUninitialized() { + Object proxyObject = createProxyObject(false); + + boolean result = DatabaseUtil.isLazyLoadInitialized(proxyObject); + + assertThat(result).isFalse(); + } + + @Test + void isLazyLoadInitializedTrueWhenProxyIsInitialized() { + Object proxyObject = createProxyObject(true); + + boolean result = DatabaseUtil.isLazyLoadInitialized(proxyObject); + + assertThat(result).isTrue(); + } + + @Test + void isLazyLoadInitializedTrueWhenObjectIsNotProxy() { + boolean result = DatabaseUtil.isLazyLoadInitialized(NOT_PROXY_OBJECT); + + assertThat(result).isTrue(); + } + + @Test + void lazyLoadSafeToStringWhenProxyIsUninitialized() { + Object proxyObject = createProxyObject(false); + + String result = DatabaseUtil.lazyLoadSafeToString(proxyObject); + + assertThat(result).isEqualTo(DatabaseUtil.UNINITIALIZED_TO_STRING); + } + + @Test + void lazyLoadSafeToStringWhenProxyIsInitialized() { + Object proxyObject = createProxyObject(true); + + String result = DatabaseUtil.lazyLoadSafeToString(proxyObject); + + assertThat(result).isEqualTo(INITIALIZED_TO_STRING); + } + + @Test + void lazyLoadSafeToStringWhenObjectIsNotProxy() { + String result = DatabaseUtil.lazyLoadSafeToString(NOT_PROXY_OBJECT); + + assertThat(result).isEqualTo((Object) NOT_PROXY_OBJECT); + } + + @Test + void lazyLoadSafeToStringWithSupplierWhenProxyIsUninitialized() { + Object proxyObject = createProxyObject(false); + + String result = DatabaseUtil.lazyLoadSafeToString(proxyObject, o -> SUPPLIED_TO_STRING); + + assertThat(result).isEqualTo(DatabaseUtil.UNINITIALIZED_TO_STRING); + } + + @Test + void lazyLoadSafeToStringWithSupplierWhenProxyIsInitialized() { + Object proxyObject = createProxyObject(true); + + String result = DatabaseUtil.lazyLoadSafeToString(proxyObject, o -> SUPPLIED_TO_STRING); + + assertThat(result).isEqualTo(SUPPLIED_TO_STRING); + } + + @Test + void lazyLoadSafeToStringWithSupplierWhenObjectIsNotProxy() { + String result = DatabaseUtil.lazyLoadSafeToString(NOT_PROXY_OBJECT, o -> SUPPLIED_TO_STRING); + + assertThat(result).isEqualTo(SUPPLIED_TO_STRING); + } + + /** + * @param initialized the expected return value of {@link org.hibernate.Hibernate#isInitialized(Object)} when called on the result {@link Object} + */ + private Object createProxyObject(boolean initialized) { + LazyInitializer lazyInitializer = mock(LazyInitializer.class); + when(lazyInitializer.isUninitialized()).thenReturn(!initialized); + HibernateProxy hibernateProxy = mock(HibernateProxy.class); + when(hibernateProxy.getHibernateLazyInitializer()).thenReturn(lazyInitializer); + when(hibernateProxy.toString()).thenReturn(INITIALIZED_TO_STRING); + return hibernateProxy; + } + +} diff --git a/core-model/build.gradle b/core-model/build.gradle index 9d7bdffddbac..66e42a8e9f9e 100644 --- a/core-model/build.gradle +++ b/core-model/build.gradle @@ -25,7 +25,7 @@ dependencies { implementation group: 'net.jcip', name: 'jcip-annotations', version: '1.0' implementation group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.4.2' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: hamcrestVersion - testImplementation group: 'org.reflections', name: 'reflections', version: '0.9.11' + testImplementation group: 'org.reflections', name: 'reflections', version: reflectionsVersion testImplementation group: 'org.assertj', name: 'assertj-core', version: assertjVersion testImplementation project(path: ':common', configuration: 'tests') } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Container.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Container.java index 0f1d995ba18f..9c069d83deaa 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Container.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Container.java @@ -76,4 +76,14 @@ public void setCluster(Cluster cluster) { this.cluster = cluster; } + @Override + public String toString() { + return "Container{" + + "id=" + id + + ", containerId='" + containerId + '\'' + + ", name='" + name + '\'' + + ", image='" + image + '\'' + + ", host='" + host + '\'' + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/FailurePolicy.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/FailurePolicy.java index ed96acc5315d..d6a82d24d71d 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/FailurePolicy.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/FailurePolicy.java @@ -46,4 +46,13 @@ public AdjustmentType getAdjustmentType() { public void setAdjustmentType(AdjustmentType adjustmentType) { this.adjustmentType = adjustmentType; } + + @Override + public String toString() { + return "FailurePolicy{" + + "id=" + id + + ", threshold=" + threshold + + ", adjustmentType=" + adjustmentType + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/FileSystem.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/FileSystem.java index 7758b22e1359..33e4e78e79b4 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/FileSystem.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/FileSystem.java @@ -122,4 +122,14 @@ public void setCloudStorage(CloudStorage cloudStorage) { this.cloudStorage = new Json(cloudStorage); } } + + @Override + public String toString() { + return "FileSystem{" + + "id=" + id + + ", name='" + name + '\'' + + ", type=" + type + + ", description='" + description + '\'' + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Network.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Network.java index 7b4b38d3429e..2a5de1c48b7f 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Network.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Network.java @@ -188,4 +188,23 @@ public void unsetRelationsToEntitiesToBeDeleted() { public void setDeletionTimestamp(Long deletionTimestamp) { this.deletionTimestamp = deletionTimestamp; } + + @Override + public String toString() { + return "Network{" + + "id=" + id + + ", name='" + name + '\'' + + ", subnetCIDR='" + subnetCIDR + '\'' + + ", description='" + description + '\'' + + ", status=" + status + + ", cloudPlatform='" + cloudPlatform + '\'' + + ", attributes=" + attributes + + ", outboundInternetTraffic=" + outboundInternetTraffic + + ", networkCidrs='" + networkCidrs + '\'' + + ", topology=" + topology + + ", workspace=" + workspace + + ", archived=" + archived + + ", deletionTimestamp=" + deletionTimestamp + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Orchestrator.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Orchestrator.java index 08b774a4d21a..e2538ddd1a41 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Orchestrator.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Orchestrator.java @@ -58,4 +58,13 @@ public Json getAttributes() { public void setAttributes(Json attributes) { this.attributes = attributes; } + + @Override + public String toString() { + return "Orchestrator{" + + "id=" + id + + ", apiEndpoint='" + apiEndpoint + '\'' + + ", type='" + type + '\'' + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/RDSConfig.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/RDSConfig.java index 7c102d12aa0b..f5c714c3eeb1 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/RDSConfig.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/RDSConfig.java @@ -269,4 +269,18 @@ public Long getDeletionTimestamp() { public boolean isArchived() { return archived; } + + @Override + public String toString() { + return "RDSConfig{" + + "id=" + id + + ", name='" + name + '\'' + + ", creationDate=" + creationDate + + ", stackVersion='" + stackVersion + '\'' + + ", status=" + status + + ", type='" + type + '\'' + + ", archived=" + archived + + ", deletionTimestamp=" + deletionTimestamp + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Resource.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Resource.java index 69721bbcbeb4..dfea0e7a20ab 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Resource.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Resource.java @@ -163,4 +163,17 @@ public String getAvailabilityZone() { public void setAvailabilityZone(String availabilityZone) { this.availabilityZone = availabilityZone; } + + @Override + public String toString() { + return "Resource{" + + "id=" + id + + ", resourceType=" + resourceType + + ", resourceStatus=" + resourceStatus + + ", resourceName='" + resourceName + '\'' + + ", resourceReference='" + resourceReference + '\'' + + ", instanceId='" + instanceId + '\'' + + ", availabilityZone='" + availabilityZone + '\'' + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/SaltSecurityConfig.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/SaltSecurityConfig.java index 3b926e9c8531..3013f5785172 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/SaltSecurityConfig.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/SaltSecurityConfig.java @@ -134,4 +134,11 @@ public String getSaltSignPublicKey() { public String getSaltSignPrivateKey() { return saltSignPrivateKey.getRaw(); } + + @Override + public String toString() { + return "SaltSecurityConfig{" + + "id=" + id + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/SecurityConfig.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/SecurityConfig.java index 82cf2adc6a28..059f5e70b7e5 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/SecurityConfig.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/SecurityConfig.java @@ -16,6 +16,7 @@ import com.sequenceiq.cloudbreak.service.secret.SecretValue; import com.sequenceiq.cloudbreak.service.secret.domain.Secret; import com.sequenceiq.cloudbreak.service.secret.domain.SecretToString; +import com.sequenceiq.cloudbreak.util.DatabaseUtil; import com.sequenceiq.cloudbreak.workspace.model.Workspace; import com.sequenceiq.cloudbreak.workspace.model.WorkspaceAwareResource; @@ -144,4 +145,19 @@ public String getUserFacingKey() { public void setUserFacingKey(String userFacingKey) { this.userFacingKey = new Secret(userFacingKey); } + + @Override + public String toString() { + return "SecurityConfig{" + + "id=" + id + + ", clientKey=" + clientKey + + ", clientCert=" + clientCert + + ", stack=" + DatabaseUtil.lazyLoadSafeToString(stack, Stack::getResourceCrn) + + ", saltSecurityConfig=" + saltSecurityConfig + + ", usePrivateIpToTls=" + usePrivateIpToTls + + ", workspace=" + workspace + + ", userFacingCert=" + userFacingCert + + ", userFacingKey=" + userFacingKey + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/SecurityGroup.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/SecurityGroup.java index cce754ba34cf..886258f15864 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/SecurityGroup.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/SecurityGroup.java @@ -119,4 +119,15 @@ public String getCloudPlatform() { public void setCloudPlatform(String cloudPlatform) { this.cloudPlatform = cloudPlatform; } + + @Override + public String toString() { + return "SecurityGroup{" + + "id=" + id + + ", name='" + name + '\'' + + ", description='" + description + '\'' + + ", status=" + status + + ", cloudPlatform='" + cloudPlatform + '\'' + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/ShowTerminatedClustersPreferences.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/ShowTerminatedClustersPreferences.java index bfc7e1a0fa11..a2d3c33f0683 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/ShowTerminatedClustersPreferences.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/ShowTerminatedClustersPreferences.java @@ -52,4 +52,13 @@ public Boolean isActive() { public Duration getTimeout() { return timeout != null ? timeout : Duration.ZERO; } + + @Override + public String toString() { + return "ShowTerminatedClustersPreferences{" + + "id=" + id + + ", active=" + active + + ", timeout=" + timeout + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/StackAuthentication.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/StackAuthentication.java index 497b8ca0b2c9..24373329b844 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/StackAuthentication.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/StackAuthentication.java @@ -57,4 +57,14 @@ public String getLoginUserName() { public void setLoginUserName(String loginUserName) { this.loginUserName = loginUserName; } + + @Override + public String toString() { + return "StackAuthentication{" + + "id=" + id + + ", publicKey='" + publicKey + '\'' + + ", publicKeyId='" + publicKeyId + '\'' + + ", loginUserName='" + loginUserName + '\'' + + '}'; + } } \ No newline at end of file diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/StructuredEventEntity.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/StructuredEventEntity.java index 3530eea64e59..120b6b4889c2 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/StructuredEventEntity.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/StructuredEventEntity.java @@ -133,4 +133,16 @@ public String getResourceCrn() { public void setResourceCrn(String resourceCrn) { this.resourceCrn = resourceCrn; } + + @Override + public String toString() { + return "StructuredEventEntity{" + + "id=" + id + + ", eventType=" + eventType + + ", resourceType='" + resourceType + '\'' + + ", resourceId=" + resourceId + + ", resourceCrn='" + resourceCrn + '\'' + + ", timestamp=" + timestamp + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Template.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Template.java index 6cd41581c04a..40f3f6353aed 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Template.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Template.java @@ -198,4 +198,20 @@ public Integer getInstanceStorageCount() { public void setInstanceStorageCount(Integer instanceStorageCount) { this.instanceStorageCount = instanceStorageCount; } + + @Override + public String toString() { + return "Template{" + + "id=" + id + + ", name='" + name + '\'' + + ", description='" + description + '\'' + + ", instanceType='" + instanceType + '\'' + + ", rootVolumeSize=" + rootVolumeSize + + ", deleted=" + deleted + + ", status=" + status + + ", cloudPlatform='" + cloudPlatform + '\'' + + ", topology=" + topology + + ", instanceStorageCount=" + instanceStorageCount + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Topology.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Topology.java index c26123efcb77..42c740d87f27 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Topology.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/Topology.java @@ -124,4 +124,16 @@ public void unsetRelationsToEntitiesToBeDeleted() { public Long getDeletionTimestamp() { return deletionTimestamp; } + + @Override + public String toString() { + return "Topology{" + + "id=" + id + + ", name='" + name + '\'' + + ", description='" + description + '\'' + + ", cloudPlatform='" + cloudPlatform + '\'' + + ", deleted=" + deleted + + ", deletionTimestamp=" + deletionTimestamp + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/UserProfile.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/UserProfile.java index cf3577dd4d26..0febf3e81088 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/UserProfile.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/UserProfile.java @@ -100,4 +100,15 @@ public void setShowTerminatedClustersPreferences(ShowTerminatedClustersPreferenc public Tenant getTenant() { return user.getTenant(); } + + @Override + public String toString() { + return "UserProfile{" + + "id=" + id + + ", imageCatalog=" + imageCatalog + + ", userName='" + userName + '\'' + + ", user=" + user + + ", showTerminatedClustersPreferences=" + showTerminatedClustersPreferences + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/VolumeTemplate.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/VolumeTemplate.java index 4b969d1a246f..178512333b75 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/VolumeTemplate.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/VolumeTemplate.java @@ -94,4 +94,14 @@ public String getName() { public void setWorkspace(Workspace workspace) { template.setWorkspace(workspace); } + + @Override + public String toString() { + return "VolumeTemplate{" + + "id=" + id + + ", volumeCount=" + volumeCount + + ", volumeSize=" + volumeSize + + ", volumeType='" + volumeType + '\'' + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/Component.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/Component.java index 18cf9468f031..ec958325ab2a 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/Component.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/Component.java @@ -102,7 +102,7 @@ public String toString() { + "id=" + id + ", componentType=" + componentType + ", name='" + name + '\'' - + ", attributes=" + anonymize(attributes.toString()) + + ", attributes=" + anonymize(attributes) + '}'; } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/Stack.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/Stack.java index c89b8e8e3715..2368f90fb0fb 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/Stack.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/Stack.java @@ -73,6 +73,7 @@ import com.sequenceiq.cloudbreak.domain.stack.instance.InstanceMetaData; import com.sequenceiq.cloudbreak.domain.stack.loadbalancer.LoadBalancer; import com.sequenceiq.cloudbreak.domain.stack.loadbalancer.TargetGroup; +import com.sequenceiq.cloudbreak.util.DatabaseUtil; import com.sequenceiq.cloudbreak.workspace.model.User; import com.sequenceiq.cloudbreak.workspace.model.Workspace; import com.sequenceiq.cloudbreak.workspace.model.WorkspaceAwareResource; @@ -960,10 +961,11 @@ public String toString() { ", cloudPlatform='" + cloudPlatform + '\'' + ", cluster=" + cluster + ", stackStatus=" + stackStatus + + ", resources=" + DatabaseUtil.lazyLoadSafeToString(resources) + ", onFailureActionAction=" + onFailureActionAction + ", failurePolicy=" + failurePolicy + - ", securityConfig=" + securityConfig + - ", instanceGroups=" + instanceGroups.stream().map(InstanceGroup::getGroupName).collect(Collectors.toSet()) + + ", securityConfig=" + DatabaseUtil.lazyLoadSafeToString(securityConfig) + + ", instanceGroups=" + DatabaseUtil.lazyLoadSafeToString(instanceGroups, this::instanceGroupsToString) + ", version=" + version + ", network=" + network + ", stackAuthentication=" + stackAuthentication + @@ -986,6 +988,10 @@ public String toString() { '}'; } + private String instanceGroupsToString() { + return instanceGroups.stream().map(InstanceGroup::getGroupName).collect(Collectors.toSet()).toString(); + } + @Override public Set getAllNodesForOrchestration() { return instanceGroups.stream() diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/ClusterTemplate.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/ClusterTemplate.java index 3761d0cb2bf2..82b4961f8032 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/ClusterTemplate.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/ClusterTemplate.java @@ -198,4 +198,21 @@ public String getClouderaRuntimeVersion() { public void setClouderaRuntimeVersion(String clouderaRuntimeVersion) { this.clouderaRuntimeVersion = clouderaRuntimeVersion; } + + @Override + public String toString() { + return "ClusterTemplate{" + + "id=" + id + + ", name='" + name + '\'' + + ", description='" + description + '\'' + + ", status=" + status + + ", cloudPlatform='" + cloudPlatform + '\'' + + ", datalakeRequired=" + datalakeRequired + + ", featureState=" + featureState + + ", type=" + type + + ", resourceCrn='" + resourceCrn + '\'' + + ", clouderaRuntimeVersion='" + clouderaRuntimeVersion + '\'' + + ", created=" + created + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/IdBroker.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/IdBroker.java index e2ac81e7d122..1934fc08f083 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/IdBroker.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/IdBroker.java @@ -118,4 +118,10 @@ public void setSignCert(String signCert) { this.signCert = signCert; } + @Override + public String toString() { + return "IdBroker{" + + "id=" + id + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/gateway/Gateway.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/gateway/Gateway.java index 98ccd6eab7af..aeb35e2519c2 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/gateway/Gateway.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/gateway/Gateway.java @@ -214,4 +214,14 @@ public Integer getGatewayPort() { public void setGatewayPort(Integer gatewayPort) { this.gatewayPort = gatewayPort; } + + @Override + public String toString() { + return "Gateway{" + + "id=" + id + + ", gatewayType=" + gatewayType + + ", path='" + path + '\'' + + ", gatewayPort=" + gatewayPort + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/gateway/GatewayTopology.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/gateway/GatewayTopology.java index 21750862bba2..c63813ac00b6 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/gateway/GatewayTopology.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/gateway/GatewayTopology.java @@ -73,4 +73,12 @@ public Json getExposedServices() { public void setExposedServices(Json exposedServices) { this.exposedServices = exposedServices; } + + @Override + public String toString() { + return "GatewayTopology{" + + "id=" + id + + ", topologyName='" + topologyName + '\'' + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/host/HostGroup.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/host/HostGroup.java index 5d88859b2e8b..e682dd35952a 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/host/HostGroup.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/cluster/host/HostGroup.java @@ -122,4 +122,12 @@ public void setGeneratedRecipes(Set generatedRecipes) { this.generatedRecipes = generatedRecipes; } + @Override + public String toString() { + return "HostGroup{" + + "id=" + id + + ", name='" + name + '\'' + + ", recoveryMode=" + recoveryMode + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/instance/ArchivedInstanceMetaData.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/instance/ArchivedInstanceMetaData.java index 6ec55ada56b0..ddd60b20db6c 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/instance/ArchivedInstanceMetaData.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/instance/ArchivedInstanceMetaData.java @@ -16,6 +16,7 @@ import com.sequenceiq.cloudbreak.domain.ProvisionEntity; import com.sequenceiq.cloudbreak.domain.converter.InstanceLifeCycleConverter; import com.sequenceiq.cloudbreak.domain.converter.InstanceMetadataTypeConverter; +import com.sequenceiq.cloudbreak.util.DatabaseUtil; @Entity public class ArchivedInstanceMetaData implements ProvisionEntity { @@ -295,7 +296,7 @@ public String toString() { ", instanceStatus=" + instanceStatus + ", instanceMetadataType=" + instanceMetadataType + ", localityIndicator='" + localityIndicator + '\'' + - ", instanceGroup=" + instanceGroup + + ", instanceGroup=" + DatabaseUtil.lazyLoadSafeToString(instanceGroup) + ", startDate=" + startDate + ", terminationDate=" + terminationDate + ", subnetId='" + subnetId + '\'' + diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/instance/InstanceGroup.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/instance/InstanceGroup.java index a42a77bc0193..c9347cccfde2 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/instance/InstanceGroup.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/instance/InstanceGroup.java @@ -36,6 +36,7 @@ import com.sequenceiq.cloudbreak.domain.stack.Stack; import com.sequenceiq.cloudbreak.domain.stack.instance.network.InstanceGroupNetwork; import com.sequenceiq.cloudbreak.domain.stack.loadbalancer.TargetGroup; +import com.sequenceiq.cloudbreak.util.DatabaseUtil; import com.sequenceiq.common.api.type.InstanceGroupType; import com.sequenceiq.common.api.type.ScalabilityOption; import com.sequenceiq.common.model.CloudIdentityType; @@ -310,7 +311,7 @@ public String toString() { "id=" + id + ", groupName='" + groupName + '\'' + ", instanceGroupType=" + instanceGroupType + - ", stack=" + stack.getName() + + ", stack=" + DatabaseUtil.lazyLoadSafeToString(stack, Stack::getName) + '}'; } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/instance/network/InstanceGroupNetwork.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/instance/network/InstanceGroupNetwork.java index ba4d7d7960a0..5a4a144dd944 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/instance/network/InstanceGroupNetwork.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/instance/network/InstanceGroupNetwork.java @@ -55,4 +55,12 @@ public void setAttributes(Json attributes) { public String getCloudPlatform() { return cloudPlatform; } + + @Override + public String toString() { + return "InstanceGroupNetwork{" + + "id=" + id + + ", cloudPlatform='" + cloudPlatform + '\'' + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/loadbalancer/TargetGroup.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/loadbalancer/TargetGroup.java index 80ecc6b2cf48..2358830bb151 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/loadbalancer/TargetGroup.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/stack/loadbalancer/TargetGroup.java @@ -103,4 +103,12 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hash(type); } + + @Override + public String toString() { + return "TargetGroup{" + + "id=" + id + + ", type=" + type + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/BlueprintView.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/BlueprintView.java index 96f9b6e18fa6..46e1b402f51c 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/BlueprintView.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/BlueprintView.java @@ -99,4 +99,18 @@ public BlueprintUpgradeOption getBlueprintUpgradeOption() { public void setBlueprintUpgradeOption(BlueprintUpgradeOption blueprintUpgradeOption) { this.blueprintUpgradeOption = blueprintUpgradeOption; } + + @Override + public String toString() { + return "BlueprintView{" + + "stackType='" + stackType + '\'' + + ", stackVersion='" + stackVersion + '\'' + + ", hostGroupCount=" + hostGroupCount + + ", status=" + status + + ", resourceCrn='" + resourceCrn + '\'' + + ", tags=" + tags + + ", created=" + created + + ", blueprintUpgradeOption=" + blueprintUpgradeOption + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterApiView.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterApiView.java index fe7069bf351e..ed8a7a6f53d6 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterApiView.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterApiView.java @@ -11,11 +11,11 @@ import javax.persistence.OneToOne; import javax.persistence.Table; -import com.sequenceiq.common.api.type.CertExpirationState; import com.sequenceiq.cloudbreak.api.endpoint.v4.common.Status; - import com.sequenceiq.cloudbreak.converter.CertExpirationStateConverter; import com.sequenceiq.cloudbreak.domain.converter.StatusConverter; +import com.sequenceiq.common.api.type.CertExpirationState; + import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; @Entity @@ -96,4 +96,14 @@ public CertExpirationState getCertExpirationState() { public void setCertExpirationState(CertExpirationState certExpirationState) { this.certExpirationState = certExpirationState; } + + @Override + public String toString() { + return "ClusterApiView{" + + ", clusterManagerIp='" + clusterManagerIp + '\'' + + ", status=" + status + + ", environmentCrn='" + environmentCrn + '\'' + + ", certExpirationState=" + certExpirationState + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterComponentView.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterComponentView.java index 143bfc8beee5..93dc0330ca83 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterComponentView.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterComponentView.java @@ -69,4 +69,14 @@ public Long getClusterId() { public void setClusterId(Long clusterId) { this.clusterId = clusterId; } + + @Override + public String toString() { + return "ClusterComponentView{" + + "id=" + id + + ", componentType=" + componentType + + ", name='" + name + '\'' + + ", clusterId=" + clusterId + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterTemplateClusterApiView.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterTemplateClusterApiView.java index eb45622de092..29c7a16a797a 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterTemplateClusterApiView.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterTemplateClusterApiView.java @@ -43,4 +43,12 @@ public BlueprintView getBlueprint() { public void setBlueprint(BlueprintView blueprint) { this.blueprint = blueprint; } + + @Override + public String toString() { + return "ClusterTemplateClusterApiView{" + + ", blueprint=" + blueprint + + ", environmentCrn='" + environmentCrn + '\'' + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterTemplateInstanceGroupView.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterTemplateInstanceGroupView.java index 0a13e22458bb..5ab6a774a5d3 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterTemplateInstanceGroupView.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterTemplateInstanceGroupView.java @@ -32,4 +32,12 @@ public String getGroupName() { return groupName; } + @Override + public String toString() { + return "ClusterTemplateInstanceGroupView{" + + "id=" + id + + ", groupName='" + groupName + '\'' + + ", initialNodeCount=" + initialNodeCount + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterTemplateStackApiView.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterTemplateStackApiView.java index 6720fefa0a2e..926f49289102 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterTemplateStackApiView.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterTemplateStackApiView.java @@ -85,4 +85,14 @@ public StackType getType() { public void setType(StackType type) { this.type = type; } + + @Override + public String toString() { + return "ClusterTemplateStackApiView{" + + "cloudPlatform='" + cloudPlatform + '\'' + + ", type=" + type + + ", environmentCrn='" + environmentCrn + '\'' + + ", resourceCrn='" + resourceCrn + '\'' + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterTemplateView.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterTemplateView.java index aaa3a529a773..bec3c8762798 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterTemplateView.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterTemplateView.java @@ -122,4 +122,18 @@ public String getClouderaRuntimeVersion() { public void setClouderaRuntimeVersion(String clouderaRuntimeVersion) { this.clouderaRuntimeVersion = clouderaRuntimeVersion; } + + @Override + public String toString() { + return "ClusterTemplateView{" + + "status=" + status + + ", cloudPlatform='" + cloudPlatform + '\'' + + ", resourceCrn='" + resourceCrn + '\'' + + ", datalakeRequired=" + datalakeRequired + + ", type=" + type + + ", featureState=" + featureState + + ", created=" + created + + ", clouderaRuntimeVersion='" + clouderaRuntimeVersion + '\'' + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterView.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterView.java index dd80debb7974..ef8864bc58d2 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterView.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/ClusterView.java @@ -39,4 +39,11 @@ public Status getStatus() { return status; } + @Override + public String toString() { + return "ClusterView{" + + "clusterManagerIp='" + clusterManagerIp + '\'' + + ", status=" + status + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/HostGroupView.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/HostGroupView.java index 9b0be5a32e63..02dcb9571070 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/HostGroupView.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/HostGroupView.java @@ -55,4 +55,12 @@ public InstanceGroupView getInstanceGroup() { public void setInstanceGroup(InstanceGroupView instanceGroup) { this.instanceGroup = instanceGroup; } + + @Override + public String toString() { + return "HostGroupView{" + + "id=" + id + + ", name='" + name + '\'' + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/InstanceGroupView.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/InstanceGroupView.java index f9c36985a83e..89e21c683b7a 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/InstanceGroupView.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/InstanceGroupView.java @@ -54,4 +54,12 @@ public InstanceGroupType getInstanceGroupType() { return instanceGroupType; } + @Override + public String toString() { + return "InstanceGroupView{" + + "id=" + id + + ", groupName='" + groupName + '\'' + + ", instanceGroupType=" + instanceGroupType + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/InstanceMetaDataView.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/InstanceMetaDataView.java index 79592ff19466..50b36d2f7b82 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/InstanceMetaDataView.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/InstanceMetaDataView.java @@ -58,4 +58,14 @@ public String getInstanceName() { public String getStatusReason() { return statusReason; } + + @Override + public String toString() { + return "InstanceMetaDataView{" + + "id=" + id + + ", instanceStatus=" + instanceStatus + + ", instanceName='" + instanceName + '\'' + + ", statusReason='" + statusReason + '\'' + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/OrchestratorView.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/OrchestratorView.java index 200cd98cd5d7..92f90202f82e 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/OrchestratorView.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/OrchestratorView.java @@ -24,4 +24,11 @@ public String getType() { return type; } + @Override + public String toString() { + return "OrchestratorView{" + + "id=" + id + + ", type='" + type + '\'' + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/RecipeView.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/RecipeView.java index 7bb39cfad893..83e55409f16f 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/RecipeView.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/RecipeView.java @@ -4,10 +4,10 @@ import javax.persistence.Entity; import javax.persistence.Table; -import com.sequenceiq.cloudbreak.domain.converter.RecipeV4TypeConverter; import org.hibernate.annotations.Where; import com.sequenceiq.cloudbreak.api.endpoint.v4.recipes.requests.RecipeV4Type; +import com.sequenceiq.cloudbreak.domain.converter.RecipeV4TypeConverter; @Entity @Where(clause = "archived = false") @@ -46,4 +46,14 @@ public Long getCreated() { public void setCreated(Long created) { this.created = created; } + + @Override + public String toString() { + return "RecipeView{" + + "recipeType=" + recipeType + + ", resourceCrn='" + resourceCrn + '\'' + + ", archived=" + archived + + ", created=" + created + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/StackApiView.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/StackApiView.java index 85bd26be6285..f45c1a1ba281 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/StackApiView.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/StackApiView.java @@ -191,4 +191,22 @@ public String getStackVersion() { public void setStackVersion(String stackVersion) { this.stackVersion = stackVersion; } + + @Override + public String toString() { + return "StackApiView{" + + ", cloudPlatform='" + cloudPlatform + '\'' + + ", platformVariant='" + platformVariant + '\'' + + ", stackStatus=" + stackStatus + + ", created=" + created + + ", terminated=" + terminated + + ", datalakeCrn='" + datalakeCrn + '\'' + + ", type=" + type + + ", environmentCrn='" + environmentCrn + '\'' + + ", resourceCrn='" + resourceCrn + '\'' + + ", stackVersion='" + stackVersion + '\'' + + ", nodeCount=" + nodeCount + + ", tunnel=" + tunnel + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/StackStatusView.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/StackStatusView.java index 540f4e6d07e4..971c7048b95f 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/StackStatusView.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/StackStatusView.java @@ -33,4 +33,12 @@ public void setId(Long id) { public void setStatus(Status status) { this.status = status; } + + @Override + public String toString() { + return "StackStatusView{" + + "id=" + id + + ", status=" + status + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/StackView.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/StackView.java index 69f249a4e1d1..b06f0db92e54 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/StackView.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/StackView.java @@ -180,4 +180,20 @@ public String getEnvironmentCrn() { public void setEnvironmentCrn(String environmentCrn) { this.environmentCrn = environmentCrn; } + + @Override + public String toString() { + return "StackView{" + + ", cloudPlatform='" + cloudPlatform + '\'' + + ", platformVariant='" + platformVariant + '\'' + + ", stackStatus=" + stackStatus + + ", gatewayPort=" + gatewayPort + + ", created=" + created + + ", terminated=" + terminated + + ", resourceCrn='" + resourceCrn + '\'' + + ", tunnel=" + tunnel + + ", type=" + type + + ", environmentCrn='" + environmentCrn + '\'' + + '}'; + } } diff --git a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/UserView.java b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/UserView.java index 90fdef2c4537..f7eaecf30ed7 100644 --- a/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/UserView.java +++ b/core-model/src/main/java/com/sequenceiq/cloudbreak/domain/view/UserView.java @@ -58,4 +58,14 @@ public String getUserCrn() { public void setUserCrn(String userCrn) { this.userCrn = userCrn; } + + @Override + public String toString() { + return "UserView{" + + "id=" + id + + ", userName='" + userName + '\'' + + ", userId='" + userId + '\'' + + ", userCrn='" + userCrn + '\'' + + '}'; + } } diff --git a/core/src/test/java/com/sequenceiq/cloudbreak/CloudbreakEntityToStringTest.java b/core/src/test/java/com/sequenceiq/cloudbreak/CloudbreakEntityToStringTest.java new file mode 100644 index 000000000000..d82d2fa5cb68 --- /dev/null +++ b/core/src/test/java/com/sequenceiq/cloudbreak/CloudbreakEntityToStringTest.java @@ -0,0 +1,5 @@ +package com.sequenceiq.cloudbreak; + +class CloudbreakEntityToStringTest extends AbstractEntityToStringTest { + +} diff --git a/core/src/test/java/com/sequenceiq/cloudbreak/InjectTest.java b/core/src/test/java/com/sequenceiq/cloudbreak/InjectTest.java index 31bbca0a2461..80c680cd6b2e 100644 --- a/core/src/test/java/com/sequenceiq/cloudbreak/InjectTest.java +++ b/core/src/test/java/com/sequenceiq/cloudbreak/InjectTest.java @@ -1,21 +1,23 @@ package com.sequenceiq.cloudbreak; -import org.junit.Assert; -import org.junit.Test; -import org.reflections.Reflections; -import org.reflections.scanners.FieldAnnotationsScanner; -import org.reflections.scanners.MemberUsageScanner; -import org.reflections.scanners.SubTypesScanner; -import org.reflections.scanners.TypeAnnotationsScanner; +import static java.lang.System.lineSeparator; -import javax.inject.Inject; import java.lang.reflect.Member; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; -import static java.lang.System.lineSeparator; +import javax.inject.Inject; + +import org.junit.Assert; +import org.junit.Test; +import org.reflections.Reflections; +import org.reflections.scanners.FieldAnnotationsScanner; +import org.reflections.scanners.MemberUsageScanner; +import org.reflections.scanners.SubTypesScanner; +import org.reflections.scanners.TypeAnnotationsScanner; public class InjectTest { @@ -30,7 +32,7 @@ public void testIfThereAreUnusedInjections() { Map> unusedFields = new HashMap<>(); reflections.getFieldsAnnotatedWith(Inject.class).forEach(field -> { try { - Set usages = reflections.getFieldUsage(field); + Collection usages = reflections.getFieldUsage(field); if (usages.isEmpty()) { String className = field.getDeclaringClass().getName(); unusedFields.computeIfAbsent(className, key -> new HashSet<>()).add(field.toString()); diff --git a/custom-configurations/src/main/java/com/sequenceiq/cloudbreak/domain/CustomConfigurations.java b/custom-configurations/src/main/java/com/sequenceiq/cloudbreak/domain/CustomConfigurations.java index 1b3daef748c9..104389b6e0e1 100644 --- a/custom-configurations/src/main/java/com/sequenceiq/cloudbreak/domain/CustomConfigurations.java +++ b/custom-configurations/src/main/java/com/sequenceiq/cloudbreak/domain/CustomConfigurations.java @@ -15,6 +15,7 @@ import javax.persistence.UniqueConstraint; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.sequenceiq.cloudbreak.util.DatabaseUtil; @Entity @Table( @@ -132,7 +133,7 @@ public String toString() { return "CustomConfigs{" + "name='" + name + '\'' + ", crn='" + crn + '\'' + - ", configurations='" + configurations + '\'' + + ", configurations='" + DatabaseUtil.lazyLoadSafeToString(configurations) + '\'' + ", runtimeVersion='" + runtimeVersion + '\'' + ", created=" + created + '}'; diff --git a/datalake/src/main/java/com/sequenceiq/datalake/entity/SdxClusterView.java b/datalake/src/main/java/com/sequenceiq/datalake/entity/SdxClusterView.java index 29c3970d9033..7377d7c5ea94 100644 --- a/datalake/src/main/java/com/sequenceiq/datalake/entity/SdxClusterView.java +++ b/datalake/src/main/java/com/sequenceiq/datalake/entity/SdxClusterView.java @@ -68,4 +68,16 @@ public String getEnvCrn() { public String getEnvName() { return envName; } + + @Override + public String toString() { + return "SdxClusterView{" + + "id=" + id + + ", clusterName='" + clusterName + '\'' + + ", accountId='" + accountId + '\'' + + ", crn='" + crn + '\'' + + ", envCrn='" + envCrn + '\'' + + ", envName='" + envName + '\'' + + '}'; + } } diff --git a/datalake/src/main/java/com/sequenceiq/datalake/entity/SdxStatusEntity.java b/datalake/src/main/java/com/sequenceiq/datalake/entity/SdxStatusEntity.java index c80238decf75..aa795d37f600 100644 --- a/datalake/src/main/java/com/sequenceiq/datalake/entity/SdxStatusEntity.java +++ b/datalake/src/main/java/com/sequenceiq/datalake/entity/SdxStatusEntity.java @@ -1,7 +1,5 @@ package com.sequenceiq.datalake.entity; -import com.sequenceiq.datalake.converter.DatalakeStatusEnumConverter; - import javax.persistence.Convert; import javax.persistence.Entity; import javax.persistence.FetchType; @@ -14,6 +12,9 @@ import javax.persistence.Table; import javax.validation.constraints.NotNull; +import com.sequenceiq.cloudbreak.util.DatabaseUtil; +import com.sequenceiq.datalake.converter.DatalakeStatusEnumConverter; + @Entity @Table(name = "sdxstatus") public class SdxStatusEntity { @@ -74,4 +75,15 @@ public DatalakeStatusEnum getStatus() { public void setStatus(DatalakeStatusEnum status) { this.status = status; } + + @Override + public String toString() { + return "SdxStatusEntity{" + + "id=" + id + + ", datalake=" + DatabaseUtil.lazyLoadSafeToString(datalake, SdxCluster::getResourceCrn) + + ", created=" + created + + ", statusReason='" + statusReason + '\'' + + ", status=" + status + + '}'; + } } diff --git a/datalake/src/main/java/com/sequenceiq/datalake/entity/operation/SdxOperation.java b/datalake/src/main/java/com/sequenceiq/datalake/entity/operation/SdxOperation.java index bddd8e29d70b..3b777620f7d8 100644 --- a/datalake/src/main/java/com/sequenceiq/datalake/entity/operation/SdxOperation.java +++ b/datalake/src/main/java/com/sequenceiq/datalake/entity/operation/SdxOperation.java @@ -89,4 +89,15 @@ public void setStatus(SdxOperationStatus status) { this.status = status; } + @Override + public String toString() { + return "SdxOperation{" + + "id=" + id + + ", operationType=" + operationType + + ", sdxClusterId=" + sdxClusterId + + ", operationId='" + operationId + '\'' + + ", statusReason='" + statusReason + '\'' + + ", status=" + status + + '}'; + } } diff --git a/datalake/src/test/java/com/sequenceiq/datalake/DatalakeEntityToStringTest.java b/datalake/src/test/java/com/sequenceiq/datalake/DatalakeEntityToStringTest.java new file mode 100644 index 000000000000..1dd880d9fe1c --- /dev/null +++ b/datalake/src/test/java/com/sequenceiq/datalake/DatalakeEntityToStringTest.java @@ -0,0 +1,7 @@ +package com.sequenceiq.datalake; + +import com.sequenceiq.cloudbreak.AbstractEntityToStringTest; + +class DatalakeEntityToStringTest extends AbstractEntityToStringTest { + +} diff --git a/environment/src/main/java/com/sequenceiq/environment/environment/domain/EnvironmentAuthentication.java b/environment/src/main/java/com/sequenceiq/environment/environment/domain/EnvironmentAuthentication.java index 79bf00c0bbe4..2f4b764ae4c0 100644 --- a/environment/src/main/java/com/sequenceiq/environment/environment/domain/EnvironmentAuthentication.java +++ b/environment/src/main/java/com/sequenceiq/environment/environment/domain/EnvironmentAuthentication.java @@ -67,4 +67,11 @@ public boolean isManagedKey() { public void setManagedKey(boolean managedKey) { this.managedKey = managedKey; } + + @Override + public String toString() { + return "EnvironmentAuthentication{" + + "id=" + id + + '}'; + } } diff --git a/environment/src/main/java/com/sequenceiq/environment/environment/domain/ParentEnvironmentView.java b/environment/src/main/java/com/sequenceiq/environment/environment/domain/ParentEnvironmentView.java index 82b02dce8cdc..dce18b260654 100644 --- a/environment/src/main/java/com/sequenceiq/environment/environment/domain/ParentEnvironmentView.java +++ b/environment/src/main/java/com/sequenceiq/environment/environment/domain/ParentEnvironmentView.java @@ -54,4 +54,14 @@ public String getResourceCrn() { public void setResourceCrn(String resourceCrn) { this.resourceCrn = resourceCrn; } + + @Override + public String toString() { + return "ParentEnvironmentView{" + + "id=" + id + + ", cloudPlatform='" + cloudPlatform + '\'' + + ", name='" + name + '\'' + + ", resourceCrn='" + resourceCrn + '\'' + + '}'; + } } diff --git a/environment/src/main/java/com/sequenceiq/environment/network/dao/domain/BaseNetwork.java b/environment/src/main/java/com/sequenceiq/environment/network/dao/domain/BaseNetwork.java index a98f93a8813c..c7f7f38bcce0 100644 --- a/environment/src/main/java/com/sequenceiq/environment/network/dao/domain/BaseNetwork.java +++ b/environment/src/main/java/com/sequenceiq/environment/network/dao/domain/BaseNetwork.java @@ -1,5 +1,7 @@ package com.sequenceiq.environment.network.dao.domain; +import static com.sequenceiq.cloudbreak.util.NullUtil.getIfNotNull; + import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -265,7 +267,7 @@ public String toString() { return "BaseNetwork{" + "id=" + id + ", name='" + name + '\'' + - ", environment=" + environment.getName() + + ", environment=" + getIfNotNull(environment, EnvironmentView::getName) + ", archived=" + archived + ", deletionTimestamp=" + deletionTimestamp + ", networkCidr='" + networkCidr + '\'' + diff --git a/environment/src/main/java/com/sequenceiq/environment/parameters/dao/domain/BaseParameters.java b/environment/src/main/java/com/sequenceiq/environment/parameters/dao/domain/BaseParameters.java index 633492bcd67a..b4c101443651 100644 --- a/environment/src/main/java/com/sequenceiq/environment/parameters/dao/domain/BaseParameters.java +++ b/environment/src/main/java/com/sequenceiq/environment/parameters/dao/domain/BaseParameters.java @@ -1,5 +1,7 @@ package com.sequenceiq.environment.parameters.dao.domain; +import static com.sequenceiq.cloudbreak.util.NullUtil.getIfNotNull; + import javax.persistence.Column; import javax.persistence.DiscriminatorColumn; import javax.persistence.Entity; @@ -68,4 +70,14 @@ public String getAccountId() { public void setAccountId(String accountId) { this.accountId = accountId; } + + @Override + public String toString() { + return getClass().getSimpleName() + "{" + + "id=" + id + + ", name='" + name + '\'' + + ", environment=" + getIfNotNull(environment, EnvironmentView::getResourceCrn) + + ", accountId='" + accountId + '\'' + + '}'; + } } diff --git a/environment/src/main/java/com/sequenceiq/environment/resourcepersister/Resource.java b/environment/src/main/java/com/sequenceiq/environment/resourcepersister/Resource.java index c27cacdc9ca3..35931496e51c 100644 --- a/environment/src/main/java/com/sequenceiq/environment/resourcepersister/Resource.java +++ b/environment/src/main/java/com/sequenceiq/environment/resourcepersister/Resource.java @@ -11,6 +11,7 @@ import javax.persistence.SequenceGenerator; import com.sequenceiq.cloudbreak.converter.CommonStatusConverter; +import com.sequenceiq.cloudbreak.util.DatabaseUtil; import com.sequenceiq.common.api.type.CommonStatus; import com.sequenceiq.common.api.type.ResourceType; import com.sequenceiq.environment.environment.domain.Environment; @@ -110,4 +111,15 @@ public void setResourceReference(String resourceReference) { this.resourceReference = resourceReference; } + @Override + public String toString() { + return "Resource{" + + "id=" + id + + ", environment=" + DatabaseUtil.lazyLoadSafeToString(environment, Environment::getResourceCrn) + + ", resourceType=" + resourceType + + ", resourceStatus=" + resourceStatus + + ", resourceName='" + resourceName + '\'' + + ", resourceReference='" + resourceReference + '\'' + + '}'; + } } diff --git a/environment/src/main/java/com/sequenceiq/environment/user/UserPreferences.java b/environment/src/main/java/com/sequenceiq/environment/user/UserPreferences.java index 705a42fb61e3..c0e2cb67ff3b 100644 --- a/environment/src/main/java/com/sequenceiq/environment/user/UserPreferences.java +++ b/environment/src/main/java/com/sequenceiq/environment/user/UserPreferences.java @@ -68,4 +68,14 @@ public String getAuditExternalId() { public void setAuditExternalId(String auditExternalId) { this.auditExternalId = auditExternalId; } + + @Override + public String toString() { + return "UserPreferences{" + + "id=" + id + + ", externalId='" + externalId + '\'' + + ", auditExternalId='" + auditExternalId + '\'' + + ", userCrn='" + userCrn + '\'' + + '}'; + } } diff --git a/environment/src/test/java/com/sequenceiq/environment/EnvironmentEntityToStringTest.java b/environment/src/test/java/com/sequenceiq/environment/EnvironmentEntityToStringTest.java new file mode 100644 index 000000000000..d9b83cf95359 --- /dev/null +++ b/environment/src/test/java/com/sequenceiq/environment/EnvironmentEntityToStringTest.java @@ -0,0 +1,7 @@ +package com.sequenceiq.environment; + +import com.sequenceiq.cloudbreak.AbstractEntityToStringTest; + +public class EnvironmentEntityToStringTest extends AbstractEntityToStringTest { + +} diff --git a/flow/src/main/java/com/sequenceiq/flow/domain/FlowChainLog.java b/flow/src/main/java/com/sequenceiq/flow/domain/FlowChainLog.java index 77191d12f3ae..2d7296bb0f2a 100644 --- a/flow/src/main/java/com/sequenceiq/flow/domain/FlowChainLog.java +++ b/flow/src/main/java/com/sequenceiq/flow/domain/FlowChainLog.java @@ -109,4 +109,18 @@ public String getTriggerEvent() { public void setTriggerEvent(String triggerEvent) { this.triggerEvent = triggerEvent; } + + @Override + public String toString() { + return "FlowChainLog{" + + "id=" + id + + ", created=" + created + + ", flowChainType='" + flowChainType + '\'' + + ", flowChainId='" + flowChainId + '\'' + + ", parentFlowChainId='" + parentFlowChainId + '\'' + + ", chain='" + chain + '\'' + + ", flowTriggerUserCrn='" + flowTriggerUserCrn + '\'' + + ", triggerEvent='" + triggerEvent + '\'' + + '}'; + } } diff --git a/flow/src/main/java/com/sequenceiq/flow/domain/FlowOperationStats.java b/flow/src/main/java/com/sequenceiq/flow/domain/FlowOperationStats.java index 23ef827a86ee..a2527136e5ef 100644 --- a/flow/src/main/java/com/sequenceiq/flow/domain/FlowOperationStats.java +++ b/flow/src/main/java/com/sequenceiq/flow/domain/FlowOperationStats.java @@ -64,4 +64,14 @@ public String getDurationHistory() { public void setDurationHistory(String durationHistory) { this.durationHistory = durationHistory; } + + @Override + public String toString() { + return "FlowOperationStats{" + + "id=" + id + + ", operationType=" + operationType + + ", cloudPlatform='" + cloudPlatform + '\'' + + ", durationHistory='" + durationHistory + '\'' + + '}'; + } } diff --git a/freeipa/src/main/java/com/sequenceiq/freeipa/entity/InstanceGroup.java b/freeipa/src/main/java/com/sequenceiq/freeipa/entity/InstanceGroup.java index 9a435fca0343..99739bc28ecb 100644 --- a/freeipa/src/main/java/com/sequenceiq/freeipa/entity/InstanceGroup.java +++ b/freeipa/src/main/java/com/sequenceiq/freeipa/entity/InstanceGroup.java @@ -23,6 +23,7 @@ import com.sequenceiq.cloudbreak.common.json.Json; import com.sequenceiq.cloudbreak.common.json.JsonToString; +import com.sequenceiq.cloudbreak.util.DatabaseUtil; import com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.InstanceGroupType; import com.sequenceiq.freeipa.entity.util.InstanceGroupTypeConverter; @@ -204,4 +205,15 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hash(id, template, instanceGroupNetwork, groupName, instanceGroupType, attributes, nodeCount); } + + @Override + public String toString() { + return "InstanceGroup{" + + "id=" + id + + ", groupName='" + groupName + '\'' + + ", instanceGroupType=" + instanceGroupType + + ", stack=" + DatabaseUtil.lazyLoadSafeToString(stack, Stack::getResourceCrn) + + ", nodeCount=" + nodeCount + + '}'; + } } diff --git a/freeipa/src/main/java/com/sequenceiq/freeipa/entity/Resource.java b/freeipa/src/main/java/com/sequenceiq/freeipa/entity/Resource.java index df45d3e232de..3c4e1044a3d3 100644 --- a/freeipa/src/main/java/com/sequenceiq/freeipa/entity/Resource.java +++ b/freeipa/src/main/java/com/sequenceiq/freeipa/entity/Resource.java @@ -12,6 +12,7 @@ import com.sequenceiq.cloudbreak.converter.CommonStatusConverter; import com.sequenceiq.cloudbreak.converter.ResourceTypeConverter; +import com.sequenceiq.cloudbreak.util.DatabaseUtil; import com.sequenceiq.common.api.type.CommonStatus; import com.sequenceiq.common.api.type.ResourceType; import com.sequenceiq.cloudbreak.common.json.Json; @@ -161,4 +162,19 @@ public String getAvailabilityZone() { public void setAvailabilityZone(String availabilityZone) { this.availabilityZone = availabilityZone; } + + @Override + public String toString() { + return "Resource{" + + "id=" + id + + ", instanceGroup='" + instanceGroup + '\'' + + ", resourceType=" + resourceType + + ", resourceStatus=" + resourceStatus + + ", resourceName='" + resourceName + '\'' + + ", resourceReference='" + resourceReference + '\'' + + ", stack=" + DatabaseUtil.lazyLoadSafeToString(stack, Stack::getResourceCrn) + + ", instanceId='" + instanceId + '\'' + + ", availabilityZone='" + availabilityZone + '\'' + + '}'; + } } diff --git a/freeipa/src/main/java/com/sequenceiq/freeipa/entity/RootCert.java b/freeipa/src/main/java/com/sequenceiq/freeipa/entity/RootCert.java index d3fa279fb441..a98ffecfc38f 100644 --- a/freeipa/src/main/java/com/sequenceiq/freeipa/entity/RootCert.java +++ b/freeipa/src/main/java/com/sequenceiq/freeipa/entity/RootCert.java @@ -8,6 +8,8 @@ import javax.persistence.OneToOne; import javax.persistence.SequenceGenerator; +import com.sequenceiq.cloudbreak.util.DatabaseUtil; + @Entity public class RootCert { @@ -54,4 +56,13 @@ public String getCert() { public void setCert(String cert) { this.cert = cert; } + + @Override + public String toString() { + return "RootCert{" + + "id=" + id + + ", stack=" + DatabaseUtil.lazyLoadSafeToString(stack, Stack::getResourceCrn) + + ", environmentCrn='" + environmentCrn + '\'' + + '}'; + } } diff --git a/freeipa/src/main/java/com/sequenceiq/freeipa/entity/SaltSecurityConfig.java b/freeipa/src/main/java/com/sequenceiq/freeipa/entity/SaltSecurityConfig.java index 10d737b9cd06..f5e3f88f3826 100644 --- a/freeipa/src/main/java/com/sequenceiq/freeipa/entity/SaltSecurityConfig.java +++ b/freeipa/src/main/java/com/sequenceiq/freeipa/entity/SaltSecurityConfig.java @@ -195,4 +195,12 @@ public String getAccountId() { public void setAccountId(String accountId) { this.accountId = accountId; } + + @Override + public String toString() { + return "SaltSecurityConfig{" + + "id=" + id + + ", accountId='" + accountId + '\'' + + '}'; + } } diff --git a/freeipa/src/main/java/com/sequenceiq/freeipa/entity/UserSyncStatus.java b/freeipa/src/main/java/com/sequenceiq/freeipa/entity/UserSyncStatus.java index ab06db877898..ed37a7967857 100644 --- a/freeipa/src/main/java/com/sequenceiq/freeipa/entity/UserSyncStatus.java +++ b/freeipa/src/main/java/com/sequenceiq/freeipa/entity/UserSyncStatus.java @@ -12,6 +12,7 @@ import com.sequenceiq.cloudbreak.common.json.Json; import com.sequenceiq.cloudbreak.common.json.JsonToString; import com.sequenceiq.cloudbreak.common.dal.model.AccountIdAwareResource; +import com.sequenceiq.cloudbreak.util.DatabaseUtil; @Entity public class UserSyncStatus implements AccountIdAwareResource { @@ -85,4 +86,14 @@ public void setLastSuccessfulFullSync(Operation lastSuccessfulFullSync) { public String getAccountId() { return stack.getAccountId(); } + + @Override + public String toString() { + return "UserSyncStatus{" + + "id=" + id + + ", stack=" + DatabaseUtil.lazyLoadSafeToString(stack, Stack::getResourceCrn) + + ", lastStartedFullSync=" + lastStartedFullSync + + ", lastSuccessfulFullSync=" + lastSuccessfulFullSync + + '}'; + } } diff --git a/freeipa/src/test/java/com/sequenceiq/freeipa/FreeipaEntityToStringTest.java b/freeipa/src/test/java/com/sequenceiq/freeipa/FreeipaEntityToStringTest.java new file mode 100644 index 000000000000..57a987850fe3 --- /dev/null +++ b/freeipa/src/test/java/com/sequenceiq/freeipa/FreeipaEntityToStringTest.java @@ -0,0 +1,7 @@ +package com.sequenceiq.freeipa; + +import com.sequenceiq.cloudbreak.AbstractEntityToStringTest; + +public class FreeipaEntityToStringTest extends AbstractEntityToStringTest { + +} diff --git a/gradle.properties b/gradle.properties index 1804828c2850..53b30c7385cf 100644 --- a/gradle.properties +++ b/gradle.properties @@ -73,6 +73,7 @@ accessorSmartVersion=2.4.7 oauth2OidcSdkVersion=6.5 protobufVersion=3.19.1 grpcVersion=1.42.1 +reflectionsVersion=0.9.11 # Repo Urls repoUrl=https://repo.hortonworks.com/content/repositories/releases/ diff --git a/redbeams/src/main/java/com/sequenceiq/redbeams/domain/DatabaseConfig.java b/redbeams/src/main/java/com/sequenceiq/redbeams/domain/DatabaseConfig.java index c0db7bc79031..56d989f06ade 100644 --- a/redbeams/src/main/java/com/sequenceiq/redbeams/domain/DatabaseConfig.java +++ b/redbeams/src/main/java/com/sequenceiq/redbeams/domain/DatabaseConfig.java @@ -12,19 +12,19 @@ import javax.persistence.Table; import javax.persistence.UniqueConstraint; -import com.sequenceiq.cloudbreak.api.endpoint.v4.util.DatabaseVendorConverter; -import com.sequenceiq.redbeams.repository.converter.ResourceStatusConverter; import org.hibernate.annotations.Where; import com.sequenceiq.cloudbreak.api.endpoint.v4.common.DatabaseVendor; +import com.sequenceiq.cloudbreak.api.endpoint.v4.util.DatabaseVendorConverter; import com.sequenceiq.cloudbreak.auth.crn.Crn; import com.sequenceiq.cloudbreak.common.archive.ArchivableResource; -import com.sequenceiq.cloudbreak.service.secret.SecretValue; import com.sequenceiq.cloudbreak.common.dal.model.AccountIdAwareResource; +import com.sequenceiq.cloudbreak.service.secret.SecretValue; import com.sequenceiq.cloudbreak.service.secret.domain.Secret; import com.sequenceiq.cloudbreak.service.secret.domain.SecretToString; import com.sequenceiq.redbeams.api.endpoint.v4.ResourceStatus; import com.sequenceiq.redbeams.converter.CrnConverter; +import com.sequenceiq.redbeams.repository.converter.ResourceStatusConverter; @Entity @Where(clause = "archived = false") @@ -230,4 +230,17 @@ public void setEnvironmentId(String environment) { public void setServer(DatabaseServerConfig server) { this.server = server; } + + @Override + public String toString() { + return "DatabaseConfig{" + + "id=" + id + + ", accountId='" + accountId + '\'' + + ", resourceCrn=" + resourceCrn + + ", name='" + name + '\'' + + ", description='" + description + '\'' + + ", status=" + status + + ", environmentId='" + environmentId + '\'' + + '}'; + } } diff --git a/redbeams/src/main/java/com/sequenceiq/redbeams/domain/DatabaseServerConfig.java b/redbeams/src/main/java/com/sequenceiq/redbeams/domain/DatabaseServerConfig.java index 10043a24abdd..87ec5a5843c9 100644 --- a/redbeams/src/main/java/com/sequenceiq/redbeams/domain/DatabaseServerConfig.java +++ b/redbeams/src/main/java/com/sequenceiq/redbeams/domain/DatabaseServerConfig.java @@ -324,4 +324,16 @@ public DatabaseConfig createDatabaseConfig(String databaseName, String type, Opt return databaseConfig; } + + @Override + public String toString() { + return "DatabaseServerConfig{" + + "id=" + id + + ", accountId='" + accountId + '\'' + + ", resourceCrn=" + resourceCrn + + ", workspaceId=" + workspaceId + + ", name='" + name + '\'' + + ", description='" + description + '\'' + + '}'; + } } diff --git a/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/DBResource.java b/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/DBResource.java index ccadf1ea1497..d14a7addaf2e 100644 --- a/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/DBResource.java +++ b/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/DBResource.java @@ -1,5 +1,7 @@ package com.sequenceiq.redbeams.domain.stack; +import static com.sequenceiq.cloudbreak.util.NullUtil.getIfNotNull; + import javax.persistence.Column; import javax.persistence.Convert; import javax.persistence.Entity; @@ -91,6 +93,18 @@ public void setResourceReference(String resourceReference) { this.resourceReference = resourceReference; } + @Override + public String toString() { + return "DBResource{" + + "id=" + id + + ", dbStack=" + getIfNotNull(dbStack, DBStack::getResourceCrn) + + ", resourceName='" + resourceName + '\'' + + ", resourceReference='" + resourceReference + '\'' + + ", resourceType=" + resourceType + + ", resourceStatus=" + resourceStatus + + '}'; + } + public static class Builder { private final DBResource dbResource = new DBResource(); diff --git a/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/DBStackStatus.java b/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/DBStackStatus.java index 91e599ae729f..de3fa61c12d0 100644 --- a/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/DBStackStatus.java +++ b/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/DBStackStatus.java @@ -1,5 +1,7 @@ package com.sequenceiq.redbeams.domain.stack; +import static com.sequenceiq.cloudbreak.util.NullUtil.getIfNotNull; + import javax.persistence.Column; import javax.persistence.Convert; import javax.persistence.Entity; @@ -100,4 +102,15 @@ public void setCreated(Long created) { public Long getCreated() { return created; } + + @Override + public String toString() { + return "DBStackStatus{" + + "id=" + id + + ", dbStack=" + getIfNotNull(dbStack, DBStack::getResourceCrn) + + ", status=" + status + + ", statusReason='" + statusReason + '\'' + + ", detailedDBStackStatus=" + detailedDBStackStatus + + '}'; + } } diff --git a/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/DatabaseServer.java b/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/DatabaseServer.java index 2f2cd51111df..ed7350cac0d2 100644 --- a/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/DatabaseServer.java +++ b/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/DatabaseServer.java @@ -181,4 +181,16 @@ public Json getAttributes() { public void setAttributes(Json attributes) { this.attributes = attributes; } + + @Override + public String toString() { + return "DatabaseServer{" + + "id=" + id + + ", accountId='" + accountId + '\'' + + ", name='" + name + '\'' + + ", description='" + description + '\'' + + ", instanceType='" + instanceType + '\'' + + ", databaseVendor=" + databaseVendor + + '}'; + } } diff --git a/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/Network.java b/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/Network.java index c574580bc319..6e480ed981ff 100644 --- a/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/Network.java +++ b/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/Network.java @@ -62,4 +62,12 @@ public void setAttributes(Json attributes) { this.attributes = attributes; } + @Override + public String toString() { + return "Network{" + + "id=" + id + + ", name='" + name + '\'' + + ", description='" + description + '\'' + + '}'; + } } diff --git a/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/SecurityGroup.java b/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/SecurityGroup.java index 7ae5df1e6c44..62c019a8954e 100644 --- a/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/SecurityGroup.java +++ b/redbeams/src/main/java/com/sequenceiq/redbeams/domain/stack/SecurityGroup.java @@ -103,4 +103,14 @@ public void setSecurityGroupIds(Set securityGroupIds) { // public void setCloudPlatform(String cloudPlatform) { // this.cloudPlatform = cloudPlatform; // } + + @Override + public String toString() { + return "SecurityGroup{" + + "id=" + id + + ", name='" + name + '\'' + + ", description='" + description + '\'' + + ", securityGroupIds=" + securityGroupIds + + '}'; + } } diff --git a/redbeams/src/test/java/com/sequenceiq/redbeams/RedbeamsEntityToStringTest.java b/redbeams/src/test/java/com/sequenceiq/redbeams/RedbeamsEntityToStringTest.java new file mode 100644 index 000000000000..8c65462fb07c --- /dev/null +++ b/redbeams/src/test/java/com/sequenceiq/redbeams/RedbeamsEntityToStringTest.java @@ -0,0 +1,7 @@ +package com.sequenceiq.redbeams; + +import com.sequenceiq.cloudbreak.AbstractEntityToStringTest; + +public class RedbeamsEntityToStringTest extends AbstractEntityToStringTest { + +} diff --git a/workspace/src/main/java/com/sequenceiq/cloudbreak/workspace/model/Tenant.java b/workspace/src/main/java/com/sequenceiq/cloudbreak/workspace/model/Tenant.java index 48846d2b4dad..4841325df60b 100644 --- a/workspace/src/main/java/com/sequenceiq/cloudbreak/workspace/model/Tenant.java +++ b/workspace/src/main/java/com/sequenceiq/cloudbreak/workspace/model/Tenant.java @@ -4,6 +4,7 @@ import java.util.HashSet; import java.util.Objects; import java.util.Set; +import java.util.stream.Collectors; import javax.persistence.CascadeType; import javax.persistence.Column; @@ -15,6 +16,8 @@ import javax.persistence.OneToMany; import javax.persistence.SequenceGenerator; +import com.sequenceiq.cloudbreak.util.DatabaseUtil; + @Entity public class Tenant implements Serializable { @@ -93,4 +96,23 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hash(id); } + + @Override + public String toString() { + return "Tenant{" + + "id=" + id + + ", name='" + name + '\'' + + ", description='" + description + '\'' + + ", users=" + DatabaseUtil.lazyLoadSafeToString(users, this::usersToString) + + ", workspaces=" + DatabaseUtil.lazyLoadSafeToString(workspaces, this::workspacesToString) + + '}'; + } + + private String usersToString() { + return users.stream().map(User::getUserCrn).collect(Collectors.toSet()).toString(); + } + + private String workspacesToString() { + return workspaces.stream().map(Workspace::getResourceCrn).collect(Collectors.toSet()).toString(); + } } diff --git a/workspace/src/main/java/com/sequenceiq/cloudbreak/workspace/model/User.java b/workspace/src/main/java/com/sequenceiq/cloudbreak/workspace/model/User.java index 27fd398d38a5..5ba4cd8644dc 100644 --- a/workspace/src/main/java/com/sequenceiq/cloudbreak/workspace/model/User.java +++ b/workspace/src/main/java/com/sequenceiq/cloudbreak/workspace/model/User.java @@ -91,4 +91,15 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hashCode(userId); } + + @Override + public String toString() { + return "User{" + + "id=" + id + + ", userName='" + userName + '\'' + + ", userId='" + userId + '\'' + + ", userCrn='" + userCrn + '\'' + + ", tenant=" + tenant + + '}'; + } } diff --git a/workspace/src/main/java/com/sequenceiq/cloudbreak/workspace/model/UserPreferences.java b/workspace/src/main/java/com/sequenceiq/cloudbreak/workspace/model/UserPreferences.java index 6d72ed2f0012..bce57fd49a2b 100644 --- a/workspace/src/main/java/com/sequenceiq/cloudbreak/workspace/model/UserPreferences.java +++ b/workspace/src/main/java/com/sequenceiq/cloudbreak/workspace/model/UserPreferences.java @@ -57,4 +57,13 @@ public User getUser() { public void setUser(User user) { this.user = user; } + + @Override + public String toString() { + return "UserPreferences{" + + "id=" + id + + ", externalId='" + externalId + '\'' + + ", user=" + user + + '}'; + } }