1324: Update logging framework to Sl4j/Log4j

Task-Url: https://support.d4science.org/issues/1324

Init 

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/statistical-algorithms-importer@120382 82a268e6-3cf1-43bd-a215-b396298e98cf
master
Giancarlo Panichi 8 years ago
parent 8babb257ae
commit 19bd0eb7b9

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/statistical-algorithms-importer-0.0.1-SNAPSHOT/WEB-INF/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/statistical-algorithms-importer-0.0.1-SNAPSHOT/WEB-INF/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/giancarlo/gwt/gwt-2.6.1/gwt-user.jar">
<attributes>
<attribute name="javadoc_location" value="file:/home/giancarlo/gwt/gwt-2.6.1/doc/javadoc/"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/giancarlo/gwt/gwt-2.6.1/gwt-dev.jar">
<attributes>
<attribute name="javadoc_location" value="file:/home/giancarlo/gwt/gwt-2.6.1/doc/javadoc/"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/giancarlo/gwt/gwt-2.6.1/validation-api-1.0.0.GA.jar" sourcepath="/home/giancarlo/gwt/gwt-2.6.1/validation-api-1.0.0.GA-sources.jar"/>
<classpathentry kind="lib" path="/home/giancarlo/gwt/gwt-2.6.1/validation-api-1.0.0.GA-sources.jar"/>
<classpathentry kind="output" path="target/statistical-algorithms-importer-0.0.1-SNAPSHOT/WEB-INF/classes"/>
</classpath>

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>statistical-algorithms-importer</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.common.project.facet.core.builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.google.gdt.eclipse.core.webAppProjectValidator</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.google.gwt.eclipse.core.gwtProjectValidator</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
<nature>com.google.gwt.eclipse.core.gwtNature</nature>
</natures>
</projectDescription>

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<Resource>
<ID></ID>
<Type>Service</Type>
<Profile>
<Description>statistical-algorithms-importer imports statistical algorithms</Description>
<Class>PortletsUser</Class>
<Name>statistical-algorithms-importer</Name>
<Version>1.0.0</Version>
<Packages>
<Software>
<Description>statistical-algorithms-importer imports statistical algorithms</Description>
<Name>statistical-algorithms-importer</Name>
<Version>0.0.1-SNAPSHOT</Version>
<MavenCoordinates>
<groupId>org.gcube.portlets.user</groupId>
<artifactId>statistical-algorithms-importer</artifactId>
<version>0.0.1-SNAPSHOT</version>
</MavenCoordinates>
<Type>webapplication</Type>
<Files>
<File>statistical-algorithms-importer-0.0.1-SNAPSHOT.war</File>
</Files>
</Software>
</Packages>
</Profile>
</Resource>

@ -0,0 +1,6 @@
gCube System - License
------------------------------------------------------------
The gCube/gCore software is licensed as Free Open Source software conveying to the EUPL (http://ec.europa.eu/idabc/eupl).
The software and documentation is provided by its authors/distributors "as is" and no expressed or
implied warranty is given for its use, quality or fitness for a particular case.

@ -0,0 +1 @@
Giancarlo Panichi (giancarlo.panichi@isti.cnr.it), CNR Pisa, Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo"

@ -0,0 +1,50 @@
The gCube System - statistical-algorithms-importer
------------------------------------------------------------
This work has been partially supported by the following European projects: DILIGENT (FP6-2003-IST-2),
D4Science (FP7-INFRA-2007-1.2.2), D4Science-II (FP7-INFRA-2008-1.2.2), iMarine (FP7-INFRASTRUCTURES-2011-2),
and EUBrazilOpenBio (FP7-ICT-2011-EU-Brazil), Parthenos (H2020-INFRADEV-1-2014-1), BlueBridge (H2020-EINFRA-2015-1).
Authors
-------
Giancarlo Panichi (giancarlo.panichi@isti.cnr.it), CNR Pisa,
Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo"
Version and Release Date
------------------------
v. 0.0.1-SNAPSHOT (2015-04-30)
Description
-----------
statistical-algorithms-importer imports statistical algorithms
Download information
--------------------
Source code is available from SVN:
https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/statistical-algorithms-importer
Binaries can be downloaded from:
http://software.d4science.research-infrastructures.eu/
Documentation
-------------
statistical-algorithms-importer imports statistical algorithms
Documentation is available on-line from the Projects Documentation Wiki:
http://wiki.gcube-system.org/gcube/Statistical_Algorithms_Importer
Licensing
---------
This software is licensed under the terms you may find in the file named "LICENSE" in this directory.

@ -0,0 +1,5 @@
<ReleaseNotes>
<Changeset component="org.gcube.portlets.user.statistical-algorithms-importer.0-0-1" date="2015-09-01">
<Change>First Release</Change>
</Changeset>
</ReleaseNotes>

@ -0,0 +1 @@
https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/statistical-algorithms-importer

@ -0,0 +1,449 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>maven-parent</artifactId>
<groupId>org.gcube.tools</groupId>
<version>1.0.0</version>
<relativePath />
</parent>
<!-- POM file generated with GWT webAppCreator -->
<modelVersion>4.0.0</modelVersion>
<groupId>org.gcube.portlets.user</groupId>
<artifactId>statistical-algorithms-importer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>statistical-algorithms-importer</name>
<description>statistical-algorithms-importer imports statistical algorithms</description>
<scm>
<url>https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/statistical-algorithms-importer</url>
</scm>
<developers>
<developer>
<name>Giancarlo Panichi</name>
<email>g.panichi@isti.cnr.it</email>
<organization>CNR Pisa, Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo"</organization>
<roles>
<role>architect</role>
<role>developer</role>
</roles>
</developer>
</developers>
<properties>
<distroDirectory>${project.basedir}/distro</distroDirectory>
<webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>
<release.date>2015-04-30</release.date>
<wikiurl>http://wiki.gcube-system.org/gcube/Statistical_Algorithms_Importer</wikiurl>
<templatesDirectory>templates</templatesDirectory>
<distroDirectory>distro</distroDirectory>
<configDirectory>config</configDirectory>
<!-- GWT configuration -->
<gwtVersion>2.6.1</gwtVersion>
<gwtLogVersion>3.3.2</gwtLogVersion>
<gxtVersion>3.1.1</gxtVersion>
<!-- <gxt2Version>2.6.1</gxt2Version> -->
<KEYS>${env.KEYS}</KEYS>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<profiles>
<profile>
<id>localRun</id>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
</profile>
</profiles>
<dependencies>
<!-- GWT -->
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<version>${gwtVersion}</version>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-servlet</artifactId>
<version>${gwtVersion}</version>
</dependency>
<!-- <dependency> <groupId>com.google.gwt</groupId> <artifactId>gwt-dev</artifactId>
<version>${gwtVersion}</version> </dependency> -->
<!-- GXT 3 -->
<dependency>
<groupId>com.sencha.gxt</groupId>
<artifactId>gxt</artifactId>
<version>${gxtVersion}</version>
</dependency>
<!-- Accounting Manager Theme -->
<dependency>
<groupId>org.gcube.portlets.admin</groupId>
<artifactId>accounting-manager-theme</artifactId>
<version>[0.0.1-SNAPSHOT,
2.0.0-SNAPSHOT)</version>
<exclusions>
<exclusion>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-dev</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- GXT-Theme-Neptune -->
<!-- <dependency> <groupId>com.sencha.gxt</groupId> <artifactId>gxt-theme-neptune</artifactId>
<version>${gxtVersion}</version> </dependency> -->
<!-- Portlet -->
<dependency>
<groupId>javax.portlet</groupId>
<artifactId>portlet-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- PORTAL -->
<dependency>
<groupId>org.gcube.core</groupId>
<artifactId>common-scope-maps</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.gcube.portal</groupId>
<artifactId>custom-portal-handler</artifactId>
</dependency>
<dependency>
<groupId>org.gcube.applicationsupportlayer</groupId>
<artifactId>aslcore</artifactId>
</dependency>
<dependency>
<groupId>org.gcube.applicationsupportlayer</groupId>
<artifactId>accesslogger</artifactId>
</dependency>
<!-- Social -->
<dependency>
<groupId>org.gcube.portal</groupId>
<artifactId>social-networking-library</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.gcube.applicationsupportlayer</groupId>
<artifactId>aslsocial</artifactId>
<scope>provided</scope>
</dependency>
<!-- GCube Widgets -->
<dependency>
<groupId>org.gcube.portlets.user</groupId>
<artifactId>gcube-widgets</artifactId>
</dependency>
<!-- WSLT dependencies <dependency> <groupId>org.gcube.portlets.widgets</groupId>
<artifactId>workspace-light-tree</artifactId> <version>[2.13.1-SNAPSHOT,
3.0.0-SNAPSHOT)</version> </dependency> <dependency> <groupId>org.gcube.common</groupId>
<artifactId>home-library</artifactId> <version>[2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)</version>
<scope>provided</scope> </dependency> -->
<!-- Session Checker -->
<dependency>
<groupId>org.gcube.portlets.widgets</groupId>
<artifactId>session-checker</artifactId>
<version>[0.2.0-SNAPSHOT,1.0.0-SNAPSHOT)</version>
</dependency>
<!-- Apache Common Library -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
</dependency>
<dependency>
<groupId>com.googlecode.juniversalchardet</groupId>
<artifactId>juniversalchardet</artifactId>
<version>1.0.3</version>
</dependency>
<!-- Common Encryption <dependency> <groupId>org.gcube.core</groupId> <artifactId>common-encryption</artifactId>
<scope>provided</scope> </dependency> -->
<!-- LOGGING -->
<dependency>
<groupId>com.allen-sauer.gwt.log</groupId>
<artifactId>gwt-log</artifactId>
<version>${gwtLogVersion}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<scope>provided</scope>
</dependency>
<!-- <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId>
<version>1.0.1</version> <scope>runtime</scope> </dependency> -->
<!-- JUnit TEST -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!-- Generate compiled stuff in the folder used for developing mode -->
<outputDirectory>${webappDirectory}/WEB-INF/classes</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
<plugins>
<!-- GWT Maven Plugin -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>${gwtVersion}</version>
<executions>
<execution>
<configuration>
<extraJvmArgs>-Xmx1024M -Xss1024k -Dgwt.compiler.localWorkers=1</extraJvmArgs>
</configuration>
<goals>
<goal>compile</goal>
<goal>test</goal>
</goals>
</execution>
</executions>
<configuration>
<runTarget>StatAlgoImporter.html</runTarget>
<hostedWebapp>${webappDirectory}</hostedWebapp>
<module>org.gcube.portlets.user.statisticalalgorithmsimporter.statalgoimporter</module>
<!-- <compileSourcesArtifacts> <artifact>com.github.highcharts4gwt:highcharts</artifact>
</compileSourcesArtifacts> -->
</configuration>
</plugin>
<!-- Copy static web files before executing gwt:run -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<phase>compile</phase>
<!--<goals> <goal>exploded</goal> </goals> -->
</execution>
</executions>
<configuration>
<webappDirectory>${webappDirectory}</webappDirectory>
<warName>${project.build.finalName}</warName>
<!-- Include static jar into WEB-INF/lib -->
<!-- <webResources> <resource> <directory>lib</directory> <includes>
<include>*.jar</include> </includes> <targetPath>WEB-INF/lib</targetPath>
</resource> </webResources> -->
</configuration>
</plugin>
<!-- Maven Surefire Plugin for Test -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
<skipTests>false</skipTests>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.16</version>
</dependency>
</dependencies>
</plugin>
<!-- Maven Resources Plugin -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-profile</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${configDirectory}</outputDirectory>
<resources>
<resource>
<directory>${templatesDirectory}</directory>
<includes>
<include>profile.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
<execution>
<id>copy-distro-resources</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${distroDirectory}</outputDirectory>
<resources>
<resource>
<directory>${templatesDirectory}</directory>
<excludes>
<exclude>profile.xml</exclude>
<exclude>descriptor.xml</exclude>
</excludes>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>2.5</version>
<configuration>
<filesets>
<fileset>
<directory>${distroDirectory}</directory>
<includes>
<include>**</include>
</includes>
<followSymlinks>false</followSymlinks>
</fileset>
<fileset>
<directory>${configDirectory}</directory>
<includes>
<include>**</include>
</includes>
<followSymlinks>false</followSymlinks>
</fileset>
</filesets>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2</version>
<configuration>
<descriptors>
<descriptor>${templatesDirectory}/descriptor.xml</descriptor>
</descriptors>
<finalName>${project.build.finalName}</finalName>
</configuration>
<executions>
<execution>
<id>servicearchive</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.gcube.distribution</groupId>
<artifactId>maven-portal-bom</artifactId>
<version>LATEST</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>

@ -0,0 +1,179 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.client;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.client.Window;
import com.sencha.gxt.core.client.dom.XDOM;
import com.sencha.gxt.core.client.dom.XElement;
import com.sencha.gxt.widget.core.client.container.SimpleContainer;
import com.sencha.gxt.widget.core.client.container.Viewport.ViewportAppearance;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class PortalViewport extends SimpleContainer {
protected int rightScrollBarSize = 17;
protected boolean enableScroll;
/**
* Creates a viewport layout container with the default appearance.
*/
public PortalViewport() {
this(GWT.<ViewportAppearance> create(ViewportAppearance.class));
}
/**
* Creates a viewport layout container with the specified appearance.
*
* @param appearance
* the appearance of the viewport layout container
*/
public PortalViewport(ViewportAppearance appearance) {
super(true);
try {
SafeHtmlBuilder sb = new SafeHtmlBuilder();
appearance.render(sb);
XElement element=XDOM.create(sb.toSafeHtml());
setElement((Element)element);
monitorWindowResize = true;
forceLayoutOnResize = true;
getFocusSupport().setIgnore(false);
resize();
} catch (Exception e) {
Log.error("PortalViewport: constructor error "
+ e.getLocalizedMessage());
}
}
/**
* Returns true if window scrolling is enabled.
*
* @return true if window scrolling is enabled
*/
public boolean isEnableScroll() {
return enableScroll;
}
/**
* Sets whether window scrolling is enabled.
*
* @param enableScroll
* true to enable window scrolling
*/
public void setEnableScroll(boolean enableScroll) {
this.enableScroll = enableScroll;
Window.enableScrolling(enableScroll);
}
/**
* @return the rightScrollBarSize
*/
public int getRightScrollBarSize() {
return rightScrollBarSize;
}
/**
* @param rightScrollBarSize
* the rightScrollBarSize to set
*/
public void setRightScrollBarSize(int rightScrollBarSize) {
this.rightScrollBarSize = rightScrollBarSize;
}
@Override
protected void onAttach() {
super.onAttach();
setEnableScroll(enableScroll);
resize();
}
protected void resize() {
int viewWidth;
if(enableScroll){
viewWidth= calculateWidth() - rightScrollBarSize;
} else {
viewWidth = calculateWidth();
}
int viewHeight = calculateHeight();
Log.info("AM resize viewWidth: " + viewWidth + " viewHeight: "
+ viewHeight + " clientWidth: " + Window.getClientWidth()
+ " clientHeight: " + Window.getClientHeight());
try {
setPixelSize(viewWidth, viewHeight);
} catch (Exception e) {
Log.error("PortalViewport: error in resize() at setPixelSize "
+ e.getLocalizedMessage());
}
}
/**
* {@inheritDoc}
*/
@Override
protected void onWindowResize(int width, int height) {
int viewWidth = calculateWidth();
int viewHeight = calculateHeight();
Log.trace("AM onWindowResize viewWidth: " + viewWidth
+ " viewHeight: " + viewHeight + " clientWidth: "
+ Window.getClientWidth() + " clientHeight: "
+ Window.getClientHeight());
setPixelSize(viewWidth, viewHeight);
}
/**
* Update window size
*/
/*
* public void resize(){
*
* RootPanel workspace = RootPanel.get("tdp");
*
* int topBorder = workspace.getAbsoluteTop();
*
* int leftBorder = workspace.getAbsoluteLeft();
*
* int footer = 85;
*
* int rootHeight = (Window.getClientHeight() - topBorder - 4 - footer);// -
* ((footer == null)?0:(footer.getOffsetHeight()-15));
*
* if (rootHeight < 550) rootHeight = 550;
*
* int rootWidth = Window.getClientWidth() - 2* leftBorder; //-
* rightScrollBar;
*
* System.out.println("New workspace dimension Height: "+rootHeight+" Width: "
* +rootWidth);
*
* this.setHeight(rootHeight); this.setWidth(rootWidth); }
*/
protected int calculateWidth() {
int leftBorder = getAbsoluteLeft();
Log.info("AM width: "
+ String.valueOf(Window.getClientWidth() - 2 * leftBorder));
return Window.getClientWidth() - 2 * leftBorder;
}
protected int calculateHeight() {
int topBorder = getAbsoluteTop();
Log.info("AM height: "
+ String.valueOf(Window.getClientHeight() - topBorder - 34));
return Window.getClientHeight() - topBorder - 34;
}
}

@ -0,0 +1,143 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.maindata.MainDataPanel;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.resource.StatAlgoImporterResources;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.ribbon.StatAlgoImporterRibbon;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.rpc.StatAlgoImporterService;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.rpc.StatAlgoImporterServiceAsync;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.EntryPoint;
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.event.shared.EventBus;
import com.google.gwt.user.client.ui.RootPanel;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer;
import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer.BorderLayoutData;
import com.sencha.gxt.widget.core.client.container.MarginData;
import com.sencha.gxt.widget.core.client.container.Viewport;
/**
*
* @author "Giancarlo Panichi" <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class StatAlgoImporter implements EntryPoint {
private static final String JSP_TAG_ID = "StatisticalRunnerPortlet";
private static final int RIBBON_HEIGHT = 120;
@SuppressWarnings("unused")
private final StatAlgoImporterServiceAsync statRunnerService = GWT
.create(StatAlgoImporterService.class);
// Main Panel
private static BorderLayoutContainer mainPanelLayout;
/**
* {@inheritDoc}
*/
public void onModuleLoad() {
/*
* Install an UncaughtExceptionHandler which will produce
* <code>FATAL</code> log messages
*/
Log.setUncaughtExceptionHandler();
// use deferred command to catch initialization exceptions in
// onModuleLoad2
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
public void execute() {
loadMainPanel();
}
});
}
protected void loadMainPanel() {
StatAlgoImporterResources.INSTANCE.srCSS().ensureInjected();
// ScriptInjector.fromString(AccountingManagerResources.INSTANCE.jqueryJs().getText()).setWindow(ScriptInjector.TOP_WINDOW).inject();
StatAlgoImporterController controller = new StatAlgoImporterController();
EventBus eventBus = controller.getEventBus();
// Layout
mainPanelLayout = new BorderLayoutContainer();
mainPanelLayout.setId("mainPanelLayout");
mainPanelLayout.setBorders(false);
mainPanelLayout.setResize(true);
// mainPanelLayout.getElement().getStyle().setBackgroundColor("rgb(3, 126, 207)");
// Main
final MainDataPanel mainDataPanel = new MainDataPanel(eventBus);
MarginData mainData = new MarginData(new Margins(2));
mainPanelLayout.setCenterWidget(mainDataPanel, mainData);
// Menu
StatAlgoImporterRibbon accountingManagerMenu = new StatAlgoImporterRibbon(
eventBus);
BorderLayoutData ribbonData = new BorderLayoutData(RIBBON_HEIGHT);
ribbonData.setMargins(new Margins(2));
ribbonData.setCollapsible(false);
ribbonData.setSplit(false);
mainPanelLayout.setNorthWidget(accountingManagerMenu.getContainer(),
ribbonData);
// Tools
/*
* CodeUploadPanel codeUploadPanel=new CodeUploadPanel(eventBus);
* BorderLayoutData westData = new BorderLayoutData(310);
* westData.setCollapsible(false); westData.setSplit(false);
* westData.setFloatable(false); westData.setCollapseMini(false);
* westData.setMargins(new Margins(2, 7, 2, 7));
* westData.setCollapseHidden(true); westData.setMaxSize(310);
* westData.setMinSize(310);
* mainPanelLayout.setWestWidget(codeUploadPanel, westData);
* codeUploadPanel.expand(); codeUploadPanel.enable();
*/
bind(mainPanelLayout);
controller.setMainPanelLayout(mainPanelLayout);
controller.restoreUISession();
}
protected void bind(BorderLayoutContainer mainWidget) {
try {
RootPanel root = RootPanel.get(JSP_TAG_ID);
Log.info("Root Panel: " + root);
if (root == null) {
Log.info("Div with id " + JSP_TAG_ID
+ " not found, starting in dev mode");
Viewport viewport = new Viewport();
viewport.setWidget(mainWidget);
viewport.onResize();
RootPanel.get().add(viewport);
} else {
Log.info("Application div with id " + JSP_TAG_ID
+ " found, starting in portal mode");
PortalViewport viewport = new PortalViewport();
Log.info("Created Viewport");
viewport.setEnableScroll(false);
viewport.setWidget(mainWidget);
Log.info("Set Widget");
Log.info("getOffsetWidth(): " + viewport.getOffsetWidth());
Log.info("getOffsetHeight(): " + viewport.getOffsetHeight());
viewport.onResize();
root.add(viewport);
Log.info("Added viewport to root");
}
} catch (Exception e) {
e.printStackTrace();
Log.error("Error in attach viewport:" + e.getLocalizedMessage());
}
}
}

