integrating the url shortener

This commit is contained in:
Francesco Mangiacrapa 2020-11-17 17:32:13 +01:00
parent e6f232298e
commit eb8ea01bfb
13 changed files with 259 additions and 104 deletions

View File

@ -1,4 +1,4 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
lastWarOutDir=/home/francesco-mangiacrapa/git/geoportal-data-viewer-app/target/geoportal-data-viewer-app-1.0.0-SNAPSHOT lastWarOutDir=/home/francescomangiacrapa/git/geoportal-data-viewer-app/target/geoportal-data-viewer-app-1.0.0-SNAPSHOT
warSrcDir=src/main/webapp warSrcDir=src/main/webapp
warSrcDirIsOutput=false warSrcDirIsOutput=false

View File

@ -127,6 +127,12 @@
<version>[1.1.0, 2.0.0-SNAPSHOT)</version> <version>[1.1.0, 2.0.0-SNAPSHOT)</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>org.gcube.portlets.user</groupId>
<artifactId>gcube-url-shortener</artifactId>
<version>[1.0.0,2.0.0-SNAPSHOT)</version>
<scope>compile</scope>
</dependency>
<dependency> <dependency>
<groupId>org.gcube.common.portal</groupId> <groupId>org.gcube.common.portal</groupId>
<artifactId>portal-manager</artifactId> <artifactId>portal-manager</artifactId>

View File

@ -204,7 +204,7 @@ public class GeoportalDataViewer implements EntryPoint {
@Override @Override
public void onSuccess(ConcessioneDV result) { public void onSuccess(ConcessioneDV result) {
GWT.log("Showing: "+result); GWT.log("Showing: "+result);
mainPanel.renderProductIntoTab(theTab, result); mainPanel.renderProductIntoTab(theTab, result, showDetailsEvent.getGeonaItemRef());
} }
}); });

View File

@ -16,17 +16,51 @@ import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
/** /**
* The client side stub for the RPC service. * The client side stub for the RPC service.
*
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
*
* Nov 17, 2020
*/ */
@RemoteServiceRelativePath("geoportaldataviewerservice") @RemoteServiceRelativePath("geoportaldataviewerservice")
public interface GeoportalDataViewerService extends RemoteService { public interface GeoportalDataViewerService extends RemoteService {
/**
* Parses the wms request.
*
* @param wmsRequest the wms request
* @param layerName the layer name
* @return the geo information for WMS request
* @throws Exception the exception
*/
GeoInformationForWMSRequest parseWmsRequest(String wmsRequest, String layerName) throws Exception; GeoInformationForWMSRequest parseWmsRequest(String wmsRequest, String layerName) throws Exception;
/**
* Gets the data result.
*
* @param layerObjects the layer objects
* @param mapSrsName the map srs name
* @param mapBBOX the map BBOX
* @param maxWFSFeature the max WFS feature
* @param zoomLevel the zoom level
* @return the data result
*/
List<GeoNaSpatialQueryResult> getDataResult(List<LayerObject> layerObjects, String mapSrsName, BoundsMap mapBBOX, List<GeoNaSpatialQueryResult> getDataResult(List<LayerObject> layerObjects, String mapSrsName, BoundsMap mapBBOX,
int maxWFSFeature, double zoomLevel); int maxWFSFeature, double zoomLevel);
/**
* Gets the concessione for id.
*
* @param id the id
* @return the concessione for id
* @throws Exception the exception
*/
ConcessioneDV getConcessioneForId(Long id) throws Exception; ConcessioneDV getConcessioneForId(Long id) throws Exception;
/**
* Gets the my login.
*
* @return the my login
*/
String getMyLogin(); String getMyLogin();
/** /**
@ -38,17 +72,41 @@ public interface GeoportalDataViewerService extends RemoteService {
*/ */
GeoInformationForWMSRequest getLayerForType(String layerType) throws Exception; GeoInformationForWMSRequest getLayerForType(String layerType) throws Exception;
/**
* Gets the geo na data view profile.
*
* @return the geo na data view profile
* @throws Exception the exception
*/
GeoNaDataViewerProfile getGeoNaDataViewProfile() throws Exception; GeoNaDataViewerProfile getGeoNaDataViewProfile() throws Exception;
/** /**
* Gets the uploaded images for id. * Gets the uploaded images for id.
* *
* @param itemType the item type
* @param id the id * @param id the id
* @param maxImages the max images
* @return the uploaded images for id * @return the uploaded images for id
* @throws Exception the exception * @throws Exception the exception
*/ */
List<UploadedImageDV> getUploadedImagesForId(String itemType, Long id, int maxImages) throws Exception; List<UploadedImageDV> getUploadedImagesForId(String itemType, Long id, int maxImages) throws Exception;
/**
* Gets the public links for.
*
* @param item the item
* @return the public links for
* @throws Exception the exception
*/
GeoNaItemRef getPublicLinksFor(GeoNaItemRef item) throws Exception; GeoNaItemRef getPublicLinksFor(GeoNaItemRef item) throws Exception;
/**
* Gets the short url.
*
* @param longUrl the long url
* @return the short url
* @throws Exception the exception
*/
String getShortUrl(String longUrl) throws Exception;
} }

