@@ -19,6 +19,8 @@ import com.scalableminds.webknossos.datastore.models.datasource.{
19
19
CoordinateTransformationType ,
20
20
DataSourceId ,
21
21
ElementClass ,
22
+ LayerAttachment ,
23
+ LayerAttachmentType ,
22
24
ThinPlateSplineCorrespondences ,
23
25
DataLayerLike => DataLayer
24
26
}
@@ -841,11 +843,11 @@ class DatasetMagsDAO @Inject()(sqlClient: SqlClient)(implicit ec: ExecutionConte
841
843
842
844
}
843
845
844
- class DatasetLayerDAO @ Inject ()(
845
- sqlClient : SqlClient ,
846
- datasetMagsDAO : DatasetMagsDAO ,
847
- datasetCoordinateTransformationsDAO : DatasetCoordinateTransformationsDAO ,
848
- datasetLayerAdditionalAxesDAO : DatasetLayerAdditionalAxesDAO )(implicit ec : ExecutionContext )
846
+ class DatasetLayerDAO @ Inject ()(sqlClient : SqlClient ,
847
+ datasetMagsDAO : DatasetMagsDAO ,
848
+ datasetCoordinateTransformationsDAO : DatasetCoordinateTransformationsDAO ,
849
+ datasetLayerAdditionalAxesDAO : DatasetLayerAdditionalAxesDAO ,
850
+ datasetLayerAttachmentsDAO : DatasetLayerAttachmentsDAO )(implicit ec : ExecutionContext )
849
851
extends SimpleSQLDAO (sqlClient) {
850
852
851
853
private def parseRow (row : DatasetLayersRow , datasetId : ObjectId ): Fox [DataLayer ] = {
@@ -970,6 +972,7 @@ class DatasetLayerDAO @Inject()(
970
972
_ <- datasetMagsDAO.updateMags(datasetId, source.toUsable.map(_.dataLayers))
971
973
_ <- datasetCoordinateTransformationsDAO.updateCoordinateTransformations(datasetId,
972
974
source.toUsable.map(_.dataLayers))
975
+ _ <- datasetLayerAttachmentsDAO.updateAttachments(datasetId, source.toUsable.map(_.dataLayers))
973
976
_ <- datasetLayerAdditionalAxesDAO.updateAdditionalAxes(datasetId, source.toUsable.map(_.dataLayers))
974
977
} yield ()
975
978
}
@@ -1010,6 +1013,37 @@ class DatasetLastUsedTimesDAO @Inject()(sqlClient: SqlClient)(implicit ec: Execu
1010
1013
}
1011
1014
}
1012
1015
1016
+ class DatasetLayerAttachmentsDAO @ Inject ()(sqlClient : SqlClient )(implicit ec : ExecutionContext )
1017
+ extends SimpleSQLDAO (sqlClient) {
1018
+ def updateAttachments (datasetId : ObjectId , dataLayersOpt : Option [List [DataLayer ]]): Fox [Unit ] = {
1019
+ def insertQuery (attachment : LayerAttachment , layerName : String , fileType : String ) =
1020
+ q """ INSERT INTO webknossos.dataset_layer_attachments(_dataset, layerName, name, path, type, dataFormat)
1021
+ VALUES( $datasetId, $layerName, ${attachment.name}, ${attachment.path.toString}, $fileType::webknossos.LAYER_ATTACHMENT_TYPE,
1022
+ ${attachment.dataFormat}::webknossos.LAYER_ATTACHMENT_DATAFORMAT) """ .asUpdate
1023
+ val clearQuery =
1024
+ q " DELETE FROM webknossos.dataset_layer_attachments WHERE _dataset = $datasetId" .asUpdate
1025
+ val insertQueries = dataLayersOpt.getOrElse(List .empty).flatMap { layer : DataLayer =>
1026
+ layer.attachments match {
1027
+ case Some (attachments) =>
1028
+ attachments.agglomerates.map { agglomerate =>
1029
+ insertQuery(agglomerate, layer.name, LayerAttachmentType .agglomerate.toString)
1030
+ } ++ attachments.connectomes.map { connectome =>
1031
+ insertQuery(connectome, layer.name, LayerAttachmentType .connectome.toString)
1032
+ } ++ attachments.segmentIndex.map { segmentIndex =>
1033
+ insertQuery(segmentIndex, layer.name, LayerAttachmentType .segmentIndex.toString)
1034
+ } ++ attachments.meshes.map { mesh =>
1035
+ insertQuery(mesh, layer.name, LayerAttachmentType .mesh.toString)
1036
+ } ++ attachments.cumsum.map { cumsumFile =>
1037
+ insertQuery(cumsumFile, layer.name, LayerAttachmentType .cumsum.toString)
1038
+ }
1039
+ case None =>
1040
+ List .empty
1041
+ }
1042
+ }
1043
+ replaceSequentiallyAsTransaction(clearQuery, insertQueries)
1044
+ }
1045
+ }
1046
+
1013
1047
class DatasetCoordinateTransformationsDAO @ Inject ()(sqlClient : SqlClient )(implicit ec : ExecutionContext )
1014
1048
extends SimpleSQLDAO (sqlClient) {
1015
1049
private def parseRow (row : DatasetLayerCoordinatetransformationsRow ): Fox [CoordinateTransformation ] =
0 commit comments