@ -0,0 +1,241 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client;
import java.util.Date;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.ImportCodeEvent;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.SessionExpiredEvent;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.ShowCodeEvent;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.StatAlgoImporterRibbonEvent;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.UIStateEvent;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.rpc.StatAlgoImporterServiceAsync;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.type.SessionExpiredType;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.type.StatAlgoImporterRibbonType;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.type.UIStateType;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.upload.CodeUploadDialog;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.upload.ImportCodeDescription;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.utils.UtilsGXT3;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.Constants;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterSessionExpiredException;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.session.UserInfo;
import org.gcube.portlets.widgets.sessionchecker.client.CheckSession;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.SimpleEventBus;
import com.google.gwt.i18n.client.LocaleInfo;
import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer;
/**
*
* @author "Giancarlo Panichi" <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class StatAlgoImporterController {
private SimpleEventBus eventBus;
private UserInfo userInfo;
@SuppressWarnings("unused")
private BorderLayoutContainer mainPanel;
public StatAlgoImporterController() {
eventBus = new SimpleEventBus();
init();
}
private void init() {
callHello();
checkSession();
bindToEvents();
}
private void checkSession() {
// if you do not need to something when the session expire
CheckSession.getInstance().startPolling();
}
private void sessionExpiredShow() {
CheckSession.showLogoutDialog();
}
/**
* @return the eventBus
*/
public EventBus getEventBus() {
return eventBus;
}
public void setMainPanelLayout(BorderLayoutContainer mainPanel) {
this.mainPanel = mainPanel;
}
private void callHello() {
StatAlgoImporterServiceAsync.INSTANCE.hello(new AsyncCallback<UserInfo>() {
@Override
public void onFailure(Throwable caught) {
Log.info("No valid user found: " + caught.getMessage());
if (caught instanceof StatAlgoImporterSessionExpiredException) {
UtilsGXT3.alert("Error", "Expired Session");
sessionExpiredShowDelayed();
} else {
UtilsGXT3.alert("Error", "No user found: "+caught.getLocalizedMessage());
}
}
@Override
public void onSuccess(UserInfo result) {
userInfo = result;
Log.info("Hello: " + userInfo.getUsername());
}
});
}
private void sessionExpiredShowDelayed() {
Timer timeoutTimer = new Timer() {
public void run() {
sessionExpiredShow();
}
};
int TIMEOUT = 3; // 3 second timeout
timeoutTimer.schedule(TIMEOUT * 1000); // timeout is in milliseconds
}
protected void checkLocale() {
String[] locales = LocaleInfo.getAvailableLocaleNames();
for (String locale : locales) {
Log.debug("Locale avaible:" + locale);
}
String currentLocaleCookie = Cookies.getCookie(LocaleInfo
.getLocaleCookieName());
Log.debug(Constants.STATRUNNER_LANG_COOKIE + ":" + currentLocaleCookie);
LocaleInfo currentLocaleInfo = LocaleInfo.getCurrentLocale();
Log.debug("Current Locale:" + currentLocaleInfo.getLocaleName());
}
protected void changeLanguage(String localeName) {
Date now = new Date();
long nowLong = now.getTime();
nowLong = nowLong + (1000 * 60 * 60 * 24 * 21);
now.setTime(nowLong);
String cookieLang = Cookies.getCookie(Constants.STATRUNNER_LANG_COOKIE);
if (cookieLang != null) {
Cookies.removeCookie(Constants.STATRUNNER_LANG_COOKIE);
}
Cookies.setCookie(Constants.STATRUNNER_LANG_COOKIE, localeName, now);
com.google.gwt.user.client.Window.Location.reload();
}
//
public void restoreUISession() {
checkLocale();
}
// Bind Controller to events on bus
private void bindToEvents() {
eventBus.addHandler(SessionExpiredEvent.TYPE,
new SessionExpiredEvent.SessionExpiredEventHandler() {
@Override
public void onSessionExpired(SessionExpiredEvent event) {
Log.debug("Catch Event SessionExpiredEvent");
doSessionExpiredCommand(event);
}
});
eventBus.addHandler(StatAlgoImporterRibbonEvent.TYPE,
new StatAlgoImporterRibbonEvent.StatRunnerRibbonEventHandler() {
@Override
public void onSelect(StatAlgoImporterRibbonEvent event) {
Log.debug("Catch StatRunnerRibbonEvent");
doMenuCommand(event);
}
});
eventBus.addHandler(ImportCodeEvent.TYPE,
new ImportCodeEvent.ImportCodeEventHandler() {
@Override
public void onImportCode(ImportCodeEvent event) {
Log.debug("Catch ImportCodeEvent");
doImportCodeCommand(event);
}
});
eventBus.fireEvent(new UIStateEvent(UIStateType.START));
}
private void doMenuCommand(StatAlgoImporterRibbonEvent event) {
StatAlgoImporterRibbonType eventType=event.getStatRunnerRibbonType();
if(eventType==null){
return;
}
switch(eventType){
case HELP:
break;
case CREATE_ALGORITHM:
break;
case UPLOAD_CODE:
showCodeUploadPanel();
break;
default:
break;
}
}
private void doImportCodeCommand(ImportCodeEvent event) {
ImportCodeDescription importCodeDesc=event.getImportCodeDescription();
if(importCodeDesc!=null && importCodeDesc.getImportCodeType()!=null){
ShowCodeEvent showCodeEvent=new ShowCodeEvent(importCodeDesc);
eventBus.fireEvent(showCodeEvent);
}
}
private void showCodeUploadPanel() {
CodeUploadDialog codeUploadDialog=new CodeUploadDialog(eventBus);
codeUploadDialog.show();
}
private void doSessionExpiredCommand(SessionExpiredEvent event) {
Log.debug("Session Expired Event: " + event.getSessionExpiredType());
sessionExpiredShow();
}
@SuppressWarnings("unused")
private void asyncCodeLoadingFailed(Throwable reason) {
Log.error("Async code loading failed", reason);
eventBus.fireEvent(new SessionExpiredEvent(
SessionExpiredType.EXPIREDONSERVER));
}
}

