Skip to content
Snippets Groups Projects
Commit fa4e2f76 authored by piotr.kupczyk@id.ethz.ch's avatar piotr.kupczyk@id.ethz.ch
Browse files

NG_UI : plugins : SSDM-10401 - tool browser with dynamic property and entity validation plugins

parent 4b1e5980
No related branches found
No related tags found
No related merge requests found
import React from 'react' import React from 'react'
import Browser from '@src/js/components/common/browser/Browser.jsx'
import ToolBrowserController from '@src/js/components/tools/browser/ToolBrowserController.js'
import logger from '@src/js/common/logger.js' import logger from '@src/js/common/logger.js'
export default class ToolBrowser extends React.Component { class ToolBrowser extends React.Component {
constructor(props) {
super(props)
this.controller = this.props.controller || new ToolBrowserController()
}
render() { render() {
logger.log(logger.DEBUG, 'ToolBrowser.render') logger.log(logger.DEBUG, 'ToolBrowser.render')
return 'ToolBrowser' return <Browser controller={this.controller} />
} }
} }
export default ToolBrowser
import openbis from '@src/js/services/openbis.js'
import actions from '@src/js/store/actions/actions.js'
import pages from '@src/js/common/consts/pages.js'
import objectType from '@src/js/common/consts/objectType.js'
import objectOperation from '@src/js/common/consts/objectOperation.js'
import BrowserController from '@src/js/components/common/browser/BrowserController.js'
export default class ToolBrowserController extends BrowserController {
doGetPage() {
return pages.TOOLS
}
async doLoadNodes() {
return Promise.all([
openbis.searchPlugins(
new openbis.PluginSearchCriteria(),
new openbis.PluginFetchOptions()
)
]).then(([plugins]) => {
const dynamicPropertyPluginNodes = plugins
.getObjects()
.filter(
plugin => plugin.pluginType === openbis.PluginType.DYNAMIC_PROPERTY
)
.map(plugin => {
return {
id: `dynamicPropertyPlugin/${plugin.name}`,
text: plugin.name,
object: {
type: objectType.DYNAMIC_PROPERTY_PLUGIN,
id: plugin.name
},
canMatchFilter: true,
canRemove: true
}
})
const entityValidationPluginNodes = plugins
.getObjects()
.filter(
plugin => plugin.pluginType === openbis.PluginType.ENTITY_VALIDATION
)
.map(plugin => {
return {
id: `entityValidationPlugin/${plugin.name}`,
text: plugin.name,
object: {
type: objectType.ENTITY_VALIDATION_PLUGIN,
id: plugin.name
},
canMatchFilter: true,
canRemove: true
}
})
let nodes = [
{
id: 'dynamicPropertyPlugins',
text: 'Dynamic Property Plugins',
children: dynamicPropertyPluginNodes,
childrenType: objectType.NEW_DYNAMIC_PROPERTY_PLUGIN,
canAdd: true
},
{
id: 'entityValidationPlugins',
text: 'Entity Validation Plugins',
children: entityValidationPluginNodes,
childrenType: objectType.NEW_ENTITY_VALIDATION_PLUGIN,
canAdd: true
}
]
return nodes
})
}
doNodeAdd(node) {
if (node && node.childrenType) {
this.context.dispatch(
actions.objectNew(this.getPage(), node.childrenType)
)
}
}
doNodeRemove(node) {
if (!node.object) {
return Promise.resolve()
}
const { type, id } = node.object
const reason = 'deleted via ng_ui'
return this._prepareRemoveOperations(type, id, reason)
.then(operations => {
const options = new openbis.SynchronousOperationExecutionOptions()
options.setExecuteInOrder(true)
return openbis.executeOperations(operations, options)
})
.then(() => {
this.context.dispatch(actions.objectDelete(this.getPage(), type, id))
})
.catch(error => {
this.context.dispatch(actions.errorChange(error))
})
}
_prepareRemoveOperations(type, id, reason) {
if (
type === objectType.DYNAMIC_PROPERTY_PLUGIN ||
type === objectType.ENTITY_VALIDATION_PLUGIN
) {
return this._prepareRemovePluginOperations(id, reason)
} else {
throw new Error('Unsupported type: ' + type)
}
}
_prepareRemovePluginOperations(id, reason) {
const options = new openbis.PluginDeletionOptions()
options.setReason(reason)
return Promise.resolve([
new openbis.DeletePluginsOperation(
[new openbis.PluginPermId(id)],
options
)
])
}
doGetObservedModifications() {
return {
[objectType.DYNAMIC_PROPERTY_PLUGIN]: [
objectOperation.CREATE,
objectOperation.DELETE
],
[objectType.ENTITY_VALIDATION_PLUGIN]: [
objectOperation.CREATE,
objectOperation.DELETE
]
}
}
}
...@@ -53,6 +53,8 @@ const CLASS_FULL_NAMES = [ ...@@ -53,6 +53,8 @@ const CLASS_FULL_NAMES = [
'as/dto/person/update/PersonUpdate', 'as/dto/person/update/PersonUpdate',
'as/dto/person/update/UpdatePersonsOperation', 'as/dto/person/update/UpdatePersonsOperation',
'as/dto/plugin/PluginType', 'as/dto/plugin/PluginType',
'as/dto/plugin/delete/PluginDeletionOptions',
'as/dto/plugin/delete/DeletePluginsOperation',
'as/dto/plugin/fetchoptions/PluginFetchOptions', 'as/dto/plugin/fetchoptions/PluginFetchOptions',
'as/dto/plugin/id/PluginPermId', 'as/dto/plugin/id/PluginPermId',
'as/dto/plugin/search/PluginSearchCriteria', 'as/dto/plugin/search/PluginSearchCriteria',
......
...@@ -25,6 +25,7 @@ export default class AppComponentTest extends ComponentTest { ...@@ -25,6 +25,7 @@ export default class AppComponentTest extends ComponentTest {
openbis.mockSearchVocabularies([]) openbis.mockSearchVocabularies([])
openbis.mockSearchPersons([]) openbis.mockSearchPersons([])
openbis.mockSearchGroups([]) openbis.mockSearchGroups([])
openbis.mockSearchPlugins([])
} }
async login(app) { async login(app) {
......
...@@ -85,6 +85,12 @@ const mockSearchVocabularies = vocabularies => { ...@@ -85,6 +85,12 @@ const mockSearchVocabularies = vocabularies => {
searchVocabularies.mockReturnValue(Promise.resolve(searchResult)) searchVocabularies.mockReturnValue(Promise.resolve(searchResult))
} }
const mockSearchPlugins = plugins => {
const searchResult = new dto.SearchResult()
searchResult.setObjects(plugins)
searchPlugins.mockReturnValue(Promise.resolve(searchResult))
}
export default { export default {
login, login,
logout, logout,
...@@ -127,5 +133,6 @@ export default { ...@@ -127,5 +133,6 @@ export default {
mockSearchPersons, mockSearchPersons,
mockSearchSampleTypes, mockSearchSampleTypes,
mockSearchPropertyTypes, mockSearchPropertyTypes,
mockSearchVocabularies mockSearchVocabularies,
mockSearchPlugins
} }
...@@ -30,6 +30,7 @@ import DeleteAuthorizationGroupsOperation from 'as/dto/authorizationgroup/delete ...@@ -30,6 +30,7 @@ import DeleteAuthorizationGroupsOperation from 'as/dto/authorizationgroup/delete
import DeleteDataSetTypesOperation from 'as/dto/dataset/delete/DeleteDataSetTypesOperation' import DeleteDataSetTypesOperation from 'as/dto/dataset/delete/DeleteDataSetTypesOperation'
import DeleteExperimentTypesOperation from 'as/dto/experiment/delete/DeleteExperimentTypesOperation' import DeleteExperimentTypesOperation from 'as/dto/experiment/delete/DeleteExperimentTypesOperation'
import DeleteMaterialTypesOperation from 'as/dto/material/delete/DeleteMaterialTypesOperation' import DeleteMaterialTypesOperation from 'as/dto/material/delete/DeleteMaterialTypesOperation'
import DeletePluginsOperation from 'as/dto/plugin/delete/DeletePluginsOperation'
import DeletePropertyTypesOperation from 'as/dto/property/delete/DeletePropertyTypesOperation' import DeletePropertyTypesOperation from 'as/dto/property/delete/DeletePropertyTypesOperation'
import DeleteRoleAssignmentsOperation from 'as/dto/roleassignment/delete/DeleteRoleAssignmentsOperation' import DeleteRoleAssignmentsOperation from 'as/dto/roleassignment/delete/DeleteRoleAssignmentsOperation'
import DeleteSampleTypesOperation from 'as/dto/sample/delete/DeleteSampleTypesOperation' import DeleteSampleTypesOperation from 'as/dto/sample/delete/DeleteSampleTypesOperation'
...@@ -60,6 +61,7 @@ import PersonPermId from 'as/dto/person/id/PersonPermId' ...@@ -60,6 +61,7 @@ import PersonPermId from 'as/dto/person/id/PersonPermId'
import PersonSearchCriteria from 'as/dto/person/search/PersonSearchCriteria' import PersonSearchCriteria from 'as/dto/person/search/PersonSearchCriteria'
import PersonUpdate from 'as/dto/person/update/PersonUpdate' import PersonUpdate from 'as/dto/person/update/PersonUpdate'
import Plugin from 'as/dto/plugin/Plugin' import Plugin from 'as/dto/plugin/Plugin'
import PluginDeletionOptions from 'as/dto/plugin/delete/PluginDeletionOptions'
import PluginFetchOptions from 'as/dto/plugin/fetchoptions/PluginFetchOptions' import PluginFetchOptions from 'as/dto/plugin/fetchoptions/PluginFetchOptions'
import PluginPermId from 'as/dto/plugin/id/PluginPermId' import PluginPermId from 'as/dto/plugin/id/PluginPermId'
import PluginSearchCriteria from 'as/dto/plugin/search/PluginSearchCriteria' import PluginSearchCriteria from 'as/dto/plugin/search/PluginSearchCriteria'
...@@ -162,6 +164,7 @@ const dto = { ...@@ -162,6 +164,7 @@ const dto = {
DeleteDataSetTypesOperation, DeleteDataSetTypesOperation,
DeleteExperimentTypesOperation, DeleteExperimentTypesOperation,
DeleteMaterialTypesOperation, DeleteMaterialTypesOperation,
DeletePluginsOperation,
DeletePropertyTypesOperation, DeletePropertyTypesOperation,
DeleteRoleAssignmentsOperation, DeleteRoleAssignmentsOperation,
DeleteSampleTypesOperation, DeleteSampleTypesOperation,
...@@ -192,6 +195,7 @@ const dto = { ...@@ -192,6 +195,7 @@ const dto = {
PersonSearchCriteria, PersonSearchCriteria,
PersonUpdate, PersonUpdate,
Plugin, Plugin,
PluginDeletionOptions,
PluginFetchOptions, PluginFetchOptions,
PluginPermId, PluginPermId,
PluginSearchCriteria, PluginSearchCriteria,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment