Skip to content

Commit

Permalink
Merge pull request finos#410 in WALTZ/waltz-gh-staging from WALTZ/wal…
Browse files Browse the repository at this point in the history
…tz-jws:CTCTOWALTZ-1598-multiple-relationship-types-between-entities-4852 to waltz-4852-multiple-relationships-rel-viewpoints

* commit '0e0b260d506465b1207390702f0aca370e73d7d3':
  Multiple relationship types between entities
  Multiple relationship types between entities
  Multiple relationship types between entities
  Multiple relationship types between entities
  Multiple relationship types between entities
  Multiple relationship types between entities
  Multiple relationship types between entities
  Multiple relationship types between entities
  Multiple relationship types between entities
  Multiple relationship types between entities
  Multiple relationship types between entities
  Multiple relationship types between entities
  Multiple relationship types between entities
  • Loading branch information
MarkGuerriero committed May 20, 2020
2 parents 5929e12 + 0e0b260 commit bea7e74
Show file tree
Hide file tree
Showing 31 changed files with 880 additions and 177 deletions.
295 changes: 295 additions & 0 deletions waltz-data/src/main/ddl/liquibase/db.changelog-1.25.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,295 @@
<!--
~ Waltz - Enterprise Architecture
~ Copyright (C) 2016, 2017, 2018, 2019 Waltz open source project
~ See README.md for more information
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific
~
-->

<databaseChangeLog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd"
logicalFilePath="db.changelog-1.25.xml">


<changeSet id="20200507-4852-1"
author="woodjes">
<comment>4852: Adding code and position to relationship_kind table</comment>
<addColumn tableName="relationship_kind">
<column name="code"
type="${external-id.type}">
<constraints nullable="false"/>
</column>
<column name="position"
type="${int.type}"
defaultValueNumeric="0">
<constraints nullable="false"/>
</column>
</addColumn>
</changeSet>

<changeSet id="20200507-4852-2"
author="woodjes">
<comment>4852: Update column types to allow foreign key</comment>
<modifyDataType tableName="relationship_kind"
columnName="kind_a"
newDataType="varchar(128)" />
<modifyDataType tableName="relationship_kind"
columnName="kind_b"
newDataType="varchar(128)" />
<modifyDataType tableName="relationship_kind"
columnName="code"
newDataType="${code.type}"/>
</changeSet>

