almost finished. Minor issues left
git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/widgets/grsf-manage-widget@162879 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
55a97c4802
commit
97806357e6
6
pom.xml
6
pom.xml
|
@ -121,18 +121,18 @@
|
|||
<dependency>
|
||||
<groupId>org.gcube.core</groupId>
|
||||
<artifactId>common-scope-maps</artifactId>
|
||||
<scope>compile</scope>
|
||||
<scope>provided</scope>
|
||||
<!-- put at provided for deploying -->
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.gcube.core</groupId>
|
||||
<artifactId>common-encryption</artifactId>
|
||||
<scope>compile</scope>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.gcube.common</groupId>
|
||||
<artifactId>authorization-client</artifactId>
|
||||
<scope>compile</scope>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
|
|
|
@ -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 <code>onModuleLoad()</code>.
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<SimilarGRSFRecord>(0));
|
||||
|
||||
// add the suggested ones, if any
|
||||
bean.getSimilarGrsfRecords().addAll(suggestedMergesPanel.getSimilarRecords());
|
||||
|
||||
// set new values
|
||||
|
|
|
@ -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<Tuple> connectList = new ArrayList<Tuple>(0);
|
||||
private List<Tuple> connectList = new ArrayList<Tuple>(0); // for the suggested ones
|
||||
private List<ConnectedBean> currentlyConnected; // they can be "unconnected" or "removed"
|
||||
private List<ConnectedBean> suggestedByKnowledgeBase; // they can be "connected"
|
||||
private List<ConnectedBean> suggestedByUser = new ArrayList<ConnectedBean>(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<ConnectedBean> getConnectList() {
|
||||
|
||||
//TODO
|
||||
// List<ConnectedBean> toReturn = new ArrayList<>();
|
||||
//
|
||||
// if(currentlyConnected != null)
|
||||
// currentlyConnected = new ArrayList<ConnectedBean>(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<ConnectedBean> 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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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<String>() {
|
||||
service.checkIdentifierExistsInDomain(currentText, s.getDomain(), new AsyncCallback<String>() {
|
||||
|
||||
@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());
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue