Skip to content

Commit d1c4a74

Browse files
committed
update ui for representation information.
1 parent 1cd1330 commit d1c4a74

File tree

12 files changed

+428
-373
lines changed

12 files changed

+428
-373
lines changed

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
@@ -1016,6 +1016,10 @@ SafeHtml searchPreFilterLongRangeFilterParameterGreaterThan(String searchPreFilt
10161016

10171017
String detailsCreatedBy();
10181018

1019+
String detailsUpdatedOn();
1020+
1021+
String detailsUpdatedBy();
1022+
10191023
String detailsModifiedOn();
10201024

10211025
String detailsModifiedBy();
@@ -1312,10 +1316,15 @@ SafeHtml searchPreFilterLongRangeFilterParameterGreaterThan(String searchPreFilt
13121316

13131317
String representationInformationIntellectualEntities(@PluralCount int size, String link);
13141318

1319+
String representationInformationIntellectualEntitiesAssociations();
1320+
13151321
String representationInformationRepresentations(@PluralCount int size, String link);
13161322

1323+
String representationInformationRepresentationsAssociations();
1324+
13171325
String representationInformationFiles(@PluralCount int size, String link);
13181326

1327+
String representationInformationFilesAssociations();
13191328
/****** Descriptive Metadata ****/
13201329

13211330
String metadataType();
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
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+
String msg = IndexedAIP.class.equals(clazz) ? messages.representationInformationIntellectualEntities(0, "")
80+
: IndexedRepresentation.class.equals(clazz) ? messages.representationInformationRepresentations(0, "")
81+
: messages.representationInformationFiles(0, "");
82+
return buildEmptyAssociationsCardLikeTab(msg);
83+
}
84+
Filter filter = new Filter(new OrFiltersParameters(params));
85+
86+
ListBuilder<T> listBuilder = new ListBuilder<>(() -> new ConfigurableAsyncTableCell<>(),
87+
new AsyncTableCellOptions<>(clazz, listId).withFilter(filter).withJustActive(true).bindOpener());
88+
89+
return new SearchWrapper(false).createListAndSearchPanel(listBuilder);
90+
}
91+
92+
private Widget buildEmptyAssociationsCardLikeTab(String messageHtml) {
93+
FlowPanel card = new FlowPanel();
94+
card.addStyleName("roda6CardWithHeader");
95+
card.addStyleName("wrapper");
96+
card.addStyleName("skip_padding");
97+
98+
FlowPanel body = new FlowPanel();
99+
body.addStyleName("cardBody");
100+
101+
SimplePanel info = new SimplePanel();
102+
info.addStyleName("table-empty-inner");
103+
HTML label = new HTML(messageHtml);
104+
label.addStyleName("table-empty-inner-label");
105+
info.setWidget(label);
106+
107+
body.add(info);
108+
card.add(body);
109+
return card;
110+
}
111+
}

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,8 +11,10 @@
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.wui.client.common.model.BrowseAIPResponse;
1516
import org.roda.wui.client.common.model.BrowseRepresentationResponse;
17+
import org.roda.wui.client.planning.DetailsPanelRepresentationInformation;
1618
import org.roda.wui.client.ingest.transfer.DetailsPanelTransferredResource;
1719
import org.roda.wui.client.planning.DetailsPanelAIP;
1820
import org.roda.wui.client.planning.DetailsPanelFile;
@@ -58,6 +60,13 @@ public DetailsTab(IndexedFile file, List<String> riRules) {
5860
content.add(detailsPanel);
5961
}
6062

63+
public DetailsTab(RepresentationInformation ri){
64+
initWidget(uiBinder.createAndBindUi(this));
65+
66+
DetailsPanelRepresentationInformation detailsPanel = new DetailsPanelRepresentationInformation(ri);
67+
content.add(detailsPanel);
68+
}
69+
6170
public DetailsTab(TransferredResource resource) {
6271
initWidget(uiBinder.createAndBindUi(this));
6372

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
@@ -2556,6 +2556,7 @@ td.datePickerMonth, td.datePickerYear {
25562556
.main .wui-breadcrumbPanel .breadcrumb-root {
25572557
color: COLOR_PRIMARY;
25582558
font-weight: bold;
2559+
max-width: none !important;
25592560
}
25602561

25612562
.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
@@ -19,11 +19,14 @@
1919
import org.roda.core.data.v2.ip.IndexedFile;
2020
import org.roda.core.data.v2.ip.IndexedRepresentation;
2121
import org.roda.core.data.v2.ip.TransferredResource;
22+
import org.roda.core.data.v2.ri.RepresentationInformation;
2223
import org.roda.wui.client.browse.BrowseTop;
2324
import org.roda.wui.client.browse.PreservationEvents;
2425
import org.roda.wui.client.disposal.DisposalDestroyedRecords;
2526
import org.roda.wui.client.ingest.appraisal.IngestAppraisal;
2627
import org.roda.wui.client.ingest.transfer.IngestTransfer;
28+
import org.roda.wui.client.planning.RepresentationInformationNetwork;
29+
import org.roda.wui.client.planning.ShowRepresentationInformation;
2730
import org.roda.wui.common.client.tools.DescriptionLevelUtils;
2831
import org.roda.wui.common.client.tools.HistoryUtils;
2932
import org.roda.wui.common.client.tools.ListUtils;
@@ -352,6 +355,23 @@ public static List<BreadcrumbItem> getTransferredResourceBreadcrumbs(Transferred
352355
return ret;
353356
}
354357

358+
public static List<BreadcrumbItem> getRepresentationInformationBreadCrumbs(RepresentationInformation ri){
359+
List<BreadcrumbItem> ret = new ArrayList<>();
360+
ret.add(new BreadcrumbItem(
361+
SafeHtmlUtils.fromSafeConstant(messages.representationInformationTitle()),
362+
messages.representationInformationTitle(),
363+
RepresentationInformationNetwork.RESOLVER.getHistoryPath()));
364+
365+
if (ri != null) {
366+
List<String> path = new ArrayList<>(ShowRepresentationInformation.RESOLVER.getHistoryPath());
367+
path.add(ri.getUUID());
368+
String label = ri.getName() != null ? ri.getName() : ri.getId();
369+
ret.add(new BreadcrumbItem(SafeHtmlUtils.fromString(label), label, path));
370+
}
371+
372+
return ret;
373+
}
374+
355375
public static List<BreadcrumbItem> getDipBreadcrumbs(IndexedDIP dip, DIPFile dipFile,
356376
List<DIPFile> dipFileAncestors) {
357377
List<BreadcrumbItem> ret = new ArrayList<>();

0 commit comments

Comments
 (0)