77import ch .systemsx .cisd .etlserver .registrator .api .v2 .IDataSetRegistrationTransactionV2 ;
88import ch .systemsx .cisd .openbis .dss .generic .shared .api .internal .v2 .ISampleImmutable ;
99import java .io .File ;
10+ import java .io .IOException ;
11+ import java .nio .file .Files ;
1012import life .qbic .registration .openbis .exceptions .fail .MeasurementHasDataException ;
1113import life .qbic .registration .openbis .exceptions .fail .UnknownSampleTypeException ;
1214import life .qbic .registration .openbis .types .QDatasetType ;
@@ -50,8 +52,9 @@ public boolean shouldRetryProcessing(DataSetRegistrationContext context, Excepti
5052
5153 @ Override
5254 public void process (IDataSetRegistrationTransactionV2 transaction ) {
55+ File provenanceFile = new File (transaction .getIncoming (), PROVENANCE_FILE_NAME );
5356 DataSetProvenance dataSetProvenance = ProvenanceParser .parseProvenanceJson (
54- new File ( transaction . getIncoming (), PROVENANCE_FILE_NAME ) );
57+ provenanceFile );
5558
5659 String measurementId = dataSetProvenance .measurementId ();
5760
@@ -68,8 +71,34 @@ public void process(IDataSetRegistrationTransactionV2 transaction) {
6871 newDataSet .setPropertyValue (QPropertyType .Q_TASK_ID .getOpenBisPropertyName (), dataSetProvenance .taskId ());
6972 QDatasetType qDatasetType = getDatasetType (measurementSample );
7073 newDataSet .setDataSetType (qDatasetType .name ());
74+ moveFiles (transaction , newDataSet , provenanceFile );
7175
72- transaction .moveFile (transaction .getIncoming ().getAbsolutePath (), newDataSet );
76+ }
77+
78+ private void moveFiles (IDataSetRegistrationTransactionV2 transactionV2 , IDataSet dataSet , File provenanceFile ) {
79+
80+ byte [] buffer = null ;
81+ try {
82+ buffer = Files .readAllBytes (provenanceFile .toPath ().toAbsolutePath ());
83+ Files .delete (provenanceFile .toPath ());
84+ transactionV2 .moveFile (transactionV2 .getIncoming ().getAbsolutePath (), dataSet );
85+ } catch (RuntimeException e ) {
86+ //recover provenance file
87+ try {
88+ Files .write (provenanceFile .toPath ().toAbsolutePath (), buffer );
89+ } catch (IOException ex ) {
90+ throw new RuntimeException (ex );
91+ }
92+ throw e ;
93+ } catch (IOException e ) {
94+ //recover provenance file
95+ try {
96+ Files .write (provenanceFile .toPath ().toAbsolutePath (), buffer );
97+ } catch (IOException ex ) {
98+ throw new RuntimeException (ex );
99+ }
100+ throw new RuntimeException (e );
101+ }
73102 }
74103
75104 private static QDatasetType getDatasetType (ISampleImmutable measurementSample ) {
0 commit comments