@ -0,0 +1,70 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.event;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.upload.ImportCodeDescription;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.event.shared.HasHandlers;
/**
* Import Code Event
*
*
* @author "Giancarlo Panichi" <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class ImportCodeEvent extends
GwtEvent<ImportCodeEvent.ImportCodeEventHandler> {
public static Type<ImportCodeEventHandler> TYPE = new Type<ImportCodeEventHandler>();
private ImportCodeDescription importCodeDescription;
public interface ImportCodeEventHandler extends EventHandler {
void onImportCode(ImportCodeEvent event);
}
public interface HasImportCodeEventHandler extends HasHandlers {
public HandlerRegistration addImportCodeEventHandler(
ImportCodeEventHandler handler);
}
public ImportCodeEvent(ImportCodeDescription importCodeDescription) {
this.importCodeDescription = importCodeDescription;
}
@Override
protected void dispatch(ImportCodeEventHandler handler) {
handler.onImportCode(this);
}
@Override
public Type<ImportCodeEventHandler> getAssociatedType() {
return TYPE;
}
public static Type<ImportCodeEventHandler> getType() {
return TYPE;
}
public static void fire(HasHandlers source,
ImportCodeEvent importCodeEvent) {
source.fireEvent(importCodeEvent);
}
public ImportCodeDescription getImportCodeDescription() {
return importCodeDescription;
}
@Override
public String toString() {
return "ImportCodeEvent [importCodeDescription="
+ importCodeDescription + "]";
}
}

@ -0,0 +1,64 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.event;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.type.SessionExpiredType;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.event.shared.HasHandlers;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class SessionExpiredEvent extends GwtEvent<SessionExpiredEvent.SessionExpiredEventHandler> {
public static Type<SessionExpiredEventHandler> TYPE = new Type<SessionExpiredEventHandler>();
private SessionExpiredType sessionExpiredType;
public interface SessionExpiredEventHandler extends EventHandler {
void onSessionExpired(SessionExpiredEvent event);
}
public interface HasSessionExpiredEventHandler extends HasHandlers{
public HandlerRegistration addSessionExpiredEventHandler(SessionExpiredEventHandler handler);
}
public SessionExpiredEvent(SessionExpiredType sessionExpiredType) {
this.sessionExpiredType = sessionExpiredType;
}
@Override
protected void dispatch(SessionExpiredEventHandler handler) {
handler.onSessionExpired(this);
}
@Override
public Type<SessionExpiredEventHandler> getAssociatedType() {
return TYPE;
}
public static Type<SessionExpiredEventHandler> getType() {
return TYPE;
}
public static void fire(HasHandlers source, SessionExpiredType sessionExpiredType) {
source.fireEvent(new SessionExpiredEvent(sessionExpiredType));
}
public SessionExpiredType getSessionExpiredType() {
return sessionExpiredType;
}
@Override
public String toString() {
return "SessionExpiredEvent [sessionExpiredType=" + sessionExpiredType
+ "]";
}
}

@ -0,0 +1,73 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.event;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.upload.ImportCodeDescription;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.event.shared.HasHandlers;
/**
* Show Code Event
*
*
* @author "Giancarlo Panichi" <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class ShowCodeEvent extends
GwtEvent<ShowCodeEvent.ShowCodeEventHandler> {
public static Type<ShowCodeEventHandler> TYPE = new Type<ShowCodeEventHandler>();
private ImportCodeDescription importCodeDescription;
public interface ShowCodeEventHandler extends EventHandler {
void onShowCode(ShowCodeEvent event);
}
public interface HasShowCodeEventHandler extends HasHandlers {
public HandlerRegistration addShowCodeEventHandler(
ShowCodeEventHandler handler);
}
public ShowCodeEvent(ImportCodeDescription importCodeDescription) {
this.importCodeDescription = importCodeDescription;
}
@Override
protected void dispatch(ShowCodeEventHandler handler) {
handler.onShowCode(this);
}
@Override
public Type<ShowCodeEventHandler> getAssociatedType() {
return TYPE;
}
public static Type<ShowCodeEventHandler> getType() {
return TYPE;
}
public static void fire(HasHandlers source,
ShowCodeEvent importCodeEvent) {
source.fireEvent(importCodeEvent);
}
public ImportCodeDescription getImportCodeDescription() {
return importCodeDescription;
}
@Override
public String toString() {
return "ShowCodeEvent [importCodeDescription=" + importCodeDescription
+ "]";
}
}

@ -0,0 +1,66 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.event;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.type.StatAlgoImporterRibbonType;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.event.shared.HasHandlers;
/**
*
* @author "Giancarlo Panichi" <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class StatAlgoImporterRibbonEvent extends
GwtEvent<StatAlgoImporterRibbonEvent.StatRunnerRibbonEventHandler> {
public static Type<StatRunnerRibbonEventHandler> TYPE = new Type<StatRunnerRibbonEventHandler>();
private StatAlgoImporterRibbonType statAlgoImporterRibbonType;
public interface StatRunnerRibbonEventHandler extends EventHandler {
void onSelect(StatAlgoImporterRibbonEvent event);
}
public interface HasStatRunnerRibbonEventHandler extends HasHandlers {
public HandlerRegistration addStatRunnerRibbonEventHandler(
StatRunnerRibbonEventHandler handler);
}
public StatAlgoImporterRibbonEvent(StatAlgoImporterRibbonType statRunnerRibbonType) {
this.statAlgoImporterRibbonType = statRunnerRibbonType;
}
@Override
protected void dispatch(StatRunnerRibbonEventHandler handler) {
handler.onSelect(this);
}
@Override
public Type<StatRunnerRibbonEventHandler> getAssociatedType() {
return TYPE;
}
public static Type<StatRunnerRibbonEventHandler> getType() {
return TYPE;
}
public static void fire(HasHandlers source,
StatAlgoImporterRibbonEvent statRunnerRibbonEvent) {
source.fireEvent(statRunnerRibbonEvent);
}
public StatAlgoImporterRibbonType getStatRunnerRibbonType() {
return statAlgoImporterRibbonType;
}
@Override
public String toString() {
return "StatAlgoImporterRibbonEvent [statAlgoImporterRibbonType="
+ statAlgoImporterRibbonType + "]";
}
}

@ -0,0 +1,67 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.event;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.type.UIStateType;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.event.shared.HasHandlers;
/**
*
* @author "Giancarlo Panichi" <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class UIStateEvent extends GwtEvent<UIStateEvent.UIStateHandler> {
public static Type<UIStateHandler> TYPE = new Type<UIStateHandler>();
private UIStateType uiStateType;
public interface UIStateHandler extends EventHandler {
void onUIState(UIStateEvent event);
}
public interface HasUIStateHandler extends HasHandlers {
public HandlerRegistration addUIStateHandler(UIStateHandler handler);
}
public UIStateEvent(UIStateType uiStateType) {
this.uiStateType = uiStateType;
}
@Override
protected void dispatch(UIStateHandler handler) {
handler.onUIState(this);
}
@Override
public Type<UIStateHandler> getAssociatedType() {
return TYPE;
}
public static Type<UIStateHandler> getType() {
return TYPE;
}
public static void fire(HasHandlers source, UIStateEvent uiStateEvent) {
source.fireEvent(uiStateEvent);
}
public UIStateType getUiStateType() {
return uiStateType;
}
@Override
public String toString() {
return "UIStateEvent [uiStateType=" + uiStateType + "]";
}
}

@ -0,0 +1,493 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.maindata;
import java.util.ArrayList;
import java.util.List;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.SessionExpiredEvent;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.properties.CodeDataProperties;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.resource.StatAlgoImporterResources;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.rpc.StatAlgoImporterServiceAsync;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.type.SessionExpiredType;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.utils.UtilsGXT3;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.code.CodeData;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterSessionExpiredException;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.cell.client.AbstractCell;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.TextAlign;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.safecss.shared.SafeStylesBuilder;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sencha.gxt.core.client.IdentityValueProvider;
import com.sencha.gxt.core.client.Style.SelectionMode;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.data.shared.ListStore;
import com.sencha.gxt.dnd.core.client.DND.Operation;
import com.sencha.gxt.dnd.core.client.GridDragSource;
import com.sencha.gxt.dnd.core.client.GridDropTarget;
import com.sencha.gxt.widget.core.client.ContentPanel;
import com.sencha.gxt.widget.core.client.container.MarginData;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
import com.sencha.gxt.widget.core.client.form.FieldLabel;
import com.sencha.gxt.widget.core.client.grid.CheckBoxSelectionModel;
import com.sencha.gxt.widget.core.client.grid.ColumnConfig;
import com.sencha.gxt.widget.core.client.grid.ColumnModel;
import com.sencha.gxt.widget.core.client.grid.Grid;
import com.sencha.gxt.widget.core.client.grid.RowNumberer;
import com.sencha.gxt.widget.core.client.menu.Item;
import com.sencha.gxt.widget.core.client.menu.Menu;
import com.sencha.gxt.widget.core.client.menu.MenuItem;
/**
*
* @author giancarlo email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class CodeViewerPanel extends ContentPanel {
private static final String GRID_CODE_HEIGHT = "300px";
private static final String GRID_IO_HEIGHT = "100px";
private static final String SET_INPUT = "SetInput";
private EventBus eventBus;
private ListStore<CodeData> storeCode;
private Grid<CodeData> gridCode;
private ListStore<CodeData> storeInput;
private Grid<CodeData> gridInput;
private ListStore<CodeData> storeOutput;
private Grid<CodeData> gridOutput;
// private TextField fileNameField;
public CodeViewerPanel(EventBus eventBus) {
super();
Log.debug("CodeViewerPanel");
this.eventBus = eventBus;
// msgs = GWT.create(ServiceCategoryMessages.class);
init();
create();
}
private void init() {
forceLayoutOnResize = true;
setBodyBorder(false);
setBorders(false);
setHeaderVisible(false);
setResize(true);
}
private void create() {
/*
* ToolBar toolBar = new ToolBar();
*
* toolBar.add(new LabelToolItem("File: ")); fileNameField=new
* TextField(); fileNameField.setWidth("250px");
* toolBar.add(fileNameField);
*/
/*
* toolBar.add(new LabelToolItem("Search: ")); final TextField
* searchField = new TextField(); toolBar.add(searchField);
*
* TextButton btnReload = new TextButton(); //
* btnReload.setText("Reload");
* btnReload.setIcon(StatisticalRunnerResources.INSTANCE.reload24());
* btnReload.setToolTip("Reload"); toolBar.add(btnReload);
*/
CodeDataProperties props = GWT.create(CodeDataProperties.class);
/*
* storeCode.addFilter(new StoreFilter<CodeData>() {
*
* public boolean select(Store<CodeData> store, CodeData parent,
* CodeData item) { String searchTerm = searchField.getCurrentValue();
* if (searchTerm == null) return true; return
* CodeViewerPanel.this.select(item, searchTerm); } });
*
* storeCode.setEnableFilters(true);
*/
// The row numberer for the first column
RowNumberer<CodeData> numbererColumn = new RowNumberer<CodeData>();
numbererColumn.setSortable(false);
numbererColumn.setHeader("N.");
numbererColumn.setWidth(80);
numbererColumn.setResizable(true);
// numbererColumn.setHorizontalAlignment(HorizontalAlignmentConstant.endOf(Direction.LTR));
// numbererColumn.setColumnStyle(ss.toSafeStyles());
SafeStylesBuilder ss = new SafeStylesBuilder()
.textAlign(TextAlign.CENTER);
ColumnConfig<CodeData, Integer> codeIdColumn = new ColumnConfig<CodeData, Integer>(
props.id(), 80, "N.");
codeIdColumn.setSortable(false);
codeIdColumn.setColumnStyle(ss.toSafeStyles());
ColumnConfig<CodeData, String> codeLineColumn = new ColumnConfig<CodeData, String>(
props.codeLine(), 100, "Code");
codeLineColumn.setCell(new AbstractCell<String>(){
@Override
public void render(Context context,
String value, SafeHtmlBuilder sb) {
Log.debug(value);
SafeHtmlBuilder shb=new SafeHtmlBuilder();
shb.appendEscaped(value);
sb.appendHtmlConstant("<pre>"+shb.toSafeHtml().asString()+"</pre>");
}
});
codeLineColumn.setSortable(false);
// Grid Code
List<ColumnConfig<CodeData, ?>> gridCodeColumns = new ArrayList<ColumnConfig<CodeData, ?>>();
gridCodeColumns.add(numbererColumn);
gridCodeColumns.add(codeLineColumn);
ColumnModel<CodeData> gridCodeColumnModel = new ColumnModel<CodeData>(
gridCodeColumns);
IdentityValueProvider<CodeData> identityCode = new IdentityValueProvider<CodeData>();
final CheckBoxSelectionModel<CodeData> smCode = new CheckBoxSelectionModel<CodeData>(
identityCode);
smCode.setSelectionMode(SelectionMode.SINGLE);
storeCode = new ListStore<CodeData>(props.code());
gridCode = new Grid<CodeData>(storeCode, gridCodeColumnModel) {
@Override
protected void onAfterFirstAttach() {
// TODO Auto-generated method stub
super.onAfterFirstAttach();
loadData();
}
};
gridCode.setSelectionModel(smCode);
gridCode.getView().setStripeRows(true);
gridCode.getView().setColumnLines(true);
gridCode.getView().setAutoFill(true);
gridCode.setBorders(false);
gridCode.setLoadMask(true);
gridCode.setHeight(GRID_CODE_HEIGHT);
gridCode.setColumnReordering(false);
gridCode.setColumnResize(false);
// gridCode.getView().setAutoExpandColumn(codeLineColumn);
// Initialize the row numberer
numbererColumn.initPlugin(gridCode);
// GridFilters<CodeData> filtersSelectedRules = new
// GridFilters<CodeData>();
// filtersSelectedRules.initPlugin(gridInput);
// filtersSelectedRules.setLocal(true);
// filtersSelectedRules.addFilter(nameFilter);
// filtersSelectedRules.addFilter(descriptionFilter);
/*
* grid.addRowDoubleClickHandler(new RowDoubleClickHandler() {
*
* @Override public void onRowDoubleClick(RowDoubleClickEvent event) {
* int rowIndex = event.getRowIndex(); requestOpen(rowIndex); }
*
* });
*/
/*
* SelectHandler sh = new SelectHandler() { public void
* onSelect(SelectEvent event) { loadData(); } };
*
* btnReload.addSelectHandler(sh);
*/
createContextMenuGridCode();
// Grid Input
List<ColumnConfig<CodeData, ?>> gridInputColumns = new ArrayList<ColumnConfig<CodeData, ?>>();
gridInputColumns.add(codeIdColumn);
gridInputColumns.add(codeLineColumn);
ColumnModel<CodeData> gridInputColumnModel = new ColumnModel<CodeData>(
gridInputColumns);
IdentityValueProvider<CodeData> identityInput = new IdentityValueProvider<CodeData>();
final CheckBoxSelectionModel<CodeData> smInput = new CheckBoxSelectionModel<CodeData>(
identityInput);
smInput.setSelectionMode(SelectionMode.SINGLE);
storeInput = new ListStore<CodeData>(props.code());
gridInput = new Grid<CodeData>(storeInput, gridInputColumnModel);
gridInput.setSelectionModel(smInput);
gridInput.getView().setStripeRows(true);
gridInput.getView().setColumnLines(true);
gridInput.getView().setAutoFill(true);
gridInput.setBorders(false);
gridInput.setLoadMask(true);
gridInput.setHeight(GRID_IO_HEIGHT);
gridInput.setColumnReordering(false);
gridInput.setColumnResize(false);
gridInput.getView().setAutoExpandColumn(codeLineColumn);
createContextMenuGridInput();
// Output
List<ColumnConfig<CodeData, ?>> gridOutputColumns = new ArrayList<ColumnConfig<CodeData, ?>>();
gridOutputColumns.add(codeIdColumn);
gridOutputColumns.add(codeLineColumn);
ColumnModel<CodeData> gridOutputColumnModel = new ColumnModel<CodeData>(
gridOutputColumns);
IdentityValueProvider<CodeData> identityOutput = new IdentityValueProvider<CodeData>();
final CheckBoxSelectionModel<CodeData> smOutput = new CheckBoxSelectionModel<CodeData>(
identityOutput);
smOutput.setSelectionMode(SelectionMode.SINGLE);
storeOutput = new ListStore<CodeData>(props.code());
gridOutput = new Grid<CodeData>(storeOutput, gridOutputColumnModel);
gridOutput.setSelectionModel(smOutput);
gridOutput.getView().setStripeRows(true);
gridOutput.getView().setColumnLines(true);
gridOutput.getView().setAutoFill(true);
gridOutput.setBorders(false);
gridOutput.setLoadMask(true);
gridOutput.setHeight(GRID_IO_HEIGHT);
gridOutput.setColumnReordering(false);
gridOutput.setColumnResize(false);
gridOutput.getView().setAutoExpandColumn(codeLineColumn);
createContextMenuGridOutput();
// DND
GridDragSource<CodeData> sourceCode = new GridDragSource<CodeData>(
gridCode);
sourceCode.setGroup(SET_INPUT);
GridDropTarget<CodeData> targetInput = new GridDropTarget<CodeData>(
gridInput);
targetInput.setGroup(SET_INPUT);
targetInput.setOperation(Operation.COPY);
GridDropTarget<CodeData> targetOutput = new GridDropTarget<CodeData>(
gridOutput);
targetOutput.setGroup(SET_INPUT);
targetOutput.setOperation(Operation.COPY);
// Label
FieldLabel gridCodeLabel = new FieldLabel(gridCode, "Code");
gridCodeLabel.setLabelWidth(50);
FieldLabel gridInputLabel = new FieldLabel(gridInput, "Input");
gridInputLabel.setLabelWidth(50);
FieldLabel gridOutputLabel = new FieldLabel(gridOutput, "Output");
gridOutputLabel.setLabelWidth(50);
//
VerticalLayoutContainer con = new VerticalLayoutContainer();
// con.setAdjustForScroll(false);
// con.setScrollMode(ScrollMode.AUTO);
con.add(gridCodeLabel, new VerticalLayoutData(1, 1, new Margins(0)));
con.add(gridInputLabel, new VerticalLayoutData(1, -1, new Margins(0)));
con.add(gridOutputLabel, new VerticalLayoutData(1, -1, new Margins(0)));
add(con, new MarginData(new Margins(0)));
// add(gridCode, new MarginData(new Margins(0)));
}
private void createContextMenuGridCode() {
Menu contextMenuGridCode = new Menu();
MenuItem inputItem = new MenuItem("Input");
inputItem.setId("InputStatement");
inputItem.setIcon(StatAlgoImporterResources.INSTANCE.input16());
inputItem.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
if (gridCode != null) {
CodeData codeData = getGridCodeSelectedItem();
if (storeInput.findModel(codeData) == null) {
storeInput.add(new CodeData(codeData.getId(), codeData
.getCodeLine()));
storeInput.commitChanges();
}
// UtilsGXT3.info("Input", "Row " + codeData.getId()
// + " is set as input statement!");
}
}
});
contextMenuGridCode.add(inputItem);
MenuItem outputItem = new MenuItem("Output");
outputItem.setId("OutputStatement");
outputItem.setIcon(StatAlgoImporterResources.INSTANCE.output16());
outputItem.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
if (gridCode != null) {
CodeData codeData = getGridCodeSelectedItem();
if (storeOutput.findModel(codeData) == null) {
storeOutput.add(new CodeData(codeData.getId(), codeData
.getCodeLine()));
storeOutput.commitChanges();
}
// UtilsGXT3.info("Output", "Row " + codeData.getId()
// + " is set as otuput statement!");
}
}
});
contextMenuGridCode.add(outputItem);
gridCode.setContextMenu(contextMenuGridCode);
}
private void createContextMenuGridInput() {
Menu contextMenuGridInput = new Menu();
MenuItem deleteItem = new MenuItem("Delete");
deleteItem.setId("Delete");
deleteItem.setIcon(StatAlgoImporterResources.INSTANCE.input16());
deleteItem.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
if (gridInput != null) {
CodeData codeData = getGridInputSelectedItem();
storeInput.remove(codeData);
storeInput.commitChanges();
}
}
});
contextMenuGridInput.add(deleteItem);
gridInput.setContextMenu(contextMenuGridInput);
}
private void createContextMenuGridOutput() {
Menu contextMenuGridOutput = new Menu();
MenuItem deleteItem = new MenuItem("Delete");
deleteItem.setId("Delete");
deleteItem.setIcon(StatAlgoImporterResources.INSTANCE.input16());
deleteItem.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
if (gridOutput != null) {
CodeData codeData = getGridOutputSelectedItem();
storeOutput.remove(codeData);
storeOutput.commitChanges();
}
}
});
contextMenuGridOutput.add(deleteItem);
gridOutput.setContextMenu(contextMenuGridOutput);
}
private void loadData() {
StatAlgoImporterServiceAsync.INSTANCE
.getCode(new AsyncCallback<ArrayList<CodeData>>() {
public void onFailure(Throwable caught) {
if (caught instanceof StatAlgoImporterSessionExpiredException) {
eventBus.fireEvent(new SessionExpiredEvent(
SessionExpiredType.EXPIREDONSERVER));
} else {
Log.error("Error retrieving code: "
+ caught.getLocalizedMessage());
UtilsGXT3.alert("Error",
caught.getLocalizedMessage());
}
caught.printStackTrace();
}
public void onSuccess(ArrayList<CodeData> result) {
Log.debug("loaded " + result.size() + " code lines");
ArrayList<CodeData> availables = new ArrayList<CodeData>();
for (CodeData codeData : result) {
Log.debug("Read: " + codeData);
availables.add(codeData);
}
storeCode.clear();
storeCode.addAll(availables);
storeCode.commitChanges();
forceLayout();
}
});
}
/*
* private boolean select(CodeData item, String searchTerm) { if
* (item.getCodeLine() != null && item.getCodeLine().toLowerCase()
* .contains(searchTerm.toLowerCase())) return true; return false; }
*/
public HandlerRegistration addSelectionHandler(
SelectionHandler<CodeData> handler) {
return gridCode.getSelectionModel().addSelectionHandler(handler);
}
public CodeData getGridCodeSelectedItem() {
return gridCode.getSelectionModel().getSelectedItem();
}
public CodeData getGridInputSelectedItem() {
return gridInput.getSelectionModel().getSelectedItem();
}
public CodeData getGridOutputSelectedItem() {
return gridOutput.getSelectionModel().getSelectedItem();
}
public void gridReload() {
storeCode.clear();
storeCode.commitChanges();
storeInput.clear();
storeInput.commitChanges();
storeOutput.clear();
storeOutput.commitChanges();
gridCode.getSelectionModel().deselectAll();
gridInput.getSelectionModel().deselectAll();
gridOutput.getSelectionModel().deselectAll();
loadData();
}
}

@ -0,0 +1,72 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.maindata;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.ShowCodeEvent;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.event.shared.EventBus;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.widget.core.client.container.MarginData;
import com.sencha.gxt.widget.core.client.container.SimpleContainer;
/**
*
* @author giancarlo email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class MainDataPanel extends SimpleContainer {
private EventBus eventBus;
private CodeViewerPanel codeViewPanel;
public MainDataPanel(EventBus eventBus) {
super();
this.eventBus = eventBus;
init();
create();
bindToEvents();
}
protected void init() {
forceLayoutOnResize = true;
//setBodyBorder(false);
setBorders(false);
//setHeaderVisible(false);
}
protected void create() {
}
private void bindToEvents() {
eventBus.addHandler(ShowCodeEvent.TYPE,
new ShowCodeEvent.ShowCodeEventHandler() {
@Override
public void onShowCode(ShowCodeEvent event) {
Log.debug("Catch ShowCodeEvent");
doShowCodeCommand(event);
}
});
}
private void doShowCodeCommand(ShowCodeEvent event) {
if (codeViewPanel == null) {
addCodeViewPanel();
} else {
codeViewPanel.gridReload();
}
}
private void addCodeViewPanel() {
codeViewPanel = new CodeViewerPanel(eventBus);
add(codeViewPanel, new MarginData(new Margins(0)));
forceLayout();
}
}

@ -0,0 +1,63 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.monitor;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.sencha.gxt.widget.core.client.box.AutoProgressMessageBox;
/**
*
* @author giancarlo email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class StatAlgoImporterMonitor extends AutoProgressMessageBox {
public StatAlgoImporterMonitor(){
super("Waiting", "Please wait...");
create();
}
/**
*
* {@inheritDoc}
*/
public StatAlgoImporterMonitor(SafeHtml headingHtml, SafeHtml messageHtml) {
super(headingHtml, messageHtml);
create();
}
/**
*
* {@inheritDoc}
*/
public StatAlgoImporterMonitor(SafeHtml headingHtml) {
super(headingHtml);
create();
}
/**
*
* {@inheritDoc}
*/
public StatAlgoImporterMonitor(String headingHtml, String messageHtml) {
super(headingHtml, messageHtml);
create();
}
/**
*
* {@inheritDoc}
*/
public StatAlgoImporterMonitor(String headingHtml) {
super(headingHtml);
create();
}
private void create() {
setProgressText("Updating...");
auto();
show();
}
}

@ -0,0 +1,24 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.properties;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.code.CodeData;
import com.google.gwt.editor.client.Editor.Path;
import com.sencha.gxt.core.client.ValueProvider;
import com.sencha.gxt.data.shared.ModelKeyProvider;
import com.sencha.gxt.data.shared.PropertyAccess;
/**
*
* @author giancarlo
* email: <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public interface CodeDataProperties extends PropertyAccess<CodeData> {
@Path("id")
ModelKeyProvider<CodeData> code();
ValueProvider<CodeData, Integer> id();
ValueProvider<CodeData, String> codeLine();
}

@ -0,0 +1,7 @@
@CHARSET "UTF-8";
.ribbon {
line-height: 13px;
font-size: 11px;
}

@ -0,0 +1,20 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.resource;
import com.google.gwt.resources.client.CssResource;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public interface StatAlgoImporterCSS extends CssResource {
@ClassName("ribbon")
public String getRibbon();
}

@ -0,0 +1,54 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.resource;
import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource;
/**
*
* @author "Giancarlo Panichi" <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public interface StatAlgoImporterResources extends ClientBundle {
public static final StatAlgoImporterResources INSTANCE = GWT
.create(StatAlgoImporterResources.class);
@Source("StatAlgoImporter.css")
StatAlgoImporterCSS srCSS();
@Source("help_32.png")
ImageResource help32();
@Source("download_32.png")
ImageResource download32();
@Source("upload_32.png")
ImageResource upload32();
@Source("job_32.png")
ImageResource job32();
@Source("reload_32.png")
ImageResource reload32();
@Source("reload_24.png")
ImageResource reload24();
@Source("input_16.png")
ImageResource input16();
@Source("output_16.png")
ImageResource output16();
@Source("cancel_32.png")
ImageResource cancel32();
@Source("algorithm_32.png")
ImageResource algorithm32();
}

@ -0,0 +1,38 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.ribbon;
import com.sencha.gxt.widget.core.client.ContentPanel;
/**
*
* @author giancarlo
* email: <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class EmptyPanel extends ContentPanel {
private String id;
public EmptyPanel(String id){
this.id=id;
init();
}
private void init(){
setId(id);
setWidth(0);
setHeight(0);
setBodyBorder(false);
setBorders(false);
setHeaderVisible(false);
setVisible(false);
}
public String getId() {
return id;
}
}

@ -0,0 +1,282 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.ribbon;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.StatAlgoImporterRibbonEvent;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.UIStateEvent;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.resource.StatAlgoImporterResources;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.type.StatAlgoImporterRibbonType;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.type.UIStateType;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.web.bindery.event.shared.EventBus;
import com.sencha.gxt.cell.core.client.ButtonCell.ButtonArrowAlign;
import com.sencha.gxt.cell.core.client.ButtonCell.ButtonScale;
import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign;
import com.sencha.gxt.core.client.dom.XElement;
import com.sencha.gxt.widget.core.client.button.ButtonGroup;
import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
import com.sencha.gxt.widget.core.client.toolbar.ToolBar;
/**
*
* @author "Giancarlo Panichi" <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class HomeToolBar {
private static final String GROUP_HEIGHT = "80px";
private HomeToolBarMessages msgs;
private EventBus eventBus;
private ToolBar toolBar;
//Home
private TextButton importButton;
//Algorithm
private TextButton createAlgorithmButton;
// Help
private TextButton helpButton;
// private TextButton languageButton;
// private TextButton logsButton;
// private TextButton testButton;
// Language Menu
/*
* private MenuItem enItem; private MenuItem itItem; private MenuItem
* esItem;
*/
public HomeToolBar(EventBus eventBus) {
this.eventBus = eventBus;
msgs = GWT.create(HomeToolBarMessages.class);
build();
}
public ToolBar getToolBar() {
return toolBar;
}
protected void build() {
toolBar = new ToolBar();
toolBar.setSpacing(5);
toolBar.setEnableOverflow(false);
// Home
ButtonGroup homeGroup = new ButtonGroup();
homeGroup.setId("Home");
homeGroup.setHeadingText(msgs.fileGroupHeadingText());
homeGroup.setHeight(GROUP_HEIGHT);
toolBar.add(homeGroup);
FlexTable homeLayout = new FlexTable();
homeGroup.add(homeLayout);
importButton = new TextButton(msgs.importButton(),
StatAlgoImporterResources.INSTANCE.upload32());
importButton.setId("importButton");
importButton.setScale(ButtonScale.MEDIUM);
importButton.setIconAlign(IconAlign.LEFT);
importButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
importButton.setToolTip(msgs.importButtonToolTip());
importButton.addSelectHandler(new SelectHandler() {
public void onSelect(SelectEvent event) {
eventBus.fireEvent(new StatAlgoImporterRibbonEvent(
StatAlgoImporterRibbonType.UPLOAD_CODE));
}
});
homeLayout.setWidget(0, 0, importButton);
homeLayout.getFlexCellFormatter().setRowSpan(0, 0, 2);
// Algorithm
ButtonGroup algorithmGroup = new ButtonGroup();
algorithmGroup.setId("Algorithm");
algorithmGroup.setHeadingText(msgs.algorithmGroupHeadingText());
algorithmGroup.setHeight(GROUP_HEIGHT);
toolBar.add(algorithmGroup);
FlexTable algorithmLayout = new FlexTable();
algorithmGroup.add(algorithmLayout);
createAlgorithmButton = new TextButton(msgs.createAlgorithmButton(),
StatAlgoImporterResources.INSTANCE.algorithm32());
createAlgorithmButton.setId("createAlgorithmButton");
createAlgorithmButton.setScale(ButtonScale.MEDIUM);
createAlgorithmButton.setIconAlign(IconAlign.LEFT);
createAlgorithmButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
createAlgorithmButton.setToolTip(msgs.createAlgorithmButtonToolTip());
createAlgorithmButton.addSelectHandler(new SelectHandler() {
public void onSelect(SelectEvent event) {
eventBus.fireEvent(new StatAlgoImporterRibbonEvent(
StatAlgoImporterRibbonType.CREATE_ALGORITHM));
}
});
algorithmLayout.setWidget(0, 0, createAlgorithmButton);
algorithmLayout.getFlexCellFormatter().setRowSpan(0, 0, 2);
// Help
ButtonGroup helpGroup = new ButtonGroup();
helpGroup.setId("Help");
helpGroup.setHeight(GROUP_HEIGHT);
helpGroup.setHeadingText(msgs.helpGroupHeadingText());
toolBar.add(helpGroup);
FlexTable helpLayout = new FlexTable();
helpGroup.add(helpLayout);
/*
* languageButton = new TextButton(msgs.languageButton(),
* TabularDataResources.INSTANCE.language32()); languageButton.enable();
* languageButton.setScale(ButtonScale.LARGE);
* languageButton.setIconAlign(IconAlign.TOP);
* languageButton.setToolTip(msgs.languageButtonToolTip());
* languageButton.setArrowAlign(ButtonArrowAlign.RIGHT);
* languageButton.setMenu(createLanguageMenu());
*
* helpLayout.setWidget(0, 0, languageButton);
* helpLayout.getFlexCellFormatter().setRowSpan(0, 0, 2);
*/
helpButton = new TextButton(msgs.helpButton(),
StatAlgoImporterResources.INSTANCE.help32());
helpButton.enable();
helpButton.setToolTip(msgs.helpButtonToolTip());
helpButton.setScale(ButtonScale.MEDIUM);
helpButton.setIconAlign(IconAlign.LEFT);
helpButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
helpButton.addSelectHandler(new SelectHandler() {
public void onSelect(SelectEvent event) {
eventBus.fireEvent(new StatAlgoImporterRibbonEvent(
StatAlgoImporterRibbonType.HELP));
}
});
helpLayout.setWidget(0, 1, helpButton);
helpLayout.getFlexCellFormatter().setRowSpan(0, 1, 2);
/*
* logsButton = new TextButton("Logs",
* TabularDataResources.INSTANCE.logs32()); logsButton.enable();
* logsButton.setToolTip("Show Logs");
* logsButton.setScale(ButtonScale.LARGE);
* logsButton.setIconAlign(IconAlign.TOP);
* logsButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
* logsButton.addSelectHandler(new SelectHandler() {
*
* public void onSelect(SelectEvent event) { eventBus.fireEvent(new
* RibbonEvent(RibbonType.LOGS)); } });
*
* helpLayout.setWidget(0, 1, logsButton);
* helpLayout.getFlexCellFormatter().setRowSpan(0, 1, 2);
*/
/*
* testButton = new TextButton("Test",
* TabularDataResources.INSTANCE.test32()); testButton.disable();
* testButton.setToolTip("Test");
* testButton.setScale(ButtonScale.LARGE);
* testButton.setIconAlign(IconAlign.TOP);
* testButton.setArrowAlign(ButtonArrowAlign.BOTTOM);
* testButton.addSelectHandler(new SelectHandler() {
*
* public void onSelect(SelectEvent event) { eventBus.fireEvent(new
* RibbonEvent(RibbonType.TEST)); } });
*
* helpLayout.setWidget(0, 2, testButton);
* helpLayout.getFlexCellFormatter().setRowSpan(0, 2, 2);
*/
cleanCells(helpLayout.getElement());
eventBus.addHandler(UIStateEvent.TYPE,
new UIStateEvent.UIStateHandler() {
public void onUIState(UIStateEvent event) {
setUI(event);
}
});
}
private void cleanCells(Element elem) {
NodeList<Element> tds = elem.<XElement> cast().select("td");
for (int i = 0; i < tds.getLength(); i++) {
Element td = tds.getItem(i);
if (!td.hasChildNodes() && td.getClassName().equals("")) {
td.removeFromParent();
}
}
}
/*
* private Menu createLanguageMenu() { Menu menuReplace = new Menu(); enItem
* = new MenuItem(msgs.english(), TabularDataResources.INSTANCE.flagGB());
* itItem = new MenuItem(msgs.italian(),
* TabularDataResources.INSTANCE.flagIT()); esItem = new
* MenuItem(msgs.spanish(), TabularDataResources.INSTANCE.flagES());
*
* enItem .addSelectionHandler(new SelectionHandler<Item>() {
*
* @Override public void onSelection(SelectionEvent<Item> event) {
* eventBus.fireEvent(new RibbonEvent( RibbonType.LANGUAGE_EN));
*
* } });
*
* itItem .addSelectionHandler(new SelectionHandler<Item>() {
*
* @Override public void onSelection(SelectionEvent<Item> event) {
* eventBus.fireEvent(new RibbonEvent( RibbonType.LANGUAGE_IT));
*
* } });
*
* esItem .addSelectionHandler(new SelectionHandler<Item>() {
*
* @Override public void onSelection(SelectionEvent<Item> event) {
* eventBus.fireEvent(new RibbonEvent( RibbonType.LANGUAGE_ES));
*
* } });
*
* menuReplace.add(enItem); menuReplace.add(esItem);
* menuReplace.add(itItem); return menuReplace; }
*/
public void setUI(UIStateEvent event) {
UIStateType uiStateType = event.getUiStateType();
try {
switch (uiStateType) {
case START:
importButton.enable();
createAlgorithmButton.enable();
helpButton.enable();
// testButton.disable();
break;
default:
break;
}
} catch (Exception e) {
Log.error("setUI Error : " + e.getLocalizedMessage());
}
}
}

