@@ -87,6 +87,8 @@ import kotlinx.coroutines.launch
8787import org.apache.commons.compress.archivers.ArchiveStreamFactory
8888import org.apache.commons.csv.CSVFormat
8989import org.apache.commons.csv.CSVRecord
90+ import org.apache.commons.lang3.NotImplementedException
91+ import org.springframework.beans.factory.annotation.Value
9092import org.springframework.context.event.EventListener
9193import org.springframework.core.io.ByteArrayResource
9294import org.springframework.core.io.Resource
@@ -127,9 +129,15 @@ class DatasetServiceImpl(
127129 private val unifiedJedis : UnifiedJedis ,
128130 private val csmRbac : CsmRbac ,
129131 private val csmAdmin : CsmAdmin ,
130- private val resourceScanner : ResourceScanner
132+ private val resourceScanner : ResourceScanner ,
133+ @Value(" \$ {csm.platform.twincache.useGraphModule}" ) private val useGraphModule : Boolean
131134) : CsmPhoenixService(), DatasetApiServiceInterface {
132135
136+ private val notImplementedExceptionMessage =
137+ " The API is not configured to use Graph functionnalities. " +
138+ " This endpoint is deactivated so. " +
139+ " To change that, set the API configuration entry 'csm.platform.twincache.useGraphModule' to true"
140+
133141 override fun findAllDatasets (organizationId : String , page : Int? , size : Int? ): List <Dataset > {
134142 organizationService.getVerifiedOrganization(organizationId)
135143 val defaultPageSize = csmPlatformProperties.twincache.dataset.defaultPageSize
@@ -188,8 +196,10 @@ class DatasetServiceImpl(
188196 ? : throw IllegalArgumentException (
189197 " Source cannot be null for source type 'ADT' or 'Storage'" )
190198
191- val twingraphId = idGenerator.generate(" twingraph" )
192- if (dataset.sourceType != null ) {
199+ var twingraphId: String? = null
200+
201+ if (dataset.sourceType != null && useGraphModule) {
202+ twingraphId = idGenerator.generate(" twingraph" )
193203 val twincacheConnector = getCreateTwincacheConnector()
194204 dataset.connector =
195205 DatasetConnector (
@@ -229,6 +239,9 @@ class DatasetServiceImpl(
229239 datasetId : String ,
230240 subDatasetGraphQuery : SubDatasetGraphQuery
231241 ): Dataset {
242+
243+ checkIfGraphFunctionalityIsAvailable()
244+
232245 val dataset =
233246 getDatasetWithStatus(organizationId, datasetId, status = IngestionStatusEnum .SUCCESS )
234247 csmRbac.verify(dataset.getRbac(), PERMISSION_CREATE_CHILDREN )
@@ -284,6 +297,12 @@ class DatasetServiceImpl(
284297 return datasetSaved
285298 }
286299
300+ private fun checkIfGraphFunctionalityIsAvailable () {
301+ if (! useGraphModule) {
302+ throw NotImplementedException (notImplementedExceptionMessage)
303+ }
304+ }
305+
287306 fun bulkQueryResult (queryBuffer : QueryBuffer , resultSet : ResultSet ) {
288307
289308 resultSet.forEach { record: Record ? ->
@@ -312,6 +331,8 @@ class DatasetServiceImpl(
312331 datasetId : String ,
313332 body : Resource
314333 ): FileUploadValidation {
334+
335+ checkIfGraphFunctionalityIsAvailable()
315336 val dataset = getDatasetWithStatus(organizationId, datasetId)
316337 csmRbac.verify(dataset.getRbac(), PERMISSION_WRITE )
317338
@@ -400,7 +421,7 @@ class DatasetServiceImpl(
400421 null -> IngestionStatusEnum .NONE .value
401422 DatasetSourceType .None -> {
402423 var twincacheStatus = TwincacheStatusEnum .EMPTY
403- if (unifiedJedis.exists(dataset.twingraphId!! )) {
424+ if (useGraphModule && unifiedJedis.exists(dataset.twingraphId!! )) {
404425 twincacheStatus = TwincacheStatusEnum .FULL
405426 }
406427 datasetRepository.apply { dataset.twincacheStatus = twincacheStatus }
@@ -413,7 +434,7 @@ class DatasetServiceImpl(
413434 }
414435 if (dataset.ingestionStatus == IngestionStatusEnum .ERROR ) {
415436 return IngestionStatusEnum .ERROR .value
416- } else if (! unifiedJedis.exists(dataset.twingraphId!! )) {
437+ } else if (useGraphModule && ! unifiedJedis.exists(dataset.twingraphId!! )) {
417438 IngestionStatusEnum .PENDING .value
418439 } else {
419440 dataset
@@ -483,6 +504,7 @@ class DatasetServiceImpl(
483504 }
484505
485506 override fun refreshDataset (organizationId : String , datasetId : String ): DatasetTwinGraphInfo {
507+ checkIfGraphFunctionalityIsAvailable()
486508 val dataset = getVerifiedDataset(organizationId, datasetId, PERMISSION_WRITE )
487509
488510 dataset.takeUnless { it.sourceType == DatasetSourceType .File }
@@ -527,6 +549,7 @@ class DatasetServiceImpl(
527549 }
528550
529551 override fun rollbackRefresh (organizationId : String , datasetId : String ): String {
552+ checkIfGraphFunctionalityIsAvailable()
530553 var dataset = getVerifiedDataset(organizationId, datasetId, PERMISSION_WRITE )
531554
532555 val status = getDatasetTwingraphStatus(organizationId, datasetId)
@@ -556,7 +579,7 @@ class DatasetServiceImpl(
556579 throw CsmAccessForbiddenException (" You are not allowed to delete this Resource" )
557580 }
558581
559- if (unifiedJedis.exists(dataset.twingraphId!! )) {
582+ if (useGraphModule && unifiedJedis.exists(dataset.twingraphId!! )) {
560583 unifiedJedis.del(dataset.twingraphId!! )
561584 }
562585
@@ -626,6 +649,7 @@ class DatasetServiceImpl(
626649 datasetId : String ,
627650 datasetTwinGraphQuery : DatasetTwinGraphQuery
628651 ): List <Any > {
652+ checkIfGraphFunctionalityIsAvailable()
629653 val dataset =
630654 getDatasetWithStatus(organizationId, datasetId, status = IngestionStatusEnum .SUCCESS )
631655
@@ -686,6 +710,7 @@ class DatasetServiceImpl(
686710 twinGraphQuery : DatasetTwinGraphQuery ,
687711 body : Resource
688712 ): TwinGraphBatchResult {
713+ checkIfGraphFunctionalityIsAvailable()
689714 val dataset = getDatasetWithStatus(organizationId, datasetId)
690715 csmRbac.verify(dataset.getRbac(), PERMISSION_WRITE )
691716 resourceScanner.scanMimeTypes(body, listOf (" text/csv" , " text/plain" ))
@@ -709,6 +734,7 @@ class DatasetServiceImpl(
709734 datasetId : String ,
710735 datasetTwinGraphQuery : DatasetTwinGraphQuery
711736 ): DatasetTwinGraphHash {
737+ checkIfGraphFunctionalityIsAvailable()
712738 val dataset =
713739 getDatasetWithStatus(organizationId, datasetId, status = IngestionStatusEnum .SUCCESS )
714740 val bulkQueryKey = bulkQueryKey(dataset.twingraphId!! , datasetTwinGraphQuery.query, null )
@@ -731,6 +757,7 @@ class DatasetServiceImpl(
731757 }
732758
733759 override fun downloadTwingraph (organizationId : String , hash : String ): Resource {
760+ checkIfGraphFunctionalityIsAvailable()
734761 organizationService.getVerifiedOrganization(organizationId)
735762
736763 val bulkQueryId = bulkQueryKey(hash)
@@ -781,6 +808,7 @@ class DatasetServiceImpl(
781808 type : String ,
782809 graphProperties : List <GraphProperties >
783810 ): String {
811+ checkIfGraphFunctionalityIsAvailable()
784812 val dataset = getDatasetWithStatus(organizationId, datasetId)
785813 csmRbac.verify(dataset.getRbac(), PERMISSION_WRITE )
786814 var result = " "
@@ -815,6 +843,7 @@ class DatasetServiceImpl(
815843 type : String ,
816844 ids : List <String >
817845 ): String {
846+ checkIfGraphFunctionalityIsAvailable()
818847 val dataset = getDatasetWithStatus(organizationId, datasetId)
819848 var result = " "
820849 when (type) {
@@ -910,6 +939,7 @@ class DatasetServiceImpl(
910939 type : String ,
911940 graphProperties : List <GraphProperties >
912941 ): String {
942+ checkIfGraphFunctionalityIsAvailable()
913943 val dataset = getDatasetWithStatus(organizationId, datasetId)
914944 csmRbac.verify(dataset.getRbac(), PERMISSION_WRITE )
915945 var result = " "
@@ -944,6 +974,7 @@ class DatasetServiceImpl(
944974 type : String ,
945975 ids : List <String >
946976 ) {
977+ checkIfGraphFunctionalityIsAvailable()
947978 val dataset = getDatasetWithStatus(organizationId, datasetId)
948979 csmRbac.verify(dataset.getRbac(), PERMISSION_WRITE )
949980 return trx(dataset) { localDataset ->
0 commit comments