public TableMetadata(List<ColumnMetadata> columnMetadata, @Nullable String textDesc) { checkArgument(columnMetadata != null, "Column metadata cannot be null"); checkArgument(!columnMetadata.isEmpty(), "The number of columns should be greater than zero"); // check if there is a duplicate column name Set<String> duplicateCheckSet = new HashSet<>(); for (ColumnMetadata cm : columnMetadata) { if (!duplicateCheckSet.add(cm.getName())) { throw new IllegalArgumentException( "Cannot have two columns with the same name '" + cm.getName() + "'"); } } // if textDesc is null, make one up using key columns if there are any or all columns if not String desc = textDesc; if (desc == null) { boolean haveKeyColumns = columnMetadata.stream().anyMatch(ColumnMetadata::getIsKey); desc = columnMetadata.stream() .filter(cm -> !haveKeyColumns || cm.getIsKey()) .map(cm -> String.format("${%s}", cm.getName())) .collect(Collectors.joining(" | ")); } _columnMetadata = columnMetadata; _textDesc = desc; }
/** * Returns the list of values in all columns declared as key in the metadata. * * @param metadata Provides information on which columns are key and their {@link Schema} * @return The list */ public List<Object> getKey(List<ColumnMetadata> metadata) { List<Object> keyList = new LinkedList<>(); for (ColumnMetadata column : metadata) { if (column.getIsKey()) { keyList.add(get(column.getName(), column.getSchema())); } } return keyList; }
if (cm.getIsKey()) { continue;
@Test public void testJacksonDeserializeWithDefaults() { ColumnMetadata c = ColumnMetadata.jsonCreator("name", Schema.STRING, "desc", null, null); assertThat(c.getName(), equalTo("name")); assertThat(c.getDescription(), equalTo("desc")); assertThat(c.getSchema(), equalTo(Schema.STRING)); assertThat(c.getIsKey(), equalTo(true)); assertThat(c.getIsValue(), equalTo(true)); }
.filter(cm -> (!cm.getIsKey() && cm.getIsValue())) .collect(Collectors.toList());