View File

@ -49,4 +49,6 @@ public interface GeoportalDataViewerServiceAsync {
void getUploadedImagesForId(String itemType, Long id, int maxImages, AsyncCallback<List<UploadedImageDV>> callback); void getUploadedImagesForId(String itemType, Long id, int maxImages, AsyncCallback<List<UploadedImageDV>> callback);
void getPublicLinksFor(GeoNaItemRef item, AsyncCallback<GeoNaItemRef> asyncCallback); void getPublicLinksFor(GeoNaItemRef item, AsyncCallback<GeoNaItemRef> asyncCallback);
void getShortUrl(String longUrl, AsyncCallback<String> callback);
} }

View File

@ -8,6 +8,7 @@ import java.util.Map;
import org.gcube.portlets.user.geoportaldataviewer.client.gis.OpenLayerOSM; import org.gcube.portlets.user.geoportaldataviewer.client.gis.OpenLayerOSM;
import org.gcube.portlets.user.geoportaldataviewer.client.ui.products.concessioni.ConcessioneView; import org.gcube.portlets.user.geoportaldataviewer.client.ui.products.concessioni.ConcessioneView;
import org.gcube.portlets.user.geoportaldataviewer.client.util.LoaderIcon; import org.gcube.portlets.user.geoportaldataviewer.client.util.LoaderIcon;
import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaItemRef;
import org.gcube.portlets.user.geoportaldataviewer.shared.products.ConcessioneDV; import org.gcube.portlets.user.geoportaldataviewer.shared.products.ConcessioneDV;
import com.github.gwtbootstrap.client.ui.Button; import com.github.gwtbootstrap.client.ui.Button;
@ -125,10 +126,10 @@ public class GeonaDataViewMainPanel extends Composite {
} }
public void renderProductIntoTab(Tab tab, ConcessioneDV cdv) { public void renderProductIntoTab(Tab tab, ConcessioneDV cdv, GeoNaItemRef geonaItemRef) {
tab.clear(); tab.clear();
tab.setHeading(cdv.getNome()); tab.setHeading(cdv.getNome());
tab.add(new ConcessioneView(cdv)); tab.add(new ConcessioneView(geonaItemRef, cdv));
mapProducts.put(cdv.getId(), tab); mapProducts.put(cdv.getId(), tab);
selectTabForProductId(cdv.getId()); selectTabForProductId(cdv.getId());
} }

View File

