Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,7 @@ public boolean hasNullValues(Domain domain, DomainProperty prop)
}

@Override
public Set<String> getReservedPropertyNames(Domain domain, User user)
public @NotNull Set<String> getReservedPropertyNames(Domain domain, User user)
{
Set<String> names = new HashSet<>();

Expand Down
63 changes: 27 additions & 36 deletions api/src/org/labkey/api/exp/api/SampleTypeDomainKind.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,11 @@

import com.google.common.collect.Sets;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.labkey.api.collections.CaseInsensitiveHashSet;
import org.labkey.api.compliance.ComplianceService;
import org.labkey.api.data.ColumnInfo;
import org.labkey.api.data.Container;
import org.labkey.api.data.ContainerFilter;
import org.labkey.api.data.ContainerManager;
Expand All @@ -47,6 +45,7 @@
import org.labkey.api.exp.property.AbstractDomainKind;
import org.labkey.api.exp.property.Domain;
import org.labkey.api.exp.property.DomainProperty;
import org.labkey.api.exp.property.DomainUtil;
import org.labkey.api.exp.query.ExpMaterialTable;
import org.labkey.api.exp.query.ExpSampleTypeTable;
import org.labkey.api.exp.query.SamplesSchema;
Expand Down Expand Up @@ -110,38 +109,30 @@ public class SampleTypeDomainKind extends AbstractDomainKind<SampleTypeDomainKin
new PropertyStorageSpec("name", JdbcType.VARCHAR, 200)
)));

RESERVED_NAMES = BASE_PROPERTIES.stream().map(PropertyStorageSpec::getName).collect(Collectors.toSet());
RESERVED_NAMES.addAll(Arrays.stream(ExpSampleTypeTable.Column.values()).map(ExpSampleTypeTable.Column::name).toList());
RESERVED_NAMES.addAll(Arrays.stream(ExpSampleTypeTable.Column.values()).map(col -> ColumnInfo.labelFromName(col.name())).toList());
RESERVED_NAMES.addAll(Arrays.stream(ExpMaterialTable.Column.values()).map(ExpMaterialTable.Column::name).toList());
RESERVED_NAMES.addAll(Arrays.stream(ExpMaterialTable.Column.values()).map(col -> ColumnInfo.labelFromName(col.name())).toList());
RESERVED_NAMES.add("Sample Type"); // Issue 52716
RESERVED_NAMES.add("SampleType"); // Issue 52716
RESERVED_NAMES.add("Protocol"); // alias for "SourceProtocolApplication"
RESERVED_NAMES.add("SampleTypeUnits"); // alias for MetricUnit
RESERVED_NAMES.add("Sample Type Units");
RESERVED_NAMES.add("CpasType");
RESERVED_NAMES.add("Cpas Type");
RESERVED_NAMES.add(ExpMaterial.ALIQUOTED_FROM_INPUT);
RESERVED_NAMES.add("Aliquoted From");
RESERVED_NAMES.addAll(ALIQUOT_ROLLUP_FIELD_LABELS);
RESERVED_NAMES.add("AliquotTotalVolume"); // Issue 52158: Sample Manager: data type reserved field name and label inconsistencies
RESERVED_NAMES.add("Aliquot Total Volume"); // Issue 52158: Sample Manager: data type reserved field name and label inconsistencies
RESERVED_NAMES.add("Aliquoted From Parent");
RESERVED_NAMES.add("Root Material");
RESERVED_NAMES.add("RecomputeRollup");
RESERVED_NAMES.add("Recompute Rollup");
RESERVED_NAMES.add("Aliquot Unit");
RESERVED_NAMES.add("ExpirationDate"); // alias for MaterialExpDate
RESERVED_NAMES.add("Expiration Date");
RESERVED_NAMES.add("Ancestors");
RESERVED_NAMES.add("Container");
RESERVED_NAMES.add("SampleID"); // alias for Name
RESERVED_NAMES.add("Sample ID");
RESERVED_NAMES.add("Status");
RESERVED_NAMES.add("Amount"); // alias for storedAmount
RESERVED_NAMES.add("RunId"); // Issue 50461
RESERVED_NAMES.add("Run Id");
Set<String> names = BASE_PROPERTIES.stream().map(PropertyStorageSpec::getName).collect(Collectors.toSet());
names.addAll(Arrays.stream(ExpSampleTypeTable.Column.values()).map(Enum::name).toList());
names.addAll(Arrays.stream(ExpMaterialTable.Column.values()).map(Enum::name).toList());
names.addAll(List.of(
"SampleType", // Issue 52716
"Protocol", // alias for "SourceProtocolApplication"
"SampleTypeUnits", // alias for MetricUnit
"CpasType",
ExpMaterial.ALIQUOTED_FROM_INPUT,
"AliquotTotalVolume", // Issue 52158
"AliquotedFromParent",
"RootMaterial",
"RecomputeRollup",
"AliquotUnit",
"ExpirationDate", // alias for MaterialExpDate
"Ancestors",
"Container",
"SampleID", // alias for Name
"Status",
"Amount", // alias for storedAmount
"RunId"
));
names.addAll(ALIQUOT_ROLLUP_FIELD_LABELS);
RESERVED_NAMES = DomainUtil.getNamesAndLabels(names);
RESERVED_NAMES.addAll(InventoryService.InventoryStatusColumn.namesAndLabels());

