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; import com.github.gwtbootstrap.client.ui.constants.ButtonType; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Float; import com.google.gwt.dom.client.Style.FontWeight; import com.google.gwt.dom.client.Style.Unit; 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; import com.google.gwt.user.client.ui.HTML; 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 { private static final int THRESHOLD_SET_HIDDEN = 5; private static final String SEE_MORE = "See More"; private static final String SEE_LESS = "See Less"; private static SimilarGRSFRecordWidgetUiBinder uiBinder = GWT .create(SimilarGRSFRecordWidgetUiBinder.class); interface SimilarGRSFRecordWidgetUiBinder extends UiBinder { } @UiField VerticalPanel similarGrsfRecordsPanel; // @UiField // VerticalPanel similarGrsfRecordsSuggestedPanel; // // @UiField // Button addSimilarRecord; @UiField Button viewMore; // private List extraSimilarRecordsList = new ArrayList(0); private List availableGRSFSimilarRecords; private List toHide = new ArrayList(); //private GRSFManageWidgetServiceAsync service; /** * Get widget for available similar grsf records * @param availableGRSFSimilarRecords * @param service */ public SimilarGRSFRecordWidget(List availableGRSFSimilarRecords/*, GRSFManageWidgetServiceAsync service*/) { initWidget(uiBinder.createAndBindUi(this)); //this.service = service; this.availableGRSFSimilarRecords = availableGRSFSimilarRecords; if(availableGRSFSimilarRecords != null){ similarGrsfRecordsPanel.add(new HTML("
")); 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); } }); } // add the existing ones, if any int index = 0; for (final SimilarGRSFRecord similarGRSFRecord : availableGRSFSimilarRecords) { Widget widget = buildWidgetForSimilarRecord(similarGRSFRecord); similarGrsfRecordsPanel.add(widget); HTML separator = new HTML("
"); similarGrsfRecordsPanel.add(separator); if(index >= THRESHOLD_SET_HIDDEN){ widget.setVisible(visibleMore); separator.setVisible(visibleMore); toHide.add(widget); toHide.add(separator); } index++; } } } /** * Builds widget for already present similar GRSF records * @param similarGRSFRecord * @param hideMore * @param index * @return a Widget (actually a VerticalPanel) */ public static Widget buildWidgetForSimilarRecord(final SimilarGRSFRecord similarGRSFRecord){ HorizontalPanel hp = new HorizontalPanel(); hp.setWidth("95%"); VerticalPanel leftPanel = new VerticalPanel(); leftPanel.setWidth("80%"); leftPanel.getElement().getStyle().setMarginLeft(20, Unit.PX); Paragraph name = new Paragraph("Record name: " + (similarGRSFRecord.getShortName() != null? similarGRSFRecord.getShortName() : "Unavailable")); leftPanel.add(name); if(similarGRSFRecord.getDescription() != null){ String shortDescrption = similarGRSFRecord.getDescription().length() > 45 ? similarGRSFRecord.getDescription().substring(0, 45) + " ... " : similarGRSFRecord.getDescription(); Paragraph description = new Paragraph( "Description: " + shortDescrption); description.setTitle("Description: " + similarGRSFRecord.getDescription()); leftPanel.add(description); } Paragraph identifier = new Paragraph("Record UUID: " + similarGRSFRecord.getKnowledgeBaseId()); leftPanel.add(identifier); Anchor view = new Anchor(); view.setHref(similarGRSFRecord.getUrl()); view.setText("View"); view.setTitle("Click to inspect the similar record"); view.setTarget("_blank"); view.getElement().getStyle().setFontWeight(FontWeight.BOLD); leftPanel.add(view); VerticalPanel rightPanel = new VerticalPanel(); rightPanel.setWidth("20%"); // add merge checkbox final CheckBox mergeSuggested = new CheckBox("Merge"); mergeSuggested.setTitle("Suggest to merge the current record with this similar record"); //mergeSuggested.getElement().getStyle().setPaddingTop(3, Unit.PC); mergeSuggested.setValue(false); mergeSuggested.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent arg0) { similarGRSFRecord.setSuggestedMerge(mergeSuggested.getValue()); } }); // final CheckBox removeExtra = new CheckBox("Remove"); // removeExtra.getElement().getStyle().setPaddingTop(3, Unit.PC); // removeExtra.setTitle("Remove this record among the similar ones"); // removeExtra.addClickHandler(new ClickHandler() { // // @Override // public void onClick(ClickEvent arg0) { // similarGRSFRecord.setToBeKept(!removeExtra.getValue()); // } // }); rightPanel.getElement().getStyle().setFloat(Float.RIGHT); rightPanel.add(mergeSuggested); // rightPanel.add(removeExtra); hp.add(leftPanel); hp.add(rightPanel); hp.getElement().getStyle().setPadding(10, Unit.PX); hp.getElement().getStyle().setMarginBottom(10, Unit.PX); return hp; } /** * Get the whole of similar records * @return */ public List getSimilarRecords(){ if(availableGRSFSimilarRecords == null) availableGRSFSimilarRecords = new ArrayList(); // for (Tuple p : extraSimilarRecordsList) { // SimilarGRSFRecord similarRecord = ((SimilarGRSFRecord)p.getO()); // if(similarRecord.getKnowledgeBaseId() == null || similarRecord.getKnowledgeBaseId().isEmpty()) // continue; // availableGRSFSimilarRecords.add((SimilarGRSFRecord) p.getO()); // } return availableGRSFSimilarRecords; } }