Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
0bf0257
export folders
reginaAnswer Aug 19, 2025
b5ccf01
Merge branch 'feature/dataflow-import-export' into feature/folder-imp…
reginaAnswer Aug 19, 2025
92f019a
Merge branch 'feature/dataflow-import-export' into feature/folder-imp…
reginaAnswer Aug 20, 2025
9343a83
Merge branch 'feature/dataflow-import-export' into feature/folder-imp…
reginaAnswer Aug 22, 2025
12ef103
merged latest from dataflow-import-export
reginaAnswer Aug 26, 2025
f540610
remove redundant methods
reginaAnswer Aug 29, 2025
a638d27
versioned folder/folder with import/export including dataflow.
reginaAnswer Aug 29, 2025
6c1f389
Merge branch 'feature/dataflow-import-export' into feature/folder-imp…
reginaAnswer Aug 29, 2025
868f221
Merge branch 'develop' into feature/folder-import-export-with-dataflow
reginaAnswer Sep 8, 2025
a998d9f
merged dataflow-import-export
reginaAnswer Sep 26, 2025
0206c1b
Merge branch 'feature/dataflow-import-export' into feature/folder-imp…
reginaAnswer Sep 30, 2025
9d0ad05
export dataflow with paths in all modelitems
reginaAnswer Sep 30, 2025
b6e664d
Merge branch 'feature/dataflow-import-export' into feature/folder-imp…
reginaAnswer Oct 1, 2025
b339e55
Merge branch 'feature/path-endpoints' into feature/folder-import-expo…
reginaAnswer Oct 6, 2025
5b35acf
Merge branch 'feature/path-endpoints' into feature/folder-import-expo…
reginaAnswer Oct 7, 2025
57a134c
Merge branch 'develop' into feature/folder-import-export-with-dataflow
reginaAnswer Oct 8, 2025
1a73bd2
folder and datamodel with dataflow import/export
reginaAnswer Oct 17, 2025
03e464d
Merge branch 'develop' into feature/folder-import-export-with-dataflow
reginaAnswer Oct 17, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import org.maurodata.web.PaginationParams
@Secured(SecurityRule.IS_AUTHENTICATED)
class DataClassComponentController extends AdministeredItemController<DataClassComponent, DataFlow> implements DataClassComponentApi {

AdministeredItemCacheableRepository.DataClassCacheableRepository dataClassRepository
DataClassCacheableRepository dataClassRepository

AdministeredItemCacheableRepository.DataClassComponentCacheableRepository dataClassComponentRepository

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ import org.maurodata.plugin.exporter.DataFlowExporterPlugin
import org.maurodata.plugin.exporter.ModelItemExporterPlugin
import org.maurodata.plugin.importer.DataFlowImporterPlugin
import org.maurodata.plugin.importer.json.JsonDataFlowImporterPlugin
import org.maurodata.service.dataflow.DataflowService
import org.maurodata.service.dataflow.DataFlowService
import org.maurodata.util.exporter.ExporterUtils
import org.maurodata.web.ListResponse
import org.maurodata.web.PaginationParams
Expand All @@ -55,12 +55,11 @@ class DataFlowController extends AdministeredItemController<DataFlow, DataModel>
AdministeredItemCacheableRepository.DataFlowCacheableRepository dataFlowRepository
ModelCacheableRepository.DataModelCacheableRepository dataModelRepository
DataFlowContentRepository dataFlowContentRepository
DataflowService dataFlowService

DataFlowService dataFlowService

DataFlowController(AdministeredItemCacheableRepository.DataFlowCacheableRepository dataFlowRepository,
ModelCacheableRepository.DataModelCacheableRepository dataModelRepository,
DataFlowContentRepository dataFlowContentRepository, DataflowService dataFlowService) {
DataFlowContentRepository dataFlowContentRepository, DataFlowService dataFlowService) {
super(DataFlow, dataFlowRepository, dataModelRepository, dataFlowContentRepository)
this.dataFlowRepository = dataFlowRepository
this.dataModelRepository = dataModelRepository
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ import org.maurodata.domain.search.dto.SearchRequestDTO
import org.maurodata.domain.search.dto.SearchResultsDTO
import org.maurodata.domain.security.Role
import org.maurodata.persistence.cache.AdministeredItemCacheableRepository.DataElementCacheableRepository
import org.maurodata.persistence.cache.AdministeredItemCacheableRepository.DataTypeCacheableRepository
import org.maurodata.persistence.cache.ModelCacheableRepository.DataModelCacheableRepository
import org.maurodata.persistence.cache.ModelCacheableRepository.FolderCacheableRepository
import org.maurodata.persistence.datamodel.DataElementRepository
Expand All @@ -65,8 +64,10 @@ import org.maurodata.persistence.datamodel.DataTypeContentRepository
import org.maurodata.persistence.search.SearchRepository
import org.maurodata.plugin.datatype.DefaultDataTypeProviderPlugin
import org.maurodata.plugin.exporter.DataModelExporterPlugin
import org.maurodata.plugin.exporter.ModelExporterPlugin
import org.maurodata.plugin.importer.DataModelImporterPlugin
import org.maurodata.service.plugin.PluginService
import org.maurodata.util.exporter.ExporterUtils
import org.maurodata.web.ListResponse

@Slf4j
Expand All @@ -81,27 +82,21 @@ class DataModelController extends ModelController<DataModel> implements DataMode
@Inject
SearchRepository searchRepository

@Inject
DataModelService dataModelService

@Inject
DataElementCacheableRepository dataElementCacheableRepository

@Inject
DataTypeCacheableRepository dataTypeCacheableRepository

@Inject
DataTypeContentRepository dataTypeContentRepository

@Inject
DataElementRepository dataElementRepository


DataModelController(DataModelCacheableRepository dataModelRepository, FolderCacheableRepository folderRepository, DataModelContentRepository dataModelContentRepository,
DataModelService dataModelService) {
super(DataModel, dataModelRepository, folderRepository, dataModelContentRepository, dataModelService)
DataModelService domainDataModelService) {
super(DataModel, dataModelRepository, folderRepository, dataModelContentRepository, domainDataModelService)
this.dataModelRepository = dataModelRepository
this.dataModelContentRepository = dataModelContentRepository
this.dataModelService = dataModelService
}

@Audit
Expand All @@ -116,14 +111,14 @@ class DataModelController extends ModelController<DataModel> implements DataMode
DataModel create(UUID folderId, @Body @NonNull DataModel dataModel, @Nullable @QueryValue String defaultDataTypeProvider = null) {
// First try and get the default datatypes if applicable
List<DataType> importedDataTypes = []
if(defaultDataTypeProvider) {
if (defaultDataTypeProvider) {
DefaultDataTypeProviderPlugin defaultDataTypeProviderPlugin = mauroPluginService.getPlugin(DefaultDataTypeProviderPlugin, defaultDataTypeProvider)
PluginService.handlePluginNotFound(defaultDataTypeProviderPlugin, DefaultDataTypeProviderPlugin, defaultDataTypeProvider)
importedDataTypes.addAll(defaultDataTypeProviderPlugin.dataTypes)
}
DataModel newDataModel = super.create(folderId, dataModel) as DataModel
// If we previously got datatypes, now save them into the model
if(importedDataTypes.size() > 0) {
if (importedDataTypes.size() > 0) {
newDataModel.dataTypes = importedDataTypes
newDataModel.dataTypes.each {dataType ->
dataType.dataModel = newDataModel
Expand Down Expand Up @@ -199,7 +194,12 @@ class DataModelController extends ModelController<DataModel> implements DataMode
@Audit
@Get(Paths.DATA_MODEL_EXPORT)
HttpResponse<byte[]> exportModel(UUID id, @Nullable String namespace, @Nullable String name, @Nullable String version) {
super.exportModel(id, namespace, name, version)
ModelExporterPlugin mauroPlugin = mauroPluginService.getPlugin(ModelExporterPlugin, namespace, name, version)
PluginService.handlePluginNotFound(mauroPlugin, namespace, name)

DataModel existing = getModelContent(id)
super.dataModelImportService.updateModelPaths(existing)
ExporterUtils.createExportResponse(mauroPlugin, existing)
}

@Transactional
Expand All @@ -208,10 +208,12 @@ class DataModelController extends ModelController<DataModel> implements DataMode
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Post(Paths.DATA_MODEL_IMPORT)
ListResponse<DataModel> importModel(@Body MultipartBody body, String namespace, String name, @Nullable String version) {
super.importModel(body, namespace, name, version)
List<DataModel> imported = super.consumeExportFile(body, namespace, name, version)
List<DataModel> saved = super.dataModelImportService.saveImportedModels(imported)
smallerResponse(saved)
}

@Audit
@Audit
@Get(Paths.DATA_MODEL_DIFF)
ObjectDiff diffModels(@NonNull UUID id, @NonNull UUID otherId) {
DataModel dataModel = modelContentRepository.findWithContentById(id)
Expand Down Expand Up @@ -519,4 +521,6 @@ class DataModelController extends ModelController<DataModel> implements DataMode
List<String> dataModelTypes() {
return DataModelType.labels()
}


}
Original file line number Diff line number Diff line change
@@ -1,25 +1,5 @@
package org.maurodata.controller.folder

import org.maurodata.ErrorHandler
import org.maurodata.api.Paths
import org.maurodata.api.folder.FolderApi
import org.maurodata.api.model.PermissionsDTO
import org.maurodata.audit.Audit
import org.maurodata.controller.model.ModelController
import org.maurodata.domain.datamodel.DataModel
import org.maurodata.domain.facet.EditType
import org.maurodata.domain.folder.Folder
import org.maurodata.persistence.cache.ModelCacheableRepository.FolderCacheableRepository
import org.maurodata.persistence.folder.FolderContentRepository
import org.maurodata.domain.search.dto.SearchRequestDTO
import org.maurodata.domain.search.dto.SearchResultsDTO
import org.maurodata.plugin.exporter.FolderExporterPlugin
import org.maurodata.plugin.exporter.ModelExporterPlugin
import org.maurodata.plugin.importer.DataModelImporterPlugin
import org.maurodata.plugin.importer.FolderImporterPlugin
import org.maurodata.service.plugin.PluginService
import org.maurodata.web.ListResponse

import groovy.transform.CompileStatic
import groovy.util.logging.Slf4j
import io.micronaut.core.annotation.NonNull
Expand All @@ -43,19 +23,37 @@ import io.micronaut.security.annotation.Secured
import io.micronaut.security.rules.SecurityRule
import io.micronaut.transaction.annotation.Transactional
import jakarta.inject.Inject
import jakarta.inject.Named
import org.maurodata.ErrorHandler
import org.maurodata.api.Paths
import org.maurodata.api.folder.FolderApi
import org.maurodata.api.model.PermissionsDTO
import org.maurodata.audit.Audit
import org.maurodata.controller.model.ModelController
import org.maurodata.domain.facet.EditType
import org.maurodata.domain.folder.Folder
import org.maurodata.domain.search.dto.SearchRequestDTO
import org.maurodata.domain.search.dto.SearchResultsDTO
import org.maurodata.persistence.cache.ModelCacheableRepository.FolderCacheableRepository
import org.maurodata.persistence.folder.FolderContentRepository
import org.maurodata.plugin.exporter.FolderExporterPlugin
import org.maurodata.plugin.importer.FolderImporterPlugin
import org.maurodata.service.core.AllFolderService
import org.maurodata.web.ListResponse

@Slf4j
@CompileStatic
@Controller
@Secured(SecurityRule.IS_ANONYMOUS)
class FolderController extends ModelController<Folder> implements FolderApi {

@Inject
FolderContentRepository folderContentRepository

@Inject
AllFolderService allFolderService

FolderController(FolderCacheableRepository folderRepository, FolderContentRepository folderContentRepository) {
super(Folder, folderRepository, folderRepository, folderContentRepository)
this.folderContentRepository = folderContentRepository
}

@Audit
Expand Down Expand Up @@ -171,7 +169,9 @@ class FolderController extends ModelController<Folder> implements FolderApi {
@Audit(title = EditType.IMPORT, description = 'Import folder')
@Post(Paths.FOLDER_IMPORT)
ListResponse<Folder> importModel(@Body MultipartBody body, String namespace, String name, @Nullable String version) {
super.importModel(body, namespace, name, version)
List<Folder> imported = super.consumeExportFile(body, namespace, name, version) as List<Folder>
List<Folder> saved = allFolderService.importModel(imported, folderContentRepository)
smallerResponse(saved)
}

@Get('/api/folder/search{?requestDTO}')
Expand Down Expand Up @@ -238,16 +238,4 @@ class FolderController extends ModelController<Folder> implements FolderApi {
List<FolderExporterPlugin> folderExporters() {
mauroPluginService.listPlugins(FolderExporterPlugin)
}

/*
@Transactional
@ExecuteOn(TaskExecutors.IO)
@Audit(title = EditType.IMPORT, description = "Import folder")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Post(Paths.FOLDER_IMPORT)
ListResponse<Folder> importFolder(@Body MultipartBody body, String namespace, String name, @Nullable String version) {
super.importModel(body, namespace, name, version)
}
*/

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ import io.micronaut.core.annotation.NonNull
import io.micronaut.core.annotation.Nullable
import io.micronaut.http.HttpResponse
import io.micronaut.http.HttpStatus
import io.micronaut.http.MediaType
import io.micronaut.http.annotation.Body
import io.micronaut.http.annotation.Consumes
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Delete
import io.micronaut.http.annotation.Get
Expand All @@ -31,12 +33,14 @@ import org.maurodata.api.model.ModelVersionedWithTargetsRefDTO
import org.maurodata.api.model.PermissionsDTO
import org.maurodata.audit.Audit
import org.maurodata.controller.model.ModelController
import org.maurodata.domain.facet.EditType
import org.maurodata.domain.folder.Folder
import org.maurodata.domain.folder.FolderService
import org.maurodata.domain.model.version.CreateNewVersionData
import org.maurodata.domain.model.version.FinaliseData
import org.maurodata.persistence.cache.ModelCacheableRepository.FolderCacheableRepository
import org.maurodata.persistence.folder.FolderContentRepository
import org.maurodata.service.core.AllFolderService
import org.maurodata.web.ListResponse

@Slf4j
Expand All @@ -47,15 +51,14 @@ class VersionedFolderController extends ModelController<Folder> implements Versi

private static final String MY_CLASS_TYPE = "VersionedFolder"

@Inject
FolderContentRepository folderContentRepository

@Inject
FolderService folderService
AllFolderService allFolderService

VersionedFolderController(FolderCacheableRepository folderRepository, FolderContentRepository folderContentRepository, FolderService folderService) {
super(Folder, folderRepository, folderRepository, folderContentRepository, folderService)
this.folderService = folderService
this.folderContentRepository = folderContentRepository
}

@Get(Paths.VERSIONED_FOLDER_ID)
Expand Down Expand Up @@ -86,8 +89,15 @@ class VersionedFolderController extends ModelController<Folder> implements Versi
@Transactional
@Post(Paths.CHILD_VERSIONED_FOLDER_LIST)
Folder create(UUID parentId, @Body @NonNull Folder folder) {
folder.authority = super.authorityService.getDefaultAuthority()
Folder cleanItem = cleanBody(folder)

Folder parent = validate(cleanItem, parentId)
folder.setVersionable(true)
super.create(parentId, folder)

Folder created = createEntity(parent, cleanItem)
created = validateAndAddClassifiers(created)
created
}

@Audit
Expand Down Expand Up @@ -139,11 +149,27 @@ class VersionedFolderController extends ModelController<Folder> implements Versi
}


@Audit(title = EditType.EXPORT, description = 'Export Versioned folder')
@Get(Paths.VERSIONED_FOLDER_EXPORT)
@Override
HttpResponse<byte[]> exportModel(UUID id, @Nullable String namespace, @Nullable String name, @Nullable String version) {
super.exportModel(id,namespace, name, version)

}

@Transactional
@ExecuteOn(TaskExecutors.IO)
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Audit(title = EditType.IMPORT, description = 'Import folder')
@Post(Paths.VERSIONED_FOLDER_IMPORT)
@Override
ListResponse<Folder> importModel(@Body MultipartBody body, String namespace, String name, @Nullable String version) {
super.importModel(body, namespace, name, version)
List<Folder> imported = super.consumeExportFile(body, namespace, name, version)
List<Folder> saved = allFolderService.importModel(imported, folderContentRepository)
smallerResponse(saved)
}


@Audit
@Transactional
@Delete(Paths.VERSIONED_FOLDER_ID)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ abstract class AdministeredItemController<I extends AdministeredItem, P extends
@Inject
PathRepository pathRepository

@Inject

AdministeredItemController(Class<I> itemClass, AdministeredItemRepository<I> administeredItemRepository, AdministeredItemRepository<P> parentItemRepository,
AdministeredItemContentRepository administeredItemContentRepository) {
super(administeredItemRepository)
Expand Down Expand Up @@ -257,4 +257,5 @@ abstract class AdministeredItemController<I extends AdministeredItem, P extends
}
}


}
Loading
Loading