FOREIGN_KEYS = Collections.unmodifiableSet(Sets.newLinkedHashSet(Arrays.asList(
Expand Down Expand Up @@ -270,13 +261,13 @@ public Set<PropertyStorageSpec> getBaseProperties(Domain domain)
}

@Override
public Set<String> getReservedPropertyNames(Domain domain, User user)
public @NotNull Set<String> getReservedPropertyNames(Domain domain, User user)
{
return getReservedPropertyNames(domain, user, false);
}

@Override
public Set<String> getReservedPropertyNames(Domain domain, User user, boolean forCreate)
public @NotNull Set<String> getReservedPropertyNames(Domain domain, User user, boolean forCreate)
{
Set<String> reserved = new CaseInsensitiveHashSet(RESERVED_NAMES);

Expand Down
23 changes: 23 additions & 0 deletions api/src/org/labkey/api/exp/property/DomainUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -1535,4 +1535,27 @@ private static Map<Integer, String> getOriginalFieldPropertyIdNameMap(@Nullable
}
return null;
}

public static Set<String> getNameAndLabels(String name)
{
Set<String> values = new CaseInsensitiveHashSet();
values.add(name);
String label = ColumnInfo.labelFromName(name);
values.add(label);
values.add(label.replaceAll("\\s", ""));
return values;
}

public static Set<String> getNamesAndLabels(Collection<String> names)
{
Set<String> values = new CaseInsensitiveHashSet();
for (String name : names)
{
values.add(name);
String label = ColumnInfo.labelFromName(name);
values.add(label);
values.add(label.replaceAll("\\s", ""));
}
return values;
}
}
3 changes: 2 additions & 1 deletion api/src/org/labkey/api/exp/property/TestDomainKind.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package org.labkey.api.exp.property;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.json.JSONObject;
import org.labkey.api.data.Container;
Expand Down Expand Up @@ -147,7 +148,7 @@ public void deletePropertyDescriptor(Domain domain, User user, PropertyDescripto
}

@Override
public Set<String> getReservedPropertyNames(Domain domain, User user)
public @NotNull Set<String> getReservedPropertyNames(Domain domain, User user)
{
throw new UnsupportedOperationException();
}
Expand Down
23 changes: 9 additions & 14 deletions api/src/org/labkey/api/query/SimpleTableDomainKind.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,11 @@
*/
package org.labkey.api.query;

import com.google.common.base.Function;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.json.JSONObject;
import org.labkey.api.collections.CaseInsensitiveHashSet;
import org.labkey.api.data.ColumnInfo;
import org.labkey.api.data.Container;
import org.labkey.api.data.ContainerType;
Expand All @@ -34,6 +33,7 @@
import org.labkey.api.exp.api.ExperimentUrls;
import org.labkey.api.exp.property.BaseAbstractDomainKind;
import org.labkey.api.exp.property.Domain;
import org.labkey.api.exp.property.DomainUtil;
import org.labkey.api.exp.property.PropertyService;
import org.labkey.api.exp.xar.LsidUtils;
import org.labkey.api.gwt.client.model.GWTDomain;
Expand Down Expand Up @@ -242,21 +242,16 @@ public boolean canEditDefinition(User user, Domain domain)
}

@Override
public Set<String> getReservedPropertyNames(Domain domain, User user)
public @NotNull Set<String> getReservedPropertyNames(Domain domain, User user)
{
SimpleUserSchema.SimpleTable table = domain != null ? getTable(domain, user) : null;
if (table != null)
{
// return the set of built-in column names.
return Sets.newHashSet(Iterables.transform(table.getBuiltInColumns(),
new Function<ColumnInfo, String>() {
@Override
public String apply(ColumnInfo col)
{
return col.getName();
}
}
));
Set<String> set = new CaseInsensitiveHashSet();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this is done in DomainUtil then this change is not needed.

((Iterable<ColumnInfo>) table.getBuiltInColumns()).forEach(col -> {
set.addAll(DomainUtil.getNameAndLabels(col.getName()));
});
return set;
}
return Collections.emptySet();
}
Expand Down
22 changes: 13 additions & 9 deletions assay/api-src/org/labkey/api/assay/AssayBatchDomainKind.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,15 @@
*/
package org.labkey.api.assay;

import org.jetbrains.annotations.NotNull;
import org.labkey.api.collections.CaseInsensitiveHashSet;
import org.labkey.api.exp.api.ExpProtocol;
import org.labkey.api.exp.property.Domain;
import org.labkey.api.exp.property.DomainUtil;
import org.labkey.api.exp.query.ExpExperimentTable;
import org.labkey.api.security.User;

import java.util.Arrays;
import java.util.Set;