@ -2,7 +2,6 @@ package org.gcube.portlets.user.geoportaldataviewer.client.ui.dialogs;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerServiceAsync; import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerServiceAsync;
import org.gcube.portlets.user.geoportaldataviewer.client.util.StringUtil;
import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaItemRef; import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaItemRef;
import org.gcube.portlets.user.geoportaldataviewer.shared.PublicLink; import org.gcube.portlets.user.geoportaldataviewer.shared.PublicLink;
@ -14,7 +13,6 @@ import com.github.gwtbootstrap.client.ui.Modal;
import com.github.gwtbootstrap.client.ui.ModalFooter; import com.github.gwtbootstrap.client.ui.ModalFooter;
import com.github.gwtbootstrap.client.ui.TextBox; import com.github.gwtbootstrap.client.ui.TextBox;
import com.github.gwtbootstrap.client.ui.Tooltip; import com.github.gwtbootstrap.client.ui.Tooltip;
import com.github.gwtbootstrap.client.ui.Well;
import com.github.gwtbootstrap.client.ui.constants.VisibilityChange; import com.github.gwtbootstrap.client.ui.constants.VisibilityChange;
import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Element;
@ -72,11 +70,8 @@ public class DialogShareableLink extends Composite {
@UiField @UiField
Alert actionAlert; Alert actionAlert;
@UiField // @UiField
Well alertFilePublicLink; // Well alertFilePublicLink;
@UiField
Well alertFolderPublicLink;
@UiField @UiField
Fieldset fieldSetPrivate; Fieldset fieldSetPrivate;
@ -104,9 +99,9 @@ public class DialogShareableLink extends Composite {
@UiField @UiField
Button publicLongLinkCopyButton; Button publicLongLinkCopyButton;
//
@UiField // @UiField
Well wellPrivateLinkDescription; // Well wellPrivateLinkDescription;
@UiField @UiField
Button showPrivateLongLinkButton; Button showPrivateLongLinkButton;
@ -155,15 +150,17 @@ public class DialogShareableLink extends Composite {
this.fileVersion = version; this.fileVersion = version;
this.actionAlert.setAnimation(true); this.actionAlert.setAnimation(true);
showShareableLinkOptions(item, version); //cgRemovePublicLink.setVisible(false);
// fieldSetPrivate.setVisible(false);
// fieldPrivateSharing.setVisible(false);
cgPublicLink.setVisible(true);
fieldSetPrivate.setVisible(true);
showMessage("", false);
//alertFilePublicLink.setVisible(true);
loadAndShowPublicLinksForItem(item);
//getElement().setClassName("gwt-DialogBoxNew"); //getElement().setClassName("gwt-DialogBoxNew");
String title = "Share"; modalBox.setTitle("Share Link...");
try {
title+= " "+StringUtil.ellipsize(item.getItemName(), 15);
} catch (Exception e) {
}
modalBox.setTitle(title);
ModalFooter modalFooter = new ModalFooter(); ModalFooter modalFooter = new ModalFooter();
final Button buttClose = new Button("Close"); final Button buttClose = new Button("Close");
modalFooter.add(buttClose); modalFooter.add(buttClose);
@ -186,9 +183,7 @@ public class DialogShareableLink extends Composite {
modalBox.add(this); modalBox.add(this);
modalBox.add(modalFooter); modalBox.add(modalFooter);
modalBox.show(); modalBox.show();
} }
/** /**
@ -383,37 +378,13 @@ public class DialogShareableLink extends Composite {
//alert("Copied the text: " + copyText.value); //alert("Copied the text: " + copyText.value);
}-*/; }-*/;
/**
* Show shareable link options.
*
* @param item the item
* @param version the version
*/
public void showShareableLinkOptions(GeoNaItemRef item, String version) {
//cgRemovePublicLink.setVisible(false);
fieldSetPrivate.setVisible(false);
fieldPrivateSharing.setVisible(false);
cgPublicLink.setVisible(false);
alertFilePublicLink.setVisible(false);
alertFolderPublicLink.setVisible(false);
showMessage("", false);
cgPublicLink.setVisible(true);
alertFilePublicLink.setVisible(true);
loadAndShowPublicLinksForItem(item, textPublicLink);
}
/** /**
* Load and show public links for item. * Load and show public links for item.
* *
* @param item the item * @param item the item
* @param toTextBox the to text box
*/ */
private void loadAndShowPublicLinksForItem(GeoNaItemRef item, final TextBox toTextBox) { private void loadAndShowPublicLinksForItem(GeoNaItemRef item) {
GeoportalDataViewerServiceAsync.Util.getInstance().getPublicLinksFor(item, GeoportalDataViewerServiceAsync.Util.getInstance().getPublicLinksFor(item,
new AsyncCallback<GeoNaItemRef>() { new AsyncCallback<GeoNaItemRef>() {
@ -422,16 +393,26 @@ public class DialogShareableLink extends Composite {
public void onSuccess(GeoNaItemRef itemReferences) { public void onSuccess(GeoNaItemRef itemReferences) {
openPublicLink = itemReferences.getOpenLink(); openPublicLink = itemReferences.getOpenLink();
restrictedPublicLink = itemReferences.getRestrictedLink(); restrictedPublicLink = itemReferences.getRestrictedLink();
String toURL = openPublicLink.getShortURL() != null && !openPublicLink.getShortURL().isEmpty() String toPublicURL = openPublicLink.getShortURL() != null && !openPublicLink.getShortURL().isEmpty()
? openPublicLink.getShortURL() ? openPublicLink.getShortURL()
: openPublicLink.getCompleteURL(); : openPublicLink.getCompleteURL();
toTextBox.setValue(toURL);
textPublicLink.setValue(toPublicURL);
textPublicLongLink.setValue(openPublicLink.getCompleteURL());
String toPrivateURL = restrictedPublicLink.getShortURL() != null && !restrictedPublicLink.getShortURL().isEmpty()
? restrictedPublicLink.getShortURL()
: restrictedPublicLink.getCompleteURL();
textPrivateLink.setValue(toPrivateURL);
textPrivateLongLink.setValue(restrictedPublicLink.getCompleteURL());
} }
@Override @Override
public void onFailure(Throwable caught) { public void onFailure(Throwable caught) {
openPublicLink = null; openPublicLink = null;
disableTextBox(toTextBox); disableTextBox(textPublicLink);
disableTextBox(textPrivateLink);
showError(caught.getMessage()); showError(caught.getMessage());
} }
}); });

View File

@ -19,6 +19,10 @@
margin-left: 5px; margin-left: 5px;
} }
.margin-left-25 {
margin-left: 25px;
}
.text-bold { .text-bold {
font-weight: bold; font-weight: bold;
} }
@ -30,10 +34,6 @@
padding-left: 10px; padding-left: 10px;
} }
.font-size-14 {
font-size: 14px;
}
.to-top-alignment { .to-top-alignment {
vertical-align: top; vertical-align: top;
padding-top: 0px !important; padding-top: 0px !important;
@ -53,12 +53,13 @@
<g:VerticalPanel ui:field="fieldPrivateSharing" <g:VerticalPanel ui:field="fieldPrivateSharing"
addStyleNames="{style.margin-bottom-20}"> addStyleNames="{style.margin-bottom-20}">
<g:HorizontalPanel> <g:HorizontalPanel>
<b:Label type="INFO" addStyleNames="{style.font-size-14}">Link shareable with <b:Label type="INFO" addStyleNames="sharelabel">With
coworkers</b:Label> coworkers</b:Label>
</g:HorizontalPanel> </g:HorizontalPanel>
<g:VerticalPanel <g:VerticalPanel
addStyleNames="{style.margin-left-5}"> addStyleNames="{style.margin-left-5}">
<g:Label ui:field="labelLinkPrivateSharing">(Only the) Members of the VRE are enacted to view</g:Label> <g:Label ui:field="labelLinkPrivateSharing">(Only the) Members of the VRE are enacted
to access it. Login required</g:Label>
</g:VerticalPanel> </g:VerticalPanel>
</g:VerticalPanel> </g:VerticalPanel>
@ -69,12 +70,9 @@
<b:ControlGroup ui:field="cgPrivateLink" <b:ControlGroup ui:field="cgPrivateLink"
addStyleNames="my-control-group"> addStyleNames="my-control-group">
<b:Well ui:field="wellPrivateLinkDescription"> <!-- <b:Well ui:field="wellPrivateLinkDescription"> -->
By sharing the following Restricted Link with <!-- The following Restricted Link for this product -->
your <!-- is accessible by the users of the VRE. Login required</b:Well> -->
coworkers,
you will enact the users of the VRE
to view this product. Login required</b:Well>
<b:ControlLabel>Restricted Link</b:ControlLabel> <b:ControlLabel>Restricted Link</b:ControlLabel>
<b:Controls> <b:Controls>
<b:InputAddOn prependIcon="LINK" <b:InputAddOn prependIcon="LINK"
@ -87,7 +85,7 @@
</b:Tooltip> </b:Tooltip>
</b:InputAddOn> </b:InputAddOn>
<b:Button ui:field="showPrivateLongLinkButton" <b:Button ui:field="showPrivateLongLinkButton"
type="LINK" addStyleNames="margin-left-5">Show as Long URL</b:Button> type="LINK" addStyleNames="{style.margin-left-25}">Show as Long URL</b:Button>
</b:Controls> </b:Controls>
</b:ControlGroup> </b:ControlGroup>
@ -114,12 +112,14 @@
<g:VerticalPanel ui:field="filedEnableDisableSharing" <g:VerticalPanel ui:field="filedEnableDisableSharing"
addStyleNames="{style.margin-bottom-20}"> addStyleNames="{style.margin-bottom-20}">
<g:HorizontalPanel> <g:HorizontalPanel>
<b:Label type="INFO" addStyleNames="{style.font-size-14}">Link shareable with <b:Label type="INFO" addStyleNames="sharelabel">With
everyone</b:Label> everyone</b:Label>
</g:HorizontalPanel> </g:HorizontalPanel>
<g:VerticalPanel <g:VerticalPanel
addStyleNames="{style.margin-left-5}"> addStyleNames="{style.margin-left-5}">
<g:Label ui:field="labelLinkSharing"></g:Label> <g:Label ui:field="labelLinkSharing">Anyone with
this link can access it. No
login is required</g:Label>
</g:VerticalPanel> </g:VerticalPanel>
</g:VerticalPanel> </g:VerticalPanel>
@ -127,17 +127,8 @@
<b:Fieldset ui:field="fieldSetPublic"> <b:Fieldset ui:field="fieldSetPublic">
<b:ControlGroup ui:field="cgPublicLink" <b:ControlGroup ui:field="cgPublicLink"
addStyleNames="my-control-group"> addStyleNames="my-control-group">
<b:Well ui:field="alertFolderPublicLink" visible="true">By sharing <!-- <b:Well ui:field="alertFilePublicLink" visible="true">Anyone with -->
the following Public <!-- this link can access it, no login is required.</b:Well> -->
Link, you will
enact anyone
with the
link to
view
the
product. No login required</b:Well>
<b:Well ui:field="alertFilePublicLink" visible="true">Anyone with
this link can access it, no login is required.</b:Well>
<b:ControlLabel>Open Link</b:ControlLabel> <b:ControlLabel>Open Link</b:ControlLabel>
<b:Controls> <b:Controls>
<b:InputAddOn prependIcon="GLOBE" <b:InputAddOn prependIcon="GLOBE"
@ -150,7 +141,7 @@
</b:Tooltip> </b:Tooltip>
</b:InputAddOn> </b:InputAddOn>
<b:Button ui:field="showPublicLongLinkButton" type="LINK" <b:Button ui:field="showPublicLongLinkButton" type="LINK"
addStyleNames="margin-left-5">Show as Long URL</b:Button> addStyleNames="{style.margin-left-25}">Show as Long URL</b:Button>
</b:Controls> </b:Controls>
</b:ControlGroup> </b:ControlGroup>

View File

@ -9,13 +9,13 @@ import org.gcube.portlets.user.geoportaldataviewer.client.ui.dialogs.DialogShare
import org.gcube.portlets.user.geoportaldataviewer.client.ui.images.ImageView; import org.gcube.portlets.user.geoportaldataviewer.client.ui.images.ImageView;
import org.gcube.portlets.user.geoportaldataviewer.client.ui.map.MapView; import org.gcube.portlets.user.geoportaldataviewer.client.ui.map.MapView;
import org.gcube.portlets.user.geoportaldataviewer.client.ui.util.CustomFlexTable; import org.gcube.portlets.user.geoportaldataviewer.client.ui.util.CustomFlexTable;
import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaItemRef;
import org.gcube.portlets.user.geoportaldataviewer.shared.products.ConcessioneDV; import org.gcube.portlets.user.geoportaldataviewer.shared.products.ConcessioneDV;
import org.gcube.portlets.user.geoportaldataviewer.shared.products.model.LayerConcessioneDV; import org.gcube.portlets.user.geoportaldataviewer.shared.products.model.LayerConcessioneDV;
import org.gcube.portlets.user.geoportaldataviewer.shared.products.model.RelazioneScavoDV; import org.gcube.portlets.user.geoportaldataviewer.shared.products.model.RelazioneScavoDV;
import org.gcube.portlets.user.geoportaldataviewer.shared.products.model.UploadedImageDV; import org.gcube.portlets.user.geoportaldataviewer.shared.products.model.UploadedImageDV;
import com.github.gwtbootstrap.client.ui.Button; import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.Modal;
import com.github.gwtbootstrap.client.ui.PageHeader; import com.github.gwtbootstrap.client.ui.PageHeader;
import com.github.gwtbootstrap.client.ui.Paragraph; import com.github.gwtbootstrap.client.ui.Paragraph;
import com.github.gwtbootstrap.client.ui.Thumbnails; import com.github.gwtbootstrap.client.ui.Thumbnails;
@ -80,14 +80,17 @@ public class ConcessioneView extends Composite {
private CustomFlexTable customTable = new CustomFlexTable(); private CustomFlexTable customTable = new CustomFlexTable();
public ConcessioneView() { private GeoNaItemRef geonaItemRef;
private ConcessioneView() {
initWidget(uiBinder.createAndBindUi(this)); initWidget(uiBinder.createAndBindUi(this));
pageViewDetails.getElement().setId("page-view-details"); pageViewDetails.getElement().setId("page-view-details");
} }
public ConcessioneView(ConcessioneDV concessioneDV) { public ConcessioneView(GeoNaItemRef item, ConcessioneDV concessioneDV) {
this(); this();
this.concessioneDV = concessioneDV; this.concessioneDV = concessioneDV;
this.geonaItemRef = item;
titolo.setText(concessioneDV.getNome()); titolo.setText(concessioneDV.getNome());
introduzione.setText(concessioneDV.getIntroduzione()); introduzione.setText(concessioneDV.getIntroduzione());
@ -164,13 +167,7 @@ public class ConcessioneView extends Composite {
@Override @Override
public void onClick(ClickEvent event) { public void onClick(ClickEvent event) {
DialogShareableLink dg = new DialogShareableLink(null, null); DialogShareableLink dg = new DialogShareableLink(geonaItemRef, null);
Modal modal = new Modal(true);
modal.setTitle("Share with...");
modal.setCloseVisible(true);
modal.hide(false);
modal.add(dg);
modal.show();
} }
}); });

View File

@ -1,5 +1,7 @@
package org.gcube.portlets.user.geoportaldataviewer.server; package org.gcube.portlets.user.geoportaldataviewer.server;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
@ -11,6 +13,7 @@ import org.gcube.application.geoportal.managers.ManagerFactory;
import org.gcube.application.geoportal.model.Record; import org.gcube.application.geoportal.model.Record;
import org.gcube.application.geoportal.model.concessioni.Concessione; import org.gcube.application.geoportal.model.concessioni.Concessione;
import org.gcube.application.geoportal.model.content.UploadedImage; import org.gcube.application.geoportal.model.content.UploadedImage;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants; import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerService; import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerService;
import org.gcube.portlets.user.geoportaldataviewer.server.gis.FeatureParser; import org.gcube.portlets.user.geoportaldataviewer.server.gis.FeatureParser;
@ -31,6 +34,7 @@ import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wms.ZAxis;
import org.gcube.portlets.user.geoportaldataviewer.shared.products.ConcessioneDV; import org.gcube.portlets.user.geoportaldataviewer.shared.products.ConcessioneDV;
import org.gcube.portlets.user.geoportaldataviewer.shared.products.content.WorkspaceContentDV; import org.gcube.portlets.user.geoportaldataviewer.shared.products.content.WorkspaceContentDV;
import org.gcube.portlets.user.geoportaldataviewer.shared.products.model.UploadedImageDV; import org.gcube.portlets.user.geoportaldataviewer.shared.products.model.UploadedImageDV;
import org.gcube.portlets.user.urlshortener.UrlShortener;
import org.gcube.spatial.data.geoutility.GeoNcWMSMetadataUtility; import org.gcube.spatial.data.geoutility.GeoNcWMSMetadataUtility;
import org.gcube.spatial.data.geoutility.bean.LayerStyles; import org.gcube.spatial.data.geoutility.bean.LayerStyles;
import org.gcube.spatial.data.geoutility.bean.LayerZAxis; import org.gcube.spatial.data.geoutility.bean.LayerZAxis;
@ -401,7 +405,8 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
GeoportalDataViewerConstants.GET_GEONA_ITEM_TYPE, GeoportalDataViewerConstants.GET_GEONA_ITEM_TYPE,
item.getItemType()); item.getItemType());
item.setRestrictedLink(new PublicLink(link, null)); String shortUrl = getShortUrl(link);
item.setRestrictedLink(new PublicLink(link, shortUrl));
//Open Link //Open Link
link = String.format("%s?%s=%s&%s=%s", link = String.format("%s?%s=%s&%s=%s",
@ -411,20 +416,43 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
GeoportalDataViewerConstants.GET_GEONA_ITEM_TYPE, GeoportalDataViewerConstants.GET_GEONA_ITEM_TYPE,
item.getItemType()); item.getItemType());
item.setOpenLink(new PublicLink(link, null)); shortUrl = getShortUrl(link);
item.setOpenLink(new PublicLink(link, shortUrl));
LOG.info("returning: " + item); LOG.info("returning: " + item);
return item; return item;
} catch (Exception e) { } catch (Exception e) {
LOG.error("Error on getPublicLinksFor for: " + item, e); LOG.error("Error on getPublicLinksFor for: " + item, e);
throw new Exception("Share link not available for this item. Try later or contact the support"); throw new Exception("Share link not available for this item. Try later or contact the support. Error: "+e.getMessage());
}
}
@Override
public String getShortUrl(String longUrl) throws Exception {
LOG.info("getShortUrl called for " + longUrl);
if(longUrl==null)
return longUrl;
UrlShortener shortener = SessionUtil.getUrlShortener(this.getThreadLocalRequest());
try {
if (shortener != null && shortener.isAvailable()) {
String toShort = longUrl;
return shortener.shorten(toShort);
}
return longUrl;
} catch (Exception e) {
LOG.error("Error on shortening the longURL "+longUrl, e);
return null;
} }
} }
public boolean isSessionExpired() throws Exception { public boolean isSessionExpired() throws Exception {
return SessionUtil.isSessionExpired(this.getThreadLocalRequest()); return SessionUtil.isSessionExpired(this.getThreadLocalRequest());
} }
} }