<changeSet id="20200507-4852-3"
author="woodjes">
<comment>4852: Insert enum values into table</comment>
<insert tableName="relationship_kind">
<column name="name" value="Deprecates"/>
<column name="code" value="DEPRECATES"/>
<column name="kind_a" value="CHANGE_INITIATIVE"/>
<column name="kind_b" value="APPLICATION"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="20"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Deprecates"/>
<column name="code" value="DEPRECATES"/>
<column name="kind_a" value="CHANGE_INITIATIVE"/>
<column name="kind_b" value="MEASURABLE"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="20"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Participates in"/>
<column name="code" value="PARTICIPATES_IN"/>
<column name="kind_a" value="APPLICATION"/>
<column name="kind_b" value="CHANGE_INITIATIVE"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="20"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Relates to"/>
<column name="code" value="RELATES_TO"/>
<column name="kind_a" value="APP_GROUP"/>
<column name="kind_b" value="APP_GROUP"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="10"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Relates to"/>
<column name="code" value="RELATES_TO"/>
<column name="kind_a" value="APP_GROUP"/>
<column name="kind_b" value="CHANGE_INITIATIVE"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="10"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Relates to"/>
<column name="code" value="RELATES_TO"/>
<column name="kind_a" value="APP_GROUP"/>
<column name="kind_b" value="MEASURABLE"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="10"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Relates to"/>
<column name="code" value="RELATES_TO"/>
<column name="kind_a" value="APP_GROUP"/>
<column name="kind_b" value="ROADMAP"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="10"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Relates to"/>
<column name="code" value="RELATES_TO"/>
<column name="kind_a" value="APP_GROUP"/>
<column name="kind_b" value="DATA_TYPE"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="10"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Relates to"/>
<column name="code" value="RELATES_TO"/>
<column name="kind_a" value="CHANGE_INITIATIVE"/>
<column name="kind_b" value="MEASURABLE"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="10"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Relates to"/>
<column name="code" value="RELATES_TO"/>
<column name="kind_a" value="CHANGE_INITIATIVE"/>
<column name="kind_b" value="CHANGE_INITIATIVE"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="10"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Relates to"/>
<column name="code" value="RELATES_TO"/>
<column name="kind_a" value="CHANGE_INITIATIVE"/>
<column name="kind_b" value="DATA_TYPE"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="10"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Relates to"/>
<column name="code" value="RELATES_TO"/>
<column name="kind_a" value="CHANGE_INITIATIVE"/>
<column name="kind_b" value="APP_GROUP"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="10"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Relates to"/>
<column name="code" value="RELATES_TO"/>
<column name="kind_a" value="CHANGE_INITIATIVE"/>
<column name="kind_b" value="APPLICATION"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="10"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Relates to"/>
<column name="code" value="RELATES_TO"/>
<column name="kind_a" value="MEASURABLE"/>
<column name="kind_b" value="APP_GROUP"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="10"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Relates to"/>
<column name="code" value="RELATES_TO"/>
<column name="kind_a" value="MEASURABLE"/>
<column name="kind_b" value="MEASURABLE"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="10"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Relates to"/>
<column name="code" value="RELATES_TO"/>
<column name="kind_a" value="MEASURABLE"/>
<column name="kind_b" value="CHANGE_INITIATIVE"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="10"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Relates to"/>
<column name="code" value="RELATES_TO"/>
<column name="kind_a" value="ORG_UNIT"/>
<column name="kind_b" value="ROADMAP"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="10"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Relates to"/>
<column name="code" value="RELATES_TO"/>
<column name="kind_a" value="ROADMAP"/>
<column name="kind_b" value="ORG_UNIT"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="10"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Relates to"/>
<column name="code" value="RELATES_TO"/>
<column name="kind_a" value="LICENCE"/>
<column name="kind_b" value="APPLICATION"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="10"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Supports"/>
<column name="code" value="SUPPORTS"/>
<column name="kind_a" value="APPLICATION"/>
<column name="kind_b" value="CHANGE_INITIATIVE"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="20"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Supports"/>
<column name="code" value="SUPPORTS"/>
<column name="kind_a" value="ACTOR"/>
<column name="kind_b" value="CHANGE_INITIATIVE"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="20"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="New Application"/>
<column name="code" value="APPLICATION_NEW"/>
<column name="kind_a" value="CHANGE_INITIATIVE"/>
<column name="kind_b" value="APPLICATION"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="20"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Application Functional Change"/>
<column name="code" value="APPLICATION_FUNCTIONAL_CHANGE"/>
<column name="kind_a" value="CHANGE_INITIATIVE"/>
<column name="kind_b" value="APPLICATION"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="20"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Application Decommissioned"/>
<column name="code" value="APPLICATION_DECOMMISSIONED"/>
<column name="kind_a" value="CHANGE_INITIATIVE"/>
<column name="kind_b" value="APPLICATION"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="20"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Application NFR Change"/>
<column name="code" value="APPLICATION_NFR_CHANGE"/>
<column name="kind_a" value="CHANGE_INITIATIVE"/>
<column name="kind_b" value="APPLICATION"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="20"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Data Publisher"/>
<column name="code" value="DATA_PUBLISHER"/>
<column name="kind_a" value="CHANGE_INITIATIVE"/>
<column name="kind_b" value="APPLICATION"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="20"/>
</insert>
<insert tableName="relationship_kind">
<column name="name" value="Data Consumer"/>
<column name="code" value="DATA_CONSUMER"/>
<column name="kind_a" value="CHANGE_INITIATIVE"/>
<column name="kind_b" value="APPLICATION"/>
<column name="is_readonly" valueBoolean="false"/>
<column name="position" value="20"/>
</insert>
</changeSet>

<changeSet id="20200507-4852-4"
author="woodjes">
<comment>4852: Make unique relationship and entity kind pair</comment>
<addUniqueConstraint tableName="relationship_kind"
constraintName="unique_rel_kind"
columnNames="kind_a, kind_b, code"/>
</changeSet>