@ -0,0 +1,63 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.ribbon;
import com.google.gwt.i18n.client.Messages;
/**
*
* @author giancarlo
* email: <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public interface HomeToolBarMessages extends Messages {
//
@DefaultMessage("Code")
String fileGroupHeadingText();
@DefaultMessage("Import")
String importButton();
@DefaultMessage("Import Code")
String importButtonToolTip();
//
@DefaultMessage("Help")
String helpGroupHeadingText();
@DefaultMessage("Help")
String helpButton();
@DefaultMessage("Help")
String helpButtonToolTip();
//
@DefaultMessage("Algorithm")
String algorithmGroupHeadingText();
@DefaultMessage("Create")
String createAlgorithmButton();
@DefaultMessage("Create Algorithm")
String createAlgorithmButtonToolTip();
//
@DefaultMessage("Language")
String languageButton();
@DefaultMessage("Language")
String languageButtonToolTip();
//
@DefaultMessage("English")
String english();
@DefaultMessage("Italian")
String italian();
@DefaultMessage("Spanish")
String spanish();
}

@ -0,0 +1,66 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.ribbon;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.event.shared.EventBus;
import com.sencha.gxt.widget.core.client.TabPanel;
/**
*
* @author giancarlo
* email: <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class StatAlgoImporterMenu extends TabPanel {
//private AccountingManagerMenuMessages msgs;
@SuppressWarnings("unused")
private EventBus eventBus;
public StatAlgoImporterMenu(EventBus eventBus) {
//super(GWT.<TabPanelAppearance>create(Css3BigTabPanelAppearance.class));
Log.debug("Create StatisticalRunnerMenu");
this.eventBus = eventBus;
//this.msgs = GWT.create(AccountingManagerMenuMessages.class);
setBodyBorder(false);
setBorders(false);
setAnimScroll(false);
setTabScroll(false);
setCloseContextMenu(true);
addTabs();
setHeight(60);
}
protected void addTabs() {
// TabItemConfig storageItemConf = new TabItemConfig("Storage", false);
// storageItemConf.setIcon(AccountingManagerResources.INSTANCE.accountingStorage48());
// EmptyPanel storageCategory=new EmptyPanel(AccountingType.STORAGE.name());
// add(storageCategory, storageItemConf);
//
//
//
//
// setActiveWidget(getWidget(0));
//
//
// addSelectionHandler(new SelectionHandler<Widget>() {
//
// @Override
// public void onSelection(SelectionEvent<Widget> event) {
// Widget widget = event.getSelectedItem();
// if (widget instanceof EmptyPanel) {
// EmptyPanel p=(EmptyPanel) widget;
// AccountingMenuEvent accountMenuEvent=new AccountingMenuEvent(AccountingType.valueOf(p.getId()));
// eventBus.fireEvent(accountMenuEvent);
// } else {
//
// }
//
// }
// });
}
}

@ -0,0 +1,59 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.ribbon;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.GWT;
import com.google.web.bindery.event.shared.EventBus;
import com.sencha.gxt.widget.core.client.TabPanel;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class StatAlgoImporterRibbon {
private static final String RIBBON_HEIGHT = "90px";
private TabPanel ribbon;
private HomeToolBar homeToolBar;
public StatAlgoImporterRibbon(EventBus eventBus) {
try {
StatAlgoImporterRibbonMessages msgs = GWT.create(StatAlgoImporterRibbonMessages.class);
ribbon = new TabPanel();
ribbon.setId("Ribbon");
ribbon.setHeight(RIBBON_HEIGHT);
VerticalLayoutData vldata=new VerticalLayoutData(1, -1);
homeToolBar = new HomeToolBar(eventBus);
VerticalLayoutContainer con = new VerticalLayoutContainer();
con.add(homeToolBar.getToolBar(), vldata);
ribbon.add(con, msgs.home());
} catch (Exception e) {
e.printStackTrace();
Log.error("Ribbon error:" + e.getLocalizedMessage());
}
}
/**
* @return the container
*/
public TabPanel getContainer() {
return ribbon;
}
}

@ -0,0 +1,18 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.ribbon;
import com.google.gwt.i18n.client.Messages;
/**
*
* @author giancarlo
* email: <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public interface StatAlgoImporterRibbonMessages extends Messages {
@DefaultMessage("Home")
String home();
}

@ -0,0 +1,42 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.rpc;
import java.util.ArrayList;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.code.CodeData;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterServiceException;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.file.FileUploadMonitor;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.session.UserInfo;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
/**
*
* @author "Giancarlo Panichi" <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
@RemoteServiceRelativePath("statalgoimporterservice")
public interface StatAlgoImporterService extends RemoteService {
/**
* Get informations on the current user
*
* @return
* @throws StatAlgoImporterServiceException
*/
public UserInfo hello() throws StatAlgoImporterServiceException;
// File Upload Monitor
/**
* Get File Upload Monitor during the file upload operation in Import CSV
*
* @return
* @throws StatAlgoImporterServiceException
*/
public FileUploadMonitor getFileUploadMonitor()
throws StatAlgoImporterServiceException;
// Code
public ArrayList<CodeData> getCode() throws StatAlgoImporterServiceException;
}

@ -0,0 +1,40 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.rpc;
import java.util.ArrayList;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.code.CodeData;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.file.FileUploadMonitor;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.session.UserInfo;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public interface StatAlgoImporterServiceAsync {
public static StatAlgoImporterServiceAsync INSTANCE = (StatAlgoImporterServiceAsync) GWT
.create(StatAlgoImporterService.class);
/**
*
* @param callback
*/
void hello(AsyncCallback<UserInfo> callback);
void getFileUploadMonitor(AsyncCallback<FileUploadMonitor> callback);
void getCode(AsyncCallback<ArrayList<CodeData>> callback);
}

@ -0,0 +1,12 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.type;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public enum ImportCodeType {
FILE,
WORKSPACE;
}

@ -0,0 +1,13 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.type;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public enum SessionExpiredType {
EXPIRED,
EXPIREDONSERVER;
}

@ -0,0 +1,13 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.type;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public enum StatAlgoImporterRibbonType {
UPLOAD_CODE,
CREATE_ALGORITHM,
HELP;
}

@ -0,0 +1,12 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.type;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public enum UIStateType {
START,
WAITING;
}

@ -0,0 +1,56 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.upload;
import com.google.gwt.event.shared.EventBus;
import com.sencha.gxt.widget.core.client.Window;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
/**
* Dialog for Code Upload
*
* @author "Giancarlo Panichi" <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class CodeUploadDialog extends Window {
private static final String WIDTH = "650px";
private static final String HEIGHT = "200px";
public CodeUploadDialog(EventBus eventBus) {
initWindow();
CodeUploadPanel changeColumnTypePanel = new CodeUploadPanel(this, eventBus);
add(changeColumnTypePanel);
}
protected void initWindow() {
setModal(true);
setWidth(WIDTH);
setHeight(HEIGHT);
setBodyBorder(false);
setResizable(false);
setHeadingText("Import");
//getHeader().setIcon(StatisticalRunnerResources.INSTANCE.upload16());
}
/**
* {@inheritDoc}
*/
@Override
protected void initTools() {
super.initTools();
closeBtn.addSelectHandler(new SelectHandler() {
public void onSelect(SelectEvent event) {
close();
}
});
}
public void close() {
hide();
}
}

@ -0,0 +1,240 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.upload;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.ImportCodeEvent;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.resource.StatAlgoImporterResources;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.type.ImportCodeType;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.upload.progress.FileUploadProgressBarUpdater;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.upload.progress.FileUploadProgressListener;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.upload.progress.FileUploadProgressUpdater;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.utils.UtilsGXT3;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.Constants;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.shared.EventBus;
import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.widget.core.client.ProgressBar;
import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack;
import com.sencha.gxt.widget.core.client.container.MarginData;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
import com.sencha.gxt.widget.core.client.form.FieldLabel;
import com.sencha.gxt.widget.core.client.form.FieldSet;
import com.sencha.gxt.widget.core.client.form.FileUploadField;
import com.sencha.gxt.widget.core.client.form.FormPanel;
/**
*
* @author giancarlo email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class CodeUploadPanel extends FormPanel {
private static final String UPLOAD_SERVLET = "LocalUploadServlet";
private static final int STATUS_POLLING_DELAY = 1000;
private EventBus eventBus;
private CodeUploadDialog parent;
private FileUploadField fileUploadField;
private TextButton uploadCodeBtn;
private TextButton cancelBtn;
//private FileUploadProgressUpdater progressUpdater;
private ProgressBar uploadProgressBar;
private String fileName;
private FileUploadProgressUpdater progressUpdater;
public CodeUploadPanel(CodeUploadDialog parent, EventBus eventBus) {
super();
this.parent = parent;
this.eventBus = eventBus;
init();
create();
}
protected void init() {
forceLayoutOnResize = true;
setBorders(false);
setResize(true);
}
private void create() {
setId("CodeUploadPanel");
setAction(GWT.getModuleBaseURL() + UPLOAD_SERVLET);
setWidth("100%");
setEncoding(Encoding.MULTIPART);
setMethod(Method.POST);
uploadCodeBtn = new TextButton("Upload");
uploadCodeBtn.setIcon(StatAlgoImporterResources.INSTANCE.upload32());
uploadCodeBtn.setIconAlign(IconAlign.RIGHT);
uploadCodeBtn.setToolTip("Upload Code");
uploadCodeBtn.addSelectHandler(new SelectHandler() {
public void onSelect(SelectEvent event) {
Log.info("request upload");
if (fileUploadField.getValue() == null
|| fileUploadField.getValue().equals("")) {
Log.info("fileUploadField is null or empty");
UtilsGXT3.alert("Code file missing",
"Please specify a Code file.");
return;
} else {
Log.info("startUpload call");
startUpload();
}
}
});
cancelBtn = new TextButton("Cancel");
cancelBtn.setIcon(StatAlgoImporterResources.INSTANCE.cancel32());
cancelBtn.setIconAlign(IconAlign.RIGHT);
cancelBtn.setEnabled(false);
fileUploadField = new FileUploadField();
fileUploadField.setName(Constants.FILE_UPLOADED_FIELD);
fileUploadField.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
Log.debug("File Changed", "Selected " + fileUploadField.getValue());
String path = fileUploadField.getValue();
int punto = path.lastIndexOf(".");
if (punto < 0) {
punto = path.length();
}
int slash = path.lastIndexOf("/");
int backslash = path.lastIndexOf("\\");
String fname = "";
if (slash > backslash) {
if (slash != -1) {
fname = path.substring(slash + 1, punto);
}
} else {
if (backslash != -1) {
fname = path.substring(backslash + 1, punto);
}
}
fileName = fname;
}
});
fileUploadField.setAllowBlank(false);
FieldLabel fileUploadFieldLabel = new FieldLabel(fileUploadField, "File");
uploadProgressBar = new ProgressBar();
//uploadProgressBar.setVisible(false);
//uploadProgressBar.getElement().setPadding(new Padding(3, 0, 5, 0));
progressUpdater = new FileUploadProgressUpdater();
progressUpdater.addListener(new FileUploadProgressBarUpdater(
uploadProgressBar));
progressUpdater.addListener(new FileUploadProgressListener() {
public void operationUpdate(float elaborated) {
//
}
public void operationInitializing() {
}
public void operationFailed(Throwable caught, String reason,
String failureDetails) {
UtilsGXT3.alert("Error uploading file", caught.getLocalizedMessage());
}
public void operationComplete() {
ImportCodeDescription desc=new ImportCodeDescription(ImportCodeType.FILE, fileName);
ImportCodeEvent importEvent=new ImportCodeEvent(desc);
eventBus.fireEvent(importEvent);
parent.close();
}
});
parent.addButton(uploadCodeBtn);
parent.addButton(cancelBtn);
parent.setButtonAlign(BoxLayoutPack.CENTER);
VerticalLayoutContainer vlc = new VerticalLayoutContainer();
vlc.add(fileUploadFieldLabel, new VerticalLayoutData(1, -1, new Margins(0)));
vlc.add(uploadProgressBar, new VerticalLayoutData(1, -1, new Margins(5,0,0,0)));
uploadProgressBar.setVisible(false);
FieldSet fieldSet = new FieldSet();
fieldSet.setHeadingHtml("<b>Upload Code</b>");
fieldSet.setCollapsible(false);
fieldSet.add(vlc);
add(fieldSet, new MarginData(new Margins(5, 0, 0, 7)));
}
protected void startUpload() {
disableUpload();
StringBuilder actionUrl = new StringBuilder();
actionUrl.append(GWT.getModuleBaseURL());
actionUrl.append(UPLOAD_SERVLET);
setAction(actionUrl.toString());
Log.info("Start Upload action Url " + actionUrl.toString());
submit();
progressUpdater.scheduleRepeating(STATUS_POLLING_DELAY);
}
protected void disableUpload() {
fileUploadField.disable();
uploadCodeBtn.disable();
uploadProgressBar.setVisible(true);;
cancelBtn.setEnabled(true);
parent.forceLayout();
}
/*private void uploadCode() {
if (fileName != null && !fileName.isEmpty()) {
if (parent != null) {
parent.close();
}
ImportCodeDescription importDesc = new ImportCodeDescription(
ImportCodeType.FILE, fileName);
ImportCodeEvent importCodeEvent = new ImportCodeEvent(importDesc);
eventBus.fireEvent(importCodeEvent);
}
}*/
}