/**
Expand All @@ -28,6 +32,13 @@
*/
public class AssayBatchDomainKind extends AssayDomainKind
{
private static final Set<String> RESERVED_NAMES;

static {
RESERVED_NAMES = DomainUtil.getNamesAndLabels(Arrays.stream(ExpExperimentTable.Column.values()).map(ExpExperimentTable.Column::name).toList());
RESERVED_NAMES.addAll(getAssayReservedPropertyNames());
RESERVED_NAMES.addAll(DomainUtil.getNameAndLabels("AssayId"));
}
public AssayBatchDomainKind()
{
super(ExpProtocol.ASSAY_DOMAIN_BATCH);
Expand All @@ -40,16 +51,9 @@ public String getKindName()
}

@Override
public Set<String> getReservedPropertyNames(Domain domain, User user)
public @NotNull Set<String> getReservedPropertyNames(Domain domain, User user)
{
Set<String> result = super.getAssayReservedPropertyNames();
for (ExpExperimentTable.Column column : ExpExperimentTable.Column.values())
{
result.add(column.toString());
}
result.add("AssayId");
result.add("Assay Id");
return result;
return RESERVED_NAMES;
}

@Override
Expand Down
31 changes: 19 additions & 12 deletions assay/api-src/org/labkey/api/assay/AssayDomainKind.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import org.labkey.api.exp.api.ExperimentService;
import org.labkey.api.exp.property.BaseAbstractDomainKind;
import org.labkey.api.exp.property.Domain;
import org.labkey.api.exp.property.DomainUtil;
import org.labkey.api.exp.property.PropertyService;
import org.labkey.api.gwt.client.DefaultValueType;
import org.labkey.api.gwt.client.model.GWTDomain;
Expand All @@ -48,13 +49,29 @@
import org.labkey.api.view.ActionURL;
import org.labkey.api.writer.ContainerUser;

import java.util.Collections;
import java.util.List;
import java.util.Set;

public abstract class AssayDomainKind extends BaseAbstractDomainKind
{
private final String _namespacePrefix;
private final Priority _priority;
private static final Set<String> RESERVED_NAMES;
static {
Set<String> s = DomainUtil.getNamesAndLabels(List.of(
"RowId",
"Container",
"LSID",
"Owner",
"CreatedBy",
"Created",
"ModifiedBy",
"Modified"
));
// make this an unmodifiable set because many domains build from this set but shouldn't alter the base set
RESERVED_NAMES = Collections.unmodifiableSet(s);
}

protected AssayDomainKind(String namespacePrefix)
{
Expand Down Expand Up @@ -210,19 +227,9 @@ public Domain createDomain(GWTDomain domain, JSONObject arguments, Container con
return PropertyService.get().getDomain(container, dd.getDomainURI(), forUpdate);
}

protected Set<String> getAssayReservedPropertyNames()
protected static Set<String> getAssayReservedPropertyNames()
{
Set<String> result = new CaseInsensitiveHashSet();
result.add("RowId");
result.add("Row Id");
result.add("Container");
result.add("LSID");
result.add("Owner");
result.add("CreatedBy");
result.add("Created");
result.add("ModifiedBy");
result.add("Modified");
return result;
return RESERVED_NAMES;
}

@Override
Expand Down
18 changes: 13 additions & 5 deletions assay/api-src/org/labkey/api/assay/AssayResultDomainKind.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package org.labkey.api.assay;

import org.jetbrains.annotations.NotNull;
import org.labkey.api.collections.CaseInsensitiveHashSet;
import org.labkey.api.data.Container;
import org.labkey.api.data.DbSchema;
import org.labkey.api.data.DbScope;
Expand All @@ -25,13 +27,15 @@
import org.labkey.api.exp.PropertyDescriptor;
import org.labkey.api.exp.api.ExpProtocol;
import org.labkey.api.exp.property.Domain;
import org.labkey.api.exp.property.DomainUtil;
import org.labkey.api.query.FieldKey;
import org.labkey.api.security.User;
import org.labkey.api.util.PageFlowUtil;
import org.labkey.api.util.Pair;

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import static org.labkey.api.assay.AssayFileWriter.DIR_NAME;
Expand All @@ -42,6 +46,13 @@

public class AssayResultDomainKind extends AssayDomainKind
{
private static final Set<String> RESERVED_NAMES;
static
{
RESERVED_NAMES = new CaseInsensitiveHashSet(getAssayReservedPropertyNames());
RESERVED_NAMES.addAll(DomainUtil.getNamesAndLabels(List.of("Run", "DataId")));
}

public enum Column
{
Plate,
Expand Down Expand Up @@ -119,12 +130,9 @@ public DbSchema getSchema()
}

@Override
public Set<String> getReservedPropertyNames(Domain domain, User user)
public @NotNull Set<String> getReservedPropertyNames(Domain domain, User user)
{
Set<String> result = getAssayReservedPropertyNames();
result.add("Run");
result.add("DataId");
return result;
return RESERVED_NAMES;
}

@Override
Expand Down
Loading