Skip to content

Commit 85c6483

Browse files
authored
update ui for representation information. (#3645)
1 parent 80abcff commit 85c6483

12 files changed

Lines changed: 431 additions & 400 deletions

roda-ui/roda-wui/src/main/java/config/i18n/client/ClientMessages.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1018,6 +1018,10 @@ SafeHtml searchPreFilterLongRangeFilterParameterGreaterThan(String searchPreFilt
10181018

10191019
String detailsCreatedBy();
10201020

1021+
String detailsUpdatedOn();
1022+
1023+
String detailsUpdatedBy();
1024+
10211025
String detailsModifiedOn();
10221026

10231027
String detailsModifiedBy();
@@ -1322,10 +1326,15 @@ SafeHtml searchPreFilterLongRangeFilterParameterGreaterThan(String searchPreFilt
13221326

13231327
String representationInformationIntellectualEntities(@PluralCount int size, String link);
13241328

1329+
String representationInformationIntellectualEntitiesAssociations();
1330+
13251331
String representationInformationRepresentations(@PluralCount int size, String link);
13261332

1333+
String representationInformationRepresentationsAssociations();
1334+
13271335
String representationInformationFiles(@PluralCount int size, String link);
13281336

1337+
String representationInformationFilesAssociations();
13291338
/****** Descriptive Metadata ****/
13301339

13311340
String metadataType();
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
package org.roda.wui.client.browse.tabs;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
import org.roda.core.data.common.RodaConstants;
7+
import org.roda.core.data.utils.RepresentationInformationUtils;
8+
import org.roda.core.data.v2.index.IsIndexed;
9+
import org.roda.core.data.v2.index.filter.Filter;
10+
import org.roda.core.data.v2.index.filter.FilterParameter;
11+
import org.roda.core.data.v2.index.filter.OrFiltersParameters;
12+
import org.roda.core.data.v2.index.filter.SimpleFilterParameter;
13+
import org.roda.core.data.v2.ip.IndexedAIP;
14+
import org.roda.core.data.v2.ip.IndexedFile;
15+
import org.roda.core.data.v2.ip.IndexedRepresentation;
16+
import org.roda.core.data.v2.ri.RepresentationInformation;
17+
import org.roda.wui.client.common.lists.utils.AsyncTableCellOptions;
18+
import org.roda.wui.client.common.lists.utils.ConfigurableAsyncTableCell;
19+
import org.roda.wui.client.common.lists.utils.ListBuilder;
20+
import org.roda.wui.client.common.search.SearchWrapper;
21+
22+
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
23+
import com.google.gwt.user.client.ui.FlowPanel;
24+
import com.google.gwt.user.client.ui.HTML;
25+
import com.google.gwt.user.client.ui.SimplePanel;
26+
import com.google.gwt.user.client.ui.Widget;
27+
28+
/**
29+
*
30+
* @author Eduardo Teixeira <eteixeira@keep.pt>
31+
*/
32+
public class BrowseRepresentationInformationTabs extends Tabs {
33+
public void init(RepresentationInformation ri) {
34+
35+
List<FilterParameter> aipParams = new ArrayList<>();
36+
List<FilterParameter> representationParams = new ArrayList<>();
37+
List<FilterParameter> fileParams = new ArrayList<>();
38+
initEntityFilters(ri, aipParams, representationParams, fileParams);
39+
40+
createAndAddTab(SafeHtmlUtils.fromSafeConstant(messages.detailsTab()), new TabContentBuilder() {
41+
@Override
42+
public Widget buildTabWidget() {
43+
return new DetailsTab(ri);
44+
}
45+
});
46+
47+
createAndAddTab(SafeHtmlUtils.fromString(messages.representationInformationIntellectualEntitiesAssociations()),
48+
() -> buildAssociationsTab(IndexedAIP.class, aipParams, "Search_AIPs"));
49+
50+
createAndAddTab(SafeHtmlUtils.fromString(messages.representationInformationRepresentationsAssociations()),
51+
() -> buildAssociationsTab(IndexedRepresentation.class, representationParams, "Search_representations"));
52+
53+
createAndAddTab(SafeHtmlUtils.fromString(messages.representationInformationFilesAssociations()),
54+
() -> buildAssociationsTab(IndexedFile.class, fileParams, "Search_files"));
55+
}
56+
57+
private void initEntityFilters(RepresentationInformation ri, List<FilterParameter> aipParams,
58+
List<FilterParameter> representationParams, List<FilterParameter> fileParams) {
59+
for (String filter : ri.getFilters()) {
60+
String[] parts = filter.split(RepresentationInformationUtils.REPRESENTATION_INFORMATION_FILTER_SEPARATOR);
61+
if (parts.length < 3) {
62+
continue;
63+
}
64+
65+
if (RodaConstants.INDEX_AIP.equals(parts[0])) {
66+
aipParams.add(new SimpleFilterParameter(parts[1], parts[2]));
67+
} else if (RodaConstants.INDEX_REPRESENTATION.equals(parts[0])) {
68+
representationParams.add(new SimpleFilterParameter(parts[1], parts[2]));
69+
} else if (RodaConstants.INDEX_FILE.equals(parts[0])) {
70+
fileParams.add(new SimpleFilterParameter(parts[1], parts[2]));
71+
}
72+
}
73+
}
74+
75+
private <T extends IsIndexed> Widget buildAssociationsTab(Class<T> clazz, List<FilterParameter> params,
76+
String listId) {
77+
78+
if (params == null || params.isEmpty()) {
79+
if (IndexedAIP.class.equals(clazz)) {
80+
return buildEmptyAssociationsCardLikeTab(messages.representationInformationIntellectualEntities(0, ""));
81+
}
82+
if (IndexedRepresentation.class.equals(clazz)) {
83+
return buildEmptyAssociationsCardLikeTab(messages.representationInformationRepresentations(0, ""));
84+
}
85+
return buildEmptyAssociationsCardLikeTab(messages.representationInformationFiles(0, ""));
86+
}
87+
Filter filter = new Filter(new OrFiltersParameters(params));
88+
89+
ListBuilder<T> listBuilder = new ListBuilder<>(() -> new ConfigurableAsyncTableCell<>(),
90+
new AsyncTableCellOptions<>(clazz, listId).withFilter(filter).withJustActive(false).bindOpener());
91+
92+
return new SearchWrapper(false).createListAndSearchPanel(listBuilder);
93+
}
94+
95+
private Widget buildEmptyAssociationsCardLikeTab(String messageHtml) {
96+
FlowPanel card = new FlowPanel();
97+
card.addStyleName("roda6CardWithHeader");
98+
card.addStyleName("wrapper");
99+
card.addStyleName("skip_padding");
100+
101+
FlowPanel body = new FlowPanel();
102+
body.addStyleName("cardBody");
103+
104+
SimplePanel info = new SimplePanel();
105+
info.addStyleName("table-empty-inner");
106+
HTML label = new HTML(messageHtml);
107+
label.addStyleName("table-empty-inner-label");
108+
info.setWidget(label);
109+
110+
body.add(info);
111+
card.add(body);
112+
return card;
113+
}
114+
}

roda-ui/roda-wui/src/main/java/org/roda/wui/client/browse/tabs/DetailsTab.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@
1111

1212
import org.roda.core.data.v2.ip.IndexedFile;
1313
import org.roda.core.data.v2.ip.TransferredResource;
14+
import org.roda.core.data.v2.ri.RepresentationInformation;
1415
import org.roda.core.data.v2.notifications.Notification;
1516
import org.roda.core.data.v2.log.LogEntry;
1617
import org.roda.wui.client.common.model.BrowseAIPResponse;
1718
import org.roda.wui.client.common.model.BrowseRepresentationResponse;
19+
import org.roda.wui.client.planning.DetailsPanelRepresentationInformation;
1820
import org.roda.wui.client.management.DetailsPanelNotification;
1921
import org.roda.wui.client.management.DetailsPanelLogEntry;
2022
import org.roda.wui.client.ingest.transfer.DetailsPanelTransferredResource;
@@ -62,6 +64,13 @@ public DetailsTab(IndexedFile file, List<String> riRules) {
6264
content.add(detailsPanel);
6365
}
6466

67+
public DetailsTab(RepresentationInformation ri){
68+
initWidget(uiBinder.createAndBindUi(this));
69+
70+
DetailsPanelRepresentationInformation detailsPanel = new DetailsPanelRepresentationInformation(ri);
71+
content.add(detailsPanel);
72+
}
73+
6574
public DetailsTab(TransferredResource resource) {
6675
initWidget(uiBinder.createAndBindUi(this));
6776

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.roda.wui.client.common;
2+
3+
import java.util.List;
4+
5+
import org.roda.core.data.v2.ri.RepresentationInformation;
6+
import org.roda.wui.client.common.actions.RepresentationInformationActions;
7+
import org.roda.wui.client.common.actions.model.ActionableObject;
8+
import org.roda.wui.client.common.actions.widgets.ActionableWidgetBuilder;
9+
10+
/**
11+
*
12+
* @author Eduardo Teixeira <eteixeira@keep.pt>
13+
*/
14+
public class BrowseRepresentationInformationActionsToolbar
15+
extends BrowseObjectActionsToolbar<RepresentationInformation> {
16+
public void buildIcon() {
17+
setIcon(null);
18+
}
19+
20+
public void buildTags() {
21+
// do nothing
22+
}
23+
24+
public void buildActions() {
25+
this.actions.clear();
26+
RepresentationInformationActions representationInformationActions;
27+
representationInformationActions = RepresentationInformationActions.get();
28+
this.actions.add(new ActionableWidgetBuilder<RepresentationInformation>(representationInformationActions)
29+
.buildGroupedListWithObjects(new ActionableObject<>(object), List.of(),
30+
List.of(RepresentationInformationActions.RepresentationInformationAction.START_PROCESS)));
31+
}
32+
33+
}

roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/actions/RepresentationInformationActions.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@
4545

4646
import config.i18n.client.ClientMessages;
4747

48-
import javax.naming.Context;
49-
5048
public class RepresentationInformationActions extends AbstractActionable<RepresentationInformation> {
5149
private static final RepresentationInformationActions INSTANCE = new RepresentationInformationActions();
5250
private static final ClientMessages messages = GWT.create(ClientMessages.class);
@@ -328,7 +326,7 @@ public ActionableBundle<RepresentationInformation> createActionsBundle() {
328326
ActionableBundle<RepresentationInformation> formatActionableBundle = new ActionableBundle<>();
329327

330328
// MANAGEMENT
331-
ActionableGroup<RepresentationInformation> managementGroup = new ActionableGroup<>(messages.sidebarActionsTitle());
329+
ActionableGroup<RepresentationInformation> managementGroup = new ActionableGroup<>(messages.manage(), "btn-edit");
332330
managementGroup.addButton(messages.newButton(), RepresentationInformationAction.NEW, ActionImpact.UPDATED,
333331
"btn-plus-circle");
334332
managementGroup.addButton(messages.createNewRepresentationInformation(),

roda-ui/roda-wui/src/main/java/org/roda/wui/client/common/resources/main.gss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2581,6 +2581,7 @@ td.datePickerMonth, td.datePickerYear {
25812581
.main .wui-breadcrumbPanel .breadcrumb-root {
25822582
color: COLOR_PRIMARY;
25832583
font-weight: bold;
2584+
max-width: none !important;
25842585
}
25852586

25862587
.main .wui-breadcrumbPanel .breadcrumb-last {

roda-ui/roda-wui/src/main/java/org/roda/wui/client/main/BreadcrumbUtils.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.roda.core.data.v2.ip.TransferredResource;
2222
import org.roda.core.data.v2.user.RODAMember;
2323
import org.roda.core.data.v2.log.LogEntry;
24+
import org.roda.core.data.v2.ri.RepresentationInformation;
2425
import org.roda.wui.client.browse.BrowseTop;
2526
import org.roda.wui.client.management.ShowLogEntry;
2627
import org.roda.wui.client.management.UserLog;
@@ -30,6 +31,8 @@
3031
import org.roda.wui.client.ingest.transfer.IngestTransfer;
3132
import org.roda.wui.client.management.members.MemberManagement;
3233
import org.roda.wui.client.management.members.ShowMember;
34+
import org.roda.wui.client.planning.RepresentationInformationNetwork;
35+
import org.roda.wui.client.planning.ShowRepresentationInformation;
3336
import org.roda.wui.common.client.tools.DescriptionLevelUtils;
3437
import org.roda.wui.common.client.tools.HistoryUtils;
3538
import org.roda.wui.common.client.tools.ListUtils;
@@ -389,6 +392,23 @@ public static List<BreadcrumbItem> getNotificationBreadcrumbs(Notification notif
389392
return ret;
390393
}
391394

395+
public static List<BreadcrumbItem> getRepresentationInformationBreadCrumbs(RepresentationInformation ri){
396+
List<BreadcrumbItem> ret = new ArrayList<>();
397+
ret.add(new BreadcrumbItem(
398+
SafeHtmlUtils.fromSafeConstant(messages.representationInformationTitle()),
399+
messages.representationInformationTitle(),
400+
RepresentationInformationNetwork.RESOLVER.getHistoryPath()));
401+
402+
if (ri != null) {
403+
List<String> path = new ArrayList<>(ShowRepresentationInformation.RESOLVER.getHistoryPath());
404+
path.add(ri.getUUID());
405+
String label = ri.getName() != null ? ri.getName() : ri.getId();
406+
ret.add(new BreadcrumbItem(SafeHtmlUtils.fromString(label), label, path));
407+
}
408+
409+
return ret;
410+
}
411+
392412
public static List<BreadcrumbItem> getDipBreadcrumbs(IndexedDIP dip, DIPFile dipFile,
393413
List<DIPFile> dipFileAncestors) {
394414
List<BreadcrumbItem> ret = new ArrayList<>();

0 commit comments

Comments
 (0)