@ -0,0 +1,43 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.upload;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.type.ImportCodeType;
/**
*
* @author giancarlo email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class ImportCodeDescription {
private ImportCodeType importCodeType;
private String file;
public ImportCodeDescription(ImportCodeType importCodeType, String file) {
super();
this.importCodeType = importCodeType;
this.file = file;
}
public ImportCodeType getImportCodeType() {
return importCodeType;
}
public void setImportCodeType(ImportCodeType importCodeType) {
this.importCodeType = importCodeType;
}
public String getFile() {
return file;
}
public void setFile(String file) {
this.file = file;
}
@Override
public String toString() {
return "ImportCodeDescription [importCodeType=" + importCodeType
+ ", file=" + file + "]";
}
}

@ -0,0 +1,64 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.upload.progress;
import com.allen_sauer.gwt.log.client.Log;
import com.sencha.gxt.widget.core.client.ProgressBar;
/**
* Updates a {@link ProgressBar} progress and text based on {@link CSVImportProgressListener} events.
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class FileUploadProgressBarUpdater implements FileUploadProgressListener {
protected ProgressBar progressBar;
/**
* Creates a new {@link ProgressBar} updater.
* @param progressBar the {@link ProgressBar} to update.
*/
public FileUploadProgressBarUpdater(ProgressBar progressBar) {
this.progressBar = progressBar;
this.progressBar.updateProgress(0, "Please Wait...");
}
/**
* {@inheritDoc}
*/
public void operationComplete() {
Log.info("File upload complete");
progressBar.updateProgress(1, "File upload completed.");
}
/**
* {@inheritDoc}
*/
public void operationFailed(Throwable caught, String reason, String failureDetails) {
Log.info("File upload failed");
progressBar.updateText("File upload failed.");
}
public void operationInitializing() {
Log.info("File upload inizializing");
progressBar.updateProgress(0, "Initializing...");
}
public void operationUpdate(float elaborated) {
Log.info("File upload elaborated: "+elaborated);
if (elaborated>=0 && elaborated<1) {
Log.trace("progress "+elaborated);
int elab=new Float(elaborated*100).intValue();
progressBar.updateProgress(elaborated,elab+"% Uploading...");
}
if (elaborated == 1) progressBar.updateProgress(1, "Completing...");
}
}

@ -0,0 +1,45 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.upload.progress;
import com.allen_sauer.gwt.log.client.Log;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class FileUploadProgressCardUpdater implements FileUploadProgressListener {
/**
*
*/
public FileUploadProgressCardUpdater() {
}
public void operationComplete() {
Log.info("File upload completed");
}
/**
* {@inheritDoc}
*/
public void operationFailed(Throwable caught, String reason, String failureDetails) {
Log.info("File upload failed");
}
public void operationInitializing() {
Log.info("File upload inizializing");
}
public void operationUpdate(float elaborated) {
Log.info("File uploading: "+elaborated);
}
}

@ -0,0 +1,41 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.upload.progress;
/**
* Defines a listener for operation progress.
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public interface FileUploadProgressListener {
/**
* Called when the operation is starting.
*/
public void operationInitializing();
/**
* Called when there is a progress for the operation.
* @param elaborated the elaborated part.
*/
public void operationUpdate(float elaborated);
/**
* Called when the operation is complete.
*/
public void operationComplete();
/**
* Called when the operation is failed.
* @param caught the failure exception.
* @param reason the failure reason.
*/
public void operationFailed(Throwable caught, String reason, String failureDetails);
}

@ -0,0 +1,129 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.upload.progress;
import java.util.ArrayList;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.rpc.StatAlgoImporterServiceAsync;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.file.FileUploadMonitor;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
/**
* This {@link Timer} retrieves {@link OperationProgress} from the specified {@link OperationProgressSource} with the scheduled interval.
* The retrieved information are spread to the subscribed {@link CSVImportProgressListener}.
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class FileUploadProgressUpdater extends Timer {
protected ArrayList<FileUploadProgressListener> listeners = new ArrayList<FileUploadProgressListener>();
/**
* {@inheritDoc}
*/
@Override
public void run() {
Log.debug("requesting operation progress");
StatAlgoImporterServiceAsync.INSTANCE.getFileUploadMonitor(new AsyncCallback<FileUploadMonitor>() {
public void onFailure(Throwable caught) {
cancel();
Log.error("Error retrieving the operation state", caught);
String message = getStack(caught);
fireOperationFailed(caught, "Failed getting operation updates", message);
}
public void onSuccess(FileUploadMonitor result) {
Log.info("retrieved FileUploadMonitor: "+result.getState());
switch (result.getState()) {
case STARTED:
Log.debug("File Upload Started");
break;
case INPROGRESS:
Log.debug("Progress: "+result.getElaboratedLenght()+" of "+result.getTotalLenght());
fireOperationUpdate(result.getPercentDone());
break;
case FAILED:
Log.debug("File Upload Failed");
cancel();
fireOperationFailed(new Throwable("File Upload Failed") ,result.getFailureReason(), result.getFailureDetails());
break;
case COMPLETED:
cancel();
Log.debug("File Upload Completed");
fireOperationComplete();
break;
default:
break;
}
}
});
}
protected String getStack(Throwable e)
{
String message = e.getLocalizedMessage()+" -> <br>";
Throwable c = e.getCause();
if (c!=null) message += getStack(c);
return message;
}
protected void fireOperationInitializing()
{
for (FileUploadProgressListener listener:listeners) listener.operationInitializing();
}
protected void fireOperationUpdate(float elaborated)
{
for (FileUploadProgressListener listener:listeners) listener.operationUpdate(elaborated);
}
protected void fireOperationComplete()
{
for (FileUploadProgressListener listener:listeners) listener.operationComplete();
}
protected void fireOperationFailed(Throwable caught, String failure, String failureDetails)
{
for (FileUploadProgressListener listener:listeners) listener.operationFailed(caught, failure, failureDetails);
}
/**
*
* @param listener
*/
public void addListener(FileUploadProgressListener listener)
{
listeners.add(listener);
}
/**
*
* @param listener
*/
public void removeListener(FileUploadProgressListener listener)
{
listeners.remove(listener);
}
}

@ -0,0 +1,37 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.utils;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class Format {
/**
* Converts a file size into a {@link String} representation adding the misure unit.
* @param size the file size.
* @return the textual representation.
*/
public static String fileSize(long size) {
StringBuilder text = new StringBuilder();
if (size < 1024) {
text.append(size);
text.append(" bytes");
} else if (size < 1048576) {
text.append(Math.round(((size * 10) / 1024)) / 10);
text.append(" KB");
} else if (size < 1073741824) {
text.append(Math.round(((size * 10) / 1048576)) / 10);
text.append(" MB");
} else {
text.append(Math.round(((size * 10) / 1073741824)) / 10);
text.append(" GB");
}
return text.toString();
}
}

@ -0,0 +1,28 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.utils;
import com.sencha.gxt.widget.core.client.box.MessageBox;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class InfoMessageBox extends MessageBox {
/**
* Creates a message box with an info icon and the specified title and
* message.
*
* @param title
* the message box title
* @param message
* the message displayed in the message box
*/
public InfoMessageBox(String title, String message) {
super(title, message);
setIcon(ICONS.info());
}
}

@ -0,0 +1,79 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.utils;
import com.google.gwt.core.client.Callback;
import com.google.gwt.dom.client.Element;
import com.sencha.gxt.core.client.dom.XElement;
import com.sencha.gxt.widget.core.client.Component;
import com.sencha.gxt.widget.core.client.box.AlertMessageBox;
import com.sencha.gxt.widget.core.client.event.HideEvent;
import com.sencha.gxt.widget.core.client.event.HideEvent.HideHandler;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class UtilsGXT3 {
public static void mask(Element element) {
XElement el = element.<XElement> cast();
el.mask("Loading...");
}
public static void umask(Element element) {
element.<XElement> cast().unmask();
}
public static void alert(String title, String message) {
final AlertMessageBox d = new AlertMessageBox(title, message);
d.addHideHandler(new HideHandler() {
public void onHide(HideEvent event) {
}
});
d.show();
}
public static void alert(String title, String message, final Callback<Component, Void> callback) {
final AlertMessageBox d = new AlertMessageBox(title, message);
d.addHideHandler(new HideHandler() {
public void onHide(HideEvent event) {
Component comp=event.getSource();
callback.onSuccess(comp);
}
});
d.show();
}
public static void info(String title, String message) {
final InfoMessageBox d = new InfoMessageBox(title, message);
d.addHideHandler(new HideHandler() {
public void onHide(HideEvent event) {
}
});
d.show();
}
public static void info(String title, String message, final Callback<Component, Void> callback) {
final InfoMessageBox d = new InfoMessageBox(title, message);
d.addHideHandler(new HideHandler() {
public void onHide(HideEvent event) {
Component comp=event.getSource();
callback.onSuccess(comp);
}
});
d.show();
}
}

@ -0,0 +1,186 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.server;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.gcube.portlets.user.statisticalalgorithmsimporter.server.file.CodeFileUploadSession;
import org.gcube.portlets.user.statisticalalgorithmsimporter.server.file.FileUploadListener;
import org.gcube.portlets.user.statisticalalgorithmsimporter.server.file.FileUtil;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.Constants;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterSessionExpiredException;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.file.FileUploadMonitor;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.file.FileUploadState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.allen_sauer.gwt.log.client.Log;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class LocalUploadServlet extends HttpServlet {
protected static Logger logger = LoggerFactory.getLogger(LocalUploadServlet.class);
/**
*
*/
private static final long serialVersionUID = -4197748678713054285L;
@SuppressWarnings("rawtypes")
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
logger.trace("Post");
HttpSession session = request.getSession();
if(session==null){
logger.error("Error getting the upload session, no session valid found: "+session);
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "ERROR-Error getting the user session, no session found"+session);
return ;
}
logger.info("Code Import session id: "+session.getId());
CodeFileUploadSession fileUploadSession=new CodeFileUploadSession();
FileUploadMonitor fileUploadMonitor=new FileUploadMonitor();
fileUploadSession.setId(session.getId());
fileUploadSession.setFileUploadState(FileUploadState.STARTED);
//fileUploadSession.setCsvImportMonitor(csvImportMonitor);
SessionUtil.setFileUploadMonitor(session, fileUploadMonitor);
try {
SessionUtil.setCodeFileUploadSession(session,fileUploadSession);
} catch (StatAlgoImporterSessionExpiredException e) {
logger.error(e.getLocalizedMessage());
e.printStackTrace();
throw new ServletException(e.getLocalizedMessage());
}
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
FileUploadListener uploadListener = new FileUploadListener(fileUploadMonitor);
upload.setProgressListener(uploadListener);
FileItem uploadItem = null;
Log.info("Start upload file ");
try {
List items = upload.parseRequest(request);
Iterator it = items.iterator();
while (it.hasNext()) {
FileItem item = (FileItem) it.next();
if (!item.isFormField() && Constants.FILE_UPLOADED_FIELD.equals(item.getFieldName())) {
uploadItem = item;
}
}
} catch (FileUploadException e) {
FileUploadMonitor fum=SessionUtil.getFileUploadMonitor(session);
fum.setFailed("An error occured elaborating the HTTP request", FileUtil.exceptionDetailMessage(e));
SessionUtil.setFileUploadMonitor(session, fum);
fileUploadSession.setFileUploadState(FileUploadState.FAILED);
try {
SessionUtil.setCodeFileUploadSession(session, fileUploadSession);
} catch (StatAlgoImporterSessionExpiredException e1) {
logger.error(e1.getLocalizedMessage());
e1.printStackTrace();
throw new ServletException(e1.getLocalizedMessage());
}
logger.error("Error processing request in upload servlet", e);
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "ERROR-Error during request processing: "+e.getMessage());
return;
}
if (uploadItem == null) {
FileUploadMonitor fum=SessionUtil.getFileUploadMonitor(session);
fum.setFailed("An error occured elaborating the HTTP request: No file found", "Upload request without file");
SessionUtil.setFileUploadMonitor(session, fum);
fileUploadSession.setFileUploadState(FileUploadState.FAILED);
try {
SessionUtil.setCodeFileUploadSession(session, fileUploadSession);
} catch (StatAlgoImporterSessionExpiredException e) {
logger.error(e.getLocalizedMessage());
e.printStackTrace();
throw new ServletException(e.getLocalizedMessage());
}
logger.error("Error processing request in upload servlet: No file to upload");
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "No file to upload");
return;
}
String contentType = uploadItem.getContentType();
logger.trace("ContentType: "+contentType);
try {
FileUtil.setImportCodeFile(fileUploadSession, uploadItem.getInputStream(), uploadItem.getName(), contentType);
} catch (Exception e) {
FileUploadMonitor fum=SessionUtil.getFileUploadMonitor(session);
fum.setFailed("An error occured elaborating the file", FileUtil.exceptionDetailMessage(e));
SessionUtil.setFileUploadMonitor(session, fum);
fileUploadSession.setFileUploadState(FileUploadState.FAILED);
try {
SessionUtil.setCodeFileUploadSession(session, fileUploadSession);
} catch (StatAlgoImporterSessionExpiredException e1) {
logger.error(e1.getLocalizedMessage());
e1.printStackTrace();
throw new ServletException(e1.getLocalizedMessage());
}
logger.error("Error elaborating the stream", e);
uploadItem.delete();
response.getWriter().write("ERROR-"+e.getMessage());
return;
}
uploadItem.delete();
logger.trace("changing state");
FileUploadMonitor fum=SessionUtil.getFileUploadMonitor(session);
fum.setState(FileUploadState.COMPLETED);
SessionUtil.setFileUploadMonitor(session, fum);
try {
SessionUtil.setCodeFileUploadSession(session, fileUploadSession);
} catch (StatAlgoImporterSessionExpiredException e) {
logger.error(e.getLocalizedMessage());
e.printStackTrace();
throw new ServletException(e.getLocalizedMessage());
}
response.getWriter().write("OK");
}
}

@ -0,0 +1,115 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.server;
import javax.servlet.http.HttpSession;
import org.gcube.application.framework.core.session.ASLSession;
import org.gcube.application.framework.core.session.SessionManager;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper;
import org.gcube.portlets.user.statisticalalgorithmsimporter.server.file.CodeFileUploadSession;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.Constants;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterSessionExpiredException;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.file.FileUploadMonitor;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.session.SessionConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author "Giancarlo Panichi" <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class SessionUtil {
private static Logger logger = LoggerFactory.getLogger(SessionUtil.class);
public static ASLSession getAslSession(HttpSession httpSession)
throws StatAlgoImporterSessionExpiredException {
String username = (String) httpSession
.getAttribute(ScopeHelper.USERNAME_ATTRIBUTE);
ASLSession session;
if (username == null) {
logger.warn("no user found in session, use test user");
/*throw new AccountingManagerSessionExpiredException("Session Expired!");*/
// Remove comment for Test
username = Constants.DEFAULT_USER;
String scope = Constants.DEFAULT_SCOPE;
httpSession.setAttribute(ScopeHelper.USERNAME_ATTRIBUTE, username);
session = SessionManager.getInstance().getASLSession(
httpSession.getId(), username);
session.setScope(scope);
} else {
session = SessionManager.getInstance().getASLSession(
httpSession.getId(), username);
}
logger.info("SessionUtil: aslSession " + session.getUsername() + " "
+ session.getScope());
return session;
}
//
public static FileUploadMonitor getFileUploadMonitor(HttpSession httpSession) {
FileUploadMonitor fileUploadMonitor = (FileUploadMonitor) httpSession
.getAttribute(SessionConstants.FILE_UPLOAD_MONITOR);
if (fileUploadMonitor != null) {
return fileUploadMonitor;
} else {
fileUploadMonitor = new FileUploadMonitor();
httpSession.setAttribute(SessionConstants.FILE_UPLOAD_MONITOR,
fileUploadMonitor);
return fileUploadMonitor;
}
}
public static void setFileUploadMonitor(HttpSession httpSession,
FileUploadMonitor fileUploadMonitor) {
FileUploadMonitor fum = (FileUploadMonitor) httpSession
.getAttribute(SessionConstants.FILE_UPLOAD_MONITOR);
if (fum != null) {
httpSession.removeAttribute(SessionConstants.FILE_UPLOAD_MONITOR);
}
httpSession.setAttribute(SessionConstants.FILE_UPLOAD_MONITOR,
fileUploadMonitor);
}
//
public static void setCodeFileUploadSession(HttpSession httpSession,
CodeFileUploadSession s) throws StatAlgoImporterSessionExpiredException {
CodeFileUploadSession session = (CodeFileUploadSession) httpSession
.getAttribute(SessionConstants.IMPORT_CODE_FILE_UPLOAD_SESSION);
if (session != null)
httpSession
.removeAttribute(SessionConstants.IMPORT_CODE_FILE_UPLOAD_SESSION);
httpSession.setAttribute(
SessionConstants.IMPORT_CODE_FILE_UPLOAD_SESSION, s);
ASLSession aslSession = getAslSession(httpSession);
ScopeProvider.instance.set(aslSession.getScope().toString());
}
public static CodeFileUploadSession getCodeFileUploadSession(
HttpSession httpSession) {
CodeFileUploadSession fileUploadSession = (CodeFileUploadSession) httpSession
.getAttribute(SessionConstants.IMPORT_CODE_FILE_UPLOAD_SESSION);
if (fileUploadSession == null) {
logger.error("CodeFileUploadSession was not acquired");
}
return fileUploadSession;
}
}

