diff --git a/pom.xml b/pom.xml
index 59b8415..a2b7261 100644
--- a/pom.xml
+++ b/pom.xml
@@ -121,18 +121,18 @@
org.gcube.core
common-scope-maps
- compile
+ provided
org.gcube.core
common-encryption
- compile
+ provided
org.gcube.common
authorization-client
- compile
+ provided
junit
diff --git a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/GRSFManageWidget.java b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/GRSFManageWidget.java
index 2d1728f..c9c6d1d 100644
--- a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/GRSFManageWidget.java
+++ b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/GRSFManageWidget.java
@@ -1,10 +1,6 @@
package org.gcube.datacatalogue.grsf_manage_widget.client;
-import org.gcube.datacatalogue.grsf_manage_widget.client.view.ManageProductWidget;
-
import com.google.gwt.core.client.EntryPoint;
-import com.google.gwt.event.shared.HandlerManager;
-import com.google.gwt.user.client.ui.RootPanel;
/**
* Entry point classes define onModuleLoad()
.
@@ -15,7 +11,7 @@ public class GRSFManageWidget implements EntryPoint {
* This is the entry point method.
*/
public void onModuleLoad(){
- HandlerManager eventBus = new HandlerManager(null);
- RootPanel.get("manageDiv").add(new ManageProductWidget("fffb6167-b570-42a8-92b9-5be28549c3b8", eventBus));
+ // HandlerManager eventBus = new HandlerManager(null);
+ // RootPanel.get("manageDiv").add(new ManageProductWidget("fffb6167-b570-42a8-92b9-5be28549c3b8", eventBus));
}
}
diff --git a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/view/ManageProductWidget.java b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/view/ManageProductWidget.java
index 5bab448..c0c0e8c 100644
--- a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/view/ManageProductWidget.java
+++ b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/view/ManageProductWidget.java
@@ -174,7 +174,7 @@ public class ManageProductWidget extends Composite{
// show modal
manageProductModal.addStyleName("management-metadata-modal-style");
- manageProductModal.getElement().getStyle().setWidth(60, Unit.PCT);
+ // manageProductModal.getElement().getStyle().setWidth(60, Unit.PCT);
manageProductModal.show();
// async request to fetch the product
@@ -315,7 +315,7 @@ public class ManageProductWidget extends Composite{
bean.setNewStatus(bean.getCurrentStatus());
else
bean.setNewStatus(Status.fromString(listBoxStatus.getSelectedItemText()));
-
+
manageProductModal.setCloseVisible(false);
cancelButton.setEnabled(false);
confirmButton.setEnabled(false);
@@ -330,7 +330,10 @@ public class ManageProductWidget extends Composite{
// update similar records and to connect
if(similarRecordPanel != null)
bean.setSimilarGrsfRecords(similarRecordPanel.getSimilarRecords());
+ else
+ bean.setSimilarGrsfRecords(new ArrayList(0));
+ // add the suggested ones, if any
bean.getSimilarGrsfRecords().addAll(suggestedMergesPanel.getSimilarRecords());
// set new values
diff --git a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/view/subwidgets/ConnectToWidget.java b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/view/subwidgets/ConnectToWidget.java
index a61526d..bf12942 100644
--- a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/view/subwidgets/ConnectToWidget.java
+++ b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/view/subwidgets/ConnectToWidget.java
@@ -17,6 +17,8 @@ import com.github.gwtbootstrap.client.ui.TextBox;
import com.github.gwtbootstrap.client.ui.constants.ButtonType;
import com.github.gwtbootstrap.client.ui.constants.IconType;
import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.dom.client.Style.Float;
import com.google.gwt.dom.client.Style.FontWeight;
import com.google.gwt.dom.client.Style.Unit;
@@ -24,7 +26,6 @@ import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.uibinder.client.UiBinder;
@@ -57,10 +58,9 @@ public class ConnectToWidget extends Composite{
@UiField
Button suggestRecord;
- private List connectList = new ArrayList(0);
+ private List connectList = new ArrayList(0); // for the suggested ones
private List currentlyConnected; // they can be "unconnected" or "removed"
private List suggestedByKnowledgeBase; // they can be "connected"
- private List suggestedByUser = new ArrayList(0); // they are "connected" if valid
private GRSFManageWidgetServiceAsync service;
public ConnectToWidget(final ManageProductBean bean, GRSFManageWidgetServiceAsync service) {
@@ -170,7 +170,7 @@ public class ConnectToWidget extends Composite{
@Override
public void onClick(ClickEvent arg0) {
- connected.setRemove(connect.getValue());
+ connected.setConnect(connect.getValue());
}
});
rightPanel.add(connect);
@@ -200,20 +200,29 @@ public class ConnectToWidget extends Composite{
Paragraph semanticIdentifier = new Paragraph("UUID:");
final TextBox box = new TextBox();
final Icon icon = new Icon(IconType.OK_SIGN);
+ icon.setVisible(false);
+ icon.getElement().getStyle().setMarginLeft(10, Unit.PX);
+ icon.getElement().getStyle().setMarginTop(5, Unit.PX);
final Anchor view = new Anchor();
view.setText("View");
view.setTitle("Click to inspect the record");
view.setTarget("_blank");
view.getElement().getStyle().setFontWeight(FontWeight.BOLD);
view.setVisible(false);
- icon.setVisible(false);
+
+ // add a couple of handlers
box.addKeyPressHandler(new KeyPressHandler() {
@Override
public void onKeyPress(KeyPressEvent event) {
GWT.log("onKeyPress " + event.getNativeEvent().getKeyCode());
- if(!(event.getNativeEvent().getKeyCode() == KeyCodes.KEY_BACKSPACE || event.getNativeEvent().getKeyCode() == KeyCodes.KEY_DELETE))
- validateUUID(box, cb, icon, view, acceptedDomain);
+ Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+
+ @Override
+ public void execute() {
+ box.setFocus(false);
+ }
+ });
}
});
box.addChangeHandler(new ChangeHandler() {
@@ -268,12 +277,14 @@ public class ConnectToWidget extends Composite{
protected void validateUUID(final TextBox box, final ConnectedBean c, final Icon icon, final Anchor view, final String acceptedDomain) {
final String currentText = box.getText().trim();
+ c.setKnowledgeBaseId(null);
+ c.setConnect(false);
+ icon.setVisible(false);
+ view.setVisible(false);
+ icon.setSpin(false);
- if(currentText == null || currentText.isEmpty()){
- icon.setVisible(false);
- view.setVisible(false);
+ if(currentText == null || currentText.isEmpty())
return;
- }
if(!currentText.matches(REGEX_UUID)){
icon.setType(IconType.BAN_CIRCLE);
@@ -294,23 +305,23 @@ public class ConnectToWidget extends Composite{
@Override
public void onSuccess(String result) {
+ icon.setSpin(false);
+
if(result != null){
c.setKnowledgeBaseId(currentText);
+ c.setConnect(true);
icon.setType(IconType.OK_CIRCLE);
- icon.setSpin(false);
- icon.setTitle("");
- icon.setVisible(true);
+ icon.setTitle("Accepted");
view.setHref(result);
view.setVisible(true);
}
else{
icon.setType(IconType.BAN_CIRCLE);
icon.setTitle("Not a valid UUID");
- icon.setSpin(false);
- icon.setVisible(true);
view.setVisible(false);
}
+ icon.setVisible(true);
box.setEnabled(true);
}
@@ -319,6 +330,8 @@ public class ConnectToWidget extends Composite{
box.setEnabled(true);
icon.setSpin(false);
view.setVisible(false);
+ icon.setType(IconType.BAN_CIRCLE);
+ icon.setTitle(caught.getMessage());
}
});
@@ -330,25 +343,25 @@ public class ConnectToWidget extends Composite{
*/
public List getConnectList() {
- //TODO
- // List toReturn = new ArrayList<>();
- //
- // if(currentlyConnected != null)
- // currentlyConnected = new ArrayList(0);
- //
- // for (Tuple p : connectList) {
- // String suggestedIdentifier = ((ConnectedBean)p.getO()).getDestKnowledgeBaseId();
- // if(suggestedIdentifier == null || suggestedIdentifier.isEmpty())
- // continue;
- // else{
- // ConnectedBean connectedRecord = (ConnectedBean) p.getO();
- // connectedRecord.setToBeKept(true);
- // currentlyConnected.add((ConnectedBean) p.getO());
- // }
- // }
- //
- // return currentlyConnected;
- return null;
+ List toReturn = new ArrayList<>();
+
+ if(currentlyConnected != null)
+ toReturn.addAll(currentlyConnected);
+
+ if(suggestedByKnowledgeBase != null)
+ toReturn.addAll(suggestedByKnowledgeBase);
+
+ for (Tuple p : connectList) {
+ ConnectedBean potentialConnection = (ConnectedBean) p.getO();
+ String suggestedIdentifier = potentialConnection.getKnowledgeBaseId();
+ if(suggestedIdentifier == null || suggestedIdentifier.isEmpty())
+ continue;
+ else
+ toReturn.add(potentialConnection);
+ }
+
+ return toReturn;
+
}
}
diff --git a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/view/subwidgets/SimilarGRSFRecordWidget.java b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/view/subwidgets/SimilarGRSFRecordWidget.java
index 25487c7..764da26 100644
--- a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/view/subwidgets/SimilarGRSFRecordWidget.java
+++ b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/view/subwidgets/SimilarGRSFRecordWidget.java
@@ -91,7 +91,6 @@ public class SimilarGRSFRecordWidget extends Composite {
});
}
- // add the existing ones, if any
int index = 0;
for (final SimilarGRSFRecord similarGRSFRecord : availableGRSFSimilarRecords) {
Widget widget = buildWidgetForSimilarRecord(similarGRSFRecord);
diff --git a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/view/subwidgets/SuggestMerges.java b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/view/subwidgets/SuggestMerges.java
index 4c64674..fa8696f 100644
--- a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/view/subwidgets/SuggestMerges.java
+++ b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/client/view/subwidgets/SuggestMerges.java
@@ -14,6 +14,8 @@ import com.github.gwtbootstrap.client.ui.TextBox;
import com.github.gwtbootstrap.client.ui.constants.ButtonType;
import com.github.gwtbootstrap.client.ui.constants.IconType;
import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.dom.client.Style.Float;
import com.google.gwt.dom.client.Style.FontWeight;
import com.google.gwt.dom.client.Style.Unit;
@@ -21,7 +23,6 @@ import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.uibinder.client.UiBinder;
@@ -57,7 +58,7 @@ public class SuggestMerges extends Composite {
public SuggestMerges(GRSFManageWidgetServiceAsync service) {
initWidget(uiBinder.createAndBindUi(this));
this.service = service;
-
+
// manage the "suggest button"
addSimilarRecord.setText("Add Merge");
addSimilarRecord.getElement().getStyle().setFontWeight(FontWeight.BOLD);
@@ -99,20 +100,29 @@ public class SuggestMerges extends Composite {
Paragraph identifier = new Paragraph("UUID:");
final TextBox box = new TextBox();
final Icon icon = new Icon(IconType.OK_SIGN);
+ icon.setVisible(false);
+ icon.getElement().getStyle().setMarginLeft(10, Unit.PX);
+ icon.getElement().getStyle().setMarginTop(5, Unit.PX);
final Anchor view = new Anchor();
view.setText("View");
view.setTitle("Click to inspect the record");
view.setTarget("_blank");
view.getElement().getStyle().setFontWeight(FontWeight.BOLD);
view.setVisible(false);
- icon.setVisible(false);
+
+ // add a couple of handlers
box.addKeyPressHandler(new KeyPressHandler() {
@Override
public void onKeyPress(KeyPressEvent event) {
GWT.log("onKeyPress " + event.getNativeEvent().getKeyCode());
- if(!(event.getNativeEvent().getKeyCode() == KeyCodes.KEY_BACKSPACE || event.getNativeEvent().getKeyCode() == KeyCodes.KEY_DELETE))
- validateUUID(box, s, icon, view, s.getDomain());
+ Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+
+ @Override
+ public void execute() {
+ box.setFocus(false);
+ }
+ });
}
});
box.addChangeHandler(new ChangeHandler() {
@@ -120,7 +130,7 @@ public class SuggestMerges extends Composite {
@Override
public void onChange(ChangeEvent event) {
GWT.log("onChange");
- validateUUID(box, s, icon, view, s.getDomain());
+ validateUUID(box, s, icon, view);
}
});
box.setWidth("511px");
@@ -154,6 +164,7 @@ public class SuggestMerges extends Composite {
if(pair.getO().equals(s)){
pair.getW().removeFromParent();
iterator.remove();
+ break;
}
}
}
@@ -177,64 +188,64 @@ public class SuggestMerges extends Composite {
* @param icon
* @param view
*/
- protected void validateUUID(final TextBox box, final SimilarGRSFRecord s, final Icon icon, final Anchor view, String domain) {
+ protected void validateUUID(final TextBox box, final SimilarGRSFRecord s, final Icon icon, final Anchor view) {
final String currentText = box.getText().trim();
+ s.setKnowledgeBaseId(null);
+ s.setSuggestedMerge(false);
+ icon.setVisible(false);
+ view.setVisible(false);
+ icon.setSpin(false);
- if(currentText == null || currentText.isEmpty()){
- s.setKnowledgeBaseId(null);
- icon.setVisible(false);
- view.setVisible(false);
+ if(currentText == null || currentText.isEmpty())
return;
- }
-
+
if(!currentText.matches(REGEX_UUID)){
- s.setKnowledgeBaseId(null);
icon.setType(IconType.BAN_CIRCLE);
icon.setTitle("Not a valid UUID");
icon.setVisible(true);
- view.setVisible(false);
return;
}
// else check at server side if it exists
GWT.log("Text changed to " + currentText);
box.setEnabled(false);
+ icon.setVisible(true);
icon.setIcon(IconType.ROTATE_RIGHT);
+ icon.setTitle("Checking...");
icon.setSpin(true);
- service.checkIdentifierExistsInDomain(currentText, domain, new AsyncCallback() {
+ service.checkIdentifierExistsInDomain(currentText, s.getDomain(), new AsyncCallback() {
@Override
public void onSuccess(String result) {
-
+ icon.setSpin(false);
+
if(result != null){
s.setKnowledgeBaseId(currentText);
+ s.setSuggestedMerge(true);
icon.setType(IconType.OK_CIRCLE);
- icon.setSpin(false);
- icon.setTitle("");
- icon.setVisible(true);
+ icon.setTitle("Accepted");
view.setHref(result);
view.setVisible(true);
}
else{
- s.setKnowledgeBaseId(null);
icon.setType(IconType.BAN_CIRCLE);
icon.setTitle("Not a valid UUID");
- icon.setSpin(false);
- icon.setVisible(true);
view.setVisible(false);
}
-
+ icon.setVisible(true);
box.setEnabled(true);
}
@Override
public void onFailure(Throwable caught) {
- s.setKnowledgeBaseId(null);
box.setEnabled(true);
icon.setSpin(false);
+ icon.setType(IconType.BAN_CIRCLE);
+ icon.setVisible(true);
view.setVisible(false);
+ icon.setTitle(caught.getMessage());
}
});
diff --git a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/server/manage/GRSFNotificationService.java b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/server/manage/GRSFNotificationService.java
index e1d9dd5..795f4a1 100644
--- a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/server/manage/GRSFNotificationService.java
+++ b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/server/manage/GRSFNotificationService.java
@@ -484,6 +484,21 @@ public class GRSFNotificationService extends RemoteServiceServlet implements GRS
@Override
public String checkIdentifierExistsInDomain(String id,
String domain) throws Exception {
+
+ if(!Utils.isIntoPortal()){
+
+ boolean throwException = Math.random() > 0.5;
+
+ // simulate some delay...
+ Thread.sleep(2500);
+
+ if(throwException)
+ throw new Exception("The suggested record is not a GRSF record");
+
+ return "http://data.d4science.org/catalogue/grsf_admin/" + id;
+
+ }
+
String scopePerCurrentUrl = Utils.getScopeFromClientUrl(getThreadLocalRequest());
DataCatalogue catalogue = getCatalogue(scopePerCurrentUrl);
String username = Utils.getCurrentUser(getThreadLocalRequest()).getUsername();