2020import org .apache .commons .lang3 .StringUtils ;
2121import org .jetbrains .annotations .NotNull ;
2222import org .jetbrains .annotations .Nullable ;
23+ import org .json .JSONArray ;
2324import org .labkey .api .assay .actions .AssayRunUploadForm ;
2425import org .labkey .api .assay .actions .DesignerAction ;
2526import org .labkey .api .assay .actions .UploadWizardAction ;
2627import org .labkey .api .assay .pipeline .AssayRunAsyncContext ;
2728import org .labkey .api .assay .plate .FilterCriteria ;
2829import org .labkey .api .assay .security .DesignAssayPermission ;
30+ import org .labkey .api .assay .transform .AnalysisScript ;
31+ import org .labkey .api .assay .transform .DataExchangeHandler ;
32+ import org .labkey .api .assay .transform .DataTransformService ;
2933import org .labkey .api .audit .AuditLogService ;
3034import org .labkey .api .data .ActionButton ;
3135import org .labkey .api .data .ButtonBar ;
7983import org .labkey .api .module .Module ;
8084import org .labkey .api .pipeline .PipeRoot ;
8185import org .labkey .api .pipeline .PipelineService ;
82- import org .labkey .api .qc .DataExchangeHandler ;
8386import org .labkey .api .query .FieldKey ;
8487import org .labkey .api .query .FilteredTable ;
8588import org .labkey .api .query .QueryService ;
@@ -1243,16 +1246,15 @@ public boolean hasUsefulDetailsPage()
12431246 private static final String SCRIPT_PATH_DELIMITER = "|" ;
12441247
12451248 @ Override
1246- public ValidationException setValidationAndAnalysisScripts (ExpProtocol protocol , @ NotNull List <File > scripts ) throws ExperimentException
1249+ public ValidationException setValidationAndAnalysisScripts (ExpProtocol protocol , @ NotNull List <AnalysisScript > scripts ) throws ExperimentException
12471250 {
12481251 Map <String , ObjectProperty > props = new HashMap <>(protocol .getObjectProperties ());
12491252 String propertyURI = ScriptType .TRANSFORM .getPropertyURI (protocol );
1250-
12511253 ValidationException validationErrors = new ValidationException ();
1252- StringBuilder sb = new StringBuilder ();
1253- String separator = "" ;
1254- for (File scriptFile : scripts )
1254+
1255+ for (AnalysisScript script : scripts )
12551256 {
1257+ File scriptFile = script .getScript ().toNioPathForRead ().toFile ();
12561258 String ext = FileUtil .getExtension (scriptFile );
12571259 if (scriptFile .isFile () && ext != null )
12581260 {
@@ -1274,10 +1276,6 @@ public ValidationException setValidationAndAnalysisScripts(ExpProtocol protocol,
12741276
12751277 validationErrors .addErrors (ParamReplacementSvc .get ().validateDeprecatedReplacements (scriptText , scriptFile .getName ()));
12761278 }
1277-
1278- sb .append (separator );
1279- sb .append (scriptFile .getAbsolutePath ());
1280- separator = SCRIPT_PATH_DELIMITER ;
12811279 }
12821280 else
12831281 {
@@ -1294,20 +1292,17 @@ public ValidationException setValidationAndAnalysisScripts(ExpProtocol protocol,
12941292 if (validationErrors .getErrors ().stream ().anyMatch (e -> SEVERITY .ERROR == e .getSeverity ()))
12951293 return validationErrors ;
12961294
1297- if (sb .length () > 0 )
1295+ JSONArray json = AnalysisScript .toJson (scripts );
1296+ if (json != null )
12981297 {
12991298 ObjectProperty prop = new ObjectProperty (protocol .getLSID (), protocol .getContainer (),
1300- propertyURI , sb .toString ());
1299+ propertyURI , json .toString ());
13011300 props .put (propertyURI , prop );
13021301 }
13031302 else
13041303 {
13051304 props .remove (propertyURI );
13061305 }
1307-
1308- // Be sure to strip out any validation scripts that were stored with the legacy propertyURI. We merge and save
1309- // them as a single list in the TRANSFORM
1310- props .remove (ScriptType .VALIDATION .getPropertyURI (protocol ));
13111306 protocol .setObjectProperties (props );
13121307
13131308 return validationErrors ;
@@ -1316,7 +1311,6 @@ public ValidationException setValidationAndAnalysisScripts(ExpProtocol protocol,
13161311 /** For migrating legacy assay designs that have separate transform and validation script properties */
13171312 private enum ScriptType
13181313 {
1319- VALIDATION ("ValidationScript" ),
13201314 TRANSFORM ("TransformScript" );
13211315
13221316 private final String _uriSuffix ;
@@ -1334,26 +1328,21 @@ public String getPropertyURI(ExpProtocol protocol)
13341328
13351329 @ NotNull
13361330 @ Override
1337- public List <File > getValidationAndAnalysisScripts (ExpProtocol protocol , Scope scope )
1331+ public List <AnalysisScript > getValidationAndAnalysisScripts (ExpProtocol protocol , Scope scope )
13381332 {
1339- List <File > result = new ArrayList <>();
1333+ List <AnalysisScript > result = new ArrayList <>();
13401334 if (scope == Scope .ASSAY_DEF || scope == Scope .ALL )
13411335 {
13421336 ObjectProperty transformScripts = protocol .getObjectProperties ().get (ScriptType .TRANSFORM .getPropertyURI (protocol ));
13431337 if (transformScripts != null )
13441338 {
1339+ List <AnalysisScript > scripts = AnalysisScript .fromJson (transformScripts .getStringValue ());
1340+ if (scripts != null )
1341+ return scripts ;
1342+
1343+ // try the legacy serialization
13451344 for (String scriptPath : transformScripts .getStringValue ().split ("\\ " + SCRIPT_PATH_DELIMITER ))
1346- {
1347- result .add (new File (scriptPath ));
1348- }
1349- }
1350- ObjectProperty validationScripts = protocol .getObjectProperties ().get (ScriptType .VALIDATION .getPropertyURI (protocol ));
1351- if (validationScripts != null )
1352- {
1353- for (String scriptPath : validationScripts .getStringValue ().split ("\\ " + SCRIPT_PATH_DELIMITER ))
1354- {
1355- result .add (new File (scriptPath ));
1356- }
1345+ result .add (new AnalysisScript (new File (scriptPath ), Set .of (DataTransformService .TransformOperation .INSERT )));
13571346 }
13581347 }
13591348 return result ;
0 commit comments