@ -0,0 +1,120 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.server;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpSession;
import org.gcube.application.framework.core.session.ASLSession;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.rpc.StatAlgoImporterService;
import org.gcube.portlets.user.statisticalalgorithmsimporter.server.file.CodeFileReader;
import org.gcube.portlets.user.statisticalalgorithmsimporter.server.file.CodeFileUploadSession;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.code.CodeData;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterServiceException;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.file.FileUploadMonitor;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.session.UserInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
/**
* The server side implementation of the RPC service.
*/
@SuppressWarnings("serial")
public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements
StatAlgoImporterService {
private static Logger logger = LoggerFactory
.getLogger(StatAlgoImporterServiceImpl.class);
@Override
public void init() throws ServletException {
super.init();
System.out.println("Fix JAXP: jdk.xml.entityExpansionLimit=0");
System.setProperty("jdk.xml.entityExpansionLimit", "0");
System.out.println("initializing StatisticalRunner");
}
/**
*
* {@inheritDoc}
*/
@Override
public UserInfo hello() throws StatAlgoImporterServiceException {
try {
HttpSession session = this.getThreadLocalRequest().getSession();
ASLSession aslSession = SessionUtil.getAslSession(session);
UserInfo userInfo = new UserInfo(aslSession.getUsername(),
aslSession.getGroupId(), aslSession.getGroupName(),
aslSession.getScope(), aslSession.getScopeName(),
aslSession.getUserEmailAddress(),
aslSession.getUserFullName());
logger.debug("UserInfo: " + userInfo);
return userInfo;
} catch (StatAlgoImporterServiceException e) {
e.printStackTrace();
throw e;
} catch (Throwable e) {
e.printStackTrace();
logger.error("Hello(): " + e.getLocalizedMessage(), e);
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
}
}
/**
* {@inheritDoc}
*/
@Override
public FileUploadMonitor getFileUploadMonitor()
throws StatAlgoImporterServiceException {
HttpSession session = this.getThreadLocalRequest().getSession();
if (session == null) {
throw new StatAlgoImporterServiceException(
"Error retrieving the session: null");
}
FileUploadMonitor fileUploadMonitor = SessionUtil
.getFileUploadMonitor(session);
if (fileUploadMonitor == null) {
throw new StatAlgoImporterServiceException(
"Error retrieving the fileUploadMonitor: null");
}
logger.debug("FileUploadMonitor: " + fileUploadMonitor);
return fileUploadMonitor;
}
@Override
public ArrayList<CodeData> getCode() throws StatAlgoImporterServiceException {
try {
HttpSession session = this.getThreadLocalRequest().getSession();
SessionUtil.getAslSession(session);
logger.debug("getCode()");
CodeFileUploadSession codeFileUploadSession = SessionUtil
.getCodeFileUploadSession(session);
CodeFileReader codeFileReader = new CodeFileReader(
codeFileUploadSession);
ArrayList<CodeData> codeList = codeFileReader.getCodeList();
for (CodeData codeData : codeList) {
logger.debug("" + codeData.getId() + " "
+ codeData.getCodeLine());
}
return codeList;
} catch (StatAlgoImporterServiceException e) {
e.printStackTrace();
throw e;
} catch (Throwable e) {
e.printStackTrace();
logger.error("getCode(): " + e.getLocalizedMessage(), e);
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
}
}
}

@ -0,0 +1,71 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.server.file;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.code.CodeData;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* CodeFileReader
*
* Read code and convert it in ArrayList
*
* @author giancarlo email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class CodeFileReader {
private Logger logger = LoggerFactory.getLogger(CodeFileReader.class);
private ArrayList<CodeData> codeList;
public CodeFileReader(CodeFileUploadSession codeFileUploadSession)
throws StatAlgoImporterServiceException {
try {
if(codeFileUploadSession==null|| codeFileUploadSession.getCodeFile()==null){
throw new StatAlgoImporterServiceException("CodeFileUploadSession is invalid");
}
codeList = new ArrayList<CodeData>();
FileInputStream fio=new FileInputStream(codeFileUploadSession.getCodeFile());
InputStreamReader isr = new InputStreamReader(fio);
BufferedReader br = new BufferedReader((Reader) isr );
String s;
int i = 1;
while ((s = br.readLine()) != null) {
CodeData codeData = new CodeData(i, s);
codeList.add(codeData);
i++;
}
fio.close();
logger.trace("CodeList size: " + codeList.size());
} catch (FileNotFoundException e) {
logger.error("File Not Found: "+e.getLocalizedMessage());
e.printStackTrace();
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
} catch (IOException e) {
logger.error("IOException: "+e.getLocalizedMessage());
e.printStackTrace();
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
}
}
public ArrayList<CodeData> getCodeList() {
return codeList;
}
}

@ -0,0 +1,70 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.server.file;
import java.io.File;
import java.io.Serializable;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.file.FileUploadState;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class CodeFileUploadSession implements Serializable {
private static final long serialVersionUID = -7906477664944910362L;
private String id;
private FileUploadState fileUploadState;
private File codeFile;
private String codeName;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public FileUploadState getFileUploadState() {
return fileUploadState;
}
public void setFileUploadState(FileUploadState fileUploadState) {
this.fileUploadState = fileUploadState;
}
public File getCodeFile() {
return codeFile;
}
public void setCodeFile(File codeFile) {
this.codeFile = codeFile;
}
public String getCodeName() {
return codeName;
}
public void setCodeName(String codeName) {
this.codeName = codeName;
}
@Override
public String toString() {
return "CSVFileUploadSession [id=" + id + ", fileUploadState="
+ fileUploadState + ", csvFile=" + codeFile + ", csvName="
+ codeName + "]";
}
}

@ -0,0 +1,79 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.server.file;
import org.apache.commons.fileupload.ProgressListener;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.file.FileUploadMonitor;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.file.FileUploadState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class FileUploadListener implements ProgressListener {
private Logger logger=LoggerFactory.getLogger(FileUploadListener.class);
private FileUploadMonitor fileUploadMonitor;
private long num100Ks = 0;
private long theBytesRead = 0;
private long theContentLength = -1;
private int whichItem = 0;
private int percentDone = 0;
private boolean contentLengthKnown = false;
public FileUploadListener(FileUploadMonitor fileUploadMonitor) {
logger.debug("FileUploadListener created");
this.fileUploadMonitor=fileUploadMonitor;
//this.session=session;
}
/**
* {@inheritDoc}
*/
public void update(long bytesRead, long contentLength, int items) {
if (contentLength > -1) {
contentLengthKnown = true;
}
theBytesRead = bytesRead;
theContentLength = contentLength;
whichItem = items;
long nowNum100Ks = bytesRead / 100000;
// Only run this code once every 100K
if (nowNum100Ks > num100Ks) {
num100Ks = nowNum100Ks;
if (contentLengthKnown) {
percentDone = (int) Math.round(100.00 * bytesRead / contentLength);
}
}
fileUploadMonitor.setTotalLenght(contentLength);
fileUploadMonitor.setElaboratedLenght(bytesRead);
fileUploadMonitor.setPercentDone(Float.valueOf(percentDone)/100);
fileUploadMonitor.setState(FileUploadState.INPROGRESS);
//logger.debug("File Upload: "+fileUploadMonitor.toString());
}
@Override
public String toString() {
return "FileUploadListener [fileUploadMonitor=" + fileUploadMonitor
+ ", num100Ks=" + num100Ks + ", theBytesRead=" + theBytesRead
+ ", theContentLength=" + theContentLength + ", whichItem="
+ whichItem + ", percentDone=" + percentDone
+ ", contentLengthKnown=" + contentLengthKnown + "]";
}
}

@ -0,0 +1,124 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.server.file;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class FileUtil {
protected static final Logger logger = LoggerFactory
.getLogger(FileUtil.class);
public static final String[] ZIP_MIMETYPES = new String[] {
"application/x-compress", "application/x-compressed",
"application/x-gzip", "application/x-winzip", "application/x-zip",
"application/zip", "multipart/x-zip" };
/**
* Check if the content type is a zip type.
*
* @param contentType
* the content type to check.
* @return <code>true</code> if is a zip file, <code>false</code> otherwise.
*/
public static boolean isZipContentType(String contentType) {
for (String zip_mimetype : ZIP_MIMETYPES)
if (zip_mimetype.equals(contentType))
return true;
return false;
}
/**
* Unzip the specified stream
*
* @param is
* the zip stream.
* @param os
* the output stream.
* @throws Exception
*/
public static String unZip(InputStream is, OutputStream os)
throws Exception {
try {
ZipInputStream zis = new ZipInputStream(is);
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null && !entry.isDirectory())
;
if (entry == null || entry.isDirectory()) {
zis.close();
os.close();
throw new Exception("Unzip error: No file entry found");
}
IOUtils.copy(zis, os);
zis.closeEntry();
zis.close();
os.close();
return entry.getName();
} catch (IOException e) {
throw new Exception("Unzip error: " + e.getMessage(), e);
}
}
public static String exceptionDetailMessage(Throwable t) {
StringWriter out = new StringWriter();
PrintWriter writer = new PrintWriter(out);
t.printStackTrace(writer);
StringBuilder message = new StringBuilder("Error message:\n");
message.append(out.toString());
return message.toString();
}
public static void setImportCodeFile(CodeFileUploadSession fileUploadSession,
InputStream is, String name, String mimeType) throws Exception {
File csvTmp = setImportFile(is, "import", ".code", name, mimeType);
fileUploadSession.setCodeName(name);
fileUploadSession.setCodeFile(csvTmp);
}
public static File setImportFile(InputStream is, String tempName,
String extention, String name, String mimeType) throws Exception {
File fileTmp = File.createTempFile(tempName, extention);
fileTmp.deleteOnExit();
logger.debug("Import File mimeType: " + mimeType);
if (isZipContentType(mimeType)) {
// we need to unzip
logger.trace("is a zip file");
name = unZip(is, new FileOutputStream(fileTmp));
} else {
logger.trace("is a text file");
IOUtils.copy(is, new FileOutputStream(fileTmp));
}
logger.trace("upload completed");
return fileTmp;
}
}

@ -0,0 +1,57 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.server.portlet;
import java.io.IOException;
import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author giancarlo
* email: <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class StatAlgoImporterPortlet extends GenericPortlet {
protected Logger logger = LoggerFactory.getLogger(StatAlgoImporterPortlet.class);
/**
* JSP folder name
*/
public static final String JSP_FOLDER = "/WEB-INF/jsp/";
/**
*
*/
public static final String VIEW_JSP = JSP_FOLDER + "StatAlgoImporterPortlet_view.jsp";
/**
* @param request .
* @param response .
* @throws IOException .
* @throws PortletException .
*/
public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
logger.trace("Loading from JSP: "+VIEW_JSP);
logger.trace("setting context using ScopeHelper");
ScopeHelper.setContext(request);
logger.trace("passing to the render");
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(VIEW_JSP);
logger.trace("Call: "+VIEW_JSP);
rd.include(request,response);
}
}

@ -0,0 +1,23 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.shared;
/**
*
* @author giancarlo
* email: <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class Constants {
public static final String APPLICATION_ID = "org.gcube.portlets.user.statisticalrunner.server.portlet.StatisticalRunnerPortlet";
public static final String STATRUNNER_ID = "StatRunnerId";
public static final String STATRUNNER_LANG_COOKIE = "StatRunnerLangCookie";
public static final String STATRUNNER_LANG = "StatRunnerLang";
public final static String DEFAULT_USER = "test.user";
//public final static String DEFAULT_SCOPE = "/gcube/devNext";
public final static String DEFAULT_SCOPE = "/gcube/devsec/devVRE";
public static final String FILE_UPLOADED_FIELD = "fileUploadedField";
}

@ -0,0 +1,49 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.shared.code;
import java.io.Serializable;
/**
*
* @author giancarlo email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class CodeData implements Serializable {
private static final long serialVersionUID = 2507639790500338861L;
private Integer id;
private String codeLine;
public CodeData(){
super();
}
public CodeData(int id, String codeLine) {
super();
this.id = id;
this.codeLine = codeLine;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCodeLine() {
return codeLine;
}
public void setCodeLine(String codeLine) {
this.codeLine = codeLine;
}
@Override
public String toString() {
return "CodeData [id=" + id + ", codeLine=" + codeLine + "]";
}
}

@ -0,0 +1,38 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class StatAlgoImporterServiceException extends Exception {
private static final long serialVersionUID = -2255657546267656458L;
/**
*
*/
public StatAlgoImporterServiceException() {
super();
}
/**
* @param message
*/
public StatAlgoImporterServiceException(String message) {
super(message);
}
public StatAlgoImporterServiceException(String message,Throwable t) {
super(message,t);
}
}

@ -0,0 +1,36 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception;
/**
* ASL Session Expired Exception
*
* @author "Giancarlo Panichi"
*
*/
public class StatAlgoImporterSessionExpiredException extends StatAlgoImporterServiceException {
private static final long serialVersionUID = -4831171355042165166L;
/**
*
*/
public StatAlgoImporterSessionExpiredException() {
super();
}
/**
* @param message
*/
public StatAlgoImporterSessionExpiredException(String message) {
super(message);
}
/**
*
* @param message
* @param t
*/
public StatAlgoImporterSessionExpiredException(String message,Throwable t) {
super(message,t);
}
}

@ -0,0 +1,123 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.shared.file;
import java.io.Serializable;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class FileUploadMonitor implements Serializable {
private static final long serialVersionUID = -1150111422206443617L;
protected long totalLenght;
protected long elaboratedLenght;
protected FileUploadState state;
protected String failureReason;
protected String failureDetails;
protected float percentDone;
public FileUploadMonitor(){
state = FileUploadState.INPROGRESS;
}
public FileUploadMonitor(long totalLenght, long elaboratedLenght, FileUploadState state, String failureReason) {
this.totalLenght = totalLenght;
this.elaboratedLenght = elaboratedLenght;
this.state = state;
this.failureReason = failureReason;
this.percentDone=0;
}
/**
* @return the totalLenght
*/
public long getTotalLenght() {
return totalLenght;
}
/**
* @return the elaboratedLenght
*/
public long getElaboratedLenght() {
return elaboratedLenght;
}
public FileUploadState getState(){
return state;
}
/**
* @return the failureDetails
*/
public String getFailureDetails() {
return failureDetails;
}
public float getPercentDone() {
return percentDone;
}
public void setPercentDone(float percentDone) {
this.percentDone = percentDone;
}
public void setFailureReason(String failureReason) {
this.failureReason = failureReason;
}
public void setFailureDetails(String failureDetails) {
this.failureDetails = failureDetails;
}
public void setState(FileUploadState state)
{
this.state = state;
}
/**
* @return the reason
*/
public String getFailureReason() {
return failureReason;
}
/**
* @param totalLenght the totalLenght to set
*/
public void setTotalLenght(long totalLenght) {
this.totalLenght = totalLenght;
}
/**
* @param elaboratedLenght the elaboratedLenght to set
*/
public void setElaboratedLenght(long elaboratedLenght) {
this.elaboratedLenght = elaboratedLenght;
}
/**
* @param failed the failed to set
*/
public void setFailed(String failureReason, String failureDetails) {
this.state = FileUploadState.FAILED;
this.failureReason = failureReason;
this.failureDetails = failureDetails;
}
@Override
public String toString() {
return "FileUploadMonitor [totalLenght=" + totalLenght
+ ", elaboratedLenght=" + elaboratedLenght + ", state=" + state
+ ", failureReason=" + failureReason + ", failureDetails="
+ failureDetails + ", percentDone=" + percentDone + "]";
}
}

