diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..65a07a3
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.project b/.project
new file mode 100644
index 0000000..cd15ed2
--- /dev/null
+++ b/.project
@@ -0,0 +1,53 @@
+
+
+ image-previewer-widget
+
+
+
+
+
+ org.eclipse.wst.jsdt.core.javascriptValidator
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.wst.common.project.facet.core.builder
+
+
+
+
+ org.eclipse.wst.validation.validationbuilder
+
+
+
+
+ com.google.gdt.eclipse.core.webAppProjectValidator
+
+
+
+
+ com.google.gwt.eclipse.core.gwtProjectValidator
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jem.workbench.JavaEMFNature
+ org.eclipse.wst.common.modulecore.ModuleCoreNature
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+ org.eclipse.wst.common.project.facet.core.nature
+ org.eclipse.wst.jsdt.core.jsNature
+ com.google.gwt.eclipse.core.gwtNature
+
+
diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope
new file mode 100644
index 0000000..b72a6a4
--- /dev/null
+++ b/.settings/.jsdtscope
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.settings/com.google.gdt.eclipse.core.prefs b/.settings/com.google.gdt.eclipse.core.prefs
new file mode 100644
index 0000000..f7c4208
--- /dev/null
+++ b/.settings/com.google.gdt.eclipse.core.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+lastWarOutDir=/home/costantino/workspace/image-previewer-widget/target/image-previewer-widget-1.0.0-SNAPSHOT
+warSrcDir=src/main/webapp
+warSrcDirIsOutput=false
diff --git a/.settings/com.google.gwt.eclipse.core.prefs b/.settings/com.google.gwt.eclipse.core.prefs
new file mode 100644
index 0000000..f23a752
--- /dev/null
+++ b/.settings/com.google.gwt.eclipse.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+entryPointModules=
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..29abf99
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding//src/test/resources=UTF-8
+encoding/=UTF-8
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..443e085
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component
new file mode 100644
index 0000000..8c33358
--- /dev/null
+++ b/.settings/org.eclipse.wst.common.component
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..735eb31
--- /dev/null
+++ b/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container
new file mode 100644
index 0000000..3bd5d0a
--- /dev/null
+++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.name b/.settings/org.eclipse.wst.jsdt.ui.superType.name
new file mode 100644
index 0000000..05bd71b
--- /dev/null
+++ b/.settings/org.eclipse.wst.jsdt.ui.superType.name
@@ -0,0 +1 @@
+Window
\ No newline at end of file
diff --git a/.settings/org.eclipse.wst.validation.prefs b/.settings/org.eclipse.wst.validation.prefs
new file mode 100644
index 0000000..04cad8c
--- /dev/null
+++ b/.settings/org.eclipse.wst.validation.prefs
@@ -0,0 +1,2 @@
+disabled=06target
+eclipse.preferences.version=1
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..e7ebc34
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,134 @@
+
+
+
+ 4.0.0
+
+ maven-parent
+ org.gcube.tools
+ 1.0.0
+
+
+
+ org.gcube.portlets.widgets
+ image-previewer-widget
+ war
+ 1.0.0-SNAPSHOT
+ gCube Image previewer widget
+
+ gCube Image Previewer widget is a GWT Widget that can be used to show a preview of one or more images
+
+
+
+
+ 2.7.0
+ distro
+ 1.7
+ 1.7
+ UTF-8
+ UTF-8
+
+
+
+
+
+ org.gcube.distribution
+ maven-portal-bom
+ LATEST
+ pom
+ import
+
+
+ com.google.gwt
+ gwt
+ ${gwtVersion}
+ pom
+ import
+
+
+
+
+
+
+ com.google.gwt
+ gwt-servlet
+ ${gwtVersion}
+ runtime
+
+
+ com.google.gwt
+ gwt-user
+ ${gwtVersion}
+ provided
+
+
+ com.google.gwt
+ gwt-dev
+ ${gwtVersion}
+ provided
+
+
+ com.github.gwtbootstrap
+ gwt-bootstrap
+ 2.3.2.0
+
+
+ junit
+ junit
+ 4.11
+ test
+
+
+ org.gcube.portal
+ social-networking-library
+ provided
+
+
+
+
+
+ ${webappDirectory}/WEB-INF/classes
+
+
+ src/main/java
+
+ **/*.*
+
+
+
+ src/main/resources
+
+ **/*.*
+
+
+
+
+
+
+
+
+ org.codehaus.mojo
+ gwt-maven-plugin
+ 2.7.0
+
+
+
+ compile
+ test
+ generateAsync
+
+
+
+
+
+ ImagePreviewer.html
+
+ org.gcube.portlets.widgets.imagepreviewerwidget.ImagePreviewer
+
+
+
+
+
+
+
diff --git a/src/main/java/org/gcube/portlets/widgets/imagepreviewerwidget/client/EnhancedImage.java b/src/main/java/org/gcube/portlets/widgets/imagepreviewerwidget/client/EnhancedImage.java
new file mode 100644
index 0000000..3410cbb
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/widgets/imagepreviewerwidget/client/EnhancedImage.java
@@ -0,0 +1,84 @@
+package org.gcube.portlets.widgets.imagepreviewerwidget.client;
+
+import com.github.gwtbootstrap.client.ui.Image;
+
+/**
+ * This class contains the object to show within the carousel.
+ * @author Costantino Perciante at ISTI-CNR
+ *
+ */
+public class EnhancedImage {
+
+ private Image image;
+ private String titleToShow;
+ private String toolTipToShow;
+
+ public EnhancedImage(String imageUrl){
+
+ super();
+ this.image = new Image(imageUrl);
+ this.titleToShow = imageUrl;
+ this.toolTipToShow = imageUrl;
+
+ }
+
+ public EnhancedImage(Image image){
+
+ super();
+ this.image = image;
+ this.titleToShow = image.getUrl();
+ this.toolTipToShow = image.getUrl();
+
+ }
+
+ public EnhancedImage(Image image, String titleToShow, String toolTipToShow) {
+
+ super();
+ this.image = image;
+ this.titleToShow = titleToShow;
+ this.toolTipToShow = toolTipToShow;
+
+ }
+
+ public Image getImage() {
+
+ return image;
+
+ }
+ public void setImage(Image image) {
+
+ this.image = image;
+
+ }
+ public String getTitleToShow() {
+
+ return titleToShow;
+
+ }
+ public void setTitleToShow(String titleToShow) {
+
+ this.titleToShow = titleToShow;
+
+ }
+ public String getToolTipToShow() {
+
+ return toolTipToShow;
+
+ }
+ public void setToolTipToShow(String toolTipToShow) {
+
+ this.toolTipToShow = toolTipToShow;
+
+ }
+ public String getImageUrl(){
+
+ return this.image.getUrl();
+
+ }
+
+ @Override
+ public String toString() {
+ return "EnhancedImage [image=" + image + ", titleToShow=" + titleToShow
+ + ", toolTipToShow=" + toolTipToShow + "]";
+ }
+}
diff --git a/src/main/java/org/gcube/portlets/widgets/imagepreviewerwidget/client/ImagePreviewer.java b/src/main/java/org/gcube/portlets/widgets/imagepreviewerwidget/client/ImagePreviewer.java
new file mode 100644
index 0000000..72cd509
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/widgets/imagepreviewerwidget/client/ImagePreviewer.java
@@ -0,0 +1,30 @@
+package org.gcube.portlets.widgets.imagepreviewerwidget.client;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gcube.portlets.widgets.imagepreviewerwidget.client.ui.Carousel;
+import com.google.gwt.core.client.EntryPoint;
+import com.google.gwt.user.client.ui.RootPanel;
+
+/**
+ * Entry point classes define onModuleLoad()
.
+ */
+public class ImagePreviewer implements EntryPoint {
+
+
+ /**
+ * This is the entry point method.
+ */
+ public void onModuleLoad() {
+
+ // random images for test
+ List images = new ArrayList<>();
+ images.add(new EnhancedImage("https://i.ytimg.com/vi/ReF6iQ7M5_A/maxresdefault.jpg"));
+ images.add(new EnhancedImage("http://images6.alphacoders.com/316/316963.jpg"));
+ images.add(new EnhancedImage("http://nerdist.com/wp-content/uploads/2014/07/ned-stark-970x545.jpg"));
+ images.add(new EnhancedImage("http://vignette2.wikia.nocookie.net/gameofthrones/images/2/25/Eddard's_Head.png/revision/latest?cb=20121205211321"));
+ images.add(new EnhancedImage("https://upload.wikimedia.org/wikipedia/it/1/17/Il_grande_Lebowski.jpg"));
+ RootPanel.get("image-previewer-div").add(new Carousel(images));
+ }
+}
diff --git a/src/main/java/org/gcube/portlets/widgets/imagepreviewerwidget/client/ui/Carousel.java b/src/main/java/org/gcube/portlets/widgets/imagepreviewerwidget/client/ui/Carousel.java
new file mode 100644
index 0000000..b942001
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/widgets/imagepreviewerwidget/client/ui/Carousel.java
@@ -0,0 +1,144 @@
+package org.gcube.portlets.widgets.imagepreviewerwidget.client.ui;
+
+import java.util.List;
+
+import org.gcube.portlets.widgets.imagepreviewerwidget.client.EnhancedImage;
+
+import com.github.gwtbootstrap.client.ui.Button;
+import com.github.gwtbootstrap.client.ui.Image;
+import com.github.gwtbootstrap.client.ui.Modal;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * A carousel for image/file previews.
+ * @author Costantino Perciante at ISTI-CNR
+ */
+public class Carousel extends Composite{
+
+ private static CarouselUiBinder uiBinder = GWT
+ .create(CarouselUiBinder.class);
+
+ interface CarouselUiBinder extends UiBinder {
+ }
+
+ public Carousel() {
+ initWidget(uiBinder.createAndBindUi(this));
+
+ }
+
+ @UiField
+ Modal mainModalPanel;
+
+ @UiField
+ Button showButton;
+
+ @UiField
+ Button prevButton;
+
+ @UiField
+ Button nextButton;
+
+ @UiField
+ Image shownImage;
+
+ private List listOfAttachmentsToShow;
+
+ private int currentPreviewPosition;
+
+ public Carousel(List imagesToShow) {
+ initWidget(uiBinder.createAndBindUi(this));
+
+ // prev button
+ prevButton.setText("<<");
+
+ // next button
+ nextButton.setText(">>");
+
+ // save the attachments list
+ listOfAttachmentsToShow = imagesToShow;
+
+ // take the first object
+ currentPreviewPosition = 0;
+
+ // show it
+ shownImage.setUrl(listOfAttachmentsToShow.get(currentPreviewPosition).getImageUrl());
+
+ // change image tooltip
+ shownImage.setTitle(listOfAttachmentsToShow.get(currentPreviewPosition).getToolTipToShow());
+
+ // change the title to the modal
+ mainModalPanel.setTitle(listOfAttachmentsToShow.get(currentPreviewPosition).getTitleToShow());
+
+ }
+
+ @UiHandler("showButton")
+ public void onClick(ClickEvent e){
+
+ mainModalPanel.show();
+
+ }
+
+ @UiHandler("prevButton")
+ public void onClickPrev(ClickEvent e){
+
+ int prevPreviewPosition = currentPreviewPosition == 0 ? listOfAttachmentsToShow.size() - 1 : currentPreviewPosition - 1;
+ currentPreviewPosition = prevPreviewPosition;
+
+ // show it
+ shownImage.setUrl(listOfAttachmentsToShow.get(currentPreviewPosition).getImageUrl());
+
+ // change image tooltip
+ shownImage.setTitle(listOfAttachmentsToShow.get(currentPreviewPosition).getToolTipToShow());
+
+ // change the title to the modal
+ mainModalPanel.setTitle(listOfAttachmentsToShow.get(currentPreviewPosition).getTitleToShow());
+
+ }
+
+ @UiHandler("nextButton")
+ public void onClickNext(ClickEvent e){
+
+ int nextPreviewPosition = currentPreviewPosition == listOfAttachmentsToShow.size() -1 ?
+ 0 : currentPreviewPosition + 1;
+ currentPreviewPosition = nextPreviewPosition;
+
+ // show it
+ shownImage.setUrl(listOfAttachmentsToShow.get(currentPreviewPosition).getImageUrl());
+
+ // change image tooltip
+ shownImage.setTitle(listOfAttachmentsToShow.get(currentPreviewPosition).getToolTipToShow());
+
+ // change the title to the modal
+ mainModalPanel.setTitle(listOfAttachmentsToShow.get(currentPreviewPosition).getTitleToShow());
+
+ }
+
+ /**
+ * Change the current image.
+ * @param newPosition index of the new image to show
+ */
+ public void changeImageShown(int newPosition){
+
+ if(newPosition < 0 || newPosition >= listOfAttachmentsToShow.size())
+ return;
+
+ currentPreviewPosition = newPosition;
+
+ // show it
+ shownImage.setUrl(listOfAttachmentsToShow.get(currentPreviewPosition).getImageUrl());
+
+ // change image tooltip
+ shownImage.setTitle(listOfAttachmentsToShow.get(currentPreviewPosition).getToolTipToShow());
+
+ // change the title to the modal
+ mainModalPanel.setTitle(listOfAttachmentsToShow.get(currentPreviewPosition).getTitleToShow());
+
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/widgets/imagepreviewerwidget/client/ui/Carousel.ui.xml b/src/main/java/org/gcube/portlets/widgets/imagepreviewerwidget/client/ui/Carousel.ui.xml
new file mode 100644
index 0000000..11cd7ff
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/widgets/imagepreviewerwidget/client/ui/Carousel.ui.xml
@@ -0,0 +1,39 @@
+
+
+
+ .image {
+ width: 100%;
+ }
+
+ .left-align {
+ vertical-align: center;
+ float: left;
+ color: #3B5998;
+ font-weight: bold;
+ }
+
+ .right-align {
+ vertical-align: center;
+ float: right;
+ color: #3B5998;
+ font-weight: bold;
+ }
+
+ .modal-text-size {
+ font-family: "Helvetica Neue", Arial, sans-serif;
+ font-size: 14px;
+ }
+
+
+ Show the modal!
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/org/gcube/portlets/widgets/imagepreviewerwidget/ImagePreviewer.gwt.xml b/src/main/resources/org/gcube/portlets/widgets/imagepreviewerwidget/ImagePreviewer.gwt.xml
new file mode 100644
index 0000000..0e6f399
--- /dev/null
+++ b/src/main/resources/org/gcube/portlets/widgets/imagepreviewerwidget/ImagePreviewer.gwt.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/org/gcube/portlets/widgets/imagepreviewerwidget/client/Messages_fr.properties b/src/main/resources/org/gcube/portlets/widgets/imagepreviewerwidget/client/Messages_fr.properties
new file mode 100644
index 0000000..b4a7627
--- /dev/null
+++ b/src/main/resources/org/gcube/portlets/widgets/imagepreviewerwidget/client/Messages_fr.properties
@@ -0,0 +1,2 @@
+sendButton = Envoyer
+nameField = Entrez votre nom
\ No newline at end of file
diff --git a/src/main/webapp/ImagePreviewer.css b/src/main/webapp/ImagePreviewer.css
new file mode 100644
index 0000000..b45c86c
--- /dev/null
+++ b/src/main/webapp/ImagePreviewer.css
@@ -0,0 +1,4 @@
+.modal-style {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+}
\ No newline at end of file
diff --git a/src/main/webapp/ImagePreviewer.html b/src/main/webapp/ImagePreviewer.html
new file mode 100644
index 0000000..2c97c80
--- /dev/null
+++ b/src/main/webapp/ImagePreviewer.html
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Web Application Starter Project
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..4d5414b
--- /dev/null
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+ ImagePreviewer.html
+
+
+
diff --git a/src/test/resources/org/gcube/portlets/widgets/imagepreviewerwidget/ImagePreviewerJUnit.gwt.xml b/src/test/resources/org/gcube/portlets/widgets/imagepreviewerwidget/ImagePreviewerJUnit.gwt.xml
new file mode 100644
index 0000000..e750912
--- /dev/null
+++ b/src/test/resources/org/gcube/portlets/widgets/imagepreviewerwidget/ImagePreviewerJUnit.gwt.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+