From 38b576d81fab4574634a5218a4646d3880862043 Mon Sep 17 00:00:00 2001 From: bbpennel Date: Wed, 14 Oct 2015 14:40:55 -0400 Subject: [PATCH] Added null check when setting the list of views in CollectionSettings so that collections that have not previously been assigned settings will load. Metadata tab is now considered required and cannot be removed via the admin interface. Added overlay while edit collections for is loading. --- .../EditCollectionSettingsController.java | 2 +- .../unc/lib/dl/model/ContainerSettings.java | 26 ++++++++++++++++--- static/css/admin/admin_forms.css | 6 +++++ .../action/EditCollectionSettingsAction.js | 24 ++++++++++++++--- 4 files changed, 49 insertions(+), 9 deletions(-) diff --git a/admin/src/main/java/edu/unc/lib/dl/admin/controller/EditCollectionSettingsController.java b/admin/src/main/java/edu/unc/lib/dl/admin/controller/EditCollectionSettingsController.java index f14f962b32..792cee6130 100644 --- a/admin/src/main/java/edu/unc/lib/dl/admin/controller/EditCollectionSettingsController.java +++ b/admin/src/main/java/edu/unc/lib/dl/admin/controller/EditCollectionSettingsController.java @@ -66,7 +66,7 @@ public class EditCollectionSettingsController { @Autowired private SolrQueryLayerService solrQueryService; - private final String defaultDefaultTab = ContainerView.DESCRIPTION.name(); + private final String defaultDefaultTab = ContainerView.STRUCTURE.name(); private final List defaultTabList = Arrays.asList(ContainerView.DESCRIPTION.name(), ContainerView.STRUCTURE.name(), ContainerView.EXPORTS.name()); diff --git a/metadata/src/main/java/edu/unc/lib/dl/model/ContainerSettings.java b/metadata/src/main/java/edu/unc/lib/dl/model/ContainerSettings.java index c26aa18e08..ac16cdd019 100644 --- a/metadata/src/main/java/edu/unc/lib/dl/model/ContainerSettings.java +++ b/metadata/src/main/java/edu/unc/lib/dl/model/ContainerSettings.java @@ -74,6 +74,11 @@ public List getViews() { } public void setViews(List views) { + if (views == null) { + this.views = null; + return; + } + this.views = new ArrayList<>(views.size()); for (ContainerView view : ContainerView.values()) { if (views.contains(view.name())) { @@ -87,13 +92,14 @@ public String getViewDisplayName(String view) { return viewEnum == null? null : viewEnum.getDisplayName(); } - public Map> getViewInfo() { - Map> result = new LinkedHashMap<>(); + public Map> getViewInfo() { + Map> result = new LinkedHashMap<>(); for (ContainerView view : ContainerView.values()) { - Map entry = new HashMap<>(); + Map entry = new HashMap<>(); entry.put("displayName", view.getDisplayName()); entry.put("description", view.getDescription()); + entry.put("required", new Boolean(view.isRequired())); result.put(view.name(), entry); } @@ -107,14 +113,22 @@ public static enum ContainerView { LIST_CONTENTS("List Contents", "A result view of files within this collection with hierarchy flattened"), DEPARTMENTS("Departments", "A list of the departments associated with objects in this collection"), DESCRIPTION("Description", "An overview of the contents of the collection and descriptive metadata"), - EXPORTS("Metadata", "Export options for data associated with this collection."); + EXPORTS("Metadata", "Export options for data associated with this collection.", true); String displayName; String description; + boolean required; private ContainerView(String displayName, String description) { this.displayName = displayName; this.description = description; + this.required = false; + } + + private ContainerView(String displayName, String description, boolean required) { + this.displayName = displayName; + this.description = description; + this.required = required; } public String getDisplayName() { @@ -124,5 +138,9 @@ public String getDisplayName() { public String getDescription() { return description; } + + public boolean isRequired() { + return required; + } } } diff --git a/static/css/admin/admin_forms.css b/static/css/admin/admin_forms.css index a77a12b516..7a4b244d5d 100644 --- a/static/css/admin/admin_forms.css +++ b/static/css/admin/admin_forms.css @@ -275,6 +275,7 @@ margin: 0; text-indent: 0; color: #333; + cursor: pointer; } .selectable_multi li span { @@ -295,6 +296,11 @@ .selectable_multi .selected:hover { background-color: #f8f8ff; } + +.selectable_multi .disabled { + color: #888; + cursor: default; +} .selectable_multi_actions { width: 40%; diff --git a/static/js/admin/src/action/EditCollectionSettingsAction.js b/static/js/admin/src/action/EditCollectionSettingsAction.js index 7a24109e44..0650965bb5 100644 --- a/static/js/admin/src/action/EditCollectionSettingsAction.js +++ b/static/js/admin/src/action/EditCollectionSettingsAction.js @@ -8,7 +8,7 @@ define('EditCollectionSettingsAction', ['jquery', 'underscore', 'RemoteStateChan EditCollectionSettingsAction.prototype.execute = function() { var self = this; - this.dialog = $("
Loading...
"); + this.dialog = $("
"); this.dialog.dialog({ autoOpen: true, width: '560', @@ -17,6 +17,13 @@ define('EditCollectionSettingsAction', ['jquery', 'underscore', 'RemoteStateChan title: "Collection Settings" }); + var loadingOverlay = new ModalLoadingOverlay(this.dialog, { + autoOpen : false, + type : 'icon', + dialog : self.dialog + }); + loadingOverlay.open(); + $.ajax({ url : "editCollection/" + this.context.target.pid, type : "GET" @@ -27,6 +34,9 @@ define('EditCollectionSettingsAction', ['jquery', 'underscore', 'RemoteStateChan // Recenter the dialog self.dialog.dialog("option", "position", "center"); + // Clear out the initial loading overlay + loadingOverlay.remove(); + self.$form = self.dialog.first(); var defaultViewSelect = $("#full_record_default_view", self.$form); @@ -50,6 +60,9 @@ define('EditCollectionSettingsAction', ['jquery', 'underscore', 'RemoteStateChan } function toggleChecked(checkbox, checked) { + if (checkbox.prop("disabled")) { + return; + } if (checked === undefined) { checked = !checkbox.prop("checked"); } @@ -73,9 +86,13 @@ define('EditCollectionSettingsAction', ['jquery', 'underscore', 'RemoteStateChan } // Mark starting selected views - $.each(collectionSettings.viewInfo, function(viewKey) { + $.each(collectionSettings.viewInfo, function(viewKey, viewInfo) { var checkbox = $("#full_record_views_select li[data-viewid='" + viewKey + "']", self.$form).find("input"); - toggleChecked(checkbox, $.inArray(viewKey, collectionSettings.views) != -1); + var checked = viewInfo.required || $.inArray(viewKey, collectionSettings.views) != -1; + toggleChecked(checkbox, checked); + if (viewInfo.required) { + checkbox.prop("disabled", true).parent("li").first().addClass("disabled"); + } }); // Enable help text @@ -96,7 +113,6 @@ define('EditCollectionSettingsAction', ['jquery', 'underscore', 'RemoteStateChan var overlay = new ModalLoadingOverlay(self.$form, { autoOpen : false, type : 'icon', - text : 'updating...', dialog : self.dialog }); overlay.open();