@ -0,0 +1,28 @@
/**
*
*/
package org.gcube.portlets.user.statisticalalgorithmsimporter.shared.file;
/**
* @author Federico De Faveri defaveri@isti.cnr.it
*
*/
public enum FileUploadState {
STARTED,
/**
* The operation is in progress.
*/
INPROGRESS,
/**
* The operation is completed.
*/
COMPLETED,
/**
* The operation is failed.
*/
FAILED;
}

@ -0,0 +1,14 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.shared.session;
/**
*
* @author giancarlo
* email: <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class SessionConstants {
public static final String FILE_UPLOAD_MONITOR="FILE_UPLOAD_MONITOR";
public static final String IMPORT_CODE_FILE_UPLOAD_SESSION = "IMPORT_CODE_FILE_UPLOAD_SESSION";
}

@ -0,0 +1,114 @@
package org.gcube.portlets.user.statisticalalgorithmsimporter.shared.session;
import java.io.Serializable;
/**
*
* @author giancarlo
* email: <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class UserInfo implements Serializable {
private static final long serialVersionUID = -2826549639677017234L;
private String username;
private long groupId;
private String groupName;
private String scope;
private String scopeName;
private String userEmailAddress;
private String userFullName;
public UserInfo() {
super();
}
/**
*
* @param username
* @param groupId
* @param groupName
* @param scope
* @param scopeName
* @param userEmailAddress
* @param userFullName
*/
public UserInfo(String username, long groupId, String groupName,
String scope, String scopeName, String userEmailAddress,
String userFullName) {
super();
this.username = username;
this.groupId = groupId;
this.groupName = groupName;
this.scope = scope;
this.scopeName = scopeName;
this.userEmailAddress = userEmailAddress;
this.userFullName = userFullName;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public long getGroupId() {
return groupId;
}
public void setGroupId(long groupId) {
this.groupId = groupId;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getScope() {
return scope;
}
public void setScope(String scope) {
this.scope = scope;
}
public String getScopeName() {
return scopeName;
}
public void setScopeName(String scopeName) {
this.scopeName = scopeName;
}
public String getUserEmailAddress() {
return userEmailAddress;
}
public void setUserEmailAddress(String userEmailAddress) {
this.userEmailAddress = userEmailAddress;
}
public String getUserFullName() {
return userFullName;
}
public void setUserFullName(String userFullName) {
this.userFullName = userFullName;
}
@Override
public String toString() {
return "UserInfo [username=" + username + ", groupId=" + groupId
+ ", groupName=" + groupName + ", scope=" + scope
+ ", scopeName=" + scopeName + ", userEmailAddress="
+ userEmailAddress + ", userFullName=" + userFullName + "]";
}
}

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='statalgoimporter'>
<inherits name='com.google.gwt.user.User' />
<inherits name="com.google.gwt.http.HTTP" />
<!-- <inherits name="com.google.gwt.i18n.I18N" /> -->
<!-- <inherits name='com.extjs.gxt.ui.GXT' /> -->
<inherits name='com.sencha.gxt.ui.GXT' />
<!-- GXT Theme -->
<!-- <inherits name='com.sencha.gxt.theme.blue.Blue' /> -->
<!-- <inherits name='com.sencha.gxt.theme.gray.Gray' /> -->
<!-- Be sure to include Neptunes gxt-theme-neptune.jar in the classpath -->
<inherits name='com.sencha.gxt.theme.neptune.Theme' />
<!-- <inherits name="com.google.gwt.logging.Logging" /> -->
<inherits name="com.allen_sauer.gwt.log.gwt-log-TRACE" />
<inherits name="com.google.gwt.resources.Resources" />
<inherits name='org.gcube.portlets.widgets.sessionchecker.SessionChecker' />
<!-- Specify the app entry point class. -->
<entry-point class='org.gcube.portlets.user.statisticalalgorithmsimporter.client.StatAlgoImporter' />
<!-- <set-configuration-property name="locale.cookie" value="AMLangCookie"
/> <set-configuration-property name="locale.queryparam" value="AMLang" />
<set-configuration-property name="locale.usemeta" value="Y" /> <set-configuration-property
name="locale.useragent" value="Y" /> <set-configuration-property name="locale.searchorder"
value="cookie,queryparam,meta,useragent" /> <extend-property name="locale"
values="en" /> <extend-property name="locale" values="it" /> <extend-property
name="locale" values="es" /> <set-property name="locale" value="en, it, es"
/> <set-property-fallback name="locale" value="en" /> -->
<!-- <set-property name="log_DivLogger" value="ENABLED" /> <set-property
name="log_ConsoleLogger" value="ENABLED" /> <set-property name="log_GWTLogger"
value="ENABLED" /> <set-property name="log_SystemLogger" value="ENABLED"
/> -->
<set-property name="log_DivLogger" value="DISABLED" />
<set-property name="log_ConsoleLogger" value="DISABLED" />
<set-property name="log_GWTLogger" value="DISABLED" />
<set-property name="log_SystemLogger" value="DISABLED" />
<!-- Specify the paths for translatable code -->
<source path='client' />
<source path='shared' />
</module>

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='statalgoimporter'>
<inherits name='com.google.gwt.user.User' />
<inherits name="com.google.gwt.http.HTTP" />
<inherits name="com.google.gwt.resources.Resources" />
<!-- <inherits name="com.google.gwt.i18n.I18N" /> -->
<!-- <inherits name='com.extjs.gxt.ui.GXT' /> -->
<inherits name='com.sencha.gxt.ui.GXT' />
<!-- GXT Theme -->
<!-- <inherits name='com.sencha.gxt.theme.blue.Blue' /> -->
<!-- <inherits name='com.sencha.gxt.theme.gray.Gray' /> -->
<!-- Be sure to include Neptunes gxt-theme-neptune.jar in the classpath -->
<inherits name='com.sencha.gxt.theme.neptune.Theme' />
<!-- <inherits name="com.google.gwt.logging.Logging" /> -->
<inherits name="com.allen_sauer.gwt.log.gwt-log-TRACE" />
<!-- Debug CSS style -->
<set-configuration-property name="CssResource.style"
value="pretty" />
<inherits name='org.gcube.portlets.widgets.sessionchecker.SessionChecker' />
<!-- Specify the app entry point class. -->
<entry-point
class='org.gcube.portlets.user.statisticalalgorithmsimporter.client.StatAlgoImporter' />
<!-- <set-configuration-property name="locale.cookie" value="AMLangCookie"
/> <set-configuration-property name="locale.queryparam" value="AMLang" />
<set-configuration-property name="locale.usemeta" value="Y" /> <set-configuration-property
name="locale.useragent" value="Y" /> <set-configuration-property name="locale.searchorder"
value="cookie,queryparam,meta,useragent" /> <extend-property name="locale"
values="en" /> <extend-property name="locale" values="it" /> <extend-property
name="locale" values="es" /> <set-property name="locale" value="en, it, es"
/> <set-property-fallback name="locale" value="en" /> -->
<set-property name="log_ConsoleLogger" value="ENABLED" /> <set-property
name="log_DivLogger" value="ENABLED" /> <set-property name="log_GWTLogger"
value="ENABLED" /> <set-property name="log_SystemLogger" value="ENABLED"
/>
<!-- Not in GWT 2.6 <set-property name="log_FirebugLogger" value="ENABLED"
/> -->
<!--
<set-property name="log_ConsoleLogger" value="DISABLED" />
<set-property name="log_DivLogger" value="DISABLED" />
<set-property name="log_GWTLogger" value="DISABLED" />
<set-property name="log_SystemLogger" value="DISABLED" /> -->
<!-- Not in GWT 2.6 <set-property name="log_FirebugLogger" value="DISABLED"
/> -->
<!-- Specify the paths for translatable code -->
<source path='client' />
<source path='shared' />
</module>

@ -0,0 +1,7 @@
/** Add css rules here for your application. */
/*table {
border-spacing: 1px !important;
top: 0px !important;
}*/

@ -0,0 +1,52 @@
<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!-- -->
<!-- Consider inlining CSS to reduce the number of requested files -->
<!-- -->
<link rel="stylesheet" type="text/css"
href="statalgoimporter/reset.css" />
<!-- -->
<!-- Any title is fine -->
<!-- -->
<title>Statistical Algorithms Importer</title>
<!-- -->
<!-- This script loads your compiled module. -->
<!-- If you add any GWT meta tags, they must -->
<!-- be added before this line. -->
<!-- -->
<link rel="stylesheet" type="text/css" href="gxt/css/gxt-all.css" />
<link type="text/css" rel="stylesheet" href="StatAlgoImporter.css">
<script type="text/javascript"
src="statalgoimporter/statalgoimporter.nocache.js"></script>
</head>
<!-- -->
<!-- The body can have arbitrary html, or -->
<!-- you can leave the body empty if you want -->
<!-- to create a completely dynamic UI. -->
<!-- -->
<body>
<!-- OPTIONAL: include this if you want history support -->
<iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1'
style="position: absolute; width: 0; height: 0; border: 0"></iframe>
<!-- RECOMMENDED if your web app will not function without JavaScript enabled -->
<noscript>
<div
style="width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1px solid red; padding: 4px; font-family: sans-serif">
Your web browser must have JavaScript enabled in order for this
application to display correctly.</div>
</noscript>
<!-- <div id="StatAlgoImporterPortlet" style="width: 100%; height: 100%">
</div> -->
</body>
</html>

@ -0,0 +1,19 @@
log4j.rootCategory=TRACE, FILE, CONSOLE
# Direct log messages to a log file
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
#Redirect to Tomcat logs folder
#log4j.appender.FILE.File=C:\\logging.log
log4j.appender.FILE.File=${catalina.home}/webapps/statistical-runner/logs/StatisticalRunnerLog4j.log
log4j.appender.FILE.MaxFileSize=10MB
log4j.appender.FILE.MaxBackupIndex=10
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n
# Console log
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- Insert the current time formatted as "yyyyMMdd'T'HHmmss" under the
key "bySecond" into the logger context. This value will be available to all
subsequent configuration elements. -->
<timestamp key="byDay" datePattern="yyyyMMdd" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</layout>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${CATALINA_HOME}/webapps/statistical-runner/logs/StatisticalRunnerLogBack.log
</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>StatisticalRunner.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- keep 30 days' worth of history -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<!--
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>%d%thread%-5level%logger%msg</pattern>
</layout>
</encoder> -->
<encoder>
<pattern>%d [%thread] %-5level %logger{35} - %msg%n
</pattern>
</encoder>
</appender>
<root level="TRACE">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>

@ -0,0 +1 @@
debug.com.sun.portal.level=WARNING

@ -0,0 +1,17 @@
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<!-- -->
<!-- The module reference below is the link -->
<!-- between html and your Web Toolkit module -->
<link rel="stylesheet" href="<%= request.getContextPath()%>/statalgoimporter/reset.css" type="text/css"/>
<!-- <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/gxt/css/gxt-all.css" /> -->
<link rel="stylesheet" href="<%= request.getContextPath()%>/StatAlgoImporter.css" type="text/css">
<script src='<%=request.getContextPath()%>/statalgoimporter/statalgoimporter.nocache.js'></script>
<div id="StatisticalRunnerPortlet" style="width: 100%; height: 100%">
</div>

@ -0,0 +1,5 @@
<display>
<category name="gCube Applications">
<portlet id="StatisticalRunner" />
</category>
</display>

@ -0,0 +1,9 @@
name=StatisticalRunner
module-group-id=liferay
module-incremental-version=1
tags=
short-description=
change-log=
page-url=http://www.d4science.eu
author=D4Science EU
licenses=

@ -0,0 +1,12 @@
<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 5.2.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_5_2_0.dtd">
<liferay-portlet-app>
<portlet>
<portlet-name>StatisticalRunner</portlet-name>
<icon>/icon.png</icon>
<layout-cacheable>false</layout-cacheable>
<instanceable>false</instanceable>
<ajaxable>false</ajaxable>
</portlet>
</liferay-portlet-app>

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<portlet-app xmlns='http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd' version='2.0'>
<portlet>
<description>StatisticalRunner</description>
<portlet-name>StatisticalRunner</portlet-name>
<display-name>StatisticalRunner</display-name>
<portlet-class>org.gcube.portlets.user.statisticalrunner.server.portlet.StatisticalRunnerPortlet</portlet-class>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>view</portlet-mode>
</supports>
<portlet-info>
<title>StatisticalRunner</title>
<short-title>StatisticalRunner</short-title>
</portlet-info>
</portlet>
</portlet-app>

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<!-- Servlets -->
<!-- JUnit -->
<servlet>
<servlet-name>jUnitHostImpl</servlet-name>
<servlet-class>com.google.gwt.junit.server.JUnitHostImpl</servlet-class>
</servlet>
<!-- Check Session Expired -->
<servlet>
<servlet-name>checkServlet</servlet-name>
<servlet-class>org.gcube.portlets.widgets.sessionchecker.server.SessionCheckerServiceImpl</servlet-class>
</servlet>
<!-- StatisticalAlgoImporterService -->
<servlet>
<servlet-name>StatAlgoImporterService</servlet-name>
<servlet-class>org.gcube.portlets.user.statisticalalgorithmsimporter.server.StatAlgoImporterServiceImpl</servlet-class>
</servlet>
<!-- LocalUploadServlet -->
<servlet>
<servlet-name>LocalUploadServlet</servlet-name>
<servlet-class>org.gcube.portlets.user.statisticalalgorithmsimporter.server.LocalUploadServlet</servlet-class>
</servlet>
<!-- Servlets Mapping -->
<!-- JUnit -->
<servlet-mapping>
<servlet-name>jUnitHostImpl</servlet-name>
<url-pattern>/statalgoimporter/junithost/*</url-pattern>
</servlet-mapping>
<!-- Check Session Expired -->
<servlet-mapping>
<servlet-name>checkServlet</servlet-name>
<url-pattern>/statalgoimporter/checksession</url-pattern>
</servlet-mapping>
<!--StatAlgoImporterService -->
<servlet-mapping>
<servlet-name>StatAlgoImporterService</servlet-name>
<url-pattern>/statalgoimporter/statalgoimporterservice</url-pattern>
</servlet-mapping>
<!--StatRunnerService -->
<servlet-mapping>
<servlet-name>LocalUploadServlet</servlet-name>
<url-pattern>/statalgoimporter/LocalUploadServlet</url-pattern>
</servlet-mapping>
<!-- Default page to serve -->
<welcome-file-list>
<welcome-file>StatAlgoImporter.html</welcome-file>
</welcome-file-list>
</web-app>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save