diff --git a/api/src/org/labkey/api/exp/api/ExperimentService.java b/api/src/org/labkey/api/exp/api/ExperimentService.java
index 5e369154827..4ce4dc646c5 100644
--- a/api/src/org/labkey/api/exp/api/ExperimentService.java
+++ b/api/src/org/labkey/api/exp/api/ExperimentService.java
@@ -285,6 +285,8 @@ ValidationException updateDataClass(
@Nullable String auditUserComment
);
+ void validateDataClassName(@NotNull Container c, @NotNull User u, String name, boolean skipExisting);
+
/**
* Get all DataClass definitions in the container. If includeOtherContainers is true,
* a user must be provided to check for read permission of the containers in scope.
diff --git a/api/src/org/labkey/api/exp/api/SampleTypeDomainKind.java b/api/src/org/labkey/api/exp/api/SampleTypeDomainKind.java
index e3c55d3286c..c2a4d1fb42a 100644
--- a/api/src/org/labkey/api/exp/api/SampleTypeDomainKind.java
+++ b/api/src/org/labkey/api/exp/api/SampleTypeDomainKind.java
@@ -444,39 +444,23 @@ public NameExpressionValidationResult validateNameExpressions(SampleTypeDomainKi
return errors;
}
+ @Override
+ public void validateDomainName(Container container, User user, @Nullable Domain domain, String name)
+ {
+ SampleTypeService.get().validateSampleTypeName(container, user, name, domain != null);
+ }
+
@Override
public void validateOptions(Container container, User user, SampleTypeDomainKindProperties options, String name, Domain domain, GWTDomain> updatedDomainDesign)
{
super.validateOptions(container, user, options, name, domain, updatedDomainDesign);
- // verify and NameExpression values
- TableInfo materialSourceTI = ExperimentService.get().getTinfoSampleType();
-
- boolean isUpdate = domain != null;
- if (!isUpdate)
- {
- if (name == null)
- {
- throw new IllegalArgumentException("You must supply a name for the sample type.");
- }
- else
- {
- ExpSampleType st = SampleTypeService.get().getSampleType(container, user, name);
- if (st != null)
- throw new IllegalArgumentException("A Sample Type with that name already exists.");
- }
- }
-
- // verify the length of the Name
- int nameMax = materialSourceTI.getColumn("Name").getScale();
- if (name != null && name.length() >= nameMax)
- throw new IllegalArgumentException("Value for Name field may not exceed " + nameMax + " characters.");
+ validateDomainName(container, user, domain, name);
if (options == null)
- {
return;
- }
+ TableInfo materialSourceTI = ExperimentService.get().getTinfoSampleType();
int nameExpMax = materialSourceTI.getColumn("NameExpression").getScale();
if (StringUtils.isNotBlank(options.getNameExpression()) && options.getNameExpression().length() > nameExpMax)
throw new IllegalArgumentException("Value for Name Expression field may not exceed " + nameExpMax + " characters.");
diff --git a/api/src/org/labkey/api/exp/api/SampleTypeService.java b/api/src/org/labkey/api/exp/api/SampleTypeService.java
index 2d3bc26ecff..8fa9ebd9b06 100644
--- a/api/src/org/labkey/api/exp/api/SampleTypeService.java
+++ b/api/src/org/labkey/api/exp/api/SampleTypeService.java
@@ -219,6 +219,8 @@ default Map incrementSampleCounts(@Nullable Date counterDate)
*/
Function