2017-11-09 22:11:10 +01:00
|
|
|
package org.gcube.datacatalogue.grsf_manage_widget.client.view.subwidgets;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import org.gcube.datacatalogue.grsf_manage_widget.shared.SimilarGRSFRecord;
|
|
|
|
|
|
|
|
import com.github.gwtbootstrap.client.ui.Button;
|
|
|
|
import com.github.gwtbootstrap.client.ui.CheckBox;
|
|
|
|
import com.github.gwtbootstrap.client.ui.Paragraph;
|
2018-01-23 18:25:16 +01:00
|
|
|
import com.github.gwtbootstrap.client.ui.constants.ButtonType;
|
2017-11-09 22:11:10 +01:00
|
|
|
import com.google.gwt.core.client.GWT;
|
|
|
|
import com.google.gwt.dom.client.Style.Float;
|
2017-11-15 19:22:20 +01:00
|
|
|
import com.google.gwt.dom.client.Style.FontWeight;
|
|
|
|
import com.google.gwt.dom.client.Style.Unit;
|
2017-11-09 22:11:10 +01:00
|
|
|
import com.google.gwt.event.dom.client.ClickEvent;
|
|
|
|
import com.google.gwt.event.dom.client.ClickHandler;
|
|
|
|
import com.google.gwt.uibinder.client.UiBinder;
|
|
|
|
import com.google.gwt.uibinder.client.UiField;
|
|
|
|
import com.google.gwt.user.client.ui.Anchor;
|
|
|
|
import com.google.gwt.user.client.ui.Composite;
|
2017-11-15 19:22:20 +01:00
|
|
|
import com.google.gwt.user.client.ui.HTML;
|
2017-11-09 22:11:10 +01:00
|
|
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
|
|
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
|
|
|
import com.google.gwt.user.client.ui.Widget;
|
|
|
|
|
|
|
|
public class SimilarGRSFRecordWidget extends Composite {
|
2018-02-03 19:17:37 +01:00
|
|
|
|
2017-11-09 22:11:10 +01:00
|
|
|
private static SimilarGRSFRecordWidgetUiBinder uiBinder = GWT
|
|
|
|
.create(SimilarGRSFRecordWidgetUiBinder.class);
|
|
|
|
|
|
|
|
interface SimilarGRSFRecordWidgetUiBinder extends
|
|
|
|
UiBinder<Widget, SimilarGRSFRecordWidget> {
|
|
|
|
}
|
|
|
|
|
|
|
|
@UiField
|
|
|
|
VerticalPanel similarGrsfRecordsPanel;
|
|
|
|
|
|
|
|
@UiField
|
2018-01-23 18:25:16 +01:00
|
|
|
Button viewMore;
|
2017-11-09 22:11:10 +01:00
|
|
|
|
|
|
|
private List<SimilarGRSFRecord> availableGRSFSimilarRecords;
|
2018-01-23 18:25:16 +01:00
|
|
|
private List<Widget> toHide = new ArrayList<Widget>();
|
2018-02-03 19:17:37 +01:00
|
|
|
private static final int THRESHOLD_SET_HIDDEN = 5;
|
|
|
|
private static final String SEE_MORE = "See More";
|
|
|
|
private static final String SEE_LESS = "See Less";
|
2017-11-23 20:04:47 +01:00
|
|
|
|
2017-11-09 22:11:10 +01:00
|
|
|
/**
|
|
|
|
* Get widget for available similar grsf records
|
|
|
|
* @param availableGRSFSimilarRecords
|
2017-11-23 20:04:47 +01:00
|
|
|
* @param service
|
2017-11-09 22:11:10 +01:00
|
|
|
*/
|
2018-02-03 19:17:37 +01:00
|
|
|
public SimilarGRSFRecordWidget(List<SimilarGRSFRecord> availableGRSFSimilarRecords) {
|
2017-11-09 22:11:10 +01:00
|
|
|
initWidget(uiBinder.createAndBindUi(this));
|
2017-12-13 18:34:45 +01:00
|
|
|
|
2017-12-07 12:37:21 +01:00
|
|
|
//this.service = service;
|
2017-11-09 22:11:10 +01:00
|
|
|
this.availableGRSFSimilarRecords = availableGRSFSimilarRecords;
|
|
|
|
|
2017-12-13 18:34:45 +01:00
|
|
|
if(availableGRSFSimilarRecords != null){
|
2017-11-09 22:11:10 +01:00
|
|
|
|
2017-12-13 18:34:45 +01:00
|
|
|
similarGrsfRecordsPanel.add(new HTML("<hr style=\"width:100%;\"/>"));
|
2018-01-23 18:25:16 +01:00
|
|
|
|
|
|
|
boolean visibleMore = true;
|
|
|
|
viewMore.setText(SEE_MORE);
|
|
|
|
if(availableGRSFSimilarRecords.size() > THRESHOLD_SET_HIDDEN){
|
|
|
|
visibleMore = false;
|
|
|
|
viewMore.getElement().getStyle().setFloat(Float.RIGHT);
|
|
|
|
viewMore.setType(ButtonType.LINK);
|
|
|
|
viewMore.setVisible(true);
|
|
|
|
viewMore.getElement().getStyle().setFontWeight(FontWeight.BOLD);
|
|
|
|
viewMore.addClickHandler(new ClickHandler() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onClick(ClickEvent event) {
|
|
|
|
event.preventDefault();
|
|
|
|
|
|
|
|
boolean toShow = false;
|
|
|
|
if(viewMore.getText().trim().equals(SEE_MORE)){
|
|
|
|
viewMore.setText(SEE_LESS);
|
|
|
|
toShow = true;
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
viewMore.setText(SEE_MORE);
|
|
|
|
toShow = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
for(Widget w: toHide)
|
|
|
|
w.setVisible(toShow);
|
|
|
|
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
int index = 0;
|
2017-12-13 18:34:45 +01:00
|
|
|
for (final SimilarGRSFRecord similarGRSFRecord : availableGRSFSimilarRecords) {
|
|
|
|
Widget widget = buildWidgetForSimilarRecord(similarGRSFRecord);
|
|
|
|
similarGrsfRecordsPanel.add(widget);
|
2018-01-23 18:25:16 +01:00
|
|
|
HTML separator = new HTML("<hr style=\"width:100%;\"/>");
|
|
|
|
similarGrsfRecordsPanel.add(separator);
|
|
|
|
if(index >= THRESHOLD_SET_HIDDEN){
|
|
|
|
widget.setVisible(visibleMore);
|
|
|
|
separator.setVisible(visibleMore);
|
|
|
|
toHide.add(widget);
|
|
|
|
toHide.add(separator);
|
|
|
|
}
|
|
|
|
index++;
|
2017-12-13 18:34:45 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2017-11-09 22:11:10 +01:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Builds widget for already present similar GRSF records
|
|
|
|
* @param similarGRSFRecord
|
2018-01-23 18:25:16 +01:00
|
|
|
* @param hideMore
|
|
|
|
* @param index
|
2017-11-09 22:11:10 +01:00
|
|
|
* @return a Widget (actually a VerticalPanel)
|
|
|
|
*/
|
|
|
|
public static Widget buildWidgetForSimilarRecord(final SimilarGRSFRecord similarGRSFRecord){
|
|
|
|
|
2017-11-15 19:22:20 +01:00
|
|
|
HorizontalPanel hp = new HorizontalPanel();
|
2017-12-13 18:34:45 +01:00
|
|
|
hp.setWidth("95%");
|
2017-11-15 19:22:20 +01:00
|
|
|
VerticalPanel leftPanel = new VerticalPanel();
|
|
|
|
leftPanel.setWidth("80%");
|
2017-12-13 18:34:45 +01:00
|
|
|
leftPanel.getElement().getStyle().setMarginLeft(20, Unit.PX);
|
2018-02-03 19:17:37 +01:00
|
|
|
Paragraph name = new Paragraph("Record Name: " + (similarGRSFRecord.getTitle() != null? similarGRSFRecord.getTitle() : "Unavailable"));
|
2017-11-15 19:22:20 +01:00
|
|
|
leftPanel.add(name);
|
2017-11-09 22:11:10 +01:00
|
|
|
if(similarGRSFRecord.getDescription() != null){
|
2017-11-15 19:22:20 +01:00
|
|
|
String shortDescrption = similarGRSFRecord.getDescription().length() > 45 ?
|
|
|
|
similarGRSFRecord.getDescription().substring(0, 45) + " ... " :
|
2017-11-09 22:11:10 +01:00
|
|
|
similarGRSFRecord.getDescription();
|
|
|
|
Paragraph description = new Paragraph(
|
|
|
|
"Description: " + shortDescrption);
|
|
|
|
description.setTitle("Description: " + similarGRSFRecord.getDescription());
|
2017-11-15 19:22:20 +01:00
|
|
|
leftPanel.add(description);
|
2017-11-09 22:11:10 +01:00
|
|
|
}
|
2018-02-03 19:17:37 +01:00
|
|
|
Paragraph identifier = new Paragraph("UUID: " +
|
2017-12-13 18:34:45 +01:00
|
|
|
similarGRSFRecord.getKnowledgeBaseId());
|
2017-12-07 12:37:21 +01:00
|
|
|
leftPanel.add(identifier);
|
2017-11-09 22:11:10 +01:00
|
|
|
|
|
|
|
Anchor view = new Anchor();
|
|
|
|
view.setHref(similarGRSFRecord.getUrl());
|
|
|
|
view.setText("View");
|
2018-01-23 18:25:16 +01:00
|
|
|
view.setTitle("Click to inspect the similar record");
|
2017-11-09 22:11:10 +01:00
|
|
|
view.setTarget("_blank");
|
2017-11-15 19:22:20 +01:00
|
|
|
view.getElement().getStyle().setFontWeight(FontWeight.BOLD);
|
2017-12-13 18:34:45 +01:00
|
|
|
leftPanel.add(view);
|
|
|
|
|
|
|
|
VerticalPanel rightPanel = new VerticalPanel();
|
|
|
|
rightPanel.setWidth("20%");
|
2017-11-09 22:11:10 +01:00
|
|
|
|
|
|
|
// add merge checkbox
|
|
|
|
final CheckBox mergeSuggested = new CheckBox("Merge");
|
2017-11-15 19:22:20 +01:00
|
|
|
mergeSuggested.setTitle("Suggest to merge the current record with this similar record");
|
2017-11-09 22:11:10 +01:00
|
|
|
mergeSuggested.setValue(false);
|
|
|
|
|
|
|
|
mergeSuggested.addClickHandler(new ClickHandler() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onClick(ClickEvent arg0) {
|
|
|
|
similarGRSFRecord.setSuggestedMerge(mergeSuggested.getValue());
|
|
|
|
}
|
|
|
|
});
|
2017-12-12 18:54:45 +01:00
|
|
|
|
2017-11-15 19:22:20 +01:00
|
|
|
rightPanel.getElement().getStyle().setFloat(Float.RIGHT);
|
|
|
|
rightPanel.add(mergeSuggested);
|
|
|
|
hp.add(leftPanel);
|
|
|
|
hp.add(rightPanel);
|
|
|
|
hp.getElement().getStyle().setPadding(10, Unit.PX);
|
|
|
|
hp.getElement().getStyle().setMarginBottom(10, Unit.PX);
|
|
|
|
return hp;
|
2017-11-09 22:11:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the whole of similar records
|
|
|
|
* @return
|
|
|
|
*/
|
2017-11-23 20:04:47 +01:00
|
|
|
public List<SimilarGRSFRecord> getSimilarRecords(){
|
2017-11-09 22:11:10 +01:00
|
|
|
|
|
|
|
return availableGRSFSimilarRecords;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|