Skip to content

Commit

Permalink
Do initial refactor of data dictionary service (#8)
Browse files Browse the repository at this point in the history
* Perform an initial refactor of the data dictionary service with the following goals:
  - Reduce method signature size between DataDictionaryOperations and DataDictionary with ConnectionConfig class.
  - Extract DefaultMetadataField transformation to separate class to improve code clarity and make testing easier.
  - Reduce duplicated code where possible.
  - Add more unit tests and documentation.
  • Loading branch information
lbschanno authored Jul 7, 2020
1 parent 275efb6 commit f1a89c1
Show file tree
Hide file tree
Showing 8 changed files with 1,192 additions and 507 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
package datawave.webservice.query.result.metadata;

import datawave.webservice.query.result.event.MapSchema;
import datawave.webservice.results.datadictionary.DefaultDescription;
import datawave.webservice.results.datadictionary.DescriptionBase;
import io.protostuff.Input;
import io.protostuff.Message;
import io.protostuff.Output;
import io.protostuff.Schema;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
Expand All @@ -10,25 +27,6 @@
import java.util.Map;
import java.util.Set;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;

import datawave.webservice.query.result.event.MapSchema;
import datawave.webservice.results.datadictionary.DefaultDescription;

import datawave.webservice.results.datadictionary.DescriptionBase;

import io.protostuff.Input;
import io.protostuff.Message;
import io.protostuff.Output;
import io.protostuff.Schema;
import org.apache.commons.lang3.builder.HashCodeBuilder;

@XmlAccessorType(XmlAccessType.NONE)
@XmlType(propOrder = {"fieldName", "internalFieldName", "dataType", "descriptions", "indexOnly", "forwardIndexed", "reverseIndexed", "normalized", "tokenized",
"types"})
Expand Down Expand Up @@ -170,6 +168,24 @@ public int hashCode() {
return new HashCodeBuilder(6197, 7993).append(this.fieldName).hashCode();
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}

if (o == null || getClass() != o.getClass()) {
return false;
}

DefaultMetadataField field = (DefaultMetadataField) o;

return new EqualsBuilder().append(fieldName, field.fieldName).append(internalFieldName, field.internalFieldName).append(dataType, field.dataType)
.append(indexOnly, field.indexOnly).append(forwardIndexed, field.forwardIndexed).append(normalized, field.normalized)
.append(reverseIndexed, field.reverseIndexed).append(tokenized, field.tokenized).append(types, field.types)
.append(descriptions, field.descriptions).append(lastUpdated, field.lastUpdated).isEquals();
}

@SuppressWarnings("unused")
public static Schema<DefaultMetadataField> getSchema() {
return SCHEMA;
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package datawave.microservice.dictionary.data;

import org.apache.accumulo.core.client.Connector;
import org.apache.accumulo.core.security.Authorizations;
import org.apache.commons.lang.builder.ToStringBuilder;

import java.util.Objects;
import java.util.Set;

public class ConnectionConfig {

private Connector connector;

private Set<Authorizations> auths;

private String metadataTable;

private String modelTable;

private String modelName;

public Connector getConnector() {
return connector;
}

public void setConnector(Connector connector) {
this.connector = connector;
}

public Set<Authorizations> getAuths() {
return auths;
}

public void setAuths(Set<Authorizations> authorizations) {
this.auths = authorizations;
}

public String getMetadataTable() {
return metadataTable;
}

public void setMetadataTable(String metadataTable) {
this.metadataTable = metadataTable;
}

public String getModelTable() {
return modelTable;
}

public void setModelTable(String modelTable) {
this.modelTable = modelTable;
}

public String getModelName() {
return modelName;
}

public void setModelName(String modelName) {
this.modelName = modelName;
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
ConnectionConfig that = (ConnectionConfig) o;
return Objects.equals(connector, that.connector) && Objects.equals(auths, that.auths) && Objects.equals(metadataTable, that.metadataTable)
&& Objects.equals(modelTable, that.modelTable) && Objects.equals(modelName, that.modelName);
}

@Override
public int hashCode() {
return Objects.hash(connector, auths, metadataTable, modelTable, modelName);
}

@Override
public String toString() {
return new ToStringBuilder(this).append("connector", connector).append("auths", auths).append("metadataTable", metadataTable)
.append("modelTable", modelTable).append("modelName", modelName).toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,40 +4,31 @@
import datawave.webservice.query.result.metadata.MetadataFieldBase;
import datawave.webservice.results.datadictionary.DescriptionBase;
import datawave.webservice.results.datadictionary.DictionaryFieldBase;
import org.apache.accumulo.core.client.Connector;
import org.apache.accumulo.core.security.Authorizations;

import java.util.Collection;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public interface DatawaveDataDictionary<META extends MetadataFieldBase<META,DESC>,DESC extends DescriptionBase<DESC>,FIELD extends DictionaryFieldBase<FIELD,DESC>> {
Collection<META> getFields(String modelName, String modelTableName, String metadataTableName, Collection<String> dataTypeFilters, Connector connector,
Set<Authorizations> auths, int numThreads) throws Exception;

Map<String,String> getNormalizerMapping();
Map<String,String> getNormalizationMap();

void setNormalizerMapping(Map<String,String> normalizerMapping);
void setNormalizationMap(Map<String,String> normalizationMap);

void setDescription(Connector connector, String metadataTableName, Set<Authorizations> auths, String modelName, String modelTableName, FIELD description)
throws Exception;
Collection<META> getFields(ConnectionConfig connectionConfig, Collection<String> dataTypeFilters, int numThreads) throws Exception;

void setDescription(Connector connector, String metadataTableName, Set<Authorizations> auths, String modelName, String modelTableName, String fieldName,
String datatype, DESC description) throws Exception;
void setDescription(ConnectionConfig connectionConfig, FIELD description) throws Exception;

void setDescription(Connector connector, String metadataTableName, Set<Authorizations> auths, String modelName, String modelTableName, String fieldName,
String datatype, Set<DESC> descriptions) throws Exception;
void setDescription(ConnectionConfig connectionConfig, String fieldName, String datatype, DESC description) throws Exception;

Multimap<Entry<String,String>,DESC> getDescriptions(Connector connector, String metadataTableName, Set<Authorizations> auths, String modelName,
String modelTableName) throws Exception;
void setDescriptions(ConnectionConfig connectionConfig, String fieldName, String datatype, Set<DESC> descriptions) throws Exception;

Multimap<Entry<String,String>,DESC> getDescriptions(Connector connector, String metadataTableName, Set<Authorizations> auths, String modelName,
String modelTableName, String datatype) throws Exception;
Multimap<Entry<String,String>,DESC> getDescriptions(ConnectionConfig connectionConfig) throws Exception;

Set<DESC> getDescriptions(Connector connector, String metadataTableName, Set<Authorizations> auths, String modelName, String modelTableName,
String fieldName, String datatype) throws Exception;
Multimap<Entry<String,String>,DESC> getDescriptions(ConnectionConfig connectionConfig, String datatype) throws Exception;

void deleteDescription(Connector connector, String metadataTableName, Set<Authorizations> auths, String modelName, String modelTableName, String fieldName,
String datatype, DESC description) throws Exception;
Set<DESC> getDescriptions(ConnectionConfig connectionConfig, String fieldName, String datatype) throws Exception;

void deleteDescription(ConnectionConfig connectionConfig, String fieldName, String datatype, DESC description) throws Exception;
}
Loading

0 comments on commit f1a89c1

Please sign in to comment.