View File

@ -4,9 +4,11 @@
package org.gcube.portlets.user.geoportaldataviewer.server.util; package org.gcube.portlets.user.geoportaldataviewer.server.util;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.gcube.common.portal.PortalContext; import org.gcube.common.portal.PortalContext;
import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.portlets.user.urlshortener.UrlShortener;
import org.gcube.vomanagement.usermanagement.GroupManager; import org.gcube.vomanagement.usermanagement.GroupManager;
import org.gcube.vomanagement.usermanagement.exception.GroupRetrievalFault; import org.gcube.vomanagement.usermanagement.exception.GroupRetrievalFault;
import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemException; import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemException;
@ -30,6 +32,8 @@ public class SessionUtil {
/** The log. */ /** The log. */
private static Logger LOG = LoggerFactory.getLogger(SessionUtil.class); private static Logger LOG = LoggerFactory.getLogger(SessionUtil.class);
public static final String URL_SHORTENER_SERVICE = "URL_SHORTENER_SERVICE";
/** /**
* Checks if is into portal. * Checks if is into portal.
@ -117,4 +121,30 @@ public class SessionUtil {
return gm.getGroup(groupId); return gm.getGroup(groupId);
} }
/**
* Gets the url shortener.
*
* @param httpServletRequest the http servlet request
* @return the url shortener
*/
public static UrlShortener getUrlShortener(HttpServletRequest httpServletRequest) {
HttpSession session = httpServletRequest.getSession();
UrlShortener shortener = null;
try {
shortener = (UrlShortener) session.getAttribute(URL_SHORTENER_SERVICE);
if (shortener == null) {
shortener = new UrlShortener();
session.setAttribute(URL_SHORTENER_SERVICE, shortener);
}
} catch (Exception e) {
LOG.warn("Error occurred when instancing the "+UrlShortener.class.getSimpleName(), e);
}
return shortener;
}
} }