<changeSet id="202020507-4852-5"
author="woodjes">
<comment>4852: Add fk to relationship_kind</comment>
<addForeignKeyConstraint baseTableName="entity_relationship"
baseColumnNames="kind_a, kind_b, relationship"
constraintName="entity_rel_to_rel_kind_fkey"
referencedTableName="relationship_kind"
referencedColumnNames="kind_a, kind_b, code"
onDelete="CASCADE"/>
</changeSet>

</databaseChangeLog>
3 changes: 3 additions & 0 deletions waltz-data/src/main/ddl/liquibase/db.changelog-master.xml
Original file line number Diff line number Diff line change
Expand Up @@ -102,4 +102,7 @@
<include file="db.changelog-1.24.xml"
relativeToChangelogFile="true"/>

<include file="db.changelog-1.25.xml"
relativeToChangelogFile="true"/>

</databaseChangeLog>
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@
import com.khartec.waltz.data.InlineSelectFieldFactory;
import com.khartec.waltz.model.EntityKind;
import com.khartec.waltz.model.EntityReference;
import com.khartec.waltz.model.entity_relationship.*;
import com.khartec.waltz.model.entity_relationship.EntityRelationship;
import com.khartec.waltz.model.entity_relationship.EntityRelationshipKey;
import com.khartec.waltz.model.entity_relationship.ImmutableEntityRelationship;
import com.khartec.waltz.model.entity_relationship.UpdateEntityRelationshipParams;
import com.khartec.waltz.schema.tables.records.EntityRelationshipRecord;
import org.jooq.*;
import org.jooq.impl.DSL;
Expand Down Expand Up @@ -80,7 +83,7 @@ public class EntityRelationshipDao {
record.getIdB(),
r.get(NAME_B)))
.provenance(record.getProvenance())
.relationship(RelationshipKind.valueOf(record.getRelationship()))
.relationship(record.getRelationship())
.description(record.getDescription())
.lastUpdatedBy(record.getLastUpdatedBy())
.lastUpdatedAt(toLocalDateTime(record.getLastUpdatedAt()))
Expand All @@ -90,7 +93,7 @@ public class EntityRelationshipDao {

private static final Function<EntityRelationship, EntityRelationshipRecord> TO_RECORD_MAPPER = rel -> {
EntityRelationshipRecord record = new EntityRelationshipRecord();
record.setRelationship(rel.relationship().name());
record.setRelationship(rel.relationship());
record.setIdA(rel.a().id());
record.setKindA(rel.a().kind().name());
record.setIdB(rel.b().id());
Expand Down Expand Up @@ -186,7 +189,7 @@ public boolean update(EntityRelationshipKey key,
UpdateEntityRelationshipParams params,
String username) {
return dsl.update(ENTITY_RELATIONSHIP)
.set(ENTITY_RELATIONSHIP.RELATIONSHIP, params.relationshipKind().name())
.set(ENTITY_RELATIONSHIP.RELATIONSHIP, params.relationshipKind())
.set(ENTITY_RELATIONSHIP.DESCRIPTION, params.description())
.set(ENTITY_RELATIONSHIP.LAST_UPDATED_BY, username)
.set(ENTITY_RELATIONSHIP.LAST_UPDATED_AT, DateTimeUtilities.nowUtcTimestamp())
Expand Down Expand Up @@ -250,7 +253,7 @@ private Condition mkExactKeyMatchCondition(EntityRelationshipKey key) {
.and(ENTITY_RELATIONSHIP.KIND_A.eq(key.a().kind().name()))
.and(ENTITY_RELATIONSHIP.ID_B.eq(key.b().id())
.and(ENTITY_RELATIONSHIP.KIND_B.eq(key.b().kind().name())))
.and(ENTITY_RELATIONSHIP.RELATIONSHIP.eq(key.relationshipKind().name()));
.and(ENTITY_RELATIONSHIP.RELATIONSHIP.eq(key.relationshipKind()));
}


Expand Down
Loading

0 comments on commit bea7e74

Please sign in to comment.