From a81c5423337398b8087d56574ba4ac0b3f78281a Mon Sep 17 00:00:00 2001 From: Bruno Ferreira Date: Thu, 2 Aug 2018 15:14:15 +0100 Subject: [PATCH] Fix #1302, #1274 and #1302 Fix #1302 by implementing the suggested UI changes Fix #1319 by refactoring search (details in the issue) and making other improvements to the UI codebase Fix #1274 by replacing parameter `aipId` with `parentId` in the Catalogue search, when the filter is being applied to a list of AIPs --- documentation/Advanced_Search.md | 12 +- .../roda/core/data/common/RodaConstants.java | 50 +- .../index/schema/AbstractSolrCollection.java | 2 + .../org/roda/core/index/schema/Field.java | 3 +- .../core/index/schema/SolrCollection.java | 3 +- .../schema/collections/AIPCollection.java | 1 - .../schema/collections/DIPCollection.java | 2 - .../schema/collections/DIPFileCollection.java | 2 - .../schema/collections/FileCollection.java | 3 - .../schema/collections/FormatCollection.java | 1 - .../schema/collections/JobCollection.java | 2 - .../collections/JobReportCollection.java | 1 - .../collections/LogEntryCollection.java | 2 - .../schema/collections/MemberCollection.java | 2 - .../collections/NotificationCollection.java | 2 - .../PreservationAgentCollection.java | 2 - .../PreservationEventCollection.java | 4 - .../collections/RepresentationCollection.java | 2 - .../RepresentationInformationCollection.java | 2 - .../schema/collections/RiskCollection.java | 2 - .../collections/RiskIncidenceCollection.java | 1 - .../TransferredResourceCollection.java | 3 - .../resources/config/roda-core.properties | 108 +- .../config/i18n/client/ClientMessages.java | 24 +- .../org/roda/wui/client/browse/BrowseAIP.java | 599 ++------- .../roda/wui/client/browse/BrowseAIP.ui.xml | 25 +- .../org/roda/wui/client/browse/BrowseDIP.java | 37 +- .../roda/wui/client/browse/BrowseFile.java | 14 +- .../client/browse/BrowseRepresentation.java | 69 +- .../client/browse/BrowseRepresentation.ui.xml | 7 +- .../org/roda/wui/client/browse/BrowseTop.java | 167 +++ .../roda/wui/client/browse/BrowseTop.ui.xml | 23 + .../browse/CreateDescriptiveMetadata.java | 10 +- .../browse/DescriptiveMetadataHistory.java | 12 +- .../wui/client/browse/DipFilePreview.java | 23 +- .../browse/EditDescriptiveMetadata.java | 6 +- .../wui/client/browse/EditPermissions.java | 18 +- .../wui/client/browse/IndexedFilePreview.java | 49 +- .../wui/client/browse/PreservationEvents.java | 36 +- .../client/browse/PreservationEvents.ui.xml | 2 +- .../client/browse/ShowPreservationEvent.java | 6 +- .../common/IncrementalAssociativeList.java | 2 +- .../common/IncrementalRelationList.java | 2 +- .../wui/client/common/NavigationToolbar.java | 21 +- .../org/roda/wui/client/common/UserLogin.java | 2 +- .../wui/client/common/actions/Actionable.java | 6 +- .../wui/client/common/actions/AipActions.java | 34 +- .../common/actions/DisseminationActions.java | 28 +- .../actions/DisseminationFileActions.java | 15 +- .../client/common/actions/FileActions.java | 19 +- .../client/common/actions/FormatActions.java | 17 +- .../actions/PreservationAgentActions.java | 15 +- .../actions/PreservationEventActions.java | 15 +- .../common/actions/RODAMemberActions.java | 30 +- .../common/actions/RepresentationActions.java | 20 +- .../RepresentationInformationActions.java | 17 +- .../client/common/actions/RiskActions.java | 23 +- .../common/actions/RiskIncidenceActions.java | 50 +- .../actions/TransferredResourceActions.java | 21 +- .../actions/model/ActionableBundle.java | 26 + ...tionsButton.java => ActionableButton.java} | 15 +- .../common/actions/model/ActionableGroup.java | 39 + ...ActionsTitle.java => ActionableTitle.java} | 4 +- .../common/actions/model/ActionsBundle.java | 28 - .../common/actions/model/ActionsGroup.java | 39 - ...ctionableButton.java => ActionButton.java} | 17 +- .../widgets/ActionableWidgetBuilder.java | 134 +- .../common/dialogs/DefaultSelectDialog.java | 84 +- .../common/dialogs/DefaultSelectDialog.ui.xml | 5 +- .../common/dialogs/MemberSelectDialog.java | 14 +- .../RepresentationInformationDialogs.java | 177 ++- .../common/dialogs/SelectAipDialog.java | 28 +- .../common/dialogs/SelectDialogFactory.java | 31 +- .../common/dialogs/SelectFileDialog.java | 30 +- .../common/dialogs/SelectJobDialog.java | 22 +- .../common/dialogs/SelectLogEntryDialog.java | 25 +- .../dialogs/SelectNotificationDialog.java | 25 +- .../common/dialogs/SelectReportDialog.java | 25 +- .../dialogs/SelectRepresentationDialog.java | 32 +- ...SelectRepresentationInformationDialog.java | 24 +- .../common/dialogs/SelectRiskDialog.java | 22 +- .../dialogs/SelectTransferResourceDialog.java | 26 +- .../roda/wui/client/common/lists/AIPList.java | 19 +- .../wui/client/common/lists/DIPFileList.java | 20 +- .../roda/wui/client/common/lists/DIPList.java | 19 +- .../wui/client/common/lists/FormatList.java | 18 +- .../common/lists/IngestJobReportList.java | 13 +- .../roda/wui/client/common/lists/JobList.java | 19 +- .../wui/client/common/lists/LogEntryList.java | 14 +- .../client/common/lists/NotificationList.java | 19 +- .../common/lists/PreservationAgentList.java | 11 +- .../common/lists/PreservationEventList.java | 11 +- .../lists/RepresentationInformationList.java | 21 +- .../common/lists/RepresentationList.java | 20 +- .../common/lists/RiskIncidenceList.java | 20 +- .../wui/client/common/lists/RiskList.java | 36 +- .../client/common/lists/RodaMemberList.java | 18 +- .../client/common/lists/SearchFileList.java | 23 +- .../client/common/lists/SimpleFileList.java | 20 +- .../common/lists/SimpleJobReportList.java | 35 +- .../common/lists/SimpleRodaMemberList.java | 14 +- .../common/lists/TransferredResourceList.java | 33 +- .../lists/pagination/ListSelectionUtils.java | 2 +- .../common/lists/utils/AsyncTableCell.java | 344 +++-- .../lists/utils/BasicAsyncTableCell.java | 67 - .../common/lists/utils/ListBuilder.java | 35 + .../common/lists/utils/ListFactory.java | 85 +- .../search/AdvancedSearchFieldsPanel.java | 33 +- .../client/common/search/CatalogueSearch.java | 118 ++ .../search/CatalogueSearch.ui.xml} | 3 +- .../wui/client/common/search/Dropdown.java | 44 +- .../client/common/search/EntitySearch.java | 13 - .../wui/client/common/search/MainSearch.java | 383 ------ .../client/common/search/MainSearch.ui.xml | 11 - .../client/common/search/SearchFilters.java | 145 +- .../common/search/SearchOptionsBundle.java | 70 + .../wui/client/common/search/SearchPanel.java | 435 +++--- .../client/common/search/SearchPanel.ui.xml | 16 +- .../client/common/search/SearchWrapper.java | 313 +++++ .../client/common/search/SelectedPanel.java | 93 +- .../client/common/utils/HtmlSnippetUtils.java | 4 +- .../ingest/appraisal/IngestAppraisal.java | 40 +- .../ingest/appraisal/IngestAppraisal.ui.xml | 2 +- .../ingest/process/PluginParameterPanel.java | 2 +- .../wui/client/ingest/process/ShowJob.java | 115 +- .../wui/client/ingest/process/ShowJob.ui.xml | 7 +- .../ingest/transfer/IngestTransfer.java | 41 +- .../ingest/transfer/TransferUpload.java | 28 +- .../roda/wui/client/main/BreadcrumbUtils.java | 14 +- .../roda/wui/client/main/ContentPanel.java | 6 +- .../java/org/roda/wui/client/main/Login.java | 2 +- .../java/org/roda/wui/client/main/Main.java | 6 +- .../java/org/roda/wui/client/main/Menu.java | 56 +- .../wui/client/management/CreateGroup.java | 2 +- .../wui/client/management/CreateUser.java | 2 +- .../roda/wui/client/management/EditGroup.java | 2 +- .../roda/wui/client/management/EditUser.java | 2 +- .../client/management/MemberManagement.java | 51 +- .../client/management/MemberManagement.ui.xml | 3 +- .../management/NotificationRegister.java | 3 - .../wui/client/management/PasswordPanel.java | 2 +- .../client/management/PermissionsPanel.java | 2 +- .../roda/wui/client/management/Profile.java | 2 +- .../wui/client/management/RecoverLogin.java | 2 +- .../roda/wui/client/management/Register.java | 2 +- .../wui/client/management/ResetPassword.java | 2 +- .../wui/client/management/ShowLogEntry.java | 2 +- .../roda/wui/client/management/UserLog.java | 28 +- .../roda/wui/client/management/UserLog.ui.xml | 5 +- .../wui/client/management/VerifyEmail.java | 2 +- .../roda/wui/client/planning/EditFormat.java | 2 +- .../EditRepresentationInformation.java | 2 +- .../roda/wui/client/planning/EditRisk.java | 2 +- .../client/planning/EditRiskIncidence.java | 2 +- .../wui/client/planning/FormatRegister.java | 44 +- .../wui/client/planning/FormatRegister.ui.xml | 6 +- .../client/planning/PreservationAgents.java | 39 +- .../client/planning/PreservationAgents.ui.xml | 3 +- ...RepresentationInformationAssociations.java | 93 +- ...presentationInformationAssociations.ui.xml | 3 +- .../RepresentationInformationDataPanel.java | 3 +- .../RepresentationInformationNetwork.java | 66 +- .../RepresentationInformationNetwork.ui.xml | 3 +- .../wui/client/planning/RiskDataPanel.java | 5 +- .../roda/wui/client/planning/RiskHistory.java | 4 +- .../planning/RiskIncidenceRegister.java | 209 +-- .../planning/RiskIncidenceRegister.ui.xml | 35 +- .../wui/client/planning/RiskRegister.java | 8 +- .../wui/client/planning/RiskShowPanel.java | 63 +- .../wui/client/planning/RiskShowPanel.ui.xml | 3 +- .../roda/wui/client/planning/ShowFormat.java | 3 +- .../planning/ShowPreservationAgent.java | 2 +- .../ShowRepresentationInformation.java | 3 +- .../roda/wui/client/planning/ShowRisk.java | 10 +- .../client/planning/ShowRiskIncidence.java | 2 +- .../wui/client/process/ActionProcess.java | 2 +- .../wui/client/process/CreateActionJob.java | 12 +- .../wui/client/process/CreateDefaultJob.java | 40 +- .../wui/client/process/CreateIngestJob.java | 34 +- .../wui/client/process/IngestProcess.java | 2 +- .../wui/client/process/InternalProcess.java | 2 +- .../wui/client/process/InternalProcess.ui.xml | 2 +- .../wui/client/search/ActionLogSearch.java | 155 --- .../org/roda/wui/client/search/JobSearch.java | 227 +--- .../roda/wui/client/search/JobSearch.ui.xml | 3 +- .../wui/client/search/NotificationSearch.java | 131 +- .../client/search/NotificationSearch.ui.xml | 3 +- .../search/PreservationEventsSearch.java | 156 +-- .../search/PreservationEventsSearch.ui.xml | 3 +- .../org/roda/wui/client/search/Relation.java | 4 +- .../roda/wui/client/search/RiskSearch.java | 210 +-- .../roda/wui/client/search/RiskSearch.ui.xml | 3 +- .../org/roda/wui/client/search/Search.java | 41 +- .../org/roda/wui/client/search/Search.ui.xml | 2 +- .../search/TransferredResourceSearch.java | 143 +- .../search/TransferredResourceSearch.ui.xml | 3 +- .../client/tools/ConfigurationManager.java | 21 + .../client/tools/DescriptionLevelUtils.java | 2 +- .../wui/common/client/tools/HistoryUtils.java | 115 +- .../wui/common/client/tools/Humanize.java | 2 +- .../roda/wui/common/client/widgets/Toast.java | 2 +- .../config/i18n/ServerMessages.properties | 207 +-- .../i18n/ServerMessages_es_CL.properties | 44 +- .../i18n/ServerMessages_pt_PT.properties | 208 +-- .../i18n/client/ClientMessages.properties | 71 +- .../client/ClientMessages_es_CL.properties | 8 +- .../client/ClientMessages_pt_PT.properties | 69 +- .../main/resources/config/roda-wui.properties | 1174 ++++++++++------- .../resources/org/roda/wui/public/Main.css | 243 +++- 209 files changed, 4290 insertions(+), 5267 deletions(-) create mode 100644 roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseTop.java create mode 100644 roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseTop.ui.xml create mode 100644 roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionableBundle.java rename roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/{ActionsButton.java => ActionableButton.java} (68%) create mode 100644 roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionableGroup.java rename roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/{ActionsTitle.java => ActionableTitle.java} (84%) delete mode 100644 roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionsBundle.java delete mode 100644 roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionsGroup.java rename roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/widgets/{ActionableButton.java => ActionButton.java} (83%) delete mode 100644 roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/BasicAsyncTableCell.java create mode 100644 roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/ListBuilder.java create mode 100644 roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/CatalogueSearch.java rename roda-ui/roda-wui/src/main/java/org/roda/wui/client/{search/ActionLogSearch.ui.xml => common/search/CatalogueSearch.ui.xml} (71%) delete mode 100644 roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/EntitySearch.java delete mode 100644 roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/MainSearch.java delete mode 100644 roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/MainSearch.ui.xml create mode 100644 roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchOptionsBundle.java create mode 100644 roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchWrapper.java delete mode 100644 roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/ActionLogSearch.java diff --git a/documentation/Advanced_Search.md b/documentation/Advanced_Search.md index 7a9b88779b..6fd067ec33 100644 --- a/documentation/Advanced_Search.md +++ b/documentation/Advanced_Search.md @@ -60,11 +60,11 @@ To apply the changes on the stylesheet you must ingest new content or re-index e Change your `roda-wui.properties` to [add an new advanced search field item](https://github.com/keeps/roda/blob/master/roda-ui/roda-wui/src/main/resources/config/roda-wui.properties#L165): ```javaproperties -ui.search.fields.items = destructiondate # add new field to the list of fields for items (i.e. AIPs), other options are representations or files -ui.search.fields.items.destructiondate.fields = destructiondate_txt # the id of the field in the index, equal to the one on the stylesheet you create -ui.search.fields.items.destructiondate.i18n = ui.search.fields.items.destructiondate # key for the translation in ServerMessages.properties -ui.search.fields.items.destructiondate.type = text # the type of the field which influences the search form input -ui.search.fields.items.destructiondate.fixed = true # if it appears on advanced search by default or if it needs to be added via the "ADD SEARCH FIELD" button. +ui.search.fields.IndexedAIP = destructiondate # add new field to the list of fields for items (i.e. AIPs), other options are representations or files +ui.search.fields.IndexedAIP.destructiondate.fields = destructiondate_txt # the id of the field in the index, equal to the one on the stylesheet you create +ui.search.fields.IndexedAIP.destructiondate.i18n = ui.search.fields.IndexedAIP.destructiondate # key for the translation in ServerMessages.properties +ui.search.fields.IndexedAIP.destructiondate.type = text # the type of the field which influences the search form input +ui.search.fields.IndexedAIP.destructiondate.fixed = true # if it appears on advanced search by default or if it needs to be added via the "ADD SEARCH FIELD" button. ``` You should also add the necessary translations to your `$RODA_HOME/config/i18n/ServerMessages.properties`, and in all languages you which to support. @@ -77,5 +77,5 @@ ui.browse.metadata.descriptive.type.golikswe_1=Golik SWE (version 1) Add [translations for your fields](https://github.com/keeps/roda/blob/master/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages.properties#L2): ```javaproperties -ui.search.fields.items.destructiondate= Destruction Date +ui.search.fields.IndexedAIP.destructiondate= Destruction Date ``` diff --git a/roda-common/roda-common-data/src/main/java/org/roda/core/data/common/RodaConstants.java b/roda-common/roda-common-data/src/main/java/org/roda/core/data/common/RodaConstants.java index 6934689160..50d725e856 100644 --- a/roda-common/roda-common-data/src/main/java/org/roda/core/data/common/RodaConstants.java +++ b/roda-common/roda-common-data/src/main/java/org/roda/core/data/common/RodaConstants.java @@ -96,6 +96,7 @@ public enum DateGranularity { public static final String UI_GOOGLE_RECAPTCHA_CODE_PROPERTY = "ui.google.recaptcha.code"; public static final String UI_LISTS_PROPERTY = "ui.lists"; + public static final String UI_LISTS_FACETS_QUERY_PROPERTY = "facets.query"; public static final String UI_LISTS_FACETS_PARAMETERS_PROPERTY = "facets.parameters"; public static final String UI_LISTS_FACETS_PARAMETERS_TYPE_PROPERTY = "type"; @@ -109,6 +110,17 @@ public enum DateGranularity { public static final String UI_LISTS_FACETS_PARAMETERS_ARGS_VALUES_PROPERTY = "values"; public static final String UI_LISTS_FACETS_PARAMETERS_ARGS_MINCOUNT_PROPERTY = "minCount"; + public static final String UI_LISTS_SEARCH_ENABLED_PROPERTY = "search.enabled"; + public static final String UI_LISTS_SEARCH_PREFILTERS_VISIBLE_PROPERTY = "search.prefilters.visible"; + public static final String UI_LISTS_SEARCH_ADVANCED_ENABLED_PROPERTY = "search.advanced.enabled"; + public static final String UI_LISTS_SEARCH_SELECTEDINFO_ALWAYSVISIBLE_PROPERTY = "search.selectedInfo.alwaysVisible"; + public static final String UI_LISTS_SEARCH_SELECTEDINFO_ICON_PROPERTY = "search.selectedInfo.icon"; + public static final String UI_LISTS_SEARCH_SELECTEDINFO_LABEL_SELECTED_I18N_SINGLE_PROPERTY = "search.selectedInfo.label.selected.i18n.single"; + public static final String UI_LISTS_SEARCH_SELECTEDINFO_LABEL_SELECTED_I18N_MULTIPLE_PROPERTY = "search.selectedInfo.label.selected.i18n.multiple"; + public static final String UI_LISTS_SEARCH_SELECTEDINFO_LABEL_DEFAULT_I18N_PROPERTY = "search.selectedInfo.label.default.i18n"; + + public static final String UI_ICONS_CLASS = "ui.icons.class"; + /* * RODA objects */ @@ -580,6 +592,8 @@ public enum OrchestratorType { public static final String INDEX_UUID = "uuid"; public static final String INDEX_ID = "id"; public static final String INDEX_STATE = "state"; + public static final String INDEX_SEARCH = "search"; + public static final String INDEX_WILDCARD = "*"; /* * AIP FIELDS @@ -625,6 +639,8 @@ public enum OrchestratorType { public static final String AIP_UPDATED_ON = "updatedOn"; public static final String AIP_UPDATED_BY = "updatedBy"; + // @deprecated use {@link #INDEX_SEARCH} instead. + @Deprecated() public static final String AIP_SEARCH = "search"; // AIP types @@ -657,6 +673,8 @@ public enum OrchestratorType { public static final String REPRESENTATION_UPDATED_BY = "updatedBy"; public static final String REPRESENTATION_STATES = "representationStates"; + // @deprecated use {@link #INDEX_SEARCH} instead. + @Deprecated() public static final String REPRESENTATION_SEARCH = "search"; // Representation types @@ -733,6 +751,8 @@ public enum OrchestratorType { public static final String LOG_PARAMETERS = "parameters"; public static final String LOG_STATE = "state"; public static final String LOG_FILE_ID = "fileID"; + // @deprecated use {@link #INDEX_SEARCH} instead. + @Deprecated() public static final String LOG_SEARCH = "search"; // MEMBER: USER or GROUP @@ -745,6 +765,8 @@ public enum OrchestratorType { public static final String MEMBERS_USERS = "users"; public static final String MEMBERS_ROLES_DIRECT = "rolesDirect"; public static final String MEMBERS_ROLES_ALL = "rolesAll"; + // @deprecated use {@link #INDEX_SEARCH} instead. + @Deprecated() public static final String MEMBERS_SEARCH = "search"; public static final String MEMBERS_EMAIL = "email"; @@ -759,6 +781,8 @@ public enum OrchestratorType { public static final String TRANSFERRED_RESOURCE_SIZE = "size"; public static final String TRANSFERRED_RESOURCE_ANCESTORS = "ancestors"; public static final String TRANSFERRED_RESOURCE_LAST_SCAN_DATE = "lastScanDate"; + // @deprecated use {@link #INDEX_SEARCH} instead. + @Deprecated() public static final String TRANSFERRED_RESOURCE_SEARCH = "search"; // REST public static final String TRANSFERRED_RESOURCE_DIRECTORY_NAME = "name"; @@ -790,6 +814,8 @@ public enum OrchestratorType { public static final String JOB_HAS_FAILURES = "hasFailures"; public static final String JOB_FILE_EXTENSION = ".json"; + // @deprecated use {@link #INDEX_SEARCH} instead. + @Deprecated() public static final String JOB_SEARCH = "search"; /* Plugins related parameters */ @@ -916,6 +942,8 @@ public enum OrchestratorType { public static final String JOB_REPORT_UNSUCCESSFUL_PLUGINS = "unsuccessfulPlugins"; public static final String JOB_REPORT_UNSUCCESSFUL_PLUGINS_COUNTER = "unsuccessfulPluginsCounter"; public static final String JOB_REPORT_FILE_EXTENSION = ".json"; + // @deprecated use {@link #INDEX_SEARCH} instead. + @Deprecated() public static final String JOB_REPORT_SEARCH = "search"; public static final String FILE_PATH = "path"; @@ -944,6 +972,8 @@ public enum OrchestratorType { public static final String FILE_FULLTEXT = "fulltext"; public static final String FILE_ANCESTORS = "ancestors"; public static final String FILE_FORMAT_DESIGNATION = "formatDesignation"; + // @deprecated use {@link #INDEX_SEARCH} instead. + @Deprecated() public static final String FILE_SEARCH = "search"; /* Risks */ @@ -983,6 +1013,8 @@ public enum OrchestratorType { public static final String RISK_UPDATED_BY = "updatedBy"; public static final String RISK_FILE_EXTENSION = ".json"; + // @deprecated use {@link #INDEX_SEARCH} instead. + @Deprecated() public static final String RISK_SEARCH = "search"; public static final String RISK_INCIDENCE_ID = "id"; @@ -1006,6 +1038,8 @@ public enum OrchestratorType { public static final String RISK_INCIDENCE_FILE_PATH_COMPUTED = "filePathComputed"; public static final String RISK_INCIDENCE_FILE_PATH_COMPUTED_SEPARATOR = "/"; public static final String RISK_INCIDENCE_FILE_EXTENSION = ".json"; + // @deprecated use {@link #INDEX_SEARCH} instead. + @Deprecated() public static final String RISK_INCIDENCE_SEARCH = "search"; /* Representation information */ @@ -1032,6 +1066,8 @@ public enum OrchestratorType { public static final String REPRESENTATION_INFORMATION_UPDATED_BY = "updatedBy"; public static final String REPRESENTATION_INFORMATION_FILE_EXTENSION = ".xml"; + // @deprecated use {@link #INDEX_SEARCH} instead. + @Deprecated() public static final String REPRESENTATION_INFORMATION_SEARCH = "search"; public static final String ONE_OF_FORMAT_FIELDS = "oneOfFormatFields"; @@ -1059,6 +1095,8 @@ public enum OrchestratorType { public static final String FORMAT_VERSIONS = "versions"; public static final String FORMAT_FILE_EXTENSION = ".json"; + // @deprecated use {@link #INDEX_SEARCH} instead. + @Deprecated() public static final String FORMAT_SEARCH = "search"; /* Notifications */ @@ -1074,6 +1112,8 @@ public enum OrchestratorType { public static final String NOTIFICATION_STATE = "state"; public static final String NOTIFICATION_FILE_EXTENSION = ".json"; + // @deprecated use {@link #INDEX_SEARCH} instead. + @Deprecated() public static final String NOTIFICATION_SEARCH = "search"; public static final String NOTIFICATION_VARIOUS_RECIPIENT_USERS = "various-recipient-users"; @@ -1103,6 +1143,8 @@ public enum OrchestratorType { public static final String DIP_ALL_REPRESENTATION_UUIDS = "allRepresentationUUIDs"; public static final String DIP_FILE_EXTENSION = ".json"; + // @deprecated use {@link #INDEX_SEARCH} instead. + @Deprecated() public static final String DIP_SEARCH = "search"; public static final String DIPFILE_ID = "id"; @@ -1121,6 +1163,8 @@ public enum OrchestratorType { public static final String DIPFILE_FORMAT_EXTENSION = "formatExtension"; public static final String DIPFILE_FILE_EXTENSION = ".json"; + // @deprecated use {@link #INDEX_SEARCH} instead. + @Deprecated() public static final String DIPFILE_SEARCH = "search"; /* View representation */ @@ -1155,6 +1199,8 @@ public enum OrchestratorType { public static final String PRESERVATION_EVENT_LINKING_AGENT_IDENTIFIER = "linkingAgentIdentifier"; public static final String PRESERVATION_EVENT_LINKING_OUTCOME_OBJECT_IDENTIFIER = "linkingOutcomeObjectIdentifier"; public static final String PRESERVATION_EVENT_LINKING_SOURCE_OBJECT_IDENTIFIER = "linkingSourceObjectIdentifier"; + // @deprecated use {@link #INDEX_SEARCH} instead. + @Deprecated() public static final String PRESERVATION_EVENT_SEARCH = "search"; /* Preservation agents fields */ @@ -1165,6 +1211,8 @@ public enum OrchestratorType { public static final String PRESERVATION_AGENT_VERSION = "version"; public static final String PRESERVATION_AGENT_NOTE = "note"; public static final String PRESERVATION_AGENT_ROLES = "roles"; + // @deprecated use {@link #INDEX_SEARCH} instead. + @Deprecated() public static final String PRESERVATION_AGENT_SEARCH = "search"; public static final String PRESERVATION_TYPE_AGENT = "agent"; @@ -1317,8 +1365,6 @@ public String toString() { public static final String SEARCH_FIELD_TYPE_SUGGEST_PARTIAL = "suggestPartial"; public static final String SEARCH_FIELD_TYPE_CONTROLLED = "controlled"; - public static final String SEARCH_BUTTON_EVENT_MARK = "do_search"; - public static final String METADATA_VERSION_SEPARATOR = "_"; public static final String METADATA_TEMPLATE_FOLDER = "templates"; public static final String METADATA_TEMPLATE_EXTENSION = ".xml.hbs"; diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/AbstractSolrCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/AbstractSolrCollection.java index 294a40e14a..039af165b1 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/AbstractSolrCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/AbstractSolrCollection.java @@ -38,6 +38,8 @@ public List getFields() { .setDefaultValue(AIPState.getDefault().toString())); } + ret.add(SolrCollection.getSearchField()); + return ret; } diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/Field.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/Field.java index 64003adef8..0f368e672a 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/Field.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/Field.java @@ -6,6 +6,7 @@ import org.apache.solr.client.solrj.request.schema.SchemaRequest.AddField; import org.apache.solr.client.solrj.request.schema.SchemaRequest.Update; +import org.roda.core.data.common.RodaConstants; public class Field { @@ -25,7 +26,7 @@ public class Field { public static final String TYPE_DATE = "pdate"; public static final String TYPE_STRING = "string"; - public static final String FIELD_SEARCH = "search"; + public static final String FIELD_SEARCH = RodaConstants.INDEX_SEARCH; public static final String TYPE_SEARCH = TYPE_TEXT; private final String name; diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/SolrCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/SolrCollection.java index e6ccfc7979..12d9aa4223 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/SolrCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/SolrCollection.java @@ -6,6 +6,7 @@ import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrInputDocument; +import org.roda.core.data.common.RodaConstants; import org.roda.core.data.exceptions.AuthorizationDeniedException; import org.roda.core.data.exceptions.GenericException; import org.roda.core.data.exceptions.NotFoundException; @@ -26,7 +27,7 @@ static Field getSearchField() { } static CopyField getCopyAllToSearchField() { - return new CopyField("*", Field.FIELD_SEARCH); + return new CopyField(RodaConstants.INDEX_WILDCARD, Field.FIELD_SEARCH); } static Field getSortFieldOf(String field) { diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/AIPCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/AIPCollection.java index c75f1e69b4..7a4579aa1c 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/AIPCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/AIPCollection.java @@ -90,7 +90,6 @@ public List getFields() { fields.add(new Field(RodaConstants.AIP_DATE_FINAL, Field.TYPE_DATE)); fields.add(SolrCollection.getSortFieldOf(RodaConstants.AIP_TITLE)); - fields.add(SolrCollection.getSearchField()); return fields; } diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/DIPCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/DIPCollection.java index c64359ebda..a0fb6dc2fa 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/DIPCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/DIPCollection.java @@ -81,8 +81,6 @@ public List getFields() { fields.add( new Field(RodaConstants.DIP_ALL_REPRESENTATION_UUIDS, Field.TYPE_STRING).setStored(false).setMultiValued(true)); - fields.add(SolrCollection.getSearchField()); - return fields; } diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/DIPFileCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/DIPFileCollection.java index 8dc821c459..bdc0344f8a 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/DIPFileCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/DIPFileCollection.java @@ -18,7 +18,6 @@ import org.roda.core.index.schema.AbstractSolrCollection; import org.roda.core.index.schema.CopyField; import org.roda.core.index.schema.Field; -import org.roda.core.index.schema.SolrCollection; import org.roda.core.index.utils.SolrUtils; import org.roda.core.model.utils.ModelUtils; import org.roda.core.util.IdUtils; @@ -66,7 +65,6 @@ public List getFields() { fields.add(new Field(RodaConstants.DIPFILE_SIZE, Field.TYPE_LONG).setRequired(true)); fields.add(new Field(RodaConstants.DIPFILE_STORAGE_PATH, Field.TYPE_STRING)); - fields.add(SolrCollection.getSearchField()); return fields; } diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/FileCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/FileCollection.java index f152047b8f..1915948005 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/FileCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/FileCollection.java @@ -27,7 +27,6 @@ import org.roda.core.index.schema.AbstractSolrCollection; import org.roda.core.index.schema.CopyField; import org.roda.core.index.schema.Field; -import org.roda.core.index.schema.SolrCollection; import org.roda.core.index.utils.SolrUtils; import org.roda.core.model.utils.ModelUtils; import org.roda.core.storage.Binary; @@ -100,8 +99,6 @@ public List getFields() { fields.add(new Field(RodaConstants.INGEST_JOB_ID, Field.TYPE_STRING)); fields.add(new Field(RodaConstants.INGEST_UPDATE_JOB_IDS, Field.TYPE_STRING).setMultiValued(true)); - fields.add(SolrCollection.getSearchField()); - return fields; } diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/FormatCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/FormatCollection.java index fe9d56e8a2..3fb6716b73 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/FormatCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/FormatCollection.java @@ -72,7 +72,6 @@ public List getFields() { fields.add(new Field(RodaConstants.FORMAT_ALTERNATIVE_DESIGNATIONS, Field.TYPE_STRING).setMultiValued(true)); fields.add(new Field(RodaConstants.FORMAT_VERSIONS, Field.TYPE_STRING).setMultiValued(true)); - fields.add(SolrCollection.getSearchField()); fields.add(SolrCollection.getSortFieldOf(RodaConstants.FORMAT_NAME)); return fields; diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/JobCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/JobCollection.java index 1100a41a3b..761ee1f867 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/JobCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/JobCollection.java @@ -79,8 +79,6 @@ public List getFields() { fields.add(new Field(RodaConstants.JOB_OUTCOME_OBJECTS_WITH_MANUAL_INTERVENTION, Field.TYPE_INT)); fields.add(new Field(RodaConstants.JOB_HAS_FAILURES, Field.TYPE_BOOLEAN).setStored(false)); - fields.add(SolrCollection.getSearchField()); - return fields; } diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/JobReportCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/JobReportCollection.java index 0d4749cfbe..125b50d204 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/JobReportCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/JobReportCollection.java @@ -87,7 +87,6 @@ public List getFields() { fields.add(new Field(RodaConstants.JOB_REPORT_UNSUCCESSFUL_PLUGINS, Field.TYPE_STRING).setMultiValued(true).setStored(false)); fields.add(new Field(RodaConstants.JOB_REPORT_UNSUCCESSFUL_PLUGINS_COUNTER, Field.TYPE_INT).setStored(false)); - fields.add(SolrCollection.getSearchField()); return fields; } diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/LogEntryCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/LogEntryCollection.java index 4098b89424..983876c51c 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/LogEntryCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/LogEntryCollection.java @@ -68,8 +68,6 @@ public List getFields() { fields.add(new Field(RodaConstants.LOG_STATE, Field.TYPE_STRING).setRequired(true)); fields.add(new Field(RodaConstants.LOG_PARAMETERS, Field.TYPE_STRING).setIndexed(false).setDocValues(false)); - fields.add(SolrCollection.getSearchField()); - return fields; } diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/MemberCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/MemberCollection.java index 00f540242d..efdb9a2130 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/MemberCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/MemberCollection.java @@ -68,8 +68,6 @@ public List getFields() { fields.add(new Field(RodaConstants.MEMBERS_FULLNAME, Field.TYPE_STRING)); fields.add(new Field(RodaConstants.MEMBERS_EMAIL, Field.TYPE_STRING)); - fields.add(SolrCollection.getSearchField()); - return fields; } diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/NotificationCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/NotificationCollection.java index 76a1f7de1d..495e8b9ee3 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/NotificationCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/NotificationCollection.java @@ -65,8 +65,6 @@ public List getFields() { fields.add(new Field(RodaConstants.NOTIFICATION_STATE, Field.TYPE_STRING).setRequired(true)); fields.add(new Field(RodaConstants.NOTIFICATION_ACKNOWLEDGED_USERS, Field.TYPE_STRING).setIndexed(false).setDocValues(false)); - fields.add(SolrCollection.getSearchField()); - return fields; } diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/PreservationAgentCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/PreservationAgentCollection.java index cf843c2a46..4487fcb5e7 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/PreservationAgentCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/PreservationAgentCollection.java @@ -66,8 +66,6 @@ public List getFields() { fields.add(new Field(RodaConstants.PRESERVATION_AGENT_NOTE, Field.TYPE_STRING)); fields.add(new Field(RodaConstants.PRESERVATION_AGENT_VERSION, Field.TYPE_STRING)); - fields.add(SolrCollection.getSearchField()); - return fields; } diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/PreservationEventCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/PreservationEventCollection.java index 0af565df50..e0db017ef0 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/PreservationEventCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/PreservationEventCollection.java @@ -17,12 +17,10 @@ import org.roda.core.data.exceptions.NotFoundException; import org.roda.core.data.exceptions.RequestNotValidException; import org.roda.core.data.utils.JsonUtils; -import org.roda.core.data.utils.URNUtils; import org.roda.core.data.v2.ip.metadata.IndexedPreservationEvent; import org.roda.core.data.v2.ip.metadata.IndexedPreservationEvent.PreservationMetadataEventClass; import org.roda.core.data.v2.ip.metadata.LinkingIdentifier; import org.roda.core.data.v2.ip.metadata.PreservationMetadata; -import org.roda.core.data.v2.ip.metadata.PreservationMetadata.PreservationMetadataType; import org.roda.core.data.v2.validation.ValidationException; import org.roda.core.index.schema.AbstractSolrCollection; import org.roda.core.index.schema.CopyField; @@ -87,8 +85,6 @@ public List getFields() { fields.add(new Field(RodaConstants.PRESERVATION_EVENT_LINKING_SOURCE_OBJECT_IDENTIFIER, Field.TYPE_STRING) .setMultiValued(true)); - fields.add(SolrCollection.getSearchField()); - return fields; } diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/RepresentationCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/RepresentationCollection.java index 6e9c53ea91..36be73366d 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/RepresentationCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/RepresentationCollection.java @@ -93,8 +93,6 @@ public List getFields() { fields.add(SolrCollection.getSortFieldOf(RodaConstants.REPRESENTATION_TYPE)); // pataki@ END - fields.add(SolrCollection.getSearchField()); - return fields; } diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/RepresentationInformationCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/RepresentationInformationCollection.java index 1df1daa09f..158f1724d6 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/RepresentationInformationCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/RepresentationInformationCollection.java @@ -79,8 +79,6 @@ public List getFields() { fields.add(SolrCollection.getSortFieldOf(RodaConstants.REPRESENTATION_INFORMATION_NAME)); - fields.add(SolrCollection.getSearchField()); - return fields; } diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/RiskCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/RiskCollection.java index 9c9c899875..52a7ae7c45 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/RiskCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/RiskCollection.java @@ -84,8 +84,6 @@ public List getFields() { fields.add(new Field(RodaConstants.RISK_INCIDENCES_COUNT, Field.TYPE_INT)); fields.add(new Field(RodaConstants.RISK_UNMITIGATED_INCIDENCES_COUNT, Field.TYPE_INT)); - fields.add(SolrCollection.getSearchField()); - return fields; } diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/RiskIncidenceCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/RiskIncidenceCollection.java index fc3beff307..3837263527 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/RiskIncidenceCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/RiskIncidenceCollection.java @@ -72,7 +72,6 @@ public List getFields() { fields.add(new Field(RodaConstants.RISK_INCIDENCE_MITIGATED_DESCRIPTION, Field.TYPE_TEXT)); fields.add(new Field(RodaConstants.RISK_INCIDENCE_FILE_PATH_COMPUTED, Field.TYPE_STRING).setStored(false)); - fields.add(SolrCollection.getSearchField()); return fields; } diff --git a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/TransferredResourceCollection.java b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/TransferredResourceCollection.java index 8e399f0cc6..a91ef45a8c 100644 --- a/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/TransferredResourceCollection.java +++ b/roda-core/roda-core/src/main/java/org/roda/core/index/schema/collections/TransferredResourceCollection.java @@ -17,7 +17,6 @@ import org.roda.core.index.schema.AbstractSolrCollection; import org.roda.core.index.schema.CopyField; import org.roda.core.index.schema.Field; -import org.roda.core.index.schema.SolrCollection; import org.roda.core.index.utils.SolrUtils; import org.roda.core.util.IdUtils; import org.slf4j.Logger; @@ -67,8 +66,6 @@ public List getFields() { fields.add(new Field(RodaConstants.TRANSFERRED_RESOURCE_NAME, Field.TYPE_STRING).setRequired(true)); fields.add(new Field(RodaConstants.TRANSFERRED_RESOURCE_SIZE, Field.TYPE_LONG).setRequired(true)); - fields.add(SolrCollection.getSearchField()); - return fields; } diff --git a/roda-core/roda-core/src/main/resources/config/roda-core.properties b/roda-core/roda-core/src/main/resources/config/roda-core.properties index 04b8019760..0320876810 100644 --- a/roda-core/roda-core/src/main/resources/config/roda-core.properties +++ b/roda-core/roda-core/src/main/resources/config/roda-core.properties @@ -399,17 +399,17 @@ core.aip_type.value: MIXED # # Status: in use ########################################################################## -core.ri.rule.AIP: ui.search.fields.items.type -core.ri.rule.AIP: ui.search.fields.items.uuid -core.ri.rule.AIP: ui.search.fields.items.level -core.ri.rule.Representation: ui.search.fields.representations.type -core.ri.rule.Representation: ui.search.fields.representations.uuid -core.ri.rule.Representation: ui.search.fields.representations.representationStates -core.ri.rule.File: ui.search.fields.files.mimetype -core.ri.rule.File: ui.search.fields.files.pronom -core.ri.rule.File: ui.search.fields.files.formatDesignation -core.ri.rule.File: ui.search.fields.files.extension -core.ri.rule.File: ui.search.fields.files.uuid +core.ri.rule.AIP: ui.search.fields.IndexedAIP.type +core.ri.rule.AIP: ui.search.fields.IndexedAIP.uuid +core.ri.rule.AIP: ui.search.fields.IndexedAIP.level +core.ri.rule.Representation: ui.search.fields.IndexedRepresentation.type +core.ri.rule.Representation: ui.search.fields.IndexedRepresentation.uuid +core.ri.rule.Representation: ui.search.fields.IndexedRepresentation.representationStates +core.ri.rule.File: ui.search.fields.IndexedFile.mimetype +core.ri.rule.File: ui.search.fields.IndexedFile.pronom +core.ri.rule.File: ui.search.fields.IndexedFile.formatDesignation +core.ri.rule.File: ui.search.fields.IndexedFile.extension +core.ri.rule.File: ui.search.fields.IndexedFile.uuid ########################################################################## # RI relation types @@ -420,48 +420,48 @@ core.ri.rule.File: ui.search.fields.files.uuid # # Status: in use ########################################################################## -core.ri.relation.representation_information: ui.search.fields.ri.relation.conforms_to -core.ri.relation.representation_information: ui.search.fields.ri.relation.has_created -core.ri.relation.representation_information: ui.search.fields.ri.relation.has_format -core.ri.relation.representation_information: ui.search.fields.ri.relation.has_part -core.ri.relation.representation_information: ui.search.fields.ri.relation.has_version -core.ri.relation.representation_information: ui.search.fields.ri.relation.references -core.ri.relation.representation_information: ui.search.fields.ri.relation.replaces -core.ri.relation.representation_information: ui.search.fields.ri.relation.requires -core.ri.relation.representation_information: ui.search.fields.ri.relation.has_source - -core.ri.relation.representation_information: ui.search.fields.ri.relation.affinity_to -core.ri.relation.representation_information: ui.search.fields.ri.relation.component_of -core.ri.relation.representation_information: ui.search.fields.ri.relation.contains -core.ri.relation.representation_information: ui.search.fields.ri.relation.defined_via -core.ri.relation.representation_information: ui.search.fields.ri.relation.equivalent_to -core.ri.relation.representation_information: ui.search.fields.ri.relation.extension_of -core.ri.relation.representation_information: ui.search.fields.ri.relation.has_earlier_version -core.ri.relation.representation_information: ui.search.fields.ri.relation.has_modified_version -core.ri.relation.representation_information: ui.search.fields.ri.relation.may_contain -core.ri.relation.representation_information: ui.search.fields.ri.relation.may_have_component -core.ri.relation.representation_information: ui.search.fields.ri.relation.modification_of -core.ri.relation.representation_information: ui.search.fields.ri.relation.must_have_component -core.ri.relation.representation_information: ui.search.fields.ri.relation.subtype_of -core.ri.relation.representation_information: ui.search.fields.ri.relation.used_by -core.ri.relation.representation_information: ui.search.fields.ri.relation.see_also -core.ri.relation.representation_information: ui.search.fields.ri.relation.other - -core.ri.relation.aip: ui.search.fields.ri.relation.rendered_by -core.ri.relation.aip: ui.search.fields.ri.relation.executed_by -core.ri.relation.aip: ui.search.fields.ri.relation.specified_by -core.ri.relation.aip: ui.search.fields.ri.relation.represents - -core.ri.relation.text: ui.search.fields.ri.relation.conforms_to -core.ri.relation.text: ui.search.fields.ri.relation.has_created -core.ri.relation.text: ui.search.fields.ri.relation.has_format -core.ri.relation.text: ui.search.fields.ri.relation.references -core.ri.relation.text: ui.search.fields.ri.relation.has_source -core.ri.relation.text: ui.search.fields.ri.relation.subtype_of - -core.ri.relation.web: ui.search.fields.ri.relation.references -core.ri.relation.web: ui.search.fields.ri.relation.has_source -core.ri.relation.web: ui.search.fields.ri.relation.specified_by +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.conforms_to +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.has_created +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.has_format +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.has_part +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.has_version +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.references +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.replaces +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.requires +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.has_source + +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.affinity_to +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.component_of +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.contains +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.defined_via +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.equivalent_to +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.extension_of +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.has_earlier_version +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.has_modified_version +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.may_contain +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.may_have_component +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.modification_of +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.must_have_component +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.subtype_of +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.used_by +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.see_also +core.ri.relation.representation_information: ui.search.fields.RepresentationInformation.relation.other + +core.ri.relation.aip: ui.search.fields.RepresentationInformation.relation.rendered_by +core.ri.relation.aip: ui.search.fields.RepresentationInformation.relation.executed_by +core.ri.relation.aip: ui.search.fields.RepresentationInformation.relation.specified_by +core.ri.relation.aip: ui.search.fields.RepresentationInformation.relation.represents + +core.ri.relation.text: ui.search.fields.RepresentationInformation.relation.conforms_to +core.ri.relation.text: ui.search.fields.RepresentationInformation.relation.has_created +core.ri.relation.text: ui.search.fields.RepresentationInformation.relation.has_format +core.ri.relation.text: ui.search.fields.RepresentationInformation.relation.references +core.ri.relation.text: ui.search.fields.RepresentationInformation.relation.has_source +core.ri.relation.text: ui.search.fields.RepresentationInformation.relation.subtype_of + +core.ri.relation.web: ui.search.fields.RepresentationInformation.relation.references +core.ri.relation.web: ui.search.fields.RepresentationInformation.relation.has_source +core.ri.relation.web: ui.search.fields.RepresentationInformation.relation.specified_by ########################################################################## # RI family types @@ -484,4 +484,4 @@ core.ri.family: data ########################################################################## core.index_result.page_size: 1000 core.index_result.retries: 100 -core.index_result.sleep: 10000 \ No newline at end of file +core.index_result.sleep: 10000 diff --git a/roda-ui/roda-wui/src/main/java/config/i18n/client/ClientMessages.java b/roda-ui/roda-wui/src/main/java/config/i18n/client/ClientMessages.java index d859a879f8..c136be4c54 100644 --- a/roda-ui/roda-wui/src/main/java/config/i18n/client/ClientMessages.java +++ b/roda-ui/roda-wui/src/main/java/config/i18n/client/ClientMessages.java @@ -291,7 +291,9 @@ public interface ClientMessages extends Messages { String someOfAObject(@Select String objectClass); - String selected(@PluralCount int selectedCount); + String oneOfAObject(@Select String objectClass); + + String selected(@PluralCount int selectedCount, String entity); String inspectTransferredResource(); @@ -649,6 +651,8 @@ public interface ClientMessages extends Messages { String aipLevelItem(); /************* Search ****************/ + String searchDropdownLabels(@Select String objectClass); + String searchListBoxItems(); String searchListBoxRepresentations(); @@ -939,13 +943,13 @@ public interface ClientMessages extends Messages { String editRiskNotFound(String name); - String riskRemoveFolderConfirmDialogTitle(); + String riskRemoveConfirmDialogTitle(); String riskRemoveSelectedConfirmDialogMessage(Long size); - String riskRemoveFolderConfirmDialogCancel(); + String riskRemoveConfirmDialogCancel(); - String riskRemoveFolderConfirmDialogOk(); + String riskRemoveConfirmDialogOk(); String riskRemoveSuccessTitle(); @@ -963,6 +967,18 @@ public interface ClientMessages extends Messages { String editIncidenceFailure(String errorMessage); + String riskIncidenceRemoveConfirmDialogTitle(); + + String riskIncidenceRemoveSelectedConfirmDialogMessage(Long size); + + String riskIncidenceRemoveConfirmDialogCancel(); + + String riskIncidenceRemoveConfirmDialogOk(); + + String riskIncidenceRemoveSuccessTitle(); + + String riskIncidenceRemoveSuccessMessage(Long size); + /************* RepresentationInformation register ****************/ String representationInformationRegisterTitle(); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseAIP.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseAIP.java index e36b6dab60..e34928bdea 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseAIP.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseAIP.java @@ -12,26 +12,23 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.exceptions.NotFoundException; import org.roda.core.data.v2.common.Pair; -import org.roda.core.data.v2.index.filter.EmptyKeyFilterParameter; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.filter.SimpleFilterParameter; import org.roda.core.data.v2.ip.AIPState; import org.roda.core.data.v2.ip.IndexedAIP; +import org.roda.core.data.v2.ip.IndexedDIP; import org.roda.core.data.v2.ip.IndexedRepresentation; import org.roda.wui.client.browse.bundle.BrowseAIPBundle; import org.roda.wui.client.browse.bundle.DescriptiveMetadataViewBundle; import org.roda.wui.client.common.LastSelectedItemsSingleton; import org.roda.wui.client.common.NavigationToolbar; -import org.roda.wui.client.common.NoAsyncCallback; -import org.roda.wui.client.common.UserLogin; -import org.roda.wui.client.common.actions.Actionable; import org.roda.wui.client.common.actions.AipActions; import org.roda.wui.client.common.actions.DisseminationActions; import org.roda.wui.client.common.actions.RepresentationActions; @@ -40,28 +37,23 @@ import org.roda.wui.client.common.lists.AIPList; import org.roda.wui.client.common.lists.DIPList; import org.roda.wui.client.common.lists.RepresentationList; -import org.roda.wui.client.common.lists.pagination.ListSelectionUtils; -import org.roda.wui.client.common.search.SearchPanel; -import org.roda.wui.client.common.slider.SliderPanel; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.client.common.search.SearchWrapper; import org.roda.wui.client.common.slider.Sliders; import org.roda.wui.client.common.utils.AsyncCallbackUtils; import org.roda.wui.client.common.utils.HtmlSnippetUtils; import org.roda.wui.client.common.utils.JavascriptUtils; import org.roda.wui.client.common.utils.StringUtils; -import org.roda.wui.client.ingest.transfer.TransferUpload; -import org.roda.wui.client.main.BreadcrumbItem; import org.roda.wui.client.management.UserLog; import org.roda.wui.client.planning.RiskIncidenceRegister; import org.roda.wui.client.welcome.Welcome; import org.roda.wui.common.client.HistoryResolver; -import org.roda.wui.common.client.tools.ConfigurationManager; import org.roda.wui.common.client.tools.DescriptionLevelUtils; import org.roda.wui.common.client.tools.HistoryUtils; import org.roda.wui.common.client.tools.Humanize; -import org.roda.wui.common.client.tools.ListUtils; import org.roda.wui.common.client.tools.RestErrorOverlayType; import org.roda.wui.common.client.tools.RestUtils; -import org.roda.wui.common.client.widgets.HTMLWidgetWrapper; import org.roda.wui.common.client.widgets.Toast; import org.roda.wui.common.client.widgets.wcag.WCAGUtilities; @@ -69,9 +61,6 @@ import com.google.gwt.core.client.JsonUtils; import com.google.gwt.dom.client.Element; import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.logical.shared.SelectionEvent; -import com.google.gwt.event.logical.shared.SelectionHandler; -import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestCallback; @@ -104,29 +93,59 @@ * */ public class BrowseAIP extends Composite { - private static final String BROWSE_TOP_CSS = "browse_top"; - private static final String BROWSE_AIP_CSS = "browse_aip"; public static final HistoryResolver RESOLVER = new HistoryResolver() { @Override public void resolve(List historyTokens, AsyncCallback callback) { - getInstance().resolve(historyTokens, callback); + if (historyTokens.isEmpty()) { + BrowseTop.RESOLVER.resolve(historyTokens, callback); + } else if (historyTokens.size() == 1 + && !historyTokens.get(0).equals(EditPermissions.AIP_RESOLVER.getHistoryToken())) { + String id = historyTokens.get(0); + if (id == null) { + HistoryUtils.newHistory(BrowseTop.RESOLVER); + } else { + BrowserService.Util.getInstance().retrieveBrowseAIPBundle(id, LocaleInfo.getCurrentLocale().getLocaleName(), + new ArrayList<>(Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.AIP_STATE, RodaConstants.AIP_TITLE, + RodaConstants.AIP_LEVEL, RodaConstants.INGEST_SIP_IDS, RodaConstants.INGEST_JOB_ID, + RodaConstants.INGEST_UPDATE_JOB_IDS)), + new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + AsyncCallbackUtils.treatCommonFailures(caught, Welcome.RESOLVER.getHistoryPath()); + } + + @Override + public void onSuccess(BrowseAIPBundle bundle) { + if (bundle != null) { + callback.onSuccess(new BrowseAIP(bundle)); + } else { + HistoryUtils.newHistory(BrowseTop.RESOLVER); + } + } + }); + } + } else { + HistoryUtils.newHistory(RESOLVER); + callback.onSuccess(null); + } } @Override public void isCurrentUserPermitted(AsyncCallback callback) { - UserLogin.getInstance().checkRole(this, callback); + BrowseTop.RESOLVER.isCurrentUserPermitted(callback); } @Override public String getHistoryToken() { - return "browse"; + return BrowseTop.RESOLVER.getHistoryToken(); } @Override public List getHistoryPath() { - return Arrays.asList(getHistoryToken()); + return BrowseTop.RESOLVER.getHistoryPath(); } }; @@ -135,21 +154,10 @@ interface MyUiBinder extends UiBinder { private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static BrowseAIP instance = null; - - private static final Filter COLLECTIONS_FILTER = new Filter(new EmptyKeyFilterParameter(RodaConstants.AIP_PARENT_ID)); - - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); - - private static final List aipFieldsToReturn = new ArrayList<>( - Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.AIP_STATE, RodaConstants.AIP_TITLE, RodaConstants.AIP_LEVEL, - RodaConstants.INGEST_SIP_IDS, RodaConstants.INGEST_JOB_ID, RodaConstants.INGEST_UPDATE_JOB_IDS)); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private String aipId; - private ActionableWidgetBuilder actionableWidgetBuilder; - private SliderPanel aipDetailsSlider; - // Focus @UiField FocusPanel keyboardFocus; @@ -159,12 +167,6 @@ interface MyUiBinder extends UiBinder { @UiField NavigationToolbar navigationToolbar; - @UiField - FlowPanel browseDescription; - - @UiField - SimplePanel bigTitle; - @UiField SimplePanel smallTitle; @@ -190,37 +192,23 @@ interface MyUiBinder extends UiBinder { Button newDescriptiveMetadata; // REPRESENTATIONS - @UiField - SimplePanel representationsTitle; + SimplePanel addRepresentation; @UiField(provided = true) - SearchPanel representationsSearch; - - @UiField(provided = true) - RepresentationList representationsList; + SearchWrapper representationsSearchWrapper; // DISSEMINATIONS - @UiField - Label disseminationsTitle; - - @UiField(provided = true) - SearchPanel disseminationsSearch; - @UiField(provided = true) - DIPList disseminationsList; + SearchWrapper disseminationsSearchWrapper; // AIP CHILDREN - @UiField - SimplePanel aipChildrenTitle; + SimplePanel addChildAip; @UiField(provided = true) - SearchPanel aipChildrenSearch; - - @UiField(provided = true) - AIPList aipChildrenList; + SearchWrapper aipChildrenSearchWrapper; @UiField FlowPanel risksEventsLogs; @@ -230,318 +218,106 @@ interface MyUiBinder extends UiBinder { @UiField Label dateCreatedAndModified; - private List handlers; - - boolean justActive = true; + private BrowseAIP(BrowseAIPBundle bundle) { + IndexedAIP aip = bundle.getAip(); + aipId = aip.getId(); + boolean justActive = AIPState.ACTIVE.equals(aip.getState()); - private BrowseAIP() { - handlers = new ArrayList<>(); - boolean selectable = true; - actionableWidgetBuilder = new ActionableWidgetBuilder<>(AipActions.get()); + RepresentationActions representationActions = RepresentationActions.get(bundle.getAip()); + DisseminationActions disseminationActions = DisseminationActions.get(); + AipActions aipActions = AipActions.get(aip.getId(), aip.getState()); // REPRESENTATIONS - representationsList = new RepresentationList("BrowseAIP_representations", Filter.NULL, justActive, - messages.listOfRepresentations(), true); - ListSelectionUtils.bindBrowseOpener(representationsList); - representationsSearch = new SearchPanel(Filter.NULL, RodaConstants.REPRESENTATION_SEARCH, true, - messages.searchPlaceHolder(), false, false, true); - representationsSearch.setList(representationsList); + ListBuilder representationsListBuilder = new ListBuilder<>(RepresentationList::new, + new AsyncTableCell.Options<>(IndexedRepresentation.class, "BrowseAIP_representations") + .withFilter(new Filter(new SimpleFilterParameter(RodaConstants.REPRESENTATION_AIP_ID, aip.getId()))) + .withJustActive(justActive).withSummary(messages.listOfRepresentations()).bindOpener()); + + representationsSearchWrapper = new SearchWrapper(false).createListAndSearchPanel(representationsListBuilder, + representationActions); // DISSEMINATIONS - disseminationsList = new DIPList("BrowseAIP_disseminations", Filter.NULL, messages.listOfDisseminations(), true); - disseminationsList.setActionable(DisseminationActions.get()); - ListSelectionUtils.bindBrowseOpener(disseminationsList); - disseminationsSearch = new SearchPanel(Filter.NULL, RodaConstants.DIP_SEARCH, true, messages.searchPlaceHolder(), - false, false, true); - disseminationsSearch.setList(disseminationsList); + ListBuilder disseminationsListBuilder = new ListBuilder<>(DIPList::new, + new AsyncTableCell.Options<>(IndexedDIP.class, "BrowseAIP_disseminations") + .withFilter(new Filter(new SimpleFilterParameter(RodaConstants.DIP_AIP_UUIDS, aip.getId()))) + .withJustActive(justActive).withSummary(messages.listOfDisseminations()).bindOpener()); + + disseminationsSearchWrapper = new SearchWrapper(false).createListAndSearchPanel(disseminationsListBuilder, + disseminationActions); // AIP CHILDREN - aipChildrenList = new AIPList("BrowseAIP_aipChildren", Filter.NULL, justActive, messages.listOfAIPs(), selectable); - ListSelectionUtils.bindBrowseOpener(aipChildrenList); - aipChildrenSearch = new SearchPanel(COLLECTIONS_FILTER, RodaConstants.AIP_SEARCH, true, - messages.searchPlaceHolder(), false, false, true); - aipChildrenSearch.setList(aipChildrenList); + ListBuilder aipChildrenListBuilder = new ListBuilder<>(AIPList::new, + new AsyncTableCell.Options<>(IndexedAIP.class, "BrowseAIP_aipChildren") + .withFilter(new Filter(new SimpleFilterParameter(RodaConstants.AIP_PARENT_ID, aip.getId()))) + .withJustActive(justActive).withSummary(messages.listOfAIPs()).bindOpener()); + + aipChildrenSearchWrapper = new SearchWrapper(false).createListAndSearchPanel(aipChildrenListBuilder, aipActions); // INIT initWidget(uiBinder.createAndBindUi(this)); - // HEADER - browseDescription.add(new HTMLWidgetWrapper("BrowseDescription.html")); - // CSS newDescriptiveMetadata.getElement().setId("aipNewDescriptiveMetadata"); - this.addStyleName("browse"); - } + addStyleName("browse browse_aip"); - /** - * Get the singleton instance - * - * @return the instance - */ - public static BrowseAIP getInstance() { - if (instance == null) { - instance = new BrowseAIP(); - } - return instance; - } - - @Override - protected void onLoad() { - super.onLoad(); - JavascriptUtils.stickSidebar(); - } - - public void resolve(List historyTokens, AsyncCallback callback) { - clear(true); - if (historyTokens.isEmpty()) { - viewAction(); - callback.onSuccess(this); - } else if (historyTokens.size() == 1 - && !historyTokens.get(0).equals(EditPermissions.AIP_RESOLVER.getHistoryToken())) { - viewAction(historyTokens.get(0)); - callback.onSuccess(this); - } else if (historyTokens.size() > 1 - && historyTokens.get(0).equals(EditDescriptiveMetadata.RESOLVER.getHistoryToken())) { - EditDescriptiveMetadata.RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); - } else if (historyTokens.size() > 1 - && historyTokens.get(0).equals(CreateDescriptiveMetadata.RESOLVER.getHistoryToken())) { - CreateDescriptiveMetadata.RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); - } else if (historyTokens.size() > 1 && historyTokens.get(0).equals(BrowseFile.RESOLVER.getHistoryToken())) { - BrowseFile.RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); - } else if (historyTokens.size() > 1 && historyTokens.get(0).equals(BrowseDIP.RESOLVER.getHistoryToken())) { - BrowseDIP.RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); - } else if (historyTokens.size() > 1 - && historyTokens.get(0).equals(PreservationEvents.BROWSE_RESOLVER.getHistoryToken())) { - PreservationEvents.BROWSE_RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); - } else if (historyTokens.size() > 1 - && historyTokens.get(0).equals(DescriptiveMetadataHistory.RESOLVER.getHistoryToken())) { - DescriptiveMetadataHistory.RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); - } else if (!historyTokens.isEmpty() - && historyTokens.get(0).equals(EditPermissions.AIP_RESOLVER.getHistoryToken())) { - EditPermissions.AIP_RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); - } else if (!historyTokens.isEmpty() - && historyTokens.get(0).equals(EditPermissions.DIP_RESOLVER.getHistoryToken())) { - EditPermissions.DIP_RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); - } else if (historyTokens.size() > 1 - && historyTokens.get(0).equals(BrowseRepresentation.RESOLVER.getHistoryToken())) { - BrowseRepresentation.RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); - } else if (!historyTokens.isEmpty() - && historyTokens.get(0).equals(TransferUpload.BROWSE_RESOLVER.getHistoryToken())) { - TransferUpload.BROWSE_RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); - } else { - HistoryUtils.newHistory(RESOLVER); - callback.onSuccess(null); - } - } - - /** - * Call the view action by the history token - * - * @param id - * the pid of the object to view. if pid is null, then the base state - * will be called - */ - public void view(final String id) { - boolean historyUpdated = updateHistory(id); - - if (!historyUpdated) { - viewAction(id); - } - } - - protected void viewAction(final String id) { - if (id == null) { - viewAction(); - } else { - aipId = id; - BrowserService.Util.getInstance().retrieveBrowseAIPBundle(id, LocaleInfo.getCurrentLocale().getLocaleName(), - aipFieldsToReturn, new AsyncCallback() { - - @Override - public void onFailure(Throwable caught) { - if (!AsyncCallbackUtils.treatCommonFailures(caught, Welcome.RESOLVER.getHistoryPath())) { - showError(id, caught); - } - } - - @Override - public void onSuccess(BrowseAIPBundle bundle) { - viewAction(bundle); - } - }); + // make FocusPanel comply with WCAG + Element firstElement = this.getElement().getFirstChildElement(); + if ("input".equalsIgnoreCase(firstElement.getTagName())) { + firstElement.setAttribute("title", "browse input"); } - } - private void clear(boolean clearFacets) { - removeStyleName(BROWSE_TOP_CSS); - removeStyleName(BROWSE_AIP_CSS); + // STATE + this.addStyleName(aip.getState().toString().toLowerCase()); + aipState.setHTML(HtmlSnippetUtils.getAIPStateHTML(aip.getState())); + aipState.setVisible(!justActive); - justActive = true; - browseItemHeader.setVisible(false); - bigTitle.setVisible(false); - browseDescription.setVisible(false); + // NAVIGATION TOOLBAR + navigationToolbar.setObject(aip); + navigationToolbar.show(); - identificationPanel.removeStyleName("browseTitle-allCollections-wrapper"); - smallTitle.setWidget(actionableWidgetBuilder.withTitleLoading().buildTitleWithoutActions()); + // IDENTIFICATION + updateSectionIdentification(bundle); - dateCreatedAndModified.setText(""); - if (aipDetailsSlider != null) { - aipDetailsSlider.dispose(); - } - navigationToolbar.clearBreadcrumb(); - navigationToolbar.hide(); - - descriptiveMetadata.setVisible(false); - descriptiveMetadata.clear(); - removeHandlerRegistrations(); - - newDescriptiveMetadata.setVisible(false); - - // Representations list - representationsSearch.setVisible(false); - representationsSearch.clearSearchInputBox(); - representationsList.setVisible(false); - representationsList.getParent().setVisible(false); - - // Disseminations list - disseminationsTitle.setVisible(false); - disseminationsSearch.setVisible(false); - disseminationsSearch.clearSearchInputBox(); - disseminationsList.setVisible(false); - disseminationsList.getParent().setVisible(false); - - // AIP children list - aipChildrenSearch.setVisible(false); - aipChildrenSearch.clearSearchInputBox(); - aipChildrenList.setVisible(false); - aipChildrenList.getParent().setVisible(false); - - // Set button visibility - for (AIPState state : AIPState.values()) { - this.removeStyleName(state.toString().toLowerCase()); - } + // DESCRIPTIVE METADATA + updateSectionDescriptiveMetadata(bundle); - if (clearFacets) { - aipChildrenList.setFacets(ConfigurationManager.FacetFactory.getFacets(aipChildrenList.getListId())); + // REPRESENTATIONS + if (bundle.getRepresentationCount() == 0) { + addRepresentation.setWidget(new ActionableWidgetBuilder<>(representationActions).buildListWithObjects( + new ActionableObject<>(IndexedRepresentation.class), + Collections.singletonList(RepresentationActions.RepresentationAction.NEW))); } - } - protected void showError(String id, Throwable caught) { - navigationToolbar.clearBreadcrumb(); - navigationToolbar.hide(); + addRepresentation.setVisible(bundle.getRepresentationCount() == 0); + representationsSearchWrapper.setVisible(bundle.getRepresentationCount() > 0); + representationsSearchWrapper.getParent().setVisible(bundle.getRepresentationCount() > 0); - smallTitle.setWidget(actionableWidgetBuilder - .withTitleSmall(id, DescriptionLevelUtils.getElementLevelIconCssClass(null)).buildTitleWithoutActions()); + // DISSEMINATIONS + disseminationsSearchWrapper.setVisible(bundle.getDipCount() > 0); + disseminationsSearchWrapper.getParent().setVisible(bundle.getDipCount() > 0); - SafeHtml title; - SafeHtml message; - if (caught instanceof NotFoundException) { - title = messages.notFoundErrorTitle(); - message = messages.notFoundErrorMessage(aipId); + // AIP CHILDREN + if (bundle.getChildAIPCount() > 0) { + LastSelectedItemsSingleton.getInstance().setSelectedJustActive(justActive); } else { - title = messages.genericErrorTitle(); - message = messages.genericErrorMessage(caught.getMessage()); + addChildAip.setWidget(new ActionableWidgetBuilder<>(aipActions).buildListWithObjects( + new ActionableObject<>(IndexedAIP.class), Collections.singletonList(AipActions.AipAction.NEW_CHILD_AIP))); } - HTML messageHTML = new HTML(message); - messageHTML.addStyleName("error"); - descriptiveMetadata.add(messageHTML, title.asString(), true); - descriptiveMetadata.selectTab(0); - descriptiveMetadata.setVisible(true); - WCAGUtilities.getInstance().makeAccessible(descriptiveMetadata.getElement()); - } - - protected void viewAction(BrowseAIPBundle bundle) { - if (bundle != null) { - addStyleName(BROWSE_AIP_CSS); - - Element firstElement = this.getElement().getFirstChildElement(); - if ("input".equalsIgnoreCase(firstElement.getTagName())) { - firstElement.setAttribute("title", "browse input"); - } - - IndexedAIP aip = bundle.getAip(); - AIPState state = aip.getState(); - this.justActive = AIPState.ACTIVE.equals(state); - - // STATUS - for (AIPState s : AIPState.values()) { - this.removeStyleName(s.toString().toLowerCase()); - } - - this.addStyleName(state.toString().toLowerCase()); - aipState.setHTML(HtmlSnippetUtils.getAIPStateHTML(state)); - aipState.setVisible(!justActive); - - // NAVIGATION TOOLBAR - navigationToolbar.setObject(aip); - navigationToolbar.show(); - - // IDENTIFICATION - updateSectionIdentification(bundle); - - // DESCRIPTIVE METADATA - updateSectionDescriptiveMetadata(bundle); - - // REPRESENTATIONS - RepresentationActions representationActions = RepresentationActions.get(bundle.getAip()); - if (bundle.getRepresentationCount() > 0) { - Filter filter = new Filter(new SimpleFilterParameter(RodaConstants.REPRESENTATION_AIP_ID, aip.getId())); - representationsSearch.setDefaultFilter(filter, true); - representationsSearch.clearSearchInputBox(); - representationsList.set(filter, justActive); - representationsList.setActionable(representationActions); - } - - representationsTitle.setWidget(new ActionableWidgetBuilder<>(representationActions) - .withTitleForCard(messages.representationsTitle(), - DescriptionLevelUtils.getRepresentationTypeIconCssClass(null)) - .buildTitleWithObjects(new ActionableObject<>(IndexedRepresentation.class))); - representationsSearch.setVisible(bundle.getRepresentationCount() > 0); - representationsList.setVisible(bundle.getRepresentationCount() > 0); - representationsList.getParent().setVisible(true); - - // DISSEMINATIONS - if (bundle.getDipCount() > 0) { - Filter filter = new Filter(new SimpleFilterParameter(RodaConstants.DIP_AIP_UUIDS, aip.getId())); - disseminationsSearch.setDefaultFilter(filter, true); - disseminationsSearch.clearSearchInputBox(); - disseminationsList.set(filter, justActive); - } - - disseminationsTitle.setVisible(bundle.getDipCount() > 0); - disseminationsSearch.setVisible(bundle.getDipCount() > 0); - disseminationsList.setVisible(bundle.getDipCount() > 0); - disseminationsList.getParent().setVisible(bundle.getDipCount() > 0); - - // AIP CHILDREN - AipActions aipActions = AipActions.get(aip.getId(), aip.getState()); - if (bundle.getChildAIPCount() > 0) { - Filter filter = new Filter(new SimpleFilterParameter(RodaConstants.AIP_PARENT_ID, aip.getId())); - aipChildrenSearch.setDefaultFilter(filter, true); - aipChildrenSearch.clearSearchInputBox(); - aipChildrenList.set(filter, justActive); - LastSelectedItemsSingleton.getInstance().setSelectedJustActive(justActive); - aipChildrenList.setActionable(aipActions); - } + addChildAip.setVisible(bundle.getChildAIPCount() == 0); + aipChildrenSearchWrapper.setVisible(bundle.getChildAIPCount() > 0); + aipChildrenSearchWrapper.getParent().setVisible(bundle.getChildAIPCount() > 0); - aipChildrenTitle.setWidget(new ActionableWidgetBuilder<>(aipActions) - .withTitleForCard(messages.sublevels(), - DescriptionLevelUtils.getElementLevelIconCssClass(RodaConstants.AIP_CHILDREN)) - .buildTitleWithObjects(new ActionableObject<>(IndexedAIP.class))); - aipChildrenSearch.setVisible(bundle.getChildAIPCount() > 0); - aipChildrenList.setVisible(bundle.getChildAIPCount() > 0); - aipChildrenList.getParent().setVisible(true); - - // Set button visibility - keyboardFocus.setFocus(true); + keyboardFocus.setFocus(true); + } - } else { - viewAction(); - } + @Override + protected void onLoad() { + super.onLoad(); + JavascriptUtils.stickSidebar(); } private void updateSectionDescriptiveMetadata(BrowseAIPBundle bundle) { @@ -560,31 +336,27 @@ private void updateSectionDescriptiveMetadata(BrowseAIPBundle bundle) { } } - HandlerRegistration tabHandler = descriptiveMetadata.addSelectionHandler(new SelectionHandler() { - - @Override - public void onSelection(SelectionEvent event) { - if (event.getSelectedItem() < descriptiveMetadataContainers.size()) { - Pair pair = descriptiveMetadataContainers.get(event.getSelectedItem()); - String descId = pair.getFirst(); - final HTML html = pair.getSecond(); - final DescriptiveMetadataViewBundle descBundle = bundles.get(descId); - if (html.getText().length() == 0) { - getDescriptiveMetadataHTML(aipId, descId, descBundle, new AsyncCallback() { - - @Override - public void onFailure(Throwable caught) { - if (!AsyncCallbackUtils.treatCommonFailures(caught)) { - Toast.showError(messages.errorLoadingDescriptiveMetadata(caught.getMessage())); - } + descriptiveMetadata.addSelectionHandler(event -> { + if (event.getSelectedItem() < descriptiveMetadataContainers.size()) { + Pair pair = descriptiveMetadataContainers.get(event.getSelectedItem()); + String descId = pair.getFirst(); + final HTML html = pair.getSecond(); + final DescriptiveMetadataViewBundle descBundle = bundles.get(descId); + if (html.getText().length() == 0) { + getDescriptiveMetadataHTML(aipId, descId, descBundle, new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + if (!AsyncCallbackUtils.treatCommonFailures(caught)) { + Toast.showError(messages.errorLoadingDescriptiveMetadata(caught.getMessage())); } + } - @Override - public void onSuccess(SafeHtml result) { - html.setHTML(result); - } - }); - } + @Override + public void onSuccess(SafeHtml result) { + html.setHTML(result); + } + }); } } }); @@ -593,25 +365,22 @@ public void onSuccess(SafeHtml result) { FlowPanel addTab = new FlowPanel(); addTab.add(new HTML(SafeHtmlUtils.fromSafeConstant(""))); descriptiveMetadata.add(new Label(), addTab); - HandlerRegistration addTabHandler = descriptiveMetadata.addSelectionHandler(new SelectionHandler() { - @Override - public void onSelection(SelectionEvent event) { - if (event.getSelectedItem() == addTabIndex) { - newDescriptiveMetadataRedirect(); - } + descriptiveMetadata.addSelectionHandler(event -> { + if (event.getSelectedItem() == addTabIndex) { + newDescriptiveMetadataRedirect(); } }); + addTab.addStyleName("addTab"); addTab.getElement().setId("aipNewDescriptiveMetadata"); addTab.getParent().addStyleName("addTabWrapper"); - handlers.add(tabHandler); - handlers.add(addTabHandler); - if (descMetadata != null && !descMetadata.isEmpty()) { descriptiveMetadata.setVisible(true); descriptiveMetadata.selectTab(0); + newDescriptiveMetadata.setVisible(false); } else { + descriptiveMetadata.setVisible(false); newDescriptiveMetadata.setVisible(true); } @@ -621,28 +390,12 @@ public void onSelection(SelectionEvent event) { private void updateSectionIdentification(BrowseAIPBundle bundle) { IndexedAIP aip = bundle.getAip(); - actionableWidgetBuilder + smallTitle.setWidget(new ActionableWidgetBuilder<>(AipActions.get()) .withTitleSmall(aip.getTitle() != null ? aip.getTitle() : aip.getId(), DescriptionLevelUtils.getElementLevelIconCssClass(aip.getLevel())) - .withCallback(new NoAsyncCallback() { - @Override - public void onSuccess(Actionable.ActionImpact impact) { - if (Actionable.ActionImpact.UPDATED.equals(impact)) { - // reload - clear(true); - viewAction(aipId); - } - } - }); - - smallTitle.setWidget(actionableWidgetBuilder.buildTitleWithObjects(new ActionableObject<>(aip))); + .buildTitleWithObjects(new ActionableObject<>(aip))); - browseItemHeader.setVisible(true); - - if (aipDetailsSlider != null) { - aipDetailsSlider.dispose(); - } - aipDetailsSlider = Sliders.createAipInfoSlider(center, navigationToolbar.getSidebarButton(), bundle); + Sliders.createAipInfoSlider(center, navigationToolbar.getSidebarButton(), bundle); Anchor risksLink = new Anchor(messages.aipRiskIncidences(bundle.getRiskIncidenceCount()), HistoryUtils.createHistoryHashLink(RiskIncidenceRegister.RESOLVER, aip.getId())); @@ -660,8 +413,6 @@ public void onSuccess(Actionable.ActionImpact impact) { navigationToolbar.updateBreadcrumb(bundle); - identificationPanel.removeStyleName("browseTitle-allCollections-wrapper"); - if (aip.getCreatedOn() != null && StringUtils.isNotBlank(aip.getCreatedBy()) && aip.getUpdatedOn() != null && StringUtils.isNotBlank(aip.getUpdatedBy())) { dateCreatedAndModified.setText(messages.dateCreatedAndUpdated(Humanize.formatDate(aip.getCreatedOn()), @@ -677,52 +428,6 @@ public void onSuccess(Actionable.ActionImpact impact) { } } - protected void viewAction() { - aipId = null; - - actionableWidgetBuilder.withCallback(new NoAsyncCallback<>()); - - bigTitle.setWidget(actionableWidgetBuilder.withTitle(messages.allCollectionsTitle()) - .buildTitleWithObjects(new ActionableObject<>(IndexedAIP.class))); - bigTitle.setVisible(true); - browseDescription.setVisible(true); - addStyleName(BROWSE_TOP_CSS); - - Element firstElement = this.getElement().getFirstChildElement(); - if ("input".equalsIgnoreCase(firstElement.getTagName())) { - firstElement.setAttribute("title", "browse input"); - } - - if (aipDetailsSlider != null) { - aipDetailsSlider.dispose(); - } - navigationToolbar.updateBreadcrumbPath( - new BreadcrumbItem(DescriptionLevelUtils.getTopIconSafeHtml(), "", RESOLVER.getHistoryPath())); - - identificationPanel.addStyleName("browseTitle-allCollections-wrapper"); - - aipChildrenSearch.setDefaultFilter(COLLECTIONS_FILTER, true); - aipChildrenList.set(COLLECTIONS_FILTER, justActive); - LastSelectedItemsSingleton.getInstance().setSelectedJustActive(justActive); - aipChildrenList.setActionable(AipActions.get()); - - aipChildrenSearch.setVisible(true); - aipChildrenList.setVisible(true); - aipChildrenList.getParent().setVisible(true); - - this.removeStyleName("inactive"); - aipState.setVisible(false); - - WCAGUtilities.getInstance().makeAccessible(descriptiveMetadata.getElement()); - } - - private void removeHandlerRegistrations() { - for (HandlerRegistration handlerRegistration : handlers) { - handlerRegistration.removeHandler(); - } - handlers.clear(); - } - private void getDescriptiveMetadataHTML(final String aipId, final String descId, final DescriptiveMetadataViewBundle bundle, final AsyncCallback callback) { SafeUri uri = RestUtils.createDescriptiveMetadataHTMLUri(aipId, descId); @@ -822,24 +527,6 @@ public void onError(Request request, Throwable exception) { } } - private boolean updateHistory(String id) { - boolean historyUpdated; - List path; - if (id == null) { - path = RESOLVER.getHistoryPath(); - } else { - path = ListUtils.concat(BrowseAIP.RESOLVER.getHistoryPath(), id); - } - - if (path.equals(HistoryUtils.getCurrentHistoryPath())) { - historyUpdated = false; - } else { - HistoryUtils.newHistory(path); - historyUpdated = true; - } - return historyUpdated; - } - @UiHandler("newDescriptiveMetadata") void buttonNewDescriptiveMetadataHandler(ClickEvent e) { newDescriptiveMetadataRedirect(); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseAIP.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseAIP.ui.xml index 5e565023e4..5856636df1 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseAIP.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseAIP.ui.xml @@ -13,16 +13,11 @@ - - - - - - + @@ -46,26 +41,22 @@ - - - + - - - - - + - - - + + + + + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseDIP.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseDIP.java index 9dc11cad83..e499b7786b 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseDIP.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseDIP.java @@ -32,7 +32,9 @@ import org.roda.wui.client.common.UserLogin; import org.roda.wui.client.common.lists.DIPFileList; import org.roda.wui.client.common.lists.pagination.ListSelectionUtils; -import org.roda.wui.client.common.search.SearchPanel; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.client.common.search.SearchWrapper; import org.roda.wui.client.common.slider.Sliders; import org.roda.wui.client.common.utils.AsyncCallbackUtils; import org.roda.wui.client.common.utils.HtmlSnippetUtils; @@ -55,6 +57,7 @@ import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; import config.i18n.client.ClientMessages; @@ -90,7 +93,7 @@ public void isCurrentUserPermitted(AsyncCallback callback) { @Override public List getHistoryPath() { - return ListUtils.concat(BrowseAIP.RESOLVER.getHistoryPath(), getHistoryToken()); + return ListUtils.concat(BrowseTop.RESOLVER.getHistoryPath(), getHistoryToken()); } @Override @@ -123,7 +126,7 @@ public void onSuccess(DipBundle dipBundle) { } private void errorRedirect(AsyncCallback callback) { - HistoryUtils.newHistory(BrowseAIP.RESOLVER); + HistoryUtils.newHistory(BrowseTop.RESOLVER); callback.onSuccess(null); } @@ -178,18 +181,6 @@ interface MyUiBinder extends UiBinder { @UiField AccessibleFocusPanel previousButton, nextButton, dipOptionsButton; - /** - * Create a new panel to view a representation - * - * @param viewers - * @param index - * @param aipId - * @param itemBundle - * @param representationUUID - * @param fileUUID - * @param file - * - */ public BrowseDIP(Viewers viewers, DipBundle bundle) { this.viewers = viewers; @@ -335,17 +326,15 @@ private void update() { } else { final Filter filter = new Filter(new SimpleFilterParameter(RodaConstants.DIPFILE_DIP_ID, dip.getId()), new EmptyKeyFilterParameter(RodaConstants.DIPFILE_PARENT_UUID)); - final SearchPanel dipFileSearch = new SearchPanel(filter, RodaConstants.DIPFILE_SEARCH, true, - messages.searchPlaceHolder(), false, false, true); - final DIPFileList dipFileList = new DIPFileList("BrowseDIP_dipFiles", filter, - messages.allOfAObject(DIPFile.class.getName()), false); - dipFileSearch.setList(dipFileList); - ListSelectionUtils.bindBrowseOpener(dipFileList); + ListBuilder dipFileListBuilder = new ListBuilder<>(DIPFileList::new, + new AsyncTableCell.Options<>(DIPFile.class, "BrowseDIP_dipFiles").withFilter(filter) + .withSummary(messages.allOfAObject(DIPFile.class.getName())).bindOpener()); - FlowPanel layout = new FlowPanel(); - layout.add(dipFileSearch); - layout.add(dipFileList); + SearchWrapper search = new SearchWrapper(false).createListAndSearchPanel(dipFileListBuilder); + + SimplePanel layout = new SimplePanel(); + layout.add(search); center.add(layout); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseFile.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseFile.java index 844bfb5825..de2634e524 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseFile.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseFile.java @@ -11,13 +11,12 @@ package org.roda.wui.client.browse; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.filter.SimpleFilterParameter; -import org.roda.core.data.v2.index.sort.SortParameter; -import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.ip.AIPState; import org.roda.core.data.v2.ip.IndexedDIP; import org.roda.wui.client.browse.bundle.BrowseFileBundle; @@ -78,12 +77,12 @@ public void onFailure(Throwable caught) { @Override public void isCurrentUserPermitted(AsyncCallback callback) { - UserLogin.getInstance().checkRole(BrowseAIP.RESOLVER, callback); + UserLogin.getInstance().checkRole(BrowseTop.RESOLVER, callback); } @Override public List getHistoryPath() { - return ListUtils.concat(BrowseAIP.RESOLVER.getHistoryPath(), getHistoryToken()); + return ListUtils.concat(BrowseTop.RESOLVER.getHistoryPath(), getHistoryToken()); } @Override @@ -99,7 +98,7 @@ private void load(final Viewers viewers, final List historyTokens, final final String historyFileId = historyTokens.get(historyTokens.size() - 1); BrowserService.Util.getInstance().retrieveBrowseFileBundle(historyAipId, historyRepresentationId, - historyFilePath, historyFileId, fileFieldsToReturn, new AsyncCallback() { + historyFilePath, historyFileId, Collections.emptyList(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { @@ -131,14 +130,9 @@ interface MyUiBinder extends UiBinder { private static BrowseFile instance = null; - public static final Sorter DEFAULT_FILE_SORTER = new Sorter(new SortParameter(RodaConstants.FILE_FILE_ID, false)); - public static final Integer DEFAULT_FILE_INDEX = -1; - private final BrowseFileBundle bundle; private SliderPanel disseminationsSlider; - private static final List fileFieldsToReturn = new ArrayList<>(); - @SuppressWarnings("unused") private ClientLogger logger = new ClientLogger(getClass().getName()); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseRepresentation.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseRepresentation.java index 4fcdb4d5d4..2c6cd585d1 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseRepresentation.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseRepresentation.java @@ -19,11 +19,11 @@ import org.roda.core.data.common.RodaConstants; import org.roda.core.data.utils.RepresentationInformationUtils; import org.roda.core.data.v2.common.Pair; -import org.roda.core.data.v2.index.facet.Facets; import org.roda.core.data.v2.index.filter.EmptyKeyFilterParameter; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.filter.SimpleFilterParameter; import org.roda.core.data.v2.ip.AIPState; +import org.roda.core.data.v2.ip.IndexedDIP; import org.roda.core.data.v2.ip.IndexedFile; import org.roda.core.data.v2.ip.IndexedRepresentation; import org.roda.wui.client.browse.bundle.BrowseRepresentationBundle; @@ -40,8 +40,9 @@ import org.roda.wui.client.common.lists.DIPList; import org.roda.wui.client.common.lists.SearchFileList; import org.roda.wui.client.common.lists.pagination.ListSelectionUtils; -import org.roda.wui.client.common.search.SearchFilters; -import org.roda.wui.client.common.search.SearchPanel; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.client.common.search.SearchWrapper; import org.roda.wui.client.common.utils.AsyncCallbackUtils; import org.roda.wui.client.common.utils.HtmlSnippetUtils; import org.roda.wui.client.common.utils.JavascriptUtils; @@ -98,7 +99,7 @@ */ public class BrowseRepresentation extends Composite { private static final MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static final ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); public static final HistoryResolver RESOLVER = new HistoryResolver() { @@ -131,12 +132,12 @@ public void onSuccess(final BrowseRepresentationBundle representationBundle) { @Override public void isCurrentUserPermitted(AsyncCallback callback) { - UserLogin.getInstance().checkRole(BrowseAIP.RESOLVER, callback); + UserLogin.getInstance().checkRole(BrowseTop.RESOLVER, callback); } @Override public List getHistoryPath() { - return ListUtils.concat(BrowseAIP.RESOLVER.getHistoryPath(), getHistoryToken()); + return ListUtils.concat(BrowseTop.RESOLVER.getHistoryPath(), getHistoryToken()); } @Override @@ -145,7 +146,7 @@ public String getHistoryToken() { } private void errorRedirect(AsyncCallback callback) { - HistoryUtils.newHistory(BrowseAIP.RESOLVER); + HistoryUtils.newHistory(BrowseTop.RESOLVER); callback.onSuccess(null); } }; @@ -165,8 +166,6 @@ interface MyUiBinder extends UiBinder { private static final List representationFields = new ArrayList<>(Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.REPRESENTATION_AIP_ID, RodaConstants.REPRESENTATION_ID, RodaConstants.REPRESENTATION_TYPE)); - private static final String ALL_FILTER = SearchFilters.allFilter(IndexedFile.class.getName()); - // Focus @UiField FocusPanel keyboardFocus; @@ -204,10 +203,7 @@ interface MyUiBinder extends UiBinder { // FILES @UiField(provided = true) - SearchPanel filesSearch; - - @UiField(provided = true) - SearchFileList filesList; + SearchWrapper filesSearch; // DISSEMINATIONS @@ -215,10 +211,7 @@ interface MyUiBinder extends UiBinder { Label disseminationsTitle; @UiField(provided = true) - SearchPanel disseminationsSearch; - - @UiField(provided = true) - DIPList disseminationsList; + SearchWrapper disseminationsSearch; // SIDEBAR @@ -245,33 +238,33 @@ public BrowseRepresentation(BrowseRepresentationBundle bundle) { final AIPState state = bundle.getAip().getState(); final boolean justActive = AIPState.ACTIVE.equals(state); - boolean selectable = true; boolean showFilesPath = false; + LastSelectedItemsSingleton.getInstance().setSelectedJustActive(justActive); + // FILES - Filter filter = new Filter(new SimpleFilterParameter(RodaConstants.FILE_REPRESENTATION_UUID, repUUID), + Filter filesFilter = new Filter(new SimpleFilterParameter(RodaConstants.FILE_REPRESENTATION_UUID, repUUID), new EmptyKeyFilterParameter(RodaConstants.FILE_PARENT_UUID)); - filesList = new SearchFileList("BrowseRepresentation_files", filter, justActive, summary, selectable, - showFilesPath); - LastSelectedItemsSingleton.getInstance().setSelectedJustActive(justActive); - filesList.setActionable(FileActions.get(aipId, repId)); - - ListSelectionUtils.bindBrowseOpener(filesList); + ListBuilder fileListBuilder = new ListBuilder<>(() -> new SearchFileList(showFilesPath), + new AsyncTableCell.Options<>(IndexedFile.class, "BrowseRepresentation_files").withFilter(filesFilter) + .withJustActive(justActive).withSummary(summary).bindOpener()); - filesSearch = new SearchPanel(filter, ALL_FILTER, true, messages.searchPlaceHolder(), false, false, true); - filesSearch.setList(filesList); + filesSearch = new SearchWrapper(false).createListAndSearchPanel(fileListBuilder, FileActions.get(aipId, repId)); // DISSEMINATIONS - disseminationsList = new DIPList("BrowseRepresentation_disseminations", Filter.NULL, - messages.listOfDisseminations(), true); - disseminationsList.setActionable(DisseminationActions.get()); - ListSelectionUtils.bindBrowseOpener(disseminationsList); - disseminationsSearch = new SearchPanel(Filter.NULL, RodaConstants.DIP_SEARCH, true, messages.searchPlaceHolder(), - false, false, true); - disseminationsSearch.setList(disseminationsList); + Filter disseminationsFilter = new Filter( + new SimpleFilterParameter(RodaConstants.DIP_REPRESENTATION_UUIDS, repUUID)); + + ListBuilder disseminationsListBuilder = new ListBuilder<>(DIPList::new, + new AsyncTableCell.Options<>(IndexedDIP.class, "BrowseRepresentation_disseminations") + .withFilter(disseminationsFilter).withSummary(messages.listOfDisseminations()).bindOpener() + .withJustActive(justActive)); + + disseminationsSearch = new SearchWrapper(false).createListAndSearchPanel(disseminationsListBuilder, + DisseminationActions.get()); // INIT initWidget(uiBinder.createAndBindUi(this)); @@ -353,14 +346,10 @@ public void onSelection(SelectionEvent event) { } // DISSEMINATIONS (POST-INIT) + disseminationsSearch.setVisible(bundle.getDipCount() > 0); if (bundle.getDipCount() > 0) { - Filter disseminationsFilter = new Filter( - new SimpleFilterParameter(RodaConstants.DIP_REPRESENTATION_UUIDS, repUUID)); - disseminationsList.set(disseminationsFilter, state.equals(AIPState.ACTIVE), Facets.NONE); - disseminationsSearch.setDefaultFilter(disseminationsFilter, true); - disseminationsSearch.clearSearchInputBox(); + disseminationsSearch.setFilter(IndexedDIP.class, disseminationsFilter); } - disseminationsList.getParent().setVisible(bundle.getDipCount() > 0); ListSelectionUtils.bindLayout(representation, searchPrevious, searchNext, keyboardFocus, true, false, false, searchSection); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseRepresentation.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseRepresentation.ui.xml index 731666a872..defaae82e7 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseRepresentation.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseRepresentation.ui.xml @@ -42,13 +42,13 @@ + - - + @@ -56,8 +56,7 @@ - - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseTop.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseTop.java new file mode 100644 index 0000000000..dff3285b89 --- /dev/null +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseTop.java @@ -0,0 +1,167 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE file at the root of the source + * tree and available online at + * + * https://github.com/keeps/roda + */ +/** + * + */ +package org.roda.wui.client.browse; + +import java.util.Arrays; +import java.util.List; + +import org.roda.core.data.common.RodaConstants; +import org.roda.core.data.v2.index.filter.EmptyKeyFilterParameter; +import org.roda.core.data.v2.index.filter.Filter; +import org.roda.core.data.v2.ip.IndexedAIP; +import org.roda.wui.client.common.NavigationToolbar; +import org.roda.wui.client.common.UserLogin; +import org.roda.wui.client.common.actions.AipActions; +import org.roda.wui.client.common.actions.model.ActionableObject; +import org.roda.wui.client.common.actions.widgets.ActionableWidgetBuilder; +import org.roda.wui.client.common.lists.AIPList; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.client.common.search.SearchWrapper; +import org.roda.wui.client.ingest.transfer.TransferUpload; +import org.roda.wui.client.main.BreadcrumbItem; +import org.roda.wui.common.client.HistoryResolver; +import org.roda.wui.common.client.tools.DescriptionLevelUtils; +import org.roda.wui.common.client.tools.HistoryUtils; +import org.roda.wui.common.client.widgets.HTMLWidgetWrapper; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Element; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.SimplePanel; +import com.google.gwt.user.client.ui.Widget; + +import config.i18n.client.ClientMessages; + +/** + * @author Luis Faria + * + */ +public class BrowseTop extends Composite { + public static final HistoryResolver RESOLVER = new HistoryResolver() { + + @Override + public void resolve(List historyTokens, AsyncCallback callback) { + if (historyTokens.isEmpty()) { + if (instance == null) { + instance = new BrowseTop(); + } + callback.onSuccess(instance); + } else if (historyTokens.size() == 1 + && !historyTokens.get(0).equals(EditPermissions.AIP_RESOLVER.getHistoryToken())) { + BrowseAIP.RESOLVER.resolve(historyTokens, callback); + } else if (historyTokens.size() > 1 + && historyTokens.get(0).equals(EditDescriptiveMetadata.RESOLVER.getHistoryToken())) { + EditDescriptiveMetadata.RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); + } else if (historyTokens.size() > 1 + && historyTokens.get(0).equals(CreateDescriptiveMetadata.RESOLVER.getHistoryToken())) { + CreateDescriptiveMetadata.RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); + } else if (historyTokens.size() > 1 && historyTokens.get(0).equals(BrowseFile.RESOLVER.getHistoryToken())) { + BrowseFile.RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); + } else if (historyTokens.size() > 1 && historyTokens.get(0).equals(BrowseDIP.RESOLVER.getHistoryToken())) { + BrowseDIP.RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); + } else if (historyTokens.size() > 1 + && historyTokens.get(0).equals(PreservationEvents.BROWSE_RESOLVER.getHistoryToken())) { + PreservationEvents.BROWSE_RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); + } else if (historyTokens.size() > 1 + && historyTokens.get(0).equals(DescriptiveMetadataHistory.RESOLVER.getHistoryToken())) { + DescriptiveMetadataHistory.RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); + } else if (historyTokens.get(0).equals(EditPermissions.AIP_RESOLVER.getHistoryToken())) { + EditPermissions.AIP_RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); + } else if (historyTokens.get(0).equals(EditPermissions.DIP_RESOLVER.getHistoryToken())) { + EditPermissions.DIP_RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); + } else if (historyTokens.size() > 1 + && historyTokens.get(0).equals(BrowseRepresentation.RESOLVER.getHistoryToken())) { + BrowseRepresentation.RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); + } else if (historyTokens.get(0).equals(TransferUpload.BROWSE_FILE_RESOLVER.getHistoryToken())) { + TransferUpload.BROWSE_FILE_RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); + } else { + HistoryUtils.newHistory(RESOLVER); + callback.onSuccess(null); + } + } + + @Override + public void isCurrentUserPermitted(AsyncCallback callback) { + UserLogin.getInstance().checkRole(this, callback); + } + + @Override + public String getHistoryToken() { + return "browse"; + } + + @Override + public List getHistoryPath() { + return Arrays.asList(getHistoryToken()); + } + }; + + private static final ClientMessages messages = GWT.create(ClientMessages.class); + + interface MyUiBinder extends UiBinder { + } + + private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); + + private static BrowseTop instance = null; + + @UiField + NavigationToolbar navigationToolbar; + + @UiField + FlowPanel browseDescription; + + @UiField + SimplePanel title; + + @UiField(provided = true) + SearchWrapper search; + + private BrowseTop() { + // AIP LIST, it has the same id as the AIP children list because facets should + // be the same + + ListBuilder listBuilder = new ListBuilder<>(AIPList::new, + new AsyncTableCell.Options<>(IndexedAIP.class, "BrowseTop_aip") + .withFilter(new Filter(new EmptyKeyFilterParameter(RodaConstants.AIP_PARENT_ID))).withJustActive(true) + .withSummary(messages.listOfAIPs()).bindOpener()); + + search = new SearchWrapper(false).createListAndSearchPanel(listBuilder, AipActions.get()); + + // INIT + initWidget(uiBinder.createAndBindUi(this)); + + // TOOLBAR + navigationToolbar.getSidebarButton().setVisible(false); + navigationToolbar.updateBreadcrumbPath( + new BreadcrumbItem(DescriptionLevelUtils.getTopIconSafeHtml(), "", RESOLVER.getHistoryPath())); + + // HEADER + title.setWidget(new ActionableWidgetBuilder<>(AipActions.get()).withTitle(messages.allCollectionsTitle()) + .buildTitleWithObjects(new ActionableObject<>(IndexedAIP.class))); + browseDescription.add(new HTMLWidgetWrapper("BrowseDescription.html")); + + // CSS + this.addStyleName("browse browse_top"); + + // make FocusPanel comply with WCAG + Element firstElement = this.getElement().getFirstChildElement(); + if ("input".equalsIgnoreCase(firstElement.getTagName())) { + firstElement.setAttribute("title", "browse input"); + } + + } +} diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseTop.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseTop.ui.xml new file mode 100644 index 0000000000..4418379e48 --- /dev/null +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/BrowseTop.ui.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/CreateDescriptiveMetadata.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/CreateDescriptiveMetadata.java index f3d884d59d..a61203aca9 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/CreateDescriptiveMetadata.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/CreateDescriptiveMetadata.java @@ -94,7 +94,7 @@ public void resolve(List historyTokens, final AsyncCallback call callback.onSuccess(create); } else { - HistoryUtils.newHistory(BrowseAIP.RESOLVER); + HistoryUtils.newHistory(BrowseTop.RESOLVER); callback.onSuccess(null); } } @@ -102,12 +102,12 @@ public void resolve(List historyTokens, final AsyncCallback call @Override public void isCurrentUserPermitted(AsyncCallback callback) { // TODO check for edit metadata permission - UserLogin.getInstance().checkRoles(new HistoryResolver[] {BrowseAIP.RESOLVER}, false, callback); + UserLogin.getInstance().checkRoles(new HistoryResolver[] {BrowseTop.RESOLVER}, false, callback); } @Override public List getHistoryPath() { - return ListUtils.concat(BrowseAIP.RESOLVER.getHistoryPath(), getHistoryToken()); + return ListUtils.concat(BrowseTop.RESOLVER.getHistoryPath(), getHistoryToken()); } @Override @@ -373,7 +373,7 @@ public void onSuccess(Void result) { errors.setVisible(false); Toast.showInfo(messages.dialogSuccess(), messages.metadataFileCreated()); if (representationId == null) { - HistoryUtils.newHistory(BrowseAIP.RESOLVER, aipId); + HistoryUtils.newHistory(BrowseTop.RESOLVER, aipId); } else { HistoryUtils.newHistory(BrowseRepresentation.RESOLVER, aipId, representationId); } @@ -437,7 +437,7 @@ public void onSuccess(final Void nothing) { } } else { if (representationId == null) { - HistoryUtils.newHistory(BrowseAIP.RESOLVER, aipId); + HistoryUtils.newHistory(BrowseTop.RESOLVER, aipId); } else { HistoryUtils.newHistory(BrowseRepresentation.RESOLVER, aipId, representationId); } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/DescriptiveMetadataHistory.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/DescriptiveMetadataHistory.java index 074e35525f..2489dc845a 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/DescriptiveMetadataHistory.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/DescriptiveMetadataHistory.java @@ -92,7 +92,7 @@ public void onSuccess(DescriptiveMetadataVersionsBundle bundle) { }); } else { - HistoryUtils.newHistory(BrowseAIP.RESOLVER); + HistoryUtils.newHistory(BrowseTop.RESOLVER); callback.onSuccess(null); } } @@ -100,12 +100,12 @@ public void onSuccess(DescriptiveMetadataVersionsBundle bundle) { @Override public void isCurrentUserPermitted(AsyncCallback callback) { // TODO check for browse metadata history permission - UserLogin.getInstance().checkRoles(new HistoryResolver[] {BrowseAIP.RESOLVER}, false, callback); + UserLogin.getInstance().checkRoles(new HistoryResolver[] {BrowseTop.RESOLVER}, false, callback); } @Override public List getHistoryPath() { - return ListUtils.concat(BrowseAIP.RESOLVER.getHistoryPath(), getHistoryToken()); + return ListUtils.concat(BrowseTop.RESOLVER.getHistoryPath(), getHistoryToken()); } @Override @@ -349,7 +349,7 @@ public void onFailure(Throwable caught) { @Override public void onSuccess(Void result) { Toast.showInfo(messages.dialogDone(), messages.versionReverted()); - HistoryUtils.newHistory(BrowseAIP.RESOLVER, aipId); + HistoryUtils.newHistory(BrowseTop.RESOLVER, aipId); } }); } @@ -369,7 +369,7 @@ public void onSuccess(Void result) { Toast.showInfo(messages.dialogDone(), messages.versionDeleted()); refresh(); if (bundle.getVersions().isEmpty()) { - HistoryUtils.newHistory(BrowseAIP.RESOLVER, aipId); + HistoryUtils.newHistory(BrowseTop.RESOLVER, aipId); } } }); @@ -407,7 +407,7 @@ void buttonCancelHandler(ClickEvent e) { } private void cancel() { - HistoryUtils.newHistory(BrowseAIP.RESOLVER, aipId); + HistoryUtils.newHistory(BrowseTop.RESOLVER, aipId); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/DipFilePreview.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/DipFilePreview.java index c0dd4dd7fc..1972728fae 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/DipFilePreview.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/DipFilePreview.java @@ -13,13 +13,13 @@ import org.roda.core.data.v2.ip.DIPFile; import org.roda.core.data.v2.ip.metadata.FileFormat; import org.roda.wui.client.common.lists.DIPFileList; -import org.roda.wui.client.common.lists.pagination.ListSelectionUtils; -import org.roda.wui.client.common.search.SearchPanel; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.client.common.search.SearchWrapper; import org.roda.wui.common.client.tools.RestUtils; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Widget; import config.i18n.client.ClientMessages; @@ -46,20 +46,11 @@ protected Widget directoryPreview() { final Filter filter = new Filter( new SimpleFilterParameter(RodaConstants.DIPFILE_PARENT_UUID, getObject().getUUID())); - final FlowPanel layout = new FlowPanel(); + ListBuilder dipFileListBuilder = new ListBuilder<>(DIPFileList::new, + new AsyncTableCell.Options<>(DIPFile.class, "DipFilePreview_files").withFilter(filter) + .withSummary(messages.allOfAObject(DIPFile.class.getName())).bindOpener()); - final SearchPanel dipFileSearch = new SearchPanel(filter, RodaConstants.DIPFILE_SEARCH, true, - messages.searchPlaceHolder(), false, false, true); - - final DIPFileList folderList = new DIPFileList("DipFilePreview_files", filter, - messages.allOfAObject(DIPFile.class.getName()), false); - dipFileSearch.setList(folderList); - - layout.add(dipFileSearch); - layout.add(folderList); - - ListSelectionUtils.bindBrowseOpener(folderList); - return layout; + return new SearchWrapper(false).createListAndSearchPanel(dipFileListBuilder); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/EditDescriptiveMetadata.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/EditDescriptiveMetadata.java index 22fa6edf76..92d12e3ded 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/EditDescriptiveMetadata.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/EditDescriptiveMetadata.java @@ -88,7 +88,7 @@ public void onSuccess(DescriptiveMetadataEditBundle bundle) { } }); } else { - HistoryUtils.newHistory(BrowseAIP.RESOLVER); + HistoryUtils.newHistory(BrowseTop.RESOLVER); callback.onSuccess(null); } } @@ -96,12 +96,12 @@ public void onSuccess(DescriptiveMetadataEditBundle bundle) { @Override public void isCurrentUserPermitted(AsyncCallback callback) { // TODO check for edit metadata permission - UserLogin.getInstance().checkRoles(new HistoryResolver[] {BrowseAIP.RESOLVER}, false, callback); + UserLogin.getInstance().checkRoles(new HistoryResolver[] {BrowseTop.RESOLVER}, false, callback); } @Override public List getHistoryPath() { - return ListUtils.concat(BrowseAIP.RESOLVER.getHistoryPath(), getHistoryToken()); + return ListUtils.concat(BrowseTop.RESOLVER.getHistoryPath(), getHistoryToken()); } @Override diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/EditPermissions.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/EditPermissions.java index 20dcbafb79..b68948f018 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/EditPermissions.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/EditPermissions.java @@ -77,7 +77,7 @@ public void resolve(List historyTokens, final AsyncCallback call @Override public void onFailure(Throwable caught) { - HistoryUtils.newHistory(BrowseAIP.RESOLVER); + HistoryUtils.newHistory(BrowseTop.RESOLVER); callback.onSuccess(null); } @@ -98,7 +98,7 @@ public void onSuccess(IndexedAIP aip) { @Override public void onFailure(Throwable caught) { - HistoryUtils.newHistory(BrowseAIP.RESOLVER); + HistoryUtils.newHistory(BrowseTop.RESOLVER); callback.onSuccess(null); } @@ -111,7 +111,7 @@ public void onSuccess(List aips) { }); } } else { - HistoryUtils.newHistory(BrowseAIP.RESOLVER); + HistoryUtils.newHistory(BrowseTop.RESOLVER); callback.onSuccess(null); } } @@ -123,7 +123,7 @@ public void isCurrentUserPermitted(AsyncCallback callback) { @Override public List getHistoryPath() { - return ListUtils.concat(BrowseAIP.RESOLVER.getHistoryPath(), getHistoryToken()); + return ListUtils.concat(BrowseTop.RESOLVER.getHistoryPath(), getHistoryToken()); } @Override @@ -164,7 +164,7 @@ public void onSuccess(IndexedDIP dip) { @Override public void onFailure(Throwable caught) { - HistoryUtils.newHistory(BrowseAIP.RESOLVER); + HistoryUtils.newHistory(BrowseTop.RESOLVER); callback.onSuccess(null); } @@ -177,7 +177,7 @@ public void onSuccess(List dips) { }); } } else { - HistoryUtils.newHistory(BrowseAIP.RESOLVER); + HistoryUtils.newHistory(BrowseTop.RESOLVER); callback.onSuccess(null); } } @@ -189,7 +189,7 @@ public void isCurrentUserPermitted(AsyncCallback callback) { @Override public List getHistoryPath() { - return ListUtils.concat(BrowseAIP.RESOLVER.getHistoryPath(), getHistoryToken()); + return ListUtils.concat(BrowseTop.RESOLVER.getHistoryPath(), getHistoryToken()); } @Override @@ -202,7 +202,7 @@ interface MyUiBinder extends UiBinder { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static ClientMessages messages = GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); @UiField FlowPanel editPermissionsDescription; @@ -508,7 +508,7 @@ void buttonCancelHandler(ClickEvent e) { HistoryUtils.openBrowse((IndexedDIP) objects.get(0)); } } else { - HistoryUtils.newHistory(BrowseAIP.RESOLVER); + HistoryUtils.newHistory(BrowseTop.RESOLVER); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/IndexedFilePreview.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/IndexedFilePreview.java index 5f23c2f014..25bd6d6bbe 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/IndexedFilePreview.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/IndexedFilePreview.java @@ -7,7 +7,7 @@ */ package org.roda.wui.client.browse; -import java.util.Arrays; +import java.util.Collections; import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.filter.Filter; @@ -18,14 +18,14 @@ import org.roda.wui.client.common.LastSelectedItemsSingleton; import org.roda.wui.client.common.actions.FileActions; import org.roda.wui.client.common.lists.SearchFileList; -import org.roda.wui.client.common.lists.pagination.ListSelectionUtils; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.client.common.lists.utils.ClientSelectedItemsUtils; -import org.roda.wui.client.common.search.SearchPanel; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.client.common.search.SearchWrapper; import org.roda.wui.common.client.tools.RestUtils; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Widget; import config.i18n.client.ClientMessages; @@ -34,8 +34,8 @@ public class IndexedFilePreview extends BitstreamPreview { private static final ClientMessages messages = GWT.create(ClientMessages.class); private static final boolean CONTENT_DISPOSITION_INLINE = true; - private SearchFileList folderList = null; - private boolean justActive = true; + private SearchWrapper searchWrapper = null; + private boolean justActive; public IndexedFilePreview(Viewers viewers, IndexedFile file, boolean justActive, Command onPreviewFailure) { super(viewers, RestUtils.createRepresentationFileDownloadUri(file.getUUID(), CONTENT_DISPOSITION_INLINE), @@ -48,36 +48,23 @@ public IndexedFilePreview(Viewers viewers, IndexedFile file, boolean justActive, protected Widget directoryPreview() { Filter filter = new Filter(new SimpleFilterParameter(RodaConstants.FILE_PARENT_UUID, getObject().getUUID())); - final FlowPanel layout = new FlowPanel(); - - final SearchPanel fileSearch = new SearchPanel(filter, RodaConstants.FILE_SEARCH, true, - messages.searchPlaceHolder(), false, false, true); - - boolean selectable = true; - boolean showFilesPath = false; - - this.folderList = new SearchFileList("IndexedFilePreview_files", filter, justActive, - messages.representationListOfFiles(), - selectable, showFilesPath); + ListBuilder folderListBuilder = new ListBuilder<>(SearchFileList::new, + new AsyncTableCell.Options<>(IndexedFile.class, "IndexedFilePreview_files").withFilter(filter) + .withSummary(messages.representationListOfFiles()).withJustActive(justActive).bindOpener()); LastSelectedItemsSingleton.getInstance().setSelectedJustActive(justActive); - this.folderList.setActionable(FileActions.get(getObject().getAipId(), getObject().getRepresentationId())); - - fileSearch.setList(folderList); - - layout.add(fileSearch); - layout.add(folderList); - - ListSelectionUtils.bindBrowseOpener(folderList); - return layout; + searchWrapper = new SearchWrapper(false).createListAndSearchPanel(folderListBuilder, + FileActions.get(getObject().getAipId(), getObject().getRepresentationId()), messages.searchPlaceHolder()); + return searchWrapper; } public SelectedItems getSelected() { - SelectedItems ret = SelectedItemsList.create(IndexedFile.class, Arrays.asList(getObject().getUUID())); - if (folderList != null) { - SelectedItems listSelected = folderList.getSelected(); + SelectedItems ret = SelectedItemsList.create(IndexedFile.class, + Collections.singletonList(getObject().getUUID())); + if (searchWrapper != null) { + SelectedItems listSelected = searchWrapper.getSelectedItems(IndexedFile.class); if (!ClientSelectedItemsUtils.isEmpty(listSelected)) { ret = listSelected; @@ -87,8 +74,8 @@ public SelectedItems getSelected() { } public void refresh() { - if (folderList != null) { - folderList.refresh(); + if (searchWrapper != null) { + searchWrapper.refreshCurrentList(); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/PreservationEvents.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/PreservationEvents.java index 8c8ff748ff..9c7ae8de3d 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/PreservationEvents.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/PreservationEvents.java @@ -14,17 +14,13 @@ import java.util.Arrays; import java.util.List; -import com.google.gwt.user.client.ui.FlowPanel; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; -import org.roda.core.data.v2.index.filter.SimpleFilterParameter; import org.roda.core.data.v2.ip.IndexedFile; import org.roda.core.data.v2.ip.IndexedRepresentation; import org.roda.wui.client.browse.bundle.BrowseAIPBundle; import org.roda.wui.client.browse.bundle.BrowseFileBundle; import org.roda.wui.client.browse.bundle.BrowseRepresentationBundle; import org.roda.wui.client.common.UserLogin; -import org.roda.wui.client.common.actions.PreservationEventActions; import org.roda.wui.client.common.utils.AsyncCallbackUtils; import org.roda.wui.client.common.utils.JavascriptUtils; import org.roda.wui.client.common.utils.StringUtils; @@ -35,6 +31,7 @@ import org.roda.wui.common.client.HistoryResolver; import org.roda.wui.common.client.tools.HistoryUtils; import org.roda.wui.common.client.tools.ListUtils; +import org.roda.wui.common.client.widgets.HTMLWidgetWrapper; import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.LocaleInfo; @@ -42,12 +39,12 @@ import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; import config.i18n.client.ClientMessages; -import org.roda.wui.common.client.widgets.HTMLWidgetWrapper; /** * @author Luis Faria @@ -64,12 +61,12 @@ public void resolve(List historyTokens, final AsyncCallback call @Override public void isCurrentUserPermitted(AsyncCallback callback) { - UserLogin.getInstance().checkRoles(new HistoryResolver[] {BrowseAIP.RESOLVER}, false, callback); + UserLogin.getInstance().checkRoles(new HistoryResolver[] {BrowseTop.RESOLVER}, false, callback); } @Override public List getHistoryPath() { - return ListUtils.concat(BrowseAIP.RESOLVER.getHistoryPath(), getHistoryToken()); + return ListUtils.concat(BrowseTop.RESOLVER.getHistoryPath(), getHistoryToken()); } @Override @@ -107,7 +104,7 @@ interface MyUiBinder extends UiBinder { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private static final List aipFieldsToReturn = new ArrayList<>( Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.AIP_GHOST, RodaConstants.AIP_TITLE, RodaConstants.AIP_LEVEL)); @@ -131,7 +128,8 @@ interface MyUiBinder extends UiBinder { Label itemTitle; @UiField(provided = true) - PreservationEventsSearch eventSearch; + PreservationEventsSearch eventsSearch; + @UiField FlowPanel pageDescription; private String aipId; @@ -155,21 +153,7 @@ public PreservationEvents(final String aipId, final String representationUUID, f this.representationUUID = representationUUID; this.fileUUID = fileUUID; - Filter filter = new Filter(); - - if (aipId != null) { - filter.add(new SimpleFilterParameter(RodaConstants.PRESERVATION_EVENT_AIP_ID, aipId)); - } - if (representationUUID != null) { - filter.add(new SimpleFilterParameter(RodaConstants.PRESERVATION_EVENT_REPRESENTATION_UUID, representationUUID)); - } - if (fileUUID != null) { - filter.add(new SimpleFilterParameter(RodaConstants.PRESERVATION_EVENT_FILE_UUID, fileUUID)); - } - - eventSearch = new PreservationEventsSearch("PreservationEvents_events"); - eventSearch.defaultFilters(filter); - eventSearch.getList().setActionable(PreservationEventActions.get(aipId, representationUUID, fileUUID)); + eventsSearch = new PreservationEventsSearch("PreservationEvents_events", aipId, representationUUID, fileUUID); initWidget(uiBinder.createAndBindUi(this)); @@ -212,7 +196,7 @@ private void getAIPBreadCrumbs() { @Override public void onFailure(Throwable caught) { AsyncCallbackUtils.defaultFailureTreatment(caught); - HistoryUtils.newHistory(BrowseAIP.RESOLVER); + HistoryUtils.newHistory(BrowseTop.RESOLVER); } @Override @@ -319,7 +303,7 @@ private void browseResolve(List historyTokens, AsyncCallback cal callback.onSuccess(instance); } } else { - HistoryUtils.newHistory(BrowseAIP.RESOLVER); + HistoryUtils.newHistory(BrowseTop.RESOLVER); callback.onSuccess(null); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/PreservationEvents.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/PreservationEvents.ui.xml index daf17d4894..4792b3bd1f 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/PreservationEvents.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/PreservationEvents.ui.xml @@ -24,7 +24,7 @@ - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/ShowPreservationEvent.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/ShowPreservationEvent.java index f22ce082ab..e8d31f199e 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/ShowPreservationEvent.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/ShowPreservationEvent.java @@ -104,14 +104,14 @@ public void resolve(List historyTokens, final AsyncCallback call eventId); callback.onSuccess(preservationEvents); } else { - HistoryUtils.newHistory(BrowseAIP.RESOLVER); + HistoryUtils.newHistory(BrowseTop.RESOLVER); callback.onSuccess(null); } } @Override public void isCurrentUserPermitted(AsyncCallback callback) { - UserLogin.getInstance().checkRoles(new HistoryResolver[] {BrowseAIP.RESOLVER}, false, callback); + UserLogin.getInstance().checkRoles(new HistoryResolver[] {BrowseTop.RESOLVER}, false, callback); } @Override @@ -133,7 +133,7 @@ interface MyUiBinder extends UiBinder { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); @UiField SimplePanel itemIcon; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/IncrementalAssociativeList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/IncrementalAssociativeList.java index a488b1e5fc..dba1c02c94 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/IncrementalAssociativeList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/IncrementalAssociativeList.java @@ -170,7 +170,7 @@ public void onClick(ClickEvent event) { SelectDialogFactory dialogFactory = new SelectDialogFactory(); try { - SelectDialog dialog = dialogFactory.getSelectDialog(actualClass, dialogName, filter, false); + SelectDialog dialog = dialogFactory.getSelectDialog(actualClass, dialogName, filter); dialog.showAndCenter(); ValueChangeHandler changeHandler = new ValueChangeHandler() { diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/IncrementalRelationList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/IncrementalRelationList.java index c6c9274ba0..269b81c3bc 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/IncrementalRelationList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/IncrementalRelationList.java @@ -45,7 +45,7 @@ public class IncrementalRelationList extends Composite implements HasHandlers { private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static ClientMessages messages = GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); interface MyUiBinder extends UiBinder { } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/NavigationToolbar.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/NavigationToolbar.java index ce2c40a7ee..b92c1efb08 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/NavigationToolbar.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/NavigationToolbar.java @@ -18,9 +18,9 @@ import org.roda.wui.client.browse.bundle.BrowseAIPBundle; import org.roda.wui.client.common.actions.AbstractActionable; import org.roda.wui.client.common.actions.Actionable; +import org.roda.wui.client.common.actions.model.ActionableBundle; +import org.roda.wui.client.common.actions.model.ActionableGroup; import org.roda.wui.client.common.actions.model.ActionableObject; -import org.roda.wui.client.common.actions.model.ActionsBundle; -import org.roda.wui.client.common.actions.model.ActionsGroup; import org.roda.wui.client.common.actions.widgets.ActionableWidgetBuilder; import org.roda.wui.client.common.lists.pagination.ListSelectionUtils; import org.roda.wui.client.common.popup.CalloutPopup; @@ -154,6 +154,7 @@ public SearchPopup(IndexedAIP aip) { } } + // TODO 2018-08-21 bferreira: change this to use button/action whitelist private static class SearchAipActions extends AbstractActionable { private static final SearchAipActions INSTANCE = new SearchAipActions(); @@ -167,6 +168,11 @@ public enum SearchAipAction implements Actionable.Action { SEARCH_DESCENDANTS, SEARCH_PACKAGE } + @Override + public Action actionForName(String name) { + return SearchAipAction.valueOf(name); + } + public static SearchAipActions get() { return INSTANCE; } @@ -190,19 +196,18 @@ public void act(Action action, IndexedAIP object, AsyncCallback createActionsBundle() { - ActionsBundle actionsBundle = new ActionsBundle<>(); + public ActionableBundle createActionsBundle() { + ActionableBundle actionableBundle = new ActionableBundle<>(); // SEARCH - ActionsGroup searchGroup = new ActionsGroup<>(); + ActionableGroup searchGroup = new ActionableGroup<>(); searchGroup.addButton(messages.searchContext(), SearchAipAction.SEARCH_DESCENDANTS, ActionImpact.NONE, "btn-sitemap"); searchGroup.addButton(messages.searchAIP(), SearchAipAction.SEARCH_PACKAGE, ActionImpact.NONE, "btn-archive"); - actionsBundle.addGroup(searchGroup); + actionableBundle.addGroup(searchGroup); - return actionsBundle; + return actionableBundle; } - } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/UserLogin.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/UserLogin.java index 2411a384f9..086bd6685e 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/UserLogin.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/UserLogin.java @@ -46,7 +46,7 @@ public class UserLogin { private static final ClientLogger logger = new ClientLogger(UserLogin.class.getName()); - private static final ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private static UserLoginServiceAsync userLoginService; private static UserLogin instance = null; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/Actionable.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/Actionable.java index f2cc700860..197fb49480 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/Actionable.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/Actionable.java @@ -9,8 +9,8 @@ import org.roda.core.data.v2.index.IsIndexed; import org.roda.core.data.v2.index.select.SelectedItems; +import org.roda.wui.client.common.actions.model.ActionableBundle; import org.roda.wui.client.common.actions.model.ActionableObject; -import org.roda.wui.client.common.actions.model.ActionsBundle; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -57,5 +57,7 @@ public enum ActionImpact { void act(Action action, SelectedItems objects, AsyncCallback callback); // Layout - ActionsBundle createActionsBundle(); + ActionableBundle createActionsBundle(); + + Action actionForName(String name); } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/AipActions.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/AipActions.java index 24f2ed5aec..5778bed511 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/AipActions.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/AipActions.java @@ -23,7 +23,7 @@ import org.roda.core.data.v2.ip.AIPState; import org.roda.core.data.v2.ip.IndexedAIP; import org.roda.core.data.v2.jobs.Job; -import org.roda.wui.client.browse.BrowseAIP; +import org.roda.wui.client.browse.BrowseTop; import org.roda.wui.client.browse.BrowserService; import org.roda.wui.client.browse.CreateDescriptiveMetadata; import org.roda.wui.client.browse.EditPermissions; @@ -31,8 +31,8 @@ import org.roda.wui.client.common.actions.callbacks.ActionAsyncCallback; import org.roda.wui.client.common.actions.callbacks.ActionLoadingAsyncCallback; import org.roda.wui.client.common.actions.callbacks.ActionNoAsyncCallback; -import org.roda.wui.client.common.actions.model.ActionsBundle; -import org.roda.wui.client.common.actions.model.ActionsGroup; +import org.roda.wui.client.common.actions.model.ActionableBundle; +import org.roda.wui.client.common.actions.model.ActionableGroup; import org.roda.wui.client.common.dialogs.Dialogs; import org.roda.wui.client.common.dialogs.RepresentationDialogs; import org.roda.wui.client.common.dialogs.SelectAipDialog; @@ -94,6 +94,11 @@ public enum AipAction implements Actionable.Action { APPRAISAL_ACCEPT, APPRAISAL_REJECT, DOWNLOAD_DOCUMENTATION, CHANGE_TYPE } + @Override + public AipAction actionForName(String name) { + return AipAction.valueOf(name); + } + public static AipActions get() { return GENERAL_INSTANCE; } @@ -224,7 +229,7 @@ public void onSuccess(Boolean confirmed) { Filter filter = new Filter(new NotSimpleFilterParameter(RodaConstants.INDEX_UUID, aipId)); SelectAipDialog selectAipDialog = new SelectAipDialog( messages.moveItemTitle() + " " + (StringUtils.isNotBlank(aip.getTitle()) ? aip.getTitle() : aip.getId()), - filter, justActive, false); + filter, justActive); selectAipDialog.setEmptyParentButtonVisible(true); selectAipDialog.setSingleSelectionMode(); selectAipDialog.showAndCenter(); @@ -305,8 +310,7 @@ public void onSuccess(Boolean confirmed) { filter.add(new NotSimpleFilterParameter(RodaConstants.INDEX_UUID, parentAipId)); } - SelectAipDialog selectAipDialog = new SelectAipDialog(messages.moveItemTitle(), filter, justActive, - true); + SelectAipDialog selectAipDialog = new SelectAipDialog(messages.moveItemTitle(), filter, justActive); selectAipDialog.setEmptyParentButtonVisible(parentAipId != null); selectAipDialog.showAndCenter(); if (counter > 0 && counter <= RodaConstants.DIALOG_FILTER_LIMIT_NUMBER) { @@ -404,9 +408,9 @@ public void onFailure(Throwable caught) { @Override public void run() { if (parentId != null) { - HistoryUtils.newHistory(BrowseAIP.RESOLVER, parentId); + HistoryUtils.newHistory(BrowseTop.RESOLVER, parentId); } else { - HistoryUtils.newHistory(BrowseAIP.RESOLVER); + HistoryUtils.newHistory(BrowseTop.RESOLVER); } callback.onFailure(caught); } @@ -635,11 +639,11 @@ public void onSuccessImpl(Void nothing) { } @Override - public ActionsBundle createActionsBundle() { - ActionsBundle aipActionsBundle = new ActionsBundle<>(); + public ActionableBundle createActionsBundle() { + ActionableBundle aipActionableBundle = new ActionableBundle<>(); // MANAGEMENT - ActionsGroup managementGroup = new ActionsGroup<>(messages.intellectualEntity()); + ActionableGroup managementGroup = new ActionableGroup<>(messages.intellectualEntity()); managementGroup.addButton(messages.newArchivalPackage(), AipAction.NEW_CHILD_AIP, ActionImpact.UPDATED, "btn-plus"); managementGroup.addButton(messages.changeTypeButton(), AipAction.CHANGE_TYPE, ActionImpact.UPDATED, "btn-edit"); managementGroup.addButton(messages.moveArchivalPackage(), AipAction.MOVE_IN_HIERARCHY, ActionImpact.UPDATED, @@ -650,21 +654,21 @@ public ActionsBundle createActionsBundle() { managementGroup.addButton(messages.downloadButton(), AipAction.DOWNLOAD, ActionImpact.NONE, "btn-download"); // PRESERVATION - ActionsGroup preservationGroup = new ActionsGroup<>(messages.preservationTitle()); + ActionableGroup preservationGroup = new ActionableGroup<>(messages.preservationTitle()); preservationGroup.addButton(messages.newProcessPreservation(), AipAction.NEW_PROCESS, ActionImpact.UPDATED, "btn-play"); preservationGroup.addButton(messages.preservationEventsDownloadButton(), AipAction.DOWNLOAD_EVENTS, ActionImpact.NONE, "btn-download"); // APPRAISAL - ActionsGroup appraisalGroup = new ActionsGroup<>(messages.appraisalTitle()); + ActionableGroup appraisalGroup = new ActionableGroup<>(messages.appraisalTitle()); appraisalGroup.addButton(messages.appraisalAccept(), AipAction.APPRAISAL_ACCEPT, ActionImpact.UPDATED, "btn-play"); appraisalGroup.addButton(messages.appraisalReject(), AipAction.APPRAISAL_REJECT, ActionImpact.DESTROYED, "btn-ban"); appraisalGroup.addButton(messages.downloadDocumentation(), AipAction.DOWNLOAD_DOCUMENTATION, ActionImpact.NONE, "btn-download"); - aipActionsBundle.addGroup(managementGroup).addGroup(preservationGroup).addGroup(appraisalGroup); + aipActionableBundle.addGroup(managementGroup).addGroup(preservationGroup).addGroup(appraisalGroup); - return aipActionsBundle; + return aipActionableBundle; } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/DisseminationActions.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/DisseminationActions.java index 8a146adde8..f514d49bcf 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/DisseminationActions.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/DisseminationActions.java @@ -17,14 +17,14 @@ import org.roda.core.data.v2.ip.FileLink; import org.roda.core.data.v2.ip.IndexedDIP; import org.roda.core.data.v2.ip.RepresentationLink; -import org.roda.wui.client.browse.BrowseAIP; +import org.roda.wui.client.browse.BrowseTop; import org.roda.wui.client.browse.BrowserService; import org.roda.wui.client.browse.EditPermissions; import org.roda.wui.client.common.LastSelectedItemsSingleton; import org.roda.wui.client.common.actions.callbacks.ActionLoadingAsyncCallback; import org.roda.wui.client.common.actions.callbacks.ActionNoAsyncCallback; -import org.roda.wui.client.common.actions.model.ActionsBundle; -import org.roda.wui.client.common.actions.model.ActionsGroup; +import org.roda.wui.client.common.actions.model.ActionableBundle; +import org.roda.wui.client.common.actions.model.ActionableGroup; import org.roda.wui.client.common.dialogs.Dialogs; import org.roda.wui.client.process.CreateSelectedJob; import org.roda.wui.common.client.tools.HistoryUtils; @@ -56,6 +56,11 @@ public enum DisseminationAction implements Actionable.Action { DOWNLOAD, REMOVE, NEW_PROCESS, UPDATE_PERMISSIONS; } + @Override + public DisseminationAction actionForName(String name) { + return DisseminationAction.valueOf(name); + } + public static DisseminationActions get() { return INSTANCE; } @@ -185,7 +190,7 @@ private void newProcess(SelectedItems selected, AsyncCallback callback) { LastSelectedItemsSingleton selectedItems = LastSelectedItemsSingleton.getInstance(); selectedItems.setLastHistory(HistoryUtils.getCurrentHistoryPath()); - HistoryUtils.newHistory(BrowseAIP.RESOLVER, EditPermissions.DIP_RESOLVER.getHistoryToken(), dip.getId()); + HistoryUtils.newHistory(BrowseTop.RESOLVER, EditPermissions.DIP_RESOLVER.getHistoryToken(), dip.getId()); callback.onSuccess(ActionImpact.UPDATED); } @@ -193,16 +198,17 @@ private void updatePermissions(SelectedItems dips, AsyncCallback createActionsBundle() { - ActionsBundle dipActionsBundle = new ActionsBundle<>(); + public ActionableBundle createActionsBundle() { + ActionableBundle dipActionableBundle = new ActionableBundle<>(); // MANAGEMENT - ActionsGroup managementGroup = new ActionsGroup<>(messages.viewRepresentationFileDisseminationTitle()); + ActionableGroup managementGroup = new ActionableGroup<>( + messages.viewRepresentationFileDisseminationTitle()); managementGroup.addButton(messages.downloadButton(), DisseminationAction.DOWNLOAD, ActionImpact.NONE, "btn-download"); managementGroup.addButton(messages.removeButton(), DisseminationAction.REMOVE, ActionImpact.DESTROYED, "btn-ban"); @@ -210,12 +216,12 @@ public ActionsBundle createActionsBundle() { ActionImpact.UPDATED, "btn-edit"); // PRESERVATION - ActionsGroup preservationGroup = new ActionsGroup<>(messages.preservationTitle()); + ActionableGroup preservationGroup = new ActionableGroup<>(messages.preservationTitle()); preservationGroup.addButton(messages.newProcessPreservation(), DisseminationAction.NEW_PROCESS, ActionImpact.UPDATED, "btn-play"); - dipActionsBundle.addGroup(managementGroup).addGroup(preservationGroup); + dipActionableBundle.addGroup(managementGroup).addGroup(preservationGroup); - return dipActionsBundle; + return dipActionableBundle; } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/DisseminationFileActions.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/DisseminationFileActions.java index 60a0693330..131ee3bc05 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/DisseminationFileActions.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/DisseminationFileActions.java @@ -12,8 +12,8 @@ import java.util.Set; import org.roda.core.data.v2.ip.DIPFile; -import org.roda.wui.client.common.actions.model.ActionsBundle; -import org.roda.wui.client.common.actions.model.ActionsGroup; +import org.roda.wui.client.common.actions.model.ActionableBundle; +import org.roda.wui.client.common.actions.model.ActionableGroup; import org.roda.wui.common.client.tools.RestUtils; import com.google.gwt.core.client.GWT; @@ -38,6 +38,11 @@ public enum DisseminationFileAction implements Actionable.Action { DOWNLOAD; } + @Override + public DisseminationFileAction actionForName(String name) { + return DisseminationFileAction.valueOf(name); + } + public static DisseminationFileActions get() { return INSTANCE; } @@ -68,11 +73,11 @@ private void download(DIPFile disseminationFile, AsyncCallback cal } @Override - public ActionsBundle createActionsBundle() { - ActionsBundle dipFileActionableBundle = new ActionsBundle<>(); + public ActionableBundle createActionsBundle() { + ActionableBundle dipFileActionableBundle = new ActionableBundle<>(); // MANAGEMENT - ActionsGroup managementGroup = new ActionsGroup<>(messages.disseminationFile()); + ActionableGroup managementGroup = new ActionableGroup<>(messages.disseminationFile()); managementGroup.addButton(messages.downloadButton(), DisseminationFileAction.DOWNLOAD, ActionImpact.NONE, "btn-download"); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/FileActions.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/FileActions.java index 63659c4522..b265f08c0e 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/FileActions.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/FileActions.java @@ -28,8 +28,8 @@ import org.roda.wui.client.common.actions.callbacks.ActionAsyncCallback; import org.roda.wui.client.common.actions.callbacks.ActionLoadingAsyncCallback; import org.roda.wui.client.common.actions.callbacks.ActionNoAsyncCallback; -import org.roda.wui.client.common.actions.model.ActionsBundle; -import org.roda.wui.client.common.actions.model.ActionsGroup; +import org.roda.wui.client.common.actions.model.ActionableBundle; +import org.roda.wui.client.common.actions.model.ActionableGroup; import org.roda.wui.client.common.dialogs.Dialogs; import org.roda.wui.client.common.dialogs.SelectFileDialog; import org.roda.wui.client.ingest.process.ShowJob; @@ -83,6 +83,11 @@ public enum FileAction implements Actionable.Action { DOWNLOAD, RENAME, MOVE, REMOVE, UPLOAD_FILES, CREATE_FOLDER, NEW_PROCESS, IDENTIFY_FORMATS, SHOW_EVENTS, SHOW_RISKS; } + @Override + public FileAction actionForName(String name) { + return FileAction.valueOf(name); + } + public static FileActions get() { return GENERAL_INSTANCE; } @@ -212,7 +217,7 @@ public void move(final String aipId, final String representationId, final Select Filter filter = new Filter(new SimpleFilterParameter(RodaConstants.FILE_AIP_ID, aipId), new SimpleFilterParameter(RodaConstants.FILE_REPRESENTATION_ID, representationId), new SimpleFilterParameter(RodaConstants.FILE_ISDIRECTORY, Boolean.toString(true))); - SelectFileDialog selectFileDialog = new SelectFileDialog(messages.moveItemTitle(), filter, true, false); + SelectFileDialog selectFileDialog = new SelectFileDialog(messages.moveItemTitle(), filter, true); selectFileDialog.setEmptyParentButtonVisible(true); selectFileDialog.setSingleSelectionMode(); selectFileDialog.showAndCenter(); @@ -496,11 +501,11 @@ public void showRisks(IndexedFile file, final AsyncCallback callba } @Override - public ActionsBundle createActionsBundle() { - ActionsBundle fileActionableBundle = new ActionsBundle<>(); + public ActionableBundle createActionsBundle() { + ActionableBundle fileActionableBundle = new ActionableBundle<>(); // MANAGEMENT - ActionsGroup managementGroup = new ActionsGroup<>(messages.sidebarFoldersFilesTitle()); + ActionableGroup managementGroup = new ActionableGroup<>(messages.sidebarFoldersFilesTitle()); managementGroup.addButton(messages.downloadButton(), FileAction.DOWNLOAD, ActionImpact.NONE, "btn-download", "fileDownloadButton"); managementGroup.addButton(messages.renameButton(), FileAction.RENAME, ActionImpact.UPDATED, "btn-edit", @@ -515,7 +520,7 @@ public ActionsBundle createActionsBundle() { "fileRemoveButton"); // PRESERVATION - ActionsGroup preservationGroup = new ActionsGroup<>(messages.preservationTitle()); + ActionableGroup preservationGroup = new ActionableGroup<>(messages.preservationTitle()); preservationGroup.addButton(messages.newProcessPreservation(), FileAction.NEW_PROCESS, ActionImpact.UPDATED, "btn-play", "fileNewProcessButton"); preservationGroup.addButton(messages.identifyFormatsButton(), FileAction.IDENTIFY_FORMATS, ActionImpact.UPDATED, diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/FormatActions.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/FormatActions.java index db577edd83..8ed62063be 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/FormatActions.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/FormatActions.java @@ -18,8 +18,8 @@ import org.roda.wui.client.browse.BrowserService; import org.roda.wui.client.common.LastSelectedItemsSingleton; import org.roda.wui.client.common.actions.callbacks.ActionNoAsyncCallback; -import org.roda.wui.client.common.actions.model.ActionsBundle; -import org.roda.wui.client.common.actions.model.ActionsGroup; +import org.roda.wui.client.common.actions.model.ActionableBundle; +import org.roda.wui.client.common.actions.model.ActionableGroup; import org.roda.wui.client.common.dialogs.Dialogs; import org.roda.wui.client.common.lists.utils.ClientSelectedItemsUtils; import org.roda.wui.client.ingest.process.ShowJob; @@ -57,6 +57,11 @@ public enum FormatAction implements Action { NEW, REMOVE, START_PROCESS, EDIT } + @Override + public FormatAction actionForName(String name) { + return FormatAction.valueOf(name); + } + public static FormatActions get() { return INSTANCE; } @@ -181,17 +186,17 @@ private void edit(Format format, AsyncCallback callback) { } @Override - public ActionsBundle createActionsBundle() { - ActionsBundle formatActionableBundle = new ActionsBundle<>(); + public ActionableBundle createActionsBundle() { + ActionableBundle formatActionableBundle = new ActionableBundle<>(); // MANAGEMENT - ActionsGroup managementGroup = new ActionsGroup<>(messages.sidebarActionsTitle()); + ActionableGroup managementGroup = new ActionableGroup<>(messages.sidebarActionsTitle()); managementGroup.addButton(messages.newButton(), FormatAction.NEW, ActionImpact.UPDATED, "btn-plus"); managementGroup.addButton(messages.editButton(), FormatAction.EDIT, ActionImpact.UPDATED, "btn-edit"); managementGroup.addButton(messages.removeButton(), FormatAction.REMOVE, ActionImpact.DESTROYED, "btn-ban"); // PRESERVATION - ActionsGroup preservationGroup = new ActionsGroup<>(messages.preservationTitle()); + ActionableGroup preservationGroup = new ActionableGroup<>(messages.preservationTitle()); preservationGroup.addButton(messages.formatRegisterProcessButton(), FormatAction.START_PROCESS, ActionImpact.UPDATED, "btn-play"); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/PreservationAgentActions.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/PreservationAgentActions.java index b3ba9cf7d2..c34e78b629 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/PreservationAgentActions.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/PreservationAgentActions.java @@ -13,8 +13,8 @@ import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.ip.metadata.IndexedPreservationAgent; -import org.roda.wui.client.common.actions.model.ActionsBundle; -import org.roda.wui.client.common.actions.model.ActionsGroup; +import org.roda.wui.client.common.actions.model.ActionableBundle; +import org.roda.wui.client.common.actions.model.ActionableGroup; import org.roda.wui.common.client.tools.RestUtils; import com.google.gwt.core.client.GWT; @@ -39,6 +39,11 @@ public enum PreservationAgentAction implements Action DOWNLOAD; } + @Override + public PreservationAgentAction actionForName(String name) { + return PreservationAgentAction.valueOf(name); + } + public static PreservationAgentActions get() { return INSTANCE; } @@ -67,11 +72,11 @@ private void download(IndexedPreservationAgent agent, AsyncCallback createActionsBundle() { - ActionsBundle preservationAgentActionableBundle = new ActionsBundle<>(); + public ActionableBundle createActionsBundle() { + ActionableBundle preservationAgentActionableBundle = new ActionableBundle<>(); // MANAGEMENT - ActionsGroup managementGroup = new ActionsGroup<>(messages.sidebarActionsTitle()); + ActionableGroup managementGroup = new ActionableGroup<>(messages.sidebarActionsTitle()); managementGroup.addButton(messages.downloadButton(), PreservationAgentAction.DOWNLOAD, ActionImpact.NONE, "btn-download"); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/PreservationEventActions.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/PreservationEventActions.java index 8bdd66aad2..ca76ccff23 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/PreservationEventActions.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/PreservationEventActions.java @@ -13,8 +13,8 @@ import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.ip.metadata.IndexedPreservationEvent; -import org.roda.wui.client.common.actions.model.ActionsBundle; -import org.roda.wui.client.common.actions.model.ActionsGroup; +import org.roda.wui.client.common.actions.model.ActionableBundle; +import org.roda.wui.client.common.actions.model.ActionableGroup; import org.roda.wui.common.client.tools.RestUtils; import com.google.gwt.core.client.GWT; @@ -50,6 +50,11 @@ public enum PreservationEventAction implements Action DOWNLOAD; } + @Override + public PreservationEventAction actionForName(String name) { + return PreservationEventAction.valueOf(name); + } + /** * Use this when the IndexedPreservationEvent is not a partial object */ @@ -97,11 +102,11 @@ private void download(IndexedPreservationEvent event, AsyncCallback createActionsBundle() { - ActionsBundle preservationEventActionableBundle = new ActionsBundle<>(); + public ActionableBundle createActionsBundle() { + ActionableBundle preservationEventActionableBundle = new ActionableBundle<>(); // MANAGEMENT - ActionsGroup managementGroup = new ActionsGroup<>(messages.sidebarActionsTitle()); + ActionableGroup managementGroup = new ActionableGroup<>(messages.sidebarActionsTitle()); managementGroup.addButton(messages.downloadButton(), PreservationEventAction.DOWNLOAD, ActionImpact.NONE, "btn-download"); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RODAMemberActions.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RODAMemberActions.java index df24f6f287..e1c6748acd 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RODAMemberActions.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RODAMemberActions.java @@ -7,8 +7,8 @@ import org.roda.core.data.v2.index.select.SelectedItems; import org.roda.core.data.v2.user.RODAMember; import org.roda.wui.client.common.actions.callbacks.ActionAsyncCallback; -import org.roda.wui.client.common.actions.model.ActionsBundle; -import org.roda.wui.client.common.actions.model.ActionsGroup; +import org.roda.wui.client.common.actions.model.ActionableBundle; +import org.roda.wui.client.common.actions.model.ActionableGroup; import org.roda.wui.client.management.CreateGroup; import org.roda.wui.client.management.CreateUser; import org.roda.wui.client.management.UserManagementService; @@ -45,6 +45,11 @@ public enum RODAMemberAction implements Actionable.Action { NEW_USER, NEW_GROUP, ACTIVATE, DEACTIVATE, REMOVE } + @Override + public RODAMemberAction actionForName(String name) { + return RODAMemberAction.valueOf(name); + } + public static RODAMemberActions get() { return GENERAL_INSTANCE; } @@ -146,21 +151,22 @@ private void createGroup(AsyncCallback callback) { } @Override - public ActionsBundle createActionsBundle() { - ActionsBundle transferredResourcesActionsBundle = new ActionsBundle<>(); + public ActionableBundle createActionsBundle() { + ActionableBundle transferredResourcesActionableBundle = new ActionableBundle<>(); // ACTIONS - ActionsGroup actionsGroup = new ActionsGroup<>(messages.sidebarActionsTitle()); - actionsGroup.addButton(messages.addUserButton(), RODAMemberAction.NEW_USER, ActionImpact.UPDATED, "btn-plus"); - actionsGroup.addButton(messages.addGroupButton(), RODAMemberAction.NEW_GROUP, ActionImpact.UPDATED, "btn-plus"); + ActionableGroup actionableGroup = new ActionableGroup<>(messages.sidebarActionsTitle()); + actionableGroup.addButton(messages.addUserButton(), RODAMemberAction.NEW_USER, ActionImpact.UPDATED, "btn-plus"); + actionableGroup.addButton(messages.addGroupButton(), RODAMemberAction.NEW_GROUP, ActionImpact.UPDATED, "btn-plus"); - actionsGroup.addButton(messages.editUserActivate(), RODAMemberAction.ACTIVATE, ActionImpact.UPDATED, "btn-check"); - actionsGroup.addButton(messages.editUserDeactivate(), RODAMemberAction.DEACTIVATE, ActionImpact.UPDATED, + actionableGroup.addButton(messages.editUserActivate(), RODAMemberAction.ACTIVATE, ActionImpact.UPDATED, + "btn-check"); + actionableGroup.addButton(messages.editUserDeactivate(), RODAMemberAction.DEACTIVATE, ActionImpact.UPDATED, "btn-check"); - actionsGroup.addButton(messages.editUserRemove(), RODAMemberAction.REMOVE, ActionImpact.DESTROYED, "btn-ban"); + actionableGroup.addButton(messages.editUserRemove(), RODAMemberAction.REMOVE, ActionImpact.DESTROYED, "btn-ban"); - transferredResourcesActionsBundle.addGroup(actionsGroup); + transferredResourcesActionableBundle.addGroup(actionableGroup); - return transferredResourcesActionsBundle; + return transferredResourcesActionableBundle; } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RepresentationActions.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RepresentationActions.java index 2a1bcc9495..db91f9d0eb 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RepresentationActions.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RepresentationActions.java @@ -28,8 +28,8 @@ import org.roda.wui.client.common.actions.callbacks.ActionAsyncCallback; import org.roda.wui.client.common.actions.callbacks.ActionLoadingAsyncCallback; import org.roda.wui.client.common.actions.callbacks.ActionNoAsyncCallback; -import org.roda.wui.client.common.actions.model.ActionsBundle; -import org.roda.wui.client.common.actions.model.ActionsGroup; +import org.roda.wui.client.common.actions.model.ActionableBundle; +import org.roda.wui.client.common.actions.model.ActionableGroup; import org.roda.wui.client.common.dialogs.Dialogs; import org.roda.wui.client.common.dialogs.RepresentationDialogs; import org.roda.wui.client.ingest.process.ShowJob; @@ -79,6 +79,11 @@ public enum RepresentationAction implements Actionable.Action createActionsBundle() { - ActionsBundle representationActionableBundle = new ActionsBundle<>(); + public ActionableBundle createActionsBundle() { + ActionableBundle representationActionableBundle = new ActionableBundle<>(); // MANAGEMENT - ActionsGroup managementGroup = new ActionsGroup<>(messages.representation()); + ActionableGroup managementGroup = new ActionableGroup<>(messages.representation()); managementGroup.addButton(messages.newRepresentationButton(), RepresentationAction.NEW, ActionImpact.UPDATED, "btn-plus"); managementGroup.addButton(messages.downloadButton(), RepresentationAction.DOWNLOAD, ActionImpact.NONE, @@ -439,7 +444,7 @@ public ActionsBundle createActionsBundle() { managementGroup.addButton(messages.removeButton(), RepresentationAction.REMOVE, ActionImpact.DESTROYED, "btn-ban"); // PRESERVATION - ActionsGroup preservationGroup = new ActionsGroup<>(messages.preservationTitle()); + ActionableGroup preservationGroup = new ActionableGroup<>(messages.preservationTitle()); preservationGroup.addButton(messages.newProcessPreservation(), RepresentationAction.NEW_PROCESS, ActionImpact.UPDATED, "btn-play"); preservationGroup.addButton(messages.identifyFormatsButton(), RepresentationAction.IDENTIFY_FORMATS, @@ -450,7 +455,8 @@ public ActionsBundle createActionsBundle() { "btn-play"); // FILES AND FOLDERS - ActionsGroup filesAndFoldersGroup = new ActionsGroup<>(messages.sidebarFoldersFilesTitle()); + ActionableGroup filesAndFoldersGroup = new ActionableGroup<>( + messages.sidebarFoldersFilesTitle()); filesAndFoldersGroup.addButton(messages.uploadFilesButton(), RepresentationAction.UPLOAD_FILES, ActionImpact.UPDATED, "btn-upload"); filesAndFoldersGroup.addButton(messages.createFolderButton(), RepresentationAction.CREATE_FOLDER, diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RepresentationInformationActions.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RepresentationInformationActions.java index fda115ec8b..1a15719739 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RepresentationInformationActions.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RepresentationInformationActions.java @@ -19,8 +19,8 @@ import org.roda.wui.client.common.LastSelectedItemsSingleton; import org.roda.wui.client.common.actions.callbacks.ActionAsyncCallback; import org.roda.wui.client.common.actions.callbacks.ActionNoAsyncCallback; -import org.roda.wui.client.common.actions.model.ActionsBundle; -import org.roda.wui.client.common.actions.model.ActionsGroup; +import org.roda.wui.client.common.actions.model.ActionableBundle; +import org.roda.wui.client.common.actions.model.ActionableGroup; import org.roda.wui.client.common.dialogs.Dialogs; import org.roda.wui.client.common.lists.utils.ClientSelectedItemsUtils; import org.roda.wui.client.ingest.process.ShowJob; @@ -62,6 +62,11 @@ public enum RepresentationInformationAction implements Action } @Override - public ActionsBundle createActionsBundle() { - ActionsBundle formatActionableBundle = new ActionsBundle<>(); + public ActionableBundle createActionsBundle() { + ActionableBundle formatActionableBundle = new ActionableBundle<>(); // MANAGEMENT - ActionsGroup managementGroup = new ActionsGroup<>(messages.sidebarActionsTitle()); + ActionableGroup managementGroup = new ActionableGroup<>(messages.sidebarActionsTitle()); managementGroup.addButton(messages.newButton(), RepresentationInformationAction.NEW, ActionImpact.UPDATED, "btn-plus"); managementGroup.addButton(messages.editButton(), RepresentationInformationAction.EDIT, ActionImpact.UPDATED, @@ -215,7 +220,7 @@ public ActionsBundle createActionsBundle() { "btn-ban"); // PRESERVATION - ActionsGroup preservationGroup = new ActionsGroup<>(messages.preservationTitle()); + ActionableGroup preservationGroup = new ActionableGroup<>(messages.preservationTitle()); preservationGroup.addButton(messages.formatRegisterProcessButton(), RepresentationInformationAction.START_PROCESS, ActionImpact.UPDATED, "btn-play"); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RiskActions.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RiskActions.java index ef82488455..93c384b62b 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RiskActions.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RiskActions.java @@ -19,8 +19,8 @@ import org.roda.wui.client.common.LastSelectedItemsSingleton; import org.roda.wui.client.common.actions.callbacks.ActionAsyncCallback; import org.roda.wui.client.common.actions.callbacks.ActionNoAsyncCallback; -import org.roda.wui.client.common.actions.model.ActionsBundle; -import org.roda.wui.client.common.actions.model.ActionsGroup; +import org.roda.wui.client.common.actions.model.ActionableBundle; +import org.roda.wui.client.common.actions.model.ActionableGroup; import org.roda.wui.client.common.dialogs.Dialogs; import org.roda.wui.client.common.lists.utils.ClientSelectedItemsUtils; import org.roda.wui.client.common.utils.AsyncCallbackUtils; @@ -64,6 +64,11 @@ public enum IndexedRiskAction implements Action { NEW, REMOVE, START_PROCESS, EDIT, REFRESH, HISTORY } + @Override + public IndexedRiskAction actionForName(String name) { + return IndexedRiskAction.valueOf(name); + } + public static RiskActions get() { return INSTANCE_NO_HISTORY; } @@ -160,9 +165,9 @@ private void remove(SelectedItems objects, AsyncCallback(callback) { + Dialogs.showConfirmDialog(messages.riskRemoveConfirmDialogTitle(), + messages.riskRemoveSelectedConfirmDialogMessage(size), messages.riskRemoveConfirmDialogCancel(), + messages.riskRemoveConfirmDialogOk(), new ActionNoAsyncCallback(callback) { @Override public void onSuccess(Boolean confirmed) { @@ -220,11 +225,11 @@ private void edit(IndexedRisk object, AsyncCallback callback) { } @Override - public ActionsBundle createActionsBundle() { - ActionsBundle formatActionableBundle = new ActionsBundle<>(); + public ActionableBundle createActionsBundle() { + ActionableBundle formatActionableBundle = new ActionableBundle<>(); // MANAGEMENT - ActionsGroup managementGroup = new ActionsGroup<>(messages.sidebarActionsTitle()); + ActionableGroup managementGroup = new ActionableGroup<>(messages.sidebarActionsTitle()); managementGroup.addButton(messages.riskHistoryButton(), IndexedRiskAction.HISTORY, ActionImpact.NONE, "btn-clock"); managementGroup.addButton(messages.refreshButton(), IndexedRiskAction.REFRESH, ActionImpact.UPDATED, "btn-refresh"); managementGroup.addButton(messages.newButton(), IndexedRiskAction.NEW, ActionImpact.UPDATED, "btn-plus"); @@ -232,7 +237,7 @@ public ActionsBundle createActionsBundle() { managementGroup.addButton(messages.removeButton(), IndexedRiskAction.REMOVE, ActionImpact.DESTROYED, "btn-ban"); // PRESERVATION - ActionsGroup preservationGroup = new ActionsGroup<>(messages.preservationTitle()); + ActionableGroup preservationGroup = new ActionableGroup<>(messages.preservationTitle()); preservationGroup.addButton(messages.formatRegisterProcessButton(), IndexedRiskAction.START_PROCESS, ActionImpact.UPDATED, "btn-play"); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RiskIncidenceActions.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RiskIncidenceActions.java index 2bcfee1ffe..896234c13d 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RiskIncidenceActions.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RiskIncidenceActions.java @@ -19,8 +19,9 @@ import org.roda.wui.client.common.actions.callbacks.ActionAsyncCallback; import org.roda.wui.client.common.actions.callbacks.ActionLoadingAsyncCallback; import org.roda.wui.client.common.actions.callbacks.ActionNoAsyncCallback; -import org.roda.wui.client.common.actions.model.ActionsBundle; -import org.roda.wui.client.common.actions.model.ActionsGroup; +import org.roda.wui.client.common.actions.model.ActionableBundle; +import org.roda.wui.client.common.actions.model.ActionableGroup; +import org.roda.wui.client.common.dialogs.Dialogs; import org.roda.wui.client.common.dialogs.EditMultipleRiskIncidenceDialog; import org.roda.wui.client.common.lists.utils.ClientSelectedItemsUtils; import org.roda.wui.client.planning.EditRiskIncidence; @@ -55,6 +56,11 @@ public enum RiskIncidenceAction implements Action { EDIT, REMOVE, START_PROCESS } + @Override + public RiskIncidenceAction actionForName(String name) { + return RiskIncidenceAction.valueOf(name); + } + public static RiskIncidenceActions get() { return INSTANCE; } @@ -115,14 +121,30 @@ private void remove(SelectedItems objects, AsyncCallback(callback) { @Override - public void onSuccess(final Long result) { - BrowserService.Util.getInstance().deleteRiskIncidences(objects, new ActionAsyncCallback(callback) { - @Override - public void onSuccess(Void nothing) { - Toast.showInfo(messages.removeSuccessTitle(), messages.removeSuccessMessage(result)); - doActionCallbackDestroyed(); - } - }); + public void onSuccess(final Long size) { + Dialogs.showConfirmDialog(messages.riskIncidenceRemoveConfirmDialogTitle(), + messages.riskIncidenceRemoveSelectedConfirmDialogMessage(size), + messages.riskIncidenceRemoveConfirmDialogCancel(), messages.riskIncidenceRemoveConfirmDialogOk(), + new ActionAsyncCallback(callback) { + + @Override + public void onSuccess(Boolean confirmed) { + if (confirmed) { + BrowserService.Util.getInstance().deleteRiskIncidences(objects, + new ActionAsyncCallback(callback) { + + @Override + public void onSuccess(Void nothing) { + Toast.showInfo(messages.riskIncidenceRemoveSuccessTitle(), + messages.riskIncidenceRemoveSuccessMessage(size)); + doActionCallbackDestroyed(); + } + }); + } else { + doActionCallbackNone(); + } + } + }); } }); } @@ -152,16 +174,16 @@ public void onSuccessImpl(Void result) { } @Override - public ActionsBundle createActionsBundle() { - ActionsBundle actionableBundle = new ActionsBundle<>(); + public ActionableBundle createActionsBundle() { + ActionableBundle actionableBundle = new ActionableBundle<>(); // MANAGEMENT - ActionsGroup managementGroup = new ActionsGroup<>(messages.sidebarActionsTitle()); + ActionableGroup managementGroup = new ActionableGroup<>(messages.sidebarActionsTitle()); managementGroup.addButton(messages.editButton(), RiskIncidenceAction.EDIT, ActionImpact.UPDATED, "btn-edit"); managementGroup.addButton(messages.removeButton(), RiskIncidenceAction.REMOVE, ActionImpact.DESTROYED, "btn-ban"); // PRESERVATION - ActionsGroup preservationGroup = new ActionsGroup<>(messages.preservationTitle()); + ActionableGroup preservationGroup = new ActionableGroup<>(messages.preservationTitle()); preservationGroup.addButton(messages.formatRegisterProcessButton(), RiskIncidenceAction.START_PROCESS, ActionImpact.UPDATED, "btn-play"); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/TransferredResourceActions.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/TransferredResourceActions.java index aa97973765..c3c63b33c0 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/TransferredResourceActions.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/TransferredResourceActions.java @@ -17,8 +17,8 @@ import org.roda.wui.client.common.LastSelectedItemsSingleton; import org.roda.wui.client.common.actions.callbacks.ActionAsyncCallback; import org.roda.wui.client.common.actions.callbacks.ActionNoAsyncCallback; -import org.roda.wui.client.common.actions.model.ActionsBundle; -import org.roda.wui.client.common.actions.model.ActionsGroup; +import org.roda.wui.client.common.actions.model.ActionableBundle; +import org.roda.wui.client.common.actions.model.ActionableGroup; import org.roda.wui.client.common.dialogs.Dialogs; import org.roda.wui.client.common.dialogs.SelectTransferResourceDialog; import org.roda.wui.client.common.lists.utils.ClientSelectedItemsUtils; @@ -74,6 +74,11 @@ public enum TransferredResourceAction implements Actionable.Action createActionsBundle() { - ActionsBundle transferredResourcesActionsBundle = new ActionsBundle<>(); + public ActionableBundle createActionsBundle() { + ActionableBundle transferredResourcesActionableBundle = new ActionableBundle<>(); // MANAGEMENT - ActionsGroup managementGroup = new ActionsGroup<>(messages.sidebarFoldersFilesTitle()); + ActionableGroup managementGroup = new ActionableGroup<>(messages.sidebarFoldersFilesTitle()); managementGroup.addButton(messages.refreshButton(), TransferredResourceAction.REFRESH, ActionImpact.UPDATED, "btn-refresh"); // TODO: add title: @@ -389,12 +394,12 @@ public ActionsBundle createActionsBundle() { managementGroup.addButton(messages.removeWholeFolderButton(), TransferredResourceAction.REMOVE, ActionImpact.DESTROYED, "btn-danger btn-ban"); - ActionsGroup preservationGroup = new ActionsGroup<>(messages.sidebarIngestTitle()); + ActionableGroup preservationGroup = new ActionableGroup<>(messages.sidebarIngestTitle()); preservationGroup.addButton(messages.ingestWholeFolderButton(), TransferredResourceAction.NEW_PROCESS, ActionImpact.UPDATED, "btn-play"); - transferredResourcesActionsBundle.addGroup(managementGroup).addGroup(preservationGroup); + transferredResourcesActionableBundle.addGroup(managementGroup).addGroup(preservationGroup); - return transferredResourcesActionsBundle; + return transferredResourcesActionableBundle; } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionableBundle.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionableBundle.java new file mode 100644 index 0000000000..3e79aef6c8 --- /dev/null +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionableBundle.java @@ -0,0 +1,26 @@ +package org.roda.wui.client.common.actions.model; + +import java.util.ArrayList; +import java.util.List; + +import org.roda.core.data.v2.index.IsIndexed; + +/** + * @author Bruno Ferreira + */ +public class ActionableBundle { + private List> groups = new ArrayList<>(); + + public ActionableBundle() { + + } + + public ActionableBundle addGroup(ActionableGroup group) { + groups.add(group); + return this; + } + + public List> getGroups() { + return groups; + } +} diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionsButton.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionableButton.java similarity index 68% rename from roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionsButton.java rename to roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionableButton.java index 2e4ddfa092..9869bf22b1 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionsButton.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionableButton.java @@ -6,22 +6,20 @@ import org.roda.core.data.v2.index.IsIndexed; import org.roda.wui.client.common.actions.Actionable; -import com.google.gwt.user.client.Random; - /** * @author Bruno Ferreira */ -public class ActionsButton { +public class ActionableButton { private String text; private Actionable.Action action; private Actionable.ActionImpact impact; private List extraCssClasses; - public ActionsButton() { + public ActionableButton() { } - public ActionsButton(String text, Actionable.Action action, Actionable.ActionImpact impact, + public ActionableButton(String text, Actionable.Action action, Actionable.ActionImpact impact, String... extraCssClasses) { this.text = text; this.action = action; @@ -45,8 +43,11 @@ public List getExtraCssClasses() { return extraCssClasses; } + @Deprecated public String getId() { - // TODO: generate an ID based on the action and i18n key - return String.valueOf(Random.nextInt(100000)); + // TODO 2018-08-21 bferreira: generate an ID based on the action (and maybe also + // something else) to make the button configurable via .properties and in + // theme.css + return null; } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionableGroup.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionableGroup.java new file mode 100644 index 0000000000..605ee8e0c4 --- /dev/null +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionableGroup.java @@ -0,0 +1,39 @@ +package org.roda.wui.client.common.actions.model; + +import java.util.ArrayList; +import java.util.List; + +import org.roda.core.data.v2.index.IsIndexed; +import org.roda.wui.client.common.actions.Actionable; + +/** + * @author Bruno Ferreira + */ +public class ActionableGroup { + private final ActionableTitle title; + private List> buttons = new ArrayList<>(); + + public ActionableGroup(String title) { + this.title = new ActionableTitle(title); + } + + public ActionableGroup() { + this.title = new ActionableTitle(null); + } + + // TODO: remove extraCssClasses and generate them based on other info + public ActionableGroup addButton(String text, Actionable.Action action, Actionable.ActionImpact impact, + String... extraCssClasses) { + ActionableButton button = new ActionableButton<>(text, action, impact, extraCssClasses); + buttons.add(button); + return this; + } + + public ActionableTitle getTitle() { + return title; + } + + public List> getButtons() { + return this.buttons; + } +} diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionsTitle.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionableTitle.java similarity index 84% rename from roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionsTitle.java rename to roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionableTitle.java index 618afbee3c..0a6e2bc614 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionsTitle.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionableTitle.java @@ -5,10 +5,10 @@ /** * @author Bruno Ferreira */ -public class ActionsTitle { +public class ActionableTitle { private final String title; - ActionsTitle(String title) { + ActionableTitle(String title) { this.title = title; } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionsBundle.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionsBundle.java deleted file mode 100644 index 9eca78501f..0000000000 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionsBundle.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.roda.wui.client.common.actions.model; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.roda.core.data.v2.index.IsIndexed; - -/** - * @author Bruno Ferreira - */ -public class ActionsBundle implements Iterable> { - private List> groups = new ArrayList<>(); - - public ActionsBundle() { - - } - - public ActionsBundle addGroup(ActionsGroup group) { - groups.add(group); - return this; - } - - @Override - public Iterator> iterator() { - return groups.iterator(); - } -} diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionsGroup.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionsGroup.java deleted file mode 100644 index b2d69c868d..0000000000 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/model/ActionsGroup.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.roda.wui.client.common.actions.model; - -import java.util.ArrayList; -import java.util.List; - -import org.roda.core.data.v2.index.IsIndexed; -import org.roda.wui.client.common.actions.Actionable; - -/** - * @author Bruno Ferreira - */ -public class ActionsGroup { - private final ActionsTitle title; - private List> buttons = new ArrayList<>(); - - public ActionsGroup(String title) { - this.title = new ActionsTitle(title); - } - - public ActionsGroup() { - this.title = new ActionsTitle(null); - } - - // TODO: remove extraCssClasses and generate them based on other info - public ActionsGroup addButton(String text, Actionable.Action action, Actionable.ActionImpact impact, - String... extraCssClasses) { - ActionsButton button = new ActionsButton<>(text, action, impact, extraCssClasses); - buttons.add(button); - return this; - } - - public ActionsTitle getTitle() { - return title; - } - - public List> getButtons() { - return this.buttons; - } -} diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/widgets/ActionableButton.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/widgets/ActionButton.java similarity index 83% rename from roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/widgets/ActionableButton.java rename to roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/widgets/ActionButton.java index dc356f8b32..19d4a51aab 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/widgets/ActionableButton.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/widgets/ActionButton.java @@ -1,9 +1,8 @@ package org.roda.wui.client.common.actions.widgets; import org.roda.core.data.v2.index.IsIndexed; -import org.roda.wui.client.common.actions.model.ActionsButton; +import org.roda.wui.client.common.actions.model.ActionableButton; -import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.HasClickHandlers; @@ -19,13 +18,13 @@ /** * @author Bruno Ferreira */ -public class ActionableButton extends Composite implements HasEnabled, HasClickHandlers, HasText { - private final ActionsButton actionButton; +public class ActionButton extends Composite implements HasEnabled, HasClickHandlers, HasText { + private final ActionableButton actionButton; private FlowPanel button; private Label label; - public ActionableButton(ActionsButton actionButton) { + public ActionButton(ActionableButton actionButton) { this.actionButton = actionButton; button = new FlowPanel(); @@ -35,7 +34,7 @@ public ActionableButton(ActionsButton actionButton) { addStyleDependentName(actionButton.getImpact().toString().toLowerCase()); setEnabled(true); - String iconClass = "fa fa-exclamation-triangle"; + String iconClass = "fa fa-question-circle"; for (String possibleIcon : actionButton.getExtraCssClasses()) { if (possibleIcon.startsWith("btn-")) { iconClass = possibleIcon.replaceFirst("btn-", "fa fa-"); @@ -52,8 +51,6 @@ public ActionableButton(ActionsButton actionButton) { @Override public HandlerRegistration addClickHandler(ClickHandler handler) { - GWT.log("addedClickHandler"); - return addDomHandler(new ClickHandlerWrapper(this, handler), ClickEvent.getType()); } @@ -88,10 +85,10 @@ public void setText(String text) { * enabled */ private class ClickHandlerWrapper implements ClickHandler { - private final ActionableButton button; + private final ActionButton button; private final ClickHandler innerClickHandler; - ClickHandlerWrapper(ActionableButton button, ClickHandler innerClickHandler) { + ClickHandlerWrapper(ActionButton button, ClickHandler innerClickHandler) { this.button = button; this.innerClickHandler = innerClickHandler; } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/widgets/ActionableWidgetBuilder.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/widgets/ActionableWidgetBuilder.java index e950c3c83c..d8d0bcbb28 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/widgets/ActionableWidgetBuilder.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/widgets/ActionableWidgetBuilder.java @@ -9,13 +9,16 @@ import static org.roda.wui.client.common.actions.Actionable.ActionImpact; +import java.util.List; + import org.roda.core.data.v2.index.IsIndexed; import org.roda.wui.client.common.NoAsyncCallback; import org.roda.wui.client.common.actions.Actionable; +import org.roda.wui.client.common.actions.model.ActionableBundle; +import org.roda.wui.client.common.actions.model.ActionableButton; +import org.roda.wui.client.common.actions.model.ActionableGroup; import org.roda.wui.client.common.actions.model.ActionableObject; -import org.roda.wui.client.common.actions.model.ActionsBundle; -import org.roda.wui.client.common.actions.model.ActionsButton; -import org.roda.wui.client.common.actions.model.ActionsGroup; +import org.roda.wui.client.common.actions.model.ActionableTitle; import org.roda.wui.client.common.popup.CalloutPopup; import org.roda.wui.client.common.utils.StringUtils; import org.roda.wui.common.client.tools.DescriptionLevelUtils; @@ -56,14 +59,6 @@ public ActionableWidgetBuilder(Actionable actionable) { } // Adding a title - - public ActionableWidgetBuilder withTitle(String title, String icon) { - this.title = title; - this.icon = handleIconCss(icon); - this.titleCss = TITLE_CSS_H1_DEFAULT; - return this; - } - public ActionableWidgetBuilder withTitle(String title) { this.title = title; this.icon = null; @@ -71,13 +66,6 @@ public ActionableWidgetBuilder withTitle(String title) { return this; } - public ActionableWidgetBuilder withTitleForCard(String title, String icon) { - this.title = title; - this.icon = handleIconCss(icon); - this.titleCss = TITLE_CSS_H5; - return this; - } - public ActionableWidgetBuilder withTitleSmall(String title, String icon) { this.title = title; this.icon = handleIconCss(icon); @@ -85,20 +73,6 @@ public ActionableWidgetBuilder withTitleSmall(String title, String icon) { return this; } - public ActionableWidgetBuilder withTitleLoading() { - this.title = messages.browseLoading(); - this.icon = null; - this.titleCss = TITLE_CSS_H1_DEFAULT; - return this; - } - - public ActionableWidgetBuilder withTitleSmallLoading() { - this.title = messages.browseLoading(); - this.icon = null; - this.titleCss = TITLE_CSS_H2; - return this; - } - // Adding a callback public ActionableWidgetBuilder withCallback(AsyncCallback callback) { @@ -116,13 +90,27 @@ public ActionableWidgetBuilder changeActionable(Actionable actionable) { // Builder methods for lists and titles public Widget buildListWithObjects(ActionableObject objects) { - ActionsBundle actionsBundle = actionable.createActionsBundle(); - return createActionsMenu(actionsBundle, objects); + ActionableBundle actionableBundle = actionable.createActionsBundle(); + return createActionsMenu(actionableBundle, objects); + } + + public Widget buildListWithObjects(ActionableObject objects, List> actionWhitelist) { + ActionableBundle actionableBundle = actionable.createActionsBundle(); + + if (!actionWhitelist.isEmpty()) { + // remove unwanted buttons, and the whole group if it is empty + actionableBundle.getGroups().removeIf(group -> { + group.getButtons().removeIf(button -> !actionWhitelist.contains(button.getAction())); + return group.getButtons().isEmpty(); + }); + } + + return createActionsMenu(actionableBundle, objects); } public Widget buildTitleWithObjects(ActionableObject objects) { - ActionsBundle actionsBundle = actionable.createActionsBundle(); - return createActionsTitle(actionsBundle, objects); + ActionableBundle actionableBundle = actionable.createActionsBundle(); + return createActionsTitle(actionableBundle, objects); } public Widget buildTitleWithoutActions() { @@ -131,40 +119,54 @@ public Widget buildTitleWithoutActions() { // Internal (GUI elements creation) - private FlowPanel createActionsMenu(ActionsBundle actionsBundle, ActionableObject objects) { + private FlowPanel createActionsMenu(ActionableBundle actionableBundle, ActionableObject objects) { FlowPanel panel = new FlowPanel(); panel.addStyleName("actionable-menu"); boolean isEmpty = true; - for (ActionsGroup actionGroup : actionsBundle) { - for (ActionsButton actionButton : actionGroup.getButtons()) { - if (actionable.canAct(actionButton.getAction(), objects)) { - - ActionableButton button = new ActionableButton<>(actionButton); - - button.addClickHandler(event -> { - button.setEnabled(false); - GWT.log("button disabled: " + button.getText()); - actionable.act(actionButton.getAction(), objects, new AsyncCallback() { - @Override - public void onFailure(Throwable caught) { - callback.onFailure(caught); - GWT.log("button enabled: " + button.getText()); - button.setEnabled(true); - } - - @Override - public void onSuccess(Actionable.ActionImpact result) { - callback.onSuccess(result); - GWT.log("button enabled: " + button.getText()); - button.setEnabled(true); - } + for (ActionableGroup actionGroup : actionableBundle.getGroups()) { + boolean hasButtonsOnThisGroup = false; + for (ActionableButton button : actionGroup.getButtons()) { + if (actionable.canAct(button.getAction(), objects)) { + ActionableTitle actionableTitle = actionGroup.getTitle(); + Label groupTitle = new Label(actionableTitle.getTitle()); + groupTitle.addStyleName("h4 actionable-title"); + if (!actionableTitle.hasTitle()) { + groupTitle.addStyleName("actionable-title-empty"); + } + panel.add(groupTitle); + hasButtonsOnThisGroup = true; + break; + } + } + + if (hasButtonsOnThisGroup) { + for (ActionableButton actionButton : actionGroup.getButtons()) { + if (actionable.canAct(actionButton.getAction(), objects)) { + + ActionButton button = new ActionButton<>(actionButton); + + button.addClickHandler(event -> { + button.setEnabled(false); + actionable.act(actionButton.getAction(), objects, new AsyncCallback() { + @Override + public void onFailure(Throwable caught) { + callback.onFailure(caught); + button.setEnabled(true); + } + + @Override + public void onSuccess(Actionable.ActionImpact result) { + callback.onSuccess(result); + button.setEnabled(true); + } + }); }); - }); - panel.add(button); - isEmpty = false; + panel.add(button); + isEmpty = false; + } } } } @@ -178,7 +180,7 @@ public void onSuccess(Actionable.ActionImpact result) { return panel; } - private Widget createActionsTitle(ActionsBundle actionsBundle, ActionableObject objects) { + private Widget createActionsTitle(ActionableBundle actionableBundle, ActionableObject objects) { // build inner-container FlowPanel inlinePanel = new FlowPanel(); inlinePanel.addStyleName("actionable-header actionable-header-with-actions " + titleCss); @@ -209,8 +211,8 @@ private Widget createActionsTitle(ActionsBundle actionsBundle, ActionableObje // add actions popup final CalloutPopup popup = new CalloutPopup(); - popup.addStyleName("actionable-popup"); - popup.setWidget(createActionsMenu(actionsBundle, objects)); + popup.addStyleName("actionable-popup ActionableStyleMenu"); + popup.setWidget(createActionsMenu(actionableBundle, objects)); popup.addCloseHandler(event -> inlinePanel.removeStyleName("actionable-header-with-actions-clicked")); focusPanel.addMouseDownHandler(event -> { diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/DefaultSelectDialog.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/DefaultSelectDialog.java index 4562d2f01f..45eab19d3e 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/DefaultSelectDialog.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/DefaultSelectDialog.java @@ -8,10 +8,8 @@ package org.roda.wui.client.common.dialogs; import org.roda.core.data.v2.index.IsIndexed; -import org.roda.core.data.v2.index.filter.Filter; -import org.roda.wui.client.common.lists.utils.AsyncTableCell; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; -import org.roda.wui.client.common.search.SearchPanel; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.client.common.search.SearchWrapper; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; @@ -25,12 +23,10 @@ import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.Widget; -import com.google.gwt.view.client.SelectionChangeEvent; -import com.google.gwt.view.client.SelectionChangeEvent.Handler; import config.i18n.client.ClientMessages; -public class DefaultSelectDialog extends DialogBox implements SelectDialog { +public class DefaultSelectDialog extends DialogBox implements SelectDialog { private static final Binder binder = GWT.create(Binder.class); @SuppressWarnings("rawtypes") @@ -40,7 +36,7 @@ interface Binder extends UiBinder { private static final ClientMessages messages = GWT.create(ClientMessages.class); @UiField(provided = true) - SearchPanel searchPanel; + SearchWrapper searchWrapper; @UiField Button cancelButton; @@ -51,16 +47,25 @@ interface Binder extends UiBinder { @UiField Button emptyParentButton; - @UiField(provided = true) - AsyncTableCell searchResultsPanel; + private final Class objectClass; + private boolean singleSelectionMode = false; - public DefaultSelectDialog(String title, Filter filter, String searchField, AsyncTableCell searchResultsPanel, - boolean hidePreFilters) { - this.searchResultsPanel = searchResultsPanel; + public DefaultSelectDialog(String title, ListBuilder listBuilder) { + objectClass = listBuilder.getOptions().getClassToReturn(); + listBuilder.getOptions().addSelectionChangeHandler(event -> { + T value = DefaultSelectDialog.this.getValue(); + if (singleSelectionMode) { + if (value != null) { + ValueChangeEvent.fire(this, value); + hide(); + } + } else { + selectButton.setEnabled(value != null); + } + }); - searchPanel = new SearchPanel(filter, searchField, true, messages.selectAipSearchPlaceHolder(), false, false, - hidePreFilters); - searchPanel.setList(searchResultsPanel); + searchWrapper = new SearchWrapper(false).withListsInsideScrollPanel("selectAipResultsPanel") + .createListAndSearchPanel(listBuilder); setWidget(binder.createAndBindUi(this)); @@ -74,14 +79,11 @@ public DefaultSelectDialog(String title, Filter filter, String searchField, Asyn emptyParentButton.setVisible(false); selectButton.setEnabled(false); + } - this.searchResultsPanel.getSelectionModel().addSelectionChangeHandler(new Handler() { - - @Override - public void onSelectionChange(SelectionChangeEvent event) { - selectButton.setEnabled(DefaultSelectDialog.this.getValue() != null); - } - }); + public void setSingleSelectionMode() { + singleSelectionMode = true; + selectButton.setEnabled(false); } @Override @@ -94,25 +96,6 @@ public void showAndCenter() { center(); } - public void setSingleSelectionMode() { - selectButton.setEnabled(false); - - searchResultsPanel.getSelectionModel().addSelectionChangeHandler(new Handler() { - - @Override - public void onSelectionChange(SelectionChangeEvent event) { - if (DefaultSelectDialog.this.getValue() != null) { - onChange(); - hide(); - } - } - }); - } - - public void hidePreFilters() { - searchPanel.hidePreFilters(); - } - @UiHandler("cancelButton") void buttonCancelHandler(ClickEvent e) { hide(); @@ -120,14 +103,13 @@ void buttonCancelHandler(ClickEvent e) { @UiHandler("selectButton") void buttonSelectHandler(ClickEvent e) { - onChange(); + ValueChangeEvent.fire(this, getValue()); hide(); } @UiHandler("emptyParentButton") void buttonEmptyParentHandler(ClickEvent e) { - searchResultsPanel.getSelectionModel().clear(); - onChange(); + ValueChangeEvent.fire(this, null); hide(); } @@ -136,16 +118,8 @@ public HandlerRegistration addValueChangeHandler(ValueChangeHandler handler) return addHandler(handler, ValueChangeEvent.getType()); } - protected void onChange() { - ValueChangeEvent.fire(this, getValue()); - } - - public T getValue() { - return searchResultsPanel.getSelectionModel().getSelectedObject(); - } - - public BasicAsyncTableCell getList() { - return (BasicAsyncTableCell) searchResultsPanel; + private T getValue() { + return searchWrapper.getListSelectionState(objectClass).getSelected(); } public void setEmptyParentButtonVisible(boolean visible) { diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/DefaultSelectDialog.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/DefaultSelectDialog.ui.xml index 18ec6d9cce..4971531cd9 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/DefaultSelectDialog.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/DefaultSelectDialog.ui.xml @@ -15,10 +15,7 @@ - - - - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/MemberSelectDialog.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/MemberSelectDialog.java index 7f8b686820..e251ce942b 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/MemberSelectDialog.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/MemberSelectDialog.java @@ -7,17 +7,17 @@ */ package org.roda.wui.client.common.dialogs; -import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.user.RODAMember; import org.roda.wui.client.common.lists.RodaMemberList; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; -public class MemberSelectDialog extends DefaultSelectDialog { - +public class MemberSelectDialog extends DefaultSelectDialog { public MemberSelectDialog(String title, Filter filter) { - super(title, filter, RodaConstants.MEMBERS_NAME, - new RodaMemberList("MemberSelectDialog_rodaMembers", filter, title, false), - false); + super(title, + new ListBuilder<>(RodaMemberList::new, + new AsyncTableCell.Options<>(RODAMember.class, "MemberSelectDialog_rodaMembers").withFilter(filter) + .withSummary(title))); } - } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/RepresentationInformationDialogs.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/RepresentationInformationDialogs.java index bd8956e440..33461d182a 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/RepresentationInformationDialogs.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/RepresentationInformationDialogs.java @@ -26,6 +26,8 @@ import org.roda.core.data.v2.ip.AIP; import org.roda.core.data.v2.ip.File; import org.roda.core.data.v2.ip.IndexedAIP; +import org.roda.core.data.v2.ip.IndexedFile; +import org.roda.core.data.v2.ip.IndexedRepresentation; import org.roda.core.data.v2.ip.Representation; import org.roda.core.data.v2.ri.RelationObjectType; import org.roda.core.data.v2.ri.RepresentationInformation; @@ -39,10 +41,10 @@ import org.roda.wui.client.common.lists.RepresentationList; import org.roda.wui.client.common.lists.SimpleFileList; import org.roda.wui.client.common.lists.utils.AsyncTableCell; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; import org.roda.wui.client.common.search.Dropdown; -import org.roda.wui.client.common.search.SearchFilters; -import org.roda.wui.client.common.search.SearchPanel; +import org.roda.wui.client.common.search.SearchWrapper; +import org.roda.wui.client.common.search.SelectedPanel; import org.roda.wui.client.common.utils.AsyncCallbackUtils; import org.roda.wui.client.common.utils.StringUtils; import org.roda.wui.client.planning.RelationTypeTranslationsBundle; @@ -57,14 +59,12 @@ import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.i18n.client.LocaleInfo; import com.google.gwt.safehtml.shared.SafeHtml; -import com.google.gwt.user.cellview.client.AbstractHasData; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ListBox; -import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.TextBox; import config.i18n.client.ClientMessages; @@ -72,6 +72,10 @@ public class RepresentationInformationDialogs { private static final ClientMessages messages = GWT.create(ClientMessages.class); + private static final String SEARCH_ITEMS = IndexedAIP.class.getSimpleName(); + private static final String SEARCH_REPRESENTATIONS = IndexedRepresentation.class.getSimpleName(); + private static final String SEARCH_FILES = IndexedFile.class.getSimpleName(); + private RepresentationInformationDialogs() { // do nothing } @@ -123,14 +127,21 @@ public void onSuccess(Void result) { dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(false); + final String aipListId = "RepresentationInformationDialogs_AIPs"; + final String representationsListId = "RepresentationInformationDialogs_representations"; + final String filesListId = "RepresentationInformationDialogs_files"; + final Dropdown dropDown = new Dropdown(); dropDown.setStyleName("searchInputListBox ri-dropdown-listbox"); dropDown.addPopupStyleName("searchInputListBoxPopup"); dropDown.setVisible(true); dropDown.setLabel(messages.searchListBoxItems()); - dropDown.addItem(messages.searchListBoxItems(), RodaConstants.SEARCH_ITEMS); - dropDown.addItem(messages.searchListBoxRepresentations(), RodaConstants.SEARCH_REPRESENTATIONS); - dropDown.addItem(messages.searchListBoxFiles(), RodaConstants.SEARCH_FILES); + dropDown.addItem(messages.searchListBoxItems(), SEARCH_ITEMS, + SelectedPanel.getIconForList(aipListId, IndexedAIP.class.getSimpleName())); + dropDown.addItem(messages.searchListBoxRepresentations(), SEARCH_REPRESENTATIONS, + SelectedPanel.getIconForList(representationsListId, IndexedRepresentation.class.getSimpleName())); + dropDown.addItem(messages.searchListBoxFiles(), SEARCH_FILES, + SelectedPanel.getIconForList(filesListId, IndexedFile.class.getSimpleName())); final FlowPanel fieldsPanel = new FlowPanel(); fieldsPanel.setStyleName("ri-content-group"); @@ -162,17 +173,17 @@ public void onValueChange(ValueChangeEvent event) { if (!ri.getFilters().isEmpty()) { if (ri.getFilters().get(0).startsWith(Representation.class.getSimpleName())) { appropriateFields.addAll(result.getObjectClassFields().get(Representation.class.getSimpleName())); - dropDown.setSelectedValue(RodaConstants.SEARCH_REPRESENTATIONS, true); + dropDown.setSelectedValue(SEARCH_REPRESENTATIONS, true); } else if (ri.getFilters().get(0).startsWith(File.class.getSimpleName())) { appropriateFields.addAll(result.getObjectClassFields().get(File.class.getSimpleName())); - dropDown.setSelectedValue(RodaConstants.SEARCH_FILES, true); + dropDown.setSelectedValue(SEARCH_FILES, true); } else if (ri.getFilters().get(0).startsWith(AIP.class.getSimpleName())) { appropriateFields.addAll(result.getObjectClassFields().get(AIP.class.getSimpleName())); - dropDown.setSelectedValue(RodaConstants.SEARCH_ITEMS, true); + dropDown.setSelectedValue(SEARCH_ITEMS, true); } } else { appropriateFields.addAll(result.getObjectClassFields().get(AIP.class.getSimpleName())); - dropDown.setSelectedValue(RodaConstants.SEARCH_ITEMS, true); + dropDown.setSelectedValue(SEARCH_ITEMS, true); } dialogBox.center(); @@ -184,18 +195,14 @@ public void onClick(ClickEvent event) { ri.setFilters(new ArrayList()); String className; - switch (dropDown.getSelectedValue()) { - case RodaConstants.SEARCH_ITEMS: - className = AIP.class.getSimpleName(); - break; - case RodaConstants.SEARCH_REPRESENTATIONS: - className = Representation.class.getSimpleName(); - break; - case RodaConstants.SEARCH_FILES: - className = File.class.getSimpleName(); - break; - default: - return; + if (SEARCH_ITEMS.equals(dropDown.getSelectedValue())) { + className = AIP.class.getSimpleName(); + } else if (SEARCH_REPRESENTATIONS.equals(dropDown.getSelectedValue())) { + className = Representation.class.getSimpleName(); + } else if (SEARCH_FILES.equals(dropDown.getSelectedValue())) { + className = File.class.getSimpleName(); + } else { + return; } for (String field : values.keySet()) { @@ -226,35 +233,30 @@ public void onClick(ClickEvent event) { listPanel.clear(); if (!filterList.isEmpty()) { - BasicAsyncTableCell table = null; + ListBuilder listBuilder = null; Filter tableFilter = new Filter(new OrFiltersParameters(filterList)); - switch (dropDown.getSelectedValue()) { - case RodaConstants.SEARCH_ITEMS: - table = new AIPList("RepresentationInformationDialogs_AIPs", tableFilter, true, "", false, 5, 5); - break; - case RodaConstants.SEARCH_REPRESENTATIONS: - table = new RepresentationList("RepresentationInformationDialogs_representations", tableFilter, - true, "", false, 5, 5); - break; - case RodaConstants.SEARCH_FILES: - table = new SimpleFileList("RepresentationInformationDialogs_files", tableFilter, true, "", false, - 5, 5); - break; - default: - break; - } - if (table != null) { - table.setCsvDownloadButtonVisibility(false); - table.addRedrawHandler(new AbstractHasData.RedrawEvent.Handler() { - @Override - public void onRedraw() { - dialogBox.center(); - } - }); + if (SEARCH_ITEMS.equals(dropDown.getSelectedValue())) { + listBuilder = new ListBuilder<>(AIPList::new, + new AsyncTableCell.Options<>(IndexedAIP.class, aipListId).withFilter(tableFilter) + .withJustActive(true).withCsvDownloadButtonVisibility(false).addRedrawHandler(dialogBox::center)); + + } else if (SEARCH_REPRESENTATIONS.equals(dropDown.getSelectedValue())) { + listBuilder = new ListBuilder<>(RepresentationList::new, + new AsyncTableCell.Options<>(IndexedRepresentation.class, representationsListId) + .withFilter(tableFilter).withJustActive(true).withCsvDownloadButtonVisibility(false) + .addRedrawHandler(dialogBox::center)); + } else if (SEARCH_FILES.equals(dropDown.getSelectedValue())) { + listBuilder = new ListBuilder<>(SimpleFileList::new, + new AsyncTableCell.Options<>(IndexedFile.class, filesListId).withFilter(tableFilter) + .withJustActive(true).withCsvDownloadButtonVisibility(false).addRedrawHandler(dialogBox::center)); + + } + + if (listBuilder != null) { listPanel.add(section); - listPanel.add(table); + listPanel.add(listBuilder.build()); } } else { dialogBox.center(); @@ -288,11 +290,11 @@ private static void updateAssociationFields(FlowPanel fieldsPanel, Dropdown drop fieldsPanel.clear(); String className = null; - if (dropDown.getSelectedValue().equals(RodaConstants.SEARCH_ITEMS)) { + if (dropDown.getSelectedValue().equals(SEARCH_ITEMS)) { className = AIP.class.getSimpleName(); - } else if (dropDown.getSelectedValue().equals(RodaConstants.SEARCH_REPRESENTATIONS)) { + } else if (dropDown.getSelectedValue().equals(SEARCH_REPRESENTATIONS)) { className = Representation.class.getSimpleName(); - } else if (dropDown.getSelectedValue().equals(RodaConstants.SEARCH_FILES)) { + } else if (dropDown.getSelectedValue().equals(SEARCH_FILES)) { className = File.class.getSimpleName(); } @@ -321,12 +323,7 @@ private static void updateAssociationFields(FlowPanel fieldsPanel, Dropdown drop values.put(field, valuesForThisField); IncrementalList incrementalList = new IncrementalList(true, valuesForThisField); - incrementalList.addValueChangeHandler(new ValueChangeHandler>() { - @Override - public void onValueChange(ValueChangeEvent> event) { - values.put(field, event.getValue()); - } - }); + incrementalList.addValueChangeHandler(event -> values.put(field, event.getValue())); fieldPanel.add(incrementalList); fieldsPanel.add(fieldPanel); @@ -518,7 +515,6 @@ public void onClick(ClickEvent event) { Filter filter = new Filter(new NotSimpleFilterParameter(RodaConstants.INDEX_UUID, ri.getId())); SelectRepresentationInformationDialog selectDialog = new SelectRepresentationInformationDialog( messages.chooseEntityTitle(), filter, false); - selectDialog.getList().setCsvDownloadButtonVisibility(false); selectDialog.setSingleSelectionMode(); selectDialog.showAndCenter(); selectDialog.addValueChangeHandler(new ValueChangeHandler() { @@ -749,7 +745,6 @@ public void onClick(ClickEvent event) { Filter filter = new Filter(new OneOfManyFilterParameter(RodaConstants.INDEX_UUID, aipsAlreadyLinked)); SelectAipDialog selectAipDialog = new SelectAipDialog(messages.chooseEntityTitle(), filter, false, false); - selectAipDialog.getList().setCsvDownloadButtonVisibility(false); selectAipDialog.setSingleSelectionMode(); selectAipDialog.showAndCenter(); selectAipDialog.addValueChangeHandler(new ValueChangeHandler() { @@ -857,31 +852,13 @@ public static FlowPanel createInnerAddRepresentationInformationwithAssociation(f container.addStyleName("wui-dialog-message"); // create search box and results list - Filter defaultFilter = SearchFilters.defaultFilter(RepresentationInformation.class.getName()); - final RepresentationInformationList representationInformationList = new RepresentationInformationList( - "RepresentationInformationDialogs_RI", defaultFilter, messages.representationInformationTitle(), true, 10, 10); - representationInformationList.setCsvDownloadButtonVisibility(false); - representationInformationList.addRedrawHandler(new AbstractHasData.RedrawEvent.Handler() { - @Override - public void onRedraw() { - dialogBox.center(); - } - }); - - SearchPanel representationInformationSearch = new SearchPanel(Filter.NULL, - RodaConstants.REPRESENTATION_INFORMATION_SEARCH, true, messages.searchPlaceHolder(), false, false, true); - representationInformationSearch.setList(representationInformationList); - - container.add(representationInformationSearch); - ScrollPanel representationInformationListScrollPanel = new ScrollPanel(representationInformationList); - representationInformationListScrollPanel.addStyleName("ri-dialog-list-scroll"); - container.add(representationInformationListScrollPanel); - - representationInformationList - .addCheckboxSelectionListener(new AsyncTableCell.CheckboxSelectionListener() { - @Override - public void onSelectionChange(SelectedItems selected) { + ListBuilder representationInformationListBuilder = new ListBuilder<>( + RepresentationInformationList::new, + new AsyncTableCell.Options<>(RepresentationInformation.class, "RepresentationInformationDialogs_RI") + .withSummary(messages.representationInformationTitle()).withInitialPageSize(10).withPageSizeIncrement(10) + .withCsvDownloadButtonVisibility(false).addRedrawHandler(dialogBox::center) + .addCheckboxSelectionListener(selected -> { if (selected instanceof SelectedItemsList) { SelectedItemsList list = (SelectedItemsList) selected; addToSelectedRIButton.setEnabled(!list.getIds().isEmpty()); @@ -890,23 +867,25 @@ public void onSelectionChange(SelectedItems selected) // (is it needed?) throw new RuntimeException("Only SelectedItemsList is supported on RI, for now"); } - } - }); + })); - addToSelectedRIButton.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - dialogBox.hide(); + SearchWrapper searchWrapper = new SearchWrapper(false).withListsInsideScrollPanel("ri-dialog-list-scroll") + .createListAndSearchPanel(representationInformationListBuilder); - SelectedItems selected = representationInformationList.getSelected(); - if (selected instanceof SelectedItemsList) { - SelectedItemsList list = (SelectedItemsList) selected; - callback.onSuccess(list); - } else { - // TODO bferreira 2017-12-04: add support for SelectedItemsFilter (is - // it needed?) - throw new RuntimeException("Only SelectedItemsList is supported on RI, for now"); - } + container.add(searchWrapper); + + addToSelectedRIButton.addClickHandler(event -> { + dialogBox.hide(); + + SelectedItems selected = searchWrapper + .getSelectedItems(RepresentationInformation.class); + if (selected instanceof SelectedItemsList) { + SelectedItemsList list = (SelectedItemsList) selected; + callback.onSuccess(list); + } else { + // TODO bferreira 2017-12-04: add support for SelectedItemsFilter (is + // it needed?) + throw new RuntimeException("Only SelectedItemsList is supported on RI, for now"); } }); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectAipDialog.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectAipDialog.java index cdbfaf955c..925d830888 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectAipDialog.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectAipDialog.java @@ -7,36 +7,32 @@ */ package org.roda.wui.client.common.dialogs; -import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.ip.IndexedAIP; import org.roda.wui.client.common.lists.AIPList; -import org.roda.wui.client.common.search.SearchFilters; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; import com.google.gwt.core.client.GWT; import config.i18n.client.ClientMessages; -public class SelectAipDialog extends DefaultSelectDialog { - +public class SelectAipDialog extends DefaultSelectDialog { private static final ClientMessages messages = GWT.create(ClientMessages.class); - private static final Filter DEFAULT_FILTER_AIP = SearchFilters.defaultFilter(IndexedAIP.class.getName()); - - private static final Boolean DEFAULT_JUST_ACTIVE = Boolean.TRUE; - private static final Boolean SELECTABLE = Boolean.FALSE; + private static final String listId = "SelectAipDialog_AIPs"; - public SelectAipDialog(String title, boolean hidePreFilters) { - this(title, DEFAULT_FILTER_AIP, DEFAULT_JUST_ACTIVE, hidePreFilters); + public SelectAipDialog(String title) { + super(title, new ListBuilder<>(AIPList::new, new AsyncTableCell.Options<>(IndexedAIP.class, listId) + .withSummary(messages.selectAipSearchResults()).withJustActive(true))); } - public SelectAipDialog(String title, Filter filter, boolean justActive, boolean hidePreFilters) { - this(title, filter, justActive, hidePreFilters, SELECTABLE); + public SelectAipDialog(String title, Filter filter, boolean justActive) { + this(title, filter, justActive, true); } - public SelectAipDialog(String title, Filter filter, boolean justActive, boolean hidePreFilters, boolean selectable) { - super(title, filter, RodaConstants.AIP_SEARCH, - new AIPList("SelectAipDialog_AIPs", filter, justActive, messages.selectAipSearchResults(), selectable), - hidePreFilters); + public SelectAipDialog(String title, Filter filter, boolean justActive, boolean exportCsvVisible) { + super(title, new ListBuilder<>(AIPList::new, new AsyncTableCell.Options<>(IndexedAIP.class, listId) + .withSummary(messages.selectAipSearchResults()).withJustActive(justActive).withFilter(filter))); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectDialogFactory.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectDialogFactory.java index 047673d2f2..24b6baadf4 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectDialogFactory.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectDialogFactory.java @@ -28,37 +28,34 @@ public class SelectDialogFactory { - public DefaultSelectDialog getSelectDialog(Class actualClass, String title, Filter filter, - boolean selectable) throws NotFoundException { - return getSelectDialog(actualClass.getName(), title, filter, selectable); + public DefaultSelectDialog getSelectDialog(Class actualClass, String title, Filter filter) + throws NotFoundException { + return getSelectDialog(actualClass.getName(), title, filter); } - public DefaultSelectDialog getSelectDialog(String actualClass, String title, Filter filter, boolean selectable) + public DefaultSelectDialog getSelectDialog(String actualClass, String title, Filter filter) throws NotFoundException { if (actualClass.equals(AIP.class.getName()) || actualClass.equals(IndexedAIP.class.getName())) { - boolean justActive = true; - return new SelectAipDialog(title, filter, justActive, false, selectable); + return new SelectAipDialog(title, filter, true); } else if (actualClass.equals(Representation.class.getName()) || actualClass.equals(IndexedRepresentation.class.getName())) { - boolean justActive = true; - return new SelectRepresentationDialog(title, filter, justActive, false, selectable); + return new SelectRepresentationDialog(title, filter, true); } else if (actualClass.equals(File.class.getName()) || actualClass.equals(IndexedFile.class.getName())) { - boolean justActive = true; - return new SelectFileDialog(title, filter, justActive, false, selectable); + return new SelectFileDialog(title, filter, true); } else if (actualClass.equals(RepresentationInformation.class.getName())) { - return new SelectRepresentationInformationDialog(title, filter, selectable); + return new SelectRepresentationInformationDialog(title, filter); } else if (actualClass.equals(IndexedRisk.class.getName()) || actualClass.equals(Risk.class.getName())) { - return new SelectRiskDialog(title, filter, selectable); + return new SelectRiskDialog(title, filter); } else if (actualClass.equals(Job.class.getName())) { - return new SelectJobDialog(title, filter, selectable); + return new SelectJobDialog(title, filter); } else if (actualClass.equals(Report.class.getName()) || actualClass.equals(IndexedReport.class.getName())) { - return new SelectReportDialog(title, filter, selectable); + return new SelectReportDialog(title, filter); } else if (actualClass.equals(TransferredResource.class.getName())) { - return new SelectTransferResourceDialog(title, filter, selectable); + return new SelectTransferResourceDialog(title, filter); } else if (actualClass.equals(Notification.class.getName())) { - return new SelectNotificationDialog(title, filter, selectable); + return new SelectNotificationDialog(title, filter); } else if (actualClass.equals(LogEntry.class.getName())) { - return new SelectLogEntryDialog(title, filter, selectable); + return new SelectLogEntryDialog(title, filter); } else { throw new NotFoundException(); } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectFileDialog.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectFileDialog.java index f2febe5a92..b82a75da89 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectFileDialog.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectFileDialog.java @@ -7,37 +7,23 @@ */ package org.roda.wui.client.common.dialogs; -import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.ip.IndexedFile; import org.roda.wui.client.common.lists.SimpleFileList; -import org.roda.wui.client.common.search.SearchFilters; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; import com.google.gwt.core.client.GWT; import config.i18n.client.ClientMessages; -public class SelectFileDialog extends DefaultSelectDialog { - +public class SelectFileDialog extends DefaultSelectDialog { private static final ClientMessages messages = GWT.create(ClientMessages.class); - private static final Filter DEFAULT_FILTER_FILE = SearchFilters.defaultFilter(IndexedFile.class.getName()); - - private static final Boolean DEFAULT_JUST_ACTIVE = Boolean.TRUE; - private static final Boolean SELECTABLE = Boolean.FALSE; - - public SelectFileDialog(String title, boolean hidePreFilters) { - this(title, DEFAULT_FILTER_FILE, DEFAULT_JUST_ACTIVE, hidePreFilters); - } - - public SelectFileDialog(String title, Filter filter, boolean justActive, boolean hidePreFilters) { - this(title, filter, justActive, hidePreFilters, SELECTABLE); - } - - public SelectFileDialog(String title, Filter filter, boolean justActive, boolean hidePreFilters, boolean selectable) { - super(title, filter, RodaConstants.FILE_SEARCH, - new SimpleFileList("SelectFileDialog_simpleFiles", filter, justActive, messages.selectFileSearchResults(), - selectable), - hidePreFilters); + public SelectFileDialog(String title, Filter filter, boolean justActive) { + super(title, + new ListBuilder<>(SimpleFileList::new, + new AsyncTableCell.Options<>(IndexedFile.class, "SelectFileDialog_simpleFiles").withFilter(filter) + .withJustActive(justActive).withSummary(messages.selectFileSearchResults()))); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectJobDialog.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectJobDialog.java index b9e7f518b2..dad30cfde2 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectJobDialog.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectJobDialog.java @@ -7,27 +7,15 @@ */ package org.roda.wui.client.common.dialogs; -import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.jobs.Job; import org.roda.wui.client.common.lists.JobList; -import org.roda.wui.client.common.search.SearchFilters; - -public class SelectJobDialog extends DefaultSelectDialog { - - private static final Filter DEFAULT_FILTER_JOB = SearchFilters.defaultFilter(Job.class.getName()); - - public SelectJobDialog(String title) { - this(title, DEFAULT_FILTER_JOB); - } +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +public class SelectJobDialog extends DefaultSelectDialog { public SelectJobDialog(String title, Filter filter) { - this(title, filter, false); + super(title, new ListBuilder<>(JobList::new, + new AsyncTableCell.Options<>(Job.class, "SelectJobDialog_jobs").withFilter(filter).withSummary(title))); } - - public SelectJobDialog(String title, Filter filter, boolean selectable) { - super(title, filter, RodaConstants.JOB_SEARCH, new JobList("SelectJobDialog_jobs", filter, title, selectable), - false); - } - } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectLogEntryDialog.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectLogEntryDialog.java index 3eb2e2de57..fec7cde3fb 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectLogEntryDialog.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectLogEntryDialog.java @@ -7,28 +7,17 @@ */ package org.roda.wui.client.common.dialogs; -import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.log.LogEntry; import org.roda.wui.client.common.lists.LogEntryList; -import org.roda.wui.client.common.search.SearchFilters; - -public class SelectLogEntryDialog extends DefaultSelectDialog { - - private static final Filter DEFAULT_FILTER_LOG = SearchFilters.defaultFilter(LogEntry.class.getName()); - - public SelectLogEntryDialog(String title) { - this(title, DEFAULT_FILTER_LOG); - } +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +public class SelectLogEntryDialog extends DefaultSelectDialog { public SelectLogEntryDialog(String title, Filter filter) { - this(title, filter, false); + super(title, + new ListBuilder<>(LogEntryList::new, + new AsyncTableCell.Options<>(LogEntry.class, "SelectLogEntryDialog_logEntries").withFilter(filter) + .withSummary(title))); } - - public SelectLogEntryDialog(String title, Filter filter, boolean selectable) { - super(title, filter, RodaConstants.LOG_SEARCH, - new LogEntryList("SelectLogEntryDialog_logEntries", filter, title, selectable), - false); - } - } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectNotificationDialog.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectNotificationDialog.java index 88d734b597..c7c6baa26c 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectNotificationDialog.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectNotificationDialog.java @@ -7,28 +7,17 @@ */ package org.roda.wui.client.common.dialogs; -import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.notifications.Notification; import org.roda.wui.client.common.lists.NotificationList; -import org.roda.wui.client.common.search.SearchFilters; - -public class SelectNotificationDialog extends DefaultSelectDialog { - - private static final Filter DEFAULT_FILTER_NOTIFICATION = SearchFilters.defaultFilter(Notification.class.getName()); - - public SelectNotificationDialog(String title) { - this(title, DEFAULT_FILTER_NOTIFICATION); - } +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +public class SelectNotificationDialog extends DefaultSelectDialog { public SelectNotificationDialog(String title, Filter filter) { - this(title, filter, false); + super(title, + new ListBuilder<>(NotificationList::new, + new AsyncTableCell.Options<>(Notification.class, "SelectNotificationDialog_notifications").withFilter(filter) + .withSummary(title))); } - - public SelectNotificationDialog(String title, Filter filter, boolean selectable) { - super(title, filter, RodaConstants.NOTIFICATION_SEARCH, - new NotificationList("SelectNotificationDialog_notifications", filter, title, selectable), - false); - } - } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectReportDialog.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectReportDialog.java index 93a9acaa88..bdf1055c42 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectReportDialog.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectReportDialog.java @@ -7,28 +7,17 @@ */ package org.roda.wui.client.common.dialogs; -import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.jobs.IndexedReport; import org.roda.wui.client.common.lists.SimpleJobReportList; -import org.roda.wui.client.common.search.SearchFilters; - -public class SelectReportDialog extends DefaultSelectDialog { - - private static final Filter DEFAULT_FILTER_REPORT = SearchFilters.defaultFilter(IndexedReport.class.getName()); - - public SelectReportDialog(String title) { - this(title, DEFAULT_FILTER_REPORT); - } +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +public class SelectReportDialog extends DefaultSelectDialog { public SelectReportDialog(String title, Filter filter) { - this(title, filter, false); + super(title, + new ListBuilder<>(SimpleJobReportList::new, + new AsyncTableCell.Options<>(IndexedReport.class, "SelectReportDialog_simpleJobReports").withFilter(filter) + .withSummary(title))); } - - public SelectReportDialog(String title, Filter filter, boolean selectable) { - super(title, filter, RodaConstants.JOB_REPORT_SEARCH, - new SimpleJobReportList("SelectReportDialog_simpleJobReports", filter, title, selectable), - false); - } - } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectRepresentationDialog.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectRepresentationDialog.java index 77415bfeff..6d708f749f 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectRepresentationDialog.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectRepresentationDialog.java @@ -7,39 +7,23 @@ */ package org.roda.wui.client.common.dialogs; -import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.ip.IndexedRepresentation; import org.roda.wui.client.common.lists.RepresentationList; -import org.roda.wui.client.common.search.SearchFilters; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; import com.google.gwt.core.client.GWT; import config.i18n.client.ClientMessages; -public class SelectRepresentationDialog extends DefaultSelectDialog { - +public class SelectRepresentationDialog extends DefaultSelectDialog { private static final ClientMessages messages = GWT.create(ClientMessages.class); - private static final Filter DEFAULT_FILTER_REPRESENTATION = SearchFilters - .defaultFilter(IndexedRepresentation.class.getName()); - - private static final Boolean DEFAULT_JUST_ACTIVE = Boolean.TRUE; - private static final Boolean SELECTABLE = Boolean.FALSE; - - public SelectRepresentationDialog(String title, boolean hidePreFilters) { - this(title, DEFAULT_FILTER_REPRESENTATION, DEFAULT_JUST_ACTIVE, hidePreFilters); - } - - public SelectRepresentationDialog(String title, Filter filter, boolean justActive, boolean hidePreFilters) { - this(title, filter, justActive, hidePreFilters, SELECTABLE); - } - - public SelectRepresentationDialog(String title, Filter filter, boolean justActive, boolean hidePreFilters, - boolean selectable) { - super(title, filter, RodaConstants.REPRESENTATION_SEARCH, - new RepresentationList("SelectRepresentationDialog_representations", - filter, justActive, - messages.selectRepresentationSearchResults(), selectable), hidePreFilters); + public SelectRepresentationDialog(String title, Filter filter, boolean justActive) { + super(title, + new ListBuilder<>(RepresentationList::new, + new AsyncTableCell.Options<>(IndexedRepresentation.class, "SelectRepresentationDialog_representations") + .withFilter(filter).withJustActive(justActive).withSummary(messages.selectRepresentationSearchResults()))); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectRepresentationInformationDialog.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectRepresentationInformationDialog.java index 7328cdd7f7..994777074d 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectRepresentationInformationDialog.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectRepresentationInformationDialog.java @@ -7,27 +7,21 @@ */ package org.roda.wui.client.common.dialogs; -import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.ri.RepresentationInformation; import org.roda.wui.client.common.lists.RepresentationInformationList; -import org.roda.wui.client.common.search.SearchFilters; - -public class SelectRepresentationInformationDialog extends DefaultSelectDialog { - - private static final Filter DEFAULT_FILTER_FORMAT = SearchFilters - .defaultFilter(RepresentationInformation.class.getName()); - - public SelectRepresentationInformationDialog(String title) { - this(title, DEFAULT_FILTER_FORMAT); - } +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +public class SelectRepresentationInformationDialog extends DefaultSelectDialog { public SelectRepresentationInformationDialog(String title, Filter filter) { - this(title, filter, false); + this(title, filter, true); } - public SelectRepresentationInformationDialog(String title, Filter filter, boolean selectable) { - super(title, filter, RodaConstants.REPRESENTATION_INFORMATION_SEARCH, - new RepresentationInformationList("SelectRepresentationInformationDialog_RI", filter, title, selectable), false); + public SelectRepresentationInformationDialog(String title, Filter filter, boolean exportCsvVisible) { + super(title, + new ListBuilder<>(RepresentationInformationList::new, + new AsyncTableCell.Options<>(RepresentationInformation.class, "SelectRepresentationInformationDialog_RI") + .withFilter(filter).withSummary(title).withCsvDownloadButtonVisibility(exportCsvVisible))); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectRiskDialog.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectRiskDialog.java index 1fe05052d0..4491dfbdd1 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectRiskDialog.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectRiskDialog.java @@ -7,27 +7,15 @@ */ package org.roda.wui.client.common.dialogs; -import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.risks.IndexedRisk; import org.roda.wui.client.common.lists.RiskList; -import org.roda.wui.client.common.search.SearchFilters; - -public class SelectRiskDialog extends DefaultSelectDialog { - - private static final Filter DEFAULT_FILTER_RISK = SearchFilters.defaultFilter(IndexedRisk.class.getName()); - - public SelectRiskDialog(String title) { - this(title, DEFAULT_FILTER_RISK); - } +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +public class SelectRiskDialog extends DefaultSelectDialog { public SelectRiskDialog(String title, Filter filter) { - this(title, filter, false); + super(title, new ListBuilder<>(RiskList::new, + new AsyncTableCell.Options<>(IndexedRisk.class, "SelectRiskDialog_risks").withFilter(filter).withSummary(title))); } - - public SelectRiskDialog(String title, Filter filter, boolean selectable) { - super(title, filter, RodaConstants.RISK_SEARCH, new RiskList("SelectRiskDialog_risks", filter, title, selectable), - false); - } - } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectTransferResourceDialog.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectTransferResourceDialog.java index 682e55fe42..305bcfadcb 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectTransferResourceDialog.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/dialogs/SelectTransferResourceDialog.java @@ -7,35 +7,23 @@ */ package org.roda.wui.client.common.dialogs; -import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.ip.TransferredResource; import org.roda.wui.client.common.lists.TransferredResourceList; -import org.roda.wui.client.common.search.SearchFilters; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; import com.google.gwt.core.client.GWT; import config.i18n.client.ClientMessages; -public class SelectTransferResourceDialog extends DefaultSelectDialog { - +public class SelectTransferResourceDialog extends DefaultSelectDialog { private static final ClientMessages messages = GWT.create(ClientMessages.class); - private static final Filter DEFAULT_FILTER = SearchFilters.defaultFilter(TransferredResource.class.getName()); - - private static final Boolean SELECTABLE = Boolean.FALSE; - - public SelectTransferResourceDialog(String title) { - this(title, DEFAULT_FILTER); - } - public SelectTransferResourceDialog(String title, Filter filter) { - this(title, filter, SELECTABLE); - } - - public SelectTransferResourceDialog(String title, Filter filter, boolean selectable) { - super(title, filter, RodaConstants.TRANSFERRED_RESOURCE_SEARCH, new TransferredResourceList( - "SelectTransferResourceDialog_transferredResources", filter, - messages.selectTransferredResourcesSearchResults(), selectable, true), false); + super(title, + new ListBuilder<>(() -> new TransferredResourceList(true), + new AsyncTableCell.Options<>(TransferredResource.class, "SelectTransferResourceDialog_transferredResources") + .withFilter(filter).withSummary(messages.selectTransferredResourcesSearchResults()))); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/AIPList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/AIPList.java index f2d03564a9..564a5d7733 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/AIPList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/AIPList.java @@ -13,10 +13,9 @@ import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.ip.IndexedAIP; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.common.client.ClientLogger; import org.roda.wui.common.client.tools.DescriptionLevelUtils; import org.roda.wui.common.client.tools.Humanize; @@ -35,7 +34,7 @@ import config.i18n.client.ClientMessages; -public class AIPList extends BasicAsyncTableCell { +public class AIPList extends AsyncTableCell { private final ClientLogger logger = new ClientLogger(getClass().getName()); private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -52,19 +51,11 @@ public class AIPList extends BasicAsyncTableCell { RodaConstants.AIP_TITLE, RodaConstants.AIP_DATE_INITIAL, RodaConstants.AIP_DATE_FINAL, RodaConstants.AIP_HAS_REPRESENTATIONS); - public AIPList(String listId) { - this(listId, null, false, null, false); - } - - public AIPList(String listId, Filter filter, boolean justActive, String summary, boolean selectable) { - super(IndexedAIP.class, listId, filter, justActive, summary, selectable, fieldsToReturn); + @Override + protected void adjustOptions(Options options) { + options.withFieldsToReturn(fieldsToReturn); } - public AIPList(String listId, Filter filter, boolean justActive, String summary, boolean selectable, - int initialPageSize, int pageSizeIncrement) { - super(IndexedAIP.class, listId, filter, justActive, summary, selectable, initialPageSize, pageSizeIncrement, - fieldsToReturn); - } @Override protected void configureDisplay(CellTable display) { diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/DIPFileList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/DIPFileList.java index fad3d08788..f5fb87c799 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/DIPFileList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/DIPFileList.java @@ -13,10 +13,9 @@ import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.ip.DIPFile; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.common.client.ClientLogger; import com.google.gwt.cell.client.SafeHtmlCell; @@ -33,7 +32,7 @@ import config.i18n.client.ClientMessages; -public class DIPFileList extends BasicAsyncTableCell { +public class DIPFileList extends AsyncTableCell { private final ClientLogger logger = new ClientLogger(getClass().getName()); private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -44,18 +43,9 @@ public class DIPFileList extends BasicAsyncTableCell { private static final List fieldsToReturn = Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.DIPFILE_IS_DIRECTORY, RodaConstants.DIPFILE_ID, RodaConstants.DIPFILE_DIP_ID); - public DIPFileList(String listId) { - this(listId, null, null, false); - } - - public DIPFileList(String listId, Filter filter, String summary, boolean selectable) { - super(DIPFile.class, listId, filter, summary, selectable, fieldsToReturn); - } - - public DIPFileList(String listId, Filter filter, String summary, boolean selectable, - int initialPageSize, int pageSizeIncrement) { - super(DIPFile.class, listId, filter, summary, selectable, initialPageSize, pageSizeIncrement, - fieldsToReturn); + @Override + protected void adjustOptions(Options options) { + options.withFieldsToReturn(fieldsToReturn); } @Override diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/DIPList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/DIPList.java index 6a9e78a14f..b2199c20a3 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/DIPList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/DIPList.java @@ -14,10 +14,9 @@ import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.ip.IndexedDIP; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import com.google.gwt.cell.client.DateCell; import com.google.gwt.core.client.GWT; @@ -32,7 +31,7 @@ import config.i18n.client.ClientMessages; -public class DIPList extends BasicAsyncTableCell { +public class DIPList extends AsyncTableCell { private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -43,19 +42,11 @@ public class DIPList extends BasicAsyncTableCell { private static final List fieldsToReturn = Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.DIP_ID, RodaConstants.DIP_DATE_CREATED, RodaConstants.DIP_LAST_MODIFIED, RodaConstants.DIP_TITLE); - public DIPList(String listId) { - this(listId, null, null, false); - } - - public DIPList(String listId, Filter filter, String summary, boolean selectable) { - super(IndexedDIP.class, listId, filter, summary, selectable, fieldsToReturn); + @Override + protected void adjustOptions(Options options) { + options.withFieldsToReturn(fieldsToReturn); } - public DIPList(String listId, Filter filter, String summary, boolean selectable, int initialPageSize, - int pageSizeIncrement) { - super(IndexedDIP.class, listId, filter, summary, selectable, initialPageSize, pageSizeIncrement, - fieldsToReturn); - } @Override protected void configureDisplay(CellTable display) { diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/FormatList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/FormatList.java index e6cd784f7a..1c30d1dace 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/FormatList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/FormatList.java @@ -14,9 +14,8 @@ import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.formats.Format; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.client.common.utils.StringUtils; import com.google.gwt.core.client.GWT; @@ -34,7 +33,7 @@ * @author Luis Faria * */ -public class FormatList extends BasicAsyncTableCell { +public class FormatList extends AsyncTableCell { private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -47,18 +46,11 @@ public class FormatList extends BasicAsyncTableCell { RodaConstants.FORMAT_NAME, RodaConstants.FORMAT_CATEGORY, RodaConstants.FORMAT_MIMETYPES, RodaConstants.FORMAT_PRONOMS); - public FormatList(String listId) { - this(listId, null, null, false); - } - - public FormatList(String listId, Filter filter, String summary, boolean selectable) { - super(Format.class, listId, filter, summary, selectable, fieldsToReturn); + @Override + protected void adjustOptions(Options options) { + options.withFieldsToReturn(fieldsToReturn); } - public FormatList(String listId, Filter filter, String summary, boolean selectable, int pageSize, - int incrementPage) { - super(Format.class, listId, filter, summary, selectable, pageSize, incrementPage, fieldsToReturn); - } @Override protected void configureDisplay(CellTable display) { diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/IngestJobReportList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/IngestJobReportList.java index cd25fe02e4..c267f121a7 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/IngestJobReportList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/IngestJobReportList.java @@ -14,11 +14,10 @@ import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.jobs.IndexedReport; import org.roda.core.data.v2.jobs.Report.PluginState; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.client.common.lists.utils.TooltipTextColumn; import org.roda.wui.client.common.utils.StringUtils; @@ -42,7 +41,7 @@ * @author Luis Faria * */ -public class IngestJobReportList extends BasicAsyncTableCell { +public class IngestJobReportList extends AsyncTableCell { private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -63,13 +62,11 @@ public class IngestJobReportList extends BasicAsyncTableCell { RodaConstants.JOB_REPORT_TOTAL_STEPS, RodaConstants.JOB_REPORT_COMPLETION_PERCENTAGE, RodaConstants.JOB_REPORT_UNSUCCESSFUL_PLUGINS); - public IngestJobReportList(String listId) { - this(listId, null, null, false); + @Override + protected void adjustOptions(Options options) { + options.withFieldsToReturn(fieldsToReturn); } - public IngestJobReportList(String listId, Filter filter, String summary, boolean selectable) { - super(IndexedReport.class, listId, filter, summary, selectable, fieldsToReturn); - } @Override protected void configureDisplay(CellTable display) { diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/JobList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/JobList.java index b17d9582bb..9cb9484595 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/JobList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/JobList.java @@ -15,10 +15,9 @@ import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.jobs.Job; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.client.common.lists.utils.TooltipTextColumn; import org.roda.wui.client.common.utils.HtmlSnippetUtils; import org.roda.wui.common.client.tools.Humanize; @@ -44,7 +43,7 @@ * @author Luis Faria * */ -public class JobList extends BasicAsyncTableCell { +public class JobList extends AsyncTableCell { private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -60,17 +59,9 @@ public class JobList extends BasicAsyncTableCell { private static final List fieldsToReturn = new ArrayList<>(); - public JobList(String listId) { - this(listId, null, null, false); - } - - public JobList(String listId, Filter filter, String summary, boolean selectable) { - super(Job.class, listId, filter, true, summary, selectable, fieldsToReturn); - } - - public JobList(String listId, Filter filter, String summary, boolean selectable, int pageSize, - int incrementPage) { - super(Job.class, listId, filter, true, summary, selectable, pageSize, incrementPage, fieldsToReturn); + @Override + protected void adjustOptions(Options options) { + options.withFieldsToReturn(fieldsToReturn); } @Override diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/LogEntryList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/LogEntryList.java index f960a6305b..c7beb66f3f 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/LogEntryList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/LogEntryList.java @@ -14,10 +14,9 @@ import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.log.LogEntry; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.client.common.utils.HtmlSnippetUtils; import org.roda.wui.client.common.utils.StringUtils; import org.roda.wui.common.client.tools.Humanize; @@ -36,7 +35,7 @@ import config.i18n.client.ClientMessages; -public class LogEntryList extends BasicAsyncTableCell { +public class LogEntryList extends AsyncTableCell { private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -52,14 +51,11 @@ public class LogEntryList extends BasicAsyncTableCell { RodaConstants.LOG_DATETIME, RodaConstants.LOG_ACTION_COMPONENT, RodaConstants.LOG_ACTION_METHOD, RodaConstants.LOG_USERNAME, RodaConstants.LOG_DURATION, RodaConstants.LOG_ADDRESS, RodaConstants.LOG_STATE); - public LogEntryList(String listId, Filter filter, String summary, boolean selectable) { - super(LogEntry.class, listId, filter, summary, selectable, fieldsToReturn); + @Override + protected void adjustOptions(Options options) { + options.withFieldsToReturn(fieldsToReturn); } - public LogEntryList(String listId, Filter filter, String summary, boolean selectable, int pageSize, - int incrementPage) { - super(LogEntry.class, listId, filter, summary, selectable, pageSize, incrementPage, fieldsToReturn); - } @Override protected void configureDisplay(CellTable display) { diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/NotificationList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/NotificationList.java index cb5771f586..bb196c5471 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/NotificationList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/NotificationList.java @@ -14,10 +14,9 @@ import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.notifications.Notification; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.client.common.utils.HtmlSnippetUtils; import org.roda.wui.client.common.utils.StringUtils; @@ -36,7 +35,7 @@ import config.i18n.client.ClientMessages; -public class NotificationList extends BasicAsyncTableCell { +public class NotificationList extends AsyncTableCell { private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -52,19 +51,11 @@ public class NotificationList extends BasicAsyncTableCell { RodaConstants.NOTIFICATION_SENT_ON, RodaConstants.NOTIFICATION_SUBJECT, RodaConstants.NOTIFICATION_IS_ACKNOWLEDGED, RodaConstants.NOTIFICATION_STATE); - public NotificationList(String listId) { - this(listId, null, null, false); - } - - public NotificationList(String listId, Filter filter, String summary, boolean selectable) { - super(Notification.class, listId, filter, false, summary, selectable, fieldsToReturn); + @Override + protected void adjustOptions(Options options) { + options.withFieldsToReturn(fieldsToReturn); } - public NotificationList(String listId, Filter filter, String summary, boolean selectable, int pageSize, - int incrementPage) { - super(Notification.class, listId, filter, false, summary, selectable, pageSize, incrementPage, - fieldsToReturn); - } @Override protected void configureDisplay(CellTable display) { diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/PreservationAgentList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/PreservationAgentList.java index e4f88e02a3..59fa4c1c24 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/PreservationAgentList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/PreservationAgentList.java @@ -13,10 +13,9 @@ import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.ip.metadata.IndexedPreservationAgent; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import com.google.gwt.core.client.GWT; import com.google.gwt.user.cellview.client.CellTable; @@ -32,7 +31,7 @@ * @author Luis Faria * */ -public class PreservationAgentList extends BasicAsyncTableCell { +public class PreservationAgentList extends AsyncTableCell { private static final ClientMessages messages = GWT.create(ClientMessages.class); private TextColumn nameColumn; @@ -43,10 +42,12 @@ public class PreservationAgentList extends BasicAsyncTableCell options) { + options.withFieldsToReturn(fieldsToReturn); } + @Override protected void configureDisplay(CellTable display) { nameColumn = new TextColumn() { diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/PreservationEventList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/PreservationEventList.java index ee2b61934d..e2d5a9591b 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/PreservationEventList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/PreservationEventList.java @@ -14,11 +14,10 @@ import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.ip.metadata.IndexedPreservationEvent; import org.roda.core.data.v2.jobs.Report.PluginState; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import com.google.gwt.cell.client.DateCell; import com.google.gwt.cell.client.SafeHtmlCell; @@ -39,7 +38,7 @@ * @author Luis Faria * */ -public class PreservationEventList extends BasicAsyncTableCell { +public class PreservationEventList extends AsyncTableCell { private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -53,10 +52,12 @@ public class PreservationEventList extends BasicAsyncTableCell options) { + options.withFieldsToReturn(fieldsToReturn); } + @Override protected void configureDisplay(CellTable display) { diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RepresentationInformationList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RepresentationInformationList.java index 798831a262..8de242c2e9 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RepresentationInformationList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RepresentationInformationList.java @@ -13,10 +13,9 @@ import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.ri.RepresentationInformation; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import com.google.gwt.cell.client.SafeHtmlCell; import com.google.gwt.core.client.GWT; @@ -31,7 +30,7 @@ import config.i18n.client.ClientMessages; -public class RepresentationInformationList extends BasicAsyncTableCell { +public class RepresentationInformationList extends AsyncTableCell { private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -44,19 +43,9 @@ public class RepresentationInformationList extends BasicAsyncTableCell options) { + options.withFieldsToReturn(fieldsToReturn); } @Override diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RepresentationList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RepresentationList.java index cec52bc158..c26b8b5dee 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RepresentationList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RepresentationList.java @@ -15,10 +15,9 @@ import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.ip.IndexedRepresentation; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.client.common.utils.StringUtils; import org.roda.wui.common.client.ClientLogger; import org.roda.wui.common.client.tools.DescriptionLevelUtils; @@ -38,7 +37,7 @@ import config.i18n.client.ClientMessages; -public class RepresentationList extends BasicAsyncTableCell { +public class RepresentationList extends AsyncTableCell { private static final ClientLogger LOGGER = new ClientLogger(RepresentationList.class.toString()); private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -57,20 +56,11 @@ public class RepresentationList extends BasicAsyncTableCell options) { + options.withFieldsToReturn(fieldsToReturn); } - public RepresentationList(String listId, Filter filter, boolean justActive, String summary, - boolean selectable, int initialPageSize, int pageSizeIncrement) { - super(IndexedRepresentation.class, listId, filter, justActive, summary, selectable, initialPageSize, - pageSizeIncrement, fieldsToReturn); - } @Override protected void configureDisplay(CellTable display) { diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RiskIncidenceList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RiskIncidenceList.java index 3bea2eefa3..ad7df1f3e4 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RiskIncidenceList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RiskIncidenceList.java @@ -14,10 +14,9 @@ import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.risks.RiskIncidence; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.client.common.utils.HtmlSnippetUtils; import com.google.gwt.cell.client.DateCell; @@ -33,7 +32,7 @@ import config.i18n.client.ClientMessages; -public class RiskIncidenceList extends BasicAsyncTableCell { +public class RiskIncidenceList extends AsyncTableCell { private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -51,18 +50,9 @@ public class RiskIncidenceList extends BasicAsyncTableCell { RodaConstants.RISK_INCIDENCE_DETECTED_ON, RodaConstants.RISK_INCIDENCE_DETECTED_BY, RodaConstants.RISK_INCIDENCE_STATUS); - public RiskIncidenceList(String listId) { - this(listId, null, null, false); - } - - public RiskIncidenceList(String listId, Filter filter, String summary, boolean selectable) { - super(RiskIncidence.class, listId, filter, true, summary, selectable, fieldsToReturn); - } - - public RiskIncidenceList(String listId, Filter filter, String summary, boolean selectable, - int initialPageSize, int pageSizeIncrement) { - super(RiskIncidence.class, listId, filter, true, summary, selectable, initialPageSize, pageSizeIncrement, - fieldsToReturn); + @Override + protected void adjustOptions(Options options) { + options.withFieldsToReturn(fieldsToReturn); } @Override diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RiskList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RiskList.java index fc412ff3c7..cb6e39e444 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RiskList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RiskList.java @@ -14,10 +14,9 @@ import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.risks.IndexedRisk; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.client.common.utils.HtmlSnippetUtils; import com.google.gwt.cell.client.DateCell; @@ -39,11 +38,8 @@ * @author Luis Faria * */ -public class RiskList extends BasicAsyncTableCell { - - private Filter filter; - - private static ClientMessages messages = GWT.create(ClientMessages.class); +public class RiskList extends AsyncTableCell { + private static final ClientMessages messages = GWT.create(ClientMessages.class); private TextColumn nameColumn; private Column identifiedOnColumn; @@ -58,19 +54,11 @@ public class RiskList extends BasicAsyncTableCell { RodaConstants.RISK_UNMITIGATED_INCIDENCES_COUNT, RodaConstants.RISK_POST_MITIGATION_SEVERITY_LEVEL, RodaConstants.RISK_PRE_MITIGATION_SEVERITY_LEVEL); - public RiskList(String listId) { - this(listId, null, null, false); - } - - public RiskList(String listId, Filter filter, String summary, boolean selectable) { - super(IndexedRisk.class, listId, filter, summary, selectable, fieldsToReturn); - this.filter = filter; + @Override + protected void adjustOptions(Options options) { + options.withFieldsToReturn(fieldsToReturn); } - public RiskList(String listId, Filter filter, String summary, boolean selectable, int pageSize, int incrementPage) { - super(IndexedRisk.class, listId, filter, summary, selectable, pageSize, incrementPage, fieldsToReturn); - this.filter = filter; - } @Override protected void configureDisplay(CellTable display) { @@ -163,16 +151,4 @@ public Object getKey(IndexedRisk item) { } }; } - - @Override - public void setFilter(Filter filter) { - if (filter == null) { - super.setFilter(this.filter); - } else { - super.setFilter(filter); - } - - refresh(); - } - } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RodaMemberList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RodaMemberList.java index cf0e991a1f..b0d6dd1a3c 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RodaMemberList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/RodaMemberList.java @@ -13,11 +13,10 @@ import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.user.RODAMember; import org.roda.core.data.v2.user.User; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.client.common.utils.StringUtils; import org.roda.wui.common.client.ClientLogger; @@ -32,7 +31,7 @@ import config.i18n.client.ClientMessages; -public class RodaMemberList extends BasicAsyncTableCell { +public class RodaMemberList extends AsyncTableCell { @SuppressWarnings("unused") private final ClientLogger logger = new ClientLogger(getClass().getName()); @@ -48,18 +47,11 @@ public class RodaMemberList extends BasicAsyncTableCell { RodaConstants.MEMBERS_IS_USER, RodaConstants.MEMBERS_NAME, RodaConstants.MEMBERS_FULLNAME, RodaConstants.MEMBERS_GROUPS, RodaConstants.MEMBERS_IS_ACTIVE); - public RodaMemberList(String listId) { - this(listId, null, null, false); - } - - public RodaMemberList(String listId, Filter filter, String summary, boolean selectable) { - super(RODAMember.class, listId, filter, summary, selectable, fieldsToReturn); + @Override + protected void adjustOptions(Options options) { + options.withFieldsToReturn(fieldsToReturn); } - public RodaMemberList(String listId, Filter filter, String summary, boolean selectable, int pageSize, - int incrementPage) { - super(RODAMember.class, listId, filter, summary, selectable, pageSize, incrementPage, fieldsToReturn); - } @Override protected void configureDisplay(CellTable display) { diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/SearchFileList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/SearchFileList.java index 7e2077b262..75416c57c4 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/SearchFileList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/SearchFileList.java @@ -14,11 +14,10 @@ import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.ip.IndexedFile; import org.roda.core.data.v2.ip.metadata.FileFormat; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.client.common.utils.StringUtils; import org.roda.wui.common.client.ClientLogger; import org.roda.wui.common.client.tools.Humanize; @@ -37,7 +36,7 @@ import config.i18n.client.ClientMessages; -public class SearchFileList extends BasicAsyncTableCell { +public class SearchFileList extends AsyncTableCell { private ClientLogger logger = new ClientLogger(getClass().getName()); private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -53,23 +52,21 @@ public class SearchFileList extends BasicAsyncTableCell { RodaConstants.FILE_ORIGINALNAME, RodaConstants.FILE_FILE_ID, RodaConstants.FILE_PATH, RodaConstants.FILE_SIZE, RodaConstants.FILE_FORMAT_VERSION, RodaConstants.FILE_FILEFORMAT); - public SearchFileList(String listId) { - this(listId, null, false, null, false, false); + public SearchFileList() { + this(false); } - public SearchFileList(String listId, Filter filter, boolean justActive, String summary, - boolean selectable, boolean showFilePath) { - super(IndexedFile.class, listId, filter, justActive, summary, selectable, fieldsToReturn); + public SearchFileList(boolean showFilePath) { + super(); this.showFilePath = showFilePath; } - public SearchFileList(String listId, Filter filter, boolean justActive, String summary, - boolean selectable, boolean showFilePath, int initialPageSize, int pageSizeIncrement) { - super(IndexedFile.class, listId, filter, justActive, summary, selectable, initialPageSize, - pageSizeIncrement, fieldsToReturn); - this.showFilePath = showFilePath; + @Override + protected void adjustOptions(Options options) { + options.withFieldsToReturn(fieldsToReturn); } + @Override protected void configureDisplay(CellTable display) { iconColumn = new Column(new SafeHtmlCell()) { diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/SimpleFileList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/SimpleFileList.java index cdb0672b1f..834be14371 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/SimpleFileList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/SimpleFileList.java @@ -13,10 +13,9 @@ import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.ip.IndexedFile; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.common.client.ClientLogger; import com.google.gwt.cell.client.SafeHtmlCell; @@ -32,7 +31,7 @@ import config.i18n.client.ClientMessages; -public class SimpleFileList extends BasicAsyncTableCell { +public class SimpleFileList extends AsyncTableCell { private final ClientLogger logger = new ClientLogger(getClass().getName()); private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -45,20 +44,11 @@ public class SimpleFileList extends BasicAsyncTableCell { RodaConstants.FILE_REPRESENTATION_UUID, RodaConstants.FILE_ORIGINALNAME, RodaConstants.FILE_FILE_ID, RodaConstants.FILE_SIZE, RodaConstants.FILE_FORMAT_VERSION, RodaConstants.FILE_FILEFORMAT); - public SimpleFileList(String listId) { - this(listId, null, false, null, false); - } - - public SimpleFileList(String listId, Filter filter, boolean justActive, String summary, - boolean selectable) { - super(IndexedFile.class, listId, filter, justActive, summary, selectable, fieldsToReturn); + @Override + protected void adjustOptions(Options options) { + options.withFieldsToReturn(fieldsToReturn); } - public SimpleFileList(String listId, Filter filter, boolean justActive, String summary, - boolean selectable, int initialPageSize, int pageSizeIncrement) { - super(IndexedFile.class, listId, filter, justActive, summary, selectable, initialPageSize, - pageSizeIncrement, fieldsToReturn); - } @Override protected void configureDisplay(CellTable display) { diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/SimpleJobReportList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/SimpleJobReportList.java index f57b7bb016..4f34221b6e 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/SimpleJobReportList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/SimpleJobReportList.java @@ -8,18 +8,18 @@ package org.roda.wui.client.common.lists; import java.util.Arrays; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.jobs.IndexedReport; import org.roda.core.data.v2.jobs.PluginInfo; import org.roda.core.data.v2.jobs.Report.PluginState; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.client.common.lists.utils.TooltipTextColumn; import org.roda.wui.client.common.utils.StringUtils; @@ -43,7 +43,7 @@ * @author Luis Faria * */ -public class SimpleJobReportList extends BasicAsyncTableCell { +public class SimpleJobReportList extends AsyncTableCell { private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -64,32 +64,20 @@ public class SimpleJobReportList extends BasicAsyncTableCell { RodaConstants.JOB_REPORT_TOTAL_STEPS, RodaConstants.JOB_REPORT_COMPLETION_PERCENTAGE); private final Map pluginsInfo; - private String sourceClass; - private String outcomeClass; - public SimpleJobReportList(String listId) { - this(listId, null, null, new HashMap<>(), false); + public SimpleJobReportList() { + super(); + this.pluginsInfo = Collections.emptyMap(); } - public SimpleJobReportList(String listId, Filter filter, String summary, boolean selectable) { - this(listId, filter, summary, new HashMap<>(), selectable); - } - - public SimpleJobReportList(String listId, Filter filter, String summary, boolean selectable, - int pageSize, int incrementPage) { - this(listId, filter, summary, new HashMap<>(), selectable, pageSize, incrementPage); - } - - public SimpleJobReportList(String listId, Filter filter, String summary, - Map pluginsInfo, boolean selectable) { - super(IndexedReport.class, listId, filter, summary, selectable, fieldsToReturn); + public SimpleJobReportList(Map pluginsInfo) { + super(); this.pluginsInfo = pluginsInfo; } - public SimpleJobReportList(String listId, Filter filter, String summary, - Map pluginsInfo, boolean selectable, int pageSize, int incrementPage) { - super(IndexedReport.class, listId, filter, summary, selectable, pageSize, incrementPage, fieldsToReturn); - this.pluginsInfo = pluginsInfo; + @Override + protected void adjustOptions(Options options) { + options.withFieldsToReturn(fieldsToReturn); } @Override @@ -103,7 +91,6 @@ public String getValue(IndexedReport report) { if (report != null) { value = report.getSourceObjectOriginalIds().isEmpty() ? report.getSourceObjectId() : StringUtils.prettyPrint(report.getSourceObjectOriginalIds()); - sourceClass = report.getSourceObjectClass(); } return value; } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/SimpleRodaMemberList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/SimpleRodaMemberList.java index 9b12460424..8c0e9c1466 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/SimpleRodaMemberList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/SimpleRodaMemberList.java @@ -13,10 +13,9 @@ import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.user.RODAMember; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.common.client.ClientLogger; import com.google.gwt.cell.client.SafeHtmlCell; @@ -31,7 +30,7 @@ import config.i18n.client.ClientMessages; -public class SimpleRodaMemberList extends BasicAsyncTableCell { +public class SimpleRodaMemberList extends AsyncTableCell { private static final int PAGE_SIZE = 5; @@ -47,12 +46,9 @@ public class SimpleRodaMemberList extends BasicAsyncTableCell { private static final List fieldsToReturn = Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.MEMBERS_ID, RodaConstants.MEMBERS_IS_USER, RodaConstants.MEMBERS_NAME, RodaConstants.MEMBERS_ID); - public SimpleRodaMemberList(String listId) { - this(listId, null, null, false); - } - - public SimpleRodaMemberList(String listId, Filter filter, String summary, boolean selectable) { - super(RODAMember.class, listId, filter, summary, selectable, fieldsToReturn); + @Override + protected void adjustOptions(Options options) { + options.withFieldsToReturn(fieldsToReturn); } @Override diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/TransferredResourceList.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/TransferredResourceList.java index 9fc66050d7..cadd771951 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/TransferredResourceList.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/TransferredResourceList.java @@ -14,10 +14,9 @@ import java.util.Map; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.ip.TransferredResource; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.common.client.ClientLogger; import org.roda.wui.common.client.tools.Humanize; @@ -40,7 +39,7 @@ * @author Luis Faria * */ -public class TransferredResourceList extends BasicAsyncTableCell { +public class TransferredResourceList extends AsyncTableCell { private final ClientLogger logger = new ClientLogger(getClass().getName()); private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -57,33 +56,19 @@ public class TransferredResourceList extends BasicAsyncTableCell options) { + options.withFieldsToReturn(fieldsToReturn); } @Override diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/pagination/ListSelectionUtils.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/pagination/ListSelectionUtils.java index f2b906a2b4..bf85835650 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/pagination/ListSelectionUtils.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/pagination/ListSelectionUtils.java @@ -242,7 +242,7 @@ public void onSuccess(Long totalCount) { } - public static void bindBrowseOpener(final AsyncTableCell list) { + public static void bindBrowseOpener(final AsyncTableCell list) { list.getSelectionModel().addSelectionChangeHandler(new Handler() { @Override diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/AsyncTableCell.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/AsyncTableCell.java index 420ee03375..17c571f9fc 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/AsyncTableCell.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/AsyncTableCell.java @@ -8,6 +8,7 @@ package org.roda.wui.client.common.lists.utils; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -32,14 +33,11 @@ import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.index.sublist.Sublist; import org.roda.wui.client.browse.BrowserService; -import org.roda.wui.client.common.NoAsyncCallback; import org.roda.wui.client.common.actions.Actionable; import org.roda.wui.client.common.actions.model.ActionableObject; -import org.roda.wui.client.common.actions.widgets.ActionableWidgetBuilder; import org.roda.wui.client.common.lists.pagination.ListSelectionState; import org.roda.wui.client.common.lists.pagination.ListSelectionUtils; -import org.roda.wui.client.common.popup.CalloutPopup; -import org.roda.wui.client.common.popup.CalloutPopup.CalloutPosition; +import org.roda.wui.client.common.search.SearchFilters; import org.roda.wui.client.common.utils.AsyncCallbackUtils; import org.roda.wui.client.common.utils.HtmlSnippetUtils; import org.roda.wui.client.common.utils.StringUtils; @@ -89,11 +87,12 @@ import com.google.gwt.view.client.DefaultSelectionEventManager; import com.google.gwt.view.client.ProvidesKey; import com.google.gwt.view.client.Range; +import com.google.gwt.view.client.SelectionChangeEvent; import com.google.gwt.view.client.SingleSelectionModel; import config.i18n.client.ClientMessages; -public abstract class AsyncTableCell extends FlowPanel +public abstract class AsyncTableCell extends FlowPanel implements HasValueChangeHandlers> { public static final Integer DEFAULT_INITIAL_PAGE_SIZE = 20; @@ -102,22 +101,24 @@ public abstract class AsyncTableCell extends FlowPanel private static final ClientMessages messages = GWT.create(ClientMessages.class); private static final ClientLogger LOGGER = new ClientLogger(AsyncTableCell.class.getName()); - private final Class classToReturn; - private final O object; - private final String listId; + private Options options; - private final FlowPanel mainPanel; - private final FlowPanel sidePanel; + private Class classToReturn; + private String listId; + private Actionable actionable; - private final MyAsyncDataProvider dataProvider; - private final SingleSelectionModel selectionModel; - private final AsyncHandler columnSortHandler; + private FlowPanel mainPanel; + private FlowPanel sidePanel; + + private MyAsyncDataProvider dataProvider; + private SingleSelectionModel selectionModel; + private AsyncHandler columnSortHandler; + + private AccessibleSimplePager resultsPager; + private RodaPageSizePager pageSizePager; - private final AccessibleSimplePager resultsPager; - private final RodaPageSizePager pageSizePager; private Button csvDownloadButton; - private Button actionsButton; - private final CellTable display; + private CellTable display; private FlowPanel selectAllPanel; private FlowPanel selectAllPanelBody; @@ -134,8 +135,8 @@ public abstract class AsyncTableCell extends FlowPanel private boolean selectable; private List fieldsToReturn; - private int initialPageSize = 20; - private int pageSizeIncrement = 100; + private int initialPageSize; + private int pageSizeIncrement; private Timer autoUpdateTimer = null; private int autoUpdateTimerMillis = 0; @@ -151,42 +152,31 @@ enum AutoUpdateState { private List> autoUpdateConsumers = new ArrayList<>(); - private ActionableWidgetBuilder actionableBuilder = null; - private final CalloutPopup actionsPopup = new CalloutPopup(); - - public AsyncTableCell(Class classToReturn, String listId, List fieldsToReturn) { - this(classToReturn, listId, null, false, null, null, false, DEFAULT_INITIAL_PAGE_SIZE, DEFAULT_PAGE_SIZE_INCREMENT, - null, fieldsToReturn); + public AsyncTableCell() { + super(); } - public AsyncTableCell(Class classToReturn, String listId, Filter filter, boolean justActive, Facets facets, - String summary, boolean selectable, O object, List fieldsToReturn) { - this(classToReturn, listId, filter, justActive, facets, summary, selectable, DEFAULT_INITIAL_PAGE_SIZE, - DEFAULT_PAGE_SIZE_INCREMENT, object, fieldsToReturn); - } + AsyncTableCell initialize(Options options) { + adjustOptions(options); - public AsyncTableCell(final Class classToReturn, final String listId, final Filter filter, - final boolean justActive, final Facets facets, final String summary, final boolean selectable, - final int initialPageSize, final int pageSizeIncrement, final O object, List fieldsToReturn) { - super(); + this.classToReturn = options.classToReturn; + this.initialPageSize = options.initialPageSize; + this.pageSizeIncrement = options.pageSizeIncrement; + this.listId = options.listId; + this.actionable = options.actionable; - this.classToReturn = classToReturn; - this.initialPageSize = initialPageSize; - this.pageSizeIncrement = pageSizeIncrement; - this.object = object; - this.listId = listId; + final String notNullSummary = StringUtils.isNotBlank(options.summary) ? options.summary + : "summary" + Random.nextInt(1000); - final String notNullSummary = StringUtils.isNotBlank(summary) ? summary : "summary" + Random.nextInt(1000); + this.filter = options.filter; + this.justActive = options.justActive; + this.facets = options.facets; + this.selectable = actionable != null; - this.filter = filter; - this.justActive = justActive; - this.facets = facets; - this.selectable = selectable; - - this.fieldsToReturn = fieldsToReturn; + this.fieldsToReturn = options.fieldsToReturn; display = new AccessibleCellTable<>(getInitialPageSize(), - (MyCellTableResources) GWT.create(MyCellTableResources.class), getKeyProvider(), summary); + (MyCellTableResources) GWT.create(MyCellTableResources.class), getKeyProvider(), options.summary); display.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.DISABLED); display.setLoadingIndicator(new HTML(HtmlSnippetUtils.LOADING)); @@ -238,10 +228,7 @@ protected void fireChangeEvent(IndexResult result) { csvDownloadButton = new Button(messages.tableDownloadCSV()); csvDownloadButton.addStyleName("btn btn-link csvDownloadButton"); - - actionsButton = new Button(messages.tableAction()); - actionsButton.addStyleName("btn btn-link actionsButton"); - actionsButton.setVisible(actionableBuilder != null); + csvDownloadButton.setVisible(options.csvDownloadButtonVisibility); createSelectAllPanel(); @@ -258,7 +245,6 @@ protected void fireChangeEvent(IndexResult result) { mainPanel.add(resultsPager); mainPanel.add(pageSizePager); mainPanel.add(csvDownloadButton); - mainPanel.add(actionsButton); SimplePanel clearfix = new SimplePanel(); clearfix.addStyleName("clearfix"); @@ -287,14 +273,6 @@ public void onSuccess(Integer result) { } }); - actionsButton.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - showActions(); - } - }); - selectionModel = new SingleSelectionModel<>(getKeyProvider()); Handler selectionEventManager = getSelectionEventManager(); @@ -326,6 +304,44 @@ public void onValueChange(ValueChangeEvent> event) { // log autoUpdateConsumers.add(st -> GWT.log(st.toString())); addAutoUpdateControlListener(); + + if (options.bindOpener) { + ListSelectionUtils.bindBrowseOpener(this); + } + + for (CheckboxSelectionListener listener : options.checkboxSelectionListeners) { + addCheckboxSelectionListener(listener); + } + + for (ValueChangeHandler> handler : options.indexResultValueChangeHandlers) { + addValueChangeHandler(handler); + } + + for (SelectionChangeEvent.Handler handler : options.selectionChangeHandlers) { + getSelectionModel().addSelectionChangeHandler(handler); + } + + for (RedrawEvent.Handler handler : options.redrawEventHandlers) { + display.addRedrawHandler(handler); + } + + for (String extraStyleName : options.extraStyleNames) { + addStyleName(extraStyleName); + } + + if (options.autoUpdate != null) { + autoUpdate(options.autoUpdate); + } + + if (options.startHidden) { + this.setVisible(false); + } + + return this; + } + + protected void adjustOptions(Options options) { + // override this to add defaults or enforce rules } private void toggleSidePanel(boolean toggle) { @@ -704,10 +720,6 @@ public boolean isSelectable() { return selectable; } - public void setSelectable(boolean selectable) { - this.selectable = selectable; - } - public SelectedItems getSelected() { SelectedItems ret; if (isAllSelected()) { @@ -827,10 +839,6 @@ public Boolean isAllSelected() { return selectAllCheckBox.getValue(); } - public O getObject() { - return object; - } - public String getListId() { return listId; } @@ -919,63 +927,18 @@ public boolean hasElementsSelected() { return true; } - public void setCsvDownloadButtonVisibility(boolean isVisible) { - csvDownloadButton.setVisible(isVisible); - } - - public void setActionable(Actionable actionable) { - this.actionableBuilder = new ActionableWidgetBuilder<>(actionable); - actionsButton.setVisible(true); - } - - protected void showActions() { - if (actionableBuilder != null) { - if (actionsPopup.isShowing()) { - actionsPopup.hide(); - } else { - - actionableBuilder.withCallback(new NoAsyncCallback() { - @Override - public void onSuccess(Actionable.ActionImpact impact) { - if (Actionable.ActionImpact.DESTROYED.equals(impact)) { - Timer timer = new Timer() { - @Override - public void run() { - update(); - } - }; - - timer.schedule(RodaConstants.ACTION_TIMEOUT); - } else if (!Actionable.ActionImpact.NONE.equals(impact)) { - update(); - } - actionsPopup.hide(); - } - }); - - if (isAllSelected()) { - actionsPopup.setWidget(actionableBuilder.buildListWithObjects(new ActionableObject<>(getSelected()))); - } else if (selected.size() == 1) { - actionsPopup - .setWidget(actionableBuilder.buildListWithObjects(new ActionableObject<>(selected.iterator().next()))); - } else if (selected.size() > 1) { - // TODO create action layout based on selected set - actionsPopup.setWidget(actionableBuilder.buildListWithObjects(new ActionableObject<>(getSelected()))); - } else { - Label emptyHelpText = new Label(messages.actionableEmptyHelp(ActionableObject.ActionableObjectType.NONE)); - emptyHelpText.addStyleName("actions-empty-help"); - actionsPopup.setWidget(emptyHelpText); - } - - actionsPopup.showRelativeTo(actionsButton, CalloutPosition.BOTTOM_RIGHT); - } + public ActionableObject getActionableObject() { + if (isAllSelected()) { + return new ActionableObject<>(getSelected()); + } else if (selected.size() == 1) { + return new ActionableObject<>(selected.iterator().next()); + } else if (selected.size() > 1) { + return new ActionableObject<>(getSelected()); + } else { + return new ActionableObject(classToReturn); } } - public void addRedrawHandler(RedrawEvent.Handler handler) { - display.addRedrawHandler(handler); - } - private boolean createAndBindFacets(FlowPanel facetsPanel) { facetsPanel.clear(); @@ -1123,4 +1086,141 @@ public void resumeAutoUpdate() { setAutoUpdateState(AutoUpdateState.AUTO_UPDATE_SUCCESS); } } + + public static class Options { + private final Class classToReturn; + private final String listId; + private Filter filter; + private boolean justActive; + private Facets facets; + private String summary; + private List fieldsToReturn; + private int initialPageSize; + private int pageSizeIncrement; + private Actionable actionable; + private boolean bindOpener; + private List> checkboxSelectionListeners; + private List>> indexResultValueChangeHandlers; + private List selectionChangeHandlers; + private List redrawEventHandlers; + private List extraStyleNames; + private Integer autoUpdate; + private boolean csvDownloadButtonVisibility; + private boolean startHidden; + + public Options(Class classToReturn, String listId) { + this.classToReturn = classToReturn; + this.listId = listId; + + // set defaults + actionable = null; + filter = SearchFilters.allFilter(); + justActive = false; + facets = ConfigurationManager.FacetFactory.getFacets(listId); + summary = messages.searchResults(); + fieldsToReturn = Collections.emptyList(); + initialPageSize = DEFAULT_INITIAL_PAGE_SIZE; + pageSizeIncrement = DEFAULT_PAGE_SIZE_INCREMENT; + checkboxSelectionListeners = new ArrayList<>(); + indexResultValueChangeHandlers = new ArrayList<>(); + extraStyleNames = new ArrayList<>(); + selectionChangeHandlers = new ArrayList<>(); + redrawEventHandlers = new ArrayList<>(); + autoUpdate = null; + csvDownloadButtonVisibility = true; + startHidden = false; + } + + public Class getClassToReturn() { + return classToReturn; + } + + public Options withActionable(Actionable actionable) { + this.actionable = actionable; + return this; + } + + public Options withFilter(Filter filter) { + this.filter = filter; + return this; + } + + public Options withJustActive(boolean justActive) { + + this.justActive = justActive; + return this; + } + + public Options withFacets(Facets facets) { + this.facets = facets; + return this; + } + + public Options withSummary(String summary) { + this.summary = summary; + return this; + } + + public Options withFieldsToReturn(List fieldsToReturn) { + this.fieldsToReturn = fieldsToReturn; + return this; + } + + public Options withInitialPageSize(int initialPageSize) { + this.initialPageSize = initialPageSize; + return this; + } + + public Options withPageSizeIncrement(int pageSizeIncrement) { + this.pageSizeIncrement = pageSizeIncrement; + return this; + } + + public Options withAutoUpdate(Integer autoUpdate) { + this.autoUpdate = autoUpdate; + return this; + } + + // move this to the searchWrapper and/or use actionable + @Deprecated + public Options withCsvDownloadButtonVisibility(boolean csvDownloadButtonVisibility) { + this.csvDownloadButtonVisibility = csvDownloadButtonVisibility; + return this; + } + + public Options bindOpener() { + this.bindOpener = true; + return this; + } + + public Options withStartHidden(boolean startHidden) { + this.startHidden = startHidden; + return this; + } + + public Options addCheckboxSelectionListener(CheckboxSelectionListener checkboxSelectionListener) { + checkboxSelectionListeners.add(checkboxSelectionListener); + return this; + } + + public Options addValueChangedHandler(ValueChangeHandler> handler) { + indexResultValueChangeHandlers.add(handler); + return this; + } + + public Options addStyleName(String styleName) { + extraStyleNames.add(styleName); + return this; + } + + public Options addSelectionChangeHandler(SelectionChangeEvent.Handler handler) { + selectionChangeHandlers.add(handler); + return this; + } + + public Options addRedrawHandler(RedrawEvent.Handler handler) { + redrawEventHandlers.add(handler); + return this; + } + } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/BasicAsyncTableCell.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/BasicAsyncTableCell.java deleted file mode 100644 index 86488cba67..0000000000 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/BasicAsyncTableCell.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * The contents of this file are subject to the license and copyright - * detailed in the LICENSE file at the root of the source - * tree and available online at - * - * https://github.com/keeps/roda - */ -package org.roda.wui.client.common.lists.utils; - -import java.util.List; - -import org.roda.core.data.v2.index.IsIndexed; -import org.roda.core.data.v2.index.facet.Facets; -import org.roda.core.data.v2.index.filter.Filter; -import org.roda.wui.common.client.tools.ConfigurationManager; - -public abstract class BasicAsyncTableCell extends AsyncTableCell { - public BasicAsyncTableCell(Class classToReturn, String listId, List fieldsToReturn) { - super(classToReturn, listId, fieldsToReturn); - } - - public BasicAsyncTableCell(Class classToReturn, String listId, Filter filter, Facets facets, String summary, - boolean selectable, int initialPageSize, int pageSizeIncrement, List fieldsToReturn) { - super(classToReturn, listId, filter, false, facets, summary, selectable, initialPageSize, pageSizeIncrement, null, - fieldsToReturn); - } - - public BasicAsyncTableCell(Class classToReturn, String listId, Filter filter, boolean justActive, Facets facets, - String summary, boolean selectable, int initialPageSize, int pageSizeIncrement, List fieldsToReturn) { - super(classToReturn, listId, filter, justActive, facets, summary, selectable, initialPageSize, pageSizeIncrement, - null, fieldsToReturn); - } - - public BasicAsyncTableCell(Class classToReturn, String listId, Filter filter, boolean justActive, Facets facets, - String summary, boolean selectable, List fieldsToReturn) { - super(classToReturn, listId, filter, justActive, facets, summary, selectable, null, fieldsToReturn); - } - - public BasicAsyncTableCell(Class classToReturn, String listId, Filter filter, Facets facets, String summary, - boolean selectable, List fieldsToReturn) { - super(classToReturn, listId, filter, false, facets, summary, selectable, null, fieldsToReturn); - } - - public BasicAsyncTableCell(Class classToReturn, String listId, Filter filter, String summary, boolean selectable, - int initialPageSize, int pageSizeIncrement, List fieldsToReturn) { - super(classToReturn, listId, filter, false, ConfigurationManager.FacetFactory.getFacets(listId), summary, - selectable, initialPageSize, pageSizeIncrement, null, fieldsToReturn); - } - - public BasicAsyncTableCell(Class classToReturn, String listId, Filter filter, boolean justActive, String summary, - boolean selectable, int initialPageSize, int pageSizeIncrement, List fieldsToReturn) { - super(classToReturn, listId, filter, justActive, ConfigurationManager.FacetFactory.getFacets(listId), summary, - selectable, initialPageSize, pageSizeIncrement, null, fieldsToReturn); - } - - public BasicAsyncTableCell(Class classToReturn, String listId, Filter filter, boolean justActive, String summary, - boolean selectable, List fieldsToReturn) { - super(classToReturn, listId, filter, justActive, ConfigurationManager.FacetFactory.getFacets(listId), summary, - selectable, null, fieldsToReturn); - } - - public BasicAsyncTableCell(Class classToReturn, String listId, Filter filter, String summary, boolean selectable, - List fieldsToReturn) { - super(classToReturn, listId, filter, false, ConfigurationManager.FacetFactory.getFacets(listId), summary, - selectable, null, fieldsToReturn); - } -} diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/ListBuilder.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/ListBuilder.java new file mode 100644 index 0000000000..1a2b19b47b --- /dev/null +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/ListBuilder.java @@ -0,0 +1,35 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE file at the root of the source + * tree and available online at + * + * https://github.com/keeps/roda + */ +package org.roda.wui.client.common.lists.utils; + +import java.util.function.Supplier; + +import org.roda.core.data.v2.index.IsIndexed; +import org.roda.wui.client.common.actions.Actionable; + +public class ListBuilder { + private final AsyncTableCell.Options options; + private final Supplier> listSupplier; + private Actionable actionable = null; + + public ListBuilder(Supplier> listSupplier, AsyncTableCell.Options options) { + this.options = options; + this.listSupplier = listSupplier; + } + + public AsyncTableCell build() { + if (actionable != null) { + options.withActionable(actionable); + } + return listSupplier.get().initialize(options); + } + + public AsyncTableCell.Options getOptions() { + return options; + } +} diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/ListFactory.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/ListFactory.java index 64c6f467b9..3f94a23d95 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/ListFactory.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/lists/utils/ListFactory.java @@ -7,7 +7,10 @@ */ package org.roda.wui.client.common.lists.utils; +import java.util.function.Supplier; + import org.roda.core.data.v2.formats.Format; +import org.roda.core.data.v2.index.IsIndexed; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.ip.AIP; import org.roda.core.data.v2.ip.DIP; @@ -54,50 +57,82 @@ public class ListFactory { private static final ClientMessages messages = GWT.create(ClientMessages.class); - public BasicAsyncTableCell getList(String actualClass, String title, Filter filter, boolean selectable, - int pageSize, int incrementPage) { + public ListBuilder getListBuilder(String listIdPrefix, String actualClass, String title, + Filter filter, int pageSize, int incrementPage) { + + AsyncTableCell.Options options; + Supplier> listConstructor; + if (actualClass.equals(AIP.class.getName()) || actualClass.equals(IndexedAIP.class.getName())) { - return new AIPList("ListFactory_AIP", filter, LastSelectedItemsSingleton.getInstance().isSelectedJustActive(), - messages.selectAipSearchResults(), selectable, pageSize, incrementPage); + options = new AsyncTableCell.Options<>(IndexedAIP.class, listIdPrefix + "_AIP"); + listConstructor = AIPList::new; } else if (actualClass.equals(Representation.class.getName()) || actualClass.equals(IndexedRepresentation.class.getName())) { - return new RepresentationList("ListFactory_representation", filter, - LastSelectedItemsSingleton.getInstance().isSelectedJustActive(), - messages.selectRepresentationSearchResults(), selectable, pageSize, incrementPage); + options = new AsyncTableCell.Options<>(IndexedRepresentation.class, listIdPrefix + "_representation"); + listConstructor = RepresentationList::new; } else if (actualClass.equals(File.class.getName()) || actualClass.equals(IndexedFile.class.getName())) { - return new SimpleFileList("ListFactory_simpleFile", filter, - LastSelectedItemsSingleton.getInstance().isSelectedJustActive(), - messages.selectFileSearchResults(), selectable, pageSize, incrementPage); + options = new AsyncTableCell.Options<>(IndexedFile.class, listIdPrefix + "_simpleFile"); + listConstructor = SimpleFileList::new; } else if (actualClass.equals(RepresentationInformation.class.getName())) { - return new RepresentationInformationList("ListFactory_representationInformation", filter, title, selectable, - pageSize, - incrementPage); + options = new AsyncTableCell.Options<>(RepresentationInformation.class, + listIdPrefix + "_representationInformation"); + listConstructor = RepresentationInformationList::new; } else if (actualClass.equals(IndexedRisk.class.getName()) || actualClass.equals(Risk.class.getName())) { - return new RiskList("ListFactory_risk", filter, title, selectable, pageSize, incrementPage); + options = new AsyncTableCell.Options<>(IndexedRisk.class, listIdPrefix + "_risk"); + listConstructor = RiskList::new; } else if (actualClass.equals(Format.class.getName())) { - return new FormatList("ListFactory_format", filter, title, selectable, pageSize, incrementPage); + options = new AsyncTableCell.Options<>(Format.class, listIdPrefix + "_format"); + listConstructor = FormatList::new; } else if (actualClass.equals(RiskIncidence.class.getName())) { - return new RiskIncidenceList("ListFactory_riskIncidence", filter, title, selectable, pageSize, incrementPage); + options = new AsyncTableCell.Options<>(RiskIncidence.class, listIdPrefix + "_riskIncidence"); + listConstructor = RiskIncidenceList::new; } else if (actualClass.equals(Job.class.getName())) { - return new JobList("ListFactory_job", filter, title, selectable, pageSize, incrementPage); + options = new AsyncTableCell.Options<>(Job.class, listIdPrefix + "_job"); + listConstructor = JobList::new; } else if (actualClass.equals(Report.class.getName()) || actualClass.equals(IndexedReport.class.getName())) { - return new SimpleJobReportList("ListFactory_simpleJob", filter, title, selectable, pageSize, incrementPage); + options = new AsyncTableCell.Options<>(IndexedReport.class, listIdPrefix + "_simpleJob"); + listConstructor = SimpleJobReportList::new; } else if (actualClass.equals(TransferredResource.class.getName())) { - return new TransferredResourceList("ListFactory_transferredResource", filter, title, selectable, pageSize, - incrementPage); + options = new AsyncTableCell.Options<>(TransferredResource.class, listIdPrefix + "_transferredResource"); + listConstructor = TransferredResourceList::new; } else if (actualClass.equals(Notification.class.getName())) { - return new NotificationList("ListFactory_notification", filter, title, selectable, pageSize, incrementPage); + options = new AsyncTableCell.Options<>(Notification.class, listIdPrefix + "_notification"); + listConstructor = NotificationList::new; } else if (actualClass.equals(LogEntry.class.getName())) { - return new LogEntryList("ListFactory_logEntry", filter, title, selectable, pageSize, incrementPage); + options = new AsyncTableCell.Options<>(LogEntry.class, listIdPrefix + "_logEntry"); + listConstructor = LogEntryList::new; } else if (actualClass.equals(RODAMember.class.getName())) { - return new RodaMemberList("ListFactory_rodaMember", filter, title, selectable, pageSize, incrementPage); + options = new AsyncTableCell.Options<>(RODAMember.class, listIdPrefix + "_rodaMember"); + listConstructor = RodaMemberList::new; } else if (actualClass.equals(DIP.class.getName()) || actualClass.equals(IndexedDIP.class.getName())) { - return new DIPList("ListFactory_DIP", filter, title, selectable, pageSize, incrementPage); + options = new AsyncTableCell.Options<>(IndexedDIP.class, listIdPrefix + "_DIP"); + listConstructor = DIPList::new; } else if (actualClass.equals(DIPFile.class.getName())) { - return new DIPFileList("ListFactory_DIPFile", filter, title, selectable, pageSize, incrementPage); + options = new AsyncTableCell.Options<>(DIPFile.class, listIdPrefix + "_DIPFile"); + listConstructor = DIPFileList::new; } else { return null; } + + options.withFilter(filter); + options.withInitialPageSize(pageSize); + options.withPageSizeIncrement(incrementPage); + + if (actualClass.equals(AIP.class.getName()) || actualClass.equals(IndexedAIP.class.getName())) { + options.withSummary(messages.selectAipSearchResults()); + options.withJustActive(LastSelectedItemsSingleton.getInstance().isSelectedJustActive()); + } else if (actualClass.equals(Representation.class.getName()) + || actualClass.equals(IndexedRepresentation.class.getName())) { + options.withSummary(messages.selectRepresentationSearchResults()); + options.withJustActive(LastSelectedItemsSingleton.getInstance().isSelectedJustActive()); + } else if (actualClass.equals(File.class.getName()) || actualClass.equals(IndexedFile.class.getName())) { + options.withSummary(messages.selectFileSearchResults()); + options.withJustActive(LastSelectedItemsSingleton.getInstance().isSelectedJustActive()); + } else { + options.withSummary(title); + } + + return (ListBuilder) new ListBuilder(listConstructor, options); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/AdvancedSearchFieldsPanel.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/AdvancedSearchFieldsPanel.java index ba0b7ace2e..2a624610fe 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/AdvancedSearchFieldsPanel.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/AdvancedSearchFieldsPanel.java @@ -8,11 +8,11 @@ package org.roda.wui.client.common.search; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -import com.google.gwt.core.client.GWT; import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.ip.IndexedAIP; import org.roda.core.data.v2.ip.IndexedFile; @@ -36,17 +36,18 @@ import com.google.gwt.user.client.ui.Widget; public class AdvancedSearchFieldsPanel extends FlowPanel implements HasValueChangeHandlers { - private String className; + private String classSimpleName; private final Map searchFields = new HashMap<>(); private ListBox searchAdvancedFieldOptions; - public AdvancedSearchFieldsPanel(String className) { + public AdvancedSearchFieldsPanel(String classSimpleName) { super(); - this.className = className; - searchAdvancedFieldOptions = new ListBox(); + this.classSimpleName = classSimpleName; - BrowserService.Util.getInstance().retrieveSearchFields(className, LocaleInfo.getCurrentLocale().getLocaleName(), + searchAdvancedFieldOptions = new ListBox(); + BrowserService.Util.getInstance().retrieveSearchFields(this.classSimpleName, + LocaleInfo.getCurrentLocale().getLocaleName(), new AsyncCallback>() { @Override public void onFailure(Throwable caught) { @@ -149,19 +150,23 @@ private void setSuggestions(SearchFieldPanel searchFieldPanel) { SearchField searchField = searchFieldPanel.getSearchField(); if (searchField.getType().equals(RodaConstants.SEARCH_FIELD_TYPE_SUGGEST)) { - if (className.equals(RodaConstants.SEARCH_ITEMS)) { - searchFieldPanel.addInputSearchSuggestBox(new SearchSuggestBox<>(IndexedAIP.class, - searchField.getSuggestField(), searchField.isSuggestPartial())); - } else if (className.equals(RodaConstants.SEARCH_REPRESENTATIONS)) { - searchFieldPanel.addInputSearchSuggestBox(new SearchSuggestBox<>( - IndexedRepresentation.class, searchField.getSuggestField(), searchField.isSuggestPartial())); - } else if (className.equals(RodaConstants.SEARCH_FILES)) { - searchFieldPanel.addInputSearchSuggestBox(new SearchSuggestBox<>(IndexedFile.class, + if (classSimpleName.equals(IndexedAIP.class.getSimpleName())) { + searchFieldPanel.addInputSearchSuggestBox( + new SearchSuggestBox<>(IndexedAIP.class, searchField.getSuggestField(), searchField.isSuggestPartial())); + } else if (classSimpleName.equals(IndexedRepresentation.class.getSimpleName())) { + searchFieldPanel.addInputSearchSuggestBox(new SearchSuggestBox<>(IndexedRepresentation.class, searchField.getSuggestField(), searchField.isSuggestPartial())); + } else if (classSimpleName.equals(IndexedFile.class.getSimpleName())) { + searchFieldPanel.addInputSearchSuggestBox( + new SearchSuggestBox<>(IndexedFile.class, searchField.getSuggestField(), searchField.isSuggestPartial())); } } } + public Collection getSearchFields() { + return searchFields.values(); + } + @Override public HandlerRegistration addValueChangeHandler(ValueChangeHandler handler) { return addHandler(handler, ValueChangeEvent.getType()); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/CatalogueSearch.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/CatalogueSearch.java new file mode 100644 index 0000000000..a2d2d7f876 --- /dev/null +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/CatalogueSearch.java @@ -0,0 +1,118 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE file at the root of the source + * tree and available online at + * + * https://github.com/keeps/roda + */ +package org.roda.wui.client.common.search; + +import java.util.ArrayList; +import java.util.List; + +import org.roda.core.data.common.RodaConstants; +import org.roda.core.data.v2.index.IsIndexed; +import org.roda.core.data.v2.index.filter.Filter; +import org.roda.core.data.v2.index.select.SelectedItems; +import org.roda.core.data.v2.ip.AIPState; +import org.roda.core.data.v2.ip.IndexedAIP; +import org.roda.core.data.v2.ip.IndexedFile; +import org.roda.core.data.v2.ip.IndexedRepresentation; +import org.roda.wui.client.common.actions.AipActions; +import org.roda.wui.client.common.actions.FileActions; +import org.roda.wui.client.common.actions.RepresentationActions; +import org.roda.wui.client.common.lists.AIPList; +import org.roda.wui.client.common.lists.RepresentationList; +import org.roda.wui.client.common.lists.SearchFileList; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Widget; + +import config.i18n.client.ClientMessages; + +public class CatalogueSearch extends Composite { + + private static final ClientMessages messages = GWT.create(ClientMessages.class); + + interface MyUiBinder extends UiBinder { + } + + private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); + + @UiField(provided = true) + SearchWrapper searchPanel; + + // state + final String parentAipId; + final AIPState parentAipState; + + public CatalogueSearch(boolean justActive, String itemsListId, String representationsListId, String filesListId, + String parentAipId, AIPState parentAipState) { + + this.parentAipId = parentAipId; + this.parentAipState = parentAipState; + + // prepare lists + ListBuilder aipListBuilder = new ListBuilder<>(AIPList::new, + new AsyncTableCell.Options<>(IndexedAIP.class, itemsListId).withJustActive(justActive).bindOpener() + .withStartHidden(true)); + + ListBuilder representationListBuilder = new ListBuilder<>(RepresentationList::new, + new AsyncTableCell.Options<>(IndexedRepresentation.class, representationsListId).withJustActive(justActive) + .bindOpener().withStartHidden(true)); + + ListBuilder fileListBuilder = new ListBuilder<>(() -> new SearchFileList(true), + new AsyncTableCell.Options<>(IndexedFile.class, filesListId).withJustActive(justActive).bindOpener() + .withStartHidden(true)); + + // add lists to search + + // TODO tmp check why aip has actions with a parent but representation doesnt. + // bug? + searchPanel = new SearchWrapper(true, IndexedAIP.class.getSimpleName()) + .createListAndSearchPanel(aipListBuilder, AipActions.get(parentAipId, parentAipState)) + .createListAndSearchPanel(representationListBuilder, RepresentationActions.get()) + .createListAndSearchPanel(fileListBuilder, FileActions.get()); + + initWidget(uiBinder.createAndBindUi(this)); + + // searchPanel.setDropdownLabel(messages.searchListBoxItems()); + // searchPanel.addDropdownItem(messages.searchListBoxItems(), + // RodaConstants.SEARCH_ITEMS); + // searchPanel.addDropdownItem(messages.searchListBoxRepresentations(), + // RodaConstants.SEARCH_REPRESENTATIONS); + // searchPanel.addDropdownItem(messages.searchListBoxFiles(), + // RodaConstants.SEARCH_FILES); + // searchPanel.addDropdownPopupStyleName("searchInputListBoxPopup"); + } + + // TODO this is used in appraisal, but it should be using actionable + @Deprecated + public SelectedItems getSelected() { + return searchPanel.getSelectedItemsInCurrentList(); + } + + public void refresh() { + searchPanel.refreshCurrentList(); + } + + public void setFilters(List historyTokens) { + Filter filter = SearchFilters.createFilterFromHistoryTokens(historyTokens); + searchPanel.setFilter(IndexedRepresentation.class, filter); + searchPanel.setFilter(IndexedFile.class, filter); + + // handle aipId VS parentAipId + if (historyTokens.contains(RodaConstants.REPRESENTATION_AIP_ID)) { + List tokensForAip = new ArrayList<>(historyTokens); + tokensForAip.set(historyTokens.indexOf(RodaConstants.REPRESENTATION_AIP_ID), RodaConstants.AIP_PARENT_ID); + searchPanel.setFilter(IndexedAIP.class, SearchFilters.createFilterFromHistoryTokens(tokensForAip)); + } else { + searchPanel.setFilter(IndexedAIP.class, filter); + } + } +} diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/ActionLogSearch.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/CatalogueSearch.ui.xml similarity index 71% rename from roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/ActionLogSearch.ui.xml rename to roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/CatalogueSearch.ui.xml index 6ddd512477..d5eb9ca75e 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/ActionLogSearch.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/CatalogueSearch.ui.xml @@ -5,7 +5,6 @@ xmlns:commonsearch="urn:import:org.roda.wui.client.common.search"> - - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/Dropdown.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/Dropdown.java index 887476c8af..dfdd75f86c 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/Dropdown.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/Dropdown.java @@ -19,9 +19,12 @@ import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.HandlerRegistration; -import com.google.gwt.user.client.Window; +import com.google.gwt.safehtml.shared.SafeHtml; +import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.FocusPanel; +import com.google.gwt.user.client.ui.InlineHTML; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.SimplePanel; @@ -30,22 +33,30 @@ public class Dropdown extends Composite implements HasValueChangeHandlers { private FocusPanel focusPanel; private SimplePanel panel; + private FlowPanel iconAndLabelPanel; private Label selectedLabel; + private InlineHTML selectedIcon; private PopupPanel popup; private VerticalPanel popupPanel; private boolean popupShowing = false; private Map popupValues; + private Map popupIcons; public Dropdown() { focusPanel = new FocusPanel(); panel = new SimplePanel(); + iconAndLabelPanel = new FlowPanel(); selectedLabel = new Label(); + selectedIcon = new InlineHTML(); popup = new PopupPanel(true); popupPanel = new VerticalPanel(); popupValues = new HashMap<>(); + popupIcons = new HashMap<>(); - panel.add(selectedLabel); + iconAndLabelPanel.add(selectedIcon); + iconAndLabelPanel.add(selectedLabel); + panel.add(iconAndLabelPanel); focusPanel.add(panel); focusPanel.addClickHandler(new ClickHandler() { @@ -68,25 +79,37 @@ public void onClose(CloseEvent event) { focusPanel.addStyleName("dropdown"); panel.addStyleName("dropdown-panel"); - selectedLabel.addStyleName("dropdown-label"); + iconAndLabelPanel.addStyleName("dropdown-label"); popup.addStyleName("dropdown-popup"); } - public void addItem(final String label, final String value) { + public void addItem(final String label, final String value, final String icon) { popupValues.put(label, value); - Label item = new Label(label); - popupPanel.add(item); + popupIcons.put(label, icon); + + FlowPanel item = new FlowPanel(); + + InlineHTML iconPanel = new InlineHTML(); + iconPanel.setHTML(createHtmlForIcon(icon)); + item.add(iconPanel); + + Label labelWidget = new Label(label); item.addStyleName("dropdown-item"); - item.addClickHandler(new ClickHandler() { + item.addDomHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { selectedLabel.setText(label); + selectedIcon.setHTML(createHtmlForIcon(icon)); onChange(); popup(); } - }); + }, ClickEvent.getType()); + + item.add(labelWidget); + + popupPanel.add(item); popup.setWidget(popupPanel); setPanelWidth(); @@ -135,6 +158,7 @@ public boolean setSelectedValue(String value, boolean fire) { if (label != null) { selectedLabel.setText(label); + selectedIcon.setHTML(createHtmlForIcon(popupIcons.get(label))); if (fire) { onChange(); } @@ -154,4 +178,8 @@ public void setPanelWidth() { public void addPopupStyleName(String styleName) { popup.addStyleName(styleName); } + + private SafeHtml createHtmlForIcon(String icon) { + return SafeHtmlUtils.fromSafeConstant(""); + } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/EntitySearch.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/EntitySearch.java deleted file mode 100644 index 934351fa91..0000000000 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/EntitySearch.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.roda.wui.client.common.search; - -import org.roda.core.data.v2.index.filter.Filter; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; - -public interface EntitySearch { - - BasicAsyncTableCell getList(); - - void setFilter(Filter filter); - - void refresh(); -} diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/MainSearch.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/MainSearch.java deleted file mode 100644 index 3f569ff2c7..0000000000 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/MainSearch.java +++ /dev/null @@ -1,383 +0,0 @@ -/** - * The contents of this file are subject to the license and copyright - * detailed in the LICENSE file at the root of the source - * tree and available online at - * - * https://github.com/keeps/roda - */ -package org.roda.wui.client.common.search; - -import java.util.ArrayList; -import java.util.List; - -import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.IsIndexed; -import org.roda.core.data.v2.index.filter.Filter; -import org.roda.core.data.v2.index.filter.FilterParameter; -import org.roda.core.data.v2.index.filter.OrFiltersParameters; -import org.roda.core.data.v2.index.filter.SimpleFilterParameter; -import org.roda.core.data.v2.index.select.SelectedItems; -import org.roda.core.data.v2.index.select.SelectedItemsList; -import org.roda.core.data.v2.ip.AIP; -import org.roda.core.data.v2.ip.AIPState; -import org.roda.core.data.v2.ip.File; -import org.roda.core.data.v2.ip.Representation; -import org.roda.wui.client.common.LastSelectedItemsSingleton; -import org.roda.wui.client.common.actions.AipActions; -import org.roda.wui.client.common.actions.FileActions; -import org.roda.wui.client.common.actions.RepresentationActions; -import org.roda.wui.client.common.lists.AIPList; -import org.roda.wui.client.common.lists.RepresentationList; -import org.roda.wui.client.common.lists.SearchFileList; -import org.roda.wui.client.common.lists.pagination.ListSelectionUtils; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.logical.shared.ValueChangeEvent; -import com.google.gwt.event.logical.shared.ValueChangeHandler; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.FlowPanel; -import com.google.gwt.user.client.ui.Widget; - -import config.i18n.client.ClientMessages; - -public class MainSearch extends Composite { - - private static final ClientMessages messages = GWT.create(ClientMessages.class); - - interface MyUiBinder extends UiBinder { - } - - private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - - private static final Filter DEFAULT_FILTER_AIP = Filter.ALL; - private static final Filter DEFAULT_FILTER_REPRESENTATIONS = Filter.ALL; - private static final Filter DEFAULT_FILTER_FILES = Filter.ALL; - - Filter filterAips; - Filter filterRepresentations; - Filter filterFiles; - - @UiField(provided = true) - SearchPanel searchPanel; - - @UiField - FlowPanel searchResultPanel; - - AIPList itemsSearchResultPanel; - RepresentationList representationsSearchResultPanel; - SearchFileList filesSearchResultPanel; - - AdvancedSearchFieldsPanel itemsSearchAdvancedFieldsPanel; - AdvancedSearchFieldsPanel filesSearchAdvancedFieldsPanel; - AdvancedSearchFieldsPanel representationsSearchAdvancedFieldsPanel; - - boolean justActive = true; - boolean itemsSelectable = true; - boolean representationsSelectable = true; - boolean filesSelectable = true; - String selectedItem = AIP.class.getName(); - - String itemsListId; - String representationsListId; - String filesListId; - - // state - final String parentAipId; - final AIPState parentAipState; - - public MainSearch(boolean justActive, boolean itemsSelectable, boolean representationsSelectable, - boolean filesSelectable, String itemsListId, String representationsListId, String filesListId, String parentAipId, - AIPState parentAipState) { - this.justActive = justActive; - this.itemsSelectable = itemsSelectable; - this.representationsSelectable = representationsSelectable; - this.filesSelectable = filesSelectable; - - this.itemsListId = itemsListId; - this.representationsListId = representationsListId; - this.filesListId = filesListId; - - this.parentAipId = parentAipId; - this.parentAipState = parentAipState; - - ValueChangeHandler searchAdvancedFieldsPanelHandler = new ValueChangeHandler() { - @Override - public void onValueChange(ValueChangeEvent event) { - searchPanel.setSearchAdvancedGoEnabled(event.getValue() == 0 ? false : true); - } - }; - - itemsSearchAdvancedFieldsPanel = new AdvancedSearchFieldsPanel(RodaConstants.SEARCH_ITEMS); - representationsSearchAdvancedFieldsPanel = new AdvancedSearchFieldsPanel(RodaConstants.SEARCH_REPRESENTATIONS); - filesSearchAdvancedFieldsPanel = new AdvancedSearchFieldsPanel(RodaConstants.SEARCH_FILES); - - itemsSearchAdvancedFieldsPanel.addValueChangeHandler(searchAdvancedFieldsPanelHandler); - representationsSearchAdvancedFieldsPanel.addValueChangeHandler(searchAdvancedFieldsPanelHandler); - filesSearchAdvancedFieldsPanel.addValueChangeHandler(searchAdvancedFieldsPanelHandler); - - defaultFilters(); - - searchPanel = new SearchPanel(filterAips, RodaConstants.AIP_SEARCH, true, messages.searchPlaceHolder(), true, true, - false); - - initWidget(uiBinder.createAndBindUi(this)); - - searchPanel.setDropdownLabel(messages.searchListBoxItems()); - searchPanel.addDropdownItem(messages.searchListBoxItems(), RodaConstants.SEARCH_ITEMS); - searchPanel.addDropdownItem(messages.searchListBoxRepresentations(), RodaConstants.SEARCH_REPRESENTATIONS); - searchPanel.addDropdownItem(messages.searchListBoxFiles(), RodaConstants.SEARCH_FILES); - - searchPanel.addValueChangeHandler(new ValueChangeHandler() { - - @Override - public void onValueChange(ValueChangeEvent event) { - search(RodaConstants.SEARCH_BUTTON_EVENT_MARK.equals(event.getValue())); - } - }); - - searchPanel.addDropdownPopupStyleName("searchInputListBoxPopup"); - - // handler aqui - searchPanel.addSearchAdvancedFieldAddHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - if (selectedItem.equals(Representation.class.getName())) { - representationsSearchAdvancedFieldsPanel.addSearchFieldPanel(); - } else if (selectedItem.equals(File.class.getName())) { - filesSearchAdvancedFieldsPanel.addSearchFieldPanel(); - } else { - itemsSearchAdvancedFieldsPanel.addSearchFieldPanel(); - } - } - }); - } - - public boolean isJustActive() { - return justActive; - } - - public void showSearchAdvancedFieldsPanel(boolean isVisible) { - if (itemsSearchResultPanel == null) { - createItemsSearchResultPanel(true); - } - - itemsSearchResultPanel.setVisible(isVisible); - - searchPanel.setVariables(filterAips, RodaConstants.AIP_SEARCH, true, itemsSearchResultPanel, - itemsSearchAdvancedFieldsPanel); - searchPanel.setSearchAdvancedFieldOptionsAddVisible(true); - searchPanel.setSearchAdvancedGoEnabled(itemsSearchAdvancedFieldsPanel.getWidgetCount() == 0 ? false : true); - - searchResultPanel.clear(); - searchResultPanel.add(itemsSearchResultPanel); - selectedItem = AIP.class.getName(); - } - - public void showRepresentationsSearchAdvancedFieldsPanel(boolean isVisible) { - if (representationsSearchResultPanel == null) { - createRepresentationsSearchResultPanel(true); - } - - representationsSearchResultPanel.setVisible(isVisible); - - searchPanel.setVariables(filterRepresentations, RodaConstants.REPRESENTATION_SEARCH, true, - representationsSearchResultPanel, representationsSearchAdvancedFieldsPanel); - searchPanel.setSearchAdvancedFieldOptionsAddVisible(true); - searchPanel - .setSearchAdvancedGoEnabled(representationsSearchAdvancedFieldsPanel.getWidgetCount() == 0 ? false : true); - - searchResultPanel.clear(); - searchResultPanel.add(representationsSearchResultPanel); - selectedItem = Representation.class.getName(); - } - - public void showFilesSearchAdvancedFieldsPanel(boolean isVisible) { - if (filesSearchResultPanel == null) { - createFilesSearchResultPanel(true); - } - - filesSearchResultPanel.setVisible(isVisible); - - searchPanel.setVariables(filterFiles, RodaConstants.FILE_SEARCH, true, filesSearchResultPanel, - filesSearchAdvancedFieldsPanel); - searchPanel.setSearchAdvancedFieldOptionsAddVisible(true); - searchPanel.setSearchAdvancedGoEnabled(filesSearchAdvancedFieldsPanel.getWidgetCount() == 0 ? false : true); - - searchResultPanel.clear(); - searchResultPanel.add(filesSearchResultPanel); - selectedItem = File.class.getName(); - } - - private void createItemsSearchResultPanel(boolean isVisible) { - if (isVisible) { - itemsSearchResultPanel = new AIPList(itemsListId, filterAips, justActive, messages.searchResults(), - itemsSelectable); - } else { - itemsSearchResultPanel = new AIPList(itemsListId, Filter.NULL, false, null, true); - } - - ListSelectionUtils.bindBrowseOpener(itemsSearchResultPanel); - LastSelectedItemsSingleton.getInstance().setSelectedJustActive(justActive); - - itemsSearchResultPanel.setActionable(AipActions.get(parentAipId, parentAipState)); - } - - private void createRepresentationsSearchResultPanel(boolean isVisible) { - if (isVisible) { - representationsSearchResultPanel = new RepresentationList(representationsListId, filterRepresentations, - justActive, messages.searchResults(), representationsSelectable); - } else { - representationsSearchResultPanel = new RepresentationList(representationsListId, null, false, null, true); - } - - ListSelectionUtils.bindBrowseOpener(representationsSearchResultPanel); - representationsSearchResultPanel.setActionable(RepresentationActions.get()); - } - - private void createFilesSearchResultPanel(boolean isVisible) { - if (isVisible) { - boolean showFilesPath = true; - filesSearchResultPanel = new SearchFileList(filesListId, filterFiles, justActive, messages.searchResults(), - filesSelectable, showFilesPath); - } else { - filesSearchResultPanel = new SearchFileList(filesListId, null, false, null, true, true); - } - - ListSelectionUtils.bindBrowseOpener(filesSearchResultPanel); - LastSelectedItemsSingleton.getInstance().setSelectedJustActive(justActive); - filesSearchResultPanel.setActionable(FileActions.get()); - } - - public SelectedItems getSelected() { - SelectedItems selected = null; - - if (itemsSearchResultPanel != null && itemsSearchResultPanel.hasElementsSelected()) { - selected = itemsSearchResultPanel.getSelected(); - } else if (representationsSearchResultPanel != null && representationsSearchResultPanel.hasElementsSelected()) { - selected = representationsSearchResultPanel.getSelected(); - } else if (filesSearchResultPanel != null && filesSearchResultPanel.hasElementsSelected()) { - selected = filesSearchResultPanel.getSelected(); - } - - if (selected == null) { - selected = new SelectedItemsList<>(); - } - - return selected; - } - - public void clearSelected() { - if (itemsSearchResultPanel != null) { - itemsSearchResultPanel.clearSelected(); - } - - if (representationsSearchResultPanel != null) { - representationsSearchResultPanel.clearSelected(); - } - - if (filesSearchResultPanel != null) { - filesSearchResultPanel.clearSelected(); - } - } - - public void refresh() { - if (itemsSearchResultPanel != null && itemsSearchResultPanel.hasElementsSelected()) { - itemsSearchResultPanel.refresh(); - } else if (representationsSearchResultPanel != null && representationsSearchResultPanel.hasElementsSelected()) { - representationsSearchResultPanel.refresh(); - } else if (filesSearchResultPanel != null && filesSearchResultPanel.hasElementsSelected()) { - filesSearchResultPanel.refresh(); - } - } - - public boolean setSearch(List historyTokens) { - // #search/TYPE/key/value/key/value - String type = historyTokens.get(0); - boolean hasOperator = historyTokens.size() % 2 == 1 ? false : true; - String operator = RodaConstants.OPERATOR_AND; - - boolean successful = searchPanel.setDropdownSelectedValue(type, false); - - if (hasOperator) { - operator = historyTokens.remove(1); - successful = successful - && (operator.equals(RodaConstants.OPERATOR_AND) || operator.equals(RodaConstants.OPERATOR_OR)); - } - - if (successful) { - List params = new ArrayList<>(); - for (int i = 1; i < historyTokens.size() - 1; i += 2) { - String key = historyTokens.get(i); - String value = historyTokens.get(i + 1); - params.add(new SimpleFilterParameter(key, value)); - } - - if (!params.isEmpty()) { - if (searchPanel.isDefaultFilterIncremental()) { - if (operator.equals(RodaConstants.OPERATOR_OR)) { - OrFiltersParameters orParameters = new OrFiltersParameters(params); - filterAips.add(orParameters); - filterRepresentations.add(orParameters); - filterFiles.add(orParameters); - } else { - filterAips.add(params); - filterRepresentations.add(params); - filterFiles.add(params); - } - } else { - Filter filter; - - if (operator.equals(RodaConstants.OPERATOR_OR)) { - filter = new Filter(new OrFiltersParameters(params)); - } else { - filter = new Filter(params); - } - - filterAips = filter; - filterRepresentations = filter; - filterFiles = filter; - searchPanel.setDefaultFilter(filter, true); - } - } - } - - return successful; - } - - public void search(boolean isVisible) { - if (searchPanel.getDropdownSelectedValue().equals(RodaConstants.SEARCH_ITEMS)) { - showSearchAdvancedFieldsPanel(isVisible); - } else if (searchPanel.getDropdownSelectedValue().equals(RodaConstants.SEARCH_REPRESENTATIONS)) { - showRepresentationsSearchAdvancedFieldsPanel(isVisible); - } else { - showFilesSearchAdvancedFieldsPanel(isVisible); - } - - if (isVisible) { - searchPanel.doSearch(); - } - } - - public void defaultFilters() { - filterAips = new Filter(DEFAULT_FILTER_AIP); - filterRepresentations = new Filter(DEFAULT_FILTER_REPRESENTATIONS); - filterFiles = new Filter(DEFAULT_FILTER_FILES); - if (searchPanel != null) { - searchPanel.setDefaultFilterIncremental(false); - } - } - - public void setDefaultFilters(Filter defaultFilter) { - filterAips = new Filter(defaultFilter); - filterRepresentations = new Filter(defaultFilter); - filterFiles = new Filter(defaultFilter); - if (searchPanel != null) { - searchPanel.setDefaultFilterIncremental(true); - } - } -} diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/MainSearch.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/MainSearch.ui.xml deleted file mode 100644 index 6ddd512477..0000000000 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/MainSearch.ui.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchFilters.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchFilters.java index cec7099620..2f2117af81 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchFilters.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchFilters.java @@ -7,32 +7,15 @@ */ package org.roda.wui.client.common.search; +import java.util.ArrayList; +import java.util.List; + import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.formats.Format; import org.roda.core.data.v2.index.filter.BasicSearchFilterParameter; import org.roda.core.data.v2.index.filter.Filter; -import org.roda.core.data.v2.ip.AIP; -import org.roda.core.data.v2.ip.DIP; -import org.roda.core.data.v2.ip.DIPFile; -import org.roda.core.data.v2.ip.File; -import org.roda.core.data.v2.ip.IndexedAIP; -import org.roda.core.data.v2.ip.IndexedDIP; -import org.roda.core.data.v2.ip.IndexedFile; -import org.roda.core.data.v2.ip.IndexedRepresentation; -import org.roda.core.data.v2.ip.Representation; -import org.roda.core.data.v2.ip.TransferredResource; -import org.roda.core.data.v2.jobs.IndexedReport; -import org.roda.core.data.v2.jobs.Job; -import org.roda.core.data.v2.jobs.Report; -import org.roda.core.data.v2.log.LogEntry; -import org.roda.core.data.v2.notifications.Notification; -import org.roda.core.data.v2.ri.RepresentationInformation; -import org.roda.core.data.v2.risks.IndexedRisk; -import org.roda.core.data.v2.risks.Risk; -import org.roda.core.data.v2.risks.RiskIncidence; -import org.roda.core.data.v2.user.RODAMember; - -import com.google.gwt.core.shared.GWT; +import org.roda.core.data.v2.index.filter.FilterParameter; +import org.roda.core.data.v2.index.filter.OrFiltersParameters; +import org.roda.core.data.v2.index.filter.SimpleFilterParameter; public class SearchFilters { @@ -40,78 +23,54 @@ private SearchFilters() { // do nothing } - public static Filter defaultFilter(String actualClass) { - if (actualClass.equals(AIP.class.getName()) || actualClass.equals(IndexedAIP.class.getName())) { - return new Filter(new BasicSearchFilterParameter(RodaConstants.AIP_SEARCH, "*")); - } else if (actualClass.equals(Representation.class.getName()) - || actualClass.equals(IndexedRepresentation.class.getName())) { - return new Filter(new BasicSearchFilterParameter(RodaConstants.REPRESENTATION_SEARCH, "*")); - } else if (actualClass.equals(File.class.getName()) || actualClass.equals(IndexedFile.class.getName())) { - return new Filter(new BasicSearchFilterParameter(RodaConstants.FILE_SEARCH, "*")); - } else if (actualClass.equals(RepresentationInformation.class.getName())) { - return new Filter(new BasicSearchFilterParameter(RodaConstants.REPRESENTATION_INFORMATION_SEARCH, "*")); - } else if (actualClass.equals(IndexedRisk.class.getName()) || actualClass.equals(Risk.class.getName())) { - return new Filter(new BasicSearchFilterParameter(RodaConstants.RISK_SEARCH, "*")); - } else if (actualClass.equals(RiskIncidence.class.getName())) { - return new Filter(new BasicSearchFilterParameter(RodaConstants.RISK_INCIDENCE_SEARCH, "*")); - } else if (actualClass.equals(Job.class.getName())) { - return new Filter(new BasicSearchFilterParameter(RodaConstants.JOB_SEARCH, "*")); - } else if (actualClass.equals(Report.class.getName()) || actualClass.equals(IndexedReport.class.getName())) { - return new Filter(new BasicSearchFilterParameter(RodaConstants.JOB_REPORT_SEARCH, "*")); - } else if (actualClass.equals(TransferredResource.class.getName())) { - return new Filter(new BasicSearchFilterParameter(RodaConstants.TRANSFERRED_RESOURCE_SEARCH, "*")); - } else if (actualClass.equals(Notification.class.getName())) { - return new Filter(new BasicSearchFilterParameter(RodaConstants.NOTIFICATION_SEARCH, "*")); - } else if (actualClass.equals(LogEntry.class.getName())) { - return new Filter(new BasicSearchFilterParameter(RodaConstants.LOG_SEARCH, "*")); - } else if (actualClass.equals(RODAMember.class.getName())) { - return new Filter(new BasicSearchFilterParameter(RodaConstants.MEMBERS_SEARCH, "*")); - } else if (actualClass.equals(DIP.class.getName()) || actualClass.equals(IndexedDIP.class.getName())) { - return new Filter(new BasicSearchFilterParameter(RodaConstants.DIP_SEARCH, "*")); - } else if (actualClass.equals(DIPFile.class.getName())) { - return new Filter(new BasicSearchFilterParameter(RodaConstants.DIPFILE_SEARCH, "*")); - } else if (actualClass.equals(Format.class.getName())) { - return new Filter(new BasicSearchFilterParameter(RodaConstants.FORMAT_SEARCH, "*")); - } else { - return Filter.NULL; - } + public static Filter allFilter() { + return new Filter(new BasicSearchFilterParameter(searchField(), RodaConstants.INDEX_WILDCARD)); + } + + public static String searchField() { + return RodaConstants.INDEX_SEARCH; } - public static String allFilter(String actualClass) { - if (actualClass.equals(AIP.class.getName()) || actualClass.equals(IndexedAIP.class.getName())) { - return RodaConstants.AIP_SEARCH; - } else if (actualClass.equals(Representation.class.getName()) - || actualClass.equals(IndexedRepresentation.class.getName())) { - return RodaConstants.REPRESENTATION_SEARCH; - } else if (actualClass.equals(File.class.getName()) || actualClass.equals(IndexedFile.class.getName())) { - return RodaConstants.FILE_SEARCH; - } else if (actualClass.equals(RepresentationInformation.class.getName())) { - return RodaConstants.REPRESENTATION_INFORMATION_SEARCH; - } else if (actualClass.equals(IndexedRisk.class.getName()) || actualClass.equals(Risk.class.getName())) { - return RodaConstants.RISK_SEARCH; - } else if (actualClass.equals(RiskIncidence.class.getName())) { - return RodaConstants.RISK_INCIDENCE_SEARCH; - } else if (actualClass.equals(Job.class.getName())) { - return RodaConstants.JOB_SEARCH; - } else if (actualClass.equals(Report.class.getName()) || actualClass.equals(IndexedReport.class.getName())) { - return RodaConstants.JOB_REPORT_SEARCH; - } else if (actualClass.equals(TransferredResource.class.getName())) { - return RodaConstants.TRANSFERRED_RESOURCE_SEARCH; - } else if (actualClass.equals(Notification.class.getName())) { - return RodaConstants.NOTIFICATION_SEARCH; - } else if (actualClass.equals(LogEntry.class.getName())) { - return RodaConstants.LOG_SEARCH; - } else if (actualClass.equals(RODAMember.class.getName())) { - return RodaConstants.MEMBERS_SEARCH; - } else if (actualClass.equals(DIP.class.getName()) || actualClass.equals(IndexedDIP.class.getName())) { - return RodaConstants.DIP_SEARCH; - } else if (actualClass.equals(DIPFile.class.getName())) { - return RodaConstants.DIPFILE_SEARCH; - } else if (actualClass.equals(Format.class.getName())) { - return RodaConstants.FORMAT_SEARCH; - } else { - GWT.log("The search is failing due to missing search field key on query"); - return ""; + public static Filter createIncrementalFilterFromTokens(final List historyTokens, Filter baseFilter) { + // historyTokens like TYPE/key/value/key/value or key/value/key/value + + Filter resultingFilter = baseFilter == null ? new Filter() : new Filter(baseFilter); + + List parts = new ArrayList<>(historyTokens); + if (!parts.isEmpty()) { + String operator = RodaConstants.OPERATOR_AND; + if (parts.size() % 2 == 1) { + operator = parts.remove(0); + } + + if (parts.size() % 2 == 0 && operator.equals(RodaConstants.OPERATOR_AND) + || operator.equals(RodaConstants.OPERATOR_OR)) { + List filterParameterList = new ArrayList<>(); + + for (int i = 0; i < parts.size() - 1; i += 2) { + String key = parts.get(i); + String value = parts.get(i + 1); + filterParameterList.add(new SimpleFilterParameter(key, value)); + } + + if (!filterParameterList.isEmpty()) { + if (RodaConstants.OPERATOR_AND.equals(operator)) { + resultingFilter.add(filterParameterList); + } else { + resultingFilter.add(new OrFiltersParameters(filterParameterList)); + } + } + } } + + return baseFilter; + } + + public static Filter createFilterFromHistoryTokens(final List historyTokens) { + return createIncrementalFilterFromTokens(historyTokens, null); + } + + public static boolean shouldBeIncremental(final Filter filter) { + return filter.getParameters().isEmpty() || SearchFilters.allFilter().equals(filter); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchOptionsBundle.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchOptionsBundle.java new file mode 100644 index 0000000000..fc5d576c3b --- /dev/null +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchOptionsBundle.java @@ -0,0 +1,70 @@ +package org.roda.wui.client.common.search; + +import org.roda.core.data.v2.index.IsIndexed; +import org.roda.core.data.v2.index.filter.Filter; +import org.roda.wui.client.common.lists.utils.ListBuilder; + +/** + * Package-private class to store search options + * + * @author Bruno Ferreira + */ +class SearchOptionsBundle { + private final ListBuilder tableCell; + private final String label; + private final Filter defaultFilter; + private final String allFilter; + private final boolean incremental; + private final boolean showAdvancedSearch; + private final boolean hidePrefilters; + + SearchOptionsBundle(String label, ListBuilder tableCell, Filter defaultFilter, String allFilter, + boolean incremental, boolean showAdvancedSearch, boolean hidePrefilters) { + this.tableCell = tableCell; + this.label = label; + this.defaultFilter = defaultFilter; + this.allFilter = allFilter; + this.incremental = incremental; + this.showAdvancedSearch = showAdvancedSearch; + this.hidePrefilters = hidePrefilters; + } + + SearchOptionsBundle(ListBuilder tableCell, Filter defaultFilter, String allFilter, boolean incremental, + boolean showAdvancedSearch, boolean hidePrefilters) { + this.tableCell = tableCell; + this.defaultFilter = defaultFilter; + this.allFilter = allFilter; + this.incremental = incremental; + this.showAdvancedSearch = showAdvancedSearch; + this.hidePrefilters = hidePrefilters; + this.label = null; + } + + public ListBuilder getTableCell() { + return tableCell; + } + + public String getLabel() { + return label; + } + + public Filter getDefaultFilter() { + return defaultFilter; + } + + public String getAllFilter() { + return allFilter; + } + + public boolean getIncremental() { + return incremental; + } + + public boolean getShowAdvancedSearch() { + return showAdvancedSearch; + } + + public boolean getHidePrefilters() { + return hidePrefilters; + } +} diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchPanel.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchPanel.java index 8cfe3d582c..e69d05b61b 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchPanel.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchPanel.java @@ -8,6 +8,7 @@ package org.roda.wui.client.common.search; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -19,17 +20,19 @@ import org.roda.core.data.v2.index.filter.FilterParameter; import org.roda.core.data.v2.index.filter.OrFiltersParameters; import org.roda.core.data.v2.index.filter.SimpleFilterParameter; +import org.roda.wui.client.common.NoAsyncCallback; +import org.roda.wui.client.common.actions.Actionable; +import org.roda.wui.client.common.actions.model.ActionableObject; +import org.roda.wui.client.common.actions.widgets.ActionableWidgetBuilder; import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.popup.CalloutPopup; import org.roda.wui.client.common.utils.JavascriptUtils; +import org.roda.wui.common.client.tools.ConfigurationManager; import org.roda.wui.common.client.widgets.wcag.AccessibleFocusPanel; -import org.roda.wui.common.client.widgets.wcag.WCAGUtilities; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.KeyCodes; -import com.google.gwt.event.dom.client.KeyDownEvent; -import com.google.gwt.event.dom.client.KeyDownHandler; import com.google.gwt.event.logical.shared.HasValueChangeHandlers; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; @@ -39,18 +42,21 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.InlineHTML; +import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.Widget; import config.i18n.client.ClientMessages; -public class SearchPanel extends Composite implements HasValueChangeHandlers { +public class SearchPanel extends Composite implements HasValueChangeHandlers { private static final String FILTER_ICON = ""; + private static final String WITH_FILTERS_CSS = "with-prefilters"; private static final ClientMessages messages = GWT.create(ClientMessages.class); private static final Binder binder = GWT.create(Binder.class); @@ -61,11 +67,8 @@ interface Binder extends UiBinder { @UiField FlowPanel searchPanel; - @UiField - SelectedPanel searchSelectedPanel; - - @UiField - Dropdown searchInputListBox; + @UiField(provided = true) + SelectedPanel searchSelectedPanel; @UiField TextBox searchInputBox; @@ -94,94 +97,220 @@ interface Binder extends UiBinder { @UiField FlowPanel searchPreFilters; + @UiField + AccessibleFocusPanel actionsButton; + + @UiField + SimplePanel searchPanelSelectionDropdownWrapper; + + @UiField + FlowPanel searchPanelRight; + private Filter defaultFilter; private String allFilter; private boolean defaultFilterIncremental = false; - private FlowPanel fieldsPanel; - private AsyncTableCell list; + private AdvancedSearchFieldsPanel advancedSearchFieldsPanel; + private AsyncTableCell list; + + private boolean showPreFilters; - private boolean hidePreFilters; + private final ActionableWidgetBuilder actionableBuilder; + private final Actionable actionable; + private final CalloutPopup actionsPopup = new CalloutPopup(); - public SearchPanel(Filter defaultFilter, String allFilter, boolean incremental, String placeholder, - boolean showSearchInputListBox, boolean showSearchAdvancedDisclosureButton, boolean hidePreFilters) { + private SearchPanel() { + // private constructor to forbid its usage + actionableBuilder = null; + actionable = null; + } + + SearchPanel(AsyncTableCell list, Filter defaultFilter, String allFilter, boolean incremental, String placeholder, + boolean showSearchInputListBox, Actionable actionable) { this.defaultFilter = defaultFilter; this.allFilter = allFilter; - this.hidePreFilters = hidePreFilters; this.defaultFilterIncremental = incremental; + this.list = list; + this.actionable = actionable; - initWidget(binder.createAndBindUi(this)); + this.showPreFilters = ConfigurationManager.getBoolean(false, RodaConstants.UI_LISTS_PROPERTY, list.getListId(), + RodaConstants.UI_LISTS_SEARCH_PREFILTERS_VISIBLE_PROPERTY); - if (placeholder != null) { - searchInputBox.getElement().setPropertyString("placeholder", placeholder); - } + boolean advancedSearchEnabled = ConfigurationManager.getBoolean(false, RodaConstants.UI_LISTS_PROPERTY, + list.getListId(), RodaConstants.UI_LISTS_SEARCH_ADVANCED_ENABLED_PROPERTY); - searchSelectedPanel.setVisible(false); - searchInputListBox.setVisible(showSearchInputListBox); - searchAdvancedDisclosureButton.setVisible(showSearchAdvancedDisclosureButton); - searchAdvancedPanel.setVisible(false); + searchSelectedPanel = new SelectedPanel<>(list); - searchInputBox.addKeyDownHandler(new KeyDownHandler() { - @Override - public void onKeyDown(KeyDownEvent event) { - if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { - doSearch(); - onChange(RodaConstants.SEARCH_BUTTON_EVENT_MARK); - } - } - }); + initWidget(binder.createAndBindUi(this)); - searchInputButton.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { + // setup search input textfield and search button + searchInputButton.addClickHandler(event -> doSearch()); + searchInputBox.getElement().setPropertyString("placeholder", placeholder == null ? "" : placeholder); + searchInputBox.addKeyDownHandler(event -> { + if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { doSearch(); - onChange(RodaConstants.SEARCH_BUTTON_EVENT_MARK); } }); - searchAdvancedDisclosureButton.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - showSearchAdvancedPanel(); - } - }); + // setup actions + final CalloutPopup popup = new CalloutPopup(); + popup.addStyleName("actionable-popup"); + popup.addStyleName("ActionableStyleMenu"); + actionsPopup.addStyleName("ActionableStyleMenu"); + + actionableBuilder = actionable != null ? new ActionableWidgetBuilder<>(actionable) : null; + actionsButton.setVisible(actionableBuilder != null && list.isSelectable()); + actionsButton.addClickHandler(event -> { + if (actionableBuilder != null) { + if (actionsPopup.isShowing()) { + actionsPopup.hide(); + } else { + actionableBuilder.withCallback(new NoAsyncCallback() { + @Override + public void onSuccess(Actionable.ActionImpact impact) { + if (Actionable.ActionImpact.DESTROYED.equals(impact)) { + Timer timer = new Timer() { + @Override + public void run() { + list.refresh(); + } + }; + timer.schedule(RodaConstants.ACTION_TIMEOUT); + } else if (!Actionable.ActionImpact.NONE.equals(impact)) { + list.refresh(); + } + actionsPopup.hide(); + } + }); - searchInputListBox.addValueChangeHandler(new ValueChangeHandler() { - @Override - public void onValueChange(ValueChangeEvent event) { - onChange(searchInputListBox.getSelectedValue()); + actionsPopup.setWidget(actionableBuilder.buildListWithObjects(list.getActionableObject())); + actionsPopup.showRelativeTo(actionsButton, CalloutPopup.CalloutPosition.TOP_RIGHT); + } } }); - searchSelectedPanel.addValueChangeHandler(new ValueChangeHandler() { - @Override - public void onValueChange(ValueChangeEvent event) { - searchSelectedPanel.setVisible(event.getValue()); - searchInputListBox.setVisible(!event.getValue() && showSearchInputListBox); - } + // setup advanced search panel and button + searchAdvancedDisclosureButton.setVisible(advancedSearchEnabled); + searchAdvancedPanel.setVisible(false); + if (advancedSearchEnabled) { + searchAdvancedDisclosureButton.addClickHandler(event -> toggleAdvancedSearchPanel()); + + advancedSearchFieldsPanel = new AdvancedSearchFieldsPanel(list.getClassToReturn().getSimpleName()); + advancedSearchFieldsPanel.addValueChangeHandler(event -> searchAdvancedGo.setEnabled(event.getValue() != 0)); + searchAdvancedPanel.insert(advancedSearchFieldsPanel, 0); + } + + // bind searchSelectedPanel to show the number of selected items from the list, + // and also to show/hide itself and the searchPanelSelectionDropdown + boolean searchSelectedPanelVisibleByDefault = ConfigurationManager.getBoolean(false, + RodaConstants.UI_LISTS_PROPERTY, list.getListId(), + RodaConstants.UI_LISTS_SEARCH_SELECTEDINFO_ALWAYSVISIBLE_PROPERTY); + + searchSelectedPanel.addValueChangeHandler(event -> { + // if something is selected, show the selectedPanel and hide the dropdown. + // otherwise if there is a dropdown then show it, if there is no dropdown then + // use the configuration value for the selectedPanel being shown by default + boolean selectedPanelVisible = event.getValue() + || (!showSearchInputListBox && searchSelectedPanelVisibleByDefault); + + searchSelectedPanel.setVisible(selectedPanelVisible); + searchPanelSelectionDropdownWrapper.setVisible(!selectedPanelVisible); }); - if (showSearchAdvancedDisclosureButton) { + boolean selectedPanelVisible = !showSearchInputListBox && searchSelectedPanelVisibleByDefault; + searchPanelSelectionDropdownWrapper.setVisible(!selectedPanelVisible); + searchSelectedPanel.setVisible(selectedPanelVisible); + + if (advancedSearchEnabled) { searchPanel.addStyleName("searchPanelAdvanced"); } - if (!hidePreFilters) { - drawSearchPreFilters(); + drawSearchPreFilters(); + + updateRightButtonsCss(); + + // FIXME: WCAG stuff on dropdown (maybe do it on searchwrapper?) (also + // WCAGUtilies is not that great...) + // WCAGUtilities.getInstance().makeAccessible(searchInputListBox.getElement()); + } + + /** + * Sets the default filter and incremental boolean for the search, shows the + * preFilters in the UI if they should be shown according to the constructor + * parameters, and triggers a new search in the list with the new default filter + * and the existing search fields + * + * @param defaultFilter + * the new default filters + * @param incremental + * if subsequent searches should add to or replace the existing filter + */ + public void setDefaultFilter(Filter defaultFilter, boolean incremental) { + this.defaultFilter = defaultFilter; + this.defaultFilterIncremental = incremental; + doSearch(false); + } + + public void clearSearchInputBox() { + searchInputBox.setText(""); + } + + @UiHandler("searchAdvancedFieldOptionsAdd") + void handleSearchAdvancedAdd(ClickEvent e) { + advancedSearchFieldsPanel.addSearchFieldPanel(); + } + + @UiHandler("searchAdvancedClean") + void handleSearchAdvancedClean(ClickEvent e) { + JavascriptUtils.cleanAdvancedSearch(); + } + + @UiHandler("searchAdvancedGo") + void handleSearchAdvancedGo(ClickEvent e) { + doSearch(); + } + + @Override + public HandlerRegistration addValueChangeHandler(ValueChangeHandler handler) { + return addHandler(handler, ValueChangeEvent.getType()); + } + + private void toggleAdvancedSearchPanel() { + searchAdvancedPanel.setVisible(!searchAdvancedPanel.isVisible()); + if (searchAdvancedPanel.isVisible()) { + searchAdvancedDisclosureButton.addStyleName("open"); + } else { + searchAdvancedDisclosureButton.removeStyleName("open"); } + } - WCAGUtilities.getInstance().makeAccessible(searchInputListBox.getElement()); + private void doSearch() { + doSearch(true); + } + + private void doSearch(boolean makeListVisible) { + list.setFilter(buildSearchFilter()); + onChange(searchInputBox.getValue()); + if (makeListVisible) { + list.setVisible(true); + } + } + + private void onChange(String value) { + ValueChangeEvent.fire(this, value); } private void drawSearchPreFilters() { - searchPreFilters.clear(); - searchPreFilters.setVisible(defaultFilter != null && !defaultFilter.getParameters().isEmpty()); + if (showPreFilters && defaultFilter != null && !defaultFilter.getParameters().isEmpty()) { + searchPreFilters.clear(); - if (defaultFilter != null) { + boolean effectivelyVisible = false; List parameters = defaultFilter.getParameters(); for (int i = 0; i < parameters.size(); i++) { SafeHtml filterHTML = SearchPreFilterUtils.getFilterParameterHTML(parameters.get(i)); if (filterHTML != null) { + effectivelyVisible = true; if (i == 0) { HTML header = new HTML(SafeHtmlUtils.fromSafeConstant(FILTER_ICON)); header.addStyleName("inline gray"); @@ -197,17 +326,50 @@ private void drawSearchPreFilters() { searchPreFilters.add(html); } } + + if (effectivelyVisible) { + searchPreFilters.setVisible(true); + addStyleName(WITH_FILTERS_CSS); + } else { + removeStyleName(WITH_FILTERS_CSS); + searchPreFilters.setVisible(false); + } + } else { + removeStyleName(WITH_FILTERS_CSS); + searchPreFilters.setVisible(false); } } - public void doSearch() { - Filter filter = buildSearchFilter(searchInputBox.getText(), defaultFilter, allFilter, fieldsPanel, - defaultFilterIncremental); - list.setFilter(filter); + void attachSearchPanelSelectionDropdown(Dropdown dropdown) { + searchPanelSelectionDropdownWrapper.setWidget(dropdown); } - private Filter buildSearchFilter(String basicQuery, Filter defaultFilter, String allFilter, FlowPanel fieldsPanel, - boolean defaultFilterIncremental) { + void addActionableButton(String actionName) { + if (actionable != null) { + + Actionable.Action action = actionable.actionForName(actionName); + if (action != null) { + Widget widget = actionableBuilder.buildListWithObjects(new ActionableObject(list.getClassToReturn()), + Collections.singletonList(action)); + + // CSS de single action + + // inserir antes do actionsbutton + searchPanelRight.insert(widget, searchPanelRight.getWidgetIndex(actionsButton)); + updateRightButtonsCss(); + } else { + GWT.log("Could not resolve. Action '" + actionName + "' for class '" + list.getClassToReturn().getSimpleName() + + "' was not found."); + } + } + } + + /** + * @return the effective search filter based on all search options and inputs + */ + private Filter buildSearchFilter() { + String basicQuery = searchInputBox.getText(); + List parameters = new ArrayList<>(); Map advancedSearchFilters = new HashMap<>(); @@ -215,10 +377,11 @@ private Filter buildSearchFilter(String basicQuery, Filter defaultFilter, String parameters.add(new BasicSearchFilterParameter(allFilter, basicQuery)); } - if (fieldsPanel != null && fieldsPanel.getParent() != null && fieldsPanel.getParent().isVisible()) { - for (int i = 0; i < fieldsPanel.getWidgetCount(); i++) { - if (fieldsPanel.getWidget(i) instanceof SearchFieldPanel) { - SearchFieldPanel searchAdvancedFieldPanel = (SearchFieldPanel) fieldsPanel.getWidget(i); + // transform advanced search fields into filter parameters + if (this.advancedSearchFieldsPanel != null && this.advancedSearchFieldsPanel.isVisible()) { + for (int i = 0; i < advancedSearchFieldsPanel.getWidgetCount(); i++) { + if (advancedSearchFieldsPanel.getWidget(i) instanceof SearchFieldPanel) { + SearchFieldPanel searchAdvancedFieldPanel = (SearchFieldPanel) advancedSearchFieldsPanel.getWidget(i); String searchFieldId = searchAdvancedFieldPanel.getSearchField().getId(); FilterParameter oldFilterParameter = advancedSearchFilters.get(searchFieldId); FilterParameter filterParameter = searchAdvancedFieldPanel.getFilter(); @@ -251,142 +414,34 @@ private Filter buildSearchFilter(String basicQuery, Filter defaultFilter, String } } - for (FilterParameter value : advancedSearchFilters.values()) { - parameters.add(value); - } + parameters.addAll(advancedSearchFilters.values()); } Filter filter; if (defaultFilterIncremental) { filter = defaultFilter != null ? new Filter(defaultFilter) : new Filter(); filter.add(parameters); - searchPreFilters.setVisible(!filter.getParameters().isEmpty()); } else if (parameters.isEmpty()) { filter = defaultFilter; - searchPreFilters.setVisible(filter != null && !filter.getParameters().isEmpty()); } else { filter = new Filter(parameters); - searchPreFilters.setVisible(false); } + drawSearchPreFilters(); return filter; } - public String getDropdownSelectedValue() { - return searchInputListBox.getSelectedValue(); - } - - public boolean setDropdownSelectedValue(String value) { - return setDropdownSelectedValue(value, true); - } - - public boolean setDropdownSelectedValue(String value, boolean fire) { - return searchInputListBox.setSelectedValue(value, fire); - } - - public void setDropdownLabel(String label) { - searchInputListBox.setLabel(label); - } - - public void addDropdownItem(String label, String value) { - searchInputListBox.addItem(label, value); - } - - private void showSearchAdvancedPanel() { - searchAdvancedPanel.setVisible(!searchAdvancedPanel.isVisible()); - if (searchAdvancedPanel.isVisible()) { - searchAdvancedDisclosureButton.addStyleName("open"); - } else { - searchAdvancedDisclosureButton.removeStyleName("open"); - } - } + private void updateRightButtonsCss() { + // supports 0-9 buttons + int count = 0; + count += searchAdvancedDisclosureButton.isVisible() ? 1 : 0; + count += searchInputButton.isVisible() ? 1 : 0; + count += actionsButton.isVisible() ? 1 : 0; - public void addDropdownPopupStyleName(String styleName) { - searchInputListBox.addPopupStyleName(styleName); - } - - public void setFieldsPanel(FlowPanel fieldsPanel) { - this.fieldsPanel = fieldsPanel; - searchAdvancedPanel.clear(); - searchAdvancedPanel.add(fieldsPanel); - searchAdvancedPanel.add(searchAdvancedPanelButtons); - } - - @SuppressWarnings("unchecked") - public void setList(AsyncTableCell list) { - this.list = (AsyncTableCell) list; - searchSelectedPanel.bindList(this.list); - } - - public void setDefaultFilter(Filter defaultFilter, boolean incremental) { - this.defaultFilter = defaultFilter; - if (!hidePreFilters) { - drawSearchPreFilters(); + int maximum = searchPanelRight.getWidgetCount(); + for (int i = 1; i <= maximum; i++) { + searchPanel.removeStyleName("searchPanelButtons-" + i); } - this.defaultFilterIncremental = incremental; - } - - public void setAllFilter(String allFilter) { - this.allFilter = allFilter; - } - - public void setVariables(Filter defaultFilter, String allFilter, boolean incremental, AsyncTableCell list, - FlowPanel fieldsPanel) { - setDefaultFilter(defaultFilter, incremental); - setAllFilter(allFilter); - setList(list); - setFieldsPanel(fieldsPanel); - } - - public void setDefaultFilterIncremental(boolean incremental) { - this.defaultFilterIncremental = incremental; - } - - public boolean isDefaultFilterIncremental() { - return defaultFilterIncremental; - } - - public void clearSearchInputBox() { - searchInputBox.setText(""); - } - - public void setSearchAdvancedFieldOptionsAddVisible(boolean visible) { - searchAdvancedFieldOptionsAdd.setVisible(visible); - } - - public void setSearchAdvancedGoEnabled(boolean enabled) { - searchAdvancedGo.setEnabled(enabled); - } - - public void addSearchAdvancedFieldAddHandler(ClickHandler handler) { - searchAdvancedFieldOptionsAdd.addClickHandler(handler); - } - - public void hidePreFilters() { - searchPreFilters.clear(); - searchPreFilters.setVisible(false); - } - - @UiHandler("searchAdvancedClean") - void handleSearchAdvancedClean(ClickEvent e) { - JavascriptUtils.cleanAdvancedSearch(); - } - - @UiHandler("searchAdvancedGo") - void handleSearchAdvancedGo(ClickEvent e) { - doSearch(); - onChange(RodaConstants.SEARCH_BUTTON_EVENT_MARK); - } - - @Override - public HandlerRegistration addValueChangeHandler(ValueChangeHandler handler) { - return addHandler(handler, ValueChangeEvent.getType()); - } - - protected void onChange(String value) { - ValueChangeEvent.fire(this, value); - } - public void addKeyDownEvent(KeyDownHandler handler) { - searchInputBox.addKeyDownHandler(handler); + searchPanel.addStyleName("searchPanelButtons-" + count); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchPanel.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchPanel.ui.xml index fd87b81ce3..3ec3dcbae6 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchPanel.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchPanel.ui.xml @@ -7,16 +7,16 @@ - + - + - + @@ -29,14 +29,20 @@ - + + + + + + + + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchWrapper.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchWrapper.java new file mode 100644 index 0000000000..fb81a98901 --- /dev/null +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SearchWrapper.java @@ -0,0 +1,313 @@ +package org.roda.wui.client.common.search; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.function.Consumer; + +import org.roda.core.data.common.RodaConstants; +import org.roda.core.data.v2.index.IndexResult; +import org.roda.core.data.v2.index.IsIndexed; +import org.roda.core.data.v2.index.filter.Filter; +import org.roda.core.data.v2.index.select.SelectedItems; +import org.roda.wui.client.common.actions.Actionable; +import org.roda.wui.client.common.lists.pagination.ListSelectionState; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.common.client.tools.ConfigurationManager; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.logical.shared.ValueChangeHandler; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.ScrollPanel; + +import config.i18n.client.ClientMessages; + +/** + * @author Bruno Ferreira + */ +public class SearchWrapper extends Composite { + private static final ClientMessages messages = GWT.create(ClientMessages.class); + + private final boolean hasMultipleSearchPanels; + private final String preselectedDropdownValue; + + private final FlowPanel rootPanel; + + // this being not null means that lists should be created inside a ScrollPanel + // and that the ScrollPanel should be using the specified CSS classes + private String scrollPanelCssClasses = null; + + private Dropdown searchPanelSelectionDropdown; + + private final Components components; + + public SearchWrapper(boolean hasMultipleSearchPanels, String preselectedDropdownValue) { + this.searchPanelSelectionDropdown = null; + this.hasMultipleSearchPanels = hasMultipleSearchPanels; + this.preselectedDropdownValue = preselectedDropdownValue; + this.components = new Components(); + + rootPanel = new FlowPanel(); + initWidget(rootPanel); + } + + public SearchWrapper withListsInsideScrollPanel(String scrollPanelCssClasses) { + this.scrollPanelCssClasses = scrollPanelCssClasses != null ? scrollPanelCssClasses : ""; + return this; + } + + public SearchWrapper(boolean hasMultipleSearchPanels) { + this(hasMultipleSearchPanels, null); + } + + public SearchWrapper createListAndSearchPanel(ListBuilder listBuilder) { + return createListAndSearchPanel(listBuilder, null, messages.searchPlaceHolder()); + } + + public SearchWrapper createListAndSearchPanel(ListBuilder listBuilder, + Actionable actionable) { + return createListAndSearchPanel(listBuilder, actionable, messages.searchPlaceHolder()); + } + + public SearchWrapper createListAndSearchPanel(ListBuilder listBuilder, + String searchPlaceholder) { + return createListAndSearchPanel(listBuilder, null, searchPlaceholder); + } + + public SearchWrapper createListAndSearchPanel(ListBuilder listBuilder, + Actionable actionable, String searchPlaceholder) { + + // FIXME use non-placeholder values for searchSelectedPanel icon and default + // value + + listBuilder.getOptions().withActionable(actionable); + AsyncTableCell list = listBuilder.build(); + + SearchPanel searchPanel; + + Filter filter = list.getFilter(); + String allFilter = SearchFilters.searchField(); + boolean incremental = SearchFilters.shouldBeIncremental(filter); + + // get configuration + + boolean searchEnabled = ConfigurationManager.getBoolean(true, RodaConstants.UI_LISTS_PROPERTY, list.getListId(), + RodaConstants.UI_LISTS_SEARCH_ENABLED_PROPERTY); + + String defaultLabelText = ConfigurationManager.resolveTranslation(RodaConstants.UI_LISTS_PROPERTY, list.getListId(), + RodaConstants.UI_LISTS_SEARCH_SELECTEDINFO_LABEL_DEFAULT_I18N_PROPERTY); + if (defaultLabelText == null) { + defaultLabelText = messages.someOfAObject(list.getClassToReturn().getName()); + } + + String dropdownValue = list.getClassToReturn().getSimpleName(); + + // create + + searchPanel = new SearchPanel<>(list, filter, allFilter, incremental, searchPlaceholder, hasMultipleSearchPanels, + actionable); + if (hasMultipleSearchPanels) { + initSearchPanelSelectionDropdown(); + searchPanelSelectionDropdown.addItem(defaultLabelText, dropdownValue, + SelectedPanel.getIconForList(list.getListId(), list.getClassToReturn().getSimpleName())); + } + searchPanel.setVisible(searchEnabled); + + components.put(list.getClassToReturn(), searchPanel, list); + + // add search panel if none has been added yet, note that if there is a + // preselectedDropdownValue then only the corresponding search panel should be + // used as the default search panel + if (rootPanel.getWidgetCount() == 0) { + if (preselectedDropdownValue != null) { + if (preselectedDropdownValue.equals(dropdownValue)) { + attachComponents(dropdownValue); + } + } else { + attachComponents(dropdownValue); + } + } + + return this; + } + + private void addShortcutButtons(SearchPanel searchPanel) { + + } + + public SelectedItems getSelectedItemsInCurrentList() { + return components.getList(searchPanelSelectionDropdown.getSelectedValue()).getSelected(); + } + + public SelectedItems getSelectedItems(Class objectClass) { + return components.getList(objectClass).getSelected(); + } + + public ListSelectionState getListSelectionState(Class objectClass) { + return components.getList(objectClass).getListSelectionState(); + } + + public boolean changeDropdownSelectedValue(String objectClassSimpleName) { + return searchPanelSelectionDropdown.setSelectedValue(objectClassSimpleName, true); + } + + public void refreshAllLists() { + components.forEachList(AsyncTableCell::refresh); + } + + public void refreshCurrentList() { + if (hasMultipleSearchPanels) { + refreshList(searchPanelSelectionDropdown.getSelectedValue()); + } else { + refreshAllLists(); + } + } + + private void refreshList(String objectClassSimpleName) { + AsyncTableCell list = components.getList(objectClassSimpleName); + list.refresh(); + } + + private void refreshList(Class objectClass) { + AsyncTableCell list = components.getList(objectClass); + list.refresh(); + } + + public void setFilter(String objectClassSimpleName, Filter filter) { + SearchPanel searchPanel = components.getSearchPanel(objectClassSimpleName); + searchPanel.clearSearchInputBox(); + searchPanel.setDefaultFilter(filter, !SearchFilters.allFilter().equals(filter)); + } + + public void setFilter(Class objectClass, Filter filter) { + SearchPanel searchPanel = components.getSearchPanel(objectClass); + searchPanel.clearSearchInputBox(); + searchPanel.setDefaultFilter(filter, !SearchFilters.allFilter().equals(filter)); + } + + public void resetToDefaultFilter(String objectClassSimpleName) { + SearchPanel searchPanel = components.getSearchPanel(objectClassSimpleName); + searchPanel.clearSearchInputBox(); + searchPanel.setDefaultFilter(SearchFilters.allFilter(), false); + } + + public void resetToDefaultFilter(Class objectClass) { + SearchPanel searchPanel = components.getSearchPanel(objectClass); + searchPanel.clearSearchInputBox(); + searchPanel.setDefaultFilter(SearchFilters.allFilter(), false); + } + + public void addSearchFieldTextValueChangeHandler(String objectClassSimpleName, + ValueChangeHandler handler) { + SearchPanel searchPanel = components.getSearchPanel(objectClassSimpleName); + searchPanel.addValueChangeHandler(handler); + } + + public void addSearchFieldTextValueChangeHandler(Class objectClass, + ValueChangeHandler handler) { + SearchPanel searchPanel = components.getSearchPanel(objectClass); + searchPanel.addValueChangeHandler(handler); + } + + public void addListDataChangeHandler(String objectClassSimpleName, + ValueChangeHandler> handler) { + AsyncTableCell list = components.getList(objectClassSimpleName); + list.addValueChangeHandler(handler); + } + + public void addListDataChangeHandler(Class objectClass, + ValueChangeHandler> handler) { + AsyncTableCell list = components.getList(objectClass); + list.addValueChangeHandler(handler); + } + + private void initSearchPanelSelectionDropdown() { + if (searchPanelSelectionDropdown == null) { + searchPanelSelectionDropdown = new Dropdown(); + searchPanelSelectionDropdown.addStyleName("searchInputListBox"); + searchPanelSelectionDropdown.addPopupStyleName("searchInputListBoxPopup"); + searchPanelSelectionDropdown.addValueChangeHandler(event -> attachComponents(event.getValue())); + } + } + + private void attachComponents(String objectClassSimpleName) { + SearchPanel searchPanel = components.getSearchPanel(objectClassSimpleName); + AsyncTableCell list = components.getList(objectClassSimpleName); + + rootPanel.clear(); + rootPanel.add(searchPanel); + if (scrollPanelCssClasses != null) { + ScrollPanel scrollPanel = new ScrollPanel(list); + scrollPanel.addStyleName(scrollPanelCssClasses); + rootPanel.add(scrollPanel); + } else { + rootPanel.add(list); + } + + if (hasMultipleSearchPanels) { + searchPanelSelectionDropdown.setSelectedValue(objectClassSimpleName, false); + searchPanel.attachSearchPanelSelectionDropdown(searchPanelSelectionDropdown); + } + } + + /** + * Auxiliary manager for inner components (groups of one searchPanel and one + * BasicAsyncTableCell, at least for now) that is used to enforce type coherence + */ + @SuppressWarnings("unchecked") + private class Components { + private final Map, SearchPanel> searchPanels = new LinkedHashMap<>(); + private final Map, AsyncTableCell> lists = new LinkedHashMap<>(); + + /** + * Add a new set of components associated with a class. + * + * @param objectClass + * the classe to associate the components with + * @param searchPanel + * the searchPanel component + * @param list + * the BasicAsyncTableCell component + * @param + * extends IsIndexed, type parameter shared by this set of components + */ + public void put(Class objectClass, SearchPanel searchPanel, AsyncTableCell list) { + searchPanels.put(objectClass, searchPanel); + lists.put(objectClass, list); + } + + SearchPanel getSearchPanel(Class objectClass) { + return (SearchPanel) searchPanels.get(objectClass); + } + + AsyncTableCell getList(Class objectClass) { + return (AsyncTableCell) lists.get(objectClass); + } + + SearchPanel getSearchPanel(String className) { + return (SearchPanel) searchPanels.get(classForName(className)); + } + + AsyncTableCell getList(String className) { + return (AsyncTableCell) lists.get(classForName(className)); + } + + void forEachList(Consumer> action) { + for (AsyncTableCell value : lists.values()) { + AsyncTableCell list = (AsyncTableCell) value; + action.accept(list); + } + } + + // auxiliary + private Class classForName(String classSimpleName) { + for (Class associatedClass : searchPanels.keySet()) { + if (associatedClass.getSimpleName().equals(classSimpleName)) { + return (Class) associatedClass; + } + } + return null; + } + } +} diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SelectedPanel.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SelectedPanel.java index dfa5c88555..16f7ac7192 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SelectedPanel.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/search/SelectedPanel.java @@ -1,18 +1,20 @@ package org.roda.wui.client.common.search; -import java.util.ArrayList; -import java.util.List; - +import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.IsIndexed; import org.roda.core.data.v2.index.select.SelectedItemsFilter; import org.roda.core.data.v2.index.select.SelectedItemsList; import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.common.client.tools.ConfigurationManager; import com.google.gwt.core.shared.GWT; import com.google.gwt.event.logical.shared.HasValueChangeHandlers; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.safehtml.shared.SafeHtmlUtils; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.InlineHTML; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.SimplePanel; @@ -21,52 +23,89 @@ /** * @author Bruno Ferreira */ -public class SelectedPanel extends SimplePanel implements HasValueChangeHandlers { +public class SelectedPanel extends SimplePanel implements HasValueChangeHandlers { private static final ClientMessages messages = GWT.create(ClientMessages.class); - private AsyncTableCell boundList = null; - private AsyncTableCell.CheckboxSelectionListener checkboxSelectionListener = null; - - private List valueChangedHandlers = new ArrayList<>(); + public static String getIconForList(String listId, String classSimpleName) { + // get icon for list + String searchSelectedPanelIcon = ConfigurationManager.getString(RodaConstants.UI_LISTS_PROPERTY, listId, + RodaConstants.UI_LISTS_SEARCH_SELECTEDINFO_ICON_PROPERTY); - private Label selectedLabel; + if (searchSelectedPanelIcon == null) { + // fallback: get icon for class + searchSelectedPanelIcon = ConfigurationManager.getString(RodaConstants.UI_ICONS_CLASS, classSimpleName); - public SelectedPanel() { - selectedLabel = new Label(); - add(selectedLabel); + if (searchSelectedPanelIcon == null) { + // second fallback: use a default icon + searchSelectedPanelIcon = "question-circle"; + } + } - addStyleName("selected-count-panel"); - selectedLabel.addStyleName("selected-count-label"); - selectedLabel.setText("10 selected"); + return searchSelectedPanelIcon; } - public void bindList(AsyncTableCell list) { - if (boundList != null) { - boundList.removeCheckboxSelectionListener(checkboxSelectionListener); + SelectedPanel(AsyncTableCell list) { + + // get default text to be shown when nothing is selected + String defaultLabelText = ConfigurationManager.resolveTranslation(RodaConstants.UI_LISTS_PROPERTY, list.getListId(), + RodaConstants.UI_LISTS_SEARCH_SELECTEDINFO_LABEL_DEFAULT_I18N_PROPERTY); + if (defaultLabelText == null) { + defaultLabelText = messages.someOfAObject(list.getClassToReturn().getName()); + } + + // get "items" part for "1 item selected" + String selectedSingleItemTextTmp = ConfigurationManager.resolveTranslation(RodaConstants.UI_LISTS_PROPERTY, + list.getListId(), RodaConstants.UI_LISTS_SEARCH_SELECTEDINFO_LABEL_SELECTED_I18N_SINGLE_PROPERTY); + if (selectedSingleItemTextTmp == null) { + selectedSingleItemTextTmp = messages.oneOfAObject(list.getClassToReturn().getName()); } - boundList = list; + String selectedSingleItemText = selectedSingleItemTextTmp; - checkboxSelectionListener = selected -> { + // get "items" part for "N items selected" + String selectedMultipleItemTextTmp = ConfigurationManager.resolveTranslation(RodaConstants.UI_LISTS_PROPERTY, + list.getListId(), RodaConstants.UI_LISTS_SEARCH_SELECTEDINFO_LABEL_SELECTED_I18N_MULTIPLE_PROPERTY); + if (selectedMultipleItemTextTmp == null) { + selectedMultipleItemTextTmp = messages.someOfAObject(list.getClassToReturn().getName()); + } + final String selectedMultipleItemText = selectedMultipleItemTextTmp; + + // build widgets + FlowPanel innerPanel = new FlowPanel(); + addStyleName("selected-count-panel"); + add(innerPanel); + + InlineHTML iconPanel = new InlineHTML(); + iconPanel.setHTML(SafeHtmlUtils.fromSafeConstant( + "")); + innerPanel.add(iconPanel); + + Label selectedLabel = new Label(defaultLabelText); + selectedLabel.addStyleName("inline selected-count-panel-default"); + innerPanel.add(selectedLabel); + + list.addCheckboxSelectionListener(selected -> { int count = 0; if (selected instanceof SelectedItemsList) { count = ((SelectedItemsList) selected).getIds().size(); } else if (selected instanceof SelectedItemsFilter) { - long longCount = boundList.getResult().getTotalCount(); + long longCount = list.getResult().getTotalCount(); count = longCount > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) longCount; } - // messages handles count of 0, 1 and N in different ways, but 0 and 1 are only - // supported for integers - selectedLabel.setText(messages.selected(count)); + if (count == 0) { + selectedLabel.setText(selectedMultipleItemText); + selectedLabel.addStyleName("selected-count-panel-default"); + } else { + selectedLabel.removeStyleName("selected-count-panel-default"); + selectedLabel.setText(messages.selected(count, count == 1 ? selectedSingleItemText : selectedMultipleItemText)); + } ValueChangeEvent.fire(SelectedPanel.this, count > 0); - }; - boundList.addCheckboxSelectionListener(checkboxSelectionListener); + }); } @Override public HandlerRegistration addValueChangeHandler(ValueChangeHandler handler) { return addHandler(handler, ValueChangeEvent.getType()); } - } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/utils/HtmlSnippetUtils.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/utils/HtmlSnippetUtils.java index 1eb8972bde..274d641be4 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/utils/HtmlSnippetUtils.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/utils/HtmlSnippetUtils.java @@ -27,8 +27,8 @@ import org.roda.core.data.v2.risks.Risk.SEVERITY_LEVEL; import org.roda.core.data.v2.risks.RiskIncidence; import org.roda.core.data.v2.risks.RiskIncidence.INCIDENCE_STATUS; -import org.roda.wui.client.browse.BrowseAIP; import org.roda.wui.client.browse.BrowseRepresentation; +import org.roda.wui.client.browse.BrowseTop; import org.roda.wui.client.browse.MetadataValue; import org.roda.wui.client.browse.RepresentationInformationHelper; import org.roda.wui.client.planning.RepresentationInformationAssociations; @@ -269,7 +269,7 @@ public static void addRiskIncidenceObjectLinks(RiskIncidence incidence, final La final Anchor objectLink) { if (AIP.class.getSimpleName().equals(incidence.getObjectClass())) { objectLabel.setText(messages.showAIPExtended()); - objectLink.setHref(HistoryUtils.createHistoryHashLink(BrowseAIP.RESOLVER, incidence.getAipId())); + objectLink.setHref(HistoryUtils.createHistoryHashLink(BrowseTop.RESOLVER, incidence.getAipId())); objectLink.setText(incidence.getAipId()); } else if (Representation.class.getSimpleName().equals(incidence.getObjectClass())) { objectLabel.setText(messages.showRepresentationExtended()); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/appraisal/IngestAppraisal.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/appraisal/IngestAppraisal.java index 04f7890545..dc4a41e8d6 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/appraisal/IngestAppraisal.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/appraisal/IngestAppraisal.java @@ -24,12 +24,11 @@ import org.roda.wui.client.common.actions.AipActions; import org.roda.wui.client.common.actions.AipActions.AipAction; import org.roda.wui.client.common.lists.utils.ClientSelectedItemsUtils; -import org.roda.wui.client.common.search.MainSearch; +import org.roda.wui.client.common.search.CatalogueSearch; import org.roda.wui.client.common.utils.AsyncCallbackUtils; import org.roda.wui.client.common.utils.JavascriptUtils; import org.roda.wui.client.ingest.Ingest; import org.roda.wui.common.client.HistoryResolver; -import org.roda.wui.common.client.tools.HistoryUtils; import org.roda.wui.common.client.tools.ListUtils; import org.roda.wui.common.client.widgets.HTMLWidgetWrapper; import org.roda.wui.common.client.widgets.Toast; @@ -53,7 +52,7 @@ */ public class IngestAppraisal extends Composite { - private static final ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private static final Filter BASE_FILTER = new Filter( new SimpleFilterParameter(RodaConstants.INDEX_STATE, AIPState.UNDER_APPRAISAL.toString())); @@ -92,15 +91,11 @@ interface MyUiBinder extends UiBinder { FlowPanel ingestAppraisalDescription; @UiField(provided = true) - MainSearch mainSearch; + CatalogueSearch catalogueSearch; @UiField(provided = true) Button acceptButton, rejectButton; - // cannot let representations and files to be selectable for now - boolean itemsSelectable = true; - boolean representationsSelectable = false; - boolean filesSelectable = false; boolean justActive = false; private IngestAppraisal() { @@ -108,8 +103,11 @@ private IngestAppraisal() { rejectButton = new Button(); // Create main search - mainSearch = new MainSearch(justActive, itemsSelectable, representationsSelectable, filesSelectable, - "IngestAppraisal_searchAIPs", "IngestAppraisal_searchRepresentations", "IngestAppraisal_searchFiles", null, + + // TODO tmp ver o porquê deste warning sobre os selectables: + // cannot let representations and files to be selectable for now + catalogueSearch = new CatalogueSearch(false, "IngestAppraisal_searchAIPs", "IngestAppraisal_searchRepresentations", + "IngestAppraisal_searchFiles", null, AIPState.UNDER_APPRAISAL); initWidget(uiBinder.createAndBindUi(this)); @@ -132,26 +130,14 @@ protected void onLoad() { } public void resolve(List historyTokens, AsyncCallback callback) { - mainSearch.setDefaultFilters(BASE_FILTER); - if (historyTokens.isEmpty()) { - mainSearch.search(true); - callback.onSuccess(this); - } else { - // #search/TYPE/key/value/key/value - boolean successful = mainSearch.setSearch(historyTokens); - if (successful) { - mainSearch.search(true); - callback.onSuccess(this); - } else { - HistoryUtils.newHistory(RESOLVER); - callback.onSuccess(null); - } - } + catalogueSearch.setFilters(historyTokens); + callback.onSuccess(this); } @SuppressWarnings("unchecked") private void appraise(boolean accept) { - SelectedItems selected = mainSearch.getSelected(); + // TODO tmp (also FIXME) replace with actionable. this is just awful + SelectedItems selected = catalogueSearch.getSelected(); if (ClientSelectedItemsUtils.isEmpty(selected)) { Toast.showInfo(messages.appraisalNoItemsSelectedTitle(), messages.appraisalNoItemsSelectedMessage()); @@ -168,7 +154,7 @@ public void onFailure(Throwable caught) { @Override public void onSuccess(Actionable.ActionImpact result) { - mainSearch.refresh(); + catalogueSearch.refresh(); } }); } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/appraisal/IngestAppraisal.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/appraisal/IngestAppraisal.ui.xml index f7797e0573..5f3787658c 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/appraisal/IngestAppraisal.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/appraisal/IngestAppraisal.ui.xml @@ -16,7 +16,7 @@ - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/process/PluginParameterPanel.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/process/PluginParameterPanel.java index 6a82c2eee4..20f903ae60 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/process/PluginParameterPanel.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/process/PluginParameterPanel.java @@ -253,7 +253,7 @@ private void createSelectAipLayout() { @Override public void onClick(ClickEvent event) { - SelectAipDialog selectAipDialog = new SelectAipDialog(parameter.getName(), false); + SelectAipDialog selectAipDialog = new SelectAipDialog(parameter.getName()); selectAipDialog.setSingleSelectionMode(); selectAipDialog.showAndCenter(); selectAipDialog.addValueChangeHandler(new ValueChangeHandler() { diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/process/ShowJob.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/process/ShowJob.java index b1cc4e7369..202bc34d77 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/process/ShowJob.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/process/ShowJob.java @@ -18,7 +18,6 @@ import org.roda.core.data.common.RodaConstants; import org.roda.core.data.exceptions.NotFoundException; -import org.roda.core.data.v2.index.IndexResult; import org.roda.core.data.v2.index.facet.Facets; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.filter.FilterParameter; @@ -48,10 +47,11 @@ import org.roda.wui.client.common.dialogs.Dialogs; import org.roda.wui.client.common.lists.IngestJobReportList; import org.roda.wui.client.common.lists.SimpleJobReportList; -import org.roda.wui.client.common.lists.pagination.ListSelectionUtils; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.client.common.lists.utils.ClientSelectedItemsUtils; -import org.roda.wui.client.common.search.SearchPanel; +import org.roda.wui.client.common.lists.utils.ListBuilder; import org.roda.wui.client.common.search.SearchPreFilterUtils; +import org.roda.wui.client.common.search.SearchWrapper; import org.roda.wui.client.common.utils.AsyncCallbackUtils; import org.roda.wui.client.common.utils.HtmlSnippetUtils; import org.roda.wui.client.common.utils.JavascriptUtils; @@ -74,7 +74,6 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.uibinder.client.UiBinder; @@ -92,8 +91,6 @@ import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RadioButton; import com.google.gwt.user.client.ui.Widget; -import com.google.gwt.view.client.SelectionChangeEvent; -import com.google.gwt.view.client.SelectionChangeEvent.Handler; import config.i18n.client.ClientMessages; @@ -228,16 +225,7 @@ interface MyUiBinder extends UiBinder { Label reportsLabel; @UiField(provided = true) - SearchPanel ingestJobReportsSearchPanel; - - @UiField(provided = true) - IngestJobReportList ingestJobReports; - - @UiField(provided = true) - SearchPanel simpleJobReportsSearchPanel; - - @UiField(provided = true) - SimpleJobReportList simpleJobReports; + SearchWrapper searchWrapper; @UiField Button buttonAppraisal, buttonBack, buttonStop, buttonProcess; @@ -245,39 +233,38 @@ interface MyUiBinder extends UiBinder { public ShowJob(Job job, Map pluginsInfo, List extraReportFilterParameters) { this.job = job; this.pluginsInfo = pluginsInfo; - boolean isIngest = false; + boolean isIngest = job.getPluginType().equals(PluginType.INGEST); Filter filter = new Filter(new SimpleFilterParameter(RodaConstants.JOB_REPORT_JOB_ID, job.getUUID())); filter.add(extraReportFilterParameters); - if (job.getPluginType().equals(PluginType.INGEST)) { - ingestJobReports = new IngestJobReportList("ShowJob_reports", - new Filter(new SimpleFilterParameter(RodaConstants.JOB_REPORT_JOB_ID, job.getId())), messages.reportList(), - false); - ListSelectionUtils.bindBrowseOpener(ingestJobReports); - simpleJobReports = new SimpleJobReportList("ShowJob_reports_hidden"); - isIngest = true; + AsyncTableCell.Options jobReportListBuilderOptions = new AsyncTableCell.Options<>( + IndexedReport.class, "ShowJob_reports"); + jobReportListBuilderOptions.addValueChangedHandler(event -> { + if (!extraReportFilterParameters.isEmpty() && event.getValue().getTotalCount() == 1) { + Report jobReport = event.getValue().getResults().get(0); + if (jobReport != null) { + HistoryUtils.newHistory(ShowJobReport.RESOLVER, jobReport.getId()); + } + } + }); + jobReportListBuilderOptions.withFilter(filter); + jobReportListBuilderOptions.withAutoUpdate(isJobRunning() ? PERIOD_MILLIS : null); + jobReportListBuilderOptions.withSummary(messages.reportList()); + jobReportListBuilderOptions.bindOpener(); + + ListBuilder jobReportListBuilder; + if (isIngest) { + jobReportListBuilder = new ListBuilder<>(IngestJobReportList::new, jobReportListBuilderOptions); } else { - simpleJobReports = new SimpleJobReportList("ShowJob_reports", - new Filter(new SimpleFilterParameter(RodaConstants.JOB_REPORT_JOB_ID, job.getId())), messages.reportList(), - pluginsInfo, false); - ListSelectionUtils.bindBrowseOpener(simpleJobReports); - ingestJobReports = new IngestJobReportList("ShowJob_reports_hidden"); + jobReportListBuilder = new ListBuilder<>(() -> new SimpleJobReportList(pluginsInfo), jobReportListBuilderOptions); } - ingestJobReportsSearchPanel = new SearchPanel(filter, RodaConstants.JOB_REPORT_SEARCH, true, - messages.jobProcessedSearchPlaceHolder(), false, false, false); - ingestJobReportsSearchPanel.setList(ingestJobReports); - - simpleJobReportsSearchPanel = new SearchPanel(filter, RodaConstants.JOB_REPORT_SEARCH, true, - messages.jobProcessedSearchPlaceHolder(), false, false, false); - simpleJobReportsSearchPanel.setList(simpleJobReports); + searchWrapper = new SearchWrapper(false).createListAndSearchPanel(jobReportListBuilder, + messages.jobProcessedSearchPlaceHolder()); initWidget(uiBinder.createAndBindUi(this)); - simpleJobReportsSearchPanel.setVisible(!isIngest); - simpleJobReports.setVisible(!isIngest); - ingestJobReportsSearchPanel.setVisible(isIngest); - ingestJobReports.setVisible(isIngest); + buttonProcess.setVisible(isIngest); name.setText(job.getName()); @@ -288,57 +275,9 @@ public ShowJob(Job job, Map pluginsInfo, List selected = job.getSourceObjects(); selectedListPanel.setVisible(true); - ValueChangeHandler> jumpToSingleReportHandler = null; - if (!extraReportFilterParameters.isEmpty()) { - jumpToSingleReportHandler = event -> { - if (event.getValue().getTotalCount() == 1) { - Report jobReport = event.getValue().getResults().get(0); - if (jobReport != null) { - HistoryUtils.newHistory(ShowJobReport.RESOLVER, jobReport.getId()); - } - } - }; - } - if (isIngest) { - if (isJobRunning()) { - ingestJobReports.autoUpdate(PERIOD_MILLIS); - } - - ingestJobReports.getSelectionModel().addSelectionChangeHandler(new Handler() { - @Override - public void onSelectionChange(SelectionChangeEvent event) { - Report jobReport = ingestJobReports.getSelectionModel().getSelectedObject(); - if (jobReport != null) { - HistoryUtils.newHistory(ShowJobReport.RESOLVER, jobReport.getId()); - } - } - }); - - if (jumpToSingleReportHandler != null) { - ingestJobReports.addValueChangeHandler(jumpToSingleReportHandler); - } - showIngestSourceObjects(selected); } else { - if (isJobRunning()) { - simpleJobReports.autoUpdate(PERIOD_MILLIS); - } - - simpleJobReports.getSelectionModel().addSelectionChangeHandler(new Handler() { - @Override - public void onSelectionChange(SelectionChangeEvent event) { - Report jobReport = simpleJobReports.getSelectionModel().getSelectedObject(); - if (jobReport != null) { - HistoryUtils.newHistory(ShowJobReport.RESOLVER, jobReport.getId()); - } - } - }); - - if (jumpToSingleReportHandler != null) { - simpleJobReports.addValueChangeHandler(jumpToSingleReportHandler); - } - showActionSourceObjects(selected); } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/process/ShowJob.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/process/ShowJob.ui.xml index ac69e06149..13786d0539 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/process/ShowJob.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/process/ShowJob.ui.xml @@ -89,12 +89,7 @@ - - - - - - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/transfer/IngestTransfer.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/transfer/IngestTransfer.java index 33964765b5..dce5713f52 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/transfer/IngestTransfer.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/transfer/IngestTransfer.java @@ -110,7 +110,7 @@ interface MyUiBinder extends UiBinder { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private TransferredResource resource; private ActionableWidgetBuilder actionableWidgetBuilder; @@ -146,22 +146,11 @@ interface MyUiBinder extends UiBinder { SimplePanel actionsSidebar; private IngestTransfer() { - resourceSearch = new TransferredResourceSearch("IngestTransfer_transferredResources"); - resourceSearch.defaultFilters(new Filter(new EmptyKeyFilterParameter(RodaConstants.TRANSFERRED_RESOURCE_PARENT_ID))); - resourceSearch.getList().setActionable(TransferredResourceActions.get(null)); - - actionableWidgetBuilder = new ActionableWidgetBuilder<>(TransferredResourceActions.get(null)); - - initWidget(uiBinder.createAndBindUi(this)); - - ingestTransferDescription.add(new HTMLWidgetWrapper("IngestTransferDescription.html")); - - actionableWidgetBuilder.withCallback(new NoAsyncCallback() { - + NoAsyncCallback actionCallback = new NoAsyncCallback() { @Override public void onFailure(Throwable caught) { super.onFailure(caught); - resourceSearch.getList().refresh(); + resourceSearch.refresh(); } @Override @@ -172,7 +161,7 @@ public void onSuccess(Actionable.ActionImpact impact) { } else { view(); } - resourceSearch.getList().refresh(); + resourceSearch.refresh(); } else if (Actionable.ActionImpact.DESTROYED.equals(impact)) { String parentUUID = resource != null ? resource.getParentUUID() : null; if (parentUUID != null) { @@ -182,8 +171,24 @@ public void onSuccess(Actionable.ActionImpact impact) { } } } - }); + }; + + // TODO tmp activar o actionable callback acima quando o botao de actionable que + // está dentro da pesquisa é clicado + + resourceSearch = new TransferredResourceSearch("IngestTransfer_transferredResources", + new Filter(new EmptyKeyFilterParameter(RodaConstants.TRANSFERRED_RESOURCE_PARENT_ID)), + TransferredResourceActions.get(null)); + + actionableWidgetBuilder = new ActionableWidgetBuilder<>(TransferredResourceActions.get(null)); + + initWidget(uiBinder.createAndBindUi(this)); + + ingestTransferDescription.add(new HTMLWidgetWrapper("IngestTransferDescription.html")); + + actionableWidgetBuilder.withCallback(actionCallback); + // TODO 20180807 bferreira: remove sidebar and use actionable in searchwrapper actionsSidebar .setWidget(actionableWidgetBuilder.buildListWithObjects(new ActionableObject<>(TransferredResource.class))); } @@ -233,7 +238,7 @@ protected void view(TransferredResource r) { } else { Filter filter = new Filter( new SimpleFilterParameter(RodaConstants.TRANSFERRED_RESOURCE_PARENT_ID, r.getRelativePath())); - resourceSearch.defaultFilters(filter); + resourceSearch.setDefaultFilters(filter); resourceSearch.setVisible(true); download.setVisible(false); } @@ -266,7 +271,7 @@ protected void view() { resourceSearch.setVisible(true); download.setVisible(false); - resourceSearch.defaultFilters(DEFAULT_FILTER); + resourceSearch.setDefaultFilters(DEFAULT_FILTER); breadcrumb.setVisible(false); lastScanned.setText(""); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/transfer/TransferUpload.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/transfer/TransferUpload.java index e07dbcb0fe..1b0e73cf35 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/transfer/TransferUpload.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/ingest/transfer/TransferUpload.java @@ -17,6 +17,7 @@ import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.ip.TransferredResource; import org.roda.wui.client.browse.BrowseFile; +import org.roda.wui.client.browse.BrowseTop; import org.roda.wui.client.browse.BrowserService; import org.roda.wui.client.common.LastSelectedItemsSingleton; import org.roda.wui.client.common.UserLogin; @@ -80,7 +81,7 @@ public List getHistoryPath() { } }; - public static final HistoryResolver BROWSE_RESOLVER = new HistoryResolver() { + public static final HistoryResolver BROWSE_FILE_RESOLVER = new HistoryResolver() { @Override public void resolve(List historyTokens, AsyncCallback callback) { @@ -103,11 +104,34 @@ public List getHistoryPath() { } }; + public static final HistoryResolver BROWSE_RESOLVER = new HistoryResolver() { + + @Override + public void resolve(List historyTokens, AsyncCallback callback) { + getInstance().browseResolve(historyTokens, callback); + } + + @Override + public void isCurrentUserPermitted(AsyncCallback callback) { + UserLogin.getInstance().checkRole(this, callback); + } + + @Override + public String getHistoryToken() { + return "upload"; + } + + @Override + public List getHistoryPath() { + return ListUtils.concat(BrowseTop.RESOLVER.getHistoryPath(), getHistoryToken()); + } + }; + interface MyUiBinder extends UiBinder { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private static final String DRAGOVER = "dragover"; @UiField diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/BreadcrumbUtils.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/BreadcrumbUtils.java index 1d622cd6f7..3a52a29b7c 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/BreadcrumbUtils.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/BreadcrumbUtils.java @@ -18,7 +18,7 @@ import org.roda.core.data.v2.ip.IndexedFile; import org.roda.core.data.v2.ip.IndexedRepresentation; import org.roda.core.data.v2.ip.TransferredResource; -import org.roda.wui.client.browse.BrowseAIP; +import org.roda.wui.client.browse.BrowseTop; import org.roda.wui.client.browse.PreservationEvents; import org.roda.wui.client.browse.bundle.BrowseFileBundle; import org.roda.wui.client.browse.bundle.BrowseRepresentationBundle; @@ -38,7 +38,7 @@ public class BreadcrumbUtils { - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private BreadcrumbUtils() { // do nothing @@ -71,7 +71,7 @@ public static List getAipBreadcrumbs(IndexedAIP aip) { public static List getAipBreadcrumbs(List aipAncestors, IndexedAIP aip, boolean events) { List breadcrumb = new ArrayList<>(); breadcrumb - .add(new BreadcrumbItem(DescriptionLevelUtils.getTopIconSafeHtml(), "", BrowseAIP.RESOLVER.getHistoryPath())); + .add(new BreadcrumbItem(DescriptionLevelUtils.getTopIconSafeHtml(), "", BrowseTop.RESOLVER.getHistoryPath())); if (aipAncestors != null) { for (IndexedAIP ancestor : aipAncestors) { @@ -119,7 +119,7 @@ public static List getRepresentationBreadcrumbs(List IndexedRepresentation representation) { List breadcrumb = new ArrayList<>(); breadcrumb - .add(new BreadcrumbItem(DescriptionLevelUtils.getTopIconSafeHtml(), "", BrowseAIP.RESOLVER.getHistoryPath())); + .add(new BreadcrumbItem(DescriptionLevelUtils.getTopIconSafeHtml(), "", BrowseTop.RESOLVER.getHistoryPath())); if (aipAncestors != null) { for (IndexedAIP ancestor : aipAncestors) { @@ -127,7 +127,7 @@ public static List getRepresentationBreadcrumbs(List SafeHtml breadcrumbLabel = getBreadcrumbLabel(ancestor); String breadcrumbTitle = getBreadcrumbTitle(ancestor); BreadcrumbItem ancestorBreadcrumb = new BreadcrumbItem(breadcrumbLabel, breadcrumbTitle, - ListUtils.concat(BrowseAIP.RESOLVER.getHistoryPath(), ancestor.getId())); + ListUtils.concat(BrowseTop.RESOLVER.getHistoryPath(), ancestor.getId())); breadcrumb.add(1, ancestorBreadcrumb); } else { SafeHtml breadcrumbLabel = DescriptionLevelUtils.getElementLevelIconSafeHtml(RodaConstants.AIP_GHOST, false); @@ -324,11 +324,11 @@ private static String getBreadcrumbTitle(IndexedAIP aip) { } private static final List getViewItemEventsHistoryToken(String id) { - return ListUtils.concat(BrowseAIP.RESOLVER.getHistoryPath(), PreservationEvents.BROWSE_RESOLVER.getHistoryToken(), + return ListUtils.concat(BrowseTop.RESOLVER.getHistoryPath(), PreservationEvents.BROWSE_RESOLVER.getHistoryToken(), id); } private static final List getViewItemHistoryToken(String id) { - return ListUtils.concat(BrowseAIP.RESOLVER.getHistoryPath(), id); + return ListUtils.concat(BrowseTop.RESOLVER.getHistoryPath(), id); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/ContentPanel.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/ContentPanel.java index 883d08993e..8ae3f46d73 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/ContentPanel.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/ContentPanel.java @@ -15,7 +15,7 @@ import java.util.Set; import org.roda.core.data.v2.user.User; -import org.roda.wui.client.browse.BrowseAIP; +import org.roda.wui.client.browse.BrowseTop; import org.roda.wui.client.common.UserLogin; import org.roda.wui.client.common.dialogs.Dialogs; import org.roda.wui.client.common.utils.AsyncCallbackUtils; @@ -59,7 +59,7 @@ public class ContentPanel extends SimplePanel { private static ClientLogger logger = new ClientLogger(ContentPanel.class.getName()); private static final Set resolvers = new HashSet<>(); - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private Widget currWidget; @@ -89,7 +89,7 @@ public void init() { // Theme static pages resolvers.add(Theme.RESOLVER); // Browse - resolvers.add(BrowseAIP.RESOLVER); + resolvers.add(BrowseTop.RESOLVER); // Search resolvers.add(Search.RESOLVER); resolvers.add(Relation.RESOLVER); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/Login.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/Login.java index 62b3249b5c..20709e6337 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/Login.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/Login.java @@ -85,7 +85,7 @@ interface MyUiBinder extends UiBinder { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private static Login instance = null; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/Main.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/Main.java index 2d05655108..2e91f6c2ff 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/Main.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/Main.java @@ -28,10 +28,6 @@ import com.google.gwt.core.client.Scheduler; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NodeList; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.logical.shared.ValueChangeEvent; -import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.i18n.client.LocaleInfo; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; @@ -53,7 +49,7 @@ public class Main extends Composite implements EntryPoint { private ClientLogger logger = new ClientLogger(getClass().getName()); - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); @Override public void onModuleLoad() { diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/Menu.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/Menu.java index 1898273c17..a5db276f63 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/Menu.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/Menu.java @@ -16,7 +16,7 @@ import java.util.Map.Entry; import org.roda.core.data.v2.user.User; -import org.roda.wui.client.browse.BrowseAIP; +import org.roda.wui.client.browse.BrowseTop; import org.roda.wui.client.browse.PreservationEvents; import org.roda.wui.client.common.UserLogin; import org.roda.wui.client.common.utils.JavascriptUtils; @@ -44,7 +44,6 @@ import org.roda.wui.client.welcome.Welcome; import org.roda.wui.common.client.ClientLogger; import org.roda.wui.common.client.HistoryResolver; -import org.roda.wui.common.client.LoginStatusListener; import org.roda.wui.common.client.tools.HistoryUtils; import org.roda.wui.common.client.widgets.wcag.AcessibleMenuBar; @@ -70,7 +69,7 @@ public class Menu extends Composite { private ClientLogger logger = new ClientLogger(getClass().getName()); - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); interface MyUiBinder extends UiBinder { @@ -129,7 +128,7 @@ public Menu() { about = customMenuItem("fa fa-home", messages.title("about"), "menu-item-label", null, createCommand(Welcome.RESOLVER.getHistoryPath())); - disseminationBrowse = new MenuItem(messages.title("browse"), createCommand(BrowseAIP.RESOLVER.getHistoryPath())); + disseminationBrowse = new MenuItem(messages.title("browse"), createCommand(BrowseTop.RESOLVER.getHistoryPath())); disseminationBrowse.addStyleName("browse_menu_item"); disseminationSearchBasic = new MenuItem(messages.title("search"), createCommand(Search.RESOLVER.getHistoryPath())); disseminationSearchBasic.addStyleName("search_menu_item"); @@ -197,13 +196,7 @@ public Menu() { userMenu = new AcessibleMenuBar(true); MenuItem profile = userMenu.addItem(messages.loginProfile(), createCommand(Profile.RESOLVER.getHistoryPath())); profile.addStyleName("profile_user_item"); - MenuItem login = userMenu.addItem(messages.loginLogout(), new ScheduledCommand() { - - @Override - public void execute() { - UserLogin.getInstance().logout(); - } - }); + MenuItem login = userMenu.addItem(messages.loginLogout(), () -> UserLogin.getInstance().logout()); login.addStyleName("login_user_item"); languagesMenu = new AcessibleMenuBar(true); @@ -222,41 +215,20 @@ public void onFailure(Throwable caught) { public void onSuccess(User user) { updateVisibles(user); } - }); - UserLogin.getInstance().addLoginStatusListener(new LoginStatusListener() { - - @Override - public void onLoginStatusChanged(User user) { - updateVisibles(user); - } - - }); + UserLogin.getInstance().addLoginStatusListener(this::updateVisibles); } private ScheduledCommand createCommand(final List path) { - return new ScheduledCommand() { - - @Override - public void execute() { - HistoryUtils.newHistory(path); - } - }; + return () -> HistoryUtils.newHistory(path); } private ScheduledCommand createLoginCommand() { - return new ScheduledCommand() { - - @Override - public void execute() { - UserLogin.getInstance().login(); - } - }; + return () -> UserLogin.getInstance().login(); } private void updateVisibles(User user) { - leftMenu.clearItems(); leftMenuItemCount = 0; rightMenu.clearItems(); @@ -267,7 +239,7 @@ private void updateVisibles(User user) { updateResolverTopItemVisibility(Welcome.RESOLVER, about, 0); // Dissemination - updateResolverTopItemVisibility(BrowseAIP.RESOLVER, disseminationBrowse, 1); + updateResolverTopItemVisibility(BrowseTop.RESOLVER, disseminationBrowse, 1); updateResolverTopItemVisibility(Search.RESOLVER, disseminationSearchBasic, 2); // Ingest @@ -337,8 +309,9 @@ private MenuItem customMenuItem(String icon, String label, String styleNames, Me String iconHTML = ""; b.append(SafeHtmlUtils.fromSafeConstant(iconHTML)); - if (label != null) + if (label != null) { b.append(SafeHtmlUtils.fromSafeConstant(label)); + } MenuItem menuItem; if (subMenu != null) { @@ -423,13 +396,8 @@ private void setLanguageMenu() { languagesMenu.addItem(languageMenuItem); selectedLanguage = value; } else { - MenuItem languageMenuItem = new MenuItem(SafeHtmlUtils.fromSafeConstant(value), new ScheduledCommand() { - - @Override - public void execute() { - JavascriptUtils.changeLocale(key); - } - }); + MenuItem languageMenuItem = new MenuItem(SafeHtmlUtils.fromSafeConstant(value), + () -> JavascriptUtils.changeLocale(key)); languagesMenu.addItem(languageMenuItem); languageMenuItem.addStyleName("menu-item-language"); } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/CreateGroup.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/CreateGroup.java index 8639032a2b..f7a714262a 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/CreateGroup.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/CreateGroup.java @@ -70,7 +70,7 @@ interface MyUiBinder extends UiBinder { private Group group; - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); @UiField Button buttonApply; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/CreateUser.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/CreateUser.java index 62d435728a..7cd8410cf5 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/CreateUser.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/CreateUser.java @@ -71,7 +71,7 @@ interface MyUiBinder extends UiBinder { private User user; - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); @UiField Button buttonApply; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/EditGroup.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/EditGroup.java index 996e3061ad..be02cddbc5 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/EditGroup.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/EditGroup.java @@ -88,7 +88,7 @@ interface MyUiBinder extends UiBinder { private Group group; - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); @UiField Button buttonApply; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/EditUser.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/EditUser.java index 59e2102849..2839162f11 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/EditUser.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/EditUser.java @@ -88,7 +88,7 @@ interface MyUiBinder extends UiBinder { private final User user; - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); @UiField Button buttonApply; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/MemberManagement.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/MemberManagement.java index eceefc61c6..34cb3d0341 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/MemberManagement.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/MemberManagement.java @@ -9,15 +9,15 @@ import java.util.List; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.user.RODAMember; import org.roda.wui.client.common.UserLogin; import org.roda.wui.client.common.actions.RODAMemberActions; import org.roda.wui.client.common.actions.model.ActionableObject; import org.roda.wui.client.common.actions.widgets.ActionableWidgetBuilder; import org.roda.wui.client.common.lists.RodaMemberList; -import org.roda.wui.client.common.search.SearchFilters; -import org.roda.wui.client.common.search.SearchPanel; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.client.common.search.SearchWrapper; import org.roda.wui.client.common.utils.JavascriptUtils; import org.roda.wui.common.client.HistoryResolver; import org.roda.wui.common.client.tools.HistoryUtils; @@ -32,12 +32,10 @@ import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; -import com.google.gwt.view.client.SelectionChangeEvent; import config.i18n.client.ClientMessages; public class MemberManagement extends Composite { - private static final String EDIT_GROUP_HISTORY_TOKEN = EditGroup.RESOLVER.getHistoryToken(); private static final ClientMessages messages = GWT.create(ClientMessages.class); public static final HistoryResolver RESOLVER = new HistoryResolver() { @@ -64,7 +62,6 @@ public String getHistoryToken() { }; private static MemberManagement instance = null; - private ActionableWidgetBuilder actionableWidgetBuilder; /** * Get the singleton instance @@ -88,43 +85,27 @@ interface MyUiBinder extends UiBinder { @UiField FlowPanel memberManagementDescription; - @UiField(provided = true) - SearchPanel searchPanel; - - @UiField(provided = true) - RodaMemberList list; - @UiField SimplePanel actionsSidebar; - private static final Filter DEFAULT_FILTER = SearchFilters.defaultFilter(RODAMember.class.getName()); - private static final String ALL_FILTER = SearchFilters.allFilter(RODAMember.class.getName()); + @UiField(provided = true) + SearchWrapper searchWrapper; public MemberManagement() { - actionableWidgetBuilder = new ActionableWidgetBuilder<>(RODAMemberActions.get()); - list = new RodaMemberList("MemberManagement_rodaMembers", DEFAULT_FILTER, messages.usersAndGroupsTitle(), true); - list.setActionable(RODAMemberActions.get()); - searchPanel = new SearchPanel(DEFAULT_FILTER, ALL_FILTER, true, messages.usersAndGroupsSearchPlaceHolder(), false, - false, false); - searchPanel.setList(list); - initWidget(uiBinder.createAndBindUi(this)); + ListBuilder rodaMemberListBuilder = new ListBuilder<>(RodaMemberList::new, + new AsyncTableCell.Options<>(RODAMember.class, "MemberManagement_rodaMembers") + .withSummary(messages.usersAndGroupsTitle()).bindOpener()); - actionsSidebar.setWidget(actionableWidgetBuilder.buildListWithObjects(new ActionableObject<>(RODAMember.class))); - memberManagementDescription.add(new HTMLWidgetWrapper("MemberManagementDescription.html")); + searchWrapper = new SearchWrapper(false).createListAndSearchPanel(rodaMemberListBuilder, RODAMemberActions.get(), + messages.usersAndGroupsSearchPlaceHolder()); - list.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() { + initWidget(uiBinder.createAndBindUi(this)); - @Override - public void onSelectionChange(SelectionChangeEvent event) { - RODAMember selected = list.getSelectionModel().getSelectedObject(); - if (selected != null) { - HistoryUtils.newHistory(RESOLVER, - (selected.isUser() ? EditUser.RESOLVER.getHistoryToken() : EDIT_GROUP_HISTORY_TOKEN), selected.getId()); - } - } - }); + actionsSidebar.setWidget(new ActionableWidgetBuilder<>(RODAMemberActions.get()) + .buildListWithObjects(new ActionableObject<>(RODAMember.class))); + memberManagementDescription.add(new HTMLWidgetWrapper("MemberManagementDescription.html")); } @Override @@ -134,7 +115,7 @@ protected void onLoad() { } private void refresh() { - list.refresh(); + searchWrapper.refreshCurrentList(); } public void resolve(List historyTokens, AsyncCallback callback) { @@ -152,7 +133,7 @@ public void resolve(List historyTokens, AsyncCallback callback) } else if (historyTokens.size() == 2) { if (historyTokens.get(0).equals(EditUser.RESOLVER.getHistoryToken())) { EditUser.RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); - } else if (historyTokens.get(0).equals(EDIT_GROUP_HISTORY_TOKEN)) { + } else if (historyTokens.get(0).equals(EditGroup.RESOLVER.getHistoryToken())) { EditGroup.RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); } else { HistoryUtils.newHistory(RESOLVER); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/MemberManagement.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/MemberManagement.ui.xml index 43b3349f41..92c950d929 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/MemberManagement.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/MemberManagement.ui.xml @@ -15,8 +15,7 @@ - - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/NotificationRegister.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/NotificationRegister.java index 706414d2a4..206787f901 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/NotificationRegister.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/NotificationRegister.java @@ -12,7 +12,6 @@ import java.util.List; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.wui.client.common.UserLogin; import org.roda.wui.client.common.utils.JavascriptUtils; import org.roda.wui.client.search.NotificationSearch; @@ -88,7 +87,6 @@ interface MyUiBinder extends UiBinder { public NotificationRegister() { notificationSearch = new NotificationSearch("NotificationRegister_notifications"); - notificationSearch.defaultFilters(Filter.ALL); initWidget(uiBinder.createAndBindUi(this)); notificationDescription.add(new HTMLWidgetWrapper("NotificationDescription.html")); @@ -102,7 +100,6 @@ protected void onLoad() { public void resolve(List historyTokens, AsyncCallback callback) { if (historyTokens.isEmpty()) { - notificationSearch.setFilter(Filter.ALL); callback.onSuccess(this); } else if (historyTokens.size() > 1 && ShowNotification.RESOLVER.getHistoryToken().equals(historyTokens.get(0))) { ShowNotification.RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/PasswordPanel.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/PasswordPanel.java index b418f95a22..484b8716df 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/PasswordPanel.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/PasswordPanel.java @@ -27,7 +27,7 @@ import config.i18n.client.ClientMessages; public class PasswordPanel extends SimplePanel implements HasValueChangeHandlers { - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private FlowPanel editLayout; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/PermissionsPanel.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/PermissionsPanel.java index 8aebcf93fc..93dfbffd22 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/PermissionsPanel.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/PermissionsPanel.java @@ -200,7 +200,7 @@ private PermissionsPanel getOuterType() { } } - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); @SuppressWarnings("unused") private final ClientLogger logger = new ClientLogger(getClass().getName()); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/Profile.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/Profile.java index cbd195e938..93f37ae2af 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/Profile.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/Profile.java @@ -95,7 +95,7 @@ interface MyUiBinder extends UiBinder { private final User user; - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); @UiField Button buttonApply; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/RecoverLogin.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/RecoverLogin.java index f1113f05c3..f2d21b80a4 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/RecoverLogin.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/RecoverLogin.java @@ -100,7 +100,7 @@ interface MyUiBinder extends UiBinder { @SuppressWarnings("unused") private ClientLogger logger = new ClientLogger(getClass().getName()); - private static ClientMessages messages = GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private boolean recaptchaActive = true; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/Register.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/Register.java index 582b38fd9e..f118173ada 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/Register.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/Register.java @@ -103,7 +103,7 @@ interface MyUiBinder extends UiBinder { private boolean recaptchaActive = true; private RecaptchaWidget recaptchaWidget; - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); @SuppressWarnings("unused") private ClientLogger logger = new ClientLogger(getClass().getName()); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/ResetPassword.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/ResetPassword.java index 149ff8dbbe..a64a22529b 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/ResetPassword.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/ResetPassword.java @@ -109,7 +109,7 @@ interface MyUiBinder extends UiBinder { @SuppressWarnings("unused") private ClientLogger logger = new ClientLogger(getClass().getName()); - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); @UiField FlowPanel recoverPanel; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/ShowLogEntry.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/ShowLogEntry.java index db5eda674a..5cb597e78e 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/ShowLogEntry.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/ShowLogEntry.java @@ -98,7 +98,7 @@ interface MyUiBinder extends UiBinder { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static ClientMessages messages = GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private static final List fieldsToReturn = Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.LOG_ID, RodaConstants.LOG_ACTION_COMPONENT, RodaConstants.LOG_ACTION_METHOD, RodaConstants.LOG_ADDRESS, diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/UserLog.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/UserLog.java index d0b5dba860..884ceab9a3 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/UserLog.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/UserLog.java @@ -10,34 +10,30 @@ */ package org.roda.wui.client.management; -import java.util.Date; import java.util.List; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.DateRangeFilterParameter; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.filter.SimpleFilterParameter; +import org.roda.core.data.v2.log.LogEntry; import org.roda.wui.client.common.UserLogin; +import org.roda.wui.client.common.lists.LogEntryList; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.client.common.search.SearchWrapper; import org.roda.wui.client.common.utils.JavascriptUtils; -import org.roda.wui.client.search.ActionLogSearch; -import org.roda.wui.common.client.ClientLogger; import org.roda.wui.common.client.HistoryResolver; import org.roda.wui.common.client.tools.HistoryUtils; import org.roda.wui.common.client.tools.ListUtils; import org.roda.wui.common.client.widgets.HTMLWidgetWrapper; import com.google.gwt.core.client.GWT; -import com.google.gwt.event.logical.shared.ValueChangeEvent; -import com.google.gwt.event.logical.shared.ValueChangeHandler; -import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Widget; -import com.google.gwt.user.datepicker.client.DateBox; -import com.google.gwt.user.datepicker.client.DateBox.DefaultFormat; import config.i18n.client.ClientMessages; @@ -94,13 +90,16 @@ interface MyUiBinder extends UiBinder { FlowPanel userLogDescription; @UiField(provided = true) - ActionLogSearch logSearch; + SearchWrapper searchWrapper; public UserLog() { - logSearch = new ActionLogSearch("UserLog_logEntries"); - logSearch.defaultFilters(Filter.ALL); + // TODO tmp why no bindOpener? + ListBuilder logEntryListBuilder = new ListBuilder<>(LogEntryList::new, + new AsyncTableCell.Options<>(LogEntry.class, "UserLog_logEntries")); + searchWrapper = new SearchWrapper(false).createListAndSearchPanel(logEntryListBuilder); initWidget(uiBinder.createAndBindUi(this)); + userLogDescription.add(new HTMLWidgetWrapper("UserLogDescription.html")); } @@ -112,13 +111,14 @@ protected void onLoad() { public void resolve(List historyTokens, AsyncCallback callback) { if (historyTokens.isEmpty()) { - logSearch.setFilter(Filter.ALL); + searchWrapper.resetToDefaultFilter(LogEntry.class); callback.onSuccess(this); } else if (historyTokens.size() > 1 && ShowLogEntry.RESOLVER.getHistoryToken().equals(historyTokens.get(0))) { ShowLogEntry.RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); } else if (historyTokens.size() == 1) { final String aipId = historyTokens.get(0); - logSearch.setFilter(new Filter(new SimpleFilterParameter(RodaConstants.LOG_RELATED_OBJECT_ID, aipId))); + searchWrapper.setFilter(LogEntry.class, + new Filter(new SimpleFilterParameter(RodaConstants.LOG_RELATED_OBJECT_ID, aipId))); callback.onSuccess(this); } else { HistoryUtils.newHistory(RESOLVER); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/UserLog.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/UserLog.ui.xml index 44ce17488d..e14f105311 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/UserLog.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/UserLog.ui.xml @@ -2,7 +2,8 @@ + xmlns:search="urn:import:org.roda.wui.client.search" + xmlns:commonsearch="urn:import:org.roda.wui.client.common.search"> @@ -14,7 +15,7 @@ - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/VerifyEmail.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/VerifyEmail.java index 74f4530e5a..742ca213d3 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/VerifyEmail.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/management/VerifyEmail.java @@ -109,7 +109,7 @@ interface MyUiBinder extends UiBinder { @SuppressWarnings("unused") private ClientLogger logger = new ClientLogger(getClass().getName()); - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); @UiField FlowPanel recoverPanel; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/EditFormat.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/EditFormat.java index c287733015..d0cc0ee31b 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/EditFormat.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/EditFormat.java @@ -89,7 +89,7 @@ interface MyUiBinder extends UiBinder { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static ClientMessages messages = GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private Format format; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/EditRepresentationInformation.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/EditRepresentationInformation.java index 441d2f251e..172036728b 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/EditRepresentationInformation.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/EditRepresentationInformation.java @@ -90,7 +90,7 @@ interface MyUiBinder extends UiBinder { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static ClientMessages messages = GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private RepresentationInformation ri; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/EditRisk.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/EditRisk.java index 67df3a681d..bf5ee46e5c 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/EditRisk.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/EditRisk.java @@ -103,7 +103,7 @@ interface MyUiBinder extends UiBinder { RodaConstants.RISK_MITIGATION_RELATED_EVENT_IDENTIFIER_VALUE); private Risk risk; - private static ClientMessages messages = GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private int incidences = 0; @UiField diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/EditRiskIncidence.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/EditRiskIncidence.java index 013afd259e..e3c1f2fd4d 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/EditRiskIncidence.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/EditRiskIncidence.java @@ -102,7 +102,7 @@ interface MyUiBinder extends UiBinder { RodaConstants.RISK_INCIDENCE_MITIGATED_DESCRIPTION); private RiskIncidence incidence; - private static ClientMessages messages = GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); @UiField Button buttonApply; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/FormatRegister.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/FormatRegister.java index 6f218f8e67..49b93b2363 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/FormatRegister.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/FormatRegister.java @@ -13,14 +13,14 @@ import java.util.List; import org.roda.core.data.v2.formats.Format; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.wui.client.common.UserLogin; import org.roda.wui.client.common.actions.FormatActions; import org.roda.wui.client.common.actions.model.ActionableObject; import org.roda.wui.client.common.actions.widgets.ActionableWidgetBuilder; import org.roda.wui.client.common.lists.FormatList; -import org.roda.wui.client.common.search.SearchFilters; -import org.roda.wui.client.common.search.SearchPanel; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.client.common.search.SearchWrapper; import org.roda.wui.client.common.utils.JavascriptUtils; import org.roda.wui.common.client.HistoryResolver; import org.roda.wui.common.client.tools.HistoryUtils; @@ -37,7 +37,6 @@ import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; -import com.google.gwt.view.client.SelectionChangeEvent; import config.i18n.client.ClientMessages; @@ -84,40 +83,26 @@ interface MyUiBinder extends UiBinder { @UiField FlowPanel formatRegisterDescription; - @UiField(provided = true) - SearchPanel searchPanel; + @UiField + SimplePanel actionsSidebar; @UiField(provided = true) - FormatList formatList; + SearchWrapper searchWrapper; - @UiField - SimplePanel actionsSidebar; private ActionableWidgetBuilder actionableWidgetBuilder; - private static final Filter DEFAULT_FILTER = SearchFilters.defaultFilter(Format.class.getName()); - private static final String ALL_FILTER = SearchFilters.allFilter(Format.class.getName()); - /** * Create a format register page */ public FormatRegister() { actionableWidgetBuilder = new ActionableWidgetBuilder<>(FormatActions.get()); - formatList = new FormatList("FormatRegister_formats", Filter.ALL, messages.formatsTitle(), true); - formatList.setActionable(FormatActions.get()); - - searchPanel = new SearchPanel(DEFAULT_FILTER, ALL_FILTER, true, messages.formatRegisterSearchPlaceHolder(), false, - false, true); - searchPanel.setList(formatList); - - formatList.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() { - @Override - public void onSelectionChange(SelectionChangeEvent event) { - Format selected = formatList.getSelectionModel().getSelectedObject(); - if (selected != null) { - HistoryUtils.newHistory(ShowFormat.RESOLVER, selected.getId()); - } - } - }); + + ListBuilder formatListBuilder = new ListBuilder<>(FormatList::new, + new AsyncTableCell.Options<>(Format.class, "FormatRegister_formats").withSummary(messages.formatsTitle()) + .bindOpener()); + + searchWrapper = new SearchWrapper(false).createListAndSearchPanel(formatListBuilder, FormatActions.get(), + messages.formatRegisterSearchPlaceHolder()); initWidget(uiBinder.createAndBindUi(this)); actionsSidebar.setWidget(actionableWidgetBuilder.buildListWithObjects(new ActionableObject<>(Format.class))); @@ -152,8 +137,7 @@ protected void onLoad() { public void resolve(List historyTokens, AsyncCallback callback) { if (historyTokens.isEmpty()) { - formatList.refresh(); - formatList.setFilter(Filter.ALL); + searchWrapper.resetToDefaultFilter(Format.class); callback.onSuccess(this); } else if (historyTokens.size() == 2 && historyTokens.get(0).equals(ShowFormat.RESOLVER.getHistoryToken())) { ShowFormat.RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/FormatRegister.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/FormatRegister.ui.xml index 6545860a67..77d8a50684 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/FormatRegister.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/FormatRegister.ui.xml @@ -11,10 +11,8 @@ - - - - + + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/PreservationAgents.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/PreservationAgents.java index d26ed1ee2c..6dbab6a826 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/PreservationAgents.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/PreservationAgents.java @@ -12,13 +12,13 @@ import java.util.List; -import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.ip.metadata.IndexedPreservationAgent; import org.roda.wui.client.common.UserLogin; import org.roda.wui.client.common.actions.PreservationAgentActions; import org.roda.wui.client.common.lists.PreservationAgentList; -import org.roda.wui.client.common.search.SearchPanel; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.client.common.search.SearchWrapper; import org.roda.wui.client.common.utils.JavascriptUtils; import org.roda.wui.common.client.HistoryResolver; import org.roda.wui.common.client.tools.HistoryUtils; @@ -32,8 +32,6 @@ import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; -import com.google.gwt.view.client.SelectionChangeEvent; -import com.google.gwt.view.client.SelectionChangeEvent.Handler; import config.i18n.client.ClientMessages; @@ -72,7 +70,7 @@ interface MyUiBinder extends UiBinder { private static PreservationAgents instance = null; private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); @UiField SimplePanel itemIcon; @@ -81,29 +79,14 @@ interface MyUiBinder extends UiBinder { Label itemTitle; @UiField(provided = true) - SearchPanel agentSearch; - - @UiField(provided = true) - PreservationAgentList agentList; + SearchWrapper searchWrapper; public PreservationAgents() { - agentList = new PreservationAgentList("PreservationAgents_agents", Filter.ALL, messages.preservationAgentsTitle(), - true); - agentList.setActionable(PreservationAgentActions.get()); - - agentList.getSelectionModel().addSelectionChangeHandler(new Handler() { - @Override - public void onSelectionChange(SelectionChangeEvent event) { - IndexedPreservationAgent selected = agentList.getSelectionModel().getSelectedObject(); - if (selected != null) { - HistoryUtils.newHistory(ShowPreservationAgent.RESOLVER, selected.getId()); - } - } - }); - - agentSearch = new SearchPanel(Filter.ALL, RodaConstants.PRESERVATION_AGENT_SEARCH, true, - messages.searchPlaceHolder(), false, false, true); - agentSearch.setList(agentList); + ListBuilder preservationAgentListBuilder = new ListBuilder<>(PreservationAgentList::new, + new AsyncTableCell.Options<>(IndexedPreservationAgent.class, "PreservationAgents_agents").bindOpener()); + + searchWrapper = new SearchWrapper(false).createListAndSearchPanel(preservationAgentListBuilder, + PreservationAgentActions.get()); initWidget(uiBinder.createAndBindUi(this)); } @@ -128,7 +111,7 @@ protected void onLoad() { private void resolve(List historyTokens, AsyncCallback callback) { if (historyTokens.isEmpty()) { - agentList.refresh(); + searchWrapper.refreshCurrentList(); callback.onSuccess(this); } else if (!historyTokens.isEmpty() && historyTokens.get(0).equals(ShowPreservationAgent.RESOLVER.getHistoryToken())) { diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/PreservationAgents.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/PreservationAgents.ui.xml index b6c668235b..954d8ef6d4 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/PreservationAgents.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/PreservationAgents.ui.xml @@ -23,8 +23,7 @@ - - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RepresentationInformationAssociations.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RepresentationInformationAssociations.java index 8f7a927bd0..85560d7822 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RepresentationInformationAssociations.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RepresentationInformationAssociations.java @@ -10,15 +10,10 @@ */ package org.roda.wui.client.planning; -import java.util.ArrayList; import java.util.List; import org.roda.core.data.utils.RepresentationInformationUtils; import org.roda.core.data.v2.index.IndexResult; -import org.roda.core.data.v2.index.filter.Filter; -import org.roda.core.data.v2.index.filter.FilterParameter; -import org.roda.core.data.v2.index.filter.OrFiltersParameters; -import org.roda.core.data.v2.index.filter.SimpleFilterParameter; import org.roda.core.data.v2.index.select.SelectedItemsList; import org.roda.core.data.v2.ri.RepresentationInformation; import org.roda.wui.client.browse.BrowserService; @@ -27,8 +22,10 @@ import org.roda.wui.client.common.UserLogin; import org.roda.wui.client.common.dialogs.RepresentationInformationDialogs; import org.roda.wui.client.common.lists.RepresentationInformationList; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; import org.roda.wui.client.common.search.SearchFilters; -import org.roda.wui.client.common.search.SearchPanel; +import org.roda.wui.client.common.search.SearchWrapper; import org.roda.wui.client.common.utils.JavascriptUtils; import org.roda.wui.common.client.HistoryResolver; import org.roda.wui.common.client.tools.HistoryUtils; @@ -50,7 +47,6 @@ import com.google.gwt.user.client.ui.InlineHTML; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; -import com.google.gwt.view.client.SelectionChangeEvent; import config.i18n.client.ClientMessages; @@ -97,12 +93,6 @@ interface MyUiBinder extends UiBinder> valueChangeHandler = event -> { + boolean associating = gettingFilterResults && event.getValue().getTotalCount() == 0; + resultsPanel.setVisible(!associating); + createPanel.setVisible(associating); + }; + + ListBuilder representationInformationAssociationsListBuilder = new ListBuilder<>( + RepresentationInformationList::new, + new AsyncTableCell.Options<>(RepresentationInformation.class, "RepresentationInformationAssociations_RI") + .bindOpener().addValueChangedHandler(valueChangeHandler)); + + searchWrapper = new SearchWrapper(false).createListAndSearchPanel(representationInformationAssociationsListBuilder, + messages.representationInformationRegisterSearchPlaceHolder()); initWidget(uiBinder.createAndBindUi(this)); resultsPanel.setVisible(false); createPanel.setVisible(false); - searchPanel.addValueChangeHandler(new ValueChangeHandler() { + searchWrapper.addSearchFieldTextValueChangeHandler(RepresentationInformation.class, + new ValueChangeHandler() { @Override public void onValueChange(ValueChangeEvent valueChangeEvent) { // the user is searching. use this flag to avoid showing the options to @@ -154,28 +152,6 @@ public void onValueChange(ValueChangeEvent valueChangeEvent) { } }); - representationInformationList.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() { - @Override - public void onSelectionChange(SelectionChangeEvent event) { - RepresentationInformation selected = representationInformationList.getSelectionModel().getSelectedObject(); - if (selected != null) { - LastSelectedItemsSingleton selectedItems = LastSelectedItemsSingleton.getInstance(); - selectedItems.setLastHistory(HistoryUtils.getCurrentHistoryPath()); - HistoryUtils.newHistory(ShowRepresentationInformation.RESOLVER, selected.getId()); - } - } - }); - - representationInformationList - .addValueChangeHandler(new ValueChangeHandler>() { - @Override - public void onValueChange(ValueChangeEvent> event) { - boolean associating = gettingFilterResults && event.getValue().getTotalCount() == 0; - resultsPanel.setVisible(!associating); - createPanel.setVisible(associating); - } - }); - Label titleLabel = new Label(messages.representationInformationAssociationsTitle()); titleLabel.addStyleName("h1 browseItemText"); title.add(titleLabel); @@ -205,7 +181,7 @@ public void onSuccess(Void result) { selectedItemsList.getIds().get(0)); } else { gettingFilterResults = false; - representationInformationList.refresh(); + searchWrapper.refreshCurrentList(); createPanel.setVisible(false); resultsPanel.setVisible(true); } @@ -219,12 +195,7 @@ public void onSuccess(Void result) { } }); - buttonCreateNewRI.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent clickEvent) { - addToNewClickHandler(); - } - }); + buttonCreateNewRI.addClickHandler(clickEvent -> addToNewClickHandler()); } /** @@ -250,18 +221,15 @@ public void resolve(List historyTokens, AsyncCallback callback) createPanel.setVisible(false); resultsPanel.setVisible(false); - if (historyTokens.size() == 2) { - Filter filter = createFilterFromHistoryTokens(historyTokens); - + if (historyTokens.size() >= 2) { String[] parts = RepresentationInformationUtils.breakFilterIntoParts(historyTokens.get(1)); createPanelTitle.setHTML(messages.representationInformationNoAssociations(parts[0], parts[1], parts[2])); resultsPanelTitle.setHTML(messages.representationInformationAssociatedWith(parts[0], parts[1], parts[2])); description.setHTML(messages.representationInformationAssociatedWithDescription(parts[0], parts[1], parts[2])); addWithAssociationDialogTitle = messages.representationInformationAssociateWith(parts[0], parts[1], parts[2]); - searchPanel.setDefaultFilter(filter, true); - representationInformationList.setFilter(filter); - searchPanel.clearSearchInputBox(); + searchWrapper.setFilter(RepresentationInformation.class, + SearchFilters.createFilterFromHistoryTokens(historyTokens)); callback.onSuccess(this); } else { @@ -270,15 +238,6 @@ public void resolve(List historyTokens, AsyncCallback callback) } } - private Filter createFilterFromHistoryTokens(List historyTokens) { - List params = new ArrayList<>(); - if (historyTokens.size() == (2)) { - params.add(new SimpleFilterParameter(historyTokens.get(0), historyTokens.get(1))); - } - - return new Filter(new OrFiltersParameters(params)); - } - private void addToNewClickHandler() { LastSelectedItemsSingleton selectedItems = LastSelectedItemsSingleton.getInstance(); selectedItems.setLastHistory(HistoryUtils.getCurrentHistoryPath()); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RepresentationInformationAssociations.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RepresentationInformationAssociations.ui.xml index bfc245a1b6..f7323dc781 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RepresentationInformationAssociations.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RepresentationInformationAssociations.ui.xml @@ -27,8 +27,7 @@ - - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RepresentationInformationDataPanel.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RepresentationInformationDataPanel.java index 011dba6611..7b21fbf48e 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RepresentationInformationDataPanel.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RepresentationInformationDataPanel.java @@ -26,7 +26,6 @@ import org.roda.wui.client.common.LastSelectedItemsSingleton; import org.roda.wui.client.common.utils.AsyncCallbackUtils; import org.roda.wui.client.common.utils.FormUtilities; -import org.roda.wui.common.client.ClientLogger; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ChangeEvent; @@ -57,7 +56,7 @@ interface MyUiBinder extends UiBinder FlowPanel registerDescription; @UiField(provided = true) - SearchPanel searchPanel; - - @UiField(provided = true) - RepresentationInformationList representationInformationList; + SearchWrapper searchPanel; @UiField FlowPanel sidebar; @@ -103,40 +96,23 @@ interface MyUiBinder extends UiBinder @UiField SimplePanel actionsSidebar; - private static final Filter DEFAULT_FILTER = SearchFilters.defaultFilter(RepresentationInformation.class.getName()); - private static final String ALL_FILTER = SearchFilters.allFilter(RepresentationInformation.class.getName()); - - private final Filter filter = DEFAULT_FILTER; - /** * Create a representation information page */ public RepresentationInformationNetwork() { - representationInformationList = new RepresentationInformationList("RepresentationInformationNetwork_RI", filter, - messages.representationInformationTitle(), true); - representationInformationList.setActionable(RepresentationInformationActions.get()); + ListBuilder representationInformationListBuilder = new ListBuilder<>( + RepresentationInformationList::new, + new AsyncTableCell.Options<>(RepresentationInformation.class, "RepresentationInformationNetwork_RI") + .withSummary(messages.representationInformationTitle()).bindOpener()); - searchPanel = new SearchPanel(DEFAULT_FILTER, ALL_FILTER, true, - messages.representationInformationRegisterSearchPlaceHolder(), false, false, false); - searchPanel.setList(representationInformationList); + searchPanel = new SearchWrapper(false).createListAndSearchPanel(representationInformationListBuilder, + RepresentationInformationActions.get(), messages.representationInformationRegisterSearchPlaceHolder()); initWidget(uiBinder.createAndBindUi(this)); actionsSidebar.setWidget(new ActionableWidgetBuilder<>(RepresentationInformationActions.get()) .buildListWithObjects(new ActionableObject<>(RepresentationInformation.class))); - representationInformationList.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() { - @Override - public void onSelectionChange(SelectionChangeEvent event) { - RepresentationInformation selected = representationInformationList.getSelectionModel().getSelectedObject(); - if (selected != null) { - LastSelectedItemsSingleton selectedItems = LastSelectedItemsSingleton.getInstance(); - selectedItems.setLastHistory(HistoryUtils.getCurrentHistoryPath()); - HistoryUtils.newHistory(ShowRepresentationInformation.RESOLVER, selected.getId()); - } - } - }); - Label titleLabel = new Label(messages.representationInformationRegisterTitle()); titleLabel.addStyleName("h1 browseItemText"); title.add(titleLabel); @@ -164,11 +140,7 @@ protected void onLoad() { public void resolve(List historyTokens, AsyncCallback callback) { if (historyTokens.isEmpty()) { - filter.setParameters(new ArrayList<>()); - searchPanel.setDefaultFilter(filter, true); - representationInformationList.setFilter(filter); - searchPanel.clearSearchInputBox(); - + searchPanel.setFilter(RepresentationInformation.class, SearchFilters.allFilter()); callback.onSuccess(this); } else { String basePage = historyTokens.remove(0); @@ -181,11 +153,8 @@ public void resolve(List historyTokens, AsyncCallback callback) } else if (RepresentationInformationAssociations.RESOLVER.getHistoryToken().equals(basePage)) { RepresentationInformationAssociations.RESOLVER.resolve(historyTokens, callback); } else if (Search.RESOLVER.getHistoryToken().equals(basePage)) { - setFilterFromHistoryTokens(historyTokens); - searchPanel.setDefaultFilter(filter, true); - representationInformationList.setFilter(filter); - searchPanel.clearSearchInputBox(); - + searchPanel.setFilter(RepresentationInformation.class, + SearchFilters.createFilterFromHistoryTokens(historyTokens)); callback.onSuccess(this); } else { HistoryUtils.newHistory(RESOLVER); @@ -193,13 +162,4 @@ public void resolve(List historyTokens, AsyncCallback callback) } } } - - private void setFilterFromHistoryTokens(List historyTokens) { - List params = new ArrayList<>(); - if (historyTokens.size() == (2)) { - params.add(new SimpleFilterParameter(historyTokens.get(0), historyTokens.get(1))); - } - - filter.setParameters(params); - } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RepresentationInformationNetwork.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RepresentationInformationNetwork.ui.xml index 9d66d7ace8..5e40afb1a7 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RepresentationInformationNetwork.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RepresentationInformationNetwork.ui.xml @@ -12,8 +12,7 @@ - - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskDataPanel.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskDataPanel.java index 9bbc644308..920cd741d1 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskDataPanel.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskDataPanel.java @@ -12,13 +12,10 @@ import java.util.List; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.select.SelectedItems; import org.roda.core.data.v2.risks.IndexedRisk; import org.roda.core.data.v2.risks.Risk; -import org.roda.core.data.v2.risks.RiskIncidence; import org.roda.wui.client.browse.BrowserService; import org.roda.wui.client.common.IncrementalList; -import org.roda.wui.client.common.lists.RiskIncidenceList; import org.roda.wui.client.common.search.SearchSuggestBox; import org.roda.wui.client.common.utils.HtmlSnippetUtils; import org.roda.wui.common.client.ClientLogger; @@ -58,7 +55,7 @@ interface MyUiBinder extends UiBinder { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static ClientMessages messages = GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); @UiField Label id; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskHistory.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskHistory.java index 5f4625ab72..b10e0c0dda 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskHistory.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskHistory.java @@ -97,7 +97,7 @@ interface MyUiBinder extends UiBinder { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static ClientMessages messages = GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private final String riskId; private RiskVersionsBundle bundle; @@ -128,7 +128,7 @@ public RiskHistory(final String riskId, final RiskVersionsBundle bundle) { this.riskId = riskId; this.bundle = bundle; - oldRisk = new RiskShowPanel(bundle.getLastRisk(), false); + oldRisk = new RiskShowPanel(bundle.getLastRisk(), "RiskHistory_riskIncidences", false); initWidget(uiBinder.createAndBindUi(this)); init(); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskIncidenceRegister.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskIncidenceRegister.java index c17d5e5202..0f3685644b 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskIncidenceRegister.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskIncidenceRegister.java @@ -12,58 +12,43 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Date; import java.util.List; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.DateRangeFilterParameter; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.filter.SimpleFilterParameter; -import org.roda.core.data.v2.index.select.SelectedItems; import org.roda.core.data.v2.risks.RiskIncidence; -import org.roda.wui.client.browse.BrowseAIP; +import org.roda.wui.client.browse.BrowseTop; import org.roda.wui.client.browse.BrowserService; import org.roda.wui.client.browse.bundle.BrowseAIPBundle; import org.roda.wui.client.browse.bundle.BrowseFileBundle; import org.roda.wui.client.browse.bundle.BrowseRepresentationBundle; -import org.roda.wui.client.common.LastSelectedItemsSingleton; import org.roda.wui.client.common.UserLogin; -import org.roda.wui.client.common.dialogs.Dialogs; +import org.roda.wui.client.common.actions.RiskIncidenceActions; import org.roda.wui.client.common.lists.RiskIncidenceList; -import org.roda.wui.client.common.lists.utils.AsyncTableCell.CheckboxSelectionListener; -import org.roda.wui.client.common.lists.utils.ClientSelectedItemsUtils; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; import org.roda.wui.client.common.search.SearchFilters; -import org.roda.wui.client.common.search.SearchPanel; +import org.roda.wui.client.common.search.SearchWrapper; import org.roda.wui.client.common.utils.AsyncCallbackUtils; import org.roda.wui.client.common.utils.JavascriptUtils; import org.roda.wui.client.common.utils.StringUtils; import org.roda.wui.client.main.BreadcrumbPanel; import org.roda.wui.client.main.BreadcrumbUtils; -import org.roda.wui.client.welcome.Welcome; import org.roda.wui.common.client.HistoryResolver; import org.roda.wui.common.client.tools.HistoryUtils; import org.roda.wui.common.client.tools.ListUtils; import org.roda.wui.common.client.widgets.HTMLWidgetWrapper; -import org.roda.wui.common.client.widgets.Toast; import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.logical.shared.ValueChangeEvent; -import com.google.gwt.event.logical.shared.ValueChangeHandler; -import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.i18n.client.LocaleInfo; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.rpc.AsyncCallback; -import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; -import com.google.gwt.user.datepicker.client.DateBox; -import com.google.gwt.user.datepicker.client.DateBox.DefaultFormat; -import com.google.gwt.view.client.SelectionChangeEvent; import config.i18n.client.ClientMessages; @@ -78,7 +63,8 @@ public class RiskIncidenceRegister extends Composite { @Override public void resolve(List historyTokens, AsyncCallback callback) { if (historyTokens.isEmpty()) { - RiskIncidenceRegister riskIncidences = new RiskIncidenceRegister(null, null, null, null, Filter.ALL); + RiskIncidenceRegister riskIncidences = new RiskIncidenceRegister(null, null, null, null, + SearchFilters.allFilter()); callback.onSuccess(riskIncidences); } else if (historyTokens.size() == 2 && historyTokens.get(0).equals(ShowRiskIncidence.RESOLVER.getHistoryToken())) { @@ -153,7 +139,7 @@ interface MyUiBinder extends UiBinder { private static final List fileFieldsToReturn = new ArrayList<>( Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.FILE_PARENT_UUID, RodaConstants.FILE_PATH, - RodaConstants.FILE_ANCESTORS_PATH, RodaConstants.FILE_ORIGINALNAME, RodaConstants.FILE_FILE_ID, + RodaConstants.FILE_ANCESTORS_PATH, RodaConstants.FILE_ORIGINALNAME, RodaConstants.INDEX_ID, RodaConstants.FILE_AIP_ID, RodaConstants.FILE_REPRESENTATION_ID, RodaConstants.FILE_ISDIRECTORY)); @UiField @@ -166,120 +152,42 @@ interface MyUiBinder extends UiBinder { FlowPanel riskIncidenceRegisterDescription; @UiField(provided = true) - SearchPanel searchPanel; - - @UiField(provided = true) - RiskIncidenceList riskIncidenceList; - - @UiField - DateBox inputDateInitial; - - @UiField - DateBox inputDateFinal; - - @UiField - Button buttonRemove, buttonCancel; - - private static final String ALL_FILTER = SearchFilters.allFilter(RiskIncidence.class.getName()); - - private String aipId = null; - private String representationId = null; - private List filePath = null; - private String fileId = null; - - /** - * Create a risk register page - * - * @param user - */ + SearchWrapper searchWrapper; public RiskIncidenceRegister(String aipId, String representationId, List filePath, String fileId, Filter filter) { - this.aipId = aipId; - this.representationId = representationId; - this.filePath = filePath; - this.fileId = fileId; - - riskIncidenceList = new RiskIncidenceList("RiskIncidenceRegister_risks", filter, messages.riskIncidencesTitle(), - true); - - searchPanel = new SearchPanel(filter, ALL_FILTER, true, messages.riskIncidenceRegisterSearchPlaceHolder(), false, - false, false); - searchPanel.setList(riskIncidenceList); - - riskIncidenceList.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() { - @Override - public void onSelectionChange(SelectionChangeEvent event) { - final RiskIncidence selected = riskIncidenceList.getSelectionModel().getSelectedObject(); - if (selected != null) { - LastSelectedItemsSingleton.getInstance().setLastHistory(HistoryUtils.getCurrentHistoryPath()); - HistoryUtils.newHistory(RiskIncidenceRegister.RESOLVER, ShowRiskIncidence.RESOLVER.getHistoryToken(), - selected.getId()); - } - } - }); - - riskIncidenceList.addCheckboxSelectionListener(new CheckboxSelectionListener() { - @Override - public void onSelectionChange(SelectedItems selected) { - boolean empty = ClientSelectedItemsUtils.isEmpty(selected); - if (empty) { - buttonRemove.setEnabled(false); - } else { - buttonRemove.setEnabled(true); - } - } - }); - - initWidget(uiBinder.createAndBindUi(this)); - riskIncidenceRegisterDescription.add(new HTMLWidgetWrapper("RiskIncidenceRegisterDescription.html")); - buttonRemove.setEnabled(false); - - DefaultFormat dateFormat = new DateBox.DefaultFormat(DateTimeFormat.getFormat("yyyy-MM-dd")); - ValueChangeHandler valueChangeHandler = new ValueChangeHandler() { - - @Override - public void onValueChange(ValueChangeEvent event) { - updateDateFilter(); - } - }; - inputDateInitial.setFormat(dateFormat); - inputDateInitial.getDatePicker().setYearArrowsVisible(true); - inputDateInitial.setFireNullValues(true); - inputDateInitial.addValueChangeHandler(valueChangeHandler); - inputDateInitial.setTitle(messages.dateIntervalLabelInitial()); + ListBuilder riskIncidenceListBuilder = new ListBuilder<>(RiskIncidenceList::new, + new AsyncTableCell.Options<>(RiskIncidence.class, "RiskIncidenceRegister_risks").withFilter(filter) + .withSummary(messages.riskIncidencesTitle()).bindOpener()); - inputDateFinal.setFormat(dateFormat); - inputDateFinal.getDatePicker().setYearArrowsVisible(true); - inputDateFinal.setFireNullValues(true); - inputDateFinal.addValueChangeHandler(valueChangeHandler); - inputDateFinal.setTitle(messages.dateIntervalLabelFinal()); + searchWrapper = new SearchWrapper(false).createListAndSearchPanel(riskIncidenceListBuilder, + RiskIncidenceActions.getForMultipleEdit(), messages.riskIncidenceRegisterSearchPlaceHolder()); - inputDateInitial.getElement().setPropertyString("placeholder", messages.sidebarFilterFromDatePlaceHolder()); - inputDateFinal.getElement().setPropertyString("placeholder", messages.sidebarFilterToDatePlaceHolder()); + initWidget(uiBinder.createAndBindUi(this)); + riskIncidenceRegisterDescription.add(new HTMLWidgetWrapper("RiskIncidenceRegisterDescription.html")); // create breadcrumbs breadcrumb.setVisible(true); if (fileId != null) { - getFileBreadCrumbs(); + getFileBreadCrumbs(aipId, representationId, filePath, fileId); } else if (representationId != null) { - getRepresentationBreadCrumbs(); + getRepresentationBreadCrumbs(aipId, representationId); } else if (aipId != null) { - getAIPBreadCrumbs(); + getAIPBreadCrumbs(aipId); } else { breadcrumb.setVisible(false); } } - private void getAIPBreadCrumbs() { + private void getAIPBreadCrumbs(String aipId) { BrowserService.Util.getInstance().retrieveBrowseAIPBundle(aipId, LocaleInfo.getCurrentLocale().getLocaleName(), aipFieldsToReturn, new AsyncCallback() { @Override public void onFailure(Throwable caught) { AsyncCallbackUtils.defaultFailureTreatment(caught); - HistoryUtils.newHistory(BrowseAIP.RESOLVER); + HistoryUtils.newHistory(BrowseTop.RESOLVER); } @Override @@ -291,7 +199,7 @@ public void onSuccess(BrowseAIPBundle itemBundle) { }); } - private void getRepresentationBreadCrumbs() { + private void getRepresentationBreadCrumbs(String aipId, String representationId) { BrowserService.Util.getInstance().retrieveBrowseRepresentationBundle(aipId, representationId, LocaleInfo.getCurrentLocale().getLocaleName(), representationFieldsToReturn, new AsyncCallback() { @@ -309,7 +217,7 @@ public void onSuccess(BrowseRepresentationBundle repBundle) { }); } - private void getFileBreadCrumbs() { + private void getFileBreadCrumbs(String aipId, String representationId, List filePath, String fileId) { BrowserService.Util.getInstance().retrieveBrowseFileBundle(aipId, representationId, filePath, fileId, fileFieldsToReturn, new AsyncCallback() { @@ -331,75 +239,4 @@ protected void onLoad() { super.onLoad(); JavascriptUtils.stickSidebar(); } - - private void updateDateFilter() { - Date dateInitial = inputDateInitial.getDatePicker().getValue(); - Date dateFinal = inputDateFinal.getDatePicker().getValue(); - - DateRangeFilterParameter filterParameter = new DateRangeFilterParameter(RodaConstants.RISK_INCIDENCE_DETECTED_ON, - dateInitial, dateFinal, RodaConstants.DateGranularity.DAY); - - riskIncidenceList.setFilter(new Filter(filterParameter)); - } - - @UiHandler("buttonRemove") - void buttonRemoveRiskHandler(ClickEvent e) { - final SelectedItems selected = riskIncidenceList.getSelected(); - - ClientSelectedItemsUtils.size(RiskIncidence.class, selected, new AsyncCallback() { - - @Override - public void onFailure(Throwable caught) { - AsyncCallbackUtils.defaultFailureTreatment(caught); - } - - @Override - public void onSuccess(final Long size) { - Dialogs.showConfirmDialog(messages.riskRemoveFolderConfirmDialogTitle(), - messages.riskRemoveSelectedConfirmDialogMessage(size), messages.riskRemoveFolderConfirmDialogCancel(), - messages.riskRemoveFolderConfirmDialogOk(), new AsyncCallback() { - - @Override - public void onFailure(Throwable caught) { - AsyncCallbackUtils.defaultFailureTreatment(caught); - } - - @Override - public void onSuccess(Boolean confirmed) { - if (confirmed) { - buttonRemove.setEnabled(false); - BrowserService.Util.getInstance().deleteRiskIncidences(selected, new AsyncCallback() { - - @Override - public void onFailure(Throwable caught) { - AsyncCallbackUtils.defaultFailureTreatment(caught); - riskIncidenceList.refresh(); - } - - @Override - public void onSuccess(Void result) { - Toast.showInfo(messages.riskRemoveSuccessTitle(), messages.riskRemoveSuccessMessage(size)); - riskIncidenceList.refresh(); - } - }); - } - } - }); - } - }); - } - - @UiHandler("buttonCancel") - void buttonCancelHandler(ClickEvent e) { - if (fileId != null) { - HistoryUtils.openBrowse(aipId, representationId, filePath, fileId); - } else if (representationId != null) { - HistoryUtils.openBrowse(aipId, representationId); - } else if (aipId != null) { - HistoryUtils.openBrowse(aipId); - } else { - HistoryUtils.newHistory(Welcome.RESOLVER); - } - } - } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskIncidenceRegister.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskIncidenceRegister.ui.xml index aeb85059d3..12d109b9e0 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskIncidenceRegister.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskIncidenceRegister.ui.xml @@ -11,44 +11,13 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskRegister.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskRegister.java index 68938d4bc4..7819ade5a6 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskRegister.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskRegister.java @@ -92,9 +92,7 @@ interface MyUiBinder extends UiBinder { * Create a risk register page */ public RiskRegister() { - riskSearch = new RiskSearch("RiskRegister_risks", "RiskRegister_riskIncidences"); - riskSearch.defaultFilters(); - riskSearch.getList().setActionable(RiskActions.get()); + riskSearch = new RiskSearch(); initWidget(uiBinder.createAndBindUi(this)); riskRegisterDescription.add(new HTMLWidgetWrapper("RiskRegisterDescription.html")); @@ -102,8 +100,8 @@ public RiskRegister() { new ActionableWidgetBuilder<>(RiskActions.get()).withCallback(new NoAsyncCallback() { @Override public void onSuccess(Actionable.ActionImpact result) { - if (result.equals(Actionable.ActionImpact.DESTROYED)) { - HistoryUtils.newHistory(RiskRegister.RESOLVER); + if (Actionable.ActionImpact.DESTROYED.equals(result) || Actionable.ActionImpact.UPDATED.equals(result)) { + riskSearch.refresh(); } } }).buildListWithObjects(new ActionableObject<>(IndexedRisk.class))); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskShowPanel.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskShowPanel.java index 7f7dee69eb..60a327084f 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskShowPanel.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskShowPanel.java @@ -8,24 +8,19 @@ package org.roda.wui.client.planning; -import com.google.gwt.user.client.ui.FlowPanel; import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.BasicSearchFilterParameter; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.filter.SimpleFilterParameter; -import org.roda.core.data.v2.index.select.SelectedItems; import org.roda.core.data.v2.risks.Risk; import org.roda.core.data.v2.risks.RiskIncidence; import org.roda.wui.client.browse.BrowserService; -import org.roda.wui.client.common.LastSelectedItemsSingleton; import org.roda.wui.client.common.actions.RiskIncidenceActions; import org.roda.wui.client.common.lists.RiskIncidenceList; -import org.roda.wui.client.common.search.SearchFilters; -import org.roda.wui.client.common.search.SearchPanel; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.client.common.search.SearchWrapper; import org.roda.wui.client.common.utils.HtmlSnippetUtils; import org.roda.wui.client.common.utils.StringUtils; -import org.roda.wui.common.client.ClientLogger; -import org.roda.wui.common.client.tools.HistoryUtils; import org.roda.wui.common.client.tools.Humanize; import com.google.gwt.core.client.GWT; @@ -37,6 +32,7 @@ import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; @@ -53,7 +49,7 @@ interface MyUiBinder extends UiBinder { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static ClientMessages messages = GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); @UiField Label title; @@ -137,45 +133,28 @@ interface MyUiBinder extends UiBinder { Label riskMitigationRelatedEventIdentifierValueKey, riskMitigationRelatedEventIdentifierValueValue; @UiField(provided = true) - SearchPanel searchPanel; + SearchWrapper searchWrapper; - @UiField(provided = true) - RiskIncidenceList incidenceList; + public RiskShowPanel(String listId) { - private static final Filter DEFAULT_FILTER = SearchFilters.defaultFilter(RiskIncidence.class.getName()); - private static final String ALL_FILTER = SearchFilters.allFilter(RiskIncidence.class.getName()); + ListBuilder riskIncidenceListBuilder = new ListBuilder<>(RiskIncidenceList::new, + new AsyncTableCell.Options<>(RiskIncidence.class, listId).withSummary(messages.riskIncidences())); - public RiskShowPanel() { - incidenceList = new RiskIncidenceList("RiskShowPanel_riskIncidences", Filter.NULL, messages.riskIncidences(), true); - incidenceList.setActionable(RiskIncidenceActions.getForMultipleEdit()); - - searchPanel = new SearchPanel(DEFAULT_FILTER, ALL_FILTER, true, messages.riskIncidenceRegisterSearchPlaceHolder(), - false, false, false); - searchPanel.setList(incidenceList); + searchWrapper = new SearchWrapper(false).createListAndSearchPanel(riskIncidenceListBuilder, + RiskIncidenceActions.getForMultipleEdit(), messages.riskIncidenceRegisterSearchPlaceHolder()); initWidget(uiBinder.createAndBindUi(this)); } - public RiskShowPanel(Risk risk, boolean hasTitle) { + public RiskShowPanel(Risk risk, String listId, boolean hasTitle) { Filter filter = new Filter(new SimpleFilterParameter(RodaConstants.RISK_INCIDENCE_RISK_ID, risk.getId())); - incidenceList = new RiskIncidenceList("RiskShowPanel_riskIncidences", filter, messages.riskIncidences(), hasTitle); - incidenceList.setActionable(RiskIncidenceActions.getForMultipleEdit()); - - Filter incidenceFilter = new Filter(new BasicSearchFilterParameter(RodaConstants.RISK_INCIDENCE_SEARCH, "*"), - new SimpleFilterParameter(RodaConstants.RISK_INCIDENCE_RISK_ID, risk.getId())); - searchPanel = new SearchPanel(incidenceFilter, ALL_FILTER, true, messages.riskIncidenceRegisterSearchPlaceHolder(), - false, false, false); - searchPanel.setList(incidenceList); + ListBuilder riskIncidenceListBuilder = new ListBuilder<>(RiskIncidenceList::new, + new AsyncTableCell.Options<>(RiskIncidence.class, listId).withSummary(messages.riskIncidences()) + .withFilter(filter).bindOpener()); - incidenceList.getSelectionModel().addSelectionChangeHandler(event -> { - final RiskIncidence selected = incidenceList.getSelectionModel().getSelectedObject(); - if (selected != null) { - LastSelectedItemsSingleton.getInstance().setLastHistory(HistoryUtils.getCurrentHistoryPath()); - HistoryUtils.newHistory(RiskIncidenceRegister.RESOLVER, ShowRiskIncidence.RESOLVER.getHistoryToken(), - selected.getId()); - } - }); + searchWrapper = new SearchWrapper(false).createListAndSearchPanel(riskIncidenceListBuilder, + RiskIncidenceActions.getForMultipleEdit(), messages.riskIncidenceRegisterSearchPlaceHolder()); initWidget(uiBinder.createAndBindUi(this)); title.setVisible(hasTitle); @@ -352,12 +331,4 @@ public void clear() { public HandlerRegistration addValueChangeHandler(ValueChangeHandler handler) { return addHandler(handler, ValueChangeEvent.getType()); } - - public SelectedItems getSelectedIncidences() { - return incidenceList.getSelected(); - } - - public void refreshList() { - incidenceList.refresh(); - } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskShowPanel.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskShowPanel.ui.xml index 18de4751a8..cd5bf48966 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskShowPanel.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/RiskShowPanel.ui.xml @@ -159,8 +159,7 @@ - - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowFormat.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowFormat.java index 441d9793d3..ec90c6718f 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowFormat.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowFormat.java @@ -80,7 +80,7 @@ interface MyUiBinder extends UiBinder { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static ClientMessages messages = GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private static final List fieldsToReturn = Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.FORMAT_ID, RodaConstants.FORMAT_NAME, RodaConstants.FORMAT_DEFINITION, RodaConstants.FORMAT_CATEGORY, @@ -172,6 +172,7 @@ interface MyUiBinder extends UiBinder { @UiField SimplePanel actionsSidebar; + private ActionableWidgetBuilder actionableWidgetBuilder = new ActionableWidgetBuilder<>(FormatActions.get()) .withCallback(new NoAsyncCallback() { @Override diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowPreservationAgent.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowPreservationAgent.java index 28edac1f9a..7e4ac46b36 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowPreservationAgent.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowPreservationAgent.java @@ -86,7 +86,7 @@ interface MyUiBinder extends UiBinder { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private static final List fieldsToReturn = Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.PRESERVATION_AGENT_ID, RodaConstants.PRESERVATION_AGENT_NAME, RodaConstants.PRESERVATION_AGENT_TYPE, diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowRepresentationInformation.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowRepresentationInformation.java index 4d0e82c529..bf78031d16 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowRepresentationInformation.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowRepresentationInformation.java @@ -108,7 +108,7 @@ interface MyUiBinder extends UiBinder { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static ClientMessages messages = GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private static final List fieldsToReturn = new ArrayList<>(); @@ -158,6 +158,7 @@ interface MyUiBinder extends UiBinder { @UiField SimplePanel actionsSidebar; + private ActionableWidgetBuilder actionableWidgetBuilder; private List aipParams = new ArrayList<>(); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowRisk.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowRisk.java index c701334650..3e0f33d83a 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowRisk.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowRisk.java @@ -68,7 +68,7 @@ public String getHistoryToken() { }; private static ShowRisk instance = null; - private static ClientMessages messages = GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); interface MyUiBinder extends UiBinder { } @@ -95,8 +95,6 @@ public void onSuccess(Actionable.ActionImpact result) { } }; - private IndexedRisk risk; - @UiField(provided = true) RiskShowPanel riskShowPanel; @@ -109,14 +107,12 @@ public void onSuccess(Actionable.ActionImpact result) { * */ public ShowRisk() { - this.risk = new IndexedRisk(); - this.riskShowPanel = new RiskShowPanel(); + this.riskShowPanel = new RiskShowPanel("RiskShowPanel_riskIncidences"); initWidget(uiBinder.createAndBindUi(this)); } public ShowRisk(IndexedRisk risk) { - this.risk = risk; - this.riskShowPanel = new RiskShowPanel(risk, true); + this.riskShowPanel = new RiskShowPanel(risk, "RiskShowPanel_riskIncidences", true); initWidget(uiBinder.createAndBindUi(this)); // actionsSidebar is set in the resolve callback } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowRiskIncidence.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowRiskIncidence.java index 6dd2c33fd2..d7cbec0997 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowRiskIncidence.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/planning/ShowRiskIncidence.java @@ -79,7 +79,7 @@ interface MyUiBinder extends UiBinder { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - private static ClientMessages messages = GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private static final List fieldsToReturn = Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.RISK_INCIDENCE_ID, RodaConstants.RISK_INCIDENCE_RISK_ID, RodaConstants.RISK_INCIDENCE_DESCRIPTION, diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/ActionProcess.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/ActionProcess.java index d77dd57871..5d65933a8a 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/ActionProcess.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/ActionProcess.java @@ -86,7 +86,7 @@ private ActionProcess() { Filter actionFilter = new Filter( new NotSimpleFilterParameter(RodaConstants.JOB_PLUGIN_TYPE, PluginType.INTERNAL.toString()), new NotSimpleFilterParameter(RodaConstants.JOB_PLUGIN_TYPE, PluginType.INGEST.toString())); - jobSearch = new JobSearch("ActionProcess_jobs", "ActionProcess_reports", actionFilter, false); + jobSearch = new JobSearch("ActionProcess_jobs", "ActionProcess_reports", actionFilter, actionFilter, false); initWidget(uiBinder.createAndBindUi(this)); preservationProcessDescription.add(new HTMLWidgetWrapper("PreservationProcessDescription.html")); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/CreateActionJob.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/CreateActionJob.java index d78c18eaac..7e8a009849 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/CreateActionJob.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/CreateActionJob.java @@ -24,8 +24,9 @@ import org.roda.wui.client.browse.BrowserService; import org.roda.wui.client.common.LastSelectedItemsSingleton; import org.roda.wui.client.common.dialogs.Dialogs; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; import org.roda.wui.client.common.lists.utils.ListFactory; +import org.roda.wui.client.common.search.SearchWrapper; import org.roda.wui.client.common.utils.AsyncCallbackUtils; import org.roda.wui.client.common.utils.PluginUtils; import org.roda.wui.client.search.Search; @@ -71,11 +72,12 @@ public boolean updateObjectList() { } ListFactory listFactory = new ListFactory(); - BasicAsyncTableCell list = listFactory.getList(selected.getSelectedClass(), - messages.allOfAObject(selected.getSelectedClass()), filter, selectable, 10, 10); + ListBuilder listBuilder = listFactory.getListBuilder("CreateActionJob", + selected.getSelectedClass(), messages.allOfAObject(selected.getSelectedClass()), filter, 10, 10); - if (list != null) { - getTargetPanel().add(list); + if (listBuilder != null) { + SearchWrapper search = new SearchWrapper(false).createListAndSearchPanel(listBuilder); + getTargetPanel().add(search); } else { HistoryUtils.newHistory(CreateDefaultJob.RESOLVER); } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/CreateDefaultJob.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/CreateDefaultJob.java index a3eef97800..9e84378548 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/CreateDefaultJob.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/CreateDefaultJob.java @@ -16,6 +16,7 @@ import java.util.Set; import org.roda.core.data.common.RodaConstants; +import org.roda.core.data.v2.index.IsIndexed; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.select.SelectedItems; import org.roda.core.data.v2.index.select.SelectedItemsAll; @@ -38,12 +39,12 @@ import org.roda.wui.client.browse.BrowserService; import org.roda.wui.client.common.UserLogin; import org.roda.wui.client.common.dialogs.Dialogs; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; import org.roda.wui.client.common.lists.utils.AsyncTableCell.CheckboxSelectionListener; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; import org.roda.wui.client.common.lists.utils.ClientSelectedItemsUtils; +import org.roda.wui.client.common.lists.utils.ListBuilder; import org.roda.wui.client.common.lists.utils.ListFactory; -import org.roda.wui.client.common.search.SearchFilters; -import org.roda.wui.client.common.search.SearchPanel; +import org.roda.wui.client.common.search.SearchWrapper; import org.roda.wui.client.common.utils.JavascriptUtils; import org.roda.wui.client.common.utils.PluginUtils; import org.roda.wui.client.ingest.process.PluginOptionsPanel; @@ -118,7 +119,7 @@ public interface MyUiBinder extends UiBinder { private static final ClientMessages messages = GWT.create(ClientMessages.class); @SuppressWarnings("rawtypes") - private BasicAsyncTableCell list = null; + private AsyncTableCell list = null; private List plugins = null; private PluginInfo selectedPlugin = null; private boolean isListEmpty = true; @@ -459,29 +460,22 @@ private PluginInfo lookupPlugin(String selectedPluginId) { private void defineTargetInformation(String objectClassName) { ListFactory listFactory = new ListFactory(); isListEmpty = true; - BasicAsyncTableCell tableList = listFactory.getList(objectClassName, "", Filter.ALL, true, 10, 50); - if (tableList == null) { + ListBuilder listBuilder = listFactory.getListBuilder("CreateDefaultJob", objectClassName, "", + Filter.ALL, 10, 50); + + if (listBuilder != null) { + listBuilder.getOptions().addStyleName("searchResults").addCheckboxSelectionListener( + (CheckboxSelectionListener) selected -> isListEmpty = ClientSelectedItemsUtils.isEmpty(selected)); + + SearchWrapper search = new SearchWrapper(false).createListAndSearchPanel(listBuilder); + + targetListPanel.add(search); + targetListPanel.setVisible(true); + } else { targetListPanel.setVisible(false); - return; } - SearchPanel searchPanel = new SearchPanel(SearchFilters.defaultFilter(objectClassName), - SearchFilters.allFilter(objectClassName), true, "", false, false, true); - searchPanel.setList(tableList); - targetListPanel.add(searchPanel); - targetListPanel.add(tableList); - targetListPanel.setVisible(true); - tableList.addStyleName("searchResults"); - this.list = tableList; - - this.list.addCheckboxSelectionListener(new CheckboxSelectionListener() { - @Override - public void onSelectionChange(SelectedItems selected) { - boolean empty = ClientSelectedItemsUtils.isEmpty(selected); - isListEmpty = empty; - } - }); } @SuppressWarnings("rawtypes") diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/CreateIngestJob.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/CreateIngestJob.java index 471bc3300a..fcee933c56 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/CreateIngestJob.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/CreateIngestJob.java @@ -28,6 +28,9 @@ import org.roda.wui.client.common.LastSelectedItemsSingleton; import org.roda.wui.client.common.dialogs.Dialogs; import org.roda.wui.client.common.lists.TransferredResourceList; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.client.common.search.SearchWrapper; import org.roda.wui.client.common.utils.AsyncCallbackUtils; import org.roda.wui.common.client.tools.HistoryUtils; import org.roda.wui.common.client.widgets.Toast; @@ -60,20 +63,25 @@ public boolean updateObjectList() { boolean isEmpty = false; if (selected != null) { - if (selected instanceof SelectedItemsList) { - List ids = ((SelectedItemsList) selected).getIds(); - Filter filter = new Filter(new OneOfManyFilterParameter(RodaConstants.INDEX_UUID, ids)); - TransferredResourceList list = new TransferredResourceList("CreateIngestJob_transferredResources", filter, - messages.transferredResourcesTitle(), false, 10, 10); + if (selected instanceof SelectedItemsList || selected instanceof SelectedItemsFilter) { + Filter filter; + if (selected instanceof SelectedItemsList) { + List ids = ((SelectedItemsList) selected).getIds(); + filter = new Filter(new OneOfManyFilterParameter(RodaConstants.INDEX_UUID, ids)); + isEmpty = ids.isEmpty(); + } else { + filter = ((SelectedItemsFilter) selected).getFilter(); + } + + ListBuilder transferredResourceListBuilder = new ListBuilder<>( + TransferredResourceList::new, + new AsyncTableCell.Options<>(TransferredResource.class, "CreateIngestJob_transferredResources") + .withFilter(filter).withSummary(messages.transferredResourcesTitle()).withInitialPageSize(10) + .withPageSizeIncrement(10)); + + SearchWrapper search = new SearchWrapper(false).createListAndSearchPanel(transferredResourceListBuilder); getTargetPanel().clear(); - getTargetPanel().add(list); - isEmpty = ids.isEmpty(); - } else if (selected instanceof SelectedItemsFilter) { - Filter filter = ((SelectedItemsFilter) selected).getFilter(); - TransferredResourceList list = new TransferredResourceList("CreateIngestJob_transferredResources", filter, - messages.transferredResourcesTitle(), false, 10, 10); - getTargetPanel().clear(); - getTargetPanel().add(list); + getTargetPanel().add(search); } else { isEmpty = true; } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/IngestProcess.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/IngestProcess.java index 77286b93cb..a8bc99b15f 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/IngestProcess.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/IngestProcess.java @@ -102,7 +102,7 @@ interface MyUiBinder extends UiBinder { private IngestProcess() { Filter ingestFilter = new Filter( new SimpleFilterParameter(RodaConstants.JOB_PLUGIN_TYPE, PluginType.INGEST.toString())); - jobSearch = new JobSearch("IngestProcess_jobs", "IngestProcess_reports", ingestFilter, true); + jobSearch = new JobSearch("IngestProcess_jobs", "IngestProcess_reports", ingestFilter, ingestFilter, true); initWidget(uiBinder.createAndBindUi(this)); ingestProcessDescription.add(new HTMLWidgetWrapper("IngestProcessDescription.html")); } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/InternalProcess.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/InternalProcess.java index e1688df27a..f743dc1d87 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/InternalProcess.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/InternalProcess.java @@ -82,7 +82,7 @@ interface MyUiBinder extends UiBinder { private InternalProcess() { Filter internalFilter = new Filter( new SimpleFilterParameter(RodaConstants.JOB_PLUGIN_TYPE, PluginType.INTERNAL.toString())); - jobSearch = new JobSearch("InternalProcess_jobs", "InternalProcess_reports", internalFilter, false); + jobSearch = new JobSearch("InternalProcess_jobs", "InternalProcess_reports", internalFilter, internalFilter, false); initWidget(uiBinder.createAndBindUi(this)); internalProcessDescription.add(new HTMLWidgetWrapper("InternalProcessDescription.html")); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/InternalProcess.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/InternalProcess.ui.xml index aae00c4160..bbf533e550 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/InternalProcess.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/process/InternalProcess.ui.xml @@ -8,7 +8,7 @@ - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/ActionLogSearch.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/ActionLogSearch.java deleted file mode 100644 index b8cc325da7..0000000000 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/ActionLogSearch.java +++ /dev/null @@ -1,155 +0,0 @@ -/** - * The contents of this file are subject to the license and copyright - * detailed in the LICENSE file at the root of the source - * tree and available online at - * - * https://github.com/keeps/roda - */ -package org.roda.wui.client.search; - -import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; -import org.roda.core.data.v2.log.LogEntry; -import org.roda.wui.client.common.LastSelectedItemsSingleton; -import org.roda.wui.client.common.lists.LogEntryList; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; -import org.roda.wui.client.common.search.AdvancedSearchFieldsPanel; -import org.roda.wui.client.common.search.EntitySearch; -import org.roda.wui.client.common.search.SearchPanel; -import org.roda.wui.client.management.ShowLogEntry; -import org.roda.wui.common.client.tools.HistoryUtils; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.logical.shared.ValueChangeEvent; -import com.google.gwt.event.logical.shared.ValueChangeHandler; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.FlowPanel; -import com.google.gwt.user.client.ui.Widget; -import com.google.gwt.view.client.SelectionChangeEvent; - -import config.i18n.client.ClientMessages; - -public class ActionLogSearch extends Composite implements EntitySearch { - private static final ClientMessages messages = GWT.create(ClientMessages.class); - - interface MyUiBinder extends UiBinder { - } - - private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - - Filter filterLogs; - - @UiField(provided = true) - SearchPanel searchPanel; - - @UiField - FlowPanel searchResultPanel; - - LogEntryList logsSearchResultPanel; - AdvancedSearchFieldsPanel logsSearchAdvancedFieldsPanel; - String logsListId; - - public ActionLogSearch(String logsListId) { - this.logsListId = logsListId; - - ValueChangeHandler searchAdvancedFieldsPanelHandler = new ValueChangeHandler() { - @Override - public void onValueChange(ValueChangeEvent event) { - searchPanel.setSearchAdvancedGoEnabled(event.getValue() == 0 ? false : true); - } - }; - - logsSearchAdvancedFieldsPanel = new AdvancedSearchFieldsPanel(RodaConstants.SEARCH_ACTION_LOGS); - logsSearchAdvancedFieldsPanel.addValueChangeHandler(searchAdvancedFieldsPanelHandler); - defaultFilters(Filter.ALL); - - searchPanel = new SearchPanel(filterLogs, RodaConstants.LOG_SEARCH, true, messages.searchPlaceHolder(), false, true, - false); - - initWidget(uiBinder.createAndBindUi(this)); - - searchPanel.setDropdownLabel(messages.searchListBoxActionLogs()); - searchPanel.addDropdownItem(messages.searchListBoxActionLogs(), RodaConstants.SEARCH_ACTION_LOGS); - search(); - - searchPanel.addValueChangeHandler(new ValueChangeHandler() { - @Override - public void onValueChange(ValueChangeEvent event) { - search(); - } - }); - - searchPanel.addDropdownPopupStyleName("searchInputListBoxPopup"); - - searchPanel.addSearchAdvancedFieldAddHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - logsSearchAdvancedFieldsPanel.addSearchFieldPanel(); - } - }); - } - - public void showSearchAdvancedFieldsPanel() { - if (logsSearchResultPanel == null) { - createLogsSearchResultPanel(); - } - - searchPanel.setVariables(filterLogs, RodaConstants.LOG_SEARCH, true, logsSearchResultPanel, - logsSearchAdvancedFieldsPanel); - searchPanel.setSearchAdvancedFieldOptionsAddVisible(true); - searchPanel.setSearchAdvancedGoEnabled(logsSearchResultPanel.getWidgetCount() == 0 ? false : true); - - searchResultPanel.clear(); - searchResultPanel.add(logsSearchResultPanel); - } - - private void createLogsSearchResultPanel() { - logsSearchResultPanel = new LogEntryList(logsListId, filterLogs, messages.searchResults(), false); - - logsSearchResultPanel.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() { - - @Override - public void onSelectionChange(SelectionChangeEvent event) { - LogEntry selected = logsSearchResultPanel.getSelectionModel().getSelectedObject(); - if (selected != null) { - LastSelectedItemsSingleton.getInstance().setLastHistory(HistoryUtils.getCurrentHistoryPath()); - HistoryUtils.newHistory(ShowLogEntry.RESOLVER, selected.getId()); - } - } - }); - } - - @Override - public void refresh() { - if (logsSearchResultPanel != null && logsSearchResultPanel.hasElementsSelected()) { - logsSearchResultPanel.refresh(); - } - } - - public void search() { - showSearchAdvancedFieldsPanel(); - searchPanel.doSearch(); - } - - public void defaultFilters(Filter filter) { - filterLogs = new Filter(filter); - if (searchPanel != null) { - setFilter(filter); - searchPanel.setDefaultFilterIncremental(false); - } - } - - @Override - public BasicAsyncTableCell getList() { - return logsSearchResultPanel; - } - - @Override - public void setFilter(Filter filter) { - logsSearchResultPanel.setFilter(filter); - } -} diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/JobSearch.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/JobSearch.java index 9098a11b8d..053577c9f9 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/JobSearch.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/JobSearch.java @@ -7,40 +7,25 @@ */ package org.roda.wui.client.search; -import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.IsIndexed; import org.roda.core.data.v2.index.filter.Filter; -import org.roda.core.data.v2.index.select.SelectedItems; -import org.roda.core.data.v2.index.select.SelectedItemsList; import org.roda.core.data.v2.jobs.IndexedReport; import org.roda.core.data.v2.jobs.Job; -import org.roda.core.data.v2.jobs.Report; import org.roda.wui.client.common.lists.IngestJobReportList; import org.roda.wui.client.common.lists.JobList; import org.roda.wui.client.common.lists.SimpleJobReportList; -import org.roda.wui.client.common.lists.pagination.ListSelectionUtils; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; -import org.roda.wui.client.common.search.AdvancedSearchFieldsPanel; -import org.roda.wui.client.common.search.EntitySearch; -import org.roda.wui.client.common.search.SearchPanel; -import org.roda.wui.client.ingest.process.ShowJob; -import org.roda.wui.common.client.tools.HistoryUtils; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.client.common.search.SearchWrapper; import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.logical.shared.ValueChangeEvent; -import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Widget; -import com.google.gwt.view.client.SelectionChangeEvent; import config.i18n.client.ClientMessages; -public class JobSearch extends Composite implements EntitySearch { +public class JobSearch extends Composite { private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -49,199 +34,31 @@ interface MyUiBinder extends UiBinder { private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - Filter filterJobs; - Filter filterJobReports; - @UiField(provided = true) - SearchPanel searchPanel; - - @UiField - FlowPanel searchResultPanel; - - JobList jobsSearchResultPanel; - BasicAsyncTableCell jobReportsSearchResultPanel; - - AdvancedSearchFieldsPanel jobsSearchAdvancedFieldsPanel; - AdvancedSearchFieldsPanel jobReportsSearchAdvancedFieldsPanel; - - String selectedItem = Job.class.getName(); - String jobsListId; - String jobReportsListId; - - boolean isIngest = false; + SearchWrapper searchWrapper; - public JobSearch(String jobsListId, String jobReportsListId, Filter defaultFilter, boolean isIngest) { - this.jobsListId = jobsListId; - this.jobReportsListId = jobReportsListId; - this.isIngest = isIngest; + public JobSearch(String jobsListId, String jobReportsListId, Filter defaultJobFilter, Filter defaultJobReportFilter, + boolean isIngest) { - ValueChangeHandler searchAdvancedFieldsPanelHandler = new ValueChangeHandler() { - @Override - public void onValueChange(ValueChangeEvent event) { - searchPanel.setSearchAdvancedGoEnabled(event.getValue() == 0 ? false : true); - } - }; + ListBuilder jobListBuilder = new ListBuilder<>(JobList::new, + new AsyncTableCell.Options<>(Job.class, jobsListId).withFilter(new Filter(defaultJobFilter)).withAutoUpdate(10000) + .bindOpener()); - jobsSearchAdvancedFieldsPanel = new AdvancedSearchFieldsPanel(RodaConstants.SEARCH_JOBS); - jobReportsSearchAdvancedFieldsPanel = new AdvancedSearchFieldsPanel(RodaConstants.SEARCH_JOB_REPORTS); + ListBuilder jobReportListBuilder = new ListBuilder<>( + isIngest ? IngestJobReportList::new : SimpleJobReportList::new, + new AsyncTableCell.Options<>(IndexedReport.class, jobReportsListId).withFilter(new Filter(defaultJobReportFilter)) + .withAutoUpdate(10000).bindOpener()); - jobsSearchAdvancedFieldsPanel.addValueChangeHandler(searchAdvancedFieldsPanelHandler); - jobReportsSearchAdvancedFieldsPanel.addValueChangeHandler(searchAdvancedFieldsPanelHandler); - - defaultFilters(defaultFilter); - - searchPanel = new SearchPanel(filterJobs, RodaConstants.JOB_SEARCH, true, messages.searchPlaceHolder(), true, true, - true); + searchWrapper = new SearchWrapper(true).createListAndSearchPanel(jobListBuilder) + .createListAndSearchPanel(jobReportListBuilder); initWidget(uiBinder.createAndBindUi(this)); - searchPanel.setDropdownLabel(messages.searchListBoxJobs()); - searchPanel.addDropdownItem(messages.searchListBoxJobs(), RodaConstants.SEARCH_JOBS); - searchPanel.addDropdownItem(messages.searchListBoxJobReports(), RodaConstants.SEARCH_JOB_REPORTS); - search(); - - searchPanel.addValueChangeHandler(new ValueChangeHandler() { - @Override - public void onValueChange(ValueChangeEvent event) { - search(); - } - }); - - searchPanel.addDropdownPopupStyleName("searchInputListBoxPopup"); - - // handler aqui - searchPanel.addSearchAdvancedFieldAddHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - if (selectedItem.equals(Report.class.getName())) { - jobReportsSearchAdvancedFieldsPanel.addSearchFieldPanel(); - } else { - jobsSearchAdvancedFieldsPanel.addSearchFieldPanel(); - } - } - }); - } - - public void showSearchAdvancedFieldsPanel() { - if (jobsSearchResultPanel == null) { - createJobsSearchResultPanel(); - } - - jobsSearchResultPanel.setVisible(true); - - searchPanel.setVariables(filterJobs, RodaConstants.JOB_SEARCH, true, jobsSearchResultPanel, - jobsSearchAdvancedFieldsPanel); - searchPanel.setSearchAdvancedFieldOptionsAddVisible(true); - searchPanel.setSearchAdvancedGoEnabled(jobsSearchAdvancedFieldsPanel.getWidgetCount() == 0 ? false : true); - - searchResultPanel.clear(); - searchResultPanel.add(jobsSearchResultPanel); - selectedItem = Job.class.getName(); - } - - public void showJobReportsSearchAdvancedFieldsPanel() { - if (jobReportsSearchResultPanel == null) { - createJobReportsSearchResultPanel(); - } - - jobReportsSearchResultPanel.setVisible(true); - - searchPanel.setVariables(filterJobReports, RodaConstants.JOB_REPORT_SEARCH, true, jobReportsSearchResultPanel, - jobReportsSearchAdvancedFieldsPanel); - searchPanel.setSearchAdvancedFieldOptionsAddVisible(true); - searchPanel.setSearchAdvancedGoEnabled(jobReportsSearchAdvancedFieldsPanel.getWidgetCount() == 0 ? false : true); - - searchResultPanel.clear(); - searchResultPanel.add(jobReportsSearchResultPanel); - selectedItem = Report.class.getName(); - } - - private void createJobsSearchResultPanel() { - jobsSearchResultPanel = new JobList(jobsListId, filterJobs, messages.searchResults(), true); - ListSelectionUtils.bindBrowseOpener(jobsSearchResultPanel); - - jobsSearchResultPanel.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() { - @Override - public void onSelectionChange(SelectionChangeEvent event) { - Job job = jobsSearchResultPanel.getSelectionModel().getSelectedObject(); - if (job != null) { - jobsSearchResultPanel.clearSelected(); - HistoryUtils.newHistory(ShowJob.RESOLVER, job.getId()); - } - } - }); - - jobsSearchResultPanel.autoUpdate(10000); - } - - private void createJobReportsSearchResultPanel() { - if (isIngest) { - jobReportsSearchResultPanel = new IngestJobReportList(jobReportsListId, filterJobReports, - messages.searchResults(), false); - } else { - jobReportsSearchResultPanel = new SimpleJobReportList(jobReportsListId, filterJobReports, - messages.searchResults(), false); - } - - jobReportsSearchResultPanel.autoUpdate(10000); - ListSelectionUtils.bindBrowseOpener(jobReportsSearchResultPanel); - } - - public SelectedItems getSelected() { - SelectedItems selected = null; - - if (jobsSearchResultPanel != null && jobsSearchResultPanel.hasElementsSelected()) { - selected = jobsSearchResultPanel.getSelected(); - } else if (jobReportsSearchResultPanel != null && jobReportsSearchResultPanel.hasElementsSelected()) { - selected = jobReportsSearchResultPanel.getSelected(); - } - - if (selected == null) { - selected = new SelectedItemsList<>(); - } - - return selected; - } - - @Override - public void refresh() { - if (jobsSearchResultPanel != null && jobsSearchResultPanel.hasElementsSelected()) { - jobsSearchResultPanel.refresh(); - } else if (jobReportsSearchResultPanel != null && jobReportsSearchResultPanel.hasElementsSelected()) { - jobReportsSearchResultPanel.refresh(); - } - } - - public void search() { - if (searchPanel.getDropdownSelectedValue().equals(RodaConstants.SEARCH_JOB_REPORTS)) { - showJobReportsSearchAdvancedFieldsPanel(); - } else { - showSearchAdvancedFieldsPanel(); - } - - searchPanel.doSearch(); - } - - public void defaultFilters(Filter filter) { - filterJobs = new Filter(filter); - filterJobReports = new Filter(filter); - if (searchPanel != null) { - searchPanel.setDefaultFilterIncremental(false); - } - } - - @Override - public BasicAsyncTableCell getList() { - if (jobReportsSearchResultPanel != null) { - return jobReportsSearchResultPanel; - } else { - return jobsSearchResultPanel; - } - } - - @Override - public void setFilter(Filter filter) { - jobsSearchResultPanel.setFilter(filter); + // TODO tmp: remove this if this is not used + // searchWrapper.setDropdownLabel(messages.searchListBoxJobs()); + // searchWrapper.addDropdownItem(messages.searchListBoxJobs(), + // RodaConstants.SEARCH_JOBS); + // searchWrapper.addDropdownItem(messages.searchListBoxJobReports(), + // RodaConstants.SEARCH_JOB_REPORTS); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/JobSearch.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/JobSearch.ui.xml index 6ddd512477..c2c51b297c 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/JobSearch.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/JobSearch.ui.xml @@ -5,7 +5,6 @@ xmlns:commonsearch="urn:import:org.roda.wui.client.common.search"> - - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/NotificationSearch.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/NotificationSearch.java index 3bd0d5971c..0466143acd 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/NotificationSearch.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/NotificationSearch.java @@ -7,34 +7,21 @@ */ package org.roda.wui.client.search; -import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.notifications.Notification; -import org.roda.wui.client.common.LastSelectedItemsSingleton; import org.roda.wui.client.common.lists.NotificationList; -import org.roda.wui.client.common.lists.pagination.ListSelectionUtils; -import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; -import org.roda.wui.client.common.search.AdvancedSearchFieldsPanel; -import org.roda.wui.client.common.search.EntitySearch; -import org.roda.wui.client.common.search.SearchPanel; -import org.roda.wui.client.management.ShowNotification; -import org.roda.wui.common.client.tools.HistoryUtils; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.client.common.search.SearchWrapper; import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.logical.shared.ValueChangeEvent; -import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Widget; -import com.google.gwt.view.client.SelectionChangeEvent; import config.i18n.client.ClientMessages; -public class NotificationSearch extends Composite implements EntitySearch { +public class NotificationSearch extends Composite { private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -43,115 +30,21 @@ interface MyUiBinder extends UiBinder { private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - Filter filterNotifications; - @UiField(provided = true) - SearchPanel searchPanel; - - @UiField - FlowPanel searchResultPanel; - - NotificationList notificationsSearchResultPanel; - AdvancedSearchFieldsPanel notificationsSearchAdvancedFieldsPanel; - String notificationsListId; + SearchWrapper searchWrapper; public NotificationSearch(String notificationsListId) { - this.notificationsListId = notificationsListId; - ValueChangeHandler searchAdvancedFieldsPanelHandler = new ValueChangeHandler() { - @Override - public void onValueChange(ValueChangeEvent event) { - searchPanel.setSearchAdvancedGoEnabled(event.getValue() == 0 ? false : true); - } - }; + ListBuilder notificationListBuilder = new ListBuilder<>(NotificationList::new, + new AsyncTableCell.Options<>(Notification.class, notificationsListId).bindOpener()); - notificationsSearchAdvancedFieldsPanel = new AdvancedSearchFieldsPanel(RodaConstants.SEARCH_NOTIFICATIONS); - notificationsSearchAdvancedFieldsPanel.addValueChangeHandler(searchAdvancedFieldsPanelHandler); - defaultFilters(Filter.ALL); - - searchPanel = new SearchPanel(filterNotifications, RodaConstants.NOTIFICATION_SEARCH, true, - messages.searchPlaceHolder(), false, true, false); + searchWrapper = new SearchWrapper(false).createListAndSearchPanel(notificationListBuilder); initWidget(uiBinder.createAndBindUi(this)); - searchPanel.setDropdownLabel(messages.searchListBoxNotifications()); - searchPanel.addDropdownItem(messages.searchListBoxNotifications(), RodaConstants.SEARCH_NOTIFICATIONS); - search(); - - searchPanel.addValueChangeHandler(new ValueChangeHandler() { - @Override - public void onValueChange(ValueChangeEvent event) { - search(); - } - }); - - searchPanel.addDropdownPopupStyleName("searchInputListBoxPopup"); - - searchPanel.addSearchAdvancedFieldAddHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - notificationsSearchAdvancedFieldsPanel.addSearchFieldPanel(); - } - }); - } - - public void showSearchAdvancedFieldsPanel() { - if (notificationsSearchResultPanel == null) { - createNotificationsSearchResultPanel(); - } - - searchPanel.setVariables(filterNotifications, RodaConstants.NOTIFICATION_SEARCH, true, - notificationsSearchResultPanel, notificationsSearchAdvancedFieldsPanel); - searchPanel.setSearchAdvancedFieldOptionsAddVisible(true); - searchPanel.setSearchAdvancedGoEnabled(notificationsSearchResultPanel.getWidgetCount() == 0 ? false : true); - - searchResultPanel.clear(); - searchResultPanel.add(notificationsSearchResultPanel); - } - - private void createNotificationsSearchResultPanel() { - notificationsSearchResultPanel = new NotificationList(notificationsListId, filterNotifications, - messages.searchResults(), false); - ListSelectionUtils.bindBrowseOpener(notificationsSearchResultPanel); - - notificationsSearchResultPanel.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() { - @Override - public void onSelectionChange(SelectionChangeEvent event) { - Notification selected = notificationsSearchResultPanel.getSelectionModel().getSelectedObject(); - if (selected != null) { - LastSelectedItemsSingleton.getInstance().setLastHistory(HistoryUtils.getCurrentHistoryPath()); - HistoryUtils.newHistory(ShowNotification.RESOLVER, selected.getId()); - } - } - }); - } - - @Override - public void refresh() { - if (notificationsSearchResultPanel != null && notificationsSearchResultPanel.hasElementsSelected()) { - notificationsSearchResultPanel.refresh(); - } - } - - public void search() { - showSearchAdvancedFieldsPanel(); - searchPanel.doSearch(); - } - - public void defaultFilters(Filter filter) { - filterNotifications = new Filter(filter); - if (searchPanel != null) { - searchPanel.setDefaultFilterIncremental(false); - } - } - - @Override - public BasicAsyncTableCell getList() { - return notificationsSearchResultPanel; - } - - @Override - public void setFilter(Filter filter) { - notificationsSearchResultPanel.setFilter(filter); + // TODO tmp + // searchPanel.setDropdownLabel(messages.searchListBoxNotifications()); + // searchPanel.addDropdownItem(messages.searchListBoxNotifications(), + // RodaConstants.SEARCH_NOTIFICATIONS); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/NotificationSearch.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/NotificationSearch.ui.xml index 6ddd512477..0d52c5063e 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/NotificationSearch.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/NotificationSearch.ui.xml @@ -5,7 +5,6 @@ xmlns:commonsearch="urn:import:org.roda.wui.client.common.search"> - - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/PreservationEventsSearch.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/PreservationEventsSearch.java index 9da9be9eff..682a5a0fce 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/PreservationEventsSearch.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/PreservationEventsSearch.java @@ -9,31 +9,23 @@ import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.filter.Filter; +import org.roda.core.data.v2.index.filter.SimpleFilterParameter; import org.roda.core.data.v2.ip.metadata.IndexedPreservationEvent; -import org.roda.wui.client.browse.ShowPreservationEvent; +import org.roda.wui.client.common.actions.PreservationEventActions; import org.roda.wui.client.common.lists.PreservationEventList; -import org.roda.wui.client.common.lists.pagination.ListSelectionUtils; -import org.roda.wui.client.common.search.AdvancedSearchFieldsPanel; -import org.roda.wui.client.common.search.EntitySearch; -import org.roda.wui.client.common.search.SearchPanel; -import org.roda.wui.client.common.utils.StringUtils; -import org.roda.wui.common.client.tools.HistoryUtils; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.client.common.search.SearchWrapper; import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.logical.shared.ValueChangeEvent; -import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Widget; -import com.google.gwt.view.client.SelectionChangeEvent; import config.i18n.client.ClientMessages; -public class PreservationEventsSearch extends Composite implements EntitySearch { +public class PreservationEventsSearch extends Composite { private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -42,128 +34,32 @@ interface MyUiBinder extends UiBinder { private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - Filter filterEvents; - @UiField(provided = true) - SearchPanel searchPanel; - - @UiField - FlowPanel searchResultPanel; - - PreservationEventList eventsSearchResultPanel; - AdvancedSearchFieldsPanel eventsSearchAdvancedFieldsPanel; - String eventsListId; - - public PreservationEventsSearch(String eventsListId) { - this.eventsListId = eventsListId; - - ValueChangeHandler searchAdvancedFieldsPanelHandler = new ValueChangeHandler() { - @Override - public void onValueChange(ValueChangeEvent event) { - searchPanel.setSearchAdvancedGoEnabled(event.getValue() == 0 ? false : true); - } - }; - - eventsSearchAdvancedFieldsPanel = new AdvancedSearchFieldsPanel(RodaConstants.SEARCH_PRESERVATION_EVENTS); - eventsSearchAdvancedFieldsPanel.addValueChangeHandler(searchAdvancedFieldsPanelHandler); - defaultFilters(Filter.ALL); - - searchPanel = new SearchPanel(filterEvents, RodaConstants.PRESERVATION_EVENT_SEARCH, true, - messages.searchPlaceHolder(), false, true, false); - - initWidget(uiBinder.createAndBindUi(this)); - - searchPanel.setDropdownLabel(messages.searchListBoxPreservationEvents()); - searchPanel.addDropdownItem(messages.searchListBoxPreservationEvents(), RodaConstants.SEARCH_PRESERVATION_EVENTS); - search(); - - searchPanel.addValueChangeHandler(new ValueChangeHandler() { - - @Override - public void onValueChange(ValueChangeEvent event) { - search(); - } - }); + SearchWrapper searchWrapper; - searchPanel.addDropdownPopupStyleName("searchInputListBoxPopup"); - - searchPanel.addSearchAdvancedFieldAddHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - eventsSearchAdvancedFieldsPanel.addSearchFieldPanel(); - } - }); - } - - public void showSearchAdvancedFieldsPanel() { - if (eventsSearchResultPanel == null) { - createEventsSearchResultPanel(); + public PreservationEventsSearch(String eventsListId, String aipId, String representationUUID, String fileUUID) { + Filter filter = new Filter(); + if (aipId != null) { + filter.add(new SimpleFilterParameter(RodaConstants.PRESERVATION_EVENT_AIP_ID, aipId)); } - - searchPanel.setVariables(filterEvents, RodaConstants.PRESERVATION_EVENT_SEARCH, true, eventsSearchResultPanel, - eventsSearchAdvancedFieldsPanel); - searchPanel.setSearchAdvancedFieldOptionsAddVisible(true); - searchPanel.setSearchAdvancedGoEnabled(eventsSearchResultPanel.getWidgetCount() == 0 ? false : true); - - searchResultPanel.clear(); - searchResultPanel.add(eventsSearchResultPanel); - } - - private void createEventsSearchResultPanel() { - eventsSearchResultPanel = new PreservationEventList(eventsListId, filterEvents, messages.searchResults(), false); - ListSelectionUtils.bindBrowseOpener(eventsSearchResultPanel); - - eventsSearchResultPanel.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() { - @Override - public void onSelectionChange(SelectionChangeEvent event) { - IndexedPreservationEvent selected = eventsSearchResultPanel.getSelectionModel().getSelectedObject(); - if (selected != null) { - String fileUUID = selected.getFileUUID(); - String representationUUID = selected.getRepresentationUUID(); - String aipUUID = selected.getAipID(); - - if (StringUtils.isNotBlank(fileUUID)) { - HistoryUtils.newHistory(ShowPreservationEvent.RESOLVER, aipUUID, representationUUID, fileUUID, - selected.getId()); - } else if (StringUtils.isNotBlank(representationUUID)) { - HistoryUtils.newHistory(ShowPreservationEvent.RESOLVER, aipUUID, representationUUID, selected.getId()); - } else if (StringUtils.isNotBlank(aipUUID)) { - HistoryUtils.newHistory(ShowPreservationEvent.RESOLVER, aipUUID, selected.getId()); - } else { - HistoryUtils.newHistory(ShowPreservationEvent.RESOLVER, selected.getId()); - } - } - } - }); - } - - @Override - public void refresh() { - if (eventsSearchResultPanel != null && eventsSearchResultPanel.hasElementsSelected()) { - eventsSearchResultPanel.refresh(); + if (representationUUID != null) { + filter.add(new SimpleFilterParameter(RodaConstants.PRESERVATION_EVENT_REPRESENTATION_UUID, representationUUID)); } - } - - public void search() { - showSearchAdvancedFieldsPanel(); - searchPanel.doSearch(); - } - - public void defaultFilters(Filter filter) { - filterEvents = new Filter(filter); - if (searchPanel != null) { - setFilter(filter); - searchPanel.setDefaultFilterIncremental(false); + if (fileUUID != null) { + filter.add(new SimpleFilterParameter(RodaConstants.PRESERVATION_EVENT_FILE_UUID, fileUUID)); } - } - @Override - public void setFilter(Filter filter) { - eventsSearchResultPanel.setFilter(filter); - } + searchWrapper = new SearchWrapper(false).createListAndSearchPanel( + new ListBuilder<>(PreservationEventList::new, + new AsyncTableCell.Options<>(IndexedPreservationEvent.class, eventsListId).withFilter(filter) + .withSummary(messages.searchResults()).bindOpener()), + PreservationEventActions.get(aipId, representationUUID, fileUUID), messages.searchPlaceHolder()); + + initWidget(uiBinder.createAndBindUi(this)); - @Override - public PreservationEventList getList() { - return eventsSearchResultPanel; + // TODO tmp + // searchPanel.setDropdownLabel(messages.searchListBoxPreservationEvents()); + // searchPanel.addDropdownItem(messages.searchListBoxPreservationEvents(), + // RodaConstants.SEARCH_PRESERVATION_EVENTS); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/PreservationEventsSearch.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/PreservationEventsSearch.ui.xml index 6ddd512477..0d52c5063e 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/PreservationEventsSearch.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/PreservationEventsSearch.ui.xml @@ -5,7 +5,6 @@ xmlns:commonsearch="urn:import:org.roda.wui.client.common.search"> - - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/Relation.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/Relation.java index f9e4d721b9..3925963da8 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/Relation.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/Relation.java @@ -20,7 +20,7 @@ import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.index.sublist.Sublist; import org.roda.core.data.v2.ip.IndexedAIP; -import org.roda.wui.client.browse.BrowseAIP; +import org.roda.wui.client.browse.BrowseTop; import org.roda.wui.client.browse.BrowserService; import org.roda.wui.common.client.HistoryResolver; import org.roda.wui.common.client.tools.HistoryUtils; @@ -100,7 +100,7 @@ public void onFailure(Throwable caught) { @Override public void onSuccess(IndexResult result) { if (result.getTotalCount() == 1) { - HistoryUtils.newHistory(BrowseAIP.RESOLVER, result.getResults().get(0).getUUID()); + HistoryUtils.newHistory(BrowseTop.RESOLVER, result.getResults().get(0).getUUID()); } else { HistoryUtils.newHistory(Search.RESOLVER, historyTokens); } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/RiskSearch.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/RiskSearch.java index 88b70e643c..b7e455f510 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/RiskSearch.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/RiskSearch.java @@ -7,39 +7,25 @@ */ package org.roda.wui.client.search; -import org.roda.core.data.common.RodaConstants; -import org.roda.core.data.v2.index.IsIndexed; -import org.roda.core.data.v2.index.filter.Filter; -import org.roda.core.data.v2.index.select.SelectedItems; -import org.roda.core.data.v2.index.select.SelectedItemsList; import org.roda.core.data.v2.risks.IndexedRisk; -import org.roda.core.data.v2.risks.Risk; import org.roda.core.data.v2.risks.RiskIncidence; +import org.roda.wui.client.common.actions.RiskActions; +import org.roda.wui.client.common.actions.RiskIncidenceActions; import org.roda.wui.client.common.lists.RiskIncidenceList; import org.roda.wui.client.common.lists.RiskList; -import org.roda.wui.client.common.lists.pagination.ListSelectionUtils; -import org.roda.wui.client.common.search.AdvancedSearchFieldsPanel; -import org.roda.wui.client.common.search.EntitySearch; -import org.roda.wui.client.common.search.SearchPanel; -import org.roda.wui.client.planning.RiskRegister; -import org.roda.wui.client.planning.ShowRisk; -import org.roda.wui.common.client.tools.HistoryUtils; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.client.common.search.SearchWrapper; import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.logical.shared.ValueChangeEvent; -import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Widget; -import com.google.gwt.view.client.SelectionChangeEvent; import config.i18n.client.ClientMessages; -public class RiskSearch extends Composite implements EntitySearch { +public class RiskSearch extends Composite { private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -48,182 +34,32 @@ interface MyUiBinder extends UiBinder { private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - Filter filterRisks; - Filter filterIncidences; - @UiField(provided = true) - SearchPanel searchPanel; - - @UiField - FlowPanel searchResultPanel; - - RiskList risksSearchResultPanel; - RiskIncidenceList incidencesSearchResultPanel; - - AdvancedSearchFieldsPanel risksSearchAdvancedFieldsPanel; - AdvancedSearchFieldsPanel incidencesSearchAdvancedFieldsPanel; - - String selectedItem = Risk.class.getName(); - String risksListId; - String incidencesListId; - - public RiskSearch(String risksListId, String incidencesListId) { - this.risksListId = risksListId; - this.incidencesListId = incidencesListId; + SearchWrapper searchWrapper; - ValueChangeHandler searchAdvancedFieldsPanelHandler = new ValueChangeHandler() { - @Override - public void onValueChange(ValueChangeEvent event) { - searchPanel.setSearchAdvancedGoEnabled(event.getValue() == 0 ? false : true); - } - }; + public RiskSearch() { + ListBuilder riskListBuilder = new ListBuilder<>(RiskList::new, + new AsyncTableCell.Options<>(IndexedRisk.class, "RiskRegister_risks").bindOpener()); - risksSearchAdvancedFieldsPanel = new AdvancedSearchFieldsPanel(RodaConstants.SEARCH_RISKS); - incidencesSearchAdvancedFieldsPanel = new AdvancedSearchFieldsPanel(RodaConstants.SEARCH_INCIDENCES); + ListBuilder riskIncidenceListBuilder = new ListBuilder<>(RiskIncidenceList::new, + new AsyncTableCell.Options<>(RiskIncidence.class, "RiskRegister_riskIncidences").bindOpener()); - risksSearchAdvancedFieldsPanel.addValueChangeHandler(searchAdvancedFieldsPanelHandler); - incidencesSearchAdvancedFieldsPanel.addValueChangeHandler(searchAdvancedFieldsPanelHandler); - - defaultFilters(); - - searchPanel = new SearchPanel(filterRisks, RodaConstants.AIP_SEARCH, true, messages.searchPlaceHolder(), true, true, - false); + searchWrapper = new SearchWrapper(true) + .createListAndSearchPanel(riskListBuilder, RiskActions.get(), messages.searchPlaceHolder()) + .createListAndSearchPanel(riskIncidenceListBuilder, RiskIncidenceActions.getForMultipleEdit(), + messages.searchPlaceHolder()); initWidget(uiBinder.createAndBindUi(this)); - searchPanel.setDropdownLabel(messages.searchListBoxRisks()); - searchPanel.addDropdownItem(messages.searchListBoxRisks(), RodaConstants.SEARCH_RISKS); - searchPanel.addDropdownItem(messages.searchListBoxIncidences(), RodaConstants.SEARCH_INCIDENCES); - search(); - - searchPanel.addValueChangeHandler(new ValueChangeHandler() { - - @Override - public void onValueChange(ValueChangeEvent event) { - search(); - } - }); - - searchPanel.addDropdownPopupStyleName("searchInputListBoxPopup"); - - searchPanel.addSearchAdvancedFieldAddHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - if (selectedItem.equals(RiskIncidence.class.getName())) { - incidencesSearchAdvancedFieldsPanel.addSearchFieldPanel(); - } else { - risksSearchAdvancedFieldsPanel.addSearchFieldPanel(); - } - } - }); - } - - public void showSearchAdvancedFieldsPanel() { - if (risksSearchResultPanel == null) { - createRisksSearchResultPanel(); - } - - risksSearchResultPanel.setVisible(true); - - searchPanel.setVariables(filterRisks, RodaConstants.RISK_SEARCH, true, risksSearchResultPanel, - risksSearchAdvancedFieldsPanel); - searchPanel.setSearchAdvancedFieldOptionsAddVisible(true); - searchPanel.setSearchAdvancedGoEnabled(risksSearchAdvancedFieldsPanel.getWidgetCount() == 0 ? false : true); - - searchResultPanel.clear(); - searchResultPanel.add(risksSearchResultPanel); - selectedItem = Risk.class.getName(); - } - - public void showIncidencesSearchAdvancedFieldsPanel() { - if (incidencesSearchResultPanel == null) { - createIncidencesSearchResultPanel(); - } - - incidencesSearchResultPanel.setVisible(true); - - searchPanel.setVariables(filterIncidences, RodaConstants.RISK_INCIDENCE_SEARCH, true, incidencesSearchResultPanel, - incidencesSearchAdvancedFieldsPanel); - searchPanel.setSearchAdvancedFieldOptionsAddVisible(true); - searchPanel.setSearchAdvancedGoEnabled(incidencesSearchAdvancedFieldsPanel.getWidgetCount() == 0 ? false : true); - - searchResultPanel.clear(); - searchResultPanel.add(incidencesSearchResultPanel); - selectedItem = RiskIncidence.class.getName(); - } - - private void createRisksSearchResultPanel() { - risksSearchResultPanel = new RiskList(risksListId, filterRisks, messages.searchResults(), true); - ListSelectionUtils.bindBrowseOpener(risksSearchResultPanel); - - risksSearchResultPanel.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() { - @Override - public void onSelectionChange(SelectionChangeEvent event) { - IndexedRisk selected = risksSearchResultPanel.getSelectionModel().getSelectedObject(); - if (selected != null) { - HistoryUtils.newHistory(RiskRegister.RESOLVER, ShowRisk.RESOLVER.getHistoryToken(), selected.getId()); - } - } - }); + // TODO tmp + // searchWrapper.setDropdownLabel(messages.searchListBoxRisks()); + // searchWrapper.addDropdownItem(messages.searchListBoxRisks(), + // RodaConstants.SEARCH_RISKS); + // searchWrapper.addDropdownItem(messages.searchListBoxIncidences(), + // RodaConstants.SEARCH_INCIDENCES); } - private void createIncidencesSearchResultPanel() { - incidencesSearchResultPanel = new RiskIncidenceList(incidencesListId, filterIncidences, messages.searchResults(), - true); - ListSelectionUtils.bindBrowseOpener(incidencesSearchResultPanel); - } - - public SelectedItems getSelected() { - SelectedItems selected = null; - - if (risksSearchResultPanel != null && risksSearchResultPanel.hasElementsSelected()) { - selected = risksSearchResultPanel.getSelected(); - } else if (incidencesSearchResultPanel != null && incidencesSearchResultPanel.hasElementsSelected()) { - selected = incidencesSearchResultPanel.getSelected(); - } - - if (selected == null) { - selected = new SelectedItemsList<>(); - } - - return selected; - } - - @Override public void refresh() { - if (risksSearchResultPanel != null && risksSearchResultPanel.hasElementsSelected()) { - risksSearchResultPanel.refresh(); - } else if (incidencesSearchResultPanel != null && incidencesSearchResultPanel.hasElementsSelected()) { - incidencesSearchResultPanel.refresh(); - } - } - - public void search() { - if (searchPanel.getDropdownSelectedValue().equals(RodaConstants.SEARCH_INCIDENCES)) { - showIncidencesSearchAdvancedFieldsPanel(); - } else { - showSearchAdvancedFieldsPanel(); - } - - searchPanel.doSearch(); - } - - public void defaultFilters() { - filterRisks = new Filter(Filter.ALL); - filterIncidences = new Filter(Filter.ALL); - if (searchPanel != null) { - searchPanel.setDefaultFilterIncremental(false); - } - } - - @Override - public void setFilter(Filter filter) { - risksSearchResultPanel.setFilter(filter); - } - - @Override - public RiskList getList() { - return risksSearchResultPanel; + searchWrapper.refreshAllLists(); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/RiskSearch.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/RiskSearch.ui.xml index 6ddd512477..0d52c5063e 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/RiskSearch.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/RiskSearch.ui.xml @@ -5,7 +5,6 @@ xmlns:commonsearch="urn:import:org.roda.wui.client.common.search"> - - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/Search.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/Search.java index a20cbc6930..373aa53893 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/Search.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/Search.java @@ -13,14 +13,11 @@ import java.util.Arrays; import java.util.List; -import org.roda.core.data.v2.index.IsIndexed; -import org.roda.core.data.v2.index.select.SelectedItems; import org.roda.core.data.v2.ip.AIPState; import org.roda.wui.client.common.UserLogin; -import org.roda.wui.client.common.search.MainSearch; +import org.roda.wui.client.common.search.CatalogueSearch; import org.roda.wui.client.common.utils.JavascriptUtils; import org.roda.wui.common.client.HistoryResolver; -import org.roda.wui.common.client.tools.HistoryUtils; import org.roda.wui.common.client.widgets.HTMLWidgetWrapper; import com.google.gwt.core.client.GWT; @@ -71,17 +68,12 @@ interface MyUiBinder extends UiBinder { FlowPanel searchDescription; @UiField(provided = true) - MainSearch mainSearch; - - boolean justActive = true; - boolean itemsSelectable = true; - boolean representationsSelectable = true; - boolean filesSelectable = true; + CatalogueSearch catalogueSearch; private Search() { // Create main search String parentAipId = null; - mainSearch = new MainSearch(justActive, itemsSelectable, representationsSelectable, filesSelectable, "Search_AIPs", + catalogueSearch = new CatalogueSearch(true, "Search_AIPs", "Search_representations", "Search_files", parentAipId, AIPState.ACTIVE); initWidget(uiBinder.createAndBindUi(this)); @@ -102,30 +94,7 @@ protected void onLoad() { } public void resolve(List historyTokens, AsyncCallback callback) { - mainSearch.defaultFilters(); - if (historyTokens.isEmpty()) { - mainSearch.search(false); - callback.onSuccess(this); - } else { - // #search/TYPE/key/value/key/value - boolean successful = mainSearch.setSearch(historyTokens); - if (successful) { - mainSearch.search(true); - callback.onSuccess(this); - } else { - HistoryUtils.newHistory(RESOLVER); - callback.onSuccess(null); - } - } - } - - public void clearSelected() { - mainSearch.clearSelected(); + catalogueSearch.setFilters(historyTokens); + callback.onSuccess(this); } - - @Deprecated - public SelectedItems getSelected() { - return mainSearch.getSelected(); - } - } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/Search.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/Search.ui.xml index 612a349032..c19fd67ec5 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/Search.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/Search.ui.xml @@ -16,7 +16,7 @@ - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/TransferredResourceSearch.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/TransferredResourceSearch.java index 1fc7143b50..c4e5673aa4 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/TransferredResourceSearch.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/TransferredResourceSearch.java @@ -7,34 +7,24 @@ */ package org.roda.wui.client.search; -import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.select.SelectedItems; -import org.roda.core.data.v2.index.select.SelectedItemsList; import org.roda.core.data.v2.ip.TransferredResource; +import org.roda.wui.client.common.actions.TransferredResourceActions; import org.roda.wui.client.common.lists.TransferredResourceList; -import org.roda.wui.client.common.lists.pagination.ListSelectionUtils; -import org.roda.wui.client.common.search.AdvancedSearchFieldsPanel; -import org.roda.wui.client.common.search.EntitySearch; -import org.roda.wui.client.common.search.SearchPanel; -import org.roda.wui.client.ingest.transfer.IngestTransfer; -import org.roda.wui.common.client.tools.HistoryUtils; +import org.roda.wui.client.common.lists.utils.AsyncTableCell; +import org.roda.wui.client.common.lists.utils.ListBuilder; +import org.roda.wui.client.common.search.SearchWrapper; import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.logical.shared.ValueChangeEvent; -import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Widget; -import com.google.gwt.view.client.SelectionChangeEvent; import config.i18n.client.ClientMessages; -public class TransferredResourceSearch extends Composite implements EntitySearch { +public class TransferredResourceSearch extends Composite { private static final ClientMessages messages = GWT.create(ClientMessages.class); @@ -43,126 +33,35 @@ interface MyUiBinder extends UiBinder { private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - Filter filterResources; - @UiField(provided = true) - SearchPanel searchPanel; - - @UiField - FlowPanel searchResultPanel; - - TransferredResourceList resourcesSearchResultPanel; - AdvancedSearchFieldsPanel resourcesSearchAdvancedFieldsPanel; - String resourcesListId; + SearchWrapper searchWrapper; - public TransferredResourceSearch(String resourcesListId) { - this.resourcesListId = resourcesListId; + public TransferredResourceSearch(String resourcesListId, Filter filter, + TransferredResourceActions transferredResourceActions) { - ValueChangeHandler searchAdvancedFieldsPanelHandler = new ValueChangeHandler() { - @Override - public void onValueChange(ValueChangeEvent event) { - searchPanel.setSearchAdvancedGoEnabled(event.getValue() == 0 ? false : true); - } - }; + ListBuilder transferredResourceListBuilder = new ListBuilder<>(TransferredResourceList::new, + new AsyncTableCell.Options<>(TransferredResource.class, resourcesListId).withFilter(filter).bindOpener()); - resourcesSearchAdvancedFieldsPanel = new AdvancedSearchFieldsPanel(RodaConstants.SEARCH_TRANSFERRED_RESOURCES); - resourcesSearchAdvancedFieldsPanel.addValueChangeHandler(searchAdvancedFieldsPanelHandler); - defaultFilters(Filter.ALL); - - searchPanel = new SearchPanel(filterResources, RodaConstants.TRANSFERRED_RESOURCE_SEARCH, true, - messages.searchPlaceHolder(), false, true, false); + searchWrapper = new SearchWrapper(false).createListAndSearchPanel(transferredResourceListBuilder, + transferredResourceActions); initWidget(uiBinder.createAndBindUi(this)); - searchPanel.setDropdownLabel(messages.searchListBoxTransferredResources()); - searchPanel.addDropdownItem(messages.searchListBoxTransferredResources(), - RodaConstants.SEARCH_TRANSFERRED_RESOURCES); - search(); - - searchPanel.addValueChangeHandler(new ValueChangeHandler() { - @Override - public void onValueChange(ValueChangeEvent event) { - search(); - } - }); - - searchPanel.addDropdownPopupStyleName("searchInputListBoxPopup"); - - searchPanel.addSearchAdvancedFieldAddHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - resourcesSearchAdvancedFieldsPanel.addSearchFieldPanel(); - } - }); - } - - public void showSearchAdvancedFieldsPanel() { - if (resourcesSearchResultPanel == null) { - createTransferredResourcesSearchResultPanel(); - } - - searchPanel.setVariables(filterResources, RodaConstants.NOTIFICATION_SEARCH, true, resourcesSearchResultPanel, - resourcesSearchAdvancedFieldsPanel); - searchPanel.setSearchAdvancedFieldOptionsAddVisible(true); - searchPanel.setSearchAdvancedGoEnabled(resourcesSearchResultPanel.getWidgetCount() == 0 ? false : true); - - searchResultPanel.clear(); - searchResultPanel.add(resourcesSearchResultPanel); - } - - private void createTransferredResourcesSearchResultPanel() { - resourcesSearchResultPanel = new TransferredResourceList(resourcesListId, filterResources, messages.searchResults(), - true); - - ListSelectionUtils.bindBrowseOpener(resourcesSearchResultPanel); - - resourcesSearchResultPanel.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() { - @Override - public void onSelectionChange(SelectionChangeEvent event) { - TransferredResource r = resourcesSearchResultPanel.getSelectionModel().getSelectedObject(); - if (r != null) { - searchPanel.clearSearchInputBox(); - HistoryUtils.newHistory(IngestTransfer.RESOLVER, r.getUUID()); - } - } - }); + // TODO tmp + // searchPanel.setDropdownLabel(messages.searchListBoxTransferredResources()); + // searchPanel.addDropdownItem(messages.searchListBoxTransferredResources(), + // RodaConstants.SEARCH_TRANSFERRED_RESOURCES); } public SelectedItems getSelected() { - if (resourcesSearchResultPanel != null && resourcesSearchResultPanel.hasElementsSelected()) { - return resourcesSearchResultPanel.getSelected(); - } else { - return new SelectedItemsList<>(); - } + return searchWrapper.getSelectedItems(TransferredResource.class); } - @Override - public void refresh() { - if (resourcesSearchResultPanel != null && resourcesSearchResultPanel.hasElementsSelected()) { - resourcesSearchResultPanel.refresh(); - } + public void setDefaultFilters(Filter filter) { + searchWrapper.setFilter(TransferredResource.class, filter); } - public void search() { - showSearchAdvancedFieldsPanel(); - searchPanel.doSearch(); - } - - public void defaultFilters(Filter filter) { - filterResources = new Filter(filter); - if (searchPanel != null) { - searchPanel.setDefaultFilter(filter, false); - resourcesSearchResultPanel.setFilter(filterResources); - } - } - - @Override - public void setFilter(Filter filter) { - resourcesSearchResultPanel.setFilter(filter); - } - - @Override - public TransferredResourceList getList() { - return resourcesSearchResultPanel; + public void refresh() { + searchWrapper.refreshCurrentList(); } } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/TransferredResourceSearch.ui.xml b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/TransferredResourceSearch.ui.xml index 6ddd512477..0d52c5063e 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/TransferredResourceSearch.ui.xml +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/client/search/TransferredResourceSearch.ui.xml @@ -5,7 +5,6 @@ xmlns:commonsearch="urn:import:org.roda.wui.client.common.search"> - - + diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/tools/ConfigurationManager.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/tools/ConfigurationManager.java index b5726d0247..92c583fe64 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/tools/ConfigurationManager.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/tools/ConfigurationManager.java @@ -69,6 +69,27 @@ public static String getTranslation(String... keyParts) { return values.isEmpty() ? null : values.get(0); } + /** + * Used when the configuration is setup as following: + * + * keyParts: i18nKey + * + * i18nKey: returnValue + * + * This method resolves the keyParts to an 18n key and retrieves its associated + * translation. + * + * @return the translation for an i18n key that is the property value for the + * provided keyParts + */ + public static String resolveTranslation(String... keyParts) { + String i18nKey = getString(keyParts); + if (i18nKey != null) { + return getTranslation(i18nKey); + } + return null; + } + /** * @return The integer property value for the provided keyParts. Or * {@code defaultValue} if the property value was null, not an integer diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/tools/DescriptionLevelUtils.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/tools/DescriptionLevelUtils.java index 1a6aede2e4..e28830b650 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/tools/DescriptionLevelUtils.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/tools/DescriptionLevelUtils.java @@ -20,7 +20,7 @@ public class DescriptionLevelUtils { @SuppressWarnings("unused") - private static ClientMessages messages = GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private static final String TOP_ICON = ""; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/tools/HistoryUtils.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/tools/HistoryUtils.java index 4164cabfce..896f0ae58c 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/tools/HistoryUtils.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/tools/HistoryUtils.java @@ -23,22 +23,28 @@ import org.roda.core.data.v2.ip.IndexedFile; import org.roda.core.data.v2.ip.IndexedRepresentation; import org.roda.core.data.v2.ip.TransferredResource; +import org.roda.core.data.v2.ip.metadata.IndexedPreservationEvent; import org.roda.core.data.v2.jobs.IndexedReport; import org.roda.core.data.v2.jobs.Job; import org.roda.core.data.v2.notifications.Notification; import org.roda.core.data.v2.ri.RepresentationInformation; import org.roda.core.data.v2.risks.IndexedRisk; import org.roda.core.data.v2.risks.RiskIncidence; -import org.roda.wui.client.browse.BrowseAIP; +import org.roda.core.data.v2.user.RODAMember; import org.roda.wui.client.browse.BrowseDIP; import org.roda.wui.client.browse.BrowseFile; import org.roda.wui.client.browse.BrowseRepresentation; +import org.roda.wui.client.browse.BrowseTop; import org.roda.wui.client.browse.BrowserService; +import org.roda.wui.client.browse.ShowPreservationEvent; import org.roda.wui.client.common.utils.AsyncCallbackUtils; +import org.roda.wui.client.common.utils.StringUtils; import org.roda.wui.client.ingest.process.ShowJob; import org.roda.wui.client.ingest.process.ShowJobReport; import org.roda.wui.client.ingest.transfer.IngestTransfer; import org.roda.wui.client.ingest.transfer.TransferUpload; +import org.roda.wui.client.management.EditGroup; +import org.roda.wui.client.management.EditUser; import org.roda.wui.client.management.ShowNotification; import org.roda.wui.client.planning.ShowRepresentationInformation; import org.roda.wui.client.planning.ShowRisk; @@ -155,37 +161,23 @@ public static String createHistoryHashLink(List path) { } public static String createHistoryHashLink(HistoryResolver resolver, String... extrapath) { - List path = ListUtils.concat(resolver.getHistoryPath(), extrapath); - return createHistoryHashLink(path); + return createHistoryHashLink(getHistory(resolver, extrapath)); } public static String createHistoryHashLink(HistoryResolver resolver, List extrapath) { - List path = ListUtils.concat(resolver.getHistoryPath(), extrapath); - return createHistoryHashLink(path); + return createHistoryHashLink(getHistory(resolver, extrapath)); } public static List getHistoryBrowse(String aipId) { - List history = new ArrayList<>(); - history.addAll(BrowseAIP.RESOLVER.getHistoryPath()); - history.add(aipId); - return history; + return getHistory(BrowseTop.RESOLVER, aipId); } public static List getHistoryBrowseDIP(String dipId) { - List history = new ArrayList<>(); - history.addAll(BrowseAIP.RESOLVER.getHistoryPath()); - history.add(BrowseDIP.RESOLVER.getHistoryToken()); - history.add(dipId); - return history; + return getHistory(BrowseDIP.RESOLVER, dipId); } public static List getHistoryBrowseDIPFile(String dipId, String dipFileUUID) { - List history = new ArrayList<>(); - history.addAll(BrowseAIP.RESOLVER.getHistoryPath()); - history.add(BrowseDIP.RESOLVER.getHistoryToken()); - history.add(dipId); - history.add(dipFileUUID); - return history; + return getHistory(BrowseDIP.RESOLVER, dipId, dipFileUUID); } public static List getHistoryBrowse(DIPFile dipFile) { @@ -213,12 +205,7 @@ public static void openBrowse(IndexedAIP aip) { } public static List getHistoryBrowse(String aipId, String representationId) { - List history = new ArrayList<>(); - history.addAll(BrowseAIP.RESOLVER.getHistoryPath()); - history.add(BrowseRepresentation.RESOLVER.getHistoryToken()); - history.add(aipId); - history.add(representationId); - return history; + return getHistory(BrowseRepresentation.RESOLVER, aipId, representationId); } public static List getHistoryBrowse(IndexedRepresentation representation) { @@ -235,14 +222,12 @@ public static void openBrowse(IndexedRepresentation representation) { public static List getHistoryBrowse(String aipId, String representationId, List filePath, String fileId) { - List history = new ArrayList<>(); - history.addAll(BrowseAIP.RESOLVER.getHistoryPath()); - history.add(BrowseFile.RESOLVER.getHistoryToken()); - history.add(aipId); - history.add(representationId); - history.addAll(filePath); - history.add(fileId); - return history; + List tokens = new ArrayList<>(); + tokens.add(aipId); + tokens.add(representationId); + tokens.addAll(filePath); + tokens.add(fileId); + return getHistory(BrowseFile.RESOLVER, tokens); } public static List getHistoryBrowse(IndexedFile file) { @@ -258,14 +243,12 @@ public static void openBrowse(IndexedFile file) { } public static List getHistoryUpload(IndexedFile folder) { - List history = new ArrayList<>(); - history.addAll(BrowseAIP.RESOLVER.getHistoryPath()); - history.add(TransferUpload.BROWSE_RESOLVER.getHistoryToken()); - history.add(folder.getAipId()); - history.add(folder.getRepresentationId()); - history.addAll(folder.getPath()); - history.add(folder.getId()); - return history; + List tokens = new ArrayList<>(); + tokens.add(folder.getAipId()); + tokens.add(folder.getRepresentationId()); + tokens.addAll(folder.getPath()); + tokens.add(folder.getId()); + return getHistory(TransferUpload.BROWSE_FILE_RESOLVER, tokens); } public static void openUpload(IndexedRepresentation representation) { @@ -273,12 +256,7 @@ public static void openUpload(IndexedRepresentation representation) { } public static List getHistoryUpload(IndexedRepresentation representation) { - List history = new ArrayList<>(); - history.addAll(BrowseAIP.RESOLVER.getHistoryPath()); - history.add(TransferUpload.BROWSE_RESOLVER.getHistoryToken()); - history.add(representation.getAipId()); - history.add(representation.getId()); - return history; + return getHistory(TransferUpload.BROWSE_RESOLVER, representation.getAipId(), representation.getId()); } public static void openUpload(IndexedFile folder) { @@ -287,11 +265,20 @@ public static void openUpload(IndexedFile folder) { } } - public static List getHistory(List resolverPath, String resourceUUID) { - List history = new ArrayList<>(); - history.addAll(resolverPath); - history.add(resourceUUID); - return history; + public static List getHistory(List resolverPath, String... extraPath) { + return ListUtils.concat(resolverPath, extraPath); + } + + public static List getHistory(List resolverPath, List extraPath) { + return ListUtils.concat(resolverPath, extraPath); + } + + public static List getHistory(HistoryResolver resolver, String... extrapath) { + return getHistory(resolver.getHistoryPath(), extrapath); + } + + public static List getHistory(HistoryResolver resolver, List extrapath) { + return getHistory(resolver.getHistoryPath(), extrapath); } public static String getSearchHistoryByRepresentationInformationFilter(List filters, String searchType) { @@ -373,6 +360,28 @@ public static void resolve(T object, boolean replace) { } else if (object instanceof IndexedReport) { IndexedReport report = (IndexedReport) object; path = HistoryUtils.getHistory(ShowJobReport.RESOLVER.getHistoryPath(), report.getUUID()); + } else if (object instanceof RODAMember) { + RODAMember member = (RODAMember) object; + HistoryUtils.newHistory(member.isUser() ? EditUser.RESOLVER : EditGroup.RESOLVER, member.getId()); + } else if (object instanceof IndexedPreservationEvent) { + IndexedPreservationEvent preservationEvent = (IndexedPreservationEvent) object; + + String eventId = preservationEvent.getId(); + String aipUUID = preservationEvent.getAipID(); + String representationUUID = preservationEvent.getRepresentationUUID(); + String fileUUID = preservationEvent.getFileUUID(); + + if (StringUtils.isNotBlank(fileUUID)) { + path = HistoryUtils.getHistory(ShowPreservationEvent.RESOLVER.getHistoryPath(), aipUUID, representationUUID, + fileUUID, eventId); + } else if (StringUtils.isNotBlank(representationUUID)) { + path = HistoryUtils.getHistory(ShowPreservationEvent.RESOLVER.getHistoryPath(), aipUUID, representationUUID, + eventId); + } else if (StringUtils.isNotBlank(aipUUID)) { + path = HistoryUtils.getHistory(ShowPreservationEvent.RESOLVER.getHistoryPath(), aipUUID, eventId); + } else { + path = HistoryUtils.getHistory(ShowPreservationEvent.RESOLVER.getHistoryPath(), eventId); + } } else { Toast.showError("Resolve of class not supported: " + object.getClass().getName()); } diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/tools/Humanize.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/tools/Humanize.java index c5c7ac7e8d..4422e24978 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/tools/Humanize.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/tools/Humanize.java @@ -18,7 +18,7 @@ import config.i18n.client.ClientMessages; public class Humanize { - private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); public static final long ONE_SECOND = 1000; public static final long SECONDS = 60; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/widgets/Toast.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/widgets/Toast.java index f9a06a74a1..3e67b298f7 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/widgets/Toast.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/common/client/widgets/Toast.java @@ -56,7 +56,7 @@ public enum MessagePopupType { ERROR_MESSAGE, INFO } - private static final ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class); + private static final ClientMessages messages = GWT.create(ClientMessages.class); private final int slotNumber; diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages.properties index 7ac4981d1a..411ac5378d 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages.properties @@ -1,107 +1,107 @@ ########################################## # search fields ########################################## -ui.search.fields.items.identifier=Identifier -ui.search.fields.items.uuid=Identifier -ui.search.fields.items.reference=Original reference -ui.search.fields.items.title=Title -ui.search.fields.items.description=Description -ui.search.fields.items.scope=Scope and content -ui.search.fields.items.origination=Origination -ui.search.fields.items.dates=Date -ui.search.fields.items.level=Level -ui.search.fields.items.ingestSIPIds=Ingest SIP identifier -ui.search.fields.items.type=Type - -ui.search.fields.representations.identifier=Identifier -ui.search.fields.representations.uuid=Identifier -ui.search.fields.representations.type=Type -ui.search.fields.representations.size=Size -ui.search.fields.representations.numberOfFiles=Number of files -ui.search.fields.representations.original=Original -ui.search.fields.representations.representationStates=Representation status - -ui.search.fields.files.uuid=Identifier -ui.search.fields.files.filename=Filename -ui.search.fields.files.format=Format -ui.search.fields.files.formatVersion=Format version -ui.search.fields.files.pronom=PRONOM -ui.search.fields.files.mimetype=Mimetype -ui.search.fields.files.extension=Extension -ui.search.fields.files.formatDesignation=Format designation -ui.search.fields.files.filesize=Filesize -ui.search.fields.files.fulltext=Fulltext - -ui.search.fields.jobs.name=Name -ui.search.fields.jobs.dates=Dates - -ui.search.fields.job_reports.dates=Dates -ui.search.fields.job_reports.sourceObjectOriginalIds=Source original identifiers -ui.search.fields.job_reports.sourceObjectOriginalName=Source original name -ui.search.fields.job_reports.outcomeObjectId=Outcome object identifier -ui.search.fields.job_reports.outcomeObjectLabel=Outcome object label - -ui.search.fields.preservation_events.dates=Dates - -ui.search.fields.action_logs.dates=Dates -ui.search.fields.action_logs.address=Address - -ui.search.fields.notifications.dates=Dates - -ui.search.fields.transferred_resources.dates=Dates -ui.search.fields.transferred_resources.size=Size - -ui.search.fields.risks.dates=Identification date -ui.search.fields.risks.name=Name - -ui.search.fields.incidences.mitigatedOn=Mitigation date -ui.search.fields.incidences.detectedOn=Detection date - -ui.search.fields.ri.relation.conforms_to=Conforms to -ui.search.fields.ri.relation.has_created=Has created -ui.search.fields.ri.relation.was_created_by=Was created by -ui.search.fields.ri.relation.has_format=Has format -ui.search.fields.ri.relation.is_format_of=Is format of -ui.search.fields.ri.relation.has_part=Has part -ui.search.fields.ri.relation.is_part_of=Is part of -ui.search.fields.ri.relation.has_version=Has version -ui.search.fields.ri.relation.is_version_of=Is version of -ui.search.fields.ri.relation.references=References -ui.search.fields.ri.relation.is_referenced_by=Is referenced by -ui.search.fields.ri.relation.replaces=Replaces -ui.search.fields.ri.relation.is_replaced_by=Is replaced by -ui.search.fields.ri.relation.requires=Requires -ui.search.fields.ri.relation.is_required_by=Is required by -ui.search.fields.ri.relation.has_source=Has source -ui.search.fields.ri.relation.is_source_of=Is source of -ui.search.fields.ri.relation.rendered_by=Rendered by -ui.search.fields.ri.relation.executed_by=Executed by -ui.search.fields.ri.relation.specified_by=Specified by -ui.search.fields.ri.relation.represents=Represents - -ui.search.fields.ri.relation.subtype_of=Subtype of -ui.search.fields.ri.relation.has_subtype=Has subtype -ui.search.fields.ri.relation.component_of=Component of -ui.search.fields.ri.relation.has_component=Has component -ui.search.fields.ri.relation.contains=Contains -ui.search.fields.ri.relation.is_contained=Is contained -ui.search.fields.ri.relation.extension_of=Extension of -ui.search.fields.ri.relation.has_extension=Has extension -ui.search.fields.ri.relation.modification_of=Modification of -ui.search.fields.ri.relation.has_modification=Has modification -ui.search.fields.ri.relation.used_by=Used by -ui.search.fields.ri.relation.uses=Uses -ui.search.fields.ri.relation.affinity_to=Affinity to -ui.search.fields.ri.relation.defined_via=Defined via -ui.search.fields.ri.relation.equivalent_to=Equivalent to -ui.search.fields.ri.relation.may_contain=May contain -ui.search.fields.ri.relation.may_have_component=May have component -ui.search.fields.ri.relation.must_have_component=Must have component -ui.search.fields.ri.relation.has_modified_version=Has modified version -ui.search.fields.ri.relation.has_later_version=Has later version -ui.search.fields.ri.relation.has_earlier_version=Has earlier version -ui.search.fields.ri.relation.see_also=See also -ui.search.fields.ri.relation.other=Other +ui.search.fields.IndexedAIP.identifier=Identifier +ui.search.fields.IndexedAIP.uuid=Identifier +ui.search.fields.IndexedAIP.reference=Original reference +ui.search.fields.IndexedAIP.title=Title +ui.search.fields.IndexedAIP.description=Description +ui.search.fields.IndexedAIP.scope=Scope and content +ui.search.fields.IndexedAIP.origination=Origination +ui.search.fields.IndexedAIP.dates=Date +ui.search.fields.IndexedAIP.level=Level +ui.search.fields.IndexedAIP.ingestSIPIds=Ingest SIP identifier +ui.search.fields.IndexedAIP.type=Type + +ui.search.fields.IndexedRepresentation.identifier=Identifier +ui.search.fields.IndexedRepresentation.uuid=Identifier +ui.search.fields.IndexedRepresentation.type=Type +ui.search.fields.IndexedRepresentation.size=Size +ui.search.fields.IndexedRepresentation.numberOfFiles=Number of files +ui.search.fields.IndexedRepresentation.original=Original +ui.search.fields.IndexedRepresentation.representationStates=Representation status + +ui.search.fields.IndexedFile.uuid=Identifier +ui.search.fields.IndexedFile.filename=Filename +ui.search.fields.IndexedFile.format=Format +ui.search.fields.IndexedFile.formatVersion=Format version +ui.search.fields.IndexedFile.pronom=PRONOM +ui.search.fields.IndexedFile.mimetype=Mimetype +ui.search.fields.IndexedFile.extension=Extension +ui.search.fields.IndexedFile.formatDesignation=Format designation +ui.search.fields.IndexedFile.filesize=Filesize +ui.search.fields.IndexedFile.fulltext=Fulltext + +ui.search.fields.Job.name=Name +ui.search.fields.Job.dates=Dates + +ui.search.fields.IndexedReport.dates=Dates +ui.search.fields.IndexedReport.sourceObjectOriginalIds=Source original identifiers +ui.search.fields.IndexedReport.sourceObjectOriginalName=Source original name +ui.search.fields.IndexedReport.outcomeObjectId=Outcome object identifier +ui.search.fields.IndexedReport.outcomeObjectLabel=Outcome object label + +ui.search.fields.IndexedPreservationEvent.dates=Dates + +ui.search.fields.LogEntry.dates=Dates +ui.search.fields.LogEntry.address=Address + +ui.search.fields.Notification.dates=Dates + +ui.search.fields.TransferredResource.dates=Dates +ui.search.fields.TransferredResource.size=Size + +ui.search.fields.IndexedRisk.dates=Identification date +ui.search.fields.IndexedRisk.name=Name + +ui.search.fields.RepresentationInformationskIncidence.mitigatedOn=Mitigation date +ui.search.fields.RepresentationInformationskIncidence.detectedOn=Detection date + +ui.search.fields.RepresentationInformation.relation.conforms_to=Conforms to +ui.search.fields.RepresentationInformation.relation.has_created=Has created +ui.search.fields.RepresentationInformation.relation.was_created_by=Was created by +ui.search.fields.RepresentationInformation.relation.has_format=Has format +ui.search.fields.RepresentationInformation.relation.is_format_of=Is format of +ui.search.fields.RepresentationInformation.relation.has_part=Has part +ui.search.fields.RepresentationInformation.relation.is_part_of=Is part of +ui.search.fields.RepresentationInformation.relation.has_version=Has version +ui.search.fields.RepresentationInformation.relation.is_version_of=Is version of +ui.search.fields.RepresentationInformation.relation.references=References +ui.search.fields.RepresentationInformation.relation.is_referenced_by=Is referenced by +ui.search.fields.RepresentationInformation.relation.replaces=Replaces +ui.search.fields.RepresentationInformation.relation.is_replaced_by=Is replaced by +ui.search.fields.RepresentationInformation.relation.requires=Requires +ui.search.fields.RepresentationInformation.relation.is_required_by=Is required by +ui.search.fields.RepresentationInformation.relation.has_source=Has source +ui.search.fields.RepresentationInformation.relation.is_source_of=Is source of +ui.search.fields.RepresentationInformation.relation.rendered_by=Rendered by +ui.search.fields.RepresentationInformation.relation.executed_by=Executed by +ui.search.fields.RepresentationInformation.relation.specified_by=Specified by +ui.search.fields.RepresentationInformation.relation.represents=Represents + +ui.search.fields.RepresentationInformation.relation.subtype_of=Subtype of +ui.search.fields.RepresentationInformation.relation.has_subtype=Has subtype +ui.search.fields.RepresentationInformation.relation.component_of=Component of +ui.search.fields.RepresentationInformation.relation.has_component=Has component +ui.search.fields.RepresentationInformation.relation.contains=Contains +ui.search.fields.RepresentationInformation.relation.is_contained=Is contained +ui.search.fields.RepresentationInformation.relation.extension_of=Extension of +ui.search.fields.RepresentationInformation.relation.has_extension=Has extension +ui.search.fields.RepresentationInformation.relation.modification_of=Modification of +ui.search.fields.RepresentationInformation.relation.has_modification=Has modification +ui.search.fields.RepresentationInformation.relation.used_by=Used by +ui.search.fields.RepresentationInformation.relation.uses=Uses +ui.search.fields.RepresentationInformation.relation.affinity_to=Affinity to +ui.search.fields.RepresentationInformation.relation.defined_via=Defined via +ui.search.fields.RepresentationInformation.relation.equivalent_to=Equivalent to +ui.search.fields.RepresentationInformation.relation.may_contain=May contain +ui.search.fields.RepresentationInformation.relation.may_have_component=May have component +ui.search.fields.RepresentationInformation.relation.must_have_component=Must have component +ui.search.fields.RepresentationInformation.relation.has_modified_version=Has modified version +ui.search.fields.RepresentationInformation.relation.has_later_version=Has later version +ui.search.fields.RepresentationInformation.relation.has_earlier_version=Has earlier version +ui.search.fields.RepresentationInformation.relation.see_also=See also +ui.search.fields.RepresentationInformation.relation.other=Other ########################################## # facets @@ -574,3 +574,8 @@ email.verification.from = RODA Admin email.recoverlogin.subject = Recover login in RODA email.recoverlogin.from = RODA Admin +########################################## +# Objects +########################################## +lists.label.BrowseAIP_aipChildren.single: sublevel +lists.label.BrowseAIP_aipChildren.multiple: sublevels diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_es_CL.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_es_CL.properties index 6df098bb58..ffecde131a 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_es_CL.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_es_CL.properties @@ -1,28 +1,28 @@ ########################################## # search fields ########################################## -ui.search.fields.items.reference=Referencia original -ui.search.fields.items.title=Titulo -ui.search.fields.items.description=Descripción -ui.search.fields.items.scope=Alcance y contenido -ui.search.fields.items.origination=Origen -ui.search.fields.items.dates=Fecha -ui.search.fields.items.level=Nível - -ui.search.fields.representations.identifier=Identificador -ui.search.fields.representations.type=Tipo -ui.search.fields.representations.size=Tamaño -ui.search.fields.representations.numberOfFiles=Número de archivos -ui.search.fields.representations.original=Original - -ui.search.fields.files.filename=Nombre del archivo -ui.search.fields.files.format=Formato -ui.search.fields.files.formatVersion=Versión del formato -ui.search.fields.files.pronom=PRONOM -ui.search.fields.files.mimetype=Mimetype -ui.search.fields.files.extension=Extensión -ui.search.fields.files.filesize=Tamaño del archivo -ui.search.fields.files.fulltext=Texto completo +ui.search.fields.IndexedAIP.reference=Referencia original +ui.search.fields.IndexedAIP.title=Titulo +ui.search.fields.IndexedAIP.description=Descripción +ui.search.fields.IndexedAIP.scope=Alcance y contenido +ui.search.fields.IndexedAIP.origination=Origen +ui.search.fields.IndexedAIP.dates=Fecha +ui.search.fields.IndexedAIP.level=Nível + +ui.search.fields.IndexedRepresentation.identifier=Identificador +ui.search.fields.IndexedRepresentation.type=Tipo +ui.search.fields.IndexedRepresentation.size=Tamaño +ui.search.fields.IndexedRepresentation.numberOfFiles=Número de archivos +ui.search.fields.IndexedRepresentation.original=Original + +ui.search.fields.IndexedFile.filename=Nombre del archivo +ui.search.fields.IndexedFile.format=Formato +ui.search.fields.IndexedFile.formatVersion=Versión del formato +ui.search.fields.IndexedFile.pronom=PRONOM +ui.search.fields.IndexedFile.mimetype=Mimetype +ui.search.fields.IndexedFile.extension=Extensión +ui.search.fields.IndexedFile.filesize=Tamaño del archivo +ui.search.fields.IndexedFile.fulltext=Texto completo ########################################## # facets diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_pt_PT.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_pt_PT.properties index 9144115598..93152f5089 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_pt_PT.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/ServerMessages_pt_PT.properties @@ -1,107 +1,107 @@ ########################################## # search fields ########################################## -ui.search.fields.items.identifier=Identificador -ui.search.fields.items.uuid=Identificador -ui.search.fields.items.reference=Referência original -ui.search.fields.items.title=Título -ui.search.fields.items.description=Descrição -ui.search.fields.items.scope=Âmbito e conteúdo -ui.search.fields.items.origination=Produtor -ui.search.fields.items.dates=Data -ui.search.fields.items.level=Nível -ui.search.fields.items.ingestSIPIds=Identificador do SIP de ingestão -ui.search.fields.items.type=Tipo - -ui.search.fields.representations.identifier=Identificador -ui.search.fields.representations.uuid=Identificador -ui.search.fields.representations.type=Tipo -ui.search.fields.representations.size=Tamanho -ui.search.fields.representations.numberOfFiles=Número de ficheiros -ui.search.fields.representations.original=Original -ui.search.fields.representations.representationStates=Estado da representação - -ui.search.fields.files.uuid=Identificador -ui.search.fields.files.filename=Nome de ficheiro -ui.search.fields.files.format=Formato -ui.search.fields.files.formatVersion=Versão do formato -ui.search.fields.files.pronom=PRONOM -ui.search.fields.files.mimetype=Mimetype -ui.search.fields.files.extension=Extensão -ui.search.fields.files.formatDesignation=Designação do formato -ui.search.fields.files.filesize=Tamanho -ui.search.fields.files.fulltext=Texto integral - -ui.search.fields.jobs.name=Nome -ui.search.fields.jobs.dates=Datas - -ui.search.fields.job_reports.dates=Datas -ui.search.fields.job_reports.sourceObjectOriginalIds=Identificadores originais do objeto de entrada -ui.search.fields.job_reports.sourceObjectOriginalName=Nomes originais do objeto de entrada -ui.search.fields.job_reports.outcomeObjectId=Identificador do objeto resultado -ui.search.fields.job_reports.outcomeObjectLabel=Legenda do objeto resultado - -ui.search.fields.preservation_events.dates=Datas - -ui.search.fields.action_logs.dates=Datas -ui.search.fields.action_logs.address=Endereço - -ui.search.fields.notifications.dates=Datas - -ui.search.fields.transferred_resources.dates=Datas -ui.search.fields.transferred_resources.size=Tamanho - -ui.search.fields.risks.dates=Data de identificação -ui.search.fields.risks.name=Nome - -ui.search.fields.incidences.mitigatedOn=Data de mitigação -ui.search.fields.incidences.detectedOn=Data de deteção - -ui.search.fields.ri.relation.conforms_to=Em conformidade com -ui.search.fields.ri.relation.has_created=Criou -ui.search.fields.ri.relation.was_created_by=Foi criado por -ui.search.fields.ri.relation.has_format=Tem formato -ui.search.fields.ri.relation.is_format_of=É formato de -ui.search.fields.ri.relation.has_part=Tem parte -ui.search.fields.ri.relation.is_part_of=É parte de -ui.search.fields.ri.relation.has_version=Tem versão -ui.search.fields.ri.relation.is_version_of=É versão de -ui.search.fields.ri.relation.references=Referencia -ui.search.fields.ri.relation.is_referenced_by=É referenciado por -ui.search.fields.ri.relation.replaces=Substitui -ui.search.fields.ri.relation.is_replaced_by=É substituído por -ui.search.fields.ri.relation.requires=Requer -ui.search.fields.ri.relation.is_required_by=É requerido por -ui.search.fields.ri.relation.has_source=Tem fonte -ui.search.fields.ri.relation.is_source_of=É fonte de -ui.search.fields.ri.relation.rendered_by=Processado por -ui.search.fields.ri.relation.executed_by=Executado por -ui.search.fields.ri.relation.specified_by=Especificado por -ui.search.fields.ri.relation.represents=Representa - -ui.search.fields.ri.relation.subtype_of=Sub-tipo de -ui.search.fields.ri.relation.has_subtype=Tem sub-tipo -ui.search.fields.ri.relation.component_of=Componente de -ui.search.fields.ri.relation.has_component=Tem componente -ui.search.fields.ri.relation.contains=Contem -ui.search.fields.ri.relation.is_contained=É contido -ui.search.fields.ri.relation.extension_of=Extensão de -ui.search.fields.ri.relation.has_extension=Tem extensão -ui.search.fields.ri.relation.modification_of=Modificação de -ui.search.fields.ri.relation.has_modification=Tem modificação -ui.search.fields.ri.relation.used_by=Usado por -ui.search.fields.ri.relation.uses=Usa -ui.search.fields.ri.relation.affinity_to=Afinidade com -ui.search.fields.ri.relation.defined_via=Definido via -ui.search.fields.ri.relation.equivalent_to=Equivalente a -ui.search.fields.ri.relation.may_contain=Pode conter -ui.search.fields.ri.relation.may_have_component=Pode ter componente -ui.search.fields.ri.relation.must_have_component=Tem componente -ui.search.fields.ri.relation.has_modified_version=Tem versão modificada -ui.search.fields.ri.relation.has_later_version=Tem versão recente -ui.search.fields.ri.relation.has_earlier_version=Tem versão antiga -ui.search.fields.ri.relation.see_also=Ver também -ui.search.fields.ri.relation.other=Outro +ui.search.fields.IndexedAIP.identifier=Identificador +ui.search.fields.IndexedAIP.uuid=Identificador +ui.search.fields.IndexedAIP.reference=Referência original +ui.search.fields.IndexedAIP.title=Título +ui.search.fields.IndexedAIP.description=Descrição +ui.search.fields.IndexedAIP.scope=Âmbito e conteúdo +ui.search.fields.IndexedAIP.origination=Produtor +ui.search.fields.IndexedAIP.dates=Data +ui.search.fields.IndexedAIP.level=Nível +ui.search.fields.IndexedAIP.ingestSIPIds=Identificador do SIP de ingestão +ui.search.fields.IndexedAIP.type=Tipo + +ui.search.fields.IndexedRepresentation.identifier=Identificador +ui.search.fields.IndexedRepresentation.uuid=Identificador +ui.search.fields.IndexedRepresentation.type=Tipo +ui.search.fields.IndexedRepresentation.size=Tamanho +ui.search.fields.IndexedRepresentation.numberOfFiles=Número de ficheiros +ui.search.fields.IndexedRepresentation.original=Original +ui.search.fields.IndexedRepresentation.representationStates=Estado da representação + +ui.search.fields.IndexedFile.uuid=Identificador +ui.search.fields.IndexedFile.filename=Nome de ficheiro +ui.search.fields.IndexedFile.format=Formato +ui.search.fields.IndexedFile.formatVersion=Versão do formato +ui.search.fields.IndexedFile.pronom=PRONOM +ui.search.fields.IndexedFile.mimetype=Mimetype +ui.search.fields.IndexedFile.extension=Extensão +ui.search.fields.IndexedFile.formatDesignation=Designação do formato +ui.search.fields.IndexedFile.filesize=Tamanho +ui.search.fields.IndexedFile.fulltext=Texto integral + +ui.search.fields.Job.name=Nome +ui.search.fields.Job.dates=Datas + +ui.search.fields.IndexedReport.dates=Datas +ui.search.fields.IndexedReport.sourceObjectOriginalIds=Identificadores originais do objeto de entrada +ui.search.fields.IndexedReport.sourceObjectOriginalName=Nomes originais do objeto de entrada +ui.search.fields.IndexedReport.outcomeObjectId=Identificador do objeto resultado +ui.search.fields.IndexedReport.outcomeObjectLabel=Legenda do objeto resultado + +ui.search.fields.IndexedPreservationEvent.dates=Datas + +ui.search.fields.LogEntry.dates=Datas +ui.search.fields.LogEntry.address=Endereço + +ui.search.fields.Notification.dates=Datas + +ui.search.fields.TransferredResource.dates=Datas +ui.search.fields.TransferredResource.size=Tamanho + +ui.search.fields.IndexedRisk.dates=Data de identificação +ui.search.fields.IndexedRisk.name=Nome + +ui.search.fields.RiskIncidence.mitigatedOn=Data de mitigação +ui.search.fields.RiskIncidence.detectedOn=Data de deteção + +ui.search.fields.RepresentationInformation.relation.conforms_to=Em conformidade com +ui.search.fields.RepresentationInformation.relation.has_created=Criou +ui.search.fields.RepresentationInformation.relation.was_created_by=Foi criado por +ui.search.fields.RepresentationInformation.relation.has_format=Tem formato +ui.search.fields.RepresentationInformation.relation.is_format_of=É formato de +ui.search.fields.RepresentationInformation.relation.has_part=Tem parte +ui.search.fields.RepresentationInformation.relation.is_part_of=É parte de +ui.search.fields.RepresentationInformation.relation.has_version=Tem versão +ui.search.fields.RepresentationInformation.relation.is_version_of=É versão de +ui.search.fields.RepresentationInformation.relation.references=Referencia +ui.search.fields.RepresentationInformation.relation.is_referenced_by=É referenciado por +ui.search.fields.RepresentationInformation.relation.replaces=Substitui +ui.search.fields.RepresentationInformation.relation.is_replaced_by=É substituído por +ui.search.fields.RepresentationInformation.relation.requires=Requer +ui.search.fields.RepresentationInformation.relation.is_required_by=É requerido por +ui.search.fields.RepresentationInformation.relation.has_source=Tem fonte +ui.search.fields.RepresentationInformation.relation.is_source_of=É fonte de +ui.search.fields.RepresentationInformation.relation.rendered_by=Processado por +ui.search.fields.RepresentationInformation.relation.executed_by=Executado por +ui.search.fields.RepresentationInformation.relation.specified_by=Especificado por +ui.search.fields.RepresentationInformation.relation.represents=Representa + +ui.search.fields.RepresentationInformation.relation.subtype_of=Sub-tipo de +ui.search.fields.RepresentationInformation.relation.has_subtype=Tem sub-tipo +ui.search.fields.RepresentationInformation.relation.component_of=Componente de +ui.search.fields.RepresentationInformation.relation.has_component=Tem componente +ui.search.fields.RepresentationInformation.relation.contains=Contem +ui.search.fields.RepresentationInformation.relation.is_contained=É contido +ui.search.fields.RepresentationInformation.relation.extension_of=Extensão de +ui.search.fields.RepresentationInformation.relation.has_extension=Tem extensão +ui.search.fields.RepresentationInformation.relation.modification_of=Modificação de +ui.search.fields.RepresentationInformation.relation.has_modification=Tem modificação +ui.search.fields.RepresentationInformation.relation.used_by=Usado por +ui.search.fields.RepresentationInformation.relation.uses=Usa +ui.search.fields.RepresentationInformation.relation.affinity_to=Afinidade com +ui.search.fields.RepresentationInformation.relation.defined_via=Definido via +ui.search.fields.RepresentationInformation.relation.equivalent_to=Equivalente a +ui.search.fields.RepresentationInformation.relation.may_contain=Pode conter +ui.search.fields.RepresentationInformation.relation.may_have_component=Pode ter componente +ui.search.fields.RepresentationInformation.relation.must_have_component=Tem componente +ui.search.fields.RepresentationInformation.relation.has_modified_version=Tem versão modificada +ui.search.fields.RepresentationInformation.relation.has_later_version=Tem versão recente +ui.search.fields.RepresentationInformation.relation.has_earlier_version=Tem versão antiga +ui.search.fields.RepresentationInformation.relation.see_also=Ver também +ui.search.fields.RepresentationInformation.relation.other=Outro ########################################## # facets @@ -572,3 +572,9 @@ email.verification.subject = Registo no RODA email.verification.from = Administrador do RODA email.recoverlogin.subject = Recuperar credenciais no RODA email.recoverlogin.from = Administrador do RODA + +########################################## +# Objects +########################################## +lists.label.childrenAIP.single: subnível +lists.label.childrenAIP.multiple: subníveis diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages.properties index 6259f937eb..cd37784be9 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages.properties @@ -179,9 +179,33 @@ someOfAObject[org.roda.core.data.v2.ip.metadata.PreservationMetadata]: preservat someOfAObject[org.roda.core.data.v2.formats.Format]: formats someOfAObject[org.roda.core.data.v2.Void]: No input objects -selected[none]: No items selected -selected[one]: {0,number} selected item -selected: {0,number} selected items +oneOfAObject: {0} +oneOfAObject[org.roda.core.data.v2.ip.AIP]:intellectual entity +oneOfAObject[org.roda.core.data.v2.ip.IndexedAIP]:intellectual entity +oneOfAObject[org.roda.core.data.v2.ip.Representation]:representation +oneOfAObject[org.roda.core.data.v2.ip.IndexedRepresentation]:representation +oneOfAObject[org.roda.core.data.v2.ip.File]:file +oneOfAObject[org.roda.core.data.v2.ip.IndexedFile]:file +oneOfAObject[org.roda.core.data.v2.ip.TransferredResource]:transferred resource +oneOfAObject[org.roda.core.data.v2.ip.DIP]: dissemination +oneOfAObject[org.roda.core.data.v2.ip.IndexedDIP]: dissemination +oneOfAObject[org.roda.core.data.v2.ip.DIPFile]:dissemination file +oneOfAObject[org.roda.core.data.v2.risks.Risk]: risk +oneOfAObject[org.roda.core.data.v2.risks.IndexedRisk]: risk +oneOfAObject[org.roda.core.data.v2.risks.RiskIncidence]: incidence +oneOfAObject[org.roda.core.data.v2.ri.RepresentationInformation]: representation information +oneOfAObject[org.roda.core.data.v2.jobs.Job]: job +oneOfAObject[org.roda.core.data.v2.jobs.Report]: report +oneOfAObject[org.roda.core.data.v2.jobs.IndexedReport]: report +oneOfAObject[org.roda.core.data.v2.notifications.Notification]: notification +oneOfAObject[org.roda.core.data.v2.log.LogEntry]: log entry +oneOfAObject[org.roda.core.data.v2.user.RODAMember]: user or group +oneOfAObject[org.roda.core.data.v2.ip.metadata.DescriptiveMetadata]: descriptive metadata +oneOfAObject[org.roda.core.data.v2.ip.metadata.PreservationMetadata]: preservation metadata +oneOfAObject[org.roda.core.data.v2.formats.Format]: format + +selected[\=1]: {0,number} {1} selected +selected: {0,number} {1} selected inspectTransferredResource: Inspect transferred resource identifierNotFound: Identifier (not found) @@ -388,6 +412,30 @@ aipTypeItem: Type: aipLevelItem: Level: # Search + +searchDropdownLabels: +searchDropdownLabels: {0} +searchDropdownLabels[org.roda.core.data.v2.ip.IndexedAIP]: Intellectual entities +searchDropdownLabels[org.roda.core.data.v2.ip.IndexedRepresentation]: Representations +searchDropdownLabels[org.roda.core.data.v2.ip.IndexedFile]: Files +searchDropdownLabels[org.roda.core.data.v2.ip.TransferredResource]: Transferred resources +searchDropdownLabels[org.roda.core.data.v2.ip.IndexedPreservationEvent]: disseminations +searchDropdownLabels[org.roda.core.data.v2.ip.IndexedDIP]: disseminations +searchDropdownLabels[org.roda.core.data.v2.ip.DIPFile]:dissemination files +searchDropdownLabels[org.roda.core.data.v2.risks.IndexedRisk]: Risks +searchDropdownLabels[org.roda.core.data.v2.risks.RiskIncidence]: Incidences +searchDropdownLabels[org.roda.core.data.v2.ri.RepresentationInformation]: representation information +searchDropdownLabels[org.roda.core.data.v2.jobs.Job]: Jobs +searchDropdownLabels[org.roda.core.data.v2.jobs.IndexedReport]: Reports +searchDropdownLabels[org.roda.core.data.v2.notifications.Notification]: notifications +searchDropdownLabels[org.roda.core.data.v2.log.LogEntry]: log entries +searchDropdownLabels[org.roda.core.data.v2.user.RODAMember]: users and groups +searchDropdownLabels[org.roda.core.data.v2.ip.metadata.DescriptiveMetadata]: descriptive metadata +searchDropdownLabels[org.roda.core.data.v2.ip.metadata.PreservationMetadata]: preservation metadata +searchDropdownLabels[org.roda.core.data.v2.formats.Format]: formats +searchDropdownLabels[org.roda.core.data.v2.Void]: No input objects + + searchListBoxItems: Intellectual entities searchListBoxRepresentations: Representations searchListBoxFiles: Files @@ -576,10 +624,10 @@ riskRegisterProcessButton: Start new process riskRegisterSearchPlaceHolder: Search risks... riskIncidenceRegisterSearchPlaceHolder: Search risk incidences... editRiskNotFound: Risk not found {0} -riskRemoveFolderConfirmDialogTitle: Confirm remove risk +riskRemoveConfirmDialogTitle: Confirm remove risk riskRemoveSelectedConfirmDialogMessage: Are you sure you want to remove the selected {0} risk(s)? -riskRemoveFolderConfirmDialogCancel: No -riskRemoveFolderConfirmDialogOk: Yes +riskRemoveConfirmDialogCancel: No +riskRemoveConfirmDialogOk: Yes riskRemoveSuccessTitle: Removed risk(s) riskRemoveSuccessMessage: Successfully removed {0} risk(s) modifyRiskMessage: Risk was modified @@ -593,6 +641,13 @@ riskHistoryButton: History editIncidenceNotFound: Incidence {0} not found editIncidenceFailure: Edit incidence {0} failed +riskIncidenceRemoveConfirmDialogTitle: Confirm remove risk incidence +riskIncidenceRemoveSelectedConfirmDialogMessage: Are you sure you want to remove the selected {0} risk incidence(s)? +riskIncidenceRemoveConfirmDialogCancel: No +riskIncidenceRemoveConfirmDialogOk: Yes +riskIncidenceRemoveSuccessTitle: Removed risk incidence(s) +riskIncidenceRemoveSuccessMessage: Successfully removed {0} risk incidence(s) + # Representation information register representationInformationRegisterTitle: Representation network representationInformationRegisterProcessButton: Start new process @@ -1283,7 +1338,7 @@ wrongMailFormat: Wrong e-mail format fileAlreadyExists: This file already exists -tableDownloadCSV: Export list +tableDownloadCSV: Export tableAction: Actions actionableEmptyHelp: Please select items using the checkboxes actionableEmptyHelp[NONE]: Please select items using the checkboxes @@ -1375,4 +1430,4 @@ representationInformationNameFromAssociation[File]: Files where field {0} is {1} insertImageUrl: Insert a image URL insertLinkUrl: Insert a URL editHTMLContent: Edit content via HTML -searchButtonAdvancedSearch=more options +searchButtonAdvancedSearch=advanced diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_es_CL.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_es_CL.properties index 02b1f66afb..b7faedd55a 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_es_CL.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_es_CL.properties @@ -519,10 +519,10 @@ showObjectsRiskCounter[one]: Este objeto tiene {0,number} riesgo createRiskFailure: Falló creación del riesgo {0} editRiskNotFound: Riesgo no encontrado {0} editRiskFailure: Falló edición del riesgo {0} -riskRemoveFolderConfirmDialogTitle: Confirmar eliminación del riesgo +riskRemoveConfirmDialogTitle: Confirmar eliminación del riesgo riskRemoveSelectedConfirmDialogMessage: Estas seguro de querer eliminar los riesgos {0} seleccionados? -riskRemoveFolderConfirmDialogCancel: No -riskRemoveFolderConfirmDialogOk: Si +riskRemoveConfirmDialogCancel: No +riskRemoveConfirmDialogOk: Si riskRemoveSuccessTitle: Reisgo(s) eliminados riskRemoveSuccessMessage: Exitosamente eliminados {0} riesgo(s) modifyRiskMessage: Riesgo modificado @@ -1565,7 +1565,7 @@ isNotValid: E-mail no es valido wrongMailFormat: E-Mail con formato errado fileAlreadyExists: Archivo ya existe -tableDownloadCSV: Exportar lista +tableDownloadCSV: Exportar tableAction: Acciones actionableEmptyHelp: Por favor, seleccione los elementos mediante las casillas de verificación actionableEmptyHelp[NONE]: Por favor, seleccione los elementos mediante las casillas de verificación diff --git a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_pt_PT.properties b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_pt_PT.properties index 051cce91ae..a38aa6fd0e 100644 --- a/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_pt_PT.properties +++ b/roda-ui/roda-wui/src/main/resources/config/i18n/client/ClientMessages_pt_PT.properties @@ -47,7 +47,7 @@ notificationTitle: Notificação usersAndGroupsTitle: Utilizadores e grupos usersAndGroupsSearchPlaceHolder: Pesquisar utilizadores e grupos... logsTitle: Registo de atividade -changeTypeTitle: Alterar tipo +changeTypeTitle: Editar tipo changeTypeSuccessful: O tipo da representação foi alterado com sucesso changeStatusTitle: Mudar estados changeStatusSuccessful: Estados alterados com sucesso @@ -179,9 +179,33 @@ someOfAObject[org.roda.core.data.v2.ip.metadata.PreservationMetadata]: metadados someOfAObject[org.roda.core.data.v2.formats.Format]: formatos someOfAObject[org.roda.core.data.v2.Void]: Sem objetos de entrada -selected[none]: Nenhum item selecionado -selected[one]: {0,number} item selecionado -selected: {0,number} itens selecionados +oneOfAObject: {0} +oneOfAObject[org.roda.core.data.v2.ip.AIP]: entidade intelectual +oneOfAObject[org.roda.core.data.v2.ip.IndexedAIP]: entidade intelectual +oneOfAObject[org.roda.core.data.v2.ip.Representation]: representação +oneOfAObject[org.roda.core.data.v2.ip.IndexedRepresentation]: representação +oneOfAObject[org.roda.core.data.v2.ip.File]: ficheiro +oneOfAObject[org.roda.core.data.v2.ip.IndexedFile]: ficheiro +oneOfAObject[org.roda.core.data.v2.ip.TransferredResource]:recurso transferido +oneOfAObject[org.roda.core.data.v2.ip.DIP]: disseminação +oneOfAObject[org.roda.core.data.v2.ip.IndexedDIP]: disseminação +oneOfAObject[org.roda.core.data.v2.ip.DIPFile]: ficheiro de disseminação +oneOfAObject[org.roda.core.data.v2.risks.Risk]: risco +oneOfAObject[org.roda.core.data.v2.risks.IndexedRisk]: risco +oneOfAObject[org.roda.core.data.v2.risks.RiskIncidence]:incidência +oneOfAObject[org.roda.core.data.v2.ri.RepresentationInformation]: informação de representação +oneOfAObject[org.roda.core.data.v2.jobs.Job]: processo +oneOfAObject[org.roda.core.data.v2.jobs.Report]: relatório +oneOfAObject[org.roda.core.data.v2.jobs.IndexedReport]: relatório +oneOfAObject[org.roda.core.data.v2.notifications.Notification]: notificação +oneOfAObject[org.roda.core.data.v2.log.LogEntry]:registo de atividade +oneOfAObject[org.roda.core.data.v2.user.RODAMember]: utilizador ou grupo +oneOfAObject[org.roda.core.data.v2.ip.metadata.DescriptiveMetadata]: metadados descritivos +oneOfAObject[org.roda.core.data.v2.ip.metadata.PreservationMetadata]: metadados de preservação +oneOfAObject[org.roda.core.data.v2.formats.Format]: formato + +selected[\=1]: {0,number} {1} selecionado +selected: {0,number} {1} selecionados inspectTransferredResource: Inspecionar recurso transferido identifierNotFound: Identificador (não encontrado) @@ -198,7 +222,7 @@ cannotReachServerError: Não é possível comunicar com o servidor, verifique a # Ingest transfer ingestTransferTitle: Transferência ingestTransferList: Lista de recursos transferidos -ingestTransferSearchPlaceHolder: Pesquisar... +ingestTransferSearchPlaceHolder: Pesquisa... ingestTransferItemInfo: Criado em {0}, com {1} ingestTransferRemoveFolderConfirmDialogTitle: Confirmar remoção de pasta ingestTransferRemoveFolderConfirmDialogMessage: Tem a certeza que pretende eliminar a pasta "{0}"? @@ -284,8 +308,8 @@ removeWholeFolderButton: Eliminar removeSelectedItemsButton: Eliminar ingestWholeFolderButton: Novo processo ingestSelectedItemsButton: Novo processo -changeTypeButton: Alterar tipo -changeStatusButton: Alterar estados +changeTypeButton: Editar tipo +changeStatusButton: Editar estados clearButton: Limpar selectAllButton: Todos closeButton: Fechar @@ -399,7 +423,7 @@ searchListBoxPreservationEvents: Eventos de preservação searchListBoxActionLogs: Registos de atividade searchListBoxNotifications: Notificações searchListBoxTransferredResources: Recursos transferidos -searchPlaceHolder: Pesquisar... +searchPlaceHolder: Pesquisa... searchResults: Resultados de pesquisa searchFieldDatePlaceHolder: 2008-04-01 searchFieldDateFromPlaceHolder: 2008-04-01 @@ -477,7 +501,7 @@ selectAipCancelButton: Cancelar selectAipEmptyParentButton: Mover para a raíz selectAipSelectButton: Selecionar selectAipSearchResults: Resultados de pesquisa -selectAipSearchPlaceHolder: Pesquisar... +selectAipSearchPlaceHolder: Pesquisa... selectRepresentationSearchResults: Resultados de pesquisa selectFileSearchResults: Resultados de pesquisa @@ -499,10 +523,10 @@ selectParentTitle: Selecione ascendente listSelectAllMessage: Selecionar todos os {0} itens # User log -userLogSearchPlaceHolder: Pesquisar... +userLogSearchPlaceHolder: Pesquisa... # Notification messages -messageSearchPlaceHolder: Pesquisar... +messageSearchPlaceHolder: Pesquisa... showMessageAcknowledged: sim showMessageNotAcknowledged: não @@ -520,7 +544,7 @@ durationDHMSLongSeconds: {0,number,##} segundos objectPermission: {0} objectPermission[CREATE]: Criar objectPermission[DELETE]: Eliminar -objectPermission[GRANT]: Alterar permissões +objectPermission[GRANT]: Editar permissões objectPermission[READ]: Ler objectPermission[UPDATE]: Atualizar @@ -576,10 +600,10 @@ riskRegisterProcessButton: Novo processo riskRegisterSearchPlaceHolder: Pesquisar riscos... riskIncidenceRegisterSearchPlaceHolder: Pesquisar incidências... editRiskNotFound: Risco não encontrado {0} -riskRemoveFolderConfirmDialogTitle: Confirmação de eliminação de risco +riskRemoveConfirmDialogTitle: Confirmação de eliminação de risco riskRemoveSelectedConfirmDialogMessage: Tem a certeza que deseja eliminar os {0} riscos selecionados? -riskRemoveFolderConfirmDialogCancel: No -riskRemoveFolderConfirmDialogOk: Yes +riskRemoveConfirmDialogCancel: Não +riskRemoveConfirmDialogOk: Sim riskRemoveSuccessTitle: Risco(s) eliminado(s) riskRemoveSuccessMessage: {0} risco(s) eliminado(s) com sucesso modifyRiskMessage: Risco foi modificado @@ -593,6 +617,13 @@ riskHistoryButton: Histórico editIncidenceNotFound: Incidência {0} não encontrada editIncidenceFailure: Edição da incidência {0} falhou +riskIncidenceRemoveConfirmDialogTitle: Confirmação de eliminação de incidência de risco +riskIncidenceRemoveSelectedConfirmDialogMessage: Tem a certeza que deseja eliminar as {0} incidências de risco selecionadas? +riskIncidenceRemoveConfirmDialogCancel: Não +riskIncidenceRemoveConfirmDialogOk: Sim +riskIncidenceRemoveSuccessTitle: Incidência(s) de risco eliminadas +riskIncidenceRemoveSuccessMessage: {0} incidência(s) de risco eliminada(s) com sucesso + # Representation information register representationInformationRegisterTitle: Rede de informação de representação representationInformationRegisterProcessButton: Novo processo @@ -618,7 +649,7 @@ atLeastOneOfAbove: Pelo menos uma das opções acima # Format register formatRegisterTitle: Diretório de formatos formatRegisterProcessButton: Novo processo -formatRegisterSearchPlaceHolder: Pesquisar... +formatRegisterSearchPlaceHolder: Pesquisa... editFormatNotFound: Formato não encontrado {0} formatRemoveFolderConfirmDialogTitle: Confirmação de remoção de formato formatRemoveSelectedConfirmDialogMessage: Tem a certeza que deseja eliminar os {0} formatos selecionados? @@ -809,7 +840,7 @@ disseminationsTitle: Disseminações transferredResourcesTitle: Recursos transferidos newArchivalPackage: Criar entidade intelectual moveArchivalPackage: Mover -archivalPackagePermissions: Permissões +archivalPackagePermissions: Editar permissões archivalPackagePermissionsTitle: Permissões de pacote de informação disseminationPermissions: Permissões removeArchivalPackage: Eliminar @@ -1283,7 +1314,7 @@ wrongMailFormat: E-Mail com formato errado fileAlreadyExists: Este ficheiro já existe -tableDownloadCSV: Exportar lista +tableDownloadCSV: Exportar tableAction: Ações actionableEmptyHelp: Por favor escolha os items usando as caixas de seleção actionableEmptyHelp[NONE]: Por favor escolha os items usando as caixas de seleção @@ -1374,5 +1405,5 @@ representationInformationNameFromAssociation[File]: Ficheiros cujo campo {0} é insertImageUrl: Inserir hiperligação da imagem insertLinkUrl: Inserir hiperligação editHTMLContent: Edição do conteúdo via HTML -searchButtonAdvancedSearch=mais opções +searchButtonAdvancedSearch=avançada diff --git a/roda-ui/roda-wui/src/main/resources/config/roda-wui.properties b/roda-ui/roda-wui/src/main/resources/config/roda-wui.properties index cee4879f1f..640336d829 100644 --- a/roda-ui/roda-wui/src/main/resources/config/roda-wui.properties +++ b/roda-ui/roda-wui/src/main/resources/config/roda-wui.properties @@ -34,7 +34,7 @@ ########################################################################## # print shared variables on the browser console -ui.sharedProperties.debug = false +ui.sharedProperties.debug = true ui.sharedProperties.whitelist.configuration.property = ui.sharedProperties.debug # date formatting @@ -56,9 +56,11 @@ ui.sharedProperties.whitelist.configuration.prefix = levels.internal.icon ui.sharedProperties.whitelist.messages.prefix = level # Lists and facets +ui.sharedProperties.whitelist.configuration.prefix = ui.icons ui.sharedProperties.whitelist.configuration.prefix = ui.lists ui.sharedProperties.whitelist.configuration.property = ui.lists ui.sharedProperties.whitelist.messages.prefix = ui.facets +ui.sharedProperties.whitelist.messages.prefix = lists.label ########################################################################## # Cookies settings @@ -212,539 +214,690 @@ ui.browser.metadata.descriptive.types = key-value #ui.browser.metadata.descriptive.types = ead_3 ########################################################################## -# Advance search settings +# Advanced search settings # # Follow the examples bellow to set how the advanced search panel # should behave. You can set which fields should be searchable and how # # Usage: # -# * ui.search.fields.items..fields = +# * ui.search.fields.IndexedAIP..fields = # Check the solr configuration file for more information. # -# * ui.search.fields.items..i18n = +# * ui.search.fields.IndexedAIP..i18n = # key in the translation files for label presentation. # -# * ui.search.fields.items..type = +# * ui.search.fields.IndexedAIP..type = # text | boolean | date_interval | numeric_interval | storage | controlled | suggest # defines how the value should be presented and validatd # -# * ui.search.fields.items..fixed: True | False +# * ui.search.fields.IndexedAIP..fixed: True | False # sets if the value should be imediatly visible when building # the advanced search UI # ########################################################################## -ui.search.fields.items = reference -ui.search.fields.items = title -ui.search.fields.items = description -ui.search.fields.items = scope -ui.search.fields.items = origination -ui.search.fields.items = ingestSIPIds -ui.search.fields.items = dates -ui.search.fields.items = level - -ui.search.fields.items.identifier.fields = id -ui.search.fields.items.identifier.i18n = ui.search.fields.items.identifier -ui.search.fields.items.identifier.type = text -ui.search.fields.items.identifier.fixed = true - -ui.search.fields.items.uuid.fields = uuid -ui.search.fields.items.uuid.i18n = ui.search.fields.items.uuid -ui.search.fields.items.uuid.type = text -ui.search.fields.items.uuid.fixed = true - -ui.search.fields.items.reference.fields = unitId_txt -ui.search.fields.items.reference.i18n = ui.search.fields.items.reference -ui.search.fields.items.reference.type = text -ui.search.fields.items.reference.fixed = true - -ui.search.fields.items.title.fields = title -ui.search.fields.items.title.i18n = ui.search.fields.items.title -ui.search.fields.items.title.type = text -ui.search.fields.items.title.fixed = true - -ui.search.fields.items.description.fields = description -ui.search.fields.items.description.i18n = ui.search.fields.items.description -ui.search.fields.items.description.type = text -ui.search.fields.items.description.fixed = true - -ui.search.fields.items.origination.fields = origination_txt -ui.search.fields.items.origination.i18n = ui.search.fields.items.origination -ui.search.fields.items.origination.type = text -ui.search.fields.items.origination.fixed = true - -ui.search.fields.items.ingestSIPIds.fields = ingestSIPIds -ui.search.fields.items.ingestSIPIds.i18n = ui.search.fields.items.ingestSIPIds -ui.search.fields.items.ingestSIPIds.type = text -ui.search.fields.items.ingestSIPIds.fixed = true - -ui.search.fields.items.dates.fields = dateInitial,dateFinal -ui.search.fields.items.dates.i18n = ui.search.fields.items.dates -ui.search.fields.items.dates.type = date_interval -ui.search.fields.items.dates.fixed = true - -ui.search.fields.items.level.fields = level -ui.search.fields.items.level.i18n = ui.search.fields.items.level -ui.search.fields.items.level.type = controlled -ui.search.fields.items.level.fixed = false - -ui.search.fields.items.level.values = noneselected -ui.search.fields.items.level.values = fonds -ui.search.fields.items.level.values = subfonds -ui.search.fields.items.level.values = collection -ui.search.fields.items.level.values = series -ui.search.fields.items.level.values = subseries -ui.search.fields.items.level.values = class -ui.search.fields.items.level.values = subclass -ui.search.fields.items.level.values = recordgrp -ui.search.fields.items.level.values = subgrp -ui.search.fields.items.level.values = file -ui.search.fields.items.level.values = item -ui.search.fields.items.level.i18nPrefix = level -#ui.search.fields.items.level.type = suggest -#ui.search.fields.items.level.suggestField = level #field level_txt must be created (info reindexed) -#ui.search.fields.items.level.suggestPartial = true -#ui.search.fields.items.level.fixed = true - -ui.search.fields.items.type.fields = type -ui.search.fields.items.type.i18n = ui.search.fields.items.type -ui.search.fields.items.type.type = text -ui.search.fields.items.type.fixed = true - -ui.search.fields.representations = identifier -ui.search.fields.representations = type -ui.search.fields.representations = original -ui.search.fields.representations = size -ui.search.fields.representations = numberOfFiles - -ui.search.fields.representations.identifier.fields = id -ui.search.fields.representations.identifier.i18n = ui.search.fields.representations.identifier -ui.search.fields.representations.identifier.type = text -ui.search.fields.representations.identifier.fixed = true - -ui.search.fields.representations.uuid.fields = uuid -ui.search.fields.representations.uuid.i18n = ui.search.fields.representations.uuid -ui.search.fields.representations.uuid.type = text -ui.search.fields.representations.uuid.fixed = true - -ui.search.fields.representations.type.fields = type -ui.search.fields.representations.type.i18n = ui.search.fields.representations.type -ui.search.fields.representations.type.type = suggest -ui.search.fields.representations.type.suggestField = type -ui.search.fields.representations.type.suggestPartial = false -ui.search.fields.representations.type.fixed = true - -ui.search.fields.representations.original.fields = original -ui.search.fields.representations.original.i18n = ui.search.fields.representations.original -ui.search.fields.representations.original.type = boolean -ui.search.fields.representations.original.fixed = true - -ui.search.fields.representations.size.fields = sizeInBytes -ui.search.fields.representations.size.i18n = ui.search.fields.representations.size -ui.search.fields.representations.size.type = storage -ui.search.fields.representations.size.fixed = true - -ui.search.fields.representations.numberOfFiles.fields = numberOfDataFiles -ui.search.fields.representations.numberOfFiles.i18n = ui.search.fields.representations.numberOfFiles -ui.search.fields.representations.numberOfFiles.type = numeric_interval -ui.search.fields.representations.numberOfFiles.fixed = true - -ui.search.fields.representations.representationStates.fields = representationStates -ui.search.fields.representations.representationStates.i18n = ui.search.fields.representations.representationStates -ui.search.fields.representations.representationStates.type = suggest -ui.search.fields.representations.representationStates.suggestField = representationStates -ui.search.fields.representations.representationStates.suggestPartial = false -ui.search.fields.representations.representationStates.fixed = true - -ui.search.fields.files = filename -ui.search.fields.files = format -ui.search.fields.files = formatVersion -ui.search.fields.files = pronom -ui.search.fields.files = mimetype -ui.search.fields.files = extension -ui.search.fields.files = filesize -ui.search.fields.files = fulltext - -ui.search.fields.files.filename.fields = fileId -ui.search.fields.files.filename.i18n = ui.search.fields.files.filename -ui.search.fields.files.filename.type = text -ui.search.fields.files.filename.fixed = true - -ui.search.fields.files.uuid.fields = uuid -ui.search.fields.files.uuid.i18n = ui.search.fields.files.uuid -ui.search.fields.files.uuid.type = text -ui.search.fields.files.uuid.fixed = true - -ui.search.fields.files.format.fields = fileFormat -ui.search.fields.files.format.i18n = ui.search.fields.files.format -ui.search.fields.files.format.type = suggest -ui.search.fields.files.format.suggestField = fileFormat -ui.search.fields.files.format.suggestPartial = true -ui.search.fields.files.format.fixed = true - -ui.search.fields.files.formatVersion.fields = formatVersion -ui.search.fields.files.formatVersion.i18n = ui.search.fields.files.formatVersion -ui.search.fields.files.formatVersion.type = suggest -ui.search.fields.files.formatVersion.suggestField = formatVersion -ui.search.fields.files.formatVersion.suggestPartial = true -ui.search.fields.files.formatVersion.fixed = true - -ui.search.fields.files.pronom.fields = formatPronom -ui.search.fields.files.pronom.i18n = ui.search.fields.files.pronom -ui.search.fields.files.pronom.type = suggest -ui.search.fields.files.pronom.suggestField = formatPronom -ui.search.fields.files.pronom.suggestPartial = false -ui.search.fields.files.pronom.fixed = true - -ui.search.fields.files.mimetype.fields = formatMimetype -ui.search.fields.files.mimetype.i18n = ui.search.fields.files.mimetype -ui.search.fields.files.mimetype.type = suggest -ui.search.fields.files.mimetype.suggestField = formatMimetype -ui.search.fields.files.mimetype.suggestPartial = false -ui.search.fields.files.mimetype.fixed = true - -ui.search.fields.files.extension.fields = extension -ui.search.fields.files.extension.i18n = ui.search.fields.files.extension -ui.search.fields.files.extension.type = suggest -ui.search.fields.files.extension.suggestField = extension -ui.search.fields.files.extension.suggestPartial = false -ui.search.fields.files.extension.fixed = true - -ui.search.fields.files.formatDesignation.fields = formatDesignation -ui.search.fields.files.formatDesignation.i18n = ui.search.fields.files.formatDesignation - -ui.search.fields.files.filesize.fields = size -ui.search.fields.files.filesize.i18n = ui.search.fields.files.filesize -ui.search.fields.files.filesize.type = storage -ui.search.fields.files.filesize.fixed = true - -ui.search.fields.files.fulltext.fields = fulltext -ui.search.fields.files.fulltext.i18n = ui.search.fields.files.fulltext -ui.search.fields.files.fulltext.type = text -ui.search.fields.files.fulltext.fixed = true - -ui.search.fields.jobs = name -ui.search.fields.jobs = dates - -ui.search.fields.jobs.name.fields = name_txt -ui.search.fields.jobs.name.i18n = ui.search.fields.jobs.name -ui.search.fields.jobs.name.type = text -ui.search.fields.jobs.name.fixed = true - -ui.search.fields.jobs.dates.fields = startDate,endDate -ui.search.fields.jobs.dates.i18n = ui.search.fields.jobs.dates -ui.search.fields.jobs.dates.type = date_interval -ui.search.fields.jobs.dates.fixed = true - - -ui.search.fields.job_reports = dates -ui.search.fields.job_reports = sourceObjectOriginalIds -ui.search.fields.job_reports = sourceObjectOriginalName -ui.search.fields.job_reports = outcomeObjectId -ui.search.fields.job_reports = outcomeObjectLabel - -ui.search.fields.job_reports.dates.fields = dateCreated,dateUpdated -ui.search.fields.job_reports.dates.i18n = ui.search.fields.job_reports.dates -ui.search.fields.job_reports.dates.type = date_interval -ui.search.fields.job_reports.dates.fixed = true - -ui.search.fields.job_reports.sourceObjectOriginalIds.fields = sourceObjectOriginalIds -ui.search.fields.job_reports.sourceObjectOriginalIds.i18n = ui.search.fields.job_reports.sourceObjectOriginalIds -ui.search.fields.job_reports.sourceObjectOriginalIds.type = text -ui.search.fields.job_reports.sourceObjectOriginalIds.fixed = true - -ui.search.fields.job_reports.sourceObjectOriginalName.fields = sourceObjectOriginalName -ui.search.fields.job_reports.sourceObjectOriginalName.i18n = ui.search.fields.job_reports.sourceObjectOriginalName -ui.search.fields.job_reports.sourceObjectOriginalName.type = text -ui.search.fields.job_reports.sourceObjectOriginalName.fixed = true - -ui.search.fields.job_reports.outcomeObjectId.fields = outcomeObjectId -ui.search.fields.job_reports.outcomeObjectId.i18n = ui.search.fields.job_reports.outcomeObjectId -ui.search.fields.job_reports.outcomeObjectId.type = text -ui.search.fields.job_reports.outcomeObjectId.fixed = true - -ui.search.fields.job_reports.outcomeObjectLabel.fields = outcomeObjectLabel -ui.search.fields.job_reports.outcomeObjectLabel.i18n = ui.search.fields.job_reports.outcomeObjectLabel -ui.search.fields.job_reports.outcomeObjectLabel.type = text -ui.search.fields.job_reports.outcomeObjectLabel.fixed = true - -ui.search.fields.preservation_events = dates - -ui.search.fields.preservation_events.dates.fields = eventDateTime -ui.search.fields.preservation_events.dates.i18n = ui.search.fields.preservation_events.dates -ui.search.fields.preservation_events.dates.type = date_interval -ui.search.fields.preservation_events.dates.fixed = true - -ui.search.fields.action_logs = dates -ui.search.fields.action_logs = address - -ui.search.fields.action_logs.dates.fields = datetime -ui.search.fields.action_logs.dates.i18n = ui.search.fields.action_logs.dates -ui.search.fields.action_logs.dates.type = date_interval -ui.search.fields.action_logs.dates.fixed = true - -ui.search.fields.action_logs.address.fields = address -ui.search.fields.action_logs.address.i18n = ui.search.fields.action_logs.address -ui.search.fields.action_logs.address.type = text -ui.search.fields.action_logs.address.fixed = true - -ui.search.fields.notifications = dates - -ui.search.fields.notifications.dates.fields = sentOn -ui.search.fields.notifications.dates.i18n = ui.search.fields.notifications.dates -ui.search.fields.notifications.dates.type = date_interval -ui.search.fields.notifications.dates.fixed = true - -ui.search.fields.transferred_resources = dates -ui.search.fields.transferred_resources = size - -ui.search.fields.transferred_resources.dates.fields = date -ui.search.fields.transferred_resources.dates.i18n = ui.search.fields.transferred_resources.dates -ui.search.fields.transferred_resources.dates.type = date_interval -ui.search.fields.transferred_resources.dates.fixed = true - -ui.search.fields.action_logs.address.fields = address -ui.search.fields.action_logs.address.i18n = ui.search.fields.action_logs.address -ui.search.fields.action_logs.address.type = text -ui.search.fields.action_logs.address.fixed = true - -ui.search.fields.risks = dates -ui.search.fields.risks = name - -ui.search.fields.risks.dates.fields = identifiedOn -ui.search.fields.risks.dates.i18n = ui.search.fields.risks.dates -ui.search.fields.risks.dates.type = date_interval -ui.search.fields.risks.dates.fixed = true - -ui.search.fields.risks.name.fields = name -ui.search.fields.risks.name.i18n = ui.search.fields.risks.name -ui.search.fields.risks.name.type = text -ui.search.fields.risks.name.fixed = true - -ui.search.fields.incidences = mitigatedOn -ui.search.fields.incidences = detectedOn - -ui.search.fields.incidences.mitigatedOn.fields = mitigatedOn -ui.search.fields.incidences.mitigatedOn.i18n = ui.search.fields.incidences.mitigatedOn -ui.search.fields.incidences.mitigatedOn.type = date_interval -ui.search.fields.incidences.mitigatedOn.fixed = true - -ui.search.fields.incidences.detectedOn.fields = detectedOn -ui.search.fields.incidences.detectedOn.i18n = ui.search.fields.incidences.detectedOn -ui.search.fields.incidences.detectedOn.type = date_interval -ui.search.fields.incidences.detectedOn.fixed = true - - -ui.search.fields.ri.relation.conforms_to.fields = CONFORMS_TO -ui.search.fields.ri.relation.conforms_to.i18n = ui.search.fields.ri.relation.conforms_to - -ui.search.fields.ri.relation.has_created.fields = HAS_CREATED -ui.search.fields.ri.relation.has_created.i18n = ui.search.fields.ri.relation.has_created -ui.search.fields.ri.relation.has_created.inverse.fields = WAS_CREATED_BY -ui.search.fields.ri.relation.has_created.inverse.i18n = ui.search.fields.ri.relation.was_created_by - -ui.search.fields.ri.relation.has_format.fields = HAS_FORMAT -ui.search.fields.ri.relation.has_format.i18n = ui.search.fields.ri.relation.has_format -ui.search.fields.ri.relation.has_format.inverse.fields = IS_FORMAT_OF -ui.search.fields.ri.relation.has_format.inverse.i18n = ui.search.fields.ri.relation.is_format_of - -ui.search.fields.ri.relation.has_part.fields = HAS_PART -ui.search.fields.ri.relation.has_part.i18n = ui.search.fields.ri.relation.has_part -ui.search.fields.ri.relation.has_part.inverse.fields = IS_PART_OF -ui.search.fields.ri.relation.has_part.inverse.i18n = ui.search.fields.ri.relation.is_part_of - -ui.search.fields.ri.relation.has_version.fields = HAS_VERSION -ui.search.fields.ri.relation.has_version.i18n = ui.search.fields.ri.relation.has_version -ui.search.fields.ri.relation.has_version.inverse.fields = IS_VERSION_OF -ui.search.fields.ri.relation.has_version.inverse.i18n = ui.search.fields.ri.relation.is_version_of - -ui.search.fields.ri.relation.references.fields = REFERENCES -ui.search.fields.ri.relation.references.i18n = ui.search.fields.ri.relation.references -ui.search.fields.ri.relation.references.inverse.fields = IS_REFERENCED_BY -ui.search.fields.ri.relation.references.inverse.i18n = ui.search.fields.ri.relation.is_referenced_by - -ui.search.fields.ri.relation.replaces.fields = REPLACES -ui.search.fields.ri.relation.replaces.i18n = ui.search.fields.ri.relation.replaces -ui.search.fields.ri.relation.replaces.inverse.fields = IS_REPLACED_BY -ui.search.fields.ri.relation.replaces.inverse.i18n = ui.search.fields.ri.relation.is_replaced_by - -ui.search.fields.ri.relation.requires.fields = REQUIRES -ui.search.fields.ri.relation.requires.i18n = ui.search.fields.ri.relation.requires -ui.search.fields.ri.relation.requires.inverse.fields = IS_REQUIRED_BY -ui.search.fields.ri.relation.requires.inverse.i18n = ui.search.fields.ri.relation.is_required_by - -ui.search.fields.ri.relation.has_source.fields = HAS_SOURCE -ui.search.fields.ri.relation.has_source.i18n = ui.search.fields.ri.relation.has_source -ui.search.fields.ri.relation.has_source.inverse.fields = IS_SOURCE_OF -ui.search.fields.ri.relation.has_source.inverse.i18n = ui.search.fields.ri.relation.is_source_of - -ui.search.fields.ri.relation.rendered_by.fields = RENDERED_BY -ui.search.fields.ri.relation.rendered_by.i18n = ui.search.fields.ri.relation.rendered_by - -ui.search.fields.ri.relation.executed_by.fields = EXECUTED_BY -ui.search.fields.ri.relation.executed_by.i18n = ui.search.fields.ri.relation.executed_by - -ui.search.fields.ri.relation.specified_by.fields = SPECIFIED_BY -ui.search.fields.ri.relation.specified_by.i18n = ui.search.fields.ri.relation.specified_by - -ui.search.fields.ri.relation.represents.fields = REPRESENTS -ui.search.fields.ri.relation.represents.i18n = ui.search.fields.ri.relation.represents - -ui.search.fields.ri.relation.subtype_of.fields: SUBTYPE_OF -ui.search.fields.ri.relation.subtype_of.i18n = ui.search.fields.ri.relation.subtype_of -ui.search.fields.ri.relation.subtype_of.inverse.fields = HAS_SUBTYPE -ui.search.fields.ri.relation.subtype_of.inverse.i18n = ui.search.fields.ri.relation.has_subtype - -ui.search.fields.ri.relation.component_of.fields: COMPONENT_OF -ui.search.fields.ri.relation.component_of.i18n = ui.search.fields.ri.relation.component_of -ui.search.fields.ri.relation.component_of.inverse.fields = HAS_COMPONENT -ui.search.fields.ri.relation.component_of.inverse.i18n = ui.search.fields.ri.relation.has_component - -ui.search.fields.ri.relation.contains.fields: CONTAINS -ui.search.fields.ri.relation.contains.i18n = ui.search.fields.ri.relation.contains -ui.search.fields.ri.relation.contains.inverse.fields = IS_CONTAINED -ui.search.fields.ri.relation.contains.inverse.i18n = ui.search.fields.ri.relation.is_contained - -ui.search.fields.ri.relation.extension_of.fields: EXTENSION_OF -ui.search.fields.ri.relation.extension_of.i18n = ui.search.fields.ri.relation.extension_of -ui.search.fields.ri.relation.extension_of.inverse.fields = HAS_EXTENSION -ui.search.fields.ri.relation.extension_of.inverse.i18n = ui.search.fields.ri.relation.has_extension - -ui.search.fields.ri.relation.modification_of.fields: MODIFICATION_OF -ui.search.fields.ri.relation.modification_of.i18n = ui.search.fields.ri.relation.modification_of -ui.search.fields.ri.relation.modification_of.inverse.fields = HAS_MODIFICATION -ui.search.fields.ri.relation.modification_of.inverse.i18n = ui.search.fields.ri.relation.has_modification - -ui.search.fields.ri.relation.used_by.fields: USED_BY -ui.search.fields.ri.relation.used_by.i18n = ui.search.fields.ri.relation.used_by -ui.search.fields.ri.relation.used_by.inverse.fields = USES -ui.search.fields.ri.relation.used_by.inverse.i18n = ui.search.fields.ri.relation.uses - -ui.search.fields.ri.relation.has_earlier_version.fields: HAS_EARLIER_VERSION -ui.search.fields.ri.relation.has_earlier_version.i18n = ui.search.fields.ri.relation.has_earlier_version -ui.search.fields.ri.relation.has_earlier_version.inverse.fields: HAS_LATER_VERSION -ui.search.fields.ri.relation.has_earlier_version.inverse.i18n = ui.search.fields.ri.relation.has_later_version - -ui.search.fields.ri.relation.affinity_to.fields: AFFINITY_TO -ui.search.fields.ri.relation.affinity_to.i18n = ui.search.fields.ri.relation.affinity_to -ui.search.fields.ri.relation.defined_via.fields: DEFINED_VIA -ui.search.fields.ri.relation.defined_via.i18n = ui.search.fields.ri.relation.defined_via -ui.search.fields.ri.relation.equivalent_to.fields: EQUIVALENT_TO -ui.search.fields.ri.relation.equivalent_to.i18n = ui.search.fields.ri.relation.equivalent_to -ui.search.fields.ri.relation.may_contain.fields: MAY_CONTAIN -ui.search.fields.ri.relation.may_contain.i18n = ui.search.fields.ri.relation.may_contain -ui.search.fields.ri.relation.may_have_component.fields: MAY_HAVE_COMPONENT -ui.search.fields.ri.relation.may_have_component.i18n = ui.search.fields.ri.relation.may_have_component -ui.search.fields.ri.relation.must_have_component.fields: MUST_HAVE_COMPONENT -ui.search.fields.ri.relation.must_have_component.i18n = ui.search.fields.ri.relation.must_have_component -ui.search.fields.ri.relation.has_modified_version.fields: HAS_MODIFIED_VERSION -ui.search.fields.ri.relation.has_modified_version.i18n = ui.search.fields.ri.relation.has_modified_version -ui.search.fields.ri.relation.has_extension.fields: HAS_EXTENSION -ui.search.fields.ri.relation.has_extension.i18n = ui.search.fields.ri.relation.has_extension - -ui.search.fields.ri.relation.see_also.fields = SEE_ALSO -ui.search.fields.ri.relation.see_also.i18n = ui.search.fields.ri.relation.see_also - -ui.search.fields.ri.relation.other.fields: OTHER -ui.search.fields.ri.relation.other.i18n = ui.search.fields.ri.relation.other +ui.search.fields.IndexedAIP = reference +ui.search.fields.IndexedAIP = title +ui.search.fields.IndexedAIP = description +ui.search.fields.IndexedAIP = scope +ui.search.fields.IndexedAIP = origination +ui.search.fields.IndexedAIP = ingestSIPIds +ui.search.fields.IndexedAIP = dates +ui.search.fields.IndexedAIP = level + +ui.search.fields.IndexedAIP.identifier.fields = id +ui.search.fields.IndexedAIP.identifier.i18n = ui.search.fields.IndexedAIP.identifier +ui.search.fields.IndexedAIP.identifier.type = text +ui.search.fields.IndexedAIP.identifier.fixed = true + +ui.search.fields.IndexedAIP.uuid.fields = uuid +ui.search.fields.IndexedAIP.uuid.i18n = ui.search.fields.IndexedAIP.uuid +ui.search.fields.IndexedAIP.uuid.type = text +ui.search.fields.IndexedAIP.uuid.fixed = true + +ui.search.fields.IndexedAIP.reference.fields = unitId_txt +ui.search.fields.IndexedAIP.reference.i18n = ui.search.fields.IndexedAIP.reference +ui.search.fields.IndexedAIP.reference.type = text +ui.search.fields.IndexedAIP.reference.fixed = true + +ui.search.fields.IndexedAIP.title.fields = title +ui.search.fields.IndexedAIP.title.i18n = ui.search.fields.IndexedAIP.title +ui.search.fields.IndexedAIP.title.type = text +ui.search.fields.IndexedAIP.title.fixed = true + +ui.search.fields.IndexedAIP.description.fields = description +ui.search.fields.IndexedAIP.description.i18n = ui.search.fields.IndexedAIP.description +ui.search.fields.IndexedAIP.description.type = text +ui.search.fields.IndexedAIP.description.fixed = true + +ui.search.fields.IndexedAIP.origination.fields = origination_txt +ui.search.fields.IndexedAIP.origination.i18n = ui.search.fields.IndexedAIP.origination +ui.search.fields.IndexedAIP.origination.type = text +ui.search.fields.IndexedAIP.origination.fixed = true + +ui.search.fields.IndexedAIP.ingestSIPIds.fields = ingestSIPIds +ui.search.fields.IndexedAIP.ingestSIPIds.i18n = ui.search.fields.IndexedAIP.ingestSIPIds +ui.search.fields.IndexedAIP.ingestSIPIds.type = text +ui.search.fields.IndexedAIP.ingestSIPIds.fixed = true + +ui.search.fields.IndexedAIP.dates.fields = dateInitial,dateFinal +ui.search.fields.IndexedAIP.dates.i18n = ui.search.fields.IndexedAIP.dates +ui.search.fields.IndexedAIP.dates.type = date_interval +ui.search.fields.IndexedAIP.dates.fixed = true + +ui.search.fields.IndexedAIP.level.fields = level +ui.search.fields.IndexedAIP.level.i18n = ui.search.fields.IndexedAIP.level +ui.search.fields.IndexedAIP.level.type = controlled +ui.search.fields.IndexedAIP.level.fixed = false + +ui.search.fields.IndexedAIP.level.values = noneselected +ui.search.fields.IndexedAIP.level.values = fonds +ui.search.fields.IndexedAIP.level.values = subfonds +ui.search.fields.IndexedAIP.level.values = collection +ui.search.fields.IndexedAIP.level.values = series +ui.search.fields.IndexedAIP.level.values = subseries +ui.search.fields.IndexedAIP.level.values = class +ui.search.fields.IndexedAIP.level.values = subclass +ui.search.fields.IndexedAIP.level.values = recordgrp +ui.search.fields.IndexedAIP.level.values = subgrp +ui.search.fields.IndexedAIP.level.values = file +ui.search.fields.IndexedAIP.level.values = item +ui.search.fields.IndexedAIP.level.i18nPrefix = level +#ui.search.fields.IndexedAIP.level.type = suggest +#ui.search.fields.IndexedAIP.level.suggestField = level #field level_txt must be created (info reindexed) +#ui.search.fields.IndexedAIP.level.suggestPartial = true +#ui.search.fields.IndexedAIP.level.fixed = true + +ui.search.fields.IndexedAIP.type.fields = type +ui.search.fields.IndexedAIP.type.i18n = ui.search.fields.IndexedAIP.type +ui.search.fields.IndexedAIP.type.type = text +ui.search.fields.IndexedAIP.type.fixed = true + +ui.search.fields.IndexedRepresentation = identifier +ui.search.fields.IndexedRepresentation = type +ui.search.fields.IndexedRepresentation = original +ui.search.fields.IndexedRepresentation = size +ui.search.fields.IndexedRepresentation = numberOfFiles + +ui.search.fields.IndexedRepresentation.identifier.fields = id +ui.search.fields.IndexedRepresentation.identifier.i18n = ui.search.fields.IndexedRepresentation.identifier +ui.search.fields.IndexedRepresentation.identifier.type = text +ui.search.fields.IndexedRepresentation.identifier.fixed = true + +ui.search.fields.IndexedRepresentation.uuid.fields = uuid +ui.search.fields.IndexedRepresentation.uuid.i18n = ui.search.fields.IndexedRepresentation.uuid +ui.search.fields.IndexedRepresentation.uuid.type = text +ui.search.fields.IndexedRepresentation.uuid.fixed = true + +ui.search.fields.IndexedRepresentation.type.fields = type +ui.search.fields.IndexedRepresentation.type.i18n = ui.search.fields.IndexedRepresentation.type +ui.search.fields.IndexedRepresentation.type.type = suggest +ui.search.fields.IndexedRepresentation.type.suggestField = type +ui.search.fields.IndexedRepresentation.type.suggestPartial = false +ui.search.fields.IndexedRepresentation.type.fixed = true + +ui.search.fields.IndexedRepresentation.original.fields = original +ui.search.fields.IndexedRepresentation.original.i18n = ui.search.fields.IndexedRepresentation.original +ui.search.fields.IndexedRepresentation.original.type = boolean +ui.search.fields.IndexedRepresentation.original.fixed = true + +ui.search.fields.IndexedRepresentation.size.fields = sizeInBytes +ui.search.fields.IndexedRepresentation.size.i18n = ui.search.fields.IndexedRepresentation.size +ui.search.fields.IndexedRepresentation.size.type = storage +ui.search.fields.IndexedRepresentation.size.fixed = true + +ui.search.fields.IndexedRepresentation.numberOfFiles.fields = numberOfDataFiles +ui.search.fields.IndexedRepresentation.numberOfFiles.i18n = ui.search.fields.IndexedRepresentation.numberOfFiles +ui.search.fields.IndexedRepresentation.numberOfFiles.type = numeric_interval +ui.search.fields.IndexedRepresentation.numberOfFiles.fixed = true + +ui.search.fields.IndexedRepresentation.representationStates.fields = representationStates +ui.search.fields.IndexedRepresentation.representationStates.i18n = ui.search.fields.IndexedRepresentation.representationStates +ui.search.fields.IndexedRepresentation.representationStates.type = suggest +ui.search.fields.IndexedRepresentation.representationStates.suggestField = representationStates +ui.search.fields.IndexedRepresentation.representationStates.suggestPartial = false +ui.search.fields.IndexedRepresentation.representationStates.fixed = true + +ui.search.fields.IndexedFile = filename +ui.search.fields.IndexedFile = format +ui.search.fields.IndexedFile = formatVersion +ui.search.fields.IndexedFile = pronom +ui.search.fields.IndexedFile = mimetype +ui.search.fields.IndexedFile = extension +ui.search.fields.IndexedFile = filesize +ui.search.fields.IndexedFile = fulltext + +ui.search.fields.IndexedFile.filename.fields = fileId +ui.search.fields.IndexedFile.filename.i18n = ui.search.fields.IndexedFile.filename +ui.search.fields.IndexedFile.filename.type = text +ui.search.fields.IndexedFile.filename.fixed = true + +ui.search.fields.IndexedFile.uuid.fields = uuid +ui.search.fields.IndexedFile.uuid.i18n = ui.search.fields.IndexedFile.uuid +ui.search.fields.IndexedFile.uuid.type = text +ui.search.fields.IndexedFile.uuid.fixed = true + +ui.search.fields.IndexedFile.format.fields = fileFormat +ui.search.fields.IndexedFile.format.i18n = ui.search.fields.IndexedFile.format +ui.search.fields.IndexedFile.format.type = suggest +ui.search.fields.IndexedFile.format.suggestField = fileFormat +ui.search.fields.IndexedFile.format.suggestPartial = true +ui.search.fields.IndexedFile.format.fixed = true + +ui.search.fields.IndexedFile.formatVersion.fields = formatVersion +ui.search.fields.IndexedFile.formatVersion.i18n = ui.search.fields.IndexedFile.formatVersion +ui.search.fields.IndexedFile.formatVersion.type = suggest +ui.search.fields.IndexedFile.formatVersion.suggestField = formatVersion +ui.search.fields.IndexedFile.formatVersion.suggestPartial = true +ui.search.fields.IndexedFile.formatVersion.fixed = true + +ui.search.fields.IndexedFile.pronom.fields = formatPronom +ui.search.fields.IndexedFile.pronom.i18n = ui.search.fields.IndexedFile.pronom +ui.search.fields.IndexedFile.pronom.type = suggest +ui.search.fields.IndexedFile.pronom.suggestField = formatPronom +ui.search.fields.IndexedFile.pronom.suggestPartial = false +ui.search.fields.IndexedFile.pronom.fixed = true + +ui.search.fields.IndexedFile.mimetype.fields = formatMimetype +ui.search.fields.IndexedFile.mimetype.i18n = ui.search.fields.IndexedFile.mimetype +ui.search.fields.IndexedFile.mimetype.type = suggest +ui.search.fields.IndexedFile.mimetype.suggestField = formatMimetype +ui.search.fields.IndexedFile.mimetype.suggestPartial = false +ui.search.fields.IndexedFile.mimetype.fixed = true + +ui.search.fields.IndexedFile.extension.fields = extension +ui.search.fields.IndexedFile.extension.i18n = ui.search.fields.IndexedFile.extension +ui.search.fields.IndexedFile.extension.type = suggest +ui.search.fields.IndexedFile.extension.suggestField = extension +ui.search.fields.IndexedFile.extension.suggestPartial = false +ui.search.fields.IndexedFile.extension.fixed = true + +ui.search.fields.IndexedFile.formatDesignation.fields = formatDesignation +ui.search.fields.IndexedFile.formatDesignation.i18n = ui.search.fields.IndexedFile.formatDesignation + +ui.search.fields.IndexedFile.filesize.fields = size +ui.search.fields.IndexedFile.filesize.i18n = ui.search.fields.IndexedFile.filesize +ui.search.fields.IndexedFile.filesize.type = storage +ui.search.fields.IndexedFile.filesize.fixed = true + +ui.search.fields.IndexedFile.fulltext.fields = fulltext +ui.search.fields.IndexedFile.fulltext.i18n = ui.search.fields.IndexedFile.fulltext +ui.search.fields.IndexedFile.fulltext.type = text +ui.search.fields.IndexedFile.fulltext.fixed = true + +ui.search.fields.Job = name +ui.search.fields.Job = dates + +ui.search.fields.Job.name.fields = name_txt +ui.search.fields.Job.name.i18n = ui.search.fields.Job.name +ui.search.fields.Job.name.type = text +ui.search.fields.Job.name.fixed = true + +ui.search.fields.Job.dates.fields = startDate,endDate +ui.search.fields.Job.dates.i18n = ui.search.fields.Job.dates +ui.search.fields.Job.dates.type = date_interval +ui.search.fields.Job.dates.fixed = true + + +ui.search.fields.IndexedReport = dates +ui.search.fields.IndexedReport = sourceObjectOriginalIds +ui.search.fields.IndexedReport = sourceObjectOriginalName +ui.search.fields.IndexedReport = outcomeObjectId +ui.search.fields.IndexedReport = outcomeObjectLabel + +ui.search.fields.IndexedReport.dates.fields = dateCreated,dateUpdated +ui.search.fields.IndexedReport.dates.i18n = ui.search.fields.IndexedReport.dates +ui.search.fields.IndexedReport.dates.type = date_interval +ui.search.fields.IndexedReport.dates.fixed = true + +ui.search.fields.IndexedReport.sourceObjectOriginalIds.fields = sourceObjectOriginalIds +ui.search.fields.IndexedReport.sourceObjectOriginalIds.i18n = ui.search.fields.IndexedReport.sourceObjectOriginalIds +ui.search.fields.IndexedReport.sourceObjectOriginalIds.type = text +ui.search.fields.IndexedReport.sourceObjectOriginalIds.fixed = true + +ui.search.fields.IndexedReport.sourceObjectOriginalName.fields = sourceObjectOriginalName +ui.search.fields.IndexedReport.sourceObjectOriginalName.i18n = ui.search.fields.IndexedReport.sourceObjectOriginalName +ui.search.fields.IndexedReport.sourceObjectOriginalName.type = text +ui.search.fields.IndexedReport.sourceObjectOriginalName.fixed = true + +ui.search.fields.IndexedReport.outcomeObjectId.fields = outcomeObjectId +ui.search.fields.IndexedReport.outcomeObjectId.i18n = ui.search.fields.IndexedReport.outcomeObjectId +ui.search.fields.IndexedReport.outcomeObjectId.type = text +ui.search.fields.IndexedReport.outcomeObjectId.fixed = true + +ui.search.fields.IndexedReport.outcomeObjectLabel.fields = outcomeObjectLabel +ui.search.fields.IndexedReport.outcomeObjectLabel.i18n = ui.search.fields.IndexedReport.outcomeObjectLabel +ui.search.fields.IndexedReport.outcomeObjectLabel.type = text +ui.search.fields.IndexedReport.outcomeObjectLabel.fixed = true + +ui.search.fields.IndexedPreservationEvent = dates + +ui.search.fields.IndexedPreservationEvent.dates.fields = eventDateTime +ui.search.fields.IndexedPreservationEvent.dates.i18n = ui.search.fields.IndexedPreservationEvent.dates +ui.search.fields.IndexedPreservationEvent.dates.type = date_interval +ui.search.fields.IndexedPreservationEvent.dates.fixed = true + +ui.search.fields.LogEntry = dates +ui.search.fields.LogEntry = address + +ui.search.fields.LogEntry.dates.fields = datetime +ui.search.fields.LogEntry.dates.i18n = ui.search.fields.LogEntry.dates +ui.search.fields.LogEntry.dates.type = date_interval +ui.search.fields.LogEntry.dates.fixed = true + +ui.search.fields.LogEntry.address.fields = address +ui.search.fields.LogEntry.address.i18n = ui.search.fields.LogEntry.address +ui.search.fields.LogEntry.address.type = text +ui.search.fields.LogEntry.address.fixed = true + +ui.search.fields.Notification = dates + +ui.search.fields.Notification.dates.fields = sentOn +ui.search.fields.Notification.dates.i18n = ui.search.fields.Notification.dates +ui.search.fields.Notification.dates.type = date_interval +ui.search.fields.Notification.dates.fixed = true + +ui.search.fields.TransferredResource = dates +ui.search.fields.TransferredResource = size + +ui.search.fields.TransferredResource.dates.fields = date +ui.search.fields.TransferredResource.dates.i18n = ui.search.fields.TransferredResource.dates +ui.search.fields.TransferredResource.dates.type = date_interval +ui.search.fields.TransferredResource.dates.fixed = true + +ui.search.fields.IndexedRisk = dates +ui.search.fields.IndexedRisk = name + +ui.search.fields.IndexedRisk.dates.fields = identifiedOn +ui.search.fields.IndexedRisk.dates.i18n = ui.search.fields.IndexedRisk.dates +ui.search.fields.IndexedRisk.dates.type = date_interval +ui.search.fields.IndexedRisk.dates.fixed = true + +ui.search.fields.IndexedRisk.name.fields = name +ui.search.fields.IndexedRisk.name.i18n = ui.search.fields.IndexedRisk.name +ui.search.fields.IndexedRisk.name.type = text +ui.search.fields.IndexedRisk.name.fixed = true + +ui.search.fields.RepresentationInformationskIncidence = mitigatedOn +ui.search.fields.RepresentationInformationskIncidence = detectedOn + +ui.search.fields.RepresentationInformationskIncidence.mitigatedOn.fields = mitigatedOn +ui.search.fields.RiskIncidence.mitigatedOn.i18n = ui.search.fields.RiskIncidence.mitigatedOn +ui.search.fields.RiskIncidence.mitigatedOn.type = date_interval +ui.search.fields.RiskIncidence.mitigatedOn.fixed = true + +ui.search.fields.RiskIncidence.detectedOn.fields = detectedOn +ui.search.fields.RiskIncidence.detectedOn.i18n = ui.search.fields.RiskIncidence.detectedOn +ui.search.fields.RiskIncidence.detectedOn.type = date_interval +ui.search.fields.RiskIncidence.detectedOn.fixed = true + +ui.search.fields.RepresentationInformation.relation.conforms_to.fields = CONFORMS_TO +ui.search.fields.RepresentationInformation.relation.conforms_to.i18n = ui.search.fields.RepresentationInformation.relation.conforms_to + +ui.search.fields.RepresentationInformation.relation.has_created.fields = HAS_CREATED +ui.search.fields.RepresentationInformation.relation.has_created.i18n = ui.search.fields.RepresentationInformation.relation.has_created +ui.search.fields.RepresentationInformation.relation.has_created.inverse.fields = WAS_CREATED_BY +ui.search.fields.RepresentationInformation.relation.has_created.inverse.i18n = ui.search.fields.RepresentationInformation.relation.was_created_by + +ui.search.fields.RepresentationInformation.relation.has_format.fields = HAS_FORMAT +ui.search.fields.RepresentationInformation.relation.has_format.i18n = ui.search.fields.RepresentationInformation.relation.has_format +ui.search.fields.RepresentationInformation.relation.has_format.inverse.fields = IS_FORMAT_OF +ui.search.fields.RepresentationInformation.relation.has_format.inverse.i18n = ui.search.fields.RepresentationInformation.relation.is_format_of + +ui.search.fields.RepresentationInformation.relation.has_part.fields = HAS_PART +ui.search.fields.RepresentationInformation.relation.has_part.i18n = ui.search.fields.RepresentationInformation.relation.has_part +ui.search.fields.RepresentationInformation.relation.has_part.inverse.fields = IS_PART_OF +ui.search.fields.RepresentationInformation.relation.has_part.inverse.i18n = ui.search.fields.RepresentationInformation.relation.is_part_of + +ui.search.fields.RepresentationInformation.relation.has_version.fields = HAS_VERSION +ui.search.fields.RepresentationInformation.relation.has_version.i18n = ui.search.fields.RepresentationInformation.relation.has_version +ui.search.fields.RepresentationInformation.relation.has_version.inverse.fields = IS_VERSION_OF +ui.search.fields.RepresentationInformation.relation.has_version.inverse.i18n = ui.search.fields.RepresentationInformation.relation.is_version_of + +ui.search.fields.RepresentationInformation.relation.references.fields = REFERENCES +ui.search.fields.RepresentationInformation.relation.references.i18n = ui.search.fields.RepresentationInformation.relation.references +ui.search.fields.RepresentationInformation.relation.references.inverse.fields = IS_REFERENCED_BY +ui.search.fields.RepresentationInformation.relation.references.inverse.i18n = ui.search.fields.RepresentationInformation.relation.is_referenced_by + +ui.search.fields.RepresentationInformation.relation.replaces.fields = REPLACES +ui.search.fields.RepresentationInformation.relation.replaces.i18n = ui.search.fields.RepresentationInformation.relation.replaces +ui.search.fields.RepresentationInformation.relation.replaces.inverse.fields = IS_REPLACED_BY +ui.search.fields.RepresentationInformation.relation.replaces.inverse.i18n = ui.search.fields.RepresentationInformation.relation.is_replaced_by + +ui.search.fields.RepresentationInformation.relation.requires.fields = REQUIRES +ui.search.fields.RepresentationInformation.relation.requires.i18n = ui.search.fields.RepresentationInformation.relation.requires +ui.search.fields.RepresentationInformation.relation.requires.inverse.fields = IS_REQUIRED_BY +ui.search.fields.RepresentationInformation.relation.requires.inverse.i18n = ui.search.fields.RepresentationInformation.relation.is_required_by + +ui.search.fields.RepresentationInformation.relation.has_source.fields = HAS_SOURCE +ui.search.fields.RepresentationInformation.relation.has_source.i18n = ui.search.fields.RepresentationInformation.relation.has_source +ui.search.fields.RepresentationInformation.relation.has_source.inverse.fields = IS_SOURCE_OF +ui.search.fields.RepresentationInformation.relation.has_source.inverse.i18n = ui.search.fields.RepresentationInformation.relation.is_source_of + +ui.search.fields.RepresentationInformation.relation.rendered_by.fields = RENDERED_BY +ui.search.fields.RepresentationInformation.relation.rendered_by.i18n = ui.search.fields.RepresentationInformation.relation.rendered_by + +ui.search.fields.RepresentationInformation.relation.executed_by.fields = EXECUTED_BY +ui.search.fields.RepresentationInformation.relation.executed_by.i18n = ui.search.fields.RepresentationInformation.relation.executed_by + +ui.search.fields.RepresentationInformation.relation.specified_by.fields = SPECIFIED_BY +ui.search.fields.RepresentationInformation.relation.specified_by.i18n = ui.search.fields.RepresentationInformation.relation.specified_by + +ui.search.fields.RepresentationInformation.relation.represents.fields = REPRESENTS +ui.search.fields.RepresentationInformation.relation.represents.i18n = ui.search.fields.RepresentationInformation.relation.represents + +ui.search.fields.RepresentationInformation.relation.subtype_of.fields: SUBTYPE_OF +ui.search.fields.RepresentationInformation.relation.subtype_of.i18n = ui.search.fields.RepresentationInformation.relation.subtype_of +ui.search.fields.RepresentationInformation.relation.subtype_of.inverse.fields = HAS_SUBTYPE +ui.search.fields.RepresentationInformation.relation.subtype_of.inverse.i18n = ui.search.fields.RepresentationInformation.relation.has_subtype + +ui.search.fields.RepresentationInformation.relation.component_of.fields: COMPONENT_OF +ui.search.fields.RepresentationInformation.relation.component_of.i18n = ui.search.fields.RepresentationInformation.relation.component_of +ui.search.fields.RepresentationInformation.relation.component_of.inverse.fields = HAS_COMPONENT +ui.search.fields.RepresentationInformation.relation.component_of.inverse.i18n = ui.search.fields.RepresentationInformation.relation.has_component + +ui.search.fields.RepresentationInformation.relation.contains.fields: CONTAINS +ui.search.fields.RepresentationInformation.relation.contains.i18n = ui.search.fields.RepresentationInformation.relation.contains +ui.search.fields.RepresentationInformation.relation.contains.inverse.fields = IS_CONTAINED +ui.search.fields.RepresentationInformation.relation.contains.inverse.i18n = ui.search.fields.RepresentationInformation.relation.is_contained + +ui.search.fields.RepresentationInformation.relation.extension_of.fields: EXTENSION_OF +ui.search.fields.RepresentationInformation.relation.extension_of.i18n = ui.search.fields.RepresentationInformation.relation.extension_of +ui.search.fields.RepresentationInformation.relation.extension_of.inverse.fields = HAS_EXTENSION +ui.search.fields.RepresentationInformation.relation.extension_of.inverse.i18n = ui.search.fields.RepresentationInformation.relation.has_extension + +ui.search.fields.RepresentationInformation.relation.modification_of.fields: MODIFICATION_OF +ui.search.fields.RepresentationInformation.relation.modification_of.i18n = ui.search.fields.RepresentationInformation.relation.modification_of +ui.search.fields.RepresentationInformation.relation.modification_of.inverse.fields = HAS_MODIFICATION +ui.search.fields.RepresentationInformation.relation.modification_of.inverse.i18n = ui.search.fields.RepresentationInformation.relation.has_modification + +ui.search.fields.RepresentationInformation.relation.used_by.fields: USED_BY +ui.search.fields.RepresentationInformation.relation.used_by.i18n = ui.search.fields.RepresentationInformation.relation.used_by +ui.search.fields.RepresentationInformation.relation.used_by.inverse.fields = USES +ui.search.fields.RepresentationInformation.relation.used_by.inverse.i18n = ui.search.fields.RepresentationInformation.relation.uses + +ui.search.fields.RepresentationInformation.relation.has_earlier_version.fields: HAS_EARLIER_VERSION +ui.search.fields.RepresentationInformation.relation.has_earlier_version.i18n = ui.search.fields.RepresentationInformation.relation.has_earlier_version +ui.search.fields.RepresentationInformation.relation.has_earlier_version.inverse.fields: HAS_LATER_VERSION +ui.search.fields.RepresentationInformation.relation.has_earlier_version.inverse.i18n = ui.search.fields.RepresentationInformation.relation.has_later_version + +ui.search.fields.RepresentationInformation.relation.affinity_to.fields: AFFINITY_TO +ui.search.fields.RepresentationInformation.relation.affinity_to.i18n = ui.search.fields.RepresentationInformation.relation.affinity_to +ui.search.fields.RepresentationInformation.relation.defined_via.fields: DEFINED_VIA +ui.search.fields.RepresentationInformation.relation.defined_via.i18n = ui.search.fields.RepresentationInformation.relation.defined_via +ui.search.fields.RepresentationInformation.relation.equivalent_to.fields: EQUIVALENT_TO +ui.search.fields.RepresentationInformation.relation.equivalent_to.i18n = ui.search.fields.RepresentationInformation.relation.equivalent_to +ui.search.fields.RepresentationInformation.relation.may_contain.fields: MAY_CONTAIN +ui.search.fields.RepresentationInformation.relation.may_contain.i18n = ui.search.fields.RepresentationInformation.relation.may_contain +ui.search.fields.RepresentationInformation.relation.may_have_component.fields: MAY_HAVE_COMPONENT +ui.search.fields.RepresentationInformation.relation.may_have_component.i18n = ui.search.fields.RepresentationInformation.relation.may_have_component +ui.search.fields.RepresentationInformation.relation.must_have_component.fields: MUST_HAVE_COMPONENT +ui.search.fields.RepresentationInformation.relation.must_have_component.i18n = ui.search.fields.RepresentationInformation.relation.must_have_component +ui.search.fields.RepresentationInformation.relation.has_modified_version.fields: HAS_MODIFIED_VERSION +ui.search.fields.RepresentationInformation.relation.has_modified_version.i18n = ui.search.fields.RepresentationInformation.relation.has_modified_version +ui.search.fields.RepresentationInformation.relation.has_extension.fields: HAS_EXTENSION +ui.search.fields.RepresentationInformation.relation.has_extension.i18n = ui.search.fields.RepresentationInformation.relation.has_extension + +ui.search.fields.RepresentationInformation.relation.see_also.fields = SEE_ALSO +ui.search.fields.RepresentationInformation.relation.see_also.i18n = ui.search.fields.RepresentationInformation.relation.see_also + +ui.search.fields.RepresentationInformation.relation.other.fields: OTHER +ui.search.fields.RepresentationInformation.relation.other.i18n = ui.search.fields.RepresentationInformation.relation.other + +########################################################################## +# Class icons +# +# ui.icons.class.{class.simpleName} +# String, icon shown whenever a icon for a class is needed +# A more specific item (eg: AIP level) may be shown in some cases +# Note: Use the fontawesome icon name, ie use "cubes" instead of "fa fa-cubes" +# Default: question-circle +########################################################################## +ui.icons.class.AIP = question-circle +ui.icons.class.IndexedAIP = question-circle +ui.icons.class.Representation = cubes +ui.icons.class.IndexedRepresentation = cubes +ui.icons.class.File = copy +ui.icons.class.IndexedFile = copy +ui.icons.class.TransferredResource = copy +ui.icons.class.DIP = play-circle +ui.icons.class.IndexedDIP = play-circle +ui.icons.class.DIPFile = copy +#ui.icons.class.Risk = +#ui.icons.class.IndexedRisk = +#ui.icons.class.RiskIncidence = +ui.icons.class.RepresentationInformation = info-circle +#ui.icons.class.Job = +#ui.icons.class.Report = +#ui.icons.class.IndexedReport = +#ui.icons.class.Notification = +#ui.icons.class.LogEntry = +ui.icons.class.RODAMember = user +#ui.icons.class.DescriptiveMetadata = +#ui.icons.class.PreservationMetadata = +#ui.icons.class.Format = ########################################################################## # List configuration (facets) # # ui.lists -# Array with the names of the supported lists -# -# ui.lists.{listName}.facets.parameters -# Array with the facetParameter names, which must be the same as the -# solr field name -# -# ui.lists.{listName}.facets.parameters.{parameterName}.type -# One of 'SimpleFacetParameter' or 'RangeFacetParameter' with args: -# SimpleFacetParameter(name) -# SimpleFacetParameter(name, sort) -# SimpleFacetParameter(name, limit) -# SimpleFacetParameter(name, limit, sort) -# SimpleFacetParameter(name, values) -# SimpleFacetParameter(name, values, minCount) -# SimpleFacetParameter(name, values, minCount, limit) -# RangeFacetParameter(name) -# RangeFacetParameter(name, start, end, gap) -# for each type check the constructor definition -# -# example: -# ui.lists.{listName}.facets.parameters.{parameterName}.sort = COUNT +# Array with the IDs of supported lists ########################################################################## - - ui.lists = ActionProcess_jobs +ui.lists = ActionProcess_reports ui.lists = BrowseAIP_aipChildren -# ui.lists = BrowseAIP_disseminations +ui.lists = BrowseAIP_disseminations ui.lists = BrowseAIP_representations -# ui.lists = BrowseDIP_dipFiles -# ui.lists = BrowseRepresentation_disseminations -# ui.lists = BrowseRepresentation_files -# ui.lists = CreateIngestJob_transferredResources -# ui.lists = DipFilePreview_files -# ui.lists = FormatRegister_formats -# ui.lists = IndexedFilePreview_files +ui.lists = BrowseDIP_dipFiles +ui.lists = BrowseRepresentation_disseminations +ui.lists = BrowseRepresentation_files +ui.lists = BrowseTop_aip +ui.lists = CreateActionJob_AIP +ui.lists = CreateActionJob_DIP +ui.lists = CreateActionJob_DIPFile +ui.lists = CreateActionJob_format +ui.lists = CreateActionJob_job +ui.lists = CreateActionJob_logEntry +ui.lists = CreateActionJob_notification +ui.lists = CreateActionJob_representation +ui.lists = CreateActionJob_representationInformation +ui.lists = CreateActionJob_risk +ui.lists = CreateActionJob_riskIncidence +ui.lists = CreateActionJob_rodaMember +ui.lists = CreateActionJob_simpleFile +ui.lists = CreateActionJob_simpleJob +ui.lists = CreateActionJob_transferredResource +ui.lists = CreateDefaultJob_AIP +ui.lists = CreateDefaultJob_DIP +ui.lists = CreateDefaultJob_DIPFile +ui.lists = CreateDefaultJob_format +ui.lists = CreateDefaultJob_job +ui.lists = CreateDefaultJob_logEntry +ui.lists = CreateDefaultJob_notification +ui.lists = CreateDefaultJob_representation +ui.lists = CreateDefaultJob_representationInformation +ui.lists = CreateDefaultJob_risk +ui.lists = CreateDefaultJob_riskIncidence +ui.lists = CreateDefaultJob_rodaMember +ui.lists = CreateDefaultJob_simpleFile +ui.lists = CreateDefaultJob_simpleJob +ui.lists = CreateDefaultJob_transferredResource +ui.lists = CreateIngestJob_transferredResources +ui.lists = DipFilePreview_files +ui.lists = FormatRegister_formats +ui.lists = IndexedFilePreview_files ui.lists = IngestAppraisal_searchAIPs ui.lists = IngestAppraisal_searchFiles ui.lists = IngestAppraisal_searchRepresentations ui.lists = IngestProcess_jobs -# ui.lists = IngestTransfer_transferredResources +ui.lists = IngestProcess_reports +ui.lists = IngestTransfer_transferredResources ui.lists = InternalProcess_jobs -# ui.lists = ListFactory_AIP -# ui.lists = ListFactory_DIP -# ui.lists = ListFactory_DIPFile -# ui.lists = ListFactory_format -# ui.lists = ListFactory_job -# ui.lists = ListFactory_logEntry -# ui.lists = ListFactory_notification -# ui.lists = ListFactory_representation -# ui.lists = ListFactory_representationInformation -# ui.lists = ListFactory_risk -# ui.lists = ListFactory_riskIncidence -# ui.lists = ListFactory_rodaMember -# ui.lists = ListFactory_simpleFile -# ui.lists = ListFactory_simpleJob -# ui.lists = ListFactory_transferredResource +ui.lists = InternalProcess_reports ui.lists = MemberManagement_rodaMembers -# ui.lists = MemberSelectDialog_rodaMembers +ui.lists = MemberSelectDialog_rodaMembers ui.lists = NotificationRegister_notifications ui.lists = PreservationAgents_agents ui.lists = PreservationEvents_events -# ui.lists = RepresentationInformationAssociations_RI -# ui.lists = RepresentationInformationDialogs_AIPs -# ui.lists = RepresentationInformationDialogs_files -# ui.lists = RepresentationInformationDialogs_representations -# ui.lists = RepresentationInformationDialogs_RI +ui.lists = RepresentationInformationAssociations_RI +ui.lists = RepresentationInformationDialogs_AIPs +ui.lists = RepresentationInformationDialogs_files +ui.lists = RepresentationInformationDialogs_representations +ui.lists = RepresentationInformationDialogs_RI ui.lists = RepresentationInformationNetwork_RI +ui.lists = RiskHistory_riskIncidences ui.lists = RiskIncidenceRegister_risks +ui.lists = RiskRegister_riskIncidences ui.lists = RiskRegister_risks ui.lists = RiskShowPanel_riskIncidences -ui.lists = RiskRegister_riskIncidences ui.lists = Search_AIPs ui.lists = Search_files ui.lists = Search_representations -ui.lists = Search_Jobs -ui.lists = Search_job_reports -# ui.lists = SelectAipDialog_AIPs -# ui.lists = SelectFileDialog_simpleFiles -# ui.lists = SelectJobDialog_jobs -# ui.lists = SelectLogEntryDialog_logEntries -# ui.lists = SelectNotificationDialog_notifications -# ui.lists = SelectReportDialog_simpleJobReports -# ui.lists = SelectRepresentationDialog_representations -# ui.lists = SelectRepresentationInformationDialog_RI -# ui.lists = SelectRiskDialog_risks -# ui.lists = SelectTransferResourceDialog_transferredResources +ui.lists = SelectAipDialog_AIPs +ui.lists = SelectFileDialog_simpleFiles +ui.lists = SelectJobDialog_jobs +ui.lists = SelectLogEntryDialog_logEntries +ui.lists = SelectNotificationDialog_notifications +ui.lists = SelectReportDialog_simpleJobReports +ui.lists = SelectRepresentationDialog_representations +ui.lists = SelectRepresentationInformationDialog_RI +ui.lists = SelectRiskDialog_risks +ui.lists = SelectTransferResourceDialog_transferredResources ui.lists = ShowJob_reports -# ui.lists = ShowJob_reports_hidden -ui.lists = IngestProcess_reports -ui.lists = ActionProcess_reports -ui.lists = InternalProcess_reports ui.lists = UserLog_logEntries +########################################################################## +# List configuration +# +# ui.lists.{listName}.search.enabled +# Boolean, defining if the search bar should be visible. +# Default: true +########################################################################## +ui.lists.CreateActionJob_AIP.search.enabled = false +ui.lists.CreateActionJob_DIP.search.enabled = false +ui.lists.CreateActionJob_DIPFile.search.enabled = false +ui.lists.CreateActionJob_format.search.enabled = false +ui.lists.CreateActionJob_job.search.enabled = false +ui.lists.CreateActionJob_logEntry.search.enabled = false +ui.lists.CreateActionJob_notification.search.enabled = false +ui.lists.CreateActionJob_representation.search.enabled = false +ui.lists.CreateActionJob_representationInformation.search.enabled = false +ui.lists.CreateActionJob_risk.search.enabled = false +ui.lists.CreateActionJob_riskIncidence.search.enabled = false +ui.lists.CreateActionJob_rodaMember.search.enabled = false +ui.lists.CreateActionJob_simpleFile.search.enabled = false +ui.lists.CreateActionJob_simpleJob.search.enabled = false +ui.lists.CreateActionJob_transferredResource.search.enabled = false +ui.lists.CreateIngestJob_transferredResources.search.enabled = false +# RepresentationInformationDialogs has no search component because it shows the list dynamically +ui.lists.RepresentationInformationDialogs_AIPs.search.enabled = false +ui.lists.RepresentationInformationDialogs_files.search.enabled = false +ui.lists.RepresentationInformationDialogs_representations.search.enabled = false + +########################################################################## +# List configuration +# +# ui.lists.{listName}.search.prefilters.visible +# Boolean, defining if the prefilters below the search bar should be visible. If there are no prefilters, this does +# nothing (they are hidden). +# Default: false +########################################################################## +ui.lists.IngestAppraisal_searchAIPs.search.prefilters.visible = true +ui.lists.IngestAppraisal_searchFiles.search.prefilters.visible = true +ui.lists.IngestAppraisal_searchRepresentations.search.prefilters.visible = true +ui.lists.IngestTransfer_transferredResources.search.prefilters.visible = true +ui.lists.MemberManagement_rodaMembers.search.prefilters.visible = true +ui.lists.MemberSelectDialog_rodaMembers.search.prefilters.visible = true +ui.lists.NotificationRegister_notifications.search.prefilters.visible = true +ui.lists.PreservationEvents_events.search.prefilters.visible = true +ui.lists.RepresentationInformationNetwork_RI.search.prefilters.visible = true +ui.lists.RiskHistory_riskIncidences.search.prefilters.visible = true +ui.lists.RiskIncidenceRegister_risks.search.prefilters.visible = true +ui.lists.RiskRegister_riskIncidences.search.prefilters.visible = true +ui.lists.RiskRegister_risks.search.prefilters.visible = true +ui.lists.RiskShowPanel_riskIncidences.search.prefilters.visible = true +ui.lists.Search_AIPs.search.prefilters.visible = true +ui.lists.Search_files.search.prefilters.visible = true +ui.lists.Search_representations.search.prefilters.visible = true +ui.lists.SelectAipDialog_AIPs.search.prefilters.visible = true +ui.lists.SelectFileDialog_simpleFiles.search.prefilters.visible = true +ui.lists.SelectJobDialog_jobs.search.prefilters.visible = true +ui.lists.SelectLogEntryDialog_logEntries.search.prefilters.visible = true +ui.lists.SelectNotificationDialog_notifications.search.prefilters.visible = true +ui.lists.SelectReportDialog_simpleJobReports.search.prefilters.visible = true +ui.lists.SelectRepresentationDialog_representations.search.prefilters.visible = true +ui.lists.SelectRepresentationInformationDialog_RI.search.prefilters.visible = true +ui.lists.SelectRiskDialog_risks.search.prefilters.visible = true +ui.lists.SelectTransferResourceDialog_transferredResources.search.prefilters.visible = true +ui.lists.ShowJob_reports.search.prefilters.visible = true +ui.lists.UserLog_logEntries.search.prefilters.visible = true + +########################################################################## +# List configuration +# +# ui.lists.{listName}.search.advanced.enabled +# Boolean +# Note: `ui.search.fields.{classSimpleName}` is then used to build the advanced search fields +# Default: false +########################################################################## +ui.lists.ActionProcess_jobs.search.advanced.enabled = true +ui.lists.ActionProcess_reports.search.advanced.enabled = true +ui.lists.BrowseAIP_aipChildren.search.advanced.enabled = true +ui.lists.BrowseAIP_representations.search.advanced.enabled = true +ui.lists.BrowseRepresentation_disseminations.search.advanced.enabled = true +ui.lists.BrowseRepresentation_files.search.advanced.enabled = true +ui.lists.IngestAppraisal_searchAIPs.search.advanced.enabled = true +ui.lists.IngestAppraisal_searchFiles.search.advanced.enabled = true +ui.lists.IngestAppraisal_searchRepresentations.search.advanced.enabled = true +ui.lists.IngestProcess_jobs.search.advanced.enabled = true +ui.lists.IngestProcess_reports.search.advanced.enabled = true +ui.lists.IngestTransfer_transferredResources.search.advanced.enabled = true +ui.lists.InternalProcess_jobs.search.advanced.enabled = true +ui.lists.InternalProcess_reports.search.advanced.enabled = true +ui.lists.NotificationRegister_notifications.search.advanced.enabled = true +ui.lists.PreservationEvents_events.search.advanced.enabled = true +ui.lists.RiskRegister_riskIncidences.search.advanced.enabled = true +ui.lists.RiskRegister_risks.search.advanced.enabled = true +ui.lists.Search_AIPs.search.advanced.enabled = true +ui.lists.Search_files.search.advanced.enabled = true +ui.lists.Search_representations.search.advanced.enabled = true +ui.lists.UserLog_logEntries.search.advanced.enabled = true + +########################################################################## +# List configuration +# +# ui.lists.{listName}.search.selectedInfo.alwaysVisible TODO: migrar codigo para properties +# Boolean +# Note: ignored if the searchWrapper has multiple lists +# Default: false +########################################################################## +ui.lists.BrowseAIP_aipChildren.search.selectedInfo.alwaysVisible = true +ui.lists.BrowseAIP_representations.search.selectedInfo.alwaysVisible = true + +########################################################################## +# List configuration +# +# ui.lists.{listName}.facets.parameters +# Array with the facetParameter names, which must be the same as the solr field name. +# Default: empty +# +# ui.lists.{listName}.facets.parameters.{parameterName}.type +# One of 'SimpleFacetParameter' or 'RangeFacetParameter' with args: +# SimpleFacetParameter(name) +# SimpleFacetParameter(name, sort) +# SimpleFacetParameter(name, limit) +# SimpleFacetParameter(name, limit, sort) +# SimpleFacetParameter(name, values) +# SimpleFacetParameter(name, values, minCount) +# SimpleFacetParameter(name, values, minCount, limit) +# RangeFacetParameter(name) +# RangeFacetParameter(name, start, end, gap) +# for each type check the constructor definition +# Default: null (to purposely throw an error) +# +# example: +# ui.lists.{listName}.facets.parameters.{parameterName}.sort = COUNT +########################################################################## ui.lists.ActionProcess_jobs.facets.parameters = username ui.lists.ActionProcess_jobs.facets.parameters = state ui.lists.ActionProcess_jobs.facets.parameters = pluginType @@ -759,6 +912,11 @@ ui.lists.BrowseAIP_aipChildren.facets.parameters = hasRepresentations ui.lists.BrowseAIP_aipChildren.facets.parameters.level.type = SimpleFacetParameter ui.lists.BrowseAIP_aipChildren.facets.parameters.hasRepresentations.type = SimpleFacetParameter +ui.lists.BrowseTop_aip.facets.parameters = level +ui.lists.BrowseTop_aip.facets.parameters = hasRepresentations +ui.lists.BrowseTop_aip.facets.parameters.level.type = SimpleFacetParameter +ui.lists.BrowseTop_aip.facets.parameters.hasRepresentations.type = SimpleFacetParameter + ui.lists.BrowseAIP_representations.facets.parameters = type ui.lists.BrowseAIP_representations.facets.parameters = representationStates ui.lists.BrowseAIP_representations.facets.parameters.type.type = SimpleFacetParameter @@ -904,6 +1062,44 @@ ui.lists.UserLog_logEntries.facets.parameters.username.sort = COUNT ui.lists.UserLog_logEntries.facets.parameters.state.type = SimpleFacetParameter ui.lists.UserLog_logEntries.facets.parameters.state.sort = COUNT +########################################################################## +# List configuration +# +# ui.lists.{listName}.search.selectedInfo.icon TODO: use correct icons +# String, icon shown before `label.selected.i18n` and `label.default.i18n`. +# Note: Use the fontawesome icon name, ie use "cubes" instead of "fa fa-cubes" +# Default: value of property `ui.icons.class.{class.simpleName}` +########################################################################## +ui.lists.BrowseAIP_aipChildren.search.selectedInfo.icon = sitemap + +########################################################################## +# List configuration +# +# ui.lists.{listName}.search.selectedInfo.label.selected.i18n.single\ +# String, text shown when 1 item is selected, in "1 {thisPart} selected" +# Default: "oneOf" i18n of class +# +########################################################################## +ui.lists.BrowseAIP_aipChildren.search.selectedInfo.label.selected.i18n.single = lists.label.BrowseAIP_aipChildren.single + +########################################################################## +# List configuration +# +# ui.lists.{listName}.search.selectedInfo.label.selected.i18n.multiple +# String, text shown when 0 or N items are selected, in "N {thisPart} selected" +# Default: "someOf" i18n of class +########################################################################## +ui.lists.BrowseAIP_aipChildren.search.selectedInfo.label.selected.i18n.multiple = lists.label.BrowseAIP_aipChildren.multiple + +########################################################################## +# List configuration +# +# ui.lists.{listName}.search.selectedInfo.label.default.i18n +# String, text shown when nothing is selected +# Note: this is also used as label in the dropdown, if this SearchWrapper can show multiple tables +# Default: "someOf" i18n of class +########################################################################## +ui.lists.BrowseAIP_aipChildren.search.selectedInfo.label.default.i18n = lists.label.BrowseAIP_aipChildren.multiple ########################################################################## # File viewers settings diff --git a/roda-ui/roda-wui/src/main/resources/org/roda/wui/public/Main.css b/roda-ui/roda-wui/src/main/resources/org/roda/wui/public/Main.css index 067dc6547f..f34475785f 100644 --- a/roda-ui/roda-wui/src/main/resources/org/roda/wui/public/Main.css +++ b/roda-ui/roda-wui/src/main/resources/org/roda/wui/public/Main.css @@ -278,7 +278,7 @@ div.inline { .card { - background-color: white; + background-color: white; box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); transition: all 0.3s cubic-bezier(.25,.8,.25,1); border-radius: 2px; @@ -286,11 +286,11 @@ div.inline { } .card:hover { - box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23); + box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23); } .card + .card { - margin-top: 20px; + margin-top: 30px; } .card > .h5, @@ -1170,6 +1170,7 @@ pre code { display: inline-block; line-height: 1; font-size: 1.3rem; + float:right; } .my-asyncdatagrid-pager-results img { @@ -1349,6 +1350,7 @@ pre code { min-width: 150px; cursor: pointer; cursor: hand; + text-transform: capitalize; } .dropdown-item:hover { @@ -1373,6 +1375,17 @@ pre code { content: "\f107"; } +.dropdown-label .gwt-Label, +.dropdown-item .gwt-Label { + display: inline; +} + +.dropdown-item .fa, +.dropdown-label .fa, +.searchPanelLeft .selected-count-panel .fa { + padding-right: 1rem; +} + .open .dropdown-label:after { content: "\f106"; } @@ -2301,15 +2314,6 @@ td.datePickerMonth, td.datePickerYear { vertical-align: middle; } -.browseTitle-allCollections-wrapper { - display: none; -} - -.browseTitle-allCollections-wrapper .browseItemIcon, -.browseTitle-allCollections-wrapper .browseItemPanelText { - display: inline-block; -} - .browseItemHeader { color: #999; font-size: 1.8rem; @@ -3487,14 +3491,32 @@ td.datePickerMonth, td.datePickerYear { /********************************************** DEFAULT SEARCH + ADV SEARCH ************************************************/ -.searchPanel { - margin-right: 40px; - height: 4rem; - background-color: #eee; +.searchPanelContainer { + margin-bottom: 30px; +} + +.searchPanelContainer.with-prefilters{ + margin-bottom: 6px; +} + +.card .searchPanelContainer { + margin-top: -15px; + margin-left: -15px; + margin-right: -15px; } -.searchPanelAdvanced { +.browse_top .card .searchPanelContainer { + margin: 0; +} + +.browse_top .card .searchPanelContainer .selected-count-panel .gwt-InlineHTML { + display: none; +} + +.searchPanel { margin-right: 80px; + height: 4rem; + background-color: #eee; } .searchPanelLeft { @@ -3513,7 +3535,7 @@ td.datePickerMonth, td.datePickerYear { border-top: 2px solid white; } -.searchPanelLeft .selected-count-label, +.searchPanelLeft .selected-count-panel, .searchInputListBox .dropdown-label, .searchInputListBoxPopup .dropdown-item { line-height: 4rem; @@ -3522,13 +3544,18 @@ td.datePickerMonth, td.datePickerYear { border: none; padding: 0 0 0 0; padding-left: 20px; - padding-right: 10px; - min-width: 175px; + padding-right: 35px; + min-width: 165px; position: relative; } -.searchPanelLeft .selected-count-label { - min-width: 135px; +.searchPanelLeft .selected-count-panel { + min-width: 0; + padding-right: 20px; +} + +.searchPanelLeft .selected-count-panel .selected-count-panel-default { + text-transform: capitalize; } .searchInputListBox .dropdown-label:after { @@ -3554,14 +3581,26 @@ td.datePickerMonth, td.datePickerYear { .searchPanelRight { float: right; - width: 40px; - margin-right: -40px; height: 4rem; } -.searchPanelAdvanced .searchPanelRight { - width: 80px; - margin-right: -80px; +.searchPanelRight .actions-button { + cursor: pointer; + cursor: hand; + position: relative; + font-size: 15px; + float: right; + width: 40px; + background-color: #999; + color: white; +} + +.searchPanelRight > div { + box-sizing: border-box; +} + +.searchPanelRight .actions-button:hover { + background-color: #089de3; } .searchPanelAdvanced .searchBox { @@ -3573,6 +3612,32 @@ td.datePickerMonth, td.datePickerYear { height: 4rem; */ } +.searchPanelRight .searchPanelButtonsSeparator { + border-left: 1px solid #aaa; +} + +.searchPanel.searchPanelButtons-0 { margin-right: 0px; } +.searchPanel.searchPanelButtons-1 { margin-right: 40px; } +.searchPanel.searchPanelButtons-2 { margin-right: 80px; } +.searchPanel.searchPanelButtons-3 { margin-right: 120px; } +.searchPanel.searchPanelButtons-4 { margin-right: 160px; } +.searchPanel.searchPanelButtons-5 { margin-right: 200px; } +.searchPanel.searchPanelButtons-6 { margin-right: 240px; } +.searchPanel.searchPanelButtons-7 { margin-right: 280px; } +.searchPanel.searchPanelButtons-8 { margin-right: 320px; } +.searchPanel.searchPanelButtons-9 { margin-right: 360px; } + +.searchPanel.searchPanelButtons-0 .searchPanelRight { width: 0px; margin-right: -0px; } +.searchPanel.searchPanelButtons-1 .searchPanelRight { width: 40px; margin-right: -40px; } +.searchPanel.searchPanelButtons-2 .searchPanelRight { width: 80px; margin-right: -80px; } +.searchPanel.searchPanelButtons-3 .searchPanelRight { width: 120px; margin-right: -120px; } +.searchPanel.searchPanelButtons-4 .searchPanelRight { width: 160px; margin-right: -160px; } +.searchPanel.searchPanelButtons-5 .searchPanelRight { width: 200px; margin-right: -200px; } +.searchPanel.searchPanelButtons-6 .searchPanelRight { width: 240px; margin-right: -240px; } +.searchPanel.searchPanelButtons-7 .searchPanelRight { width: 280px; margin-right: -280px; } +.searchPanel.searchPanelButtons-8 .searchPanelRight { width: 320px; margin-right: -320px; } +.searchPanel.searchPanelButtons-9 .searchPanelRight { width: 360px; margin-right: -360px; } + .searchBox { box-sizing: border-box; width: 100%; @@ -3596,7 +3661,7 @@ td.datePickerMonth, td.datePickerYear { position: relative; float: left; width: 40px; - background-color: #089de3; + background-color: #999; } .advancedSearchButton { @@ -3614,7 +3679,7 @@ td.datePickerMonth, td.datePickerYear { } .searchButton:hover { - background-color: #3998d0; + background-color: #089de3; } .searchButton-html { @@ -3627,7 +3692,7 @@ td.datePickerMonth, td.datePickerYear { white-space: nowrap; line-height: 40px; position: absolute; - right: 40px; + right: 32px; background-color: #eeeeee; padding-left: 20px; background: -webkit-linear-gradient(right, #eee 80%, rgba(255, 255, 255, 0) 100%); @@ -3664,6 +3729,10 @@ td.datePickerMonth, td.datePickerYear { margin-top: 30px; } +.card .searchResults { + margin-top: 20px; +} + .searchApplyFilters { margin: 10px 0; width: 100%; @@ -3683,7 +3752,6 @@ td.datePickerMonth, td.datePickerYear { padding: 20px !important; min-height: auto; background-color: #eee; - margin-bottom: 20px; border-top: 2px solid #089de3; } @@ -6215,7 +6283,7 @@ td.datePickerMonth, td.datePickerYear { .csvDownloadButton, .actionsButton { padding: 7px; - float: right; + float: left; } .object-dialog .searchPreFilters { @@ -6650,9 +6718,7 @@ span.code { /***************************** Actionable */ -.actionable-group-title {} - -.actionable-group-title-empty { +.actionable-title-empty { display: none; } @@ -6660,7 +6726,7 @@ span.code { display: none; } -.popupContent .actions-empty-help { +.ActionableStyleMenu .actions-empty-help { display: block; padding: 5px 15px; } @@ -6677,38 +6743,44 @@ span.code { z-index: 2; } -.actionable-menu { +.actionable-button:hover { + cursor: pointer; +} + +.actionable-button-disabled:hover { + cursor: default; +} + +.ActionableStyleMenu .actionable-menu { display: block; } +.ActionableStyleButtons .actionable-title, +.ActionableStyleMenu .actionable-title { + display:none; +} -.actionable-menu .actionable-button { +.ActionableStyleMenu .actionable-button { display: block; padding: 5px 10px; font-size: 1.4rem; -} - -.actionable-menu .actionable-button { border-radius: 2px; + white-space: nowrap; + overflow: hidden; } -.actionable-menu .actionable-button:hover { +.ActionableStyleMenu .actionable-button:hover { background-color: #eee; - cursor: pointer; -} - -.sidebar .actionable-menu .actionable-button:hover { - background-color: #ddd; } -.actionable-menu .actionable-button-destroyed:hover { +.ActionableStyleMenu .actionable-button-destroyed:hover { background-color: rgba(217, 83, 79, 0.4); } -.actionable-menu .actionable-button-update:hover { +.ActionableStyleMenu .actionable-button-update:hover { background-color: rgba(8, 157, 227, 0.4); } -.actionable-menu .actionable-button .actionable-button-icon { +.ActionableStyleMenu .actionable-button-icon { display: inline-block; vertical-align: middle; width: 16px; @@ -6717,32 +6789,85 @@ span.code { color: #808080; } -.actionable-menu .actionable-button .actionable-button-label { +.ActionableStyleMenu .actionable-button-label { display: inline-block; vertical-align: middle; margin-left: 1rem; } -.actionable-menu .actionable-button-disabled:hover, -.sidebar .actionable-menu .actionable-button-disabled:hover{ - cursor: default; +.ActionableStyleMenu .actionable-button-disabled { background: initial; } -.actionable-menu .actionable-button-disabled .actionable-button-icon, -.actionable-menu .actionable-button-disabled .actionable-button-label { +.ActionableStyleMenu .actionable-button-disabled .actionable-button-icon, +.ActionableStyleMenu .actionable-button-disabled .actionable-button-label { color: #a0a0a0; } - -.sidebar .actionable-button { +.sidebar .actionable-button, +.ActionableStyleButtons .actionable-button { + /* mimic