View File

@ -70,7 +70,7 @@
content: "✖"; content: "✖";
} }
.data-click-img{ .data-click-img {
max-width: 395px; max-width: 395px;
} }
@ -78,23 +78,23 @@
font-weight: bold; font-weight: bold;
} }
#page-view-details{ #page-view-details {
margin: 10px; margin: 10px;
text-rendering: optimizelegibility; text-rendering: optimizelegibility;
font-family: Lato, 'Helvetica Neue', Arial, Helvetica, sans-serif; font-family: Lato, 'Helvetica Neue', Arial, Helvetica, sans-serif;
} }
#page-view-details > h1 { #page-view-details>h1 {
font-size: 32px; font-size: 32px;
} }
#page-view-details > p { #page-view-details>p {
font-size: 24px; font-size: 24px;
padding: 10px; padding: 10px;
color: #999; color: #999;
} }
#page-view-details .my-custom-flex-table{ #page-view-details .my-custom-flex-table {
margin-left: 20px; margin-left: 20px;
margin-right: 40px; margin-right: 40px;
font-size: 14px; font-size: 14px;
@ -104,10 +104,10 @@
padding: 5px; padding: 5px;
} }
#page-view-details .my-custom-flex-table tbody tr > td:first-child { #page-view-details .my-custom-flex-table tbody tr>td:first-child {
color: gray; color: gray;
font-weight: bold; font-weight: bold;
width: 200px; width: 200px;
} }
.ol-mouse-position { .ol-mouse-position {
@ -121,11 +121,38 @@
margin: 1px; margin: 1px;
will-change: contents, width; will-change: contents, width;
transition: all .25s; transition: all .25s;
background: rgba(0,60,136,.5); background: rgba(0, 60, 136, .5);
border-radius: 2px; border-radius: 2px;
padding-left: 2px; padding-left: 2px;
padding-right: 2px; padding-right: 2px;
padding-bottom: 1px; padding-bottom: 1px;
padding-top: 1px; padding-top: 1px;
} }
.my-control-group .controls {
margin-left: 70px !important;
}
.my-control-group .control-label {
width: 100px !important;
text-align: left !important;
padding-left: 10px !important;
}
.my-control-group .add-on {
width: 20px !important;
}
.my-control-group .gwt-TextBox {
width: 305px !important;
}
.my-control-group .gwt-TextBox:hover {
cursor: text !important;
}
.sharelabel {
font-size: 14px !important;
padding-top: 4px !important;
margin-bottom: 5px;
}

View File

@ -0,0 +1,34 @@
package org.gcube.portlets.user.geoportaldataviewer;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.portlets.user.urlshortener.UrlShortener;
public class TestShortener {
public static void main(String[] args) {
try {
String toShort = "https://next.d4science.org/group/nextnext/geona-data-viewer?gid=20&git=concessione";
String[] splitted = toShort.split("\\?");
String link = toShort;
// if (splitted.length > 1) {
// String encodedQuery = splitted[1];
// try {
// encodedQuery = URLEncoder.encode(splitted[1], "UTF-8");
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
//
// }
// link = String.format("%s?%s", splitted[0], encodedQuery);
// }
// ScopeProvider.instance.set("/gcube/devNext/NextNext");
// UrlShortener shortener = new UrlShortener();
// System.out.println(shortener.shorten(link));
} catch (Exception e) {
e.printStackTrace();
}
}
}