diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java index 25c2d33..e7d6987 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java @@ -18,6 +18,7 @@ import org.gcube.portlets.user.workspace.client.model.SmartFolderModel; import org.gcube.portlets.user.workspace.client.model.SubTree; import org.gcube.portlets.user.workspace.client.workspace.GWTWorkspaceItem; import org.gcube.portlets.user.workspace.shared.ExtendedWorkspaceACL; +import org.gcube.portlets.user.workspace.shared.PublicLink; import org.gcube.portlets.user.workspace.shared.ReportAssignmentACL; import org.gcube.portlets.user.workspace.shared.SessionExpiredException; import org.gcube.portlets.user.workspace.shared.TrashContent; @@ -178,7 +179,7 @@ public interface GWTWorkspaceService extends RemoteService{ * @return * @throws Exception */ - String getPublicLinkForFolderItemId(String itemId, boolean shortenUrl) + PublicLink getPublicLinkForFolderItemId(String itemId, boolean shortenUrl) throws Exception; boolean isSessionExpired() throws Exception; diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java index 7ed2680..a68c2f0 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java @@ -18,6 +18,7 @@ import org.gcube.portlets.user.workspace.client.model.SmartFolderModel; import org.gcube.portlets.user.workspace.client.model.SubTree; import org.gcube.portlets.user.workspace.client.workspace.GWTWorkspaceItem; import org.gcube.portlets.user.workspace.shared.ExtendedWorkspaceACL; +import org.gcube.portlets.user.workspace.shared.PublicLink; import org.gcube.portlets.user.workspace.shared.ReportAssignmentACL; import org.gcube.portlets.user.workspace.shared.TrashContent; import org.gcube.portlets.user.workspace.shared.TrashOperationContent; @@ -167,7 +168,7 @@ public interface GWTWorkspaceServiceAsync { void getShortUrl(String longUrl, AsyncCallback callback); void getPublicLinkForFolderItemId(String itemId, boolean shortenUrl, - AsyncCallback callback); + AsyncCallback callback); /** * diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogPublicLink.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogPublicLink.java index f96c201..0747762 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogPublicLink.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogPublicLink.java @@ -2,14 +2,15 @@ package org.gcube.portlets.user.workspace.client.view.windows; import org.gcube.portlets.user.workspace.client.AppControllerExplorer; import org.gcube.portlets.user.workspace.client.resources.Resources; +import org.gcube.portlets.user.workspace.shared.PublicLink; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.Style.VerticalAlignment; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.widget.Dialog; +import com.extjs.gxt.ui.client.widget.Label; import com.extjs.gxt.ui.client.widget.VerticalPanel; -import com.extjs.gxt.ui.client.widget.form.TextArea; import com.extjs.gxt.ui.client.widget.form.TextField; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -20,9 +21,10 @@ import com.google.gwt.user.client.rpc.AsyncCallback; */ public class DialogPublicLink extends Dialog { - private TextField txt; + private TextField txtCompleteURL; + private TextField txtShortURL; private int widht = 450; - private int height = 150; + private int height = 170; private VerticalPanel vp = new VerticalPanel(); // private Label label = new Label(); @@ -42,38 +44,47 @@ public class DialogPublicLink extends Dialog { // label.setText(msgTitle); // label.setStyleName("myWebDavStyle"); + VerticalPanel vp1 = new VerticalPanel(); + vp1.setStyleAttribute("margin-top", "8px"); + txtCompleteURL = new TextField(); + txtCompleteURL.setStyleAttribute("margin-top", "1px"); + txtCompleteURL.setWidth(widht-20); + txtCompleteURL.setReadOnly(true); + txtCompleteURL.mask("Getting Link..."); + vp1.add(new Label("Link")); + vp1.add(txtCompleteURL); - txt = new TextArea(); -// txt.setStyleAttribute("padding-top", "3px"); - txt.setWidth(widht-20); - txt.setHeight(height-74); -// txt.setFieldLabel(msgTitle); - - txt.setReadOnly(true); - - - txt.mask("Shortening link..."); + VerticalPanel vp2 = new VerticalPanel(); + vp2.setStyleAttribute("margin-top", "8px"); + txtShortURL = new TextField(); + txtShortURL.setStyleAttribute("margin-top", "1px"); + txtShortURL.setWidth(widht-20); + txtShortURL.mask("Getting Link..."); + vp2.add(new Label("Short Link")); + vp2.add(txtShortURL); if(itemId!=null && !itemId.isEmpty()){ - AppControllerExplorer.rpcWorkspaceService.getPublicLinkForFolderItemId(itemId, true, new AsyncCallback() { + AppControllerExplorer.rpcWorkspaceService.getPublicLinkForFolderItemId(itemId, true, new AsyncCallback() { @Override - public void onSuccess(String url) { - txt.unmask(); - txt.setValue(url); + public void onSuccess(PublicLink publicLink) { + txtCompleteURL.unmask(); + txtShortURL.unmask(); + txtCompleteURL.setValue(publicLink.getCompleteURL()); + txtShortURL.setValue(publicLink.getShortURL()); selectTxt(); - } @Override public void onFailure(Throwable caught) { - txt.unmask(); + txtCompleteURL.unmask(); + txtShortURL.unmask(); new MessageBoxAlert("Error", caught.getMessage(), null); } }); }else{ - txt.unmask(); + txtCompleteURL.unmask(); new MessageBoxAlert("Error", "The item identifier is null", null); } @@ -88,20 +99,22 @@ public class DialogPublicLink extends Dialog { // vp.add(label); - vp.add(txt); + vp.add(vp1); + vp.add(vp2); + + setFocusWidget(txtCompleteURL); - setFocusWidget(txt); add(vp); } public String getTxtValue() { - return txt.getValue(); + return txtCompleteURL.getValue(); } public void selectTxt(){ - if(txt.getValue()!=null) - txt.select(0, txt.getValue().length()); + if(txtCompleteURL.getValue()!=null) + txtCompleteURL.select(0, txtCompleteURL.getValue().length()); } } \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java index 63b57aa..46708d1 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java @@ -71,6 +71,7 @@ import org.gcube.portlets.user.workspace.server.util.WsUtil; import org.gcube.portlets.user.workspace.server.util.resource.PropertySpecialFolderReader; import org.gcube.portlets.user.workspace.server.util.scope.ScopeUtilFilter; import org.gcube.portlets.user.workspace.shared.ExtendedWorkspaceACL; +import org.gcube.portlets.user.workspace.shared.PublicLink; import org.gcube.portlets.user.workspace.shared.ReportAssignmentACL; import org.gcube.portlets.user.workspace.shared.SessionExpiredException; import org.gcube.portlets.user.workspace.shared.TrashContent; @@ -2576,7 +2577,7 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT * @throws Exception the exception */ @Override - public String getPublicLinkForFolderItemId(String itemId, boolean shortenUrl) throws Exception{ + public PublicLink getPublicLinkForFolderItemId(String itemId, boolean shortenUrl) throws Exception{ workspaceLogger.trace("get Public Link For ItemId: "+ itemId); GWTWorkspaceBuilder builder = getGWTWorkspaceBuilder(); @@ -2607,10 +2608,12 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT if(!HttpRequestUtil.urlExists(uriRequest+"&validation=true")) throw new Exception("Sorry, The Public Link for selected file is unavailable"); - if(shortenUrl) - uriRequest = getShortUrl(uriRequest); + String shortURL = null; - return uriRequest; + if(shortenUrl) + shortURL = getShortUrl(uriRequest); + + return new PublicLink(uriRequest, shortURL); } else throw new Exception("Sorry, The Uri resolver service is temporarily unavailable. Please try again later"); diff --git a/src/main/java/org/gcube/portlets/user/workspace/shared/PublicLink.java b/src/main/java/org/gcube/portlets/user/workspace/shared/PublicLink.java new file mode 100644 index 0000000..7c0b20a --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/workspace/shared/PublicLink.java @@ -0,0 +1,81 @@ +/** + * + */ +package org.gcube.portlets.user.workspace.shared; + +import java.io.Serializable; + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Jul 3, 2015 + */ +public class PublicLink implements Serializable { + + /** + * + */ + private static final long serialVersionUID = -8157172818802297440L; + + private String completeURL; + private String shortURL; + + public PublicLink() { + + } + + /** + * @param completeURL + * @param shortURL + */ + public PublicLink(String completeURL, String shortURL) { + super(); + this.completeURL = completeURL; + this.shortURL = shortURL; + } + + /** + * @return the completeURL + */ + public String getCompleteURL() { + return completeURL; + } + + /** + * @return the shortURL + */ + public String getShortURL() { + return shortURL; + } + + /** + * @param completeURL + * the completeURL to set + */ + public void setCompleteURL(String completeURL) { + this.completeURL = completeURL; + } + + /** + * @param shortURL + * the shortURL to set + */ + public void setShortURL(String shortURL) { + this.shortURL = shortURL; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("PublicLink [completeURL="); + builder.append(completeURL); + builder.append(", shortURL="); + builder.append(shortURL); + builder.append("]"); + return builder.toString(); + } +}