Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Database normalization features #616

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions dbptk-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,11 @@
<artifactId>dbptk-module-postgresql</artifactId>
</dependency>

<dependency>
<groupId>com.databasepreservation</groupId>
<artifactId>dbptk-module-normalize-1nf-config</artifactId>
</dependency>

<dependency>
<groupId>com.databasepreservation</groupId>
<artifactId>dbptk-module-siard</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.databasepreservation.model.modules.configuration;

import java.util.Objects;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"name", "description", "nillable", "merkle", "inventory", "externalLOB"})
public class CustomColumnConfiguration extends ColumnConfiguration {
private Boolean nillable;
private String description;

public Boolean getNillable() {
return nillable;
}

public void setNillable(Boolean nillable) {
this.nillable = nillable;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
if (!super.equals(o))
return false;
CustomColumnConfiguration that = (CustomColumnConfiguration) o;
return Objects.equals(getNillable(), that.getNillable()) && Objects.equals(getDescription(), that.getDescription());
}

@Override
public int hashCode() {
return Objects.hash(super.hashCode(), getNillable(), getDescription());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,29 +7,35 @@
*/
package com.databasepreservation.model.modules.configuration;

import com.databasepreservation.Constants;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import com.databasepreservation.Constants;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

/**
* @author Miguel Guimarães <[email protected]>
*/
@JsonPropertyOrder({"name", "description", "query"})
@JsonPropertyOrder({"name", "simulateTable", "description", "query", "columns", "primaryKey", "foreignKeys"})
@JsonInclude(JsonInclude.Include.NON_NULL)
public class CustomViewConfiguration {

private String name;
private boolean simulateTable = false;
private String description;
private String query;
private List<ColumnConfiguration> columns;
private List<CustomColumnConfiguration> columns;
private PrimaryKeyConfiguration primaryKey;
private List<ForeignKeyConfiguration> foreignKeys;

public CustomViewConfiguration() {
name = Constants.EMPTY;
columns = new ArrayList<>();
description = Constants.EMPTY;
query = Constants.EMPTY;
foreignKeys = new ArrayList<>();
}

public String getName() {
Expand All @@ -40,6 +46,22 @@ public void setName(String name) {
this.name = name;
}

/**
* Should the custom view simulate a table in the archive?
* <p>
* This will remove the prefix from the name. The view will still be included in
* the archive with the prefix to document the archive.
*
* @return Boolean
*/
public boolean isSimulateTable() {
return simulateTable;
}

public void setSimulateTable(boolean simulateTable) {
this.simulateTable = simulateTable;
}

public String getDescription() {
return description;
}
Expand All @@ -56,14 +78,30 @@ public void setQuery(String query) {
this.query = query;
}

public List<ColumnConfiguration> getColumns() {
public List<CustomColumnConfiguration> getColumns() {
return columns;
}

public void setColumns(List<ColumnConfiguration> columns) {
public void setColumns(List<CustomColumnConfiguration> columns) {
this.columns = columns;
}

public PrimaryKeyConfiguration getPrimaryKey() {
return primaryKey;
}

public void setPrimaryKey(PrimaryKeyConfiguration primaryKey) {
this.primaryKey = primaryKey;
}

public List<ForeignKeyConfiguration> getForeignKeys() {
return foreignKeys;
}

public void setForeignKeys(List<ForeignKeyConfiguration> foreignKeys) {
this.foreignKeys = foreignKeys;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
Expand All @@ -72,7 +110,8 @@ public boolean equals(Object o) {
return Objects.equals(name, that.name) &&
Objects.equals(description, that.description) &&
Objects.equals(query, that.query) &&
Objects.equals(columns, that.columns);
Objects.equals(columns, that.columns) && Objects.equals(primaryKey, that.primaryKey)
&& Objects.equals(foreignKeys, that.foreignKeys);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package com.databasepreservation.model.modules.configuration;

import com.fasterxml.jackson.annotation.JsonInclude;

import java.util.List;
import java.util.Objects;


@JsonInclude(JsonInclude.Include.NON_NULL)
public class ForeignKeyConfiguration {

private String name;
private String referencedTable;
private List<ReferenceConfiguration> references;
private String description;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getReferencedTable() {
return referencedTable;
}

public void setReferencedTable(String referencedTable) {
this.referencedTable = referencedTable;
}

public List<ReferenceConfiguration> getReferences() {
return references;
}

public void setReferences(List<ReferenceConfiguration> references) {
this.references = references;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
ForeignKeyConfiguration that = (ForeignKeyConfiguration) o;
return Objects.equals(name, that.name) && Objects.equals(referencedTable, that.referencedTable) && Objects.equals(
references, that.references) && Objects.equals(description, that.description);
}

@Override
public int hashCode() {
return Objects.hash(name, referencedTable, references);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,7 @@
package com.databasepreservation.model.modules.configuration;

import static com.databasepreservation.Constants.VIEW_NAME_PREFIX;
import static com.databasepreservation.model.modules.configuration.enums.DatabaseTechnicalFeatures.CANDIDATE_KEYS;
import static com.databasepreservation.model.modules.configuration.enums.DatabaseTechnicalFeatures.CHECK_CONSTRAINTS;
import static com.databasepreservation.model.modules.configuration.enums.DatabaseTechnicalFeatures.FOREIGN_KEYS;
import static com.databasepreservation.model.modules.configuration.enums.DatabaseTechnicalFeatures.PRIMARY_KEYS;
import static com.databasepreservation.model.modules.configuration.enums.DatabaseTechnicalFeatures.PRIVILEGES;
import static com.databasepreservation.model.modules.configuration.enums.DatabaseTechnicalFeatures.ROLES;
import static com.databasepreservation.model.modules.configuration.enums.DatabaseTechnicalFeatures.ROUTINES;
import static com.databasepreservation.model.modules.configuration.enums.DatabaseTechnicalFeatures.TRIGGERS;
import static com.databasepreservation.model.modules.configuration.enums.DatabaseTechnicalFeatures.USERS;
import static com.databasepreservation.model.modules.configuration.enums.DatabaseTechnicalFeatures.VIEWS;
import static com.databasepreservation.model.modules.configuration.enums.DatabaseTechnicalFeatures.*;

import java.util.ArrayList;
import java.util.LinkedHashMap;
Expand All @@ -26,19 +17,20 @@

import com.databasepreservation.Constants;
import com.databasepreservation.model.modules.configuration.enums.DatabaseTechnicalFeatures;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.annotation.*;

/**
* @author Miguel Guimarães <[email protected]>
*/
@JsonPropertyOrder({"import", "schemas", "ignore"})
@JsonIgnoreProperties(value = {"fetchRows"})
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ModuleConfiguration {

private ImportModuleConfiguration importModuleConfiguration;
// Statements to run before importing database, e.g. creating temporary tables for use in custom views exported as
// tables.
private List<String> setupStatements;
private Map<String, SchemaConfiguration> schemaConfigurations;
private Map<DatabaseTechnicalFeatures, Boolean> ignore;
private boolean fetchRows;
Expand Down Expand Up @@ -372,6 +364,15 @@ public ImportModuleConfiguration getImportModuleConfiguration() {
return importModuleConfiguration;
}

@JsonProperty("setupStatements")
public List<String> getSetupStatements() {
return setupStatements;
}

public void setSetupStatements(List<String> setupStatements) {
this.setupStatements = setupStatements;
}

public void setImportModuleConfiguration(ImportModuleConfiguration importModuleConfiguration) {
this.importModuleConfiguration = importModuleConfiguration;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.databasepreservation.model.modules.configuration;

import com.fasterxml.jackson.annotation.JsonInclude;

import java.util.List;
import java.util.Objects;

@JsonInclude(JsonInclude.Include.NON_NULL)
public class PrimaryKeyConfiguration {

private String name;
private List<String> columnNames;
private String description;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public List<String> getColumnNames() {
return columnNames;
}

public void setColumnNames(List<String> columnNames) {
this.columnNames = columnNames;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
PrimaryKeyConfiguration that = (PrimaryKeyConfiguration) o;
return Objects.equals(name, that.name) && Objects.equals(columnNames, that.columnNames)
&& Objects.equals(description, that.description);
}

@Override
public int hashCode() {
return Objects.hash(name, columnNames, description);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.databasepreservation.model.modules.configuration;

import java.util.Objects;

public class ReferenceConfiguration {

private String column;
private String referenced;

public String getColumn() {
return column;
}

public void setColumn(String column) {
this.column = column;
}

public String getReferenced() {
return referenced;
}

public void setReferenced(String referenced) {
this.referenced = referenced;
}

@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
ReferenceConfiguration that = (ReferenceConfiguration) o;
return Objects.equals(column, that.column) && Objects.equals(referenced, that.referenced);
}

@Override
public int hashCode() {
return Objects.hash(column, referenced);
}
}
Loading