Initial import.
git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/user/reports@68941 82a268e6-3cf1-43bd-a215-b396298e98cf
|
@ -0,0 +1,36 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<classpath>
|
||||||
|
<classpathentry kind="src" output="target/reports-4.0.0-SNAPSHOT/WEB-INF/classes" path="src/main/java">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="optional" value="true"/>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry including="**/*.java" kind="src" output="src/main/webapp/WEB-INF/classes" path="src/main/resources"/>
|
||||||
|
<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 including="**/*.java" kind="src" output="target/test-classes" path="src/test/resources"/>
|
||||||
|
<classpathentry kind="con" path="com.google.gwt.eclipse.core.GWT_CONTAINER"/>
|
||||||
|
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
|
||||||
|
<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="con" path="org.eclipse.jdt.USER_LIBRARY/ASL_LIBS"/>
|
||||||
|
<classpathentry kind="output" path="target/reports-4.0.0-SNAPSHOT/WEB-INF/classes"/>
|
||||||
|
</classpath>
|
|
@ -0,0 +1,59 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>reports</name>
|
||||||
|
<comment>reports project</comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.wst.common.project.facet.core.builder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.wst.validation.validationbuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.maven.ide.eclipse.maven2Builder</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.m2e.core.maven2Nature</nature>
|
||||||
|
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
|
||||||
|
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
|
||||||
|
<nature>org.maven.ide.eclipse.maven2Nature</nature>
|
||||||
|
<nature>org.eclipse.jdt.core.javanature</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,15 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<classpath>
|
||||||
|
<classpathentry kind="src" path="src/main/webapp" />
|
||||||
|
<classpathentry kind="con"
|
||||||
|
path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER" />
|
||||||
|
<classpathentry kind="con"
|
||||||
|
path="org.eclipse.wst.jsdt.launching.WebProject">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="hide" value="true" />
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="con"
|
||||||
|
path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary" />
|
||||||
|
<classpathentry kind="output" path="" />
|
||||||
|
</classpath>
|
|
@ -0,0 +1,3 @@
|
||||||
|
#Thu Jun 16 10:18:26 CEST 2011
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
filesCopiedToWebInfLib=
|
|
@ -0,0 +1,6 @@
|
||||||
|
#Wed Feb 06 12:30:01 CET 2013
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
jarsExcludedFromWebInfLib=
|
||||||
|
lastWarOutDir=/Users/massi/Documents/workspace/reports/target/reports-4.0.0-SNAPSHOT
|
||||||
|
warSrcDir=src/main/webapp
|
||||||
|
warSrcDirIsOutput=false
|
|
@ -0,0 +1,5 @@
|
||||||
|
#Thu Jun 16 11:14:17 CEST 2011
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
entryPointModules=
|
||||||
|
filesCopiedToWebInfLib=gwt-servlet.jar
|
||||||
|
gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBWy13YXIgc3JjL21haW4vd2ViYXBwXV0+PC9leHRyYS1hcmdzPjx2bS1hcmdzPjwhW0NEQVRBWy1YbXg1MTJtXV0+PC92bS1hcmdzPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLmNvbXBhbnkuU29tZU1vZHVsZTwvZW50cnktcG9pbnQtbW9kdWxlPjwvZ3d0LWNvbXBpbGUtc2V0dGluZ3M+
|
|
@ -0,0 +1,7 @@
|
||||||
|
#Wed Feb 06 12:30:01 CET 2013
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
encoding//src/main/java=UTF-8
|
||||||
|
encoding//src/main/resources=UTF-8
|
||||||
|
encoding//src/test/java=UTF-8
|
||||||
|
encoding//src/test/resources=UTF-8
|
||||||
|
encoding/<project>=UTF-8
|
|
@ -0,0 +1,9 @@
|
||||||
|
#Wed Feb 06 16:46:46 CET 2013
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
||||||
|
org.eclipse.jdt.core.compiler.compliance=1.6
|
||||||
|
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||||
|
org.eclipse.jdt.core.compiler.source=1.6
|
|
@ -0,0 +1,5 @@
|
||||||
|
#Wed Feb 06 12:30:01 CET 2013
|
||||||
|
activeProfiles=
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
resolveWorkspaceProjects=true
|
||||||
|
version=1
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project-modules id="moduleCoreId" project-version="1.5.0">
|
||||||
|
<wb-module deploy-name="${module}">
|
||||||
|
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
|
||||||
|
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
|
||||||
|
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
|
||||||
|
<wb-resource deploy-path="/WEB-INF/classes" source-path="/target/generated-sources/gwt"/>
|
||||||
|
<dependent-module archiveName="gcube-docx-generator-1.0.0-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/gcube-docx-generator/gcube-docx-generator">
|
||||||
|
<dependency-type>uses</dependency-type>
|
||||||
|
</dependent-module>
|
||||||
|
<property name="java-output-path" value="/${module}/target/www/WEB-INF/classes"/>
|
||||||
|
<property name="context-root" value="reports"/>
|
||||||
|
</wb-module>
|
||||||
|
</project-modules>
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<faceted-project>
|
||||||
|
<fixed facet="wst.jsdt.web"/>
|
||||||
|
<installed facet="wst.jsdt.web" version="1.0"/>
|
||||||
|
<installed facet="java" version="1.6"/>
|
||||||
|
<installed facet="jst.web" version="2.4"/>
|
||||||
|
</faceted-project>
|
|
@ -0,0 +1 @@
|
||||||
|
org.eclipse.wst.jsdt.launching.baseBrowserLibrary
|
|
@ -0,0 +1,9 @@
|
||||||
|
#Thu Sep 02 10:42:12 CEST 2010
|
||||||
|
activeProfiles=
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
fullBuildGoals=process-test-resources
|
||||||
|
includeModules=false
|
||||||
|
resolveWorkspaceProjects=true
|
||||||
|
resourceFilterGoals=process-resources resources\:testResources
|
||||||
|
skipCompilerPlugin=true
|
||||||
|
version=1
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<launchConfiguration type="com.google.gwt.eclipse.core.launch.gwtJUnit">
|
||||||
|
<stringAttribute key="com.google.gwt.eclipse.core.LOG_LEVEL" value="INFO"/>
|
||||||
|
<booleanAttribute key="com.google.gwt.eclipse.core.NOT_HEADLESS" value="false"/>
|
||||||
|
<stringAttribute key="com.google.gwt.eclipse.core.OUT_DIR" value="www-test"/>
|
||||||
|
<booleanAttribute key="com.google.gwt.eclipse.core.STANDARDS_MODE" value="false"/>
|
||||||
|
<stringAttribute key="com.google.gwt.eclipse.core.STYLE" value="OBFUSCATED"/>
|
||||||
|
<stringAttribute key="com.google.gwt.eclipse.core.WEB_MODE" value="false"/>
|
||||||
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||||
|
<listEntry value="/reports/src/test/java/org/gcube/portlets/user/reportgenerator/client/GwtTestReportGenerator.java"/>
|
||||||
|
</listAttribute>
|
||||||
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||||
|
<listEntry value="1"/>
|
||||||
|
</listAttribute>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
|
||||||
|
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="com.google.gdt.eclipse.maven.mavenClasspathProvider"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.gcube.portlets.user.reportgenerator.client.GwtTestReportGenerator"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="reports"/>
|
||||||
|
</launchConfiguration>
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<launchConfiguration type="com.google.gwt.eclipse.core.launch.gwtJUnit">
|
||||||
|
<stringAttribute key="com.google.gwt.eclipse.core.LOG_LEVEL" value="INFO"/>
|
||||||
|
<booleanAttribute key="com.google.gwt.eclipse.core.NOT_HEADLESS" value="false"/>
|
||||||
|
<stringAttribute key="com.google.gwt.eclipse.core.OUT_DIR" value="www-test"/>
|
||||||
|
<booleanAttribute key="com.google.gwt.eclipse.core.STANDARDS_MODE" value="false"/>
|
||||||
|
<stringAttribute key="com.google.gwt.eclipse.core.STYLE" value="OBFUSCATED"/>
|
||||||
|
<stringAttribute key="com.google.gwt.eclipse.core.WEB_MODE" value="true"/>
|
||||||
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||||
|
<listEntry value="/reports/src/test/java/org/gcube/portlets/user/reportgenerator/client/GwtTestReportGenerator.java"/>
|
||||||
|
</listAttribute>
|
||||||
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||||
|
<listEntry value="1"/>
|
||||||
|
</listAttribute>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
|
||||||
|
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="com.google.gdt.eclipse.maven.mavenClasspathProvider"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.gcube.portlets.user.reportgenerator.client.GwtTestReportGenerator"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="reports"/>
|
||||||
|
</launchConfiguration>
|
|
@ -0,0 +1,8 @@
|
||||||
|
To install the Template Creator portlet you need the following requirements:
|
||||||
|
|
||||||
|
* The Portlet WAR.
|
||||||
|
* The Dependecies JARs as declared in the Service Profile.
|
||||||
|
|
||||||
|
First of all you need a Portal properly configured and running.
|
||||||
|
|
||||||
|
|
|
@ -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,5 @@
|
||||||
|
Mantainers
|
||||||
|
-------
|
||||||
|
|
||||||
|
* Massimiliano Assante (massimiliano.assante@isti.cnr.it), CNR Pisa,
|
||||||
|
Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo".
|
|
@ -0,0 +1,55 @@
|
||||||
|
The gCube System - Template Creator portlet
|
||||||
|
------------------------------------------------------------
|
||||||
|
|
||||||
|
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).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Authors
|
||||||
|
-------
|
||||||
|
|
||||||
|
* Massimiliano Assante (massimiliano.assante@isti.cnr.it), CNR Pisa,
|
||||||
|
Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo".
|
||||||
|
|
||||||
|
|
||||||
|
Version and Release Date
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
v. 1.0.0, 15/12/2008
|
||||||
|
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Download information
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Source code is available from SVN:
|
||||||
|
http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/user/ReportGenerator-portlet
|
||||||
|
|
||||||
|
|
||||||
|
Binaries can be downloaded from:
|
||||||
|
http://software.d4science.research-infrastructures.eu/
|
||||||
|
|
||||||
|
|
||||||
|
Documentation
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Documentation is available on-line from the Projects Documentation Wiki:
|
||||||
|
|
||||||
|
https://gcube.wiki.gcube-system.org/gcube/index.php/Common_Functionality#Report_Generation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Licensing
|
||||||
|
---------
|
||||||
|
|
||||||
|
This software is licensed under the terms you may find in the file named "LICENSE" in this directory.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
<ReleaseNotes>
|
||||||
|
<Changeset component="org.gcube.portlets-user.report-generator-portlet.3-4-0" date="2012-05-04">
|
||||||
|
<Change>Top menu restyled</Change>
|
||||||
|
<Change>adapted to new Workspace Tree</Change>
|
||||||
|
<Change>adapted to new Home Library</Change>
|
||||||
|
</Changeset>
|
||||||
|
</ReleaseNotes>
|
|
@ -0,0 +1,48 @@
|
||||||
|
<assembly
|
||||||
|
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
|
||||||
|
<id>servicearchive</id>
|
||||||
|
<formats>
|
||||||
|
<format>tar.gz</format>
|
||||||
|
</formats>
|
||||||
|
<baseDirectory>/</baseDirectory>
|
||||||
|
<fileSets>
|
||||||
|
<fileSet>
|
||||||
|
<directory>${distroDirectory}</directory>
|
||||||
|
<outputDirectory>/</outputDirectory>
|
||||||
|
<useDefaultExcludes>true</useDefaultExcludes>
|
||||||
|
<includes>
|
||||||
|
<include>README</include>
|
||||||
|
<include>LICENSE</include>
|
||||||
|
<include>INSTALL</include>
|
||||||
|
<include>MAINTAINERS</include>
|
||||||
|
<include>changelog.xml</include>
|
||||||
|
</includes>
|
||||||
|
<fileMode>755</fileMode>
|
||||||
|
<filtered>true</filtered>
|
||||||
|
</fileSet>
|
||||||
|
<fileSet>
|
||||||
|
<directory>target/apidocs</directory>
|
||||||
|
<outputDirectory>/${artifactId}/doc/api</outputDirectory>
|
||||||
|
<useDefaultExcludes>true</useDefaultExcludes>
|
||||||
|
<fileMode>755</fileMode>
|
||||||
|
</fileSet>
|
||||||
|
</fileSets>
|
||||||
|
<files>
|
||||||
|
<file>
|
||||||
|
<source>${distroDirectory}/profile.xml</source>
|
||||||
|
<outputDirectory>./</outputDirectory>
|
||||||
|
<filtered>true</filtered>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<source>target/${build.finalName}.war</source>
|
||||||
|
<outputDirectory>/${artifactId}</outputDirectory>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<source>${distroDirectory}/svnpath.txt</source>
|
||||||
|
<outputDirectory>/${artifactId}</outputDirectory>
|
||||||
|
<filtered>true</filtered>
|
||||||
|
</file>
|
||||||
|
</files>
|
||||||
|
</assembly>
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<ID></ID>
|
||||||
|
<Type>Service</Type>
|
||||||
|
<Profile>
|
||||||
|
<Description>${description}</Description>
|
||||||
|
<Class>PortletUser</Class>
|
||||||
|
<Name>${artifactId}</Name>
|
||||||
|
<Version>${version}</Version>
|
||||||
|
<Packages>
|
||||||
|
<Software>
|
||||||
|
<Name>${artifactId}</Name>
|
||||||
|
<Version>${version}</Version>
|
||||||
|
<MavenCoordinates>
|
||||||
|
<groupId>${groupId}</groupId>
|
||||||
|
<artifactId>${artifactId}</artifactId>
|
||||||
|
<version>${version}</version>
|
||||||
|
</MavenCoordinates>
|
||||||
|
<Files>
|
||||||
|
<File>target/${build.finalName}.war</File>
|
||||||
|
</Files>
|
||||||
|
</Software>
|
||||||
|
</Packages>
|
||||||
|
</Profile>
|
||||||
|
</Resource>
|
|
@ -0,0 +1 @@
|
||||||
|
${scm.url}
|
|
@ -0,0 +1,309 @@
|
||||||
|
<?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">
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<artifactId>maven-parent</artifactId>
|
||||||
|
<groupId>org.gcube.tools</groupId>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
<relativePath />
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<groupId>org.gcube.portlets.user</groupId>
|
||||||
|
<artifactId>reports</artifactId>
|
||||||
|
<packaging>war</packaging>
|
||||||
|
<version>4.0.0-SNAPSHOT</version>
|
||||||
|
<name>gCube Reports Portlet</name>
|
||||||
|
<description>
|
||||||
|
gCube Reports Portlet.
|
||||||
|
</description>
|
||||||
|
<scm>
|
||||||
|
<connection>scm:svn:http://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/${project.artifactId}</connection>
|
||||||
|
<developerConnection>scm:https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/${project.artifactId}</developerConnection>
|
||||||
|
<url>http://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/${project.artifactId}</url>
|
||||||
|
</scm>
|
||||||
|
<properties>
|
||||||
|
<!-- Convenience property to set the GWT version -->
|
||||||
|
<gwtVersion>2.4.0</gwtVersion>
|
||||||
|
<distroDirectory>distro</distroDirectory>
|
||||||
|
<!-- GWT needs at least java 1.6 -->
|
||||||
|
<maven.compiler.source>1.6</maven.compiler.source>
|
||||||
|
<maven.compiler.target>1.6</maven.compiler.target>
|
||||||
|
<webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>
|
||||||
|
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<!-- This dependency is needed and is need on TOP to use GWT UI BInder
|
||||||
|
without old Xerces version of gCore complaining -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>xerces</groupId>
|
||||||
|
<artifactId>xercesImpl</artifactId>
|
||||||
|
<version>2.9.1</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.gwt</groupId>
|
||||||
|
<artifactId>gwt-user</artifactId>
|
||||||
|
<version>${gwtVersion}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.gwt</groupId>
|
||||||
|
<artifactId>gwt-servlet</artifactId>
|
||||||
|
<version>${gwtVersion}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.applicationsupportlayer</groupId>
|
||||||
|
<artifactId>aslsocial</artifactId>
|
||||||
|
<version>[0.1.0-SNAPSHOT, 1.0.0-SNAPSHOT)</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.portlets.user</groupId>
|
||||||
|
<artifactId>gcube-widgets</artifactId>
|
||||||
|
<version>[1.4.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.portlets.user</groupId>
|
||||||
|
<artifactId>guided-tour-widget</artifactId>
|
||||||
|
<version>[1.2.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.portal</groupId>
|
||||||
|
<artifactId>custom-portal-handler</artifactId>
|
||||||
|
<version>[1.2.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.sencha.gxt</groupId>
|
||||||
|
<artifactId>gxt</artifactId>
|
||||||
|
<version>2.2.5</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.common</groupId>
|
||||||
|
<artifactId>csv4j</artifactId>
|
||||||
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.portlets.user</groupId>
|
||||||
|
<artifactId>workspace-light-tree</artifactId>
|
||||||
|
<version>[2.9.0-SNAPSHOT, 3.0.0-SNAPSHOT)</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.portlets.admin</groupId>
|
||||||
|
<artifactId>document-workflow-library</artifactId>
|
||||||
|
<version>[1.2.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.portlets.user</groupId>
|
||||||
|
<artifactId>gcube-docx-generator</artifactId>
|
||||||
|
<version>[1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.portal</groupId>
|
||||||
|
<artifactId>gcube-reporting-library</artifactId>
|
||||||
|
<version>[3.0.0-SNAPSHOT, 4.0.0-SNAPSHOT)</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.portlets.user</groupId>
|
||||||
|
<artifactId>workspace-tree-widget</artifactId>
|
||||||
|
<version>[6.0.0-SNAPSHOT, 7.0.0-SNAPSHOT)</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.portlets.user</groupId>
|
||||||
|
<artifactId>home-library</artifactId>
|
||||||
|
<version>[4.3.0-SNAPSHOT, 5.0.0-SNAPSHOT)</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.portlets.user</groupId>
|
||||||
|
<artifactId>home-library-jcr</artifactId>
|
||||||
|
<version>[1.3.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.applicationsupportlayer</groupId>
|
||||||
|
<artifactId>accesslogger</artifactId>
|
||||||
|
<version>[1.2.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.derby</groupId>
|
||||||
|
<artifactId>derby</artifactId>
|
||||||
|
<version>10.8.2.2</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.liferay.portal</groupId>
|
||||||
|
<artifactId>portal-service</artifactId>
|
||||||
|
<version>6.0.6</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>log4j</groupId>
|
||||||
|
<artifactId>log4j</artifactId>
|
||||||
|
<version>1.2.16</version>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-log4j12</artifactId>
|
||||||
|
<version>1.6.4</version>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
<version>1.6.4</version>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.allen-sauer.gwt.log</groupId>
|
||||||
|
<artifactId>gwt-log</artifactId>
|
||||||
|
<version>3.1.8</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.portlet</groupId>
|
||||||
|
<artifactId>portlet-api</artifactId>
|
||||||
|
<version>2.0</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>4.7</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.validation</groupId>
|
||||||
|
<artifactId>validation-api</artifactId>
|
||||||
|
<version>1.0.0.GA</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.validation</groupId>
|
||||||
|
<artifactId>validation-api</artifactId>
|
||||||
|
<version>1.0.0.GA</version>
|
||||||
|
<classifier>sources</classifier>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<!-- Generate compiled stuff in the folder used for developing mode -->
|
||||||
|
<outputDirectory>${webappDirectory}/WEB-INF/classes</outputDirectory>
|
||||||
|
|
||||||
|
<plugins>
|
||||||
|
|
||||||
|
<!-- GWT Maven Plugin -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>gwt-maven-plugin</artifactId>
|
||||||
|
<version>2.4.0</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<goals>
|
||||||
|
<goal>compile</goal>
|
||||||
|
<!-- <goal>test</goal> -->
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<!-- Plugin configuration. There are many available options, see gwt-maven-plugin
|
||||||
|
documentation at codehaus.org -->
|
||||||
|
<configuration>
|
||||||
|
<runTarget>Messages.html</runTarget>
|
||||||
|
<hostedWebapp>${webappDirectory}</hostedWebapp>
|
||||||
|
</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>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>2.3.2</version>
|
||||||
|
<configuration>
|
||||||
|
<source>1.6</source>
|
||||||
|
<target>1.6</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<!-- SA Plugin -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-assembly-plugin</artifactId>
|
||||||
|
<version>2.2</version>
|
||||||
|
<configuration>
|
||||||
|
<descriptors>
|
||||||
|
<descriptor>${distroDirectory}/descriptor.xml</descriptor>
|
||||||
|
</descriptors>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>servicearchive</id>
|
||||||
|
<phase>install</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>single</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-resources-plugin</artifactId>
|
||||||
|
<version>2.5</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>copy-profile</id>
|
||||||
|
<phase>install</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>copy-resources</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<outputDirectory>target</outputDirectory>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>${distroDirectory}</directory>
|
||||||
|
<filtering>true</filtering>
|
||||||
|
<includes>
|
||||||
|
<include>profile.xml</include>
|
||||||
|
</includes>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
||||||
|
|
|
@ -0,0 +1,695 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.Metadata;
|
||||||
|
import org.gcube.portlets.user.gcubewidgets.client.popup.GCubeDialog;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.Presenter.CommonCommands;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.dialog.ImporterDialog;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.dialog.PagePropertiesDialog;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.model.ExportManifestationType;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.model.TemplateModel;
|
||||||
|
import org.gcube.portlets.user.workspace.lighttree.client.ItemType;
|
||||||
|
import org.gcube.portlets.user.workspace.lighttree.client.event.PopupEvent;
|
||||||
|
import org.gcube.portlets.user.workspace.lighttree.client.event.PopupHandler;
|
||||||
|
import org.gcube.portlets.user.workspace.lighttree.client.load.WorkspaceLightTreeLoadPopup;
|
||||||
|
|
||||||
|
import com.extjs.gxt.ui.client.widget.MessageBox;
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.core.client.RunAsyncCallback;
|
||||||
|
import com.google.gwt.user.client.Command;
|
||||||
|
import com.google.gwt.user.client.Window;
|
||||||
|
import com.google.gwt.user.client.ui.CellPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Composite;
|
||||||
|
import com.google.gwt.user.client.ui.Grid;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
|
||||||
|
import com.google.gwt.user.client.ui.HasVerticalAlignment;
|
||||||
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.MenuBar;
|
||||||
|
import com.google.gwt.user.client.ui.MenuItem;
|
||||||
|
import com.google.gwt.user.client.ui.MenuItemSeparator;
|
||||||
|
import com.google.gwt.user.client.ui.RichTextArea;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code> Headerbar </code> class is the top bar component of the UI
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
*
|
||||||
|
* @version July 2011 (3.0)
|
||||||
|
*/
|
||||||
|
public class Headerbar extends Composite{
|
||||||
|
|
||||||
|
private static final String ADD_BIBLIO_ENTRY = "Add citation";
|
||||||
|
private static final String VIEW_BIBLIO = "View Bibliography";
|
||||||
|
private static final String MANAGE_BIBLIO = "Delete citation(s)";
|
||||||
|
private static final String EXPORT_OPENXML = "Export to OpenXML (docx)";
|
||||||
|
private static final String EXPORT_HTML = "Export to HTML";
|
||||||
|
private static final String EXPORT_FIMES = "Export to FiMES XML";
|
||||||
|
|
||||||
|
private static final String VIEW_USER_COMMENTS = "View user comments";
|
||||||
|
|
||||||
|
String location;
|
||||||
|
|
||||||
|
private Presenter presenter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the template Model
|
||||||
|
*/
|
||||||
|
private TemplateModel templateModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* mainLayout Panel
|
||||||
|
*/
|
||||||
|
private CellPanel mainLayout = new HorizontalPanel();
|
||||||
|
|
||||||
|
|
||||||
|
//private MenuItem optionPDF;
|
||||||
|
|
||||||
|
private MenuItem importModel;
|
||||||
|
|
||||||
|
private MenuItem addBiblioEntry;
|
||||||
|
|
||||||
|
private MenuItem viewBiblio;
|
||||||
|
|
||||||
|
private MenuItem manageBiblio;
|
||||||
|
|
||||||
|
private MenuItem optionHTML;
|
||||||
|
|
||||||
|
private MenuItem optionDOCX;
|
||||||
|
|
||||||
|
private MenuItem optionFimes;
|
||||||
|
|
||||||
|
private MenuItem viewMetadata;
|
||||||
|
|
||||||
|
private MenuItem viewComments;
|
||||||
|
|
||||||
|
private MenuItem discardSection;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
MenuBar menuBar = new MenuBar();
|
||||||
|
|
||||||
|
MenuItem fileMenu;
|
||||||
|
MenuItem viewMenu;
|
||||||
|
MenuItem sectionsMenu;
|
||||||
|
MenuItem biblioMenu;
|
||||||
|
MenuItem exportMenu;
|
||||||
|
MenuItemSeparator separator1;
|
||||||
|
MenuItemSeparator separator2;
|
||||||
|
MenuItemSeparator separator3;
|
||||||
|
MenuItemSeparator separator4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param c the controller instance for this UI component
|
||||||
|
*/
|
||||||
|
public Headerbar(Presenter c) {
|
||||||
|
this.presenter = c;
|
||||||
|
this.templateModel = presenter.getModel();
|
||||||
|
|
||||||
|
menuBar.setAutoOpen(false);
|
||||||
|
// menuBar.setWidth("100px");
|
||||||
|
menuBar.setAnimationEnabled(true);
|
||||||
|
fileMenu = getFileMenu();
|
||||||
|
menuBar.addItem(fileMenu);
|
||||||
|
separator1 = menuBar.addSeparator();
|
||||||
|
viewMenu = getViewMenu();
|
||||||
|
menuBar.addItem(viewMenu);
|
||||||
|
separator2 = menuBar.addSeparator();
|
||||||
|
sectionsMenu = getSectionMenu();
|
||||||
|
menuBar.addItem(sectionsMenu);
|
||||||
|
separator3 = menuBar.addSeparator();
|
||||||
|
biblioMenu = getBiblioMenu();
|
||||||
|
menuBar.addItem(biblioMenu);
|
||||||
|
separator4 = menuBar.addSeparator();
|
||||||
|
exportMenu = getExportsMenu();
|
||||||
|
menuBar.addItem(exportMenu);
|
||||||
|
|
||||||
|
mainLayout.setSize("100%", "24px");
|
||||||
|
mainLayout.setStyleName("menubar");
|
||||||
|
|
||||||
|
mainLayout.add(menuBar);
|
||||||
|
|
||||||
|
//design the part for the template name and the pages handling
|
||||||
|
|
||||||
|
HorizontalPanel captionPanel = new HorizontalPanel();
|
||||||
|
captionPanel.setWidth("100%");
|
||||||
|
|
||||||
|
HorizontalPanel pageHandlerPanel = new HorizontalPanel();
|
||||||
|
pageHandlerPanel.setHeight("24");
|
||||||
|
pageHandlerPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
|
||||||
|
|
||||||
|
captionPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
|
||||||
|
mainLayout.add(captionPanel);
|
||||||
|
mainLayout.add(pageHandlerPanel);
|
||||||
|
mainLayout.setCellHorizontalAlignment(menuBar, HasHorizontalAlignment.ALIGN_LEFT);
|
||||||
|
mainLayout.setCellHorizontalAlignment(captionPanel, HasHorizontalAlignment.ALIGN_LEFT);
|
||||||
|
mainLayout.setCellWidth(menuBar, "200");
|
||||||
|
mainLayout.setCellWidth(pageHandlerPanel, "200");
|
||||||
|
initWidget(mainLayout);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMenuForWorkflowDocument(boolean canUpdate) {
|
||||||
|
presenter.setMenuForWorkflowDocument(true);
|
||||||
|
menuBar.removeItem(fileMenu);
|
||||||
|
menuBar.removeItem(viewMenu);
|
||||||
|
menuBar.removeItem(sectionsMenu);
|
||||||
|
menuBar.removeItem(biblioMenu);
|
||||||
|
menuBar.removeSeparator(separator1);
|
||||||
|
menuBar.removeSeparator(separator2);
|
||||||
|
menuBar.removeItem(exportMenu);
|
||||||
|
|
||||||
|
MenuBar workflowMenu = new MenuBar(true);
|
||||||
|
workflowMenu.setAnimationEnabled(true);
|
||||||
|
|
||||||
|
MenuItem menu = new MenuItem("<nobr>Workflow Document Options</nobr>", true, workflowMenu);
|
||||||
|
menu.setWidth("400px");
|
||||||
|
Command updateWfDocument = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
presenter.updateWorkflowDocument(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Command backCommand = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
presenter.updateWorkflowDocument(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Command showChanges = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
presenter.showLastChangesPopup();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (canUpdate)
|
||||||
|
workflowMenu.addItem("Update this document", updateWfDocument);
|
||||||
|
//workflowMenu.addItem("Show previous changes", showChanges);
|
||||||
|
workflowMenu.addSeparator();
|
||||||
|
workflowMenu.addItem("Back to My Workflow Documents", backCommand);
|
||||||
|
|
||||||
|
menuBar.addItem(menu);
|
||||||
|
separator1 = menuBar.addSeparator();
|
||||||
|
viewMenu = getViewMenu();
|
||||||
|
menuBar.addItem(viewMenu);
|
||||||
|
separator2 = menuBar.addSeparator();
|
||||||
|
sectionsMenu = getSectionMenu();
|
||||||
|
menuBar.addItem(sectionsMenu);
|
||||||
|
separator3 = menuBar.addSeparator();
|
||||||
|
biblioMenu = getBiblioMenu();
|
||||||
|
menuBar.addItem(biblioMenu);
|
||||||
|
separator4 = menuBar.addSeparator();
|
||||||
|
exportMenu = getExportsMenu();
|
||||||
|
menuBar.addItem(exportMenu);
|
||||||
|
ReportGenerator.get().getToolbarPanel().clear();
|
||||||
|
ReportGenerator.get().getToolbarPanel().add(new HTML(" ", true));
|
||||||
|
enableExports();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Redirect to VRE Deployer Portlet
|
||||||
|
*/
|
||||||
|
private void loadWorkflowLibraryApp(){
|
||||||
|
getUrl();
|
||||||
|
location += "/../my-workflow-documents";
|
||||||
|
Window.open(location, "_self", "");
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Get URL from browser
|
||||||
|
*/
|
||||||
|
public native void getUrl()/*-{
|
||||||
|
this.@org.gcube.portlets.user.reportgenerator.client.Headerbar::location = $wnd.location.href;
|
||||||
|
}-*/;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* temporary command
|
||||||
|
* @return the command instance
|
||||||
|
*/
|
||||||
|
public Command getNullCommand() {
|
||||||
|
Command openNothing = new Command() {
|
||||||
|
|
||||||
|
public void execute() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
return openNothing;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* temporary command
|
||||||
|
* @return the command instance
|
||||||
|
*/
|
||||||
|
public Command getBiblioCommand() {
|
||||||
|
Command openNothing = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
MessageBox.alert("Warning ","A textarea must be selected to add an entry", null);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return openNothing;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Command addCitationCmd = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
presenter.openAddCitationDialog();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Command viewBiblioCmd = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
if (presenter.hasBibliography()) {
|
||||||
|
presenter.seekLastPage();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
MessageBox.alert("Warning", "No bibliography found, to add bibliography start adding citations:<br />Bibliography > Add citation (from within a text area)", null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Command manageBiblioCmd = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
if (presenter.hasBibliography()) {
|
||||||
|
presenter.openManageCitationsDialog();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
MessageBox.alert("Warning", "No bibliography found, to add bibliography start adding citations:<br />Bibliography > Add citation (from within a text area)", null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private MenuItem getBiblioMenu() {
|
||||||
|
// Create the Options menu
|
||||||
|
MenuBar biblioMenu = new MenuBar(true);
|
||||||
|
MenuItem toReturn = new MenuItem("Bibliography", biblioMenu);
|
||||||
|
biblioMenu.setAnimationEnabled(true);
|
||||||
|
addBiblioEntry = new MenuItem("<font color=\"gray\">"+ ADD_BIBLIO_ENTRY +"</font>", true, getBiblioCommand());
|
||||||
|
biblioMenu.addItem(addBiblioEntry);
|
||||||
|
viewBiblio = new MenuItem(VIEW_BIBLIO, true, viewBiblioCmd);
|
||||||
|
manageBiblio = new MenuItem(MANAGE_BIBLIO, true, manageBiblioCmd);
|
||||||
|
biblioMenu.addSeparator();
|
||||||
|
biblioMenu.addItem(manageBiblio);
|
||||||
|
biblioMenu.addItem(viewBiblio);
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private MenuItem getSectionMenu() {
|
||||||
|
// Create the Options menu
|
||||||
|
MenuBar insertsMenu = new MenuBar(true);
|
||||||
|
MenuItem toReturn = new MenuItem("Section", insertsMenu);
|
||||||
|
insertsMenu.setAnimationEnabled(true);
|
||||||
|
importModel = new MenuItem("<font color=\"gray\">Import from Template or Report</font>", true, getNullCommand());
|
||||||
|
insertsMenu.addItem(importModel);
|
||||||
|
viewMetadata = new MenuItem("<font color=\"gray\">View Metadata</font>", true, getNullCommand());
|
||||||
|
discardSection = new MenuItem("<font color=\"gray\">Discard current</font>", true, getNullCommand());
|
||||||
|
viewComments = new MenuItem("<font color=\"gray\">"+ VIEW_USER_COMMENTS+"</font>", true, getNullCommand());
|
||||||
|
insertsMenu.addItem(discardSection);
|
||||||
|
insertsMenu.addSeparator();
|
||||||
|
insertsMenu.addItem(viewMetadata);
|
||||||
|
insertsMenu.addItem(viewComments);
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private MenuItem getExportsMenu() {
|
||||||
|
MenuBar exportsMenu = new MenuBar(true);
|
||||||
|
|
||||||
|
exportsMenu.setAnimationEnabled(true);
|
||||||
|
MenuItem toReturn = new MenuItem("Export", exportsMenu);
|
||||||
|
|
||||||
|
optionDOCX = new MenuItem("<font color=\"gray\">"+ EXPORT_OPENXML +"</font>", true, getNullCommand());
|
||||||
|
// optionPDF = new MenuItem("<font color=\"gray\">Export to PDF</font>", true, getNullCommand());
|
||||||
|
optionHTML = new MenuItem("<font color=\"gray\">"+ EXPORT_HTML +"</font>", true, getNullCommand());
|
||||||
|
optionFimes = new MenuItem("<font color=\"gray\">"+ EXPORT_FIMES +"</font>", true, getNullCommand());
|
||||||
|
|
||||||
|
exportsMenu.addItem(optionDOCX);
|
||||||
|
exportsMenu.addItem(optionHTML);
|
||||||
|
|
||||||
|
//optionsMenu.addItem(optionPDF);
|
||||||
|
//exportsMenu.addItem(optionFimes);
|
||||||
|
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
private MenuItem getViewMenu() {
|
||||||
|
Command openPageProperties = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
int left = mainLayout.getAbsoluteLeft() + 50;
|
||||||
|
int top = mainLayout.getAbsoluteTop() + 25;
|
||||||
|
PagePropertiesDialog dlg = new PagePropertiesDialog(templateModel, presenter);
|
||||||
|
dlg.setPopupPosition(left, top);
|
||||||
|
dlg.setAnimationEnabled(true);
|
||||||
|
dlg.show();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Command showReportStructure = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
presenter.showReportStructure();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create the Options menu
|
||||||
|
MenuBar optionsMenu = new MenuBar(true);
|
||||||
|
|
||||||
|
optionsMenu.setAnimationEnabled(true);
|
||||||
|
MenuItem toReturn = new MenuItem("View", optionsMenu);
|
||||||
|
|
||||||
|
optionsMenu.addItem("View Properties", openPageProperties);
|
||||||
|
optionsMenu.addItem("View Structure", showReportStructure);
|
||||||
|
optionsMenu.addSeparator();
|
||||||
|
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* rewrite with setHTML to remove the gray color
|
||||||
|
*/
|
||||||
|
public void enableExports() {
|
||||||
|
|
||||||
|
optionDOCX.setHTML(EXPORT_OPENXML);
|
||||||
|
optionDOCX.setCommand(generateDOCX);
|
||||||
|
|
||||||
|
// optionPDF.setHTML("Export to PDF");
|
||||||
|
// optionPDF.setCommand(generatePDF);
|
||||||
|
|
||||||
|
optionHTML.setHTML(EXPORT_HTML);
|
||||||
|
optionHTML.setCommand(generateHTML);
|
||||||
|
|
||||||
|
optionFimes.setHTML(EXPORT_FIMES);
|
||||||
|
optionFimes.setCommand(generateFimes);
|
||||||
|
//
|
||||||
|
importModel.setHTML("Import from Template or Report");
|
||||||
|
importModel.setCommand(importModelOrReport);
|
||||||
|
|
||||||
|
viewMetadata.setHTML("View Metadata");
|
||||||
|
viewMetadata.setCommand(openMetadata);
|
||||||
|
|
||||||
|
viewComments.setHTML(VIEW_USER_COMMENTS);
|
||||||
|
viewComments.setCommand(showUserComments);
|
||||||
|
|
||||||
|
discardSection.setHTML("Discard current");
|
||||||
|
discardSection.setCommand(discardSectionCom);
|
||||||
|
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
Command showUserComments = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
presenter.showSectionUserCommentsTooltips();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* rewrite with setHTML to remove the gray color
|
||||||
|
* @param d4sArea
|
||||||
|
*/
|
||||||
|
public void enableBiblioEntry(RichTextArea d4sArea) {
|
||||||
|
addBiblioEntry.setHTML(ADD_BIBLIO_ENTRY);
|
||||||
|
addBiblioEntry.setCommand(addBiblioEntryCommand);
|
||||||
|
presenter.setAreaForBiblio(d4sArea);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* build the File Menu
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
|
||||||
|
private MenuItem getFileMenu() {
|
||||||
|
Command newTemplate = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
presenter.changeTemplateName(TemplateModel.DEFAULT_NAME);
|
||||||
|
presenter.cleanAll();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Command openTemplate = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
GWT.runAsync(WorkspaceLightTreeLoadPopup.class, new RunAsyncCallback() {
|
||||||
|
public void onSuccess() {
|
||||||
|
|
||||||
|
int left = mainLayout.getAbsoluteLeft() + 50;
|
||||||
|
int top = mainLayout.getAbsoluteTop() + 25;
|
||||||
|
|
||||||
|
WorkspaceLightTreeLoadPopup wpTreepopup = new WorkspaceLightTreeLoadPopup("Open Template", true, true);
|
||||||
|
wpTreepopup.setShowableTypes(ItemType.REPORT_TEMPLATE);
|
||||||
|
wpTreepopup.setSelectableTypes(ItemType.REPORT_TEMPLATE);
|
||||||
|
|
||||||
|
wpTreepopup.addPopupHandler(new PopupHandler() {
|
||||||
|
public void onPopup(PopupEvent event) {
|
||||||
|
if (! event.isCanceled()) {
|
||||||
|
if (event.getSelectedItem() != null) {
|
||||||
|
presenter.openTemplate(event.getSelectedItem().getName(), event.getSelectedItem().getId(), true);
|
||||||
|
}
|
||||||
|
presenter.getHeader().enableExports();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
wpTreepopup.setPopupPosition(left, top);
|
||||||
|
wpTreepopup.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onFailure(Throwable reason) {
|
||||||
|
Window.alert("There are networks problem, please check your connection.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Command openHelp = new Command() {
|
||||||
|
|
||||||
|
public void execute() {
|
||||||
|
if (! ReportConstants.isDeployed) {
|
||||||
|
presenter.openTemplate("", "", true);
|
||||||
|
enableExports();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
String url = "https://gcube.wiki.gcube-system.org/gcube/index.php/Common_Functionality#Report_Management";
|
||||||
|
int width = Window.getClientWidth();
|
||||||
|
int height = Window.getClientHeight();
|
||||||
|
int winWidth = (int) (Window.getClientWidth() * 0.8);
|
||||||
|
int winHeight = (int) (Window.getClientHeight() * 0.7);
|
||||||
|
int left = (width - winWidth) / 2;
|
||||||
|
int top = (height - winHeight) / 2;
|
||||||
|
Window.open(url, null,"left=" + left + "top" + top + ", width=" + winWidth + ", height=" + winHeight + ", resizable=yes, scrollbars=yes, status=yes");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
Command openReport = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
|
||||||
|
GWT.runAsync(WorkspaceLightTreeLoadPopup.class, new RunAsyncCallback() {
|
||||||
|
public void onSuccess() {
|
||||||
|
int left = mainLayout.getAbsoluteLeft() + 50;
|
||||||
|
int top = mainLayout.getAbsoluteTop() + 25;
|
||||||
|
|
||||||
|
WorkspaceLightTreeLoadPopup wpTreepopup = new WorkspaceLightTreeLoadPopup("Open Report", true, true);
|
||||||
|
wpTreepopup.setShowableTypes(ItemType.REPORT);
|
||||||
|
wpTreepopup.setSelectableTypes(ItemType.REPORT);
|
||||||
|
wpTreepopup.addPopupHandler(new PopupHandler() {
|
||||||
|
public void onPopup(PopupEvent event) {
|
||||||
|
if (! event.isCanceled()) {
|
||||||
|
if (event.getSelectedItem() != null) {
|
||||||
|
presenter.openTemplate(event.getSelectedItem().getName(), event.getSelectedItem().getId(), false);
|
||||||
|
}
|
||||||
|
presenter.getHeader().enableExports();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
wpTreepopup.setPopupPosition(left, top);
|
||||||
|
wpTreepopup.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onFailure(Throwable reason) {
|
||||||
|
Window.alert("There are networks problem, please check your connection.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Command saveReportAs = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
CommonCommands cmd = new CommonCommands(presenter);
|
||||||
|
cmd.saveReportAsDialog();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Command saveReport = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
if (templateModel.getTemplateName().endsWith("d4sR"))
|
||||||
|
presenter.saveReport();
|
||||||
|
else {
|
||||||
|
CommonCommands cmd = new CommonCommands(presenter);
|
||||||
|
cmd.saveReportAsDialog();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Command importFimes = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
presenter.showImportPopup();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Create the file menu
|
||||||
|
MenuBar fileMenu = new MenuBar(true);
|
||||||
|
fileMenu.setAnimationEnabled(true);
|
||||||
|
|
||||||
|
MenuItem toReturn = new MenuItem("File", fileMenu);
|
||||||
|
fileMenu.addItem("Open template...", openTemplate);
|
||||||
|
// fileMenu.addSeparator();
|
||||||
|
|
||||||
|
// fileMenu.addItem("Open saved Report", getNullCommand());
|
||||||
|
fileMenu.addSeparator();
|
||||||
|
fileMenu.addItem("Open Report", openReport);
|
||||||
|
fileMenu.addItem("Save", saveReport);
|
||||||
|
fileMenu.addItem("Save As ..", saveReportAs);
|
||||||
|
fileMenu.addSeparator();
|
||||||
|
// fileMenu.addItem("Import from FiMES XML", importFimes);
|
||||||
|
fileMenu.addItem("Close Report", newTemplate);
|
||||||
|
fileMenu.addSeparator();
|
||||||
|
fileMenu.addItem("? Open User's Guide", openHelp);
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param model .
|
||||||
|
*/
|
||||||
|
public void setModel(TemplateModel model ) {
|
||||||
|
this.templateModel = model;
|
||||||
|
}
|
||||||
|
|
||||||
|
//************** COMMANDS ********************************////
|
||||||
|
|
||||||
|
Command generateFimes = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
presenter.generateFiMES(templateModel);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Command generateDOCX = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
presenter.generateManifestation(templateModel, ExportManifestationType.DOCX);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Command generatePDF = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
Window.alert("PDF Exporting may not be fully working, you can also generate a PDF using your Word Processor application starting from the docx exported file");
|
||||||
|
presenter.generateManifestation(templateModel, ExportManifestationType.PDF);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Command generateHTML = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
presenter.generateManifestation(templateModel, ExportManifestationType.HTML);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Command discardSectionCom = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
presenter.discardCurrentSection();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//************** COMMANDS ********************************////
|
||||||
|
Command addBiblioEntryCommand = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
presenter.openAddCitationDialog();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
Command openMetadata = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
int left = mainLayout.getAbsoluteLeft() + 50;
|
||||||
|
int top = mainLayout.getAbsoluteTop() + 25;
|
||||||
|
GCubeDialog dlg = new GCubeDialog(true);
|
||||||
|
dlg.setText("Report Metadata:");
|
||||||
|
int pageNo = presenter.getModel().getCurrentPage();
|
||||||
|
List<Metadata> metadatas = presenter.getModel().getSection(pageNo).getAllMetadata();
|
||||||
|
int nRows = metadatas.size();
|
||||||
|
Grid metadataGrid = new Grid(nRows, 2);
|
||||||
|
int i = 0;
|
||||||
|
for (Metadata md : metadatas) {
|
||||||
|
metadataGrid.setWidget(i, 0, new HTML("<b>" + md.getAttribute() + ": </b>"));
|
||||||
|
metadataGrid.setWidget(i, 1, new HTML(md.getValue()));
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
dlg.setWidget(metadataGrid);
|
||||||
|
dlg.setPopupPosition(left, top);
|
||||||
|
dlg.setAnimationEnabled(true);
|
||||||
|
dlg.show();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Command importModelOrReport = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
if (! ReportConstants.isDeployed) {
|
||||||
|
int left = mainLayout.getAbsoluteLeft() + 50;
|
||||||
|
int top = mainLayout.getAbsoluteTop() + 25;
|
||||||
|
ImporterDialog dlg = new ImporterDialog(null, presenter);
|
||||||
|
dlg.setPopupPosition(left, top);
|
||||||
|
dlg.setAnimationEnabled(true);
|
||||||
|
dlg.show();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
int left = mainLayout.getAbsoluteLeft() + 50;
|
||||||
|
int top = mainLayout.getAbsoluteTop() + 25;
|
||||||
|
WorkspaceLightTreeLoadPopup wpTreepopup = new WorkspaceLightTreeLoadPopup("Pick the item you want to import from", true, true);
|
||||||
|
wpTreepopup.setShowableTypes(ItemType.REPORT_TEMPLATE, ItemType.REPORT);
|
||||||
|
|
||||||
|
wpTreepopup.addPopupHandler(new PopupHandler() {
|
||||||
|
public void onPopup(PopupEvent event) {
|
||||||
|
if (! event.isCanceled()) {
|
||||||
|
if (event.getSelectedItem() != null) {
|
||||||
|
int left = mainLayout.getAbsoluteLeft() + 50;
|
||||||
|
int top = mainLayout.getAbsoluteTop() + 25;
|
||||||
|
ImporterDialog dlg = new ImporterDialog(event.getSelectedItem(), presenter);
|
||||||
|
dlg.setPopupPosition(left, top);
|
||||||
|
dlg.setAnimationEnabled(true);
|
||||||
|
dlg.show();
|
||||||
|
}
|
||||||
|
presenter.getHeader().enableExports();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
wpTreepopup.setPopupPosition(left, top);
|
||||||
|
wpTreepopup.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public CellPanel getMainLayout() {
|
||||||
|
return mainLayout;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,225 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.Presenter;
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.ReportConstants;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.dialog.ImageUploaderDialog;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.dialog.ImporterDialog;
|
||||||
|
import org.gcube.portlets.user.workspace.lighttree.client.ItemType;
|
||||||
|
import org.gcube.portlets.user.workspace.lighttree.client.event.PopupEvent;
|
||||||
|
import org.gcube.portlets.user.workspace.lighttree.client.event.PopupHandler;
|
||||||
|
import org.gcube.portlets.user.workspace.lighttree.client.load.WorkspaceLightTreeLoadPopup;
|
||||||
|
import org.gcube.portlets.user.workspace.lighttree.client.save.WorkspaceLightTreeSavePopup;
|
||||||
|
|
||||||
|
import com.extjs.gxt.ui.client.event.ColorPaletteEvent;
|
||||||
|
import com.extjs.gxt.ui.client.event.Events;
|
||||||
|
import com.extjs.gxt.ui.client.event.Listener;
|
||||||
|
import com.extjs.gxt.ui.client.widget.ColorPalette;
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.core.client.RunAsyncCallback;
|
||||||
|
import com.google.gwt.user.client.Command;
|
||||||
|
import com.google.gwt.user.client.Window;
|
||||||
|
import com.google.gwt.user.client.ui.PopupPanel;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* *
|
||||||
|
* /**
|
||||||
|
* <code> CommonCommands </code> class contains the menu commands for the UI
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
*
|
||||||
|
* @version December 2012 (2.7)
|
||||||
|
*/
|
||||||
|
public class CommonCommands {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public Command openTemplate;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public Command importTemplateCommand;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public Command insertImage;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public Command saveTemplate;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public Command pickColor;
|
||||||
|
|
||||||
|
private Presenter presenter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param presenter .
|
||||||
|
*/
|
||||||
|
public CommonCommands(final Presenter presenter) {
|
||||||
|
this.presenter = presenter;
|
||||||
|
openTemplate = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
final int left = presenter.getHeader().getMainLayout().getAbsoluteLeft() + 50;
|
||||||
|
final int top = presenter.getHeader().getMainLayout().getAbsoluteTop() + 25;
|
||||||
|
|
||||||
|
GWT.runAsync(WorkspaceLightTreeLoadPopup.class, new RunAsyncCallback() {
|
||||||
|
public void onSuccess() {
|
||||||
|
WorkspaceLightTreeLoadPopup wpTreepopup = new WorkspaceLightTreeLoadPopup("Open Template", true, true);
|
||||||
|
wpTreepopup.setShowableTypes(ItemType.REPORT_TEMPLATE);
|
||||||
|
wpTreepopup.setSelectableTypes(ItemType.REPORT_TEMPLATE);
|
||||||
|
|
||||||
|
|
||||||
|
wpTreepopup.addPopupHandler(new PopupHandler() {
|
||||||
|
public void onPopup(PopupEvent event) {
|
||||||
|
if (! event.isCanceled()) {
|
||||||
|
if (event.getSelectedItem() != null) {
|
||||||
|
presenter.openTemplate(event.getSelectedItem().getName(), event.getSelectedItem().getId(), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
wpTreepopup.setPopupPosition(left, top);
|
||||||
|
wpTreepopup.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onFailure(Throwable reason) {
|
||||||
|
Window.alert("There are networks problem, please check your connection.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
insertImage = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
int left = presenter.getHeader().getMainLayout().getAbsoluteLeft() + 50;
|
||||||
|
int top = presenter.getHeader().getMainLayout().getAbsoluteTop() + 25;
|
||||||
|
ImageUploaderDialog dlg = new ImageUploaderDialog(presenter);
|
||||||
|
dlg.setAnimationEnabled(true);
|
||||||
|
dlg.setPopupPosition(left, top);
|
||||||
|
dlg.show();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
pickColor = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
int left = presenter.getHeader().getMainLayout().getAbsoluteLeft() + 600;
|
||||||
|
int top = presenter.getHeader().getMainLayout().getAbsoluteTop() + 50;
|
||||||
|
final PopupPanel pp = new PopupPanel(true);
|
||||||
|
|
||||||
|
ColorPalette colorPalette = new ColorPalette();
|
||||||
|
colorPalette.addListener(Events.Select, new Listener<ColorPaletteEvent>() {
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public void handleEvent(ColorPaletteEvent be) {
|
||||||
|
presenter.getCurrentSelected().getExtendedFormatter().setForeColor(be.getColor());
|
||||||
|
pp.hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
pp.add(colorPalette);
|
||||||
|
pp.setAnimationEnabled(false);
|
||||||
|
pp.setPopupPosition(left, top);
|
||||||
|
pp.show();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
importTemplateCommand = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
if (! ReportConstants.isDeployed) {
|
||||||
|
int left = presenter.getHeader().getMainLayout().getAbsoluteLeft() + 50;
|
||||||
|
int top = presenter.getHeader().getMainLayout().getAbsoluteTop() + 25;
|
||||||
|
ImporterDialog dlg = new ImporterDialog(null, presenter);
|
||||||
|
dlg.setPopupPosition(left, top);
|
||||||
|
dlg.setAnimationEnabled(true);
|
||||||
|
dlg.show();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
GWT.runAsync(WorkspaceLightTreeLoadPopup.class, new RunAsyncCallback() {
|
||||||
|
public void onSuccess() {
|
||||||
|
WorkspaceLightTreeLoadPopup wpTreepopup = new WorkspaceLightTreeLoadPopup("Pick the item you want to import from", true, true);
|
||||||
|
wpTreepopup.setShowableTypes(ItemType.REPORT_TEMPLATE);
|
||||||
|
|
||||||
|
|
||||||
|
wpTreepopup.addPopupHandler(new PopupHandler() {
|
||||||
|
public void onPopup(PopupEvent event) {
|
||||||
|
if (! event.isCanceled()) {
|
||||||
|
if (event.getSelectedItem() != null) {
|
||||||
|
int left = presenter.getHeader().getMainLayout().getAbsoluteLeft() + 50;
|
||||||
|
int top = presenter.getHeader().getMainLayout().getAbsoluteTop() + 25;
|
||||||
|
ImporterDialog dlg = new ImporterDialog(event.getSelectedItem(), presenter);
|
||||||
|
dlg.setPopupPosition(left, top);
|
||||||
|
dlg.setAnimationEnabled(true);
|
||||||
|
dlg.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
int left = presenter.getHeader().getMainLayout().getAbsoluteLeft() + 50;
|
||||||
|
int top = presenter.getHeader().getMainLayout().getAbsoluteTop() + 25;
|
||||||
|
wpTreepopup.setPopupPosition(left, top);
|
||||||
|
wpTreepopup.show();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onFailure(Throwable reason) {
|
||||||
|
Window.alert("There are networks problem, please check your connection.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
saveTemplate = new Command() {
|
||||||
|
public void execute() {
|
||||||
|
if (presenter.getModel().getTemplateName().endsWith("d4sR"))
|
||||||
|
presenter.saveReport();
|
||||||
|
else
|
||||||
|
saveReportAsDialog();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} //end constructor
|
||||||
|
|
||||||
|
public void saveReportAsDialog() {
|
||||||
|
final int left = presenter.getHeader().getMainLayout().getAbsoluteLeft() + 50;
|
||||||
|
final int top = presenter.getHeader().getMainLayout().getAbsoluteTop() + 25;
|
||||||
|
|
||||||
|
GWT.runAsync(WorkspaceLightTreeSavePopup.class, new RunAsyncCallback() {
|
||||||
|
public void onSuccess() {
|
||||||
|
WorkspaceLightTreeSavePopup wpTreepopup = new WorkspaceLightTreeSavePopup("Save Template, choose folder please:", true);
|
||||||
|
wpTreepopup.setSelectableTypes( ItemType.FOLDER, ItemType.ROOT);
|
||||||
|
wpTreepopup.setShowEmptyFolders(true);
|
||||||
|
|
||||||
|
wpTreepopup.addPopupHandler(new PopupHandler() {
|
||||||
|
public void onPopup(PopupEvent event) {
|
||||||
|
|
||||||
|
//checking user input
|
||||||
|
String inputUser = event.getName();
|
||||||
|
String newTemplateName = inputUser;
|
||||||
|
if (presenter.getModel().getTemplateName().compareTo(newTemplateName) != 0) {
|
||||||
|
newTemplateName = newTemplateName.trim();
|
||||||
|
presenter.getModel().setTemplateName(newTemplateName+".d4sR");
|
||||||
|
}
|
||||||
|
presenter.changeTemplateName(newTemplateName);
|
||||||
|
presenter.saveReport(event.getSelectedItem().getId(), newTemplateName);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
wpTreepopup.setPopupPosition(left, top);
|
||||||
|
wpTreepopup.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onFailure(Throwable reason) {
|
||||||
|
Window.alert("There are networks problem, please check your connection.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client;
|
||||||
|
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
/**
|
||||||
|
* Simply a class containing Static Constants
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version november 2008 (0.1)
|
||||||
|
*/
|
||||||
|
public class ReportConstants {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* tell if you running in eclipse or not
|
||||||
|
*/
|
||||||
|
public static final boolean isDeployed = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static final String LOADING_BAR = GWT.getModuleBaseURL() + "../images/loading-bar.gif";
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static final String IMAGE_NEXT_PAGE = GWT.getModuleBaseURL() + "../images/next_p.gif";
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static final String IMAGE_PREV_PAGE = GWT.getModuleBaseURL() + "../images/prev_p.gif";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,403 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client;
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.guidedtour.client.GCUBEGuidedTour;
|
||||||
|
import org.gcube.portlets.user.guidedtour.client.steps.GCUBETemplate1Text1Image;
|
||||||
|
import org.gcube.portlets.user.guidedtour.client.steps.GCUBETemplate2Text2Image;
|
||||||
|
import org.gcube.portlets.user.guidedtour.client.steps.TourStep;
|
||||||
|
import org.gcube.portlets.user.guidedtour.client.types.ThemeColor;
|
||||||
|
import org.gcube.portlets.user.guidedtour.client.types.VerticalAlignment;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.toursteps.Intro;
|
||||||
|
import org.gcube.portlets.user.workspace.client.AppControllerExplorer;
|
||||||
|
import org.gcube.portlets.user.workspace.client.rpc.GWTWorkspaceServiceAsync;
|
||||||
|
import org.gcube.portlets.user.workspace.lighttree.client.ItemType;
|
||||||
|
import org.gcube.portlets.user.workspace.lighttree.client.event.PopupEvent;
|
||||||
|
import org.gcube.portlets.user.workspace.lighttree.client.event.PopupHandler;
|
||||||
|
import org.gcube.portlets.user.workspace.lighttree.client.load.WorkspaceLightTreeLoadPopup;
|
||||||
|
|
||||||
|
import com.google.gwt.core.client.EntryPoint;
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.core.client.RunAsyncCallback;
|
||||||
|
import com.google.gwt.event.logical.shared.ResizeEvent;
|
||||||
|
import com.google.gwt.event.logical.shared.ResizeHandler;
|
||||||
|
import com.google.gwt.user.client.Window;
|
||||||
|
import com.google.gwt.user.client.ui.CellPanel;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.RootPanel;
|
||||||
|
import com.google.gwt.user.client.ui.ScrollPanel;
|
||||||
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entry point classes define <code>onModuleLoad()</code>.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* <code> ReportGen </code> class is the Entry point class, defines the main layout of the UI
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
*
|
||||||
|
* @version June 2011 (3.0)
|
||||||
|
*/
|
||||||
|
public class ReportGenerator implements EntryPoint {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static final int HEADER_HEIGHT = 25;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static final int PAGE_LEFT = 5;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static final int TOOLBOX_LEFT = 15;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static final int TEMPLATE_LEFT = 230;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static final int TEMPLATE_TOP = HEADER_HEIGHT + 60;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static ReportGenerator singleton = null;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public static ReportGenerator get() {
|
||||||
|
return singleton;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* the controller
|
||||||
|
*/
|
||||||
|
private Presenter presenter;
|
||||||
|
|
||||||
|
private VerticalPanel mainLayout = new VerticalPanel();
|
||||||
|
|
||||||
|
private ToolboxPanel toolBoxPanel;
|
||||||
|
|
||||||
|
private Headerbar header;
|
||||||
|
|
||||||
|
private TitleBar titlebar;
|
||||||
|
|
||||||
|
private WorkspacePanel workSpacePanel;
|
||||||
|
|
||||||
|
private VerticalPanel eastPanel = new VerticalPanel();
|
||||||
|
|
||||||
|
private VerticalPanel toolbarPanel = new VerticalPanel();
|
||||||
|
|
||||||
|
private ScrollPanel bottomScrollerPanel = new ScrollPanel();
|
||||||
|
|
||||||
|
private AppControllerExplorer treeController;
|
||||||
|
|
||||||
|
private HTML divHidden = new HTML();
|
||||||
|
/**
|
||||||
|
* This is the entry point method.
|
||||||
|
*/
|
||||||
|
public void onModuleLoad() {
|
||||||
|
singleton = this;
|
||||||
|
presenter = new Presenter();
|
||||||
|
treeController = new AppControllerExplorer();
|
||||||
|
mainLayout.setWidth("100%");
|
||||||
|
mainLayout.setHeight("100%");
|
||||||
|
//
|
||||||
|
workSpacePanel = new WorkspacePanel(presenter);
|
||||||
|
titlebar = new TitleBar(presenter);
|
||||||
|
header = new Headerbar(presenter);
|
||||||
|
toolBoxPanel = new ToolboxPanel(treeController);
|
||||||
|
|
||||||
|
presenter.setHeader(header);
|
||||||
|
presenter.setTitleBar(titlebar);
|
||||||
|
presenter.setWp(workSpacePanel);
|
||||||
|
presenter.setToolBoxPanel(toolBoxPanel);
|
||||||
|
|
||||||
|
mainLayout.add(titlebar);
|
||||||
|
mainLayout.add(header);
|
||||||
|
mainLayout.add(toolbarPanel);
|
||||||
|
|
||||||
|
toolbarPanel.setWidth("100%");
|
||||||
|
toolbarPanel.setHeight("40");
|
||||||
|
|
||||||
|
|
||||||
|
CellPanel cellPanel = new HorizontalPanel();
|
||||||
|
cellPanel.setStyleName("cella");
|
||||||
|
cellPanel.add(toolBoxPanel);
|
||||||
|
cellPanel.add(bottomScrollerPanel);
|
||||||
|
|
||||||
|
cellPanel.setCellWidth(toolBoxPanel, "230");
|
||||||
|
|
||||||
|
mainLayout.add(cellPanel);
|
||||||
|
|
||||||
|
divHidden.setStyleName("d4sFrame");
|
||||||
|
divHidden.setWidth("500");
|
||||||
|
divHidden.setStyleName("d4sRichTextArea");
|
||||||
|
divHidden.addStyleName("setVisibilityOff");
|
||||||
|
divHidden.addStyleName("hasRichTextToolbar");
|
||||||
|
|
||||||
|
eastPanel.add(workSpacePanel);
|
||||||
|
eastPanel.add(divHidden);
|
||||||
|
bottomScrollerPanel.add(eastPanel);
|
||||||
|
presenter.addTextToolBar();
|
||||||
|
|
||||||
|
// Add image and button to the RootPanel
|
||||||
|
RootPanel.get("ReportGeneratorDIV").add(mainLayout);
|
||||||
|
|
||||||
|
int scrollerWidth = Window.getClientWidth()- TEMPLATE_LEFT - 30;
|
||||||
|
bottomScrollerPanel.setPixelSize(scrollerWidth, 1000);
|
||||||
|
|
||||||
|
if ( Window.getClientWidth() < 1070 ) {
|
||||||
|
int scrollerWidth2 = Window.getClientWidth()- TEMPLATE_LEFT;
|
||||||
|
bottomScrollerPanel.setPixelSize(scrollerWidth2, 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
Window.addResizeHandler(new ResizeHandler() {
|
||||||
|
public void onResize(ResizeEvent event) {
|
||||||
|
int scrollerHeight = event.getHeight() - bottomScrollerPanel.getAbsoluteTop();
|
||||||
|
if (scrollerHeight < toolBoxPanel.getTreePanelHeight())
|
||||||
|
scrollerHeight = toolBoxPanel.getTreePanelHeight();
|
||||||
|
int scrollerWidth = Window.getClientWidth()- TEMPLATE_LEFT - 30;
|
||||||
|
bottomScrollerPanel.setPixelSize(scrollerWidth , 1000);
|
||||||
|
|
||||||
|
|
||||||
|
if ( Window.getClientWidth() < 1060 ) {
|
||||||
|
int scrollerWidth2 = Window.getClientWidth()- TEMPLATE_LEFT;
|
||||||
|
bottomScrollerPanel.setPixelSize(scrollerWidth2, 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
showGuidedTour() ;
|
||||||
|
|
||||||
|
}
|
||||||
|
private void showGuidedTour() {
|
||||||
|
|
||||||
|
GWT.runAsync(GCUBEGuidedTour.class, new RunAsyncCallback() {
|
||||||
|
public void onSuccess() {
|
||||||
|
TourStep step1 = new GCUBETemplate1Text1Image(true) {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String setStepTitle() {
|
||||||
|
return "gCube Reporting";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String setStepImage() {
|
||||||
|
return "images/tour/tour1.jpg";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String setStepBody() {
|
||||||
|
return new Intro().getHTML();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
TourStep step2 = new GCUBETemplate1Text1Image(false) {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String setStepTitle() {
|
||||||
|
return "Structure View";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String setStepImage() {
|
||||||
|
return "images/tour/tour2.jpg";
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public String setStepBody() {
|
||||||
|
return "<div style=\"line-height: 19px; font-size: 16px; padding: 10px;\">" +
|
||||||
|
"<div style=\"padding-bottom: 90px;\">" +
|
||||||
|
"Use the <b>Report Structure View</b> to see your report structure. (View > Structure)" +
|
||||||
|
"</div>" +
|
||||||
|
"<div style=\"padding-bottom: 80px;\">" +
|
||||||
|
"Use the <b>Report Structure View</b> to navigate through your report." +
|
||||||
|
"</div>" +
|
||||||
|
"</div>";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
TourStep step3 = new GCUBETemplate2Text2Image(false) {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String setStepTitle() {
|
||||||
|
return "User Comments";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String setStepImage() {
|
||||||
|
return "images/tour/tourComment.jpg";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String setStepBody() {
|
||||||
|
return "<div style=\"line-height: 19px; padding: 10px; font-size: 16px; \">" +
|
||||||
|
"<div style=\"padding-bottom: 10px;\">" +
|
||||||
|
"Use comments to collaborate with your colleagues." +
|
||||||
|
"</div>" +
|
||||||
|
"</div>";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String setStepOtherImage() {
|
||||||
|
return "images/tour/tourFormat.jpg";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String setStepOtherBody() {
|
||||||
|
return "<div style=\"line-height: 19px; padding: 10px; font-size: 16px; \">" +
|
||||||
|
"<div style=\"padding-bottom: 10px;\">" +
|
||||||
|
"<b>Format text</b> as you would in a word processor using the Formatting Bar." +
|
||||||
|
"</div>" +
|
||||||
|
"</div>";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
TourStep step4 = new GCUBETemplate1Text1Image(false) {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String setStepTitle() {
|
||||||
|
return "Bibliography";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String setStepImage() {
|
||||||
|
return "images/tour/tourBiblio.jpg";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String setStepBody() {
|
||||||
|
return "<div style=\"line-height: 19px; padding: 10px; font-size: 16px; \">" +
|
||||||
|
"<div style=\"padding-bottom: 80px;\">" +
|
||||||
|
"Use the <b>Bibliography to add references</b>" +
|
||||||
|
"</div>" +
|
||||||
|
"</div>";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
TourStep step5 = new GCUBETemplate1Text1Image(false) {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String setStepTitle() {
|
||||||
|
return "Export";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String setStepImage() {
|
||||||
|
return "images/tour/tourExports.jpg";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String setStepBody() {
|
||||||
|
return "<div style=\"line-height: 19px; padding: 10px; font-size: 16px; \">" +
|
||||||
|
"<div style=\"padding-bottom: 50px;\">" +
|
||||||
|
"Generate <b>different export formats</b> such as OpenXML (docx) or HTML." +
|
||||||
|
"</div>" +
|
||||||
|
"</div>";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
//step1.setTextVerticalAlignment(VerticalAlignment.ALIGN_MIDDLE);
|
||||||
|
step2.setTextVerticalAlignment(VerticalAlignment.ALIGN_MIDDLE);
|
||||||
|
step3.setTextVerticalAlignment(VerticalAlignment.ALIGN_MIDDLE);
|
||||||
|
step4.setTextVerticalAlignment(VerticalAlignment.ALIGN_MIDDLE);
|
||||||
|
step5.setTextVerticalAlignment(VerticalAlignment.ALIGN_MIDDLE);
|
||||||
|
String guideUrl = "https://gcube.wiki.gcube-system.org/gcube/index.php/Common_Functionality#Report_Generation";
|
||||||
|
GCUBEGuidedTour gt = new GCUBEGuidedTour("gCube Reports Generator", ReportGenerator.class.getName(), guideUrl, 780, 450, false);
|
||||||
|
gt.addStep(step1);
|
||||||
|
gt.addStep(step2);
|
||||||
|
gt.addStep(step3);
|
||||||
|
gt.addStep(step4);
|
||||||
|
gt.addStep(step5);
|
||||||
|
gt.openTour();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onFailure(Throwable reason) {
|
||||||
|
Window.alert("There are networks problem, please check your connection.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public VerticalPanel getMainLayout() {
|
||||||
|
return mainLayout;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public Headerbar getHeader() {
|
||||||
|
return header;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public WorkspacePanel getWorkSpacePanel() {
|
||||||
|
return workSpacePanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public ToolboxPanel getToolBoxPanel() {
|
||||||
|
return toolBoxPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GWTWorkspaceServiceAsync getWSTreeService() {
|
||||||
|
return treeController.getRpcWorkspaceService();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public VerticalPanel getToolbarPanel() {
|
||||||
|
return toolbarPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param toolbarPanel .
|
||||||
|
*/
|
||||||
|
public void setToolbarPanel(VerticalPanel toolbarPanel) {
|
||||||
|
this.toolbarPanel = toolbarPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public TitleBar getTitleHeader() {
|
||||||
|
return titlebar;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public HTML getDivHidden() {
|
||||||
|
return divHidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param divHidden .
|
||||||
|
*/
|
||||||
|
public void setDivHidden(HTML divHidden) {
|
||||||
|
this.divHidden = divHidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ScrollPanel getScrollerPanel() {
|
||||||
|
return bottomScrollerPanel;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,91 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableModel;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableTable;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableTimeSeries;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.model.ExportManifestationType;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.shared.SessionInfo;
|
||||||
|
|
||||||
|
import com.google.gwt.user.client.rpc.RemoteService;
|
||||||
|
/**
|
||||||
|
* Service interface for server communication
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version november 2008 (0.1)
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface ReportService extends RemoteService{
|
||||||
|
/**
|
||||||
|
* return the first ten records of the timeseries having id as param
|
||||||
|
* @param sTS .
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
SerializableTable getSampleTimeSeries(SerializableTimeSeries sTS);
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
String[] getUserTemplateNames();
|
||||||
|
/**
|
||||||
|
* @param templateName .
|
||||||
|
* @param templateObjectID .
|
||||||
|
* @param isTemplate says if you're opening a template or a report
|
||||||
|
* @param isImporting says if your importing or youre loading a template in the UI
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
SerializableModel readModel(String templateName, String templateObjectID, boolean isTemplate, boolean isImporting);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param model .
|
||||||
|
* @param type .
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
boolean generateManifestation(SerializableModel model, ExportManifestationType type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* each portlet instance runs in a scope
|
||||||
|
* each portlet instance is used by a unique username from within the portal
|
||||||
|
* @param currentHost .
|
||||||
|
* @return a SessionInfo bean containing the username the scope andis opening a workflow document or not
|
||||||
|
*/
|
||||||
|
SessionInfo getSessionInfo(String currentHost);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param model .
|
||||||
|
*/
|
||||||
|
void storeTemplateInSession(SerializableModel model);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return the model previously stored in the session
|
||||||
|
*/
|
||||||
|
SerializableModel readTemplateFromSession();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the report model is taken from the session
|
||||||
|
* @param folderid the basket id where to save the report
|
||||||
|
*/
|
||||||
|
void saveReport(String folderid, String newname);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the report model is taken from the session, the id also
|
||||||
|
*/
|
||||||
|
void saveReport();
|
||||||
|
|
||||||
|
SerializableModel getWorkflowDocumentFromDocumentLibrary();
|
||||||
|
|
||||||
|
void updateWorkflowDocument(boolean update);
|
||||||
|
|
||||||
|
void renewLock();
|
||||||
|
|
||||||
|
String generateTempDocx(SerializableModel model);
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param tempPath
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
SerializableModel readImportedModel(String tempPath);
|
||||||
|
}
|
|
@ -0,0 +1,87 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableModel;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableTable;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableTimeSeries;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.model.ExportManifestationType;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.shared.SessionInfo;
|
||||||
|
|
||||||
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||||
|
/**
|
||||||
|
* * Service interface for server Async communication
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
*
|
||||||
|
* @version november 2011 (3.0)
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface ReportServiceAsync {
|
||||||
|
/**
|
||||||
|
* return the first ten records of the timeseries having id as param
|
||||||
|
* @param sTS .
|
||||||
|
* @param callback .
|
||||||
|
*/
|
||||||
|
void getSampleTimeSeries(SerializableTimeSeries sTS, AsyncCallback<SerializableTable> callback);
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param callback .
|
||||||
|
*/
|
||||||
|
void getUserTemplateNames(AsyncCallback<String[]> callback);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param templateName .
|
||||||
|
* @param templateObjectID .
|
||||||
|
* @param isTemplate says if you're opening a template or a report
|
||||||
|
* @param isImporting says if your importing or youre loading a template in the UI
|
||||||
|
* @param callback .
|
||||||
|
*/
|
||||||
|
void readModel(String templateName, String templateObjectID, boolean isTemplate, boolean isImporting, AsyncCallback<SerializableModel> callback);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param model .
|
||||||
|
* @param type .
|
||||||
|
* @param callback .
|
||||||
|
*/
|
||||||
|
void generateManifestation(SerializableModel model, ExportManifestationType type, AsyncCallback<Boolean> callback);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param model .
|
||||||
|
* @param callback .
|
||||||
|
*/
|
||||||
|
void storeTemplateInSession(SerializableModel model, AsyncCallback<Void> callback);
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* call for the model previously stored in the session
|
||||||
|
* @param callback .
|
||||||
|
*/
|
||||||
|
void readTemplateFromSession( AsyncCallback<SerializableModel> callback);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param callback .
|
||||||
|
* @param folderid .
|
||||||
|
*/
|
||||||
|
void saveReport(String folderid, String newname, AsyncCallback<Void> callback);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param callback .
|
||||||
|
*/
|
||||||
|
void saveReport(AsyncCallback<Void> callback);
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param currentHost
|
||||||
|
* @param callback
|
||||||
|
*/
|
||||||
|
void getSessionInfo(String currentHost, AsyncCallback<SessionInfo> callback);
|
||||||
|
void getWorkflowDocumentFromDocumentLibrary(
|
||||||
|
AsyncCallback<SerializableModel> callback);
|
||||||
|
void updateWorkflowDocument(boolean update, AsyncCallback<Void> callback);
|
||||||
|
void renewLock(AsyncCallback<Void> callback);
|
||||||
|
void generateTempDocx(SerializableModel model,
|
||||||
|
AsyncCallback<String> callback);
|
||||||
|
void readImportedModel(String tempPath,
|
||||||
|
AsyncCallback<SerializableModel> callback);
|
||||||
|
}
|
|
@ -0,0 +1,202 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.model.TemplateModel;
|
||||||
|
|
||||||
|
import com.google.gwt.event.dom.client.ClickEvent;
|
||||||
|
import com.google.gwt.event.dom.client.ClickHandler;
|
||||||
|
import com.google.gwt.i18n.client.DateTimeFormat;
|
||||||
|
import com.google.gwt.user.client.Command;
|
||||||
|
import com.google.gwt.user.client.Window;
|
||||||
|
import com.google.gwt.user.client.ui.CellPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Composite;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.HasAlignment;
|
||||||
|
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
|
||||||
|
import com.google.gwt.user.client.ui.HasVerticalAlignment;
|
||||||
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code> TitleBar </code> class is the top top bar component of the UI
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
*
|
||||||
|
* @version July 2011 (3.0)
|
||||||
|
*/
|
||||||
|
public class TitleBar extends Composite{
|
||||||
|
|
||||||
|
|
||||||
|
private Presenter presenter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the template Model
|
||||||
|
*/
|
||||||
|
private TemplateModel templateModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* mainLayout Panel
|
||||||
|
*/
|
||||||
|
private CellPanel mainLayout = new HorizontalPanel();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* contains the current template name
|
||||||
|
*/
|
||||||
|
private HTML templateNameBox = new HTML();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* contains the last edit date and the the last edit person username
|
||||||
|
*/
|
||||||
|
private HTML editedOn = new HTML();
|
||||||
|
/**
|
||||||
|
* contains the page displayer
|
||||||
|
*/
|
||||||
|
private HTML pageDisplayer = new HTML();
|
||||||
|
|
||||||
|
|
||||||
|
private HTML prevButton = new HTML("<img src=\"" + ReportConstants.IMAGE_PREV_PAGE + "\" /> ", true);
|
||||||
|
private HTML nextButton = new HTML(" <img src=\"" + ReportConstants.IMAGE_NEXT_PAGE + "\" />", true);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param c the controller instance for this UI component
|
||||||
|
*/
|
||||||
|
public TitleBar(Presenter c) {
|
||||||
|
this.presenter = c;
|
||||||
|
this.templateModel = presenter.getModel();
|
||||||
|
|
||||||
|
|
||||||
|
//initialize the template
|
||||||
|
setTemplateName(templateModel.getTemplateName());
|
||||||
|
|
||||||
|
setPageDisplayer(1, 1);
|
||||||
|
|
||||||
|
|
||||||
|
mainLayout.setSize("90%", "24px");
|
||||||
|
// mainLayout.setStyleName("newresultset-header");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//design the part for the template name and the pages handling
|
||||||
|
|
||||||
|
HorizontalPanel captionPanel = new HorizontalPanel();
|
||||||
|
HorizontalPanel innerCaptionPanel = new HorizontalPanel();
|
||||||
|
captionPanel.setWidth("100%");
|
||||||
|
|
||||||
|
//hide the buttons at the beginning
|
||||||
|
nextButton.addStyleName("setVisibilityOff");
|
||||||
|
prevButton.addStyleName("setVisibilityOff");
|
||||||
|
|
||||||
|
HorizontalPanel pageHandlerPanel = new HorizontalPanel();
|
||||||
|
pageHandlerPanel.setHeight("24");
|
||||||
|
pageHandlerPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
|
||||||
|
|
||||||
|
pageHandlerPanel.add(prevButton);
|
||||||
|
pageHandlerPanel.add(pageDisplayer);
|
||||||
|
pageHandlerPanel.add(nextButton);
|
||||||
|
pageHandlerPanel.setWidth("100%");
|
||||||
|
|
||||||
|
templateNameBox.setStyleName("menubar-font");
|
||||||
|
|
||||||
|
captionPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
|
||||||
|
innerCaptionPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
|
||||||
|
innerCaptionPanel.setVerticalAlignment(HasAlignment.ALIGN_BOTTOM);
|
||||||
|
innerCaptionPanel.add(templateNameBox);
|
||||||
|
innerCaptionPanel.add(editedOn);
|
||||||
|
captionPanel.add(innerCaptionPanel);
|
||||||
|
mainLayout.add(captionPanel);
|
||||||
|
mainLayout.add(pageHandlerPanel);
|
||||||
|
editedOn.setStyleName("docEditedBy");
|
||||||
|
mainLayout.setCellHorizontalAlignment(captionPanel, HasHorizontalAlignment.ALIGN_LEFT);
|
||||||
|
|
||||||
|
mainLayout.setCellWidth(pageHandlerPanel, "200");
|
||||||
|
initWidget(mainLayout);
|
||||||
|
|
||||||
|
nextButton.addClickHandler(new ClickHandler() {
|
||||||
|
public void onClick(ClickEvent event) { presenter.nextPageButtonClicked();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
prevButton.addClickHandler(new ClickHandler() {
|
||||||
|
public void onClick(ClickEvent event) { presenter.prevPageButtonClicked(); }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* changes the pages label in the UI : e.g. Page x of y
|
||||||
|
* @param currentPage .
|
||||||
|
* @param totalPages .
|
||||||
|
*/
|
||||||
|
public void setPageDisplayer(int currentPage, int totalPages) {
|
||||||
|
pageDisplayer.setHTML("Section "+ currentPage + " of " + totalPages);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* changes the template name label in the UI
|
||||||
|
* @param name .
|
||||||
|
*/
|
||||||
|
public void setTemplateName(String name) {
|
||||||
|
templateNameBox.setHTML(" " + name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* changes the template name label in the UI
|
||||||
|
* @param username .
|
||||||
|
* @param date .
|
||||||
|
*/
|
||||||
|
public void setEditedOnBy(Date date, String username) {
|
||||||
|
String dt = DateTimeFormat.getShortDateFormat().format(date);
|
||||||
|
|
||||||
|
editedOn.setHTML(" edited on " + dt + " by " + username);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Shows the previous botton in the UI
|
||||||
|
*/
|
||||||
|
public void showPrevButton() {
|
||||||
|
prevButton.removeStyleName("setVisibilityOff");
|
||||||
|
prevButton.addStyleName("setVisibilityOn");
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Shows the next botton in the UI
|
||||||
|
*/
|
||||||
|
public void showNextButton() {
|
||||||
|
nextButton.removeStyleName("setVisibilityOff");
|
||||||
|
nextButton.addStyleName("setVisibilityOn");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hide the previous botton in the UI
|
||||||
|
*/
|
||||||
|
public void hidePrevButton() {
|
||||||
|
prevButton.removeStyleName("setVisibilityOn");
|
||||||
|
prevButton.addStyleName("setVisibilityOff");
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Hide the next botton in the UI
|
||||||
|
*/
|
||||||
|
public void hideNextButton() {
|
||||||
|
nextButton.removeStyleName("setVisibilityOn");
|
||||||
|
nextButton.addStyleName("setVisibilityOff");
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* temporary command
|
||||||
|
* @return the command instance
|
||||||
|
*/
|
||||||
|
public Command getNullCommand() {
|
||||||
|
Command openNothing = new Command() {
|
||||||
|
|
||||||
|
public void execute() {
|
||||||
|
Window.alert("Feature not supported yet");
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return openNothing;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client;
|
||||||
|
|
||||||
|
//
|
||||||
|
//import org.gcube.portlets.user.workspace.client.tree.WorkspaceTreePanel;
|
||||||
|
//import org.gcube.portlets.user.workspace.client.workspace.GWTWorkspace;
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.workspace.client.AppControllerExplorer;
|
||||||
|
import org.gcube.portlets.user.workspace.client.view.tree.AsyncTreePanel;
|
||||||
|
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.SimplePanel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
*
|
||||||
|
* @version April 2012 (1.1)
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class ToolboxPanel extends SimplePanel {
|
||||||
|
private AppControllerExplorer appController;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static final int TOOLBOX_WIDTH = 235;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static final int TOOLBOX_HEIGHT= 800;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor
|
||||||
|
*/
|
||||||
|
public ToolboxPanel(AppControllerExplorer appController) {
|
||||||
|
this.appController = appController;
|
||||||
|
AsyncTreePanel tp = appController.getTree(TOOLBOX_WIDTH, TOOLBOX_HEIGHT);
|
||||||
|
add(tp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* refresh the root
|
||||||
|
*/
|
||||||
|
public void refreshRoot() {
|
||||||
|
appController.refreshRoot();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* lalala
|
||||||
|
* @return the toolbox height
|
||||||
|
*/
|
||||||
|
public int getTreePanelHeight() {
|
||||||
|
return TOOLBOX_HEIGHT;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,160 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.model.TemplateModel;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.targets.DoubleColumnPanel;
|
||||||
|
|
||||||
|
import com.google.gwt.user.client.ui.Composite;
|
||||||
|
import com.google.gwt.user.client.ui.FlowPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code> WorkspacePanel </code> class is the UI Component for displaying the template
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version October 2008 (0.2)
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class WorkspacePanel extends Composite {
|
||||||
|
/**
|
||||||
|
* the model
|
||||||
|
*/
|
||||||
|
private TemplateModel templateModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the controller
|
||||||
|
*/
|
||||||
|
private Presenter presenter;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static WorkspacePanel singleton = null;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* used to place two compoenents on the same Y
|
||||||
|
*/
|
||||||
|
private boolean waitForNextOne = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* elements arrive one by one, to place two on the same Y this bufferedWidget is used;
|
||||||
|
*/
|
||||||
|
private Widget bufferedWidget;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public static WorkspacePanel get() {
|
||||||
|
return singleton;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the panel for the layout of the working space
|
||||||
|
*/
|
||||||
|
private FlowPanel mainLayout = new FlowPanel();
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param c the controller instance
|
||||||
|
*/
|
||||||
|
public WorkspacePanel(Presenter c) {
|
||||||
|
singleton = this;
|
||||||
|
presenter = c;
|
||||||
|
|
||||||
|
templateModel = presenter.getModel();
|
||||||
|
|
||||||
|
mainLayout.setSize(""+templateModel.getPageWidth(), ""+templateModel.getPageHeight());
|
||||||
|
|
||||||
|
//mainLayout.setStyleName("wpFlow");
|
||||||
|
//mainLayout.addStyleName("position-relative");
|
||||||
|
|
||||||
|
|
||||||
|
initWidget(mainLayout);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param w .
|
||||||
|
* @param isDoubleColumnLayout .
|
||||||
|
*/
|
||||||
|
public void addComponentToLayout(Widget w, boolean isDoubleColumnLayout) {
|
||||||
|
waitForNextOne = isDoubleColumnLayout;
|
||||||
|
|
||||||
|
if (! waitForNextOne) {
|
||||||
|
mainLayout.add(w);
|
||||||
|
bufferedWidget = null;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (bufferedWidget == null)
|
||||||
|
bufferedWidget = w;
|
||||||
|
else {
|
||||||
|
DoubleColumnPanel toAdd = new DoubleColumnPanel(bufferedWidget, w);
|
||||||
|
mainLayout.add(toAdd);
|
||||||
|
bufferedWidget = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//mainLayout.add(w, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param w the widget to remove
|
||||||
|
* @return true if the romove is successfull
|
||||||
|
*/
|
||||||
|
public boolean removeComponentFromLayout(Widget w) {
|
||||||
|
return mainLayout.remove(w);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param model .
|
||||||
|
*/
|
||||||
|
public void setModel(TemplateModel model ) {
|
||||||
|
this.templateModel = model;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* resizes the workspace panel
|
||||||
|
* @param width .
|
||||||
|
* @param height .
|
||||||
|
*/
|
||||||
|
public void resizeWorkspace(int width, int height) {
|
||||||
|
mainLayout.setPixelSize(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param toMove .
|
||||||
|
* @param left .
|
||||||
|
* @param top .
|
||||||
|
*/
|
||||||
|
public void moveWidget(Widget toMove, int left, int top) {
|
||||||
|
// mainLayout.setWidgetPosition(toMove, left, top);
|
||||||
|
// GWT.log("MOVED? " + top, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param toResize the widget to resize
|
||||||
|
* @param newWidth .
|
||||||
|
* @param newHeight .
|
||||||
|
*/
|
||||||
|
public void resizeWidget(Widget toResize, int newWidth, int newHeight) {
|
||||||
|
toResize.setPixelSize(newWidth, newHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public FlowPanel getMainLayout() {
|
||||||
|
return mainLayout;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,492 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.components;
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.dialog.ImageUploaderDialog;
|
||||||
|
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.user.client.Timer;
|
||||||
|
import com.google.gwt.user.client.Window;
|
||||||
|
import com.google.gwt.user.client.ui.Button;
|
||||||
|
import com.google.gwt.user.client.ui.ChangeListener;
|
||||||
|
import com.google.gwt.user.client.ui.ChangeListenerCollection;
|
||||||
|
import com.google.gwt.user.client.ui.ClickListener;
|
||||||
|
import com.google.gwt.user.client.ui.Composite;
|
||||||
|
import com.google.gwt.user.client.ui.FileUpload;
|
||||||
|
import com.google.gwt.user.client.ui.FlowPanel;
|
||||||
|
import com.google.gwt.user.client.ui.FormHandler;
|
||||||
|
import com.google.gwt.user.client.ui.FormPanel;
|
||||||
|
import com.google.gwt.user.client.ui.FormSubmitCompleteEvent;
|
||||||
|
import com.google.gwt.user.client.ui.FormSubmitEvent;
|
||||||
|
import com.google.gwt.user.client.ui.HasText;
|
||||||
|
import com.google.gwt.user.client.ui.HasWordWrap;
|
||||||
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Label;
|
||||||
|
import com.google.gwt.user.client.ui.SourcesChangeEvents;
|
||||||
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code> FancyFileUpload </code> class is use to upload images from client in the UI
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version October 2008 (0.2)
|
||||||
|
*/
|
||||||
|
public class FancyFileUpload extends Composite implements HasText, HasWordWrap, SourcesChangeEvents{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* State definitions
|
||||||
|
*/
|
||||||
|
public final int EMPTY_STATE = 1;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public final int PENDING_STATE = 2;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public final int UPLOADING_STATE = 3;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public final int UPLOADED_STATE = 4;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public final int DELETED_STATE = 5;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public final int FAILED_STATE = 6;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initial State of the widget.
|
||||||
|
*/
|
||||||
|
private int widgetState = EMPTY_STATE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default delay to check an empty FileUpload widget for
|
||||||
|
* arrival of a filename.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private int searchUpdateDelay = 500;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default delay for pending state, when delay over the form is
|
||||||
|
submitted.
|
||||||
|
*/
|
||||||
|
private int pendingUpdateDelay = 5000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the panel where this widget is in
|
||||||
|
*/
|
||||||
|
private ImageUploaderDialog theOwner;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OK message expected from file upload servlet to indicate successful
|
||||||
|
upload.
|
||||||
|
*/
|
||||||
|
//private String retursOKMessage = "<pre>OK</pre>";
|
||||||
|
|
||||||
|
private FormPanel uploadForm = new FormPanel();
|
||||||
|
private VerticalPanel mainPanel = new VerticalPanel();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal timer for checking fileupload text for a value.
|
||||||
|
*/
|
||||||
|
private Timer t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal timer for checking if pending delay is over.
|
||||||
|
*/
|
||||||
|
private Timer p;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Widget representing file to be uploaded.
|
||||||
|
*/
|
||||||
|
private UploadDisplay uploadItem;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FileName to be uploaded
|
||||||
|
*/
|
||||||
|
String fileName = "";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class used for the display of filename to be uploaded,
|
||||||
|
* and handling the update of the display states.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected class UploadDisplay extends Composite{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FileUpload Widget
|
||||||
|
*/
|
||||||
|
FileUpload uploadFileWidget = new FileUpload();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Label to display after file widget is filled with a filename
|
||||||
|
*/
|
||||||
|
Label uploadFileName = new Label();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Panel to hold the widget
|
||||||
|
*/
|
||||||
|
FlowPanel mainPanel = new FlowPanel();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Panel to hold pending, loading, loaded or failed state details.
|
||||||
|
*/
|
||||||
|
HorizontalPanel pendingPanel = new HorizontalPanel();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public UploadDisplay(){
|
||||||
|
|
||||||
|
mainPanel.add(uploadFileWidget);
|
||||||
|
pendingPanel.add(uploadFileName);
|
||||||
|
uploadFileName.setStyleName("HTMLObjectStyle-font");
|
||||||
|
uploadFileName.setWordWrap(true);
|
||||||
|
uploadFileWidget.setWidth("100%");
|
||||||
|
|
||||||
|
mainPanel.add(pendingPanel);
|
||||||
|
pendingPanel.setVisible(false);
|
||||||
|
initWidget(mainPanel);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the widget into pending mode by altering style
|
||||||
|
* of pending panel and displaying it. Hide the FileUpload
|
||||||
|
* widget and finally set the state to Pending.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private void setPending(){
|
||||||
|
uploadFileName.setText("Please wait, fetching image from your file system.. ");//uploadFileWidget.getFilename());
|
||||||
|
uploadFileWidget.setVisible(false);
|
||||||
|
pendingPanel.setVisible(true);
|
||||||
|
pendingPanel.setStyleName("fancyfileupload-pending");
|
||||||
|
widgetState = PENDING_STATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the widget into Loading mode by changing the style name
|
||||||
|
* and updating the widget State to Uploading.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private void setLoading(){
|
||||||
|
pendingPanel.setStyleName("fancyfileupload-loading");
|
||||||
|
widgetState = UPLOADING_STATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the widget to Loaded mode by changing the style name
|
||||||
|
* and updating the widget State to Loaded.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private void setLoaded(){
|
||||||
|
pendingPanel.setStyleName("fancyfileupload-loaded");
|
||||||
|
uploadFileName.setText("Image Successfully uploaded");
|
||||||
|
widgetState = UPLOADED_STATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the widget to Failed mode by changing the style name
|
||||||
|
* and updating the widget State to Failed.
|
||||||
|
* Additionally, hide the pending panel and display the FileUpload
|
||||||
|
* widget.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private void setFailed(){
|
||||||
|
widgetState = FAILED_STATE;
|
||||||
|
uploadFileName.setText("Operation Failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform the uploading of a file by changing state of display widget
|
||||||
|
* and then calling form.submit() method.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private void uploadFiles(){
|
||||||
|
fileName = uploadItem.uploadFileWidget.getFilename();
|
||||||
|
|
||||||
|
uploadItem.setLoading();
|
||||||
|
uploadForm.submit();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Put the widget into a Pending state, set the Pending delay timer
|
||||||
|
* to call the upload file method when ran out.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private void pendingUpload(){
|
||||||
|
// Fire an onChange event to anyone who is listening
|
||||||
|
uploadItem.setPending();
|
||||||
|
p = new Timer(){
|
||||||
|
public void run() {
|
||||||
|
uploadFiles();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
p.schedule(pendingUpdateDelay);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to check if FileUpload Widget has a filename within it.
|
||||||
|
* If so, cancel the timer that was set to call this method and then
|
||||||
|
* call the pendingUpload() method.
|
||||||
|
* If not, do nothing.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private void checkForFileName(){
|
||||||
|
// GWT.log(uploadItem.uploadFileWidget.getFilename()+" :"+fileName,null);
|
||||||
|
// if (!uploadItem.uploadFileWidget.getFilename().equals("")){
|
||||||
|
// if (!uploadItem.uploadFileWidget.getFilename().equals(fileName)){
|
||||||
|
// t.cancel();
|
||||||
|
// pendingUpload();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method sets up a repeating schedule to call the
|
||||||
|
checkforfilename
|
||||||
|
* method to see if the FileUpload widget has any text in it.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private void startWaiting(){
|
||||||
|
t = null;
|
||||||
|
t = new Timer(){
|
||||||
|
public void run() {
|
||||||
|
checkForFileName();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
t.scheduleRepeating(searchUpdateDelay);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param owner the caller
|
||||||
|
* @param templateName .
|
||||||
|
*/
|
||||||
|
public FancyFileUpload(ImageUploaderDialog owner, String templateName){
|
||||||
|
|
||||||
|
this.theOwner = owner;
|
||||||
|
// Set Form details
|
||||||
|
// Set the action to call on submit
|
||||||
|
|
||||||
|
uploadForm.setAction(GWT.getModuleBaseURL() + "ImagesUploadServlet?currTemplateName=" + templateName);
|
||||||
|
|
||||||
|
|
||||||
|
// Set the form encoding to multipart to indicate a file upload
|
||||||
|
uploadForm.setEncoding(FormPanel.ENCODING_MULTIPART);
|
||||||
|
// Set the method to Post
|
||||||
|
uploadForm.setMethod(FormPanel.METHOD_POST);
|
||||||
|
uploadForm.setWidget(mainPanel);
|
||||||
|
|
||||||
|
// Create a new upload display widget
|
||||||
|
uploadItem = new UploadDisplay();
|
||||||
|
// Set the name of the upload file form element
|
||||||
|
uploadItem.uploadFileWidget.setName("uploadFormElement");
|
||||||
|
// Add the new widget to the panel.
|
||||||
|
mainPanel.add(uploadItem);
|
||||||
|
HorizontalPanel wrapper = new HorizontalPanel();
|
||||||
|
wrapper.setSpacing(4);
|
||||||
|
// Add a 'submit' button.
|
||||||
|
wrapper.add(new Button("Submit", new ClickListener() {
|
||||||
|
public void onClick(Widget sender) {
|
||||||
|
String fName = uploadItem.uploadFileWidget.getFilename();
|
||||||
|
|
||||||
|
|
||||||
|
int slashPosition = fName.lastIndexOf("/");
|
||||||
|
|
||||||
|
String fileNameToCheck = "" ;
|
||||||
|
|
||||||
|
if (slashPosition == -1) //it is windows
|
||||||
|
slashPosition = fName.lastIndexOf("\\");
|
||||||
|
|
||||||
|
if (slashPosition != -1)
|
||||||
|
fileNameToCheck = fName.substring(slashPosition+1, fName.length());
|
||||||
|
|
||||||
|
if (fName.equals("")) {
|
||||||
|
Window.alert("The text box must not be empty");
|
||||||
|
}
|
||||||
|
else if (fileNameToCheck.indexOf(" ") > -1) {
|
||||||
|
Window.alert("File name cannot contain empty spaces");
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
t.cancel();
|
||||||
|
pendingUpload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
// Add a 'close' button.
|
||||||
|
wrapper.add(new Button("Cancel", new ClickListener() {
|
||||||
|
public void onClick(Widget sender) {
|
||||||
|
theOwner.hide();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
mainPanel.add(wrapper);
|
||||||
|
|
||||||
|
// Start the waiting for a name to appear in the file upload widget.
|
||||||
|
startWaiting();
|
||||||
|
// Initialise the widget.
|
||||||
|
initWidget(uploadForm);
|
||||||
|
|
||||||
|
// Add an event handler to the form.
|
||||||
|
uploadForm.addFormHandler(new FormHandler() {
|
||||||
|
public void onSubmitComplete(FormSubmitCompleteEvent event) {
|
||||||
|
// Fire an onChange Event
|
||||||
|
fireChangeEvent();
|
||||||
|
// Cancel all timers to be absolutely sure nothing is going on.
|
||||||
|
t.cancel();
|
||||||
|
p.cancel();
|
||||||
|
// Ensure that the form encoding is set correctly.
|
||||||
|
uploadForm.setEncoding(FormPanel.ENCODING_MULTIPART);
|
||||||
|
// Check the result to see if an OK message is returned from the server.
|
||||||
|
|
||||||
|
if(event.getResults().toString().contains("OK") || event.getResults().toString().startsWith("OK")) {
|
||||||
|
uploadItem.setLoaded();
|
||||||
|
String fName = uploadItem.uploadFileWidget.getFilename();
|
||||||
|
|
||||||
|
String nameToPass = "";
|
||||||
|
if (fName.lastIndexOf("/") == -1) //windows
|
||||||
|
nameToPass = fName.substring(fName.lastIndexOf("\\")+1);
|
||||||
|
else
|
||||||
|
nameToPass = fName.substring(fName.lastIndexOf("/")+1);
|
||||||
|
|
||||||
|
theOwner.insertImage(nameToPass);
|
||||||
|
theOwner.hide();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// If no, set the widget to failed state.
|
||||||
|
uploadItem.setFailed();
|
||||||
|
Window.alert("There were some errors during File Uploading processing,Please try again");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onSubmit(FormSubmitEvent event) {
|
||||||
|
//No validation in this version.
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fire a change event to anyone listening to us.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private void fireChangeEvent(){
|
||||||
|
if (changeListeners != null)
|
||||||
|
changeListeners.fireChange(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the text from the widget - which in reality will be retrieving any
|
||||||
|
* value set in the Label element of the display widget.
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public String getText() {
|
||||||
|
return uploadItem.uploadFileName.getText();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cannot set the text of a File Upload Widget, so raise an exception.
|
||||||
|
* @param text .
|
||||||
|
*/
|
||||||
|
public void setText(String text) {
|
||||||
|
throw new RuntimeException("Cannot set text of a FileUpload Widget");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the status of the upload widget.
|
||||||
|
* @return Status of upload widget.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public int getUploadState(){
|
||||||
|
return widgetState;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the delay for checking for a filename to appear in the FileUpload widget
|
||||||
|
* Might be useful if there are performance issues.
|
||||||
|
* @param newDelay .
|
||||||
|
*/
|
||||||
|
public void setCheckForFileNameDelay(int newDelay){
|
||||||
|
searchUpdateDelay = newDelay;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the delay value indicating how long a file will remain in
|
||||||
|
pending mode
|
||||||
|
* prior to the upload action taking place.
|
||||||
|
* @param newDelay .
|
||||||
|
*/
|
||||||
|
public void setPendingDelay(int newDelay){
|
||||||
|
pendingUpdateDelay = newDelay;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the delay value set for checking a file.
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public int getCheckForFileNameDelay(){
|
||||||
|
return searchUpdateDelay;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return value set for pending delay.
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public int getPendingDelay(){
|
||||||
|
return pendingUpdateDelay;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return if the label in the display widget is wordwrapped or not.
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public boolean getWordWrap() {
|
||||||
|
return uploadItem.uploadFileName.getWordWrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the word wrap value of the label in the display widget.
|
||||||
|
* @param wrap .
|
||||||
|
*/
|
||||||
|
public void setWordWrap(boolean wrap) {
|
||||||
|
uploadItem.uploadFileName.setWordWrap(wrap);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private ChangeListenerCollection changeListeners;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a change listener
|
||||||
|
* @param listener ,
|
||||||
|
*/
|
||||||
|
public void addChangeListener(ChangeListener listener) {
|
||||||
|
if (changeListeners == null)
|
||||||
|
changeListeners = new ChangeListenerCollection();
|
||||||
|
changeListeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a change listener
|
||||||
|
* @param listener .
|
||||||
|
*/
|
||||||
|
public void removeChangeListener(ChangeListener listener) {
|
||||||
|
if (changeListeners != null)
|
||||||
|
changeListeners.remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.dialog;
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.events.AddBiblioEvent;
|
||||||
|
|
||||||
|
import com.extjs.gxt.ui.client.event.ComponentEvent;
|
||||||
|
import com.extjs.gxt.ui.client.widget.Dialog;
|
||||||
|
import com.extjs.gxt.ui.client.widget.Window;
|
||||||
|
import com.extjs.gxt.ui.client.widget.button.Button;
|
||||||
|
import com.extjs.gxt.ui.client.widget.form.FormPanel;
|
||||||
|
import com.extjs.gxt.ui.client.widget.form.TextArea;
|
||||||
|
import com.extjs.gxt.ui.client.widget.form.TextField;
|
||||||
|
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
|
||||||
|
import com.extjs.gxt.ui.client.widget.layout.FormData;
|
||||||
|
import com.google.gwt.event.shared.HandlerManager;
|
||||||
|
/**
|
||||||
|
* The <code> AddBiblioEntryDialog </code> class
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version July 2011 (3.0)
|
||||||
|
*/
|
||||||
|
public class AddBiblioEntryDialog extends Window {
|
||||||
|
|
||||||
|
public AddBiblioEntryDialog(final HandlerManager eventBus) {
|
||||||
|
setHeading("Add Citation");
|
||||||
|
setClosable(true);
|
||||||
|
setWidth(400);
|
||||||
|
setHeight(250);
|
||||||
|
setPlain(true);
|
||||||
|
setLayout(new FitLayout());
|
||||||
|
|
||||||
|
final TextField<String> citekey = new TextField<String>();
|
||||||
|
citekey.setFieldLabel("Cite key");
|
||||||
|
citekey.setAllowBlank(false);
|
||||||
|
final TextArea textArea = new TextArea();
|
||||||
|
textArea.setFieldLabel("Citation");
|
||||||
|
textArea.setAllowBlank(false);
|
||||||
|
textArea.setHeight(130);
|
||||||
|
Button addButton = new Button("Add") {
|
||||||
|
@Override
|
||||||
|
protected void onClick(final ComponentEvent ce) {
|
||||||
|
if (citekey.isValid()) {
|
||||||
|
eventBus.fireEvent(new AddBiblioEvent(citekey.getValue(), textArea.getValue()));
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Button cancelButton = new Button("Cancel") {
|
||||||
|
@Override
|
||||||
|
protected void onClick(final ComponentEvent ce) {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
addButton(addButton);
|
||||||
|
addButton(cancelButton);
|
||||||
|
|
||||||
|
FormData formData = new FormData("-10");
|
||||||
|
FormPanel formPanel = new FormPanel();
|
||||||
|
formPanel.setAutoWidth(true);
|
||||||
|
formPanel.getHeader().setStyleName("x-hide-panel-header");
|
||||||
|
formPanel.setHeaderVisible(false);
|
||||||
|
formPanel.setLabelWidth(55);
|
||||||
|
formPanel.setWidth(400);
|
||||||
|
formPanel.setHeight(250);
|
||||||
|
formPanel.add(citekey, formData);
|
||||||
|
formPanel.add(textArea, formData);
|
||||||
|
add(formPanel);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,86 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.dialog;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.client.ImageConstants;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.events.AddCommentEvent;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.events.RemovedUserCommentEvent;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.targets.ReportTextArea;
|
||||||
|
|
||||||
|
import com.google.gwt.event.dom.client.ClickEvent;
|
||||||
|
import com.google.gwt.event.dom.client.ClickHandler;
|
||||||
|
import com.google.gwt.event.shared.HandlerManager;
|
||||||
|
import com.google.gwt.user.client.Window;
|
||||||
|
import com.google.gwt.user.client.ui.AbsolutePanel;
|
||||||
|
import com.google.gwt.user.client.ui.DialogBox;
|
||||||
|
import com.google.gwt.user.client.ui.Image;
|
||||||
|
import com.google.gwt.user.client.ui.TextArea;
|
||||||
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||||
|
|
||||||
|
public class CommentDialog extends DialogBox {
|
||||||
|
private static final int PANEL_WIDTH = 200;
|
||||||
|
|
||||||
|
VerticalPanel mainPanel = new VerticalPanel();
|
||||||
|
AbsolutePanel header = new AbsolutePanel();
|
||||||
|
TextArea area;
|
||||||
|
|
||||||
|
public CommentDialog(final HandlerManager eventBus, final ReportTextArea source, final String username, final String previousComment, int areaHeight) {
|
||||||
|
super(true);
|
||||||
|
setStyleName("comment-popup");
|
||||||
|
area = new TextArea();
|
||||||
|
if (previousComment != null && !(previousComment.compareTo("") == 0)) {
|
||||||
|
area.setText(previousComment);
|
||||||
|
} else {
|
||||||
|
area.setText(" - " + username+":\n");
|
||||||
|
}
|
||||||
|
if (areaHeight > 0) {
|
||||||
|
area.setPixelSize(PANEL_WIDTH, areaHeight);
|
||||||
|
} else {
|
||||||
|
area.setPixelSize(PANEL_WIDTH, 85);
|
||||||
|
}
|
||||||
|
setSize(PANEL_WIDTH+"px", "100px");
|
||||||
|
header.setPixelSize(PANEL_WIDTH, 15);
|
||||||
|
final Image enterImage = new Image(ImageConstants.IMAGE_ARROW_ENTER);
|
||||||
|
final Image closeImage = new Image(ImageConstants.IMAGE_CLOSE_15x15);
|
||||||
|
final Image binImage = new Image(ImageConstants.IMAGE_BIN);
|
||||||
|
closeImage.setStyleName("selectable");
|
||||||
|
binImage.setStyleName("selectable");
|
||||||
|
enterImage.setStyleName("selectable");
|
||||||
|
header.add(enterImage, PANEL_WIDTH-46, -2);
|
||||||
|
header.add(binImage, PANEL_WIDTH-27, 0);
|
||||||
|
header.add(closeImage, PANEL_WIDTH-12, 3);
|
||||||
|
binImage.setTitle("Discard this comment");
|
||||||
|
closeImage.setTitle("Close and save");
|
||||||
|
enterImage.setTitle("Add another comment");
|
||||||
|
|
||||||
|
area.setStyleName("comment-popup-textarea");
|
||||||
|
|
||||||
|
header.setStyleName("comment-popup-header");
|
||||||
|
mainPanel.add(header);
|
||||||
|
mainPanel.add(area);
|
||||||
|
add(mainPanel);
|
||||||
|
|
||||||
|
enterImage.addClickHandler(new ClickHandler() {
|
||||||
|
public void onClick(ClickEvent event) {
|
||||||
|
area.setText(area.getText() + "\n______\n"+username+":\n");
|
||||||
|
area.setPixelSize(PANEL_WIDTH, area.getOffsetHeight()+70);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
closeImage.addClickHandler(new ClickHandler() {
|
||||||
|
public void onClick(ClickEvent event) {
|
||||||
|
eventBus.fireEvent(new AddCommentEvent(source, area.getText(), area.getOffsetHeight()));
|
||||||
|
source.addCommentView();
|
||||||
|
hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
binImage.addClickHandler(new ClickHandler() {
|
||||||
|
public void onClick(ClickEvent event) {
|
||||||
|
eventBus.fireEvent(new RemovedUserCommentEvent(source));
|
||||||
|
source.removeCommentView();
|
||||||
|
hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,92 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.dialog;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.client.ComponentType;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableComponent;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.events.RemovedCitationEvent;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.model.TemplateComponent;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.model.TemplateSection;
|
||||||
|
|
||||||
|
import com.extjs.gxt.ui.client.event.ComponentEvent;
|
||||||
|
import com.extjs.gxt.ui.client.widget.Component;
|
||||||
|
import com.extjs.gxt.ui.client.widget.MessageBox;
|
||||||
|
import com.extjs.gxt.ui.client.widget.TabItem;
|
||||||
|
import com.extjs.gxt.ui.client.widget.TabPanel;
|
||||||
|
import com.extjs.gxt.ui.client.widget.Window;
|
||||||
|
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
|
||||||
|
import com.google.gwt.event.shared.HandlerManager;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.extjs.gxt.ui.client.widget.button.Button;
|
||||||
|
/**
|
||||||
|
* The <code> ManageBiblioDialog </code> class
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version July 2011 (3.0)
|
||||||
|
*/
|
||||||
|
public class DeleteCitationsDialog extends Window {
|
||||||
|
|
||||||
|
TabPanel tabPanel = new TabPanel();
|
||||||
|
//
|
||||||
|
public DeleteCitationsDialog(final HandlerManager eventBus, TemplateSection bibliosection) {
|
||||||
|
setTitle("Delete Citations");
|
||||||
|
setClosable(true);
|
||||||
|
setWidth(400);
|
||||||
|
setHeight(250);
|
||||||
|
setPlain(true);
|
||||||
|
setLayout(new FitLayout());
|
||||||
|
|
||||||
|
Button deleteButton = new Button("Delete") {
|
||||||
|
@Override
|
||||||
|
protected void onClick(final ComponentEvent ce) {
|
||||||
|
if (tabPanel.getItemCount() > 1) {
|
||||||
|
eventBus.fireEvent(new RemovedCitationEvent(tabPanel.getSelectedItem().getTitle()));
|
||||||
|
tabPanel.remove(tabPanel.getSelectedItem());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
MessageBox.alert("","You cannot have a Bibliography with no citations, if you want to remove it use Section > Discard current", null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
//
|
||||||
|
Button cancelButton = new Button("Close") {
|
||||||
|
@Override
|
||||||
|
protected void onClick(final ComponentEvent ce) {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
addButton(deleteButton);
|
||||||
|
addButton(cancelButton);
|
||||||
|
//
|
||||||
|
ArrayList<String> citations = new ArrayList<String>();
|
||||||
|
for (TemplateComponent tc : bibliosection.getAllComponents()) {
|
||||||
|
if (tc.getType() == ComponentType.BODY) {
|
||||||
|
SerializableComponent sc = tc.getSerializable();
|
||||||
|
citations.add(sc.getPossibleContent().toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (String cite : citations) {
|
||||||
|
TabItem tabI = new TabItem();
|
||||||
|
HTML html = new HTML(cite.split(" ")[0], true);
|
||||||
|
String citekey = html.getText();
|
||||||
|
if (citekey.endsWith(".")) //remove dot
|
||||||
|
citekey = citekey.substring(0, citekey.length()-1);
|
||||||
|
|
||||||
|
tabI.setTitle(citekey);
|
||||||
|
String citation = cite.split(" ")[1];
|
||||||
|
tabI.setText(citekey);
|
||||||
|
tabI.add(new HTML(citation));
|
||||||
|
tabI.setClosable(false);
|
||||||
|
tabPanel.add(tabI);
|
||||||
|
|
||||||
|
//TODO:
|
||||||
|
|
||||||
|
}
|
||||||
|
add(tabPanel);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,195 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.dialog;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableComponent;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableModel;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableSection;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.events.ItemSelectionEvent;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.resources.FimesReportTreeStructureResources;
|
||||||
|
|
||||||
|
import com.google.gwt.event.logical.shared.SelectionEvent;
|
||||||
|
import com.google.gwt.event.logical.shared.SelectionHandler;
|
||||||
|
import com.google.gwt.event.shared.HandlerManager;
|
||||||
|
import com.google.gwt.resources.client.ImageResource;
|
||||||
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Image;
|
||||||
|
import com.google.gwt.user.client.ui.Label;
|
||||||
|
import com.google.gwt.user.client.ui.ScrollPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Tree;
|
||||||
|
import com.google.gwt.user.client.ui.TreeItem;
|
||||||
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
|
|
||||||
|
public class FimesReportTreePanel extends ScrollPanel{
|
||||||
|
|
||||||
|
public FimesReportTreePanel(final HandlerManager eventBus, final SerializableModel report,
|
||||||
|
final String height, final String width) {
|
||||||
|
|
||||||
|
this.setWidth(width);
|
||||||
|
this.setHeight(height);
|
||||||
|
|
||||||
|
Tree t = new Tree();
|
||||||
|
t.setAnimationEnabled(true);
|
||||||
|
t.addItem(loadReportRootTree(report));
|
||||||
|
t.addSelectionHandler(new SelectionHandler<TreeItem>() {
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public void onSelection(SelectionEvent<TreeItem> event) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
TreeItem item = event.getSelectedItem();
|
||||||
|
HashMap<String,Object> map = (HashMap<String, Object>)item.getUserObject();
|
||||||
|
eventBus.fireEvent(new ItemSelectionEvent(map));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.add(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
private TreeItem loadReportRootTree(final SerializableModel report) {
|
||||||
|
// Add root node
|
||||||
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.root();
|
||||||
|
HorizontalPanel node = createNodeWidget(image, report.getTemplateName(),"gwt-label-rootTree");
|
||||||
|
TreeItem root = new TreeItem(node);
|
||||||
|
|
||||||
|
Vector<SerializableSection> sections = report.getSections();
|
||||||
|
for(int i = 1; i <= sections.size(); i++) {
|
||||||
|
SerializableSection s = sections.get(i - 1);
|
||||||
|
// Add section item
|
||||||
|
image = FimesReportTreeStructureResources.INSTANCE.section();
|
||||||
|
node = createNodeWidget(image, "Section" + i,"gwt-label-sectionTree");
|
||||||
|
|
||||||
|
TreeItem sectionItem = addChildItemToParentItem(root, "Section", Integer.toString(i -1), node);
|
||||||
|
addItemsComponent(sectionItem, s);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return root;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addItemsComponent(final TreeItem sectionItem,final SerializableSection sectionModel) {
|
||||||
|
|
||||||
|
List<SerializableComponent> components = sectionModel.getComponents();
|
||||||
|
for(int i = 0; i < components.size(); i++) {
|
||||||
|
SerializableComponent c = components.get(i);
|
||||||
|
|
||||||
|
HorizontalPanel node = null;
|
||||||
|
switch (c.getType()) {
|
||||||
|
case TITLE: {
|
||||||
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.heading1();
|
||||||
|
node = createNodeWidget(image, (String)c.getPossibleContent(),"gwt-label-componentTree");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case HEADING_1: {
|
||||||
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.heading1();
|
||||||
|
node = createNodeWidget(image, (String)c.getPossibleContent(),"gwt-label-componentTree");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case HEADING_2: {
|
||||||
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.heading2();
|
||||||
|
node = createNodeWidget(image, (String)c.getPossibleContent(),"gwt-label-componentTree");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case HEADING_3: {
|
||||||
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.heading3();
|
||||||
|
node = createNodeWidget(image, (String)c.getPossibleContent(),"gwt-label-componentTree");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case HEADING_4: {
|
||||||
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.heading4();
|
||||||
|
node = createNodeWidget(image, (String)c.getPossibleContent(),"gwt-label-componentTree");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case INSTRUCTION: {
|
||||||
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.instructions();
|
||||||
|
node = createNodeWidget(image, "Instruction","gwt-label-componentTree");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case COMMENT: {
|
||||||
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.comments();
|
||||||
|
node = createNodeWidget(image, "Comment","gwt-label-componentTree");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case BODY: {
|
||||||
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.text();
|
||||||
|
node = createNodeWidget(image, "Text","gwt-label-componentTree");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DYNA_IMAGE: {
|
||||||
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.image();
|
||||||
|
node = createNodeWidget(image, "Image","gwt-label-componentTree");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case FLEX_TABLE: {
|
||||||
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.table();
|
||||||
|
node = createNodeWidget(image, "Table","gwt-label-componentTree");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ATTRIBUTE: {
|
||||||
|
// TODO
|
||||||
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.comments();
|
||||||
|
node = createNodeWidget(image, "Attribute","gwt-label-componentTree");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TOC:
|
||||||
|
// TODO
|
||||||
|
// componentItem = new TreeItem("TOC");
|
||||||
|
break;
|
||||||
|
case PAGEBREAK:
|
||||||
|
// TODO
|
||||||
|
// componentItem = new TreeItem("Pagebreak");
|
||||||
|
break;
|
||||||
|
case TIME_SERIES:
|
||||||
|
// TODO
|
||||||
|
//componentItem = new TreeItem("Time_Series");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node != null)
|
||||||
|
addChildItemToParentItem(sectionItem, "Component",
|
||||||
|
Integer.toString(i), node);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private TreeItem addChildItemToParentItem(final TreeItem root, final String typeItem,
|
||||||
|
final String indexList, final Widget content) {
|
||||||
|
|
||||||
|
TreeItem item = new TreeItem(content);
|
||||||
|
// Create userObjet
|
||||||
|
HashMap<String, Object> map = new HashMap<String, Object>();
|
||||||
|
map.put("item",typeItem );
|
||||||
|
map.put("index", indexList);
|
||||||
|
map.put("parent", root.getUserObject());
|
||||||
|
item.setUserObject(map);
|
||||||
|
root.addItem(item);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates HTML for a tree item with an attached icon.
|
||||||
|
* @param imageResource the image resource to use
|
||||||
|
* @param title the title of the item
|
||||||
|
* @return the resultant HTML
|
||||||
|
*/
|
||||||
|
private HorizontalPanel createNodeWidget(ImageResource imageResource, String title,
|
||||||
|
String cssStyle) {
|
||||||
|
HorizontalPanel node = new HorizontalPanel();
|
||||||
|
|
||||||
|
node.setSpacing(0);
|
||||||
|
Image image = new Image(imageResource);
|
||||||
|
image.setPixelSize(image.getWidth() + 5, image.getHeight());
|
||||||
|
node.add(image);
|
||||||
|
|
||||||
|
String shortTitle = title;
|
||||||
|
if (shortTitle.length() > 25)
|
||||||
|
shortTitle = shortTitle.substring(0,25) + "...";
|
||||||
|
|
||||||
|
Label text = new Label(shortTitle);
|
||||||
|
text.setStyleName(cssStyle);
|
||||||
|
node.add(text);
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,210 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.dialog;
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.components.FancyFileUpload;
|
||||||
|
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.user.client.ui.Button;
|
||||||
|
import com.google.gwt.user.client.ui.ChangeListener;
|
||||||
|
import com.google.gwt.user.client.ui.ClickListener;
|
||||||
|
import com.google.gwt.user.client.ui.DialogBox;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.RadioButton;
|
||||||
|
import com.google.gwt.user.client.ui.TextBox;
|
||||||
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code> ImageUploaderDialog </code> class is the Dialog for uploading images
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version October 2008 (0.2)
|
||||||
|
*/
|
||||||
|
public class ImageUploaderDialog extends DialogBox {
|
||||||
|
|
||||||
|
private int width;
|
||||||
|
private int height;
|
||||||
|
|
||||||
|
private Presenter presenter;
|
||||||
|
|
||||||
|
|
||||||
|
private String currTemplateName = "";
|
||||||
|
|
||||||
|
private HorizontalPanel topLabel = new HorizontalPanel();
|
||||||
|
|
||||||
|
private EventListener listener = new EventListener();
|
||||||
|
private RadioButton local = new RadioButton("");
|
||||||
|
private RadioButton web = new RadioButton("");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the container panel
|
||||||
|
*/
|
||||||
|
private VerticalPanel mainLayout = new VerticalPanel();
|
||||||
|
private VerticalPanel dialogPanel = new VerticalPanel();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the dialog
|
||||||
|
* @param presenter my controller
|
||||||
|
*/
|
||||||
|
public ImageUploaderDialog(Presenter presenter) {
|
||||||
|
|
||||||
|
|
||||||
|
// Create a dialog box and set the caption text
|
||||||
|
this.width = 400;
|
||||||
|
this.height = 200;
|
||||||
|
this.presenter = presenter;
|
||||||
|
setText("Insert Image");
|
||||||
|
|
||||||
|
local.setHTML(" From this computer");
|
||||||
|
topLabel.add(local);
|
||||||
|
local.setChecked(true);
|
||||||
|
|
||||||
|
web.setHTML(" From the web (URL)");
|
||||||
|
topLabel.add(web);
|
||||||
|
web.addClickListener(listener);
|
||||||
|
local.addClickListener(listener);
|
||||||
|
|
||||||
|
currTemplateName = presenter.getModel().getTemplateName();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dialogPanel.add(getFromLocalPanel());
|
||||||
|
dialogPanel.setPixelSize(this.width, this.height);
|
||||||
|
|
||||||
|
mainLayout.add(topLabel);
|
||||||
|
mainLayout.add(dialogPanel);
|
||||||
|
setWidget(mainLayout);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private VerticalPanel getFromLocalPanel() {
|
||||||
|
VerticalPanel toReturn = new VerticalPanel();
|
||||||
|
FancyFileUpload uploader = new FancyFileUpload(this, currTemplateName);
|
||||||
|
HTML theLabel = new HTML("<strong>Browse your computer for the image file to upload:</strong>");
|
||||||
|
toReturn.add(theLabel);
|
||||||
|
toReturn.add(uploader);
|
||||||
|
toReturn.setSpacing(4);
|
||||||
|
toReturn.setStyleName("uploadDialog");
|
||||||
|
toReturn.setPixelSize(this.width, this.height);
|
||||||
|
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
private VerticalPanel getFromURLPanel() {
|
||||||
|
VerticalPanel toReturn = new VerticalPanel();
|
||||||
|
|
||||||
|
toReturn.setSpacing(5);
|
||||||
|
|
||||||
|
HTML theLabel = new HTML("<strong>Enter image web address:</strong>");
|
||||||
|
final TextBox urlTextbox = new TextBox();
|
||||||
|
urlTextbox.setWidth("90%");
|
||||||
|
|
||||||
|
final HTML previewBox = new HTML("<div style=\"text-align:center;\"><font style=\"color: rgb(136, 136, 136);\"><br /> Image preview will be displayed here. <br><br> *Remember: Using others' images on the web without their permission may be bad manners, or worse, copyright infringement. <br><br></font></div>", true);
|
||||||
|
previewBox.setStyleName("imagePreviewBox");
|
||||||
|
|
||||||
|
toReturn.add(theLabel);
|
||||||
|
toReturn.add(urlTextbox);
|
||||||
|
toReturn.add(previewBox);
|
||||||
|
|
||||||
|
urlTextbox.addChangeListener(new ChangeListener() {
|
||||||
|
|
||||||
|
public void onChange(Widget sender) {
|
||||||
|
previewBox.setHTML("<img height=\"75\" width=\"120\" src=\"" + urlTextbox.getText()+ "\" >");
|
||||||
|
previewBox.removeStyleName("imagePreviewBox");
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
HorizontalPanel buttonsPanel = new HorizontalPanel();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
buttonsPanel.add(new Button("Insert", new ClickListener() {
|
||||||
|
public void onClick(Widget sender) {
|
||||||
|
hide();
|
||||||
|
presenter.getCurrentSelected().getExtendedFormatter().insertImage(urlTextbox.getText());
|
||||||
|
presenter.getModel().storeInSession();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
buttonsPanel.add(new Button("Cancel", new ClickListener() {
|
||||||
|
public void onClick(Widget sender) {
|
||||||
|
hide();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
buttonsPanel.setSpacing(5);
|
||||||
|
toReturn.add(buttonsPanel);
|
||||||
|
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param imageName .
|
||||||
|
*/
|
||||||
|
public void insertImage(String imageName) {
|
||||||
|
String imgURL = getImageURL(imageName, "CURRENT_OPEN");
|
||||||
|
presenter.getCurrentSelected().getExtendedFormatter().insertImage(imgURL);
|
||||||
|
presenter.getModel().storeInSession();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* use an inner EventListener class to avoid exposing event methods on the dialog class itself.
|
||||||
|
*/
|
||||||
|
|
||||||
|
private class EventListener implements ClickListener {
|
||||||
|
|
||||||
|
public void onClick(Widget sender) {
|
||||||
|
if (sender == web && web.isChecked()) {
|
||||||
|
dialogPanel.clear();
|
||||||
|
dialogPanel.add(getFromURLPanel());
|
||||||
|
} else if (sender == local && local.isChecked()) {
|
||||||
|
dialogPanel.clear();
|
||||||
|
dialogPanel.add(getFromLocalPanel());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return a URL which is lookable for on the web
|
||||||
|
* @param imageName .
|
||||||
|
* @param templateName .
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public String getImageURL(String imageName, String templateName) {
|
||||||
|
String currentUser = presenter.getCurrentUser();
|
||||||
|
String currentScope = presenter.getCurrentScope();
|
||||||
|
/**
|
||||||
|
* Images will be stored under webapps/usersArea...
|
||||||
|
* GWT.getModuleBaseURL() returns * e.g. http://dlib28.isti.cnr.it/templatecreator/html/
|
||||||
|
* need to get just http://dlib28.isti.cnr.it/
|
||||||
|
*/
|
||||||
|
//remove "/html/" and get e.g. http://dlib28.isti.cnr.it/templatecreator
|
||||||
|
String host = GWT.getModuleBaseURL().substring(0, GWT.getModuleBaseURL().length()-6);
|
||||||
|
|
||||||
|
//loog for last slash
|
||||||
|
int lastSlash = host.lastIndexOf("/");
|
||||||
|
|
||||||
|
//get what i need : e.g. http://dlib28.isti.cnr.it/ or host = "http://localhost:8080/";
|
||||||
|
host = host.substring(0, lastSlash +1 );
|
||||||
|
//host = "http://localhost:8080/";
|
||||||
|
|
||||||
|
String imgURL = host + "usersArea/" + currentScope + "/templates/"
|
||||||
|
+ currentUser + "/" + "CURRENT_OPEN" + "/images/" + imageName;
|
||||||
|
|
||||||
|
return imgURL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,180 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.dialog;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableModel;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.ReportConstants;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
|
||||||
|
import org.gcube.portlets.user.workspace.lighttree.client.Item;
|
||||||
|
import org.gcube.portlets.user.workspace.lighttree.client.ItemType;
|
||||||
|
|
||||||
|
import com.google.gwt.user.client.Window;
|
||||||
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||||
|
import com.google.gwt.user.client.ui.Button;
|
||||||
|
import com.google.gwt.user.client.ui.CheckBox;
|
||||||
|
import com.google.gwt.user.client.ui.ClickListener;
|
||||||
|
import com.google.gwt.user.client.ui.DialogBox;
|
||||||
|
import com.google.gwt.user.client.ui.Grid;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
|
||||||
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Image;
|
||||||
|
import com.google.gwt.user.client.ui.ListBox;
|
||||||
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code> ImporterDialog </code> class is is the Dialog for importing template or report sections
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version October 2009 (1.4)
|
||||||
|
*/
|
||||||
|
public class ImporterDialog extends DialogBox {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* this layout panel
|
||||||
|
*/
|
||||||
|
private VerticalPanel dialogPanel = new VerticalPanel();
|
||||||
|
Image loading = new Image(ReportConstants.LOADING_BAR);
|
||||||
|
|
||||||
|
VerticalPanel toReplace = new VerticalPanel();
|
||||||
|
SerializableModel toimportFrom = null;
|
||||||
|
ListBox listbox = new ListBox();
|
||||||
|
|
||||||
|
ListBox listboxCurr = new ListBox();
|
||||||
|
CheckBox lastSection = new CheckBox();
|
||||||
|
|
||||||
|
Presenter presenter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param item the item to import
|
||||||
|
* @param presenter the c
|
||||||
|
*/
|
||||||
|
public ImporterDialog(Item item, final Presenter presenter) {
|
||||||
|
this.presenter = presenter;
|
||||||
|
|
||||||
|
dialogPanel.setSpacing(4);
|
||||||
|
setText("Import from Template or Report");
|
||||||
|
toReplace.setWidth("100%");
|
||||||
|
|
||||||
|
HTML templateNameLabel = new HTML("Importing Template, please hold ...");
|
||||||
|
toReplace.add(templateNameLabel);
|
||||||
|
toReplace.add(loading);
|
||||||
|
|
||||||
|
|
||||||
|
HorizontalPanel buttonsPanel = new HorizontalPanel();
|
||||||
|
HorizontalPanel buttonsContainer = new HorizontalPanel();
|
||||||
|
|
||||||
|
// Add a cancel button at the bottom of the dialog
|
||||||
|
Button cancelButton = new Button("Close",new ClickListener() {
|
||||||
|
public void onClick(Widget sender) { hide(); }
|
||||||
|
});
|
||||||
|
|
||||||
|
Button applyButton = new Button("Import",new ClickListener() {
|
||||||
|
public void onClick(Widget sender) {
|
||||||
|
boolean result = false;
|
||||||
|
if (lastSection.isChecked())
|
||||||
|
result = Window.confirm("You are about to import section " + (listbox.getSelectedIndex()+1) + " as last section in the current document");
|
||||||
|
else
|
||||||
|
result = Window.confirm("You are about to import section " + (listbox.getSelectedIndex()+1) + " before section " + (listboxCurr.getSelectedIndex()+1) + " of the current document");
|
||||||
|
|
||||||
|
if (result)
|
||||||
|
presenter.importSection(toimportFrom, listbox.getSelectedIndex()+1, listboxCurr.getSelectedIndex()+1, lastSection.isChecked());
|
||||||
|
hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
buttonsPanel.setWidth("100%");
|
||||||
|
buttonsPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
|
||||||
|
buttonsContainer.setSpacing(10);
|
||||||
|
buttonsContainer.add(applyButton);
|
||||||
|
buttonsContainer.add(cancelButton);
|
||||||
|
buttonsPanel.add(buttonsContainer);
|
||||||
|
|
||||||
|
dialogPanel.add(toReplace);
|
||||||
|
|
||||||
|
|
||||||
|
dialogPanel.add(buttonsPanel);
|
||||||
|
dialogPanel.setPixelSize(350, 275);
|
||||||
|
setWidget(dialogPanel);
|
||||||
|
|
||||||
|
|
||||||
|
AsyncCallback<SerializableModel> callback = new AsyncCallback<SerializableModel>() {
|
||||||
|
|
||||||
|
public void onFailure(Throwable caught) {
|
||||||
|
Window.alert("Could not Import template, please try again later: " + caught.getMessage());
|
||||||
|
}
|
||||||
|
public void onSuccess(SerializableModel toLoad) {
|
||||||
|
importFinished(toLoad);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//then is not deployed mode
|
||||||
|
if (item == null) {
|
||||||
|
presenter.getModel().getModelService().readModel("", "", true, true, callback);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
boolean isTemplate = (item.getType() == ItemType.REPORT_TEMPLATE) ? true : false;
|
||||||
|
//will asyncrously return a SerializableModel instance read from disk
|
||||||
|
presenter.getModel().getModelService().readModel(item.getName(), item.getId(), isTemplate, true, callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void importFinished(SerializableModel toLoad) {
|
||||||
|
HTML label = new HTML("Importing Complete...");
|
||||||
|
|
||||||
|
Grid grid = new Grid(4, 2);
|
||||||
|
grid.setWidget(0, 0, new HTML("<b>Name: </b>"));
|
||||||
|
grid.setWidget(0, 1, new HTML(toLoad.getTemplateName()));
|
||||||
|
grid.setWidget(1, 0, new HTML("<b>Author: </b>"));
|
||||||
|
grid.setWidget(1, 1, new HTML(toLoad.getAuthor()));
|
||||||
|
grid.setWidget(2, 0, new HTML("<b>Last Edit: </b>"));
|
||||||
|
grid.setWidget(2, 1, new HTML(""+toLoad.getLastEdit()));
|
||||||
|
grid.setWidget(3, 0, new HTML("<b>Total Sections: </b>"));
|
||||||
|
grid.setWidget(3, 1, new HTML(""+toLoad.getTotalPages()));
|
||||||
|
|
||||||
|
toReplace.clear();
|
||||||
|
toReplace.add(label);
|
||||||
|
toReplace.add(grid);
|
||||||
|
toReplace.add(new HTML("<hr color=\"#DDDDDD\" height=\"1px\" width=\"100%\" />"));
|
||||||
|
|
||||||
|
|
||||||
|
for (int i = 1; i <= toLoad.getTotalPages(); i++) {
|
||||||
|
listbox.addItem("Section " + i, ""+(i-1));
|
||||||
|
}
|
||||||
|
Grid grid2 = new Grid(1, 2);
|
||||||
|
grid2.setWidget(0, 0, new HTML("<b>Choose the section to import: </b> "));
|
||||||
|
grid2.setWidget(0, 1, listbox);
|
||||||
|
grid2.setCellPadding(5);
|
||||||
|
|
||||||
|
|
||||||
|
for (int i = 1; i <= presenter.getModel().getTotalPages(); i++) {
|
||||||
|
listboxCurr.addItem("Section " + i, ""+(i-1));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
lastSection.addClickListener(new ClickListener() {
|
||||||
|
|
||||||
|
public void onClick(Widget sender) {
|
||||||
|
CheckBox cb = (CheckBox) sender;
|
||||||
|
listboxCurr.setEnabled(! cb.isChecked());
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
Grid grid3 = new Grid(2, 2);
|
||||||
|
grid3.setWidget(0, 0, new HTML("<b>Import Section before: </b> "));
|
||||||
|
grid3.setWidget(0, 1, listboxCurr);
|
||||||
|
grid3.setWidget(1, 0, new HTML("<b>As last section: </b> "));
|
||||||
|
grid3.setWidget(1, 1, lastSection);
|
||||||
|
grid3.setCellPadding(5);
|
||||||
|
|
||||||
|
toReplace.add(grid2);
|
||||||
|
toReplace.add(new HTML("<hr color=\"#DDDDDD\" height=\"1px\" width=\"100%\" />"));
|
||||||
|
toReplace.add(grid3);
|
||||||
|
toimportFrom = toLoad;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.dialog;
|
||||||
|
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.event.dom.client.ClickEvent;
|
||||||
|
import com.google.gwt.event.dom.client.ClickHandler;
|
||||||
|
import com.google.gwt.user.client.ui.ClickListener;
|
||||||
|
import com.google.gwt.user.client.ui.DialogBox;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author massimiliano.assante@isti.cnr.it
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class LoadingPopup extends DialogBox implements ClickHandler {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param autoHide auto hide
|
||||||
|
*/
|
||||||
|
public LoadingPopup(boolean autoHide) {
|
||||||
|
super(false);
|
||||||
|
HTML msg = new HTML(setToDisplay(), true);
|
||||||
|
setWidget(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return inner html
|
||||||
|
*/
|
||||||
|
protected static String setToDisplay() {
|
||||||
|
return
|
||||||
|
"<center><table border=\"0\">"+
|
||||||
|
"<tr>"+
|
||||||
|
"<td>"+
|
||||||
|
"<img src=\""+GWT.getModuleBaseURL()+"../images/book_load.gif\" >"+
|
||||||
|
"</td></tr>"+
|
||||||
|
"</table></center>" ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onClick(ClickEvent event) {
|
||||||
|
hide();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,110 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.dialog;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.Metadata;
|
||||||
|
import org.gcube.portlets.user.gcubewidgets.client.popup.GCubeDialog;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.model.TemplateModel;
|
||||||
|
|
||||||
|
import com.google.gwt.event.dom.client.ClickEvent;
|
||||||
|
import com.google.gwt.event.dom.client.ClickHandler;
|
||||||
|
import com.google.gwt.user.client.ui.Button;
|
||||||
|
import com.google.gwt.user.client.ui.CellPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Grid;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
|
||||||
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.TextBox;
|
||||||
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code> OpenTemplateDialog </code> class is is the Dialog for showing template properties
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version October 2008 (0.2)
|
||||||
|
*/
|
||||||
|
public class PagePropertiesDialog extends GCubeDialog {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* this layout panel
|
||||||
|
*/
|
||||||
|
private VerticalPanel dialogPanel = new VerticalPanel();
|
||||||
|
|
||||||
|
private TextBox templateNameLabelBox = new TextBox();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param templateModel .
|
||||||
|
* @param presenter .
|
||||||
|
*/
|
||||||
|
public PagePropertiesDialog(final TemplateModel templateModel, final Presenter presenter) {
|
||||||
|
setText("Report Properties");
|
||||||
|
dialogPanel.setSpacing(4);
|
||||||
|
|
||||||
|
HTML spacer = new HTML("<hr width=\"100%\" />");
|
||||||
|
spacer.setHeight("30");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* template name part
|
||||||
|
*/
|
||||||
|
HTML templateNameLabel = new HTML("Template Name: ");
|
||||||
|
|
||||||
|
|
||||||
|
templateNameLabelBox.setText(templateModel.getTemplateName());
|
||||||
|
templateNameLabelBox.setReadOnly(true);
|
||||||
|
|
||||||
|
templateNameLabelBox.setWidth("200");
|
||||||
|
CellPanel templateNamaPanel = new HorizontalPanel();
|
||||||
|
templateNamaPanel.add(templateNameLabel);
|
||||||
|
templateNamaPanel.add(templateNameLabelBox);
|
||||||
|
templateNamaPanel.setCellWidth(templateNameLabel, "120");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dialogPanel.add(templateNamaPanel);
|
||||||
|
|
||||||
|
dialogPanel.add(new HTML("<hr color=\"#DDDDDD\" height=\"1px\" width=\"100%\" />"));
|
||||||
|
|
||||||
|
List<Metadata> metadatas = presenter.getModel().getMetadata();
|
||||||
|
int nRows = metadatas.size();
|
||||||
|
Grid metadataGrid = new Grid(nRows, 2);
|
||||||
|
int i = 0;
|
||||||
|
for (Metadata md : metadatas) {
|
||||||
|
metadataGrid.setWidget(i, 0, new HTML("<b>" + md.getAttribute() + ": </b>"));
|
||||||
|
metadataGrid.setWidget(i, 1, new HTML(md.getValue()));
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
dialogPanel.add(templateNamaPanel);
|
||||||
|
|
||||||
|
dialogPanel.add(new HTML("<hr color=\"#DDDDDD\" height=\"1px\" width=\"100%\" />"));
|
||||||
|
|
||||||
|
dialogPanel.add(metadataGrid);
|
||||||
|
|
||||||
|
HorizontalPanel buttonsPanel = new HorizontalPanel();
|
||||||
|
HorizontalPanel buttonsContainer = new HorizontalPanel();
|
||||||
|
|
||||||
|
// Add a cancel button at the bottom of the dialog
|
||||||
|
Button cancelButton = new Button("Close",new ClickHandler() {
|
||||||
|
public void onClick(ClickEvent event) {
|
||||||
|
hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
buttonsPanel.setWidth("100%");
|
||||||
|
buttonsPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
|
||||||
|
buttonsContainer.setSpacing(10);
|
||||||
|
buttonsContainer.add(cancelButton);
|
||||||
|
buttonsPanel.add(buttonsContainer);
|
||||||
|
|
||||||
|
|
||||||
|
dialogPanel.add(buttonsPanel);
|
||||||
|
dialogPanel.setPixelSize(350, 275);
|
||||||
|
setWidget(dialogPanel);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,112 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.dialog;
|
||||||
|
|
||||||
|
import com.google.gwt.user.client.ui.CheckBox;
|
||||||
|
import com.google.gwt.user.client.ui.ClickListener;
|
||||||
|
import com.google.gwt.user.client.ui.FlexTable;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author massi
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class TSHeader extends HorizontalPanel {
|
||||||
|
|
||||||
|
private CheckBox myCB;
|
||||||
|
private HTML myHeader;
|
||||||
|
private int myColNo;
|
||||||
|
private FlexTable myTable;
|
||||||
|
TimeSeriesFilter caller;
|
||||||
|
TSHeader myinstance;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param tsf -
|
||||||
|
* @param myTable .
|
||||||
|
* @param cb .
|
||||||
|
* @param myColNo .
|
||||||
|
* @param myHeader .
|
||||||
|
*/
|
||||||
|
public TSHeader(TimeSeriesFilter tsf, FlexTable myTable, CheckBox cb, int myColNo, HTML myHeader) {
|
||||||
|
super();
|
||||||
|
myinstance = this;
|
||||||
|
caller = tsf;
|
||||||
|
this.myTable = myTable;
|
||||||
|
this.myCB = cb;
|
||||||
|
|
||||||
|
this.myColNo = myColNo;
|
||||||
|
this.myHeader = myHeader;
|
||||||
|
setVerticalAlignment(ALIGN_MIDDLE);
|
||||||
|
myHeader.setStyleName("timeSeries_header_font");
|
||||||
|
add(myHeader);
|
||||||
|
add(myCB);
|
||||||
|
|
||||||
|
myCB.addClickListener(cbListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void removeEmptyHeaders( FlexTable myTable) {
|
||||||
|
|
||||||
|
for (int i = 0; i < myTable.getCellCount(0); i++) {
|
||||||
|
if (myTable.getWidget(0, i) == null) {
|
||||||
|
myTable.removeCell(0, i);
|
||||||
|
myTable.removeCell(1, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ClickListener cbListener = new ClickListener() {
|
||||||
|
public void onClick(Widget sender) {
|
||||||
|
caller.removeHeader(myinstance);
|
||||||
|
myTable.remove(sender.getParent());
|
||||||
|
removeEmptyHeaders(myTable);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public CheckBox getMyCB() {
|
||||||
|
return myCB;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param myCB .
|
||||||
|
*/
|
||||||
|
public void setMyCB(CheckBox myCB) {
|
||||||
|
this.myCB = myCB;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
* */
|
||||||
|
public HTML getMyHeader() {
|
||||||
|
return myHeader;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param myHeader .
|
||||||
|
*/
|
||||||
|
public void setMyHeader(HTML myHeader) {
|
||||||
|
this.myHeader = myHeader;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public int getMyColNo() {
|
||||||
|
return myColNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param myColNo .
|
||||||
|
*/
|
||||||
|
public void setMyColNo(int myColNo) {
|
||||||
|
this.myColNo = myColNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,81 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.dialog;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableTSinfo;
|
||||||
|
|
||||||
|
import com.google.gwt.user.client.ui.Button;
|
||||||
|
import com.google.gwt.user.client.ui.ClickListener;
|
||||||
|
import com.google.gwt.user.client.ui.DialogBox;
|
||||||
|
import com.google.gwt.user.client.ui.Grid;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.ScrollPanel;
|
||||||
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author massi
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class TimeSeriesDialog extends DialogBox {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param droppedTS .
|
||||||
|
*/
|
||||||
|
public TimeSeriesDialog(SerializableTSinfo droppedTS) {
|
||||||
|
setText(droppedTS.getTitle() + " Details");
|
||||||
|
String name = droppedTS.getTitle();
|
||||||
|
String description = droppedTS.getTimeSeriesDescription();
|
||||||
|
String creator = droppedTS.getCreator();
|
||||||
|
String date = droppedTS.getTimeSeriesCreationDate();
|
||||||
|
long rowsNo = droppedTS.getDimension();
|
||||||
|
String publisher = droppedTS.getPublisher();
|
||||||
|
String rights = droppedTS.getRights();
|
||||||
|
|
||||||
|
Grid metadata = new Grid(7, 2);
|
||||||
|
metadata.setWidget(0, 0, new HTML("Name:", true));
|
||||||
|
metadata.setWidget(0, 1, new HTML(name));
|
||||||
|
metadata.setWidget(1, 0, new HTML("Creation Date: ", true));
|
||||||
|
metadata.setWidget(1, 1, new HTML(date));
|
||||||
|
metadata.setWidget(2, 0, new HTML("Total rows number: ", true));
|
||||||
|
metadata.setWidget(2, 1, new HTML(""+rowsNo));
|
||||||
|
metadata.setWidget(3, 0, new HTML("Description:", true));
|
||||||
|
metadata.setWidget(3, 1, new HTML(description));
|
||||||
|
metadata.setWidget(4, 0, new HTML("Creator: ", true));
|
||||||
|
metadata.setWidget(4, 1, new HTML(creator));
|
||||||
|
metadata.setWidget(5, 0, new HTML("publisher: ", true));
|
||||||
|
metadata.setWidget(5, 1, new HTML(""+publisher));
|
||||||
|
metadata.setWidget(5, 0, new HTML("rights: ", true));
|
||||||
|
metadata.setWidget(5, 1, new HTML(""+rights));
|
||||||
|
|
||||||
|
ScrollPanel scroller = new ScrollPanel();
|
||||||
|
VerticalPanel main_panel = null;
|
||||||
|
main_panel = new VerticalPanel();
|
||||||
|
main_panel.addStyleName("bgBlank p8 font_family font_12");
|
||||||
|
|
||||||
|
scroller.add(metadata);
|
||||||
|
|
||||||
|
// PopupPanel is a SimplePanel, so you have to set it's widget property to
|
||||||
|
// whatever you want its contents to be.
|
||||||
|
Button close = new Button("Close");
|
||||||
|
close.addClickListener(new ClickListener() {
|
||||||
|
public void onClick(Widget arg0) {
|
||||||
|
hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
main_panel.add(scroller);
|
||||||
|
main_panel.add(new HTML("<hr align=\"left\" size=\"1\" width=\"100%\" color=\"gray\" noshade>"));
|
||||||
|
main_panel.add(close);
|
||||||
|
scroller.setPixelSize(350, 200);
|
||||||
|
main_panel.setPixelSize(350, 200);
|
||||||
|
setWidget(main_panel);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void show() {
|
||||||
|
super.show();
|
||||||
|
center();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,217 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.dialog;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.client.CommonConstants;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableTSFilter;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableTSinfo;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableTimeSeries;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.targets.TSArea;
|
||||||
|
|
||||||
|
import com.google.gwt.user.client.Window;
|
||||||
|
import com.google.gwt.user.client.ui.Button;
|
||||||
|
import com.google.gwt.user.client.ui.ChangeListener;
|
||||||
|
import com.google.gwt.user.client.ui.CheckBox;
|
||||||
|
import com.google.gwt.user.client.ui.ClickListener;
|
||||||
|
import com.google.gwt.user.client.ui.DialogBox;
|
||||||
|
import com.google.gwt.user.client.ui.FlexTable;
|
||||||
|
import com.google.gwt.user.client.ui.Grid;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.ScrollPanel;
|
||||||
|
import com.google.gwt.user.client.ui.TextBox;
|
||||||
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author massi
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class TimeSeriesFilter extends DialogBox {
|
||||||
|
ScrollPanel scroller = new ScrollPanel();
|
||||||
|
TextBox from = new TextBox();
|
||||||
|
TextBox to = new TextBox();
|
||||||
|
FlexTable flexTable = new FlexTable();
|
||||||
|
|
||||||
|
List<TSHeader> compoundHeaders = new LinkedList<TSHeader>();
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param sts a ts
|
||||||
|
* @param caller .
|
||||||
|
*/
|
||||||
|
public TimeSeriesFilter(final TSArea caller, final SerializableTimeSeries sts) {
|
||||||
|
|
||||||
|
final SerializableTSinfo droppedTS = sts.getTsMetadata();
|
||||||
|
|
||||||
|
setText(droppedTS.getTitle() + " Filter");
|
||||||
|
String name = droppedTS.getTitle();
|
||||||
|
long rowsNo = droppedTS.getDimension();
|
||||||
|
|
||||||
|
|
||||||
|
Grid metadata = new Grid(2, 2);
|
||||||
|
metadata.setWidget(0, 0, new HTML("Name:", true));
|
||||||
|
metadata.setWidget(0, 1, new HTML(name));
|
||||||
|
metadata.setWidget(1, 0, new HTML("Total rows : ", true));
|
||||||
|
metadata.setWidget(1, 1, new HTML(""+rowsNo));
|
||||||
|
|
||||||
|
|
||||||
|
final VerticalPanel main_panel = new VerticalPanel();
|
||||||
|
main_panel.addStyleName("bgBlank p8 font_family font_12");
|
||||||
|
|
||||||
|
main_panel.add(metadata);
|
||||||
|
|
||||||
|
List<String> headersString = droppedTS.getHeaderLabels();
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
for (int i = 0; i < headersString.size(); i++) {
|
||||||
|
CheckBox toAdd = new CheckBox();
|
||||||
|
toAdd.setChecked(true);
|
||||||
|
compoundHeaders.add(new TSHeader(this, flexTable, toAdd, i, new HTML(headersString.get(i) )));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
main_panel.add(new HTML("Selected fields: (click to remove)"));
|
||||||
|
|
||||||
|
flexTable = getTableHeader(compoundHeaders);
|
||||||
|
main_panel.add(flexTable);
|
||||||
|
|
||||||
|
main_panel.add(new HTML("Select rows interval:"));
|
||||||
|
|
||||||
|
from.setText("1");
|
||||||
|
to.setText("10");
|
||||||
|
to.setMaxLength(6);
|
||||||
|
from.setMaxLength(6);
|
||||||
|
from.addChangeListener(textBoxListener);
|
||||||
|
to.addChangeListener(textBoxListener);
|
||||||
|
|
||||||
|
|
||||||
|
Grid rowsInterval = new Grid(1, 4);
|
||||||
|
rowsInterval.setWidget(0, 0, new HTML("From row:"));
|
||||||
|
rowsInterval.setWidget(0, 1, from);
|
||||||
|
rowsInterval.setWidget(0, 2, new HTML(" To row:"));
|
||||||
|
rowsInterval.setWidget(0, 3, to);
|
||||||
|
|
||||||
|
main_panel.add(rowsInterval);
|
||||||
|
|
||||||
|
main_panel.add(new HTML("<hr align=\"left\" size=\"1\" width=\"100%\" color=\"gray\" noshade>"));
|
||||||
|
HorizontalPanel buttonspanel = new HorizontalPanel();
|
||||||
|
buttonspanel.setHeight("50");
|
||||||
|
buttonspanel.setSpacing(3);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// PopupPanel is a SimplePanel, so you have to set it's widget property to
|
||||||
|
// whatever you want its contents to be.
|
||||||
|
Button close = new Button("Close");
|
||||||
|
close.addClickListener(new ClickListener() {
|
||||||
|
public void onClick(Widget arg0) {
|
||||||
|
hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Button apply = new Button("Apply");
|
||||||
|
apply.addClickListener(new ClickListener() {
|
||||||
|
public void onClick(Widget arg0) {
|
||||||
|
List<TSHeader> selectedCols = compoundHeaders;
|
||||||
|
|
||||||
|
List<Integer> colsToShow = new LinkedList<Integer>();
|
||||||
|
|
||||||
|
for (TSHeader head : selectedCols) {
|
||||||
|
colsToShow.add(new Integer(head.getMyColNo()));
|
||||||
|
}
|
||||||
|
int fromInt = Integer.parseInt(from.getText());
|
||||||
|
int toInt = Integer.parseInt(to.getText());
|
||||||
|
|
||||||
|
SerializableTSFilter toSet = new SerializableTSFilter(colsToShow, null, null, fromInt, toInt);
|
||||||
|
caller.setNewFilter(toSet);
|
||||||
|
caller.refreshHeaders();
|
||||||
|
hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Button reset = new Button("Reset");
|
||||||
|
// close.addClickListener(new ClickListener() {
|
||||||
|
// public void onClick(Widget arg0) {
|
||||||
|
// hide();
|
||||||
|
// show();
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
|
||||||
|
//buttonspanel.add(reset);
|
||||||
|
buttonspanel.add(close);
|
||||||
|
buttonspanel.add(apply);
|
||||||
|
main_panel.add(buttonspanel);
|
||||||
|
|
||||||
|
scroller.setPixelSize(550, 280);
|
||||||
|
main_panel.setPixelSize(550, 260);
|
||||||
|
|
||||||
|
scroller.add(main_panel);
|
||||||
|
setWidget(scroller);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param toRemove .
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public boolean removeHeader(TSHeader toRemove) {
|
||||||
|
return compoundHeaders.remove(toRemove);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* display the header of the ts
|
||||||
|
* @param droppedTS
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private FlexTable getTableHeader(List<TSHeader> headers) {
|
||||||
|
flexTable.clear();
|
||||||
|
int n = headers.size();
|
||||||
|
|
||||||
|
for (int i = 0; i < n ; i++) {
|
||||||
|
flexTable.getCellFormatter().setStyleName(0, i, "timeSeries_header");
|
||||||
|
flexTable.setWidget(0, i, headers.get(i));
|
||||||
|
flexTable.getCellFormatter().setStyleName(1, i, "timeSeries_td");
|
||||||
|
flexTable.setWidget(1, i, new HTML("..."));
|
||||||
|
}
|
||||||
|
|
||||||
|
return flexTable;
|
||||||
|
}
|
||||||
|
|
||||||
|
ChangeListener textBoxListener = new ChangeListener() {
|
||||||
|
|
||||||
|
public void onChange(Widget sender) {
|
||||||
|
TextBox tb = (TextBox) sender;
|
||||||
|
String text = tb.getText();
|
||||||
|
String checkedText = text;
|
||||||
|
text = text.replaceAll(CommonConstants.ACCEPTED_CHARS_JUST_NUM, "");
|
||||||
|
if (! text.equals(checkedText) ) {
|
||||||
|
Window.alert("Only numbers are accepted");
|
||||||
|
tb.setText(text);
|
||||||
|
}
|
||||||
|
int start = Integer.parseInt(from.getText());
|
||||||
|
int end = Integer.parseInt(to.getText());
|
||||||
|
|
||||||
|
if (start >= end) {
|
||||||
|
Window.alert("From must be greater than to");
|
||||||
|
to.setText(""+(start+10));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void show() {
|
||||||
|
super.show();
|
||||||
|
center();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,75 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.dialog;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableTable;
|
||||||
|
|
||||||
|
import com.google.gwt.event.dom.client.ClickEvent;
|
||||||
|
import com.google.gwt.event.dom.client.ClickHandler;
|
||||||
|
import com.google.gwt.user.client.ui.Button;
|
||||||
|
import com.google.gwt.user.client.ui.ClickListener;
|
||||||
|
import com.google.gwt.user.client.ui.DialogBox;
|
||||||
|
import com.google.gwt.user.client.ui.FlexTable;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.ScrollPanel;
|
||||||
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author massi
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class TimeSeriesSampleDialog extends DialogBox {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param table .
|
||||||
|
*/
|
||||||
|
public TimeSeriesSampleDialog(SerializableTable table) {
|
||||||
|
super(true);
|
||||||
|
setText("TS Sample");
|
||||||
|
FlexTable flexTable = new FlexTable();
|
||||||
|
|
||||||
|
VerticalPanel main_panel = null;
|
||||||
|
main_panel = new VerticalPanel();
|
||||||
|
main_panel.addStyleName("bgBlank p8 font_family font_12");
|
||||||
|
|
||||||
|
for (int i = 0; i < table.getRowCount(); i++) {
|
||||||
|
for (int j= 0; j < table.getColsNo(); j++){
|
||||||
|
if (i == 0) {
|
||||||
|
flexTable.getCellFormatter().setStyleName(i, j, "timeSeries_header");
|
||||||
|
flexTable.setWidget(i, j, new HTML(table.getValue(i, j).getContent()));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
flexTable.getCellFormatter().setStyleName(i, j, "timeSeries_td");
|
||||||
|
flexTable.setWidget(i, j, new HTML(table.getValue(i, j).getContent()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
main_panel.add(flexTable);
|
||||||
|
|
||||||
|
// PopupPanel is a SimplePanel, so you have to set it's widget property to
|
||||||
|
// whatever you want its contents to be.
|
||||||
|
Button close = new Button("Close");
|
||||||
|
close.addClickHandler(new ClickHandler() {
|
||||||
|
public void onClick(ClickEvent event) {
|
||||||
|
hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
main_panel.add(new HTML("<hr align=\"left\" size=\"1\" width=\"100%\" color=\"gray\" noshade>"));
|
||||||
|
main_panel.add(close);
|
||||||
|
ScrollPanel scroller = new ScrollPanel();
|
||||||
|
main_panel.setPixelSize(550, 340);
|
||||||
|
scroller.setPixelSize(550, 360);
|
||||||
|
scroller.add(main_panel);
|
||||||
|
setWidget(scroller);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void show() {
|
||||||
|
super.show();
|
||||||
|
center();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.events;
|
||||||
|
|
||||||
|
import com.google.gwt.event.shared.GwtEvent;
|
||||||
|
|
||||||
|
public class AddBiblioEvent extends GwtEvent<AddBiblioEventHandler>{
|
||||||
|
public static Type<AddBiblioEventHandler> TYPE = new Type<AddBiblioEventHandler>();
|
||||||
|
private final String citekey;
|
||||||
|
private final String citetext;
|
||||||
|
|
||||||
|
public AddBiblioEvent(String key, String text) {
|
||||||
|
citekey = key;
|
||||||
|
citetext = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCitekey() {
|
||||||
|
return citekey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCitetext() {
|
||||||
|
return citetext;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Type<AddBiblioEventHandler> getAssociatedType() {
|
||||||
|
return TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void dispatch(AddBiblioEventHandler handler) {
|
||||||
|
handler.onAddCitation(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.events;
|
||||||
|
|
||||||
|
import com.google.gwt.event.shared.EventHandler;
|
||||||
|
|
||||||
|
public interface AddBiblioEventHandler extends EventHandler {
|
||||||
|
void onAddCitation(AddBiblioEvent event);
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.events;
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.targets.ReportTextArea;
|
||||||
|
|
||||||
|
import com.google.gwt.event.shared.GwtEvent;
|
||||||
|
|
||||||
|
public class AddCommentEvent extends GwtEvent<AddCommentEventHandler>{
|
||||||
|
public static Type<AddCommentEventHandler> TYPE = new Type<AddCommentEventHandler>();
|
||||||
|
private final ReportTextArea source;
|
||||||
|
private final String comment;
|
||||||
|
private final int areaHeight;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public AddCommentEvent(ReportTextArea sourceComponent, String comment, int areaHeight) {
|
||||||
|
super();
|
||||||
|
this.source = sourceComponent;
|
||||||
|
this.comment = comment;
|
||||||
|
this.areaHeight = areaHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getAreaHeight() {
|
||||||
|
return areaHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReportTextArea getSourceComponent() {
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getComment() {
|
||||||
|
return comment;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Type<AddCommentEventHandler> getAssociatedType() {
|
||||||
|
return TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void dispatch(AddCommentEventHandler handler) {
|
||||||
|
handler.onAddComment(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.events;
|
||||||
|
|
||||||
|
import com.google.gwt.event.shared.EventHandler;
|
||||||
|
|
||||||
|
public interface AddCommentEventHandler extends EventHandler {
|
||||||
|
void onAddComment(AddCommentEvent event);
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.events;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import com.google.gwt.event.shared.GwtEvent;
|
||||||
|
|
||||||
|
|
||||||
|
public class ItemSelectionEvent extends GwtEvent<ItemSelectionEventHandler>{
|
||||||
|
|
||||||
|
private HashMap<String,Object> map;
|
||||||
|
|
||||||
|
public static Type<ItemSelectionEventHandler> TYPE = new Type<ItemSelectionEventHandler>();
|
||||||
|
public ItemSelectionEvent(HashMap<String,Object> map) {
|
||||||
|
this.map = map;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HashMap<String, Object> getItemSelected() {
|
||||||
|
return this.map;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void dispatch(ItemSelectionEventHandler handler) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
handler.onItemSelected(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Type<ItemSelectionEventHandler> getAssociatedType() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.events;
|
||||||
|
|
||||||
|
import com.google.gwt.event.shared.EventHandler;
|
||||||
|
|
||||||
|
public interface ItemSelectionEventHandler extends EventHandler {
|
||||||
|
|
||||||
|
void onItemSelected(ItemSelectionEvent event);
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.events;
|
||||||
|
|
||||||
|
import com.google.gwt.event.shared.GwtEvent;
|
||||||
|
|
||||||
|
public class RemovedCitationEvent extends GwtEvent<RemovedCitationEventHandler>{
|
||||||
|
public static Type<RemovedCitationEventHandler> TYPE = new Type<RemovedCitationEventHandler>();
|
||||||
|
private final String citekey;
|
||||||
|
|
||||||
|
public RemovedCitationEvent(String citekey) {
|
||||||
|
this.citekey = citekey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCitekey() {
|
||||||
|
return citekey;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Type<RemovedCitationEventHandler> getAssociatedType() {
|
||||||
|
return TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void dispatch(RemovedCitationEventHandler handler) {
|
||||||
|
handler.onRemovedCitation(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.events;
|
||||||
|
|
||||||
|
import com.google.gwt.event.shared.EventHandler;
|
||||||
|
|
||||||
|
public interface RemovedCitationEventHandler extends EventHandler {
|
||||||
|
void onRemovedCitation(RemovedCitationEvent event);
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.events;
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.targets.ReportTextArea;
|
||||||
|
|
||||||
|
import com.google.gwt.event.shared.GwtEvent;
|
||||||
|
|
||||||
|
public class RemovedUserCommentEvent extends GwtEvent<RemovedUserCommentEventHandler>{
|
||||||
|
public static Type<RemovedUserCommentEventHandler> TYPE = new Type<RemovedUserCommentEventHandler>();
|
||||||
|
private final ReportTextArea source;
|
||||||
|
|
||||||
|
|
||||||
|
public RemovedUserCommentEvent(ReportTextArea source) {
|
||||||
|
super();
|
||||||
|
this.source = source;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReportTextArea getSourceComponent() {
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Type<RemovedUserCommentEventHandler> getAssociatedType() {
|
||||||
|
return TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void dispatch(RemovedUserCommentEventHandler handler) {
|
||||||
|
handler.onRemovedComment(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.events;
|
||||||
|
|
||||||
|
import com.google.gwt.event.shared.EventHandler;
|
||||||
|
|
||||||
|
public interface RemovedUserCommentEventHandler extends EventHandler {
|
||||||
|
void onRemovedComment(RemovedUserCommentEvent event);
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.model;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author massi
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public enum ExportManifestationType {
|
||||||
|
/**
|
||||||
|
* DOCX
|
||||||
|
*/
|
||||||
|
DOCX,
|
||||||
|
/**
|
||||||
|
* PDF
|
||||||
|
*/
|
||||||
|
PDF,
|
||||||
|
/**
|
||||||
|
* XML
|
||||||
|
*/
|
||||||
|
XML,
|
||||||
|
/**
|
||||||
|
* HTML
|
||||||
|
*/
|
||||||
|
HTML,
|
||||||
|
/**
|
||||||
|
* FiMES FAO Schema
|
||||||
|
*/
|
||||||
|
FIMES;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,534 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.model;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.client.ComponentType;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.Metadata;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableAttribute;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableAttributeArea;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableComponent;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableTable;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableTimeSeries;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.targets.AttributeArea;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.targets.BasicTextArea;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.targets.D4sRichTextarea;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.targets.DropImageListener;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.targets.DropTSListener;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.targets.DroppingArea;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.targets.GenericTable;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.targets.ImageArea;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.targets.ReportTextArea;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.targets.TSArea;
|
||||||
|
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.dom.client.Style.Unit;
|
||||||
|
import com.google.gwt.user.client.ui.CheckBox;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.Image;
|
||||||
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* This class represent all the possible template components IN THE MODEL
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version July 2011 (3.0)
|
||||||
|
*/
|
||||||
|
public class TemplateComponent {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public final static String DEFAULT_IMAGE_PATH= GWT.getModuleBaseURL() + "../images/organization_logo.jpg";
|
||||||
|
|
||||||
|
private int x;
|
||||||
|
private int y;
|
||||||
|
private int width;
|
||||||
|
private int height;
|
||||||
|
private TemplateModel myModel;
|
||||||
|
private int templatePage;
|
||||||
|
private String idInBasket = null;
|
||||||
|
|
||||||
|
|
||||||
|
private ComponentType type;
|
||||||
|
|
||||||
|
private boolean locked;
|
||||||
|
|
||||||
|
private boolean doubleColLayout;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* holds the metadata(s) for the sections
|
||||||
|
*/
|
||||||
|
private List<Metadata> metadata;
|
||||||
|
/**
|
||||||
|
* the paramName for assigning it a value when exporting to pdf, valid only for Dynamic Content
|
||||||
|
*/
|
||||||
|
private String paramName;
|
||||||
|
|
||||||
|
//what is in the template component may vary depending on its type
|
||||||
|
private Widget content;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a empty TemplateComponent
|
||||||
|
*/
|
||||||
|
public TemplateComponent() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a TemplateComponent with the given charactheristics in double column
|
||||||
|
*
|
||||||
|
* @param myModel .
|
||||||
|
* @param x .
|
||||||
|
* @param y .
|
||||||
|
* @param width .
|
||||||
|
* @param height .
|
||||||
|
* @param templatePage .
|
||||||
|
* @param content the inserted widget
|
||||||
|
* @param type the type of the inserted widget
|
||||||
|
* @param paramName for assigning it a value when exporting to pdf, valid only for Dynamic Content
|
||||||
|
* @param doubleColLayout to specify that its layout is double columned
|
||||||
|
*/
|
||||||
|
public TemplateComponent(TemplateModel myModel, int x, int y, int width, int height, int templatePage, ComponentType type, String paramName, Widget content, boolean doubleColLayout) {
|
||||||
|
this.myModel = myModel;
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
|
this.templatePage = templatePage;
|
||||||
|
this.content = content;
|
||||||
|
this.type = type;
|
||||||
|
this.paramName = paramName;
|
||||||
|
this.doubleColLayout = doubleColLayout;
|
||||||
|
this.metadata = new LinkedList<Metadata>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Creates a TemplateComponent with the given charactheristics and single column
|
||||||
|
*
|
||||||
|
* @param myModel .
|
||||||
|
* @param x .
|
||||||
|
* @param y .
|
||||||
|
* @param width .
|
||||||
|
* @param height .
|
||||||
|
* @param templatePage .
|
||||||
|
* @param content the inserted widget
|
||||||
|
* @param type the type of the inserted widget
|
||||||
|
* @param paramName for assigning it a value when exporting to pdf, valid only for Dynamic Content
|
||||||
|
*/
|
||||||
|
public TemplateComponent(TemplateModel myModel, int x, int y, int width, int height, int templatePage, ComponentType type, String paramName, Widget content) {
|
||||||
|
this.myModel = myModel;
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
|
this.templatePage = templatePage;
|
||||||
|
this.content = content;
|
||||||
|
this.type = type;
|
||||||
|
this.paramName = paramName;
|
||||||
|
this.doubleColLayout = false;
|
||||||
|
this.metadata = new LinkedList<Metadata>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* create a template component which is displayable (create an actual Widget in the content field)
|
||||||
|
* @param myModel the model
|
||||||
|
* @param sc the serialiazble to convert
|
||||||
|
* @param presenter .
|
||||||
|
*/
|
||||||
|
public TemplateComponent(TemplateModel myModel, SerializableComponent sc, Presenter presenter) {
|
||||||
|
this.myModel = myModel;
|
||||||
|
//
|
||||||
|
//Coords start = new Coords(x, y);
|
||||||
|
int width = sc.getWidth();
|
||||||
|
int height = sc.getHeight();
|
||||||
|
this.x = sc.getX();
|
||||||
|
this.y = sc.getY();
|
||||||
|
this.width = sc.getWidth();
|
||||||
|
this.height = sc.getHeight();
|
||||||
|
this.templatePage = sc.getTemplatePage();
|
||||||
|
this.type = sc.getType();
|
||||||
|
this.paramName = sc.getParamName();
|
||||||
|
this.doubleColLayout = sc.isDoubleColLayout();
|
||||||
|
this.locked = sc.isLocked();
|
||||||
|
this.metadata = sc.getMetadata();
|
||||||
|
|
||||||
|
switch (sc.getType()) {
|
||||||
|
case DYNA_IMAGE:
|
||||||
|
DroppingArea dp;
|
||||||
|
String possibelContent = ((String) sc.getPossibleContent());
|
||||||
|
if (possibelContent.startsWith("http")) {
|
||||||
|
dp = new DroppingArea(presenter, width, height,possibelContent);
|
||||||
|
|
||||||
|
dp.showImage(new Image(possibelContent));
|
||||||
|
}
|
||||||
|
else if (possibelContent.startsWith("/"))
|
||||||
|
dp = new DroppingArea(presenter, width, height, "");
|
||||||
|
else if (sc.getPossibleContent().equals(DEFAULT_IMAGE_PATH)) {
|
||||||
|
dp = new DroppingArea(presenter, width, height, "");
|
||||||
|
} else {
|
||||||
|
dp = new DroppingArea(presenter, width, height, possibelContent);
|
||||||
|
}
|
||||||
|
dp.setPixelSize(width, height);
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
DropImageListener dropListener = new DropImageListener(dp);
|
||||||
|
|
||||||
|
this.content = dp;
|
||||||
|
break;
|
||||||
|
case STATIC_IMAGE:
|
||||||
|
String imagePath = (String) sc.getPossibleContent();
|
||||||
|
|
||||||
|
ImageArea img = new ImageArea(presenter, imagePath, myModel.getTemplateName(), true, width, height);
|
||||||
|
img.setPixelSize(width, height);
|
||||||
|
this.content = img;
|
||||||
|
break;
|
||||||
|
case HEADING_1:
|
||||||
|
case HEADING_2:
|
||||||
|
case HEADING_3:
|
||||||
|
case TITLE:
|
||||||
|
if (sc.isLocked()) {
|
||||||
|
HTML area = new HTML();
|
||||||
|
area.setStyleName(getStyle(sc.getType()));
|
||||||
|
area.getElement().getStyle().setMarginLeft(25, Unit.PX);
|
||||||
|
area.getElement().getStyle().setMarginTop(15, Unit.PX);
|
||||||
|
area.setPixelSize(width, height);
|
||||||
|
area.setText((String) sc.getPossibleContent());
|
||||||
|
this.content = area;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
BasicTextArea bToAdd = new BasicTextArea(sc.getType(), presenter, sc.getX(), sc.getY(), width, height, getUserComments() != null);
|
||||||
|
bToAdd.setText((String) sc.getPossibleContent());
|
||||||
|
this.content = bToAdd;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BODY:
|
||||||
|
if (sc.isLocked()) {
|
||||||
|
HTML area = new HTML();
|
||||||
|
area.setStyleName("d4sFrame");
|
||||||
|
area.addStyleName("fixedTextArea");
|
||||||
|
area.addStyleName("hasRichTextToolbar");
|
||||||
|
area.setPixelSize(width, height);
|
||||||
|
area.setHTML((String) sc.getPossibleContent());
|
||||||
|
this.content = area;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
D4sRichTextarea ta = new D4sRichTextarea(sc.getType(), presenter, sc.getX(), sc.getY(),width, height, getUserComments() != null);
|
||||||
|
ta.setHTML((String) sc.getPossibleContent());
|
||||||
|
//ta.setStyleName("cw-RichText");
|
||||||
|
ta.setPixelSize(width, height);
|
||||||
|
this.content = ta;
|
||||||
|
}
|
||||||
|
this.setLocked(sc.isLocked());
|
||||||
|
break;
|
||||||
|
case TOC:
|
||||||
|
ReportTextArea dp2 = new ReportTextArea(sc.getType(), presenter, sc.getX(), sc.getY(), width, height, getUserComments() != null);
|
||||||
|
dp2.addStyleName("tocArea");
|
||||||
|
this.content = dp2;
|
||||||
|
break;
|
||||||
|
case BIBLIO:
|
||||||
|
ReportTextArea dp3 = new ReportTextArea(sc.getType(), presenter, sc.getX(), sc.getY(), width, height, getUserComments() != null);
|
||||||
|
dp3.addStyleName("biblioArea");
|
||||||
|
this.content = dp3;
|
||||||
|
break;
|
||||||
|
case PAGEBREAK:
|
||||||
|
ReportTextArea dp4 = new ReportTextArea(sc.getType(), presenter, sc.getX(), sc.getY(), width, height, getUserComments() != null);
|
||||||
|
dp4.addStyleName("pagebreak");
|
||||||
|
this.content = dp4;
|
||||||
|
break;
|
||||||
|
case FLEX_TABLE:
|
||||||
|
SerializableTable st = (SerializableTable) sc.getPossibleContent();
|
||||||
|
GenericTable table = new GenericTable(st, presenter, sc.getX(), sc.getY(), TemplateModel.TEMPLATE_WIDTH - 50, 200);
|
||||||
|
this.content = table;
|
||||||
|
break;
|
||||||
|
case ATTRIBUTE:
|
||||||
|
AttributeArea ta = null;
|
||||||
|
if (sc.getPossibleContent() instanceof SerializableAttributeArea) {
|
||||||
|
SerializableAttributeArea sata = (SerializableAttributeArea) sc.getPossibleContent();
|
||||||
|
ta = new AttributeArea(presenter, sc.getX(), sc.getY(), width, height, sata);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ta = new AttributeArea(presenter, sc.getX(), sc.getY(), width, height, sc.getPossibleContent().toString());
|
||||||
|
}
|
||||||
|
this.content = ta;
|
||||||
|
break;
|
||||||
|
case COMMENT:
|
||||||
|
HTML comment = new HTML();
|
||||||
|
comment.setStyleName("commentArea");
|
||||||
|
comment.setHTML((String) sc.getPossibleContent());
|
||||||
|
this.content = comment;
|
||||||
|
break;
|
||||||
|
case INSTRUCTION:
|
||||||
|
HTML instr = new HTML();
|
||||||
|
instr.setStyleName("instructionArea");
|
||||||
|
instr.setHTML((String) sc.getPossibleContent());
|
||||||
|
this.content = instr;
|
||||||
|
break;
|
||||||
|
case TIME_SERIES:
|
||||||
|
TSArea tsa;
|
||||||
|
SerializableTimeSeries sts = null;
|
||||||
|
try {
|
||||||
|
sts = ((SerializableTimeSeries) sc.getPossibleContent());
|
||||||
|
} catch (ClassCastException e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
//need to reset the filter when loading a TS
|
||||||
|
sts.setFilter(null);
|
||||||
|
tsa = new TSArea(presenter, width, 155, sts);
|
||||||
|
|
||||||
|
tsa.setPixelSize(width, 155);
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
DropTSListener dropTSListener = new DropTSListener(tsa);
|
||||||
|
|
||||||
|
this.content = tsa;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param type
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private String getStyle(ComponentType type) {
|
||||||
|
switch (type) {
|
||||||
|
case TITLE:
|
||||||
|
return "titleArea";
|
||||||
|
case HEADING_1:
|
||||||
|
return "headgin1Area";
|
||||||
|
case HEADING_2:
|
||||||
|
return "headgin2Area";
|
||||||
|
case HEADING_3:
|
||||||
|
return "headgin3Area";
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* return a template Component which is serializable
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public SerializableComponent getSerializable() {
|
||||||
|
Serializable content = "";
|
||||||
|
String id = "";
|
||||||
|
switch (this.getType()) {
|
||||||
|
case DYNA_IMAGE:
|
||||||
|
DroppingArea da = (DroppingArea) this.content;
|
||||||
|
content = da.getDroppedImage().getUrl();
|
||||||
|
id = da.getIdInBasket();
|
||||||
|
idInBasket = id;
|
||||||
|
if (((String) content).compareTo("") == 0)
|
||||||
|
content = DEFAULT_IMAGE_PATH;
|
||||||
|
break;
|
||||||
|
case STATIC_IMAGE:
|
||||||
|
ImageArea tmp = ((ImageArea) this.content);
|
||||||
|
String imageName = tmp.getImageName();
|
||||||
|
content = tmp.getUrl();
|
||||||
|
break;
|
||||||
|
case BODY:
|
||||||
|
if (this.isLocked()) {
|
||||||
|
content = ((HTML) this.content).getHTML();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
content = ((D4sRichTextarea) this.content).getHTML();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HEADING_1:
|
||||||
|
case HEADING_2:
|
||||||
|
case HEADING_3:
|
||||||
|
case TITLE:
|
||||||
|
if (this.isLocked()) {
|
||||||
|
content = ((HTML) this.content).getText();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
content = ((BasicTextArea) this.content).getText();
|
||||||
|
break;
|
||||||
|
case TIME_SERIES:
|
||||||
|
GWT.log("Found Time Series", null);
|
||||||
|
TSArea tsa = (TSArea) this.content;
|
||||||
|
content = tsa.getSts();
|
||||||
|
break;
|
||||||
|
case FLEX_TABLE:
|
||||||
|
GenericTable gt = (GenericTable) this.content;
|
||||||
|
SerializableTable st = gt.getSerializable();
|
||||||
|
content = st;
|
||||||
|
break;
|
||||||
|
case ATTRIBUTE:
|
||||||
|
AttributeArea att = (AttributeArea) this.content;
|
||||||
|
ArrayList<SerializableAttribute> values = new ArrayList<SerializableAttribute>();
|
||||||
|
for (CheckBox box : att.getBoxes()) {
|
||||||
|
values.add(new SerializableAttribute(box.getText().trim(), box.getValue()));
|
||||||
|
}
|
||||||
|
SerializableAttributeArea sat= new SerializableAttributeArea(att.getAttrName().trim(), values);
|
||||||
|
content = sat;
|
||||||
|
break;
|
||||||
|
case COMMENT:
|
||||||
|
content = ((HTML) this.content).getHTML();
|
||||||
|
break;
|
||||||
|
case INSTRUCTION:
|
||||||
|
content = ((HTML) this.content).getHTML();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return new SerializableComponent(x, y, width, height, templatePage, type, idInBasket, "param empty", content, this.doubleColLayout, isLocked(), metadata);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public int getHeight() {return height;}
|
||||||
|
/**
|
||||||
|
* @param height .
|
||||||
|
*/
|
||||||
|
public void setHeight(int height) { this.height = height; }
|
||||||
|
/**
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public ComponentType getType() {return type;}
|
||||||
|
/**
|
||||||
|
* @param type .
|
||||||
|
*/
|
||||||
|
public void setType(ComponentType type) { this.type = type;}
|
||||||
|
/**
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public int getWidth() { return width;}
|
||||||
|
/**
|
||||||
|
* @param width .
|
||||||
|
*/
|
||||||
|
public void setWidth(int width) {this.width = width;}
|
||||||
|
/**
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public int getX() { return x;}
|
||||||
|
/**
|
||||||
|
* @param x .
|
||||||
|
*/
|
||||||
|
public void setX(int x) {this.x = x;}
|
||||||
|
/**
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public int getY() {return y;}
|
||||||
|
/**
|
||||||
|
* @param y .
|
||||||
|
*/
|
||||||
|
public void setY(int y) {this.y = y;}
|
||||||
|
/**
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public int getTemplatePage() { return templatePage; }
|
||||||
|
/**
|
||||||
|
* @param templatePage .
|
||||||
|
*/
|
||||||
|
public void setTemplatePage(int templatePage) { this.templatePage = templatePage;}
|
||||||
|
/**
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public Widget getContent() {return content; }
|
||||||
|
/**
|
||||||
|
* @param content .
|
||||||
|
*/
|
||||||
|
public void setContent(Widget content) {
|
||||||
|
this.content = content;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public String getParamName() {
|
||||||
|
return paramName;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param paramName .
|
||||||
|
*/
|
||||||
|
public void setParamName(String paramName) {
|
||||||
|
this.paramName = paramName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public boolean isLocked() {
|
||||||
|
return locked;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param locked .
|
||||||
|
*/
|
||||||
|
public void setLocked(boolean locked) {
|
||||||
|
this.locked = locked;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param attr .
|
||||||
|
* @param value .
|
||||||
|
*/
|
||||||
|
public void addMetadata(String attr, String value) {
|
||||||
|
if (attr != null && value != null) {
|
||||||
|
metadata.add(new Metadata(attr, value));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public List<Metadata> getAllMetadata() {
|
||||||
|
if (metadata == null) {
|
||||||
|
new LinkedList<Metadata>();
|
||||||
|
}
|
||||||
|
return metadata;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getUserComments() {
|
||||||
|
if (metadata == null) return null;
|
||||||
|
for (Metadata md : metadata) {
|
||||||
|
if (md.getAttribute().equals(TemplateModel.USER_COMMENT))
|
||||||
|
return md.getValue();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public String getIdInBasket() {
|
||||||
|
return idInBasket;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param idInBasket .
|
||||||
|
*/
|
||||||
|
public void setIdInBasket(String idInBasket) {
|
||||||
|
this.idInBasket = idInBasket;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public boolean isDoubleColLayout() {
|
||||||
|
return doubleColLayout;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,697 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.model;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Vector;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.client.ComponentType;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.Metadata;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableComponent;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableModel;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableSection;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableTimeSeries;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.ReportService;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.ReportServiceAsync;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
|
||||||
|
|
||||||
|
import com.extjs.gxt.ui.client.widget.MessageBox;
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.user.client.Window;
|
||||||
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||||
|
import com.google.gwt.user.client.rpc.ServiceDefTarget;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The <code> TemplateModel </code> class represents the current Template state, the model in the the MVC pattern
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version July 2011 (3.0)
|
||||||
|
*/
|
||||||
|
public class TemplateModel {
|
||||||
|
|
||||||
|
private ReportServiceAsync modelService = (ReportServiceAsync) GWT.create(ReportService.class);
|
||||||
|
private ServiceDefTarget endpoint = (ServiceDefTarget) modelService;
|
||||||
|
/**
|
||||||
|
* default w and h
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static final int OLD_TEMPLATE_WIDTH = 950;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static final int TEMPLATE_WIDTH = 750;
|
||||||
|
/**
|
||||||
|
* TEMPLATE_HEIGHT
|
||||||
|
*/
|
||||||
|
public static final int TEMPLATE_HEIGHT= 1000;
|
||||||
|
/**
|
||||||
|
* DEFAULT_NAME
|
||||||
|
*/
|
||||||
|
public static final String DEFAULT_NAME = "No template loaded";
|
||||||
|
public static final String BIBLIO_SECTION = "isBibliography";
|
||||||
|
public static final String USER_COMMENT = "isComment";
|
||||||
|
public static final String USER_COMMENT_HEIGHT = "isCommentHeight";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the template
|
||||||
|
*/
|
||||||
|
private String templateName;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private int pageWidth;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private int pageHeight;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private int currentPage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Total number of template pages
|
||||||
|
*/
|
||||||
|
private int totalPages;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Template left margin
|
||||||
|
*/
|
||||||
|
private int marginLeft;
|
||||||
|
/**
|
||||||
|
* Template right margin
|
||||||
|
*/
|
||||||
|
private int marginRight;
|
||||||
|
/**
|
||||||
|
* Template top margin
|
||||||
|
*/
|
||||||
|
private int marginTop;
|
||||||
|
/**
|
||||||
|
* Template bottom margin
|
||||||
|
*/
|
||||||
|
private int marginBottom;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* columnWidth is the actual page width without margins, when columns is equal to 1 (which is always true in my case, since UI doesn't allow multi columns)
|
||||||
|
*/
|
||||||
|
private int columnWidth;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* each object of this Hahsmap its a <class>TemplateSection</class> containing all the TemplateComponent of a template section
|
||||||
|
*
|
||||||
|
* object: a <class>TemplateSection</class> of Component containing all the TemplateComponent of the section
|
||||||
|
*/
|
||||||
|
|
||||||
|
private HashMap<String, TemplateSection> sections;
|
||||||
|
/**
|
||||||
|
* holds the metadata(s) for the model
|
||||||
|
*/
|
||||||
|
private List<Metadata> metadata;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the author
|
||||||
|
*/
|
||||||
|
private String author;
|
||||||
|
/**
|
||||||
|
* The name of the author
|
||||||
|
*/
|
||||||
|
private String lastEditBy;
|
||||||
|
/**
|
||||||
|
* The name of the author
|
||||||
|
*/
|
||||||
|
private Date dateCreated;
|
||||||
|
/**
|
||||||
|
* The name of the author
|
||||||
|
*/
|
||||||
|
private Date lastEdit;
|
||||||
|
|
||||||
|
private Presenter presenter;
|
||||||
|
/**
|
||||||
|
* Constructs a Default Template Model
|
||||||
|
* @param presenter .
|
||||||
|
*/
|
||||||
|
|
||||||
|
public TemplateModel(Presenter presenter) {
|
||||||
|
super();
|
||||||
|
this.templateName = DEFAULT_NAME;
|
||||||
|
this.pageWidth = TEMPLATE_WIDTH;
|
||||||
|
this.pageHeight = TEMPLATE_HEIGHT;
|
||||||
|
this.currentPage = 1;
|
||||||
|
this.totalPages = 1;
|
||||||
|
this.marginLeft = 25;
|
||||||
|
this.marginRight = 25;
|
||||||
|
this.marginTop = 20;
|
||||||
|
this.marginBottom = 20;
|
||||||
|
this.columnWidth = pageWidth - (marginLeft + marginRight);
|
||||||
|
this.author = "";
|
||||||
|
this.lastEdit = null;
|
||||||
|
this.lastEditBy = "";
|
||||||
|
this.dateCreated = null;
|
||||||
|
|
||||||
|
this.sections = new HashMap<String, TemplateSection>();
|
||||||
|
this.metadata = new LinkedList<Metadata>();
|
||||||
|
|
||||||
|
this.presenter = presenter;
|
||||||
|
String moduleRelativeURL = GWT.getModuleBaseURL() + "ReportServiceImpl";
|
||||||
|
endpoint.setServiceEntryPoint(moduleRelativeURL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param pageNo .
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public List<TemplateComponent> getSectionComponent(int pageNo) {
|
||||||
|
List<TemplateComponent> toReturn = new LinkedList<TemplateComponent>();
|
||||||
|
|
||||||
|
toReturn = sections.get(""+pageNo).getAllComponents();
|
||||||
|
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* look for the model in the current page and edits its size
|
||||||
|
* @param toResize .
|
||||||
|
* @param newWidth .
|
||||||
|
* @param newHeight .
|
||||||
|
*/
|
||||||
|
public void addCommentToComponent(Widget component, String comment2Add, int visibleHeight) {
|
||||||
|
String tcPage = ""+currentPage;
|
||||||
|
TemplateSection singleSection = sections.get(tcPage);
|
||||||
|
singleSection.addCommentToComponent(component, comment2Add, visibleHeight);
|
||||||
|
storeInSession();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeComment(Widget toRemove) {
|
||||||
|
String tcPage = ""+currentPage;
|
||||||
|
TemplateSection singleSection = sections.get(tcPage);
|
||||||
|
singleSection.discardComments(toRemove);
|
||||||
|
storeInSession();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void insertBiblioSection() {
|
||||||
|
totalPages++;
|
||||||
|
|
||||||
|
TemplateSection singleSection = new TemplateSection();
|
||||||
|
singleSection.addMetadata(BIBLIO_SECTION, "true");
|
||||||
|
|
||||||
|
SerializableComponent references = new SerializableComponent(0, 0,TEMPLATE_WIDTH - 50, 35,
|
||||||
|
totalPages, ComponentType.HEADING_2, "", "REFERENCES", false, true, singleSection.getAllMetadata());
|
||||||
|
TemplateComponent referencesTC = new TemplateComponent(this, references, presenter);
|
||||||
|
|
||||||
|
singleSection.addComponent(referencesTC);
|
||||||
|
sections.put(""+totalPages, singleSection);
|
||||||
|
storeInSession();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param citeKey -
|
||||||
|
* @param citeText -
|
||||||
|
*/
|
||||||
|
public void addCitation(String citeKey, String citeText) {
|
||||||
|
String citation ="<b>" + citeKey + ".</b> " + citeText;
|
||||||
|
TemplateSection singleSection = getSection(totalPages);
|
||||||
|
SerializableComponent entry = new SerializableComponent(0, 0,TEMPLATE_WIDTH - 50, 35,
|
||||||
|
totalPages, ComponentType.HEADING_2, "", "Bibliographic Entry", false, true, singleSection.getAllMetadata());
|
||||||
|
TemplateComponent entryTC = new TemplateComponent(this, entry, presenter);
|
||||||
|
singleSection.addComponent(entryTC);
|
||||||
|
SerializableComponent entryText = new SerializableComponent(0, 0,TEMPLATE_WIDTH - 50, 35,
|
||||||
|
totalPages, ComponentType.BODY, "", citation, false, false, singleSection.getAllMetadata());
|
||||||
|
TemplateComponent entryTextTC = new TemplateComponent(this, entryText, presenter);
|
||||||
|
singleSection.addComponent(entryTextTC);
|
||||||
|
storeInSession();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* remove a Citation from the model
|
||||||
|
* @param citeKey .
|
||||||
|
*/
|
||||||
|
public boolean removeCitation(String citeKey) {
|
||||||
|
TemplateSection singleSection = getSection(totalPages);
|
||||||
|
List<TemplateComponent> components = singleSection.getAllComponents();
|
||||||
|
for (int i = 0; i < components.size(); i++) {
|
||||||
|
TemplateComponent tc = components.get(i);
|
||||||
|
if (tc.getType() == ComponentType.BODY) {
|
||||||
|
SerializableComponent sc = tc.getSerializable();
|
||||||
|
HTML citationHTML = new HTML(sc.getPossibleContent().toString(), true); ///to clean the HTML
|
||||||
|
String citation = citationHTML.getText();
|
||||||
|
if (citation.startsWith(citeKey)) {
|
||||||
|
if (singleSection.removeComponent(tc)) { //removes also the previous heading 2
|
||||||
|
TemplateComponent h2 = components.get(i-1);
|
||||||
|
singleSection.removeComponent(h2);
|
||||||
|
storeInSession();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param pageNo .
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public TemplateSection getSection(int pageNo) {
|
||||||
|
return sections.get(""+pageNo);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* generally used when reaing a model form disk
|
||||||
|
* @param toLoad the SerializableModel instance to load in the model
|
||||||
|
* @param presenter .
|
||||||
|
*/
|
||||||
|
public void loadModel(SerializableModel toLoad, Presenter presenter) {
|
||||||
|
//loading template from disk
|
||||||
|
|
||||||
|
this.author = toLoad.getAuthor();
|
||||||
|
this.dateCreated = toLoad.getDateCreated();
|
||||||
|
this.lastEdit = toLoad.getLastEdit();
|
||||||
|
this.lastEditBy = toLoad.getLastEditBy();
|
||||||
|
this.templateName = toLoad.getTemplateName();
|
||||||
|
this.pageWidth = toLoad.getPageWidth();
|
||||||
|
this.pageHeight = toLoad.getPageHeight();
|
||||||
|
this.currentPage = toLoad.getCurrPage();
|
||||||
|
this.totalPages = toLoad.getTotalPages();
|
||||||
|
this.marginLeft = toLoad.getMarginLeft();
|
||||||
|
this.marginRight = toLoad.getMarginRight();
|
||||||
|
this.marginTop = toLoad.getMarginTop();
|
||||||
|
this.marginBottom = toLoad.getMarginBottom();
|
||||||
|
this.metadata = toLoad.getMetadata();
|
||||||
|
this.columnWidth = pageWidth - (marginLeft + marginRight);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//the sections to be transferred
|
||||||
|
Vector<SerializableSection> sectionsSerialized = toLoad.getSections();
|
||||||
|
|
||||||
|
//reset current sections container
|
||||||
|
this.sections = new HashMap<String, TemplateSection>();
|
||||||
|
|
||||||
|
//page Number, this model uses a HashMap for each page, the key is the page number
|
||||||
|
int pageNo = 1;
|
||||||
|
for (SerializableSection serialazableSection : sectionsSerialized) { //for each section
|
||||||
|
|
||||||
|
List<TemplateComponent> myTemplateSection = new Vector<TemplateComponent>();
|
||||||
|
for (SerializableComponent sc : serialazableSection.getComponents()) { //for each page component
|
||||||
|
myTemplateSection.add(new TemplateComponent(this, sc, presenter));
|
||||||
|
}
|
||||||
|
//TODO: load also metadata
|
||||||
|
GWT.log("Section Metadata:"+serialazableSection.getMetadata().size(), null);
|
||||||
|
this.sections.put(""+pageNo, new TemplateSection(myTemplateSection, serialazableSection.getMetadata()));
|
||||||
|
pageNo++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* generally used when reaing a model form disk
|
||||||
|
* @param toLoad the SerializableModel instance where toget the section
|
||||||
|
* @param sectionNoToimport section to import 0 -> n-1
|
||||||
|
* @param beforeSection say where to import this section (before)
|
||||||
|
* @param asLastSection say to import this section as last section in the curren template / report
|
||||||
|
*/
|
||||||
|
public void importSectionInModel(SerializableModel toLoad, int sectionNoToimport, int beforeSection, boolean asLastSection) {
|
||||||
|
|
||||||
|
int pageNo = totalPages+1;
|
||||||
|
|
||||||
|
//the section to be imported -1 beacuse it stays in a vector
|
||||||
|
SerializableSection toImport = toLoad.getSections().get(sectionNoToimport-1);
|
||||||
|
List<TemplateComponent> myTemplateSection = new Vector<TemplateComponent>();
|
||||||
|
for (SerializableComponent sc : toImport.getComponents()) { //for each page component
|
||||||
|
myTemplateSection.add(new TemplateComponent(this, sc, presenter));
|
||||||
|
}
|
||||||
|
//TODO: load also metadata
|
||||||
|
GWT.log("Section Metadata:"+toImport.getMetadata().size(), null);
|
||||||
|
if (asLastSection)
|
||||||
|
this.sections.put(""+pageNo, new TemplateSection(myTemplateSection, toImport.getMetadata()));
|
||||||
|
else {
|
||||||
|
//insertin gnew section
|
||||||
|
HashMap<String, TemplateSection> newSections = new HashMap<String, TemplateSection>();
|
||||||
|
boolean isAdded = false;
|
||||||
|
for (int i = 1; i <= totalPages+1; i++) {
|
||||||
|
if (beforeSection == i) {
|
||||||
|
newSections.put(""+i, new TemplateSection(myTemplateSection, toImport.getMetadata()));
|
||||||
|
isAdded = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
int insertIn = (isAdded) ? (i-1): i;
|
||||||
|
newSections.put(""+i, sections.get(""+insertIn));
|
||||||
|
GWT.log("Inserting " + insertIn + " into section " + i + " isAdded =" + (isAdded) , null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.sections = newSections;
|
||||||
|
GWT.log("NEW SECTION SIZE"+sections.size(), null);
|
||||||
|
}
|
||||||
|
|
||||||
|
totalPages++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param sectNo the section to discard
|
||||||
|
* @return the removed element
|
||||||
|
*/
|
||||||
|
public TemplateSection discardSection(int sectNo) {
|
||||||
|
|
||||||
|
TemplateSection toRemove = sections.remove(""+sectNo);
|
||||||
|
for (int i = sectNo+1; i <= totalPages; i++) {
|
||||||
|
sections.put(""+(i-1), sections.get(""+i));
|
||||||
|
}
|
||||||
|
totalPages--;
|
||||||
|
return toRemove;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return a serialized version od the model
|
||||||
|
*/
|
||||||
|
public SerializableModel getSerializableModel() {
|
||||||
|
Vector<SerializableSection> serializedsections = new Vector<SerializableSection>();
|
||||||
|
|
||||||
|
for (int i = 1; i <= sections.size(); i++) {
|
||||||
|
//the pages
|
||||||
|
String pageNo = ""+i;
|
||||||
|
if (sections.get(pageNo) != null) {
|
||||||
|
|
||||||
|
TemplateSection singleSection = sections.get(pageNo);
|
||||||
|
List<TemplateComponent> templateElements = singleSection.getAllComponents();
|
||||||
|
List<SerializableComponent> serialazableComponents = new LinkedList<SerializableComponent>();
|
||||||
|
//construct the serialized section
|
||||||
|
SerializableSection aSection = new SerializableSection();
|
||||||
|
//copy the components
|
||||||
|
for (TemplateComponent tc : templateElements)
|
||||||
|
serialazableComponents.add(tc.getSerializable());
|
||||||
|
|
||||||
|
aSection.setComponents(serialazableComponents);
|
||||||
|
aSection.setMetadata(singleSection.getAllMetadata());
|
||||||
|
|
||||||
|
//add the serialized section
|
||||||
|
serializedsections.add(aSection);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
SerializableModel toReturn =
|
||||||
|
new SerializableModel("UniqueID", author, dateCreated, lastEdit, lastEditBy, templateName, columnWidth, currentPage, marginBottom, marginLeft, marginRight, marginTop,
|
||||||
|
pageHeight, pageWidth, serializedsections, totalPages, metadata);
|
||||||
|
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param folderid .
|
||||||
|
* @param name .
|
||||||
|
*/
|
||||||
|
public void saveReport (String folderid, String name) {
|
||||||
|
modelService.saveReport(folderid, name, new AsyncCallback<Void>() {
|
||||||
|
public void onFailure(Throwable caught) {
|
||||||
|
Window.alert("Report Not Saved: " + caught.getMessage());
|
||||||
|
}
|
||||||
|
public void onSuccess(Void result) {
|
||||||
|
Window.alert("Report Saved Successfully");
|
||||||
|
presenter.refreshWorkspace();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void saveReport () {
|
||||||
|
modelService.saveReport(new AsyncCallback<Void>() {
|
||||||
|
public void onFailure(Throwable caught) {
|
||||||
|
MessageBox.alert("Warning","Report Not Saved: " + caught.getMessage(), null);
|
||||||
|
}
|
||||||
|
public void onSuccess(Void result) {
|
||||||
|
MessageBox.alert("Warning","Report Saved Successfully", null);
|
||||||
|
presenter.refreshWorkspace();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* look for the model in the current page and edits its size
|
||||||
|
* @param toResize .
|
||||||
|
* @param newWidth .
|
||||||
|
* @param newHeight .
|
||||||
|
*/
|
||||||
|
public void resizeModelComponent(Widget toResize, int newWidth, int newHeight) {
|
||||||
|
GWT.log("LOOKING CORRESPONDANCE", null);
|
||||||
|
|
||||||
|
String tcPage = ""+currentPage;
|
||||||
|
TemplateSection singleSection = sections.get(tcPage);
|
||||||
|
singleSection.resizeModelComponent(toResize, newWidth, newHeight);
|
||||||
|
|
||||||
|
storeInSession();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param type a
|
||||||
|
* @param templateName a
|
||||||
|
* return a URL which is lookable for on the web
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public String getExportedFileURL(ExportManifestationType type, String templateName) {
|
||||||
|
/**
|
||||||
|
* PDFs will be stored under webapps/usersArea...
|
||||||
|
*/
|
||||||
|
// get e.g. http://dlib28.isti.cnr.it:9090/
|
||||||
|
String host = Window.Location.getProtocol()+"//"+Window.Location.getHost()+"/";
|
||||||
|
String exportedURL = "";
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case DOCX:
|
||||||
|
exportedURL = host + "usersArea/" + presenter.getCurrentScope() + "/templates/"
|
||||||
|
+ presenter.getCurrentUser() + "/EXPORTS/" + templateName + ".docx";
|
||||||
|
break;
|
||||||
|
case PDF:
|
||||||
|
exportedURL = host + "usersArea/" + presenter.getCurrentScope() + "/templates/"
|
||||||
|
+ presenter.getCurrentUser() + "/EXPORTS/" + templateName + ".pdf";
|
||||||
|
break;
|
||||||
|
case HTML:
|
||||||
|
exportedURL = host + "usersArea/" + presenter.getCurrentScope() + "/templates/"
|
||||||
|
+ presenter.getCurrentUser() + "/EXPORTS/" + templateName + ".html";
|
||||||
|
|
||||||
|
}
|
||||||
|
return exportedURL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* stores the current model in the session
|
||||||
|
*/
|
||||||
|
public void storeInSession() {
|
||||||
|
AsyncCallback callback = new AsyncCallback() {
|
||||||
|
public void onFailure(Throwable caught) { }
|
||||||
|
public void onSuccess(Object result) { }
|
||||||
|
};
|
||||||
|
|
||||||
|
SerializableModel modelToSend = getSerializableModel();
|
||||||
|
|
||||||
|
GWT.log("Storing in session: currpage = " + modelToSend.getCurrPage(), null);
|
||||||
|
|
||||||
|
modelService.storeTemplateInSession(modelToSend, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
//****** GETTERS n SETTERS
|
||||||
|
/**
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public int getCurrentPage() {return currentPage;}
|
||||||
|
/**
|
||||||
|
* @param currentPage .
|
||||||
|
*/
|
||||||
|
public void setCurrentPage(int currentPage) {
|
||||||
|
this.currentPage = currentPage;
|
||||||
|
storeInSession();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public int getMarginBottom() {return marginBottom;}
|
||||||
|
/**
|
||||||
|
* @param marginBottom .
|
||||||
|
*/
|
||||||
|
public void setMarginBottom(int marginBottom) {this.marginBottom = marginBottom;}
|
||||||
|
/**
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public int getMarginLeft() {return marginLeft; }
|
||||||
|
/**
|
||||||
|
* @param marginLeft .
|
||||||
|
*/
|
||||||
|
public void setMarginLeft(int marginLeft) {
|
||||||
|
this.marginLeft = marginLeft;
|
||||||
|
this.columnWidth = pageWidth - (marginLeft + marginRight);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public int getMarginRight() {return marginRight;}
|
||||||
|
/**
|
||||||
|
* @param marginRight .
|
||||||
|
*/
|
||||||
|
public void setMarginRight(int marginRight) {
|
||||||
|
this.marginRight = marginRight;
|
||||||
|
this.columnWidth = pageWidth - (marginLeft + marginRight);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public int getMarginTop() {return marginTop;}
|
||||||
|
/**
|
||||||
|
* @param marginTop .
|
||||||
|
*/
|
||||||
|
public void setMarginTop(int marginTop) {this.marginTop = marginTop;}
|
||||||
|
/**
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public int getPageHeight() {return pageHeight; }
|
||||||
|
/**
|
||||||
|
* @param pageHeight .
|
||||||
|
*/
|
||||||
|
public void setPageHeight(int pageHeight) { this.pageHeight = pageHeight;}
|
||||||
|
/**
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public int getPageWidth() { return pageWidth;}
|
||||||
|
/**
|
||||||
|
* @param pageWidth .
|
||||||
|
*/
|
||||||
|
public void setPageWidth(int pageWidth) {
|
||||||
|
this.pageWidth = pageWidth;
|
||||||
|
this.columnWidth = pageWidth - (marginLeft + marginRight);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public String getTemplateName() {return templateName;}
|
||||||
|
/**
|
||||||
|
* @param templateName .
|
||||||
|
*/
|
||||||
|
public void setTemplateName(String templateName) {
|
||||||
|
this.templateName = templateName;
|
||||||
|
storeInSession();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return totalPages .
|
||||||
|
*/
|
||||||
|
public int getTotalPages() {return totalPages; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param totalPages .
|
||||||
|
*/
|
||||||
|
public void setTotalPages(int totalPages) { this.totalPages = totalPages;}
|
||||||
|
/**
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public int getColumnWidth() {return columnWidth;}
|
||||||
|
/**
|
||||||
|
* @param columnWidth .
|
||||||
|
*/
|
||||||
|
public void setColumnWidth(int columnWidth) {this.columnWidth = columnWidth;}
|
||||||
|
/**
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public ReportServiceAsync getModelService() {return modelService;}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* metadata .
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public List<Metadata> getMetadata() {
|
||||||
|
return metadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public String getLastEditBy() {
|
||||||
|
return lastEditBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param lastEditBy .
|
||||||
|
*/
|
||||||
|
public void setLastEditBy(String lastEditBy) {
|
||||||
|
this.lastEditBy = lastEditBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public boolean containsLargeTS() {
|
||||||
|
sections.entrySet();
|
||||||
|
for (Entry entry : sections.entrySet()) {
|
||||||
|
TemplateSection section = (TemplateSection) entry.getValue();
|
||||||
|
for (TemplateComponent tc : section.getAllComponents()) {
|
||||||
|
if (tc.getType() == ComponentType.TIME_SERIES) {
|
||||||
|
SerializableComponent sc = tc.getSerializable();
|
||||||
|
SerializableTimeSeries sts = (SerializableTimeSeries) sc.getPossibleContent();
|
||||||
|
if (sts.getFilter() != null) {
|
||||||
|
int from = sts.getFilter().getFrom();
|
||||||
|
int to = sts.getFilter().getTo();
|
||||||
|
if (to - from > 200)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateWorkflowDocument(boolean update) {
|
||||||
|
modelService.updateWorkflowDocument(update, new AsyncCallback<Void>() {
|
||||||
|
|
||||||
|
public void onFailure(Throwable caught) {
|
||||||
|
Window.alert("failed to update workflow document");
|
||||||
|
|
||||||
|
}
|
||||||
|
public void onSuccess(Void result) {
|
||||||
|
loadWorkflowLibraryApp();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
private String location;
|
||||||
|
/**
|
||||||
|
* Redirect to VRE Deployer Portlet
|
||||||
|
*/
|
||||||
|
private void loadWorkflowLibraryApp(){
|
||||||
|
getUrl();
|
||||||
|
location += "/../my-workflow-documents";
|
||||||
|
Window.open(location, "_self", "");
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Get URL from browser
|
||||||
|
*/
|
||||||
|
public native void getUrl()/*-{
|
||||||
|
this.@org.gcube.portlets.user.reportgenerator.client.model.TemplateModel::location = $wnd.location.href;
|
||||||
|
}-*/;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,254 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.model;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.Metadata;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.events.AddCommentEvent;
|
||||||
|
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The <code> TemplateSection </code> class represents a Template Section that can be associated to any Template
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version October 2009 (1.4)
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class TemplateSection {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* holds the metadata(s) for the sections
|
||||||
|
*/
|
||||||
|
private List<Metadata> metadata;
|
||||||
|
/**
|
||||||
|
* holds the TemplateComponents for the sections
|
||||||
|
*/
|
||||||
|
private List<TemplateComponent> components;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param components
|
||||||
|
* @param metadata
|
||||||
|
*/
|
||||||
|
public TemplateSection() {
|
||||||
|
this.components = new LinkedList<TemplateComponent>();
|
||||||
|
this.metadata = new LinkedList<Metadata>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param components .
|
||||||
|
* @param metadata .
|
||||||
|
*/
|
||||||
|
public TemplateSection(List<TemplateComponent> components, List<Metadata> metadata) {
|
||||||
|
this.components = components;
|
||||||
|
this.metadata = metadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
///*** GETTERS N SETTERS
|
||||||
|
/**
|
||||||
|
* enqueue a component
|
||||||
|
*/
|
||||||
|
public void addComponent(TemplateComponent tc) {
|
||||||
|
if (tc != null)
|
||||||
|
components.add(tc);
|
||||||
|
else {
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean removeComponent(TemplateComponent tc) {
|
||||||
|
if (tc != null)
|
||||||
|
return components.remove(tc);
|
||||||
|
else {
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<String> getSectionComments() {
|
||||||
|
ArrayList<String> toRet = new ArrayList<String>();
|
||||||
|
for (int i = 0; i < components.size(); i++) {
|
||||||
|
TemplateComponent tc = components.get(i);
|
||||||
|
if (tc.getUserComments() != null) {
|
||||||
|
//toRet.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return toRet;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* look for the model in the current page and edits its size
|
||||||
|
* @param toResize .
|
||||||
|
* @param newWidth .
|
||||||
|
* @param newHeight .
|
||||||
|
*/
|
||||||
|
public void resizeModelComponent(Widget toResize, int newWidth, int newHeight) {
|
||||||
|
|
||||||
|
for (int i = 0; i < components.size(); i++) {
|
||||||
|
TemplateComponent tc = components.get(i);
|
||||||
|
|
||||||
|
if (tc.getContent() != null && tc.getContent().equals(toResize)) {
|
||||||
|
GWT.log("FOUND CORRESPONDANCE");
|
||||||
|
tc.setWidth(newWidth);
|
||||||
|
tc.setHeight(newHeight);
|
||||||
|
tc.setContent(toResize);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void discardComments(Widget component) {
|
||||||
|
for (int i = 0; i < components.size(); i++) {
|
||||||
|
TemplateComponent tc = components.get(i);
|
||||||
|
if (tc.getContent() != null && tc.getContent().equals(component)) {
|
||||||
|
//removes previous comment is exists
|
||||||
|
for (Metadata metadata : tc.getAllMetadata()) {
|
||||||
|
if (metadata.getAttribute().equals(TemplateModel.USER_COMMENT)) {
|
||||||
|
tc.getAllMetadata().remove(metadata);
|
||||||
|
GWT.log("FOUND and REMOVED");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (Metadata metadata : tc.getAllMetadata()) {
|
||||||
|
if (metadata.getAttribute().equals(TemplateModel.USER_COMMENT_HEIGHT)) {
|
||||||
|
tc.getAllMetadata().remove(metadata);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* look for the model in the current page and edits its size
|
||||||
|
*/
|
||||||
|
public void addCommentToComponent(Widget component, String comment2Add, int visibleHeight) {
|
||||||
|
|
||||||
|
for (int i = 0; i < components.size(); i++) {
|
||||||
|
TemplateComponent tc = components.get(i);
|
||||||
|
if (tc.getContent() != null && tc.getContent().equals(component)) {
|
||||||
|
//removes previous comment is exists
|
||||||
|
for (Metadata metadata : tc.getAllMetadata()) {
|
||||||
|
if (metadata.getAttribute().equals(TemplateModel.USER_COMMENT)) {
|
||||||
|
tc.getAllMetadata().remove(metadata);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (Metadata metadata : tc.getAllMetadata()) {
|
||||||
|
if (metadata.getAttribute().equals(TemplateModel.USER_COMMENT_HEIGHT)) {
|
||||||
|
tc.getAllMetadata().remove(metadata);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//add the comment
|
||||||
|
tc.addMetadata(TemplateModel.USER_COMMENT, comment2Add);
|
||||||
|
tc.addMetadata(TemplateModel.USER_COMMENT_HEIGHT, ""+visibleHeight);
|
||||||
|
GWT.log("Comment Added: " + comment2Add);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* look if a comment with a specific metadata (that indicate sit is a comment)
|
||||||
|
* exists in the current report model:
|
||||||
|
* @return true if comment is present yet false otherwise
|
||||||
|
*/
|
||||||
|
public boolean hasComments(Widget component) {
|
||||||
|
for (int i = 0; i < components.size(); i++) {
|
||||||
|
TemplateComponent tc = components.get(i);
|
||||||
|
if (tc.getContent() != null && tc.getContent().equals(component)) {
|
||||||
|
for (Metadata metadata : tc.getAllMetadata())
|
||||||
|
if (metadata.getAttribute().equals(TemplateModel.USER_COMMENT)) return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* look if a comment with a specific metadata (that indicate sit is a comment)
|
||||||
|
* exists in the current report model:
|
||||||
|
* @return true if comment is present yet false otherwise
|
||||||
|
*/
|
||||||
|
public AddCommentEvent getComponentComments(Widget component) {
|
||||||
|
String commentText = "";
|
||||||
|
int commentHeight = -1;
|
||||||
|
for (int i = 0; i < components.size(); i++) {
|
||||||
|
TemplateComponent tc = components.get(i);
|
||||||
|
if (tc.getContent() != null && tc.getContent().equals(component)) {
|
||||||
|
for (Metadata metadata : tc.getAllMetadata()) {
|
||||||
|
if (metadata.getAttribute().equals(TemplateModel.USER_COMMENT))
|
||||||
|
commentText = metadata.getValue();
|
||||||
|
if (metadata.getAttribute().equals(TemplateModel.USER_COMMENT_HEIGHT))
|
||||||
|
commentHeight = Integer.parseInt(metadata.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new AddCommentEvent(null, commentText, commentHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* look for the model in the current section and edits its position
|
||||||
|
* @param toRepos .
|
||||||
|
* @param newX .
|
||||||
|
* @param newY .
|
||||||
|
*/
|
||||||
|
public void repositionModelComponent(Widget toRepos, int newX, int newY) {
|
||||||
|
|
||||||
|
for (int i = 0; i < components.size(); i++) {
|
||||||
|
TemplateComponent tc = components.get(i);
|
||||||
|
if (tc.getContent().equals(toRepos)) {
|
||||||
|
GWT.log("FOUND CORRESPONDANCE", null);
|
||||||
|
tc.setX(newX);
|
||||||
|
tc.setY(newY);
|
||||||
|
tc.setContent(toRepos);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param index .
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public TemplateComponent getComponent(int index) {
|
||||||
|
return components.get(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param attr .
|
||||||
|
* @param value .
|
||||||
|
*/
|
||||||
|
public void addMetadata(String attr, String value) {
|
||||||
|
if (attr != null && value != null) {
|
||||||
|
metadata.add(new Metadata(attr, value));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public List<Metadata> getAllMetadata() {
|
||||||
|
if (metadata == null) {
|
||||||
|
new LinkedList<Metadata>();
|
||||||
|
}
|
||||||
|
return metadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public List<TemplateComponent> getAllComponents() {
|
||||||
|
if (components == null) {
|
||||||
|
new TemplateSection();
|
||||||
|
}
|
||||||
|
return components;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.resources;
|
||||||
|
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.resources.client.ClientBundle;
|
||||||
|
import com.google.gwt.resources.client.ImageResource;
|
||||||
|
import com.google.gwt.resources.client.ClientBundle.Source;
|
||||||
|
|
||||||
|
public interface FimesReportTreeStructureResources extends ClientBundle {
|
||||||
|
public static final FimesReportTreeStructureResources INSTANCE = GWT.create(FimesReportTreeStructureResources.class);
|
||||||
|
|
||||||
|
@Source("report.png")
|
||||||
|
ImageResource root();
|
||||||
|
|
||||||
|
@Source("page.png")
|
||||||
|
ImageResource section();
|
||||||
|
|
||||||
|
@Source("text_heading_1.png")
|
||||||
|
ImageResource heading1();
|
||||||
|
|
||||||
|
@Source("text_heading_2.png")
|
||||||
|
ImageResource heading2();
|
||||||
|
|
||||||
|
@Source("text_heading_3.png")
|
||||||
|
ImageResource heading3();
|
||||||
|
|
||||||
|
@Source("text_heading_4.png")
|
||||||
|
ImageResource heading4();
|
||||||
|
|
||||||
|
@Source("text_dropcaps.png")
|
||||||
|
ImageResource text();
|
||||||
|
|
||||||
|
@Source("table.png")
|
||||||
|
ImageResource table();
|
||||||
|
|
||||||
|
@Source("image.png")
|
||||||
|
ImageResource image();
|
||||||
|
|
||||||
|
@Source("information.png")
|
||||||
|
ImageResource instructions();
|
||||||
|
|
||||||
|
@Source("comments.png")
|
||||||
|
ImageResource comments();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
After Width: | Height: | Size: 557 B |
After Width: | Height: | Size: 516 B |
After Width: | Height: | Size: 778 B |
After Width: | Height: | Size: 635 B |
After Width: | Height: | Size: 649 B |
After Width: | Height: | Size: 566 B |
After Width: | Height: | Size: 314 B |
After Width: | Height: | Size: 276 B |
After Width: | Height: | Size: 304 B |
After Width: | Height: | Size: 306 B |
After Width: | Height: | Size: 293 B |
|
@ -0,0 +1,142 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.targets;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.client.ComponentType;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableAttribute;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableAttributeArea;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
|
||||||
|
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.dom.client.Style.Unit;
|
||||||
|
import com.google.gwt.user.client.ui.CheckBox;
|
||||||
|
import com.google.gwt.user.client.ui.Composite;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
|
||||||
|
import com.google.gwt.user.client.ui.HasVerticalAlignment;
|
||||||
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||||
|
/**
|
||||||
|
* <code> AttributeArea </code> class
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version April 2011 (1.0)
|
||||||
|
*/
|
||||||
|
public class AttributeArea extends Composite {
|
||||||
|
|
||||||
|
private HorizontalPanel myPanel;
|
||||||
|
private HTML attrName;
|
||||||
|
private CheckBox[] boxes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Coming form a template constructor
|
||||||
|
*/
|
||||||
|
public AttributeArea(final Presenter presenter, int left, int top, int width, final int height, String textToDisplay) {
|
||||||
|
myPanel = new HorizontalPanel();
|
||||||
|
myPanel.setTitle("Attribute Area");
|
||||||
|
myPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_BOTTOM);
|
||||||
|
myPanel.setPixelSize(width, 20);
|
||||||
|
myPanel.addStyleName("attributeArea");
|
||||||
|
|
||||||
|
attrName = new HTML(getAttributeName(textToDisplay));
|
||||||
|
attrName.getElement().getStyle().setMarginLeft(10, Unit.PX);
|
||||||
|
attrName.getElement().getStyle().setMarginRight(5, Unit.PX);
|
||||||
|
HorizontalPanel boxesPanel = new HorizontalPanel();
|
||||||
|
boxesPanel.add(attrName);
|
||||||
|
myPanel.add(boxesPanel);
|
||||||
|
myPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
|
||||||
|
boxes = getCheckboxes(textToDisplay);
|
||||||
|
for (int i = 0; i < boxes.length; i++) {
|
||||||
|
boxesPanel.add(boxes[i]);
|
||||||
|
}
|
||||||
|
initWidget(myPanel);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Coming form a report constructor
|
||||||
|
*/
|
||||||
|
public AttributeArea(final Presenter presenter, int left, int top, int width, final int height, SerializableAttributeArea sata) {
|
||||||
|
myPanel = new HorizontalPanel();
|
||||||
|
myPanel.setTitle("Attribute Area");
|
||||||
|
myPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_BOTTOM);
|
||||||
|
myPanel.setPixelSize(width, 20);
|
||||||
|
myPanel.addStyleName("attributeArea");
|
||||||
|
|
||||||
|
attrName = new HTML(sata.getAttrName(), true);
|
||||||
|
attrName.getElement().getStyle().setMarginLeft(10, Unit.PX);
|
||||||
|
attrName.getElement().getStyle().setMarginRight(5, Unit.PX);
|
||||||
|
HorizontalPanel boxesPanel = new HorizontalPanel();
|
||||||
|
boxesPanel.add(attrName);
|
||||||
|
myPanel.add(boxesPanel);
|
||||||
|
myPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
|
||||||
|
int values = sata.getValues().size();
|
||||||
|
boxes = new CheckBox[values];
|
||||||
|
int j = 0;
|
||||||
|
for (SerializableAttribute attr: sata.getValues()) {
|
||||||
|
CheckBox toAdd = new CheckBox(attr.getName());
|
||||||
|
toAdd.setStyleName("checkAttribute");
|
||||||
|
toAdd.setValue(attr.getValue());
|
||||||
|
boxes[j] = toAdd;
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
|
||||||
|
//adding it to the panel
|
||||||
|
for (int i = 0; i < boxes.length; i++) {
|
||||||
|
boxesPanel.add(boxes[i]);
|
||||||
|
}
|
||||||
|
initWidget(myPanel);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param toParse
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private String getAttributeName(String toParse) {
|
||||||
|
if (toParse == null)
|
||||||
|
return "";
|
||||||
|
String toReturn = "";
|
||||||
|
try {
|
||||||
|
toReturn = toParse.substring(0, toParse.indexOf(":"));
|
||||||
|
} catch (StringIndexOutOfBoundsException e) {
|
||||||
|
GWT.log("Could not find : returning empty");
|
||||||
|
}
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param toParse
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private CheckBox[] getCheckboxes(String toParse) {
|
||||||
|
String toSplit = toParse.substring(toParse.indexOf(":")+1, toParse.length());
|
||||||
|
String[] values = toSplit.split("\\|");
|
||||||
|
GWT.log("toSplit" + toSplit);
|
||||||
|
GWT.log("values" + values.length);
|
||||||
|
CheckBox[] boxes = new CheckBox[values.length];
|
||||||
|
for (int i = 0; i < values.length; i++) {
|
||||||
|
boxes[i] = new CheckBox();
|
||||||
|
boxes[i].setStyleName("checkAttribute");
|
||||||
|
boxes[i].setText(" " + values[i].trim());
|
||||||
|
}
|
||||||
|
return boxes;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public ComponentType getType() {
|
||||||
|
return ComponentType.ATTRIBUTE;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public CheckBox[] getBoxes() {
|
||||||
|
return boxes;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getAttrName() {
|
||||||
|
return attrName.getText();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,111 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.targets;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.client.ComponentType;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.ReportGenerator;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
|
||||||
|
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.event.dom.client.KeyUpEvent;
|
||||||
|
import com.google.gwt.event.dom.client.KeyUpHandler;
|
||||||
|
import com.google.gwt.event.dom.client.MouseOutEvent;
|
||||||
|
import com.google.gwt.event.dom.client.MouseOutHandler;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.HasVerticalAlignment;
|
||||||
|
import com.google.gwt.user.client.ui.TextArea;
|
||||||
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
/**
|
||||||
|
* <code> BasicTextArea </code>
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version July 2011 (3.0)
|
||||||
|
*/
|
||||||
|
public class BasicTextArea extends ReportTextArea {
|
||||||
|
private TextArea textArea = new TextArea();
|
||||||
|
private VerticalPanel myPanel;
|
||||||
|
private Presenter presenter;
|
||||||
|
|
||||||
|
int currHeight = 0;
|
||||||
|
|
||||||
|
|
||||||
|
public BasicTextArea(ComponentType type, final Presenter presenter, int left, int top, int width, final int height, boolean hasComments) {
|
||||||
|
super(type, presenter, left, top, width, height, hasComments);
|
||||||
|
this.presenter = presenter;
|
||||||
|
myPanel = getResizablePanel();
|
||||||
|
|
||||||
|
textArea.setPixelSize(width, height);
|
||||||
|
|
||||||
|
textArea.addMouseOutHandler(new MouseOutHandler() {
|
||||||
|
|
||||||
|
public void onMouseOut(MouseOutEvent event) {
|
||||||
|
presenter.storeChangeInSession((Widget) event.getSource());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
switch (type) {
|
||||||
|
case TITLE:
|
||||||
|
textArea.setStyleName("titleArea");
|
||||||
|
myPanel.setTitle("Title");
|
||||||
|
break;
|
||||||
|
case HEADING_1:
|
||||||
|
textArea.setStyleName("headgin1Area");
|
||||||
|
myPanel.setTitle("Heading: Level 1");
|
||||||
|
break;
|
||||||
|
case HEADING_2:
|
||||||
|
textArea.setStyleName("headgin2Area");
|
||||||
|
myPanel.setTitle("Heading Level 2");
|
||||||
|
break;
|
||||||
|
case HEADING_3:
|
||||||
|
textArea.setStyleName("headgin3Area");
|
||||||
|
myPanel.setTitle("Heading: Level 3");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
myPanel.add(textArea);
|
||||||
|
myPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_BOTTOM);
|
||||||
|
myPanel.setPixelSize(width, height);
|
||||||
|
|
||||||
|
textArea.addMouseOutHandler(new MouseOutHandler() {
|
||||||
|
|
||||||
|
public void onMouseOut(MouseOutEvent event) {
|
||||||
|
presenter.storeChangeInSession((Widget) event.getSource());
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
textArea.addKeyUpHandler(new KeyUpHandler() {
|
||||||
|
|
||||||
|
public void onKeyUp(KeyUpEvent event) {
|
||||||
|
HTML div = ReportGenerator.get().getDivHidden();
|
||||||
|
GWT.log("element.getHTML():\n" + textArea.getText(), null);
|
||||||
|
div.setHTML(textArea.getText());
|
||||||
|
int newHeight = div.getOffsetHeight();
|
||||||
|
if (newHeight > height-10 && newHeight != currHeight) {
|
||||||
|
resizeMe(myPanel.getOffsetWidth(), newHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* resize the panel
|
||||||
|
* @param w
|
||||||
|
* @param h
|
||||||
|
*/
|
||||||
|
private void resizeMe(int w, int h) {
|
||||||
|
resizePanel(w, h);
|
||||||
|
//Window.alert("myInstance.top: " + myInstance.top);
|
||||||
|
presenter.resizeTemplateComponentInModel(this, myPanel.getOffsetWidth(), h+5);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
return textArea.getText();
|
||||||
|
}
|
||||||
|
public void setText(String text) {
|
||||||
|
textArea.setText(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.targets;
|
||||||
|
|
||||||
|
public class Coords {
|
||||||
|
|
||||||
|
private int X;
|
||||||
|
private int Y;
|
||||||
|
public Coords(int x, int y) {
|
||||||
|
super();
|
||||||
|
X = x;
|
||||||
|
Y = y;
|
||||||
|
}
|
||||||
|
public int getX() {
|
||||||
|
return X;
|
||||||
|
}
|
||||||
|
public void setX(int x) {
|
||||||
|
X = x;
|
||||||
|
}
|
||||||
|
public int getY() {
|
||||||
|
return Y;
|
||||||
|
}
|
||||||
|
public void setY(int y) {
|
||||||
|
Y = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,227 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.targets;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.client.ComponentType;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.ReportGenerator;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
|
||||||
|
|
||||||
|
import com.extjs.gxt.ui.client.widget.MessageBox;
|
||||||
|
import com.google.gwt.event.dom.client.KeyDownEvent;
|
||||||
|
import com.google.gwt.event.dom.client.KeyDownHandler;
|
||||||
|
import com.google.gwt.event.dom.client.KeyUpEvent;
|
||||||
|
import com.google.gwt.event.dom.client.KeyUpHandler;
|
||||||
|
import com.google.gwt.event.dom.client.MouseDownEvent;
|
||||||
|
import com.google.gwt.event.dom.client.MouseDownHandler;
|
||||||
|
import com.google.gwt.event.dom.client.MouseOutEvent;
|
||||||
|
import com.google.gwt.event.dom.client.MouseOutHandler;
|
||||||
|
import com.google.gwt.user.client.Event;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.HasVerticalAlignment;
|
||||||
|
import com.google.gwt.user.client.ui.RichTextArea;
|
||||||
|
import com.google.gwt.user.client.ui.TextArea;
|
||||||
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code> D4sRichTextArea </code> class is a template component that goes into the workspace
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version October 2008 (0.2)
|
||||||
|
*/
|
||||||
|
public class D4sRichTextarea extends ReportTextArea {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the text area
|
||||||
|
*/
|
||||||
|
private RichTextArea area = new RichTextArea();
|
||||||
|
|
||||||
|
|
||||||
|
TextArea text = new TextArea();
|
||||||
|
/**
|
||||||
|
* a flag
|
||||||
|
*/
|
||||||
|
boolean firstClick = true;
|
||||||
|
|
||||||
|
int currHeight = 0;
|
||||||
|
|
||||||
|
VerticalPanel myPanel;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public D4sRichTextarea() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param presenter .
|
||||||
|
* @param left left
|
||||||
|
* @param top top
|
||||||
|
* @param width .
|
||||||
|
* @param height .
|
||||||
|
* @param type .
|
||||||
|
*/
|
||||||
|
public D4sRichTextarea(ComponentType type, final Presenter presenter, int left, int top, int width, final int height, boolean hasComments) {
|
||||||
|
super(type, presenter, left, top, width, height, hasComments);
|
||||||
|
currHeight = height;
|
||||||
|
myPanel = getResizablePanel();
|
||||||
|
|
||||||
|
area.setPixelSize(width-6, height-2);
|
||||||
|
area.setStyleName("d4sRichTextArea");
|
||||||
|
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case TITLE:
|
||||||
|
area.addStyleName("");
|
||||||
|
break;
|
||||||
|
case HEADING_1:
|
||||||
|
area.addStyleName("");
|
||||||
|
break;
|
||||||
|
case HEADING_2:
|
||||||
|
area.addStyleName("");
|
||||||
|
break;
|
||||||
|
case HEADING_3:
|
||||||
|
area.addStyleName("");
|
||||||
|
break;
|
||||||
|
case BODY:
|
||||||
|
area.addStyleName("bodyArea");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
myPanel.add(area);
|
||||||
|
//repositionMyPanel(0, 15);
|
||||||
|
myPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_BOTTOM);
|
||||||
|
myPanel.setPixelSize(width, height-15);
|
||||||
|
setStyleName("d4sFrame");
|
||||||
|
|
||||||
|
area.addMouseDownHandler(new MouseDownHandler() {
|
||||||
|
public void onMouseDown(MouseDownEvent event) {
|
||||||
|
if (event.getNativeButton() == Event.BUTTON_RIGHT) {
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
MessageBox.alert("Warning","Please, use CTRL+V (CMD+V) for pasting into this area", null);
|
||||||
|
}
|
||||||
|
if (firstClick) {
|
||||||
|
presenter.enableTextToolBar(area);
|
||||||
|
presenter.enableBiblioEntry(area);
|
||||||
|
firstClick = false;
|
||||||
|
ReportGenerator.get().getDivHidden().setPixelSize(area.getOffsetWidth(), -1);
|
||||||
|
}
|
||||||
|
HTML div = ReportGenerator.get().getDivHidden();
|
||||||
|
div.setHTML(area.getHTML());
|
||||||
|
int newHeight = div.getOffsetHeight()+20 ;
|
||||||
|
if (newHeight > height-10 && newHeight != currHeight) {
|
||||||
|
presenter.shiftComponentsByTextArea(myInstance.top, newHeight - currHeight);
|
||||||
|
resizePanel(myPanel.getOffsetWidth(), div.getOffsetHeight());
|
||||||
|
//Window.alert("myInstance.top: " + myInstance.top);
|
||||||
|
presenter.resizeTemplateComponentInModel(myInstance, myPanel.getOffsetWidth(), newHeight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
area.addMouseOutHandler(new MouseOutHandler() {
|
||||||
|
public void onMouseOut(MouseOutEvent event) {
|
||||||
|
firstClick = true;
|
||||||
|
presenter.storeChangeInSession((Widget) event.getSource());
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
//TODO: aggiorna
|
||||||
|
// area.addKeyDownHandler(new KeyDownHandler() {
|
||||||
|
// public void onKeyDown(KeyDownEvent event) {
|
||||||
|
//// if (event.isAnyModifierKeyDown() && event.getNativeKeyCode() == 86) { //event.getNativeKeyCode() == 86 is the V (to avoid ctrl V or cmd V)
|
||||||
|
//// MessageBox.show(new MessageBoxConfig() {
|
||||||
|
//// {
|
||||||
|
//// setTitle("Paste operation");
|
||||||
|
//// setMsg("Please enter your text here (PLAIN)");
|
||||||
|
//// setWidth(500);
|
||||||
|
//// setButtons(MessageBox.OKCANCEL);
|
||||||
|
//// setMultiline(true);
|
||||||
|
//// setCallback(new MessageBox.PromptCallback() {
|
||||||
|
//// public void execute(String btnID, String text) {
|
||||||
|
//// if (btnID.compareTo("ok") == 0) {
|
||||||
|
//// area.setText(text);
|
||||||
|
////
|
||||||
|
//// //resize if needed
|
||||||
|
//// HTML div = ReportGenerator.get().getDivHidden();
|
||||||
|
//// //GWT.log("element.getHTML():\n" + area.getHTML(), null);
|
||||||
|
//// div.setHTML(area.getHTML());
|
||||||
|
//// int newHeight = div.getOffsetHeight()+20 ;
|
||||||
|
//// if (newHeight > height-10 && newHeight != currHeight) {
|
||||||
|
//// resizePanel(myPanel.getOffsetWidth(), div.getOffsetHeight());
|
||||||
|
//// }
|
||||||
|
//// }
|
||||||
|
////
|
||||||
|
//// }
|
||||||
|
//// });
|
||||||
|
//// }
|
||||||
|
//// });
|
||||||
|
// event.stopPropagation();
|
||||||
|
// event.preventDefault();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
area.addKeyUpHandler(new KeyUpHandler() {
|
||||||
|
public void onKeyUp(KeyUpEvent event) {
|
||||||
|
HTML div = ReportGenerator.get().getDivHidden();
|
||||||
|
div.setHTML(area.getHTML());
|
||||||
|
int newHeight = div.getOffsetHeight()+20 ;
|
||||||
|
if (newHeight > height-10 && newHeight != currHeight) {
|
||||||
|
presenter.shiftComponentsByTextArea(myInstance.top, newHeight - currHeight);
|
||||||
|
resizePanel(myPanel.getOffsetWidth(), div.getOffsetHeight());
|
||||||
|
//Window.alert("myInstance.top: " + myInstance.top);
|
||||||
|
presenter.resizeTemplateComponentInModel(myInstance, myPanel.getOffsetWidth(), newHeight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* used to resize the panel
|
||||||
|
* @param width w
|
||||||
|
* @param height h
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void resizePanel(int width, int height) {
|
||||||
|
if (height > 15 && width > 15) {
|
||||||
|
mainPanel.setPixelSize(width, height+20);
|
||||||
|
resizablePanel.setPixelSize(width, height+20);
|
||||||
|
mainPanel.setWidgetPosition(topPanel, width-30 , 0);
|
||||||
|
area.setPixelSize(width-4, height+20);
|
||||||
|
currHeight = height + 20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public String getHTML() {
|
||||||
|
return area.getHTML();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param html the html
|
||||||
|
*/
|
||||||
|
public void setHTML(String html) {
|
||||||
|
area.setHTML(html);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public RichTextArea getArea() {
|
||||||
|
return area;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param firstClick .
|
||||||
|
*/
|
||||||
|
public void setFirstClick(boolean firstClick) {
|
||||||
|
this.firstClick = firstClick;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.targets;
|
||||||
|
|
||||||
|
import com.google.gwt.user.client.ui.Composite;
|
||||||
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code> DoubleColumnPanel </code> class is a Widget that places to widget in the same y
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version October 2009 (1.4)
|
||||||
|
*/
|
||||||
|
public class DoubleColumnPanel extends Composite {
|
||||||
|
|
||||||
|
private Widget left;
|
||||||
|
private Widget right;
|
||||||
|
|
||||||
|
private HorizontalPanel mainPanel = new HorizontalPanel();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param left .
|
||||||
|
* @param right .
|
||||||
|
*/
|
||||||
|
public DoubleColumnPanel(Widget left, Widget right) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
this.left = left;
|
||||||
|
this.right = right;
|
||||||
|
|
||||||
|
mainPanel.add(left);
|
||||||
|
mainPanel.add(right);
|
||||||
|
mainPanel.setWidth("800");
|
||||||
|
initWidget(mainPanel);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,122 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.targets;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.workspace.client.interfaces.GXTFolderItemTypeEnum;
|
||||||
|
import org.gcube.portlets.user.workspace.client.model.FileModel;
|
||||||
|
import org.gcube.portlets.user.workspace.client.workspace.GWTWorkspaceItem;
|
||||||
|
import org.gcube.portlets.user.workspace.client.workspace.GWTWorkspaceItemType;
|
||||||
|
import org.gcube.portlets.user.workspace.client.workspace.folder.GWTFolderItem;
|
||||||
|
import org.gcube.portlets.user.workspace.client.workspace.folder.GWTFolderItemType;
|
||||||
|
import org.gcube.portlets.user.workspace.client.workspace.folder.item.GWTExternalImage;
|
||||||
|
import org.gcube.portlets.user.workspace.client.workspace.folder.item.gcube.GWTImageDocument;
|
||||||
|
|
||||||
|
import com.extjs.gxt.ui.client.dnd.DropTarget;
|
||||||
|
import com.extjs.gxt.ui.client.dnd.Insert;
|
||||||
|
import com.extjs.gxt.ui.client.dnd.DND.Operation;
|
||||||
|
import com.extjs.gxt.ui.client.event.DNDEvent;
|
||||||
|
import com.extjs.gxt.ui.client.store.TreeStoreModel;
|
||||||
|
import com.extjs.gxt.ui.client.widget.Html;
|
||||||
|
import com.extjs.gxt.ui.client.widget.treepanel.TreePanel;
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Massimiliano Assante assante@isti.cnr.it
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class DropImageListener extends DropTarget {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static final String TIFF = "image/tiff";
|
||||||
|
|
||||||
|
protected DroppingArea panel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param panel .
|
||||||
|
* @param config .
|
||||||
|
*/
|
||||||
|
public DropImageListener(DroppingArea panel) {
|
||||||
|
super(panel);
|
||||||
|
this.panel = panel;
|
||||||
|
//IMPORTANT
|
||||||
|
setOperation(Operation.COPY);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected void showFeedback(DNDEvent event) {
|
||||||
|
if (!isValidDropTarget(event)) {
|
||||||
|
Insert.get().hide();
|
||||||
|
event.getStatus().setStatus(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
super.showFeedback(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private boolean isValidDropTarget(DNDEvent event) {
|
||||||
|
GWT.log("isValidDropTarget");
|
||||||
|
TreePanel<FileModel> source = (TreePanel<FileModel>) event.getDragSource().getComponent();
|
||||||
|
List<FileModel> selection = source.getSelectionModel().getSelection();
|
||||||
|
|
||||||
|
for (FileModel model : selection) {
|
||||||
|
GWT.log("selection: " + model.getGXTFolderItemType());
|
||||||
|
if(model.getGXTFolderItemType()!=null){
|
||||||
|
|
||||||
|
if (model.getGXTFolderItemType().equals(GXTFolderItemTypeEnum.EXTERNAL_IMAGE) || model.getGXTFolderItemType().equals(GXTFolderItemTypeEnum.IMAGE_DOCUMENT))
|
||||||
|
return true;
|
||||||
|
//
|
||||||
|
// if (model.getGXTFolderItemType().equals(GXTFolderItemTypeEnum.TIME_SERIES))
|
||||||
|
// return true;
|
||||||
|
|
||||||
|
// if(source.getStore().getParent(model) == target.getModel())
|
||||||
|
// return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param source .
|
||||||
|
* @param e .
|
||||||
|
* @param data .
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
protected void onDragDrop(DNDEvent event) {
|
||||||
|
|
||||||
|
super.onDragDrop(event);
|
||||||
|
|
||||||
|
if(event.getData() != null){
|
||||||
|
List<TreeStoreModel> listItemsSource = event.getData();
|
||||||
|
GWT.log("Number of move " + listItemsSource.size());
|
||||||
|
|
||||||
|
FileModel sourceFileModel = null; //for print
|
||||||
|
|
||||||
|
for(TreeStoreModel itemSource : listItemsSource){
|
||||||
|
|
||||||
|
sourceFileModel = (FileModel) itemSource.getModel();
|
||||||
|
|
||||||
|
if(sourceFileModel.getParentFileModel()!=null)
|
||||||
|
GWT.log("Source Name " + sourceFileModel.getName() + " id " + sourceFileModel.getIdentifier() + " end drag " + " Parent Name: " + sourceFileModel.getParentFileModel().getName() + "id " + sourceFileModel.getParentFileModel().getIdentifier());
|
||||||
|
else
|
||||||
|
GWT.log("Source Name " + sourceFileModel.getName() + " id " + sourceFileModel.getIdentifier() + " end drag ");
|
||||||
|
|
||||||
|
GWT.log("Child count: " + itemSource.getChildCount());
|
||||||
|
|
||||||
|
panel.fetchImage(sourceFileModel.getIdentifier(), false , true);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,115 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.targets;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.workspace.client.interfaces.GXTFolderItemTypeEnum;
|
||||||
|
import org.gcube.portlets.user.workspace.client.model.FileModel;
|
||||||
|
|
||||||
|
import com.extjs.gxt.ui.client.dnd.DND.Operation;
|
||||||
|
import com.extjs.gxt.ui.client.dnd.DropTarget;
|
||||||
|
import com.extjs.gxt.ui.client.dnd.Insert;
|
||||||
|
import com.extjs.gxt.ui.client.event.DNDEvent;
|
||||||
|
import com.extjs.gxt.ui.client.store.TreeStoreModel;
|
||||||
|
import com.extjs.gxt.ui.client.widget.treepanel.TreePanel;
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Federico De Faveri defaveri@isti.cnr.it
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class DropTSListener extends DropTarget {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static final String NO_DROP = "x-dd-drop-nodrop";
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static final String OK_DROP = "x-dd-drop-ok";
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static final String OK_DROP_ADD = "x-dd-drop-ok-add";
|
||||||
|
|
||||||
|
protected TSArea panel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param panel .
|
||||||
|
* @param config .
|
||||||
|
*/
|
||||||
|
public DropTSListener(TSArea panel) {
|
||||||
|
super(panel);
|
||||||
|
this.panel = panel;
|
||||||
|
//IMPORTANT
|
||||||
|
setOperation(Operation.COPY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void showFeedback(DNDEvent event) {
|
||||||
|
if (!isValidDropTarget(event)) {
|
||||||
|
Insert.get().hide();
|
||||||
|
event.getStatus().setStatus(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
super.showFeedback(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private boolean isValidDropTarget(DNDEvent event) {
|
||||||
|
GWT.log("isValidDropTarget");
|
||||||
|
TreePanel<FileModel> source = (TreePanel<FileModel>) event.getDragSource().getComponent();
|
||||||
|
List<FileModel> selection = source.getSelectionModel().getSelection();
|
||||||
|
|
||||||
|
for (FileModel model : selection) {
|
||||||
|
GWT.log("selection: " + model.getGXTFolderItemType());
|
||||||
|
if(model.getGXTFolderItemType()!=null){
|
||||||
|
if (model.getGXTFolderItemType().equals(GXTFolderItemTypeEnum.TIME_SERIES))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param source .
|
||||||
|
* @param e .
|
||||||
|
* @param data .
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
protected void onDragDrop(DNDEvent event) {
|
||||||
|
|
||||||
|
super.onDragDrop(event);
|
||||||
|
|
||||||
|
if(event.getData() != null){
|
||||||
|
List<TreeStoreModel> listItemsSource = event.getData();
|
||||||
|
GWT.log("Number of move " + listItemsSource.size());
|
||||||
|
|
||||||
|
FileModel sourceFileModel = null; //for print
|
||||||
|
|
||||||
|
for(TreeStoreModel itemSource : listItemsSource){
|
||||||
|
|
||||||
|
sourceFileModel = (FileModel) itemSource.getModel();
|
||||||
|
|
||||||
|
if(sourceFileModel.getParentFileModel()!=null)
|
||||||
|
GWT.log("Source Name " + sourceFileModel.getName() + " id " + sourceFileModel.getIdentifier() + " end drag " + " Parent Name: " + sourceFileModel.getParentFileModel().getName() + "id " + sourceFileModel.getParentFileModel().getIdentifier());
|
||||||
|
else
|
||||||
|
GWT.log("Source Name " + sourceFileModel.getName() + " id " + sourceFileModel.getIdentifier() + " end drag ");
|
||||||
|
|
||||||
|
GWT.log("Child count: " + itemSource.getChildCount());
|
||||||
|
|
||||||
|
panel.fetchTS(sourceFileModel.getIdentifier(), false , true);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,214 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.targets;
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.ReportGenerator;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
|
||||||
|
import org.gcube.portlets.user.workspace.client.workspace.GWTWorkspaceItem;
|
||||||
|
import org.gcube.portlets.user.workspace.client.workspace.folder.item.GWTExternalImage;
|
||||||
|
|
||||||
|
import com.extjs.gxt.ui.client.widget.Component;
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.user.client.Window;
|
||||||
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||||
|
import com.google.gwt.user.client.ui.Composite;
|
||||||
|
import com.google.gwt.user.client.ui.HasAlignment;
|
||||||
|
import com.google.gwt.user.client.ui.HasVerticalAlignment;
|
||||||
|
import com.google.gwt.user.client.ui.Image;
|
||||||
|
import com.google.gwt.user.client.ui.Label;
|
||||||
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code> DroppingArea </code> class is a Widget you can drop image on
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version May 20012 (3.5)
|
||||||
|
*/
|
||||||
|
public class DroppingArea extends Component {
|
||||||
|
|
||||||
|
private String expectedContent = "";
|
||||||
|
|
||||||
|
private VerticalPanel mainPanel;
|
||||||
|
private Image droppedImage;
|
||||||
|
private Presenter presenter;
|
||||||
|
|
||||||
|
private String idInBasket;
|
||||||
|
|
||||||
|
private String currentUser;
|
||||||
|
private String currentScope;
|
||||||
|
|
||||||
|
Label label;
|
||||||
|
|
||||||
|
private int width, height;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param presenter .
|
||||||
|
* @param width .
|
||||||
|
* @param height .
|
||||||
|
* @param tag the label to display
|
||||||
|
*/
|
||||||
|
public DroppingArea(Presenter presenter, int width, int height, String tag) {
|
||||||
|
if (tag.equals("")) {
|
||||||
|
tag = "No suggestions available";
|
||||||
|
}
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
|
this.presenter = presenter;
|
||||||
|
mainPanel = new VerticalPanel();
|
||||||
|
super.setWidth(width+"px");
|
||||||
|
super.setHeight(height+"px");
|
||||||
|
mainPanel.setWidth(width+"px");
|
||||||
|
mainPanel.setHeight(height+"px");
|
||||||
|
setElement(mainPanel.getElement());
|
||||||
|
|
||||||
|
addStyleName("droppingArea-Image");
|
||||||
|
|
||||||
|
mainPanel.setHorizontalAlignment(HasAlignment.ALIGN_CENTER);
|
||||||
|
mainPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
|
||||||
|
|
||||||
|
label = new Label(tag);
|
||||||
|
label.addStyleName("label");
|
||||||
|
mainPanel.add(label);
|
||||||
|
|
||||||
|
droppedImage = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void add(Widget w) {
|
||||||
|
mainPanel.add(w);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* called when dropped an image on the area
|
||||||
|
* @param toShow the image to show
|
||||||
|
*/
|
||||||
|
public void showImage(Image toShow) {
|
||||||
|
|
||||||
|
//mainPanel.remove(label);
|
||||||
|
mainPanel.clear();
|
||||||
|
this.droppedImage = toShow;
|
||||||
|
toShow.setPixelSize(width, height);
|
||||||
|
|
||||||
|
mainPanel.add(toShow);
|
||||||
|
presenter.storeChangeInSession(this);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param url .
|
||||||
|
* @param id the id in the folder
|
||||||
|
*/
|
||||||
|
public void dropImage(String url, String id)
|
||||||
|
{
|
||||||
|
GWT.log("URL:" + url, null);
|
||||||
|
idInBasket = id;
|
||||||
|
showImage(new Image(url));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void fetchImage(String identifier, boolean isInteralImage, boolean fullDetails) {
|
||||||
|
this.mask("fetching image, pleas wait", "loading-indicator");
|
||||||
|
ReportGenerator.get().getWSTreeService().getImageById(identifier, isInteralImage, fullDetails, new AsyncCallback<GWTWorkspaceItem>() {
|
||||||
|
|
||||||
|
public void onSuccess(GWTWorkspaceItem result) {
|
||||||
|
unmask();
|
||||||
|
GWTExternalImage image = (GWTExternalImage) result;
|
||||||
|
dropImage(image.getImageUrl(), image.getId());
|
||||||
|
}
|
||||||
|
public void onFailure(Throwable caught) {
|
||||||
|
unmask();
|
||||||
|
Window.alert("Could not fetch image from infrastructure " + caught.getCause());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return the image
|
||||||
|
*/
|
||||||
|
public Image getDroppedImage() {
|
||||||
|
if (droppedImage == null)
|
||||||
|
return new Image();
|
||||||
|
return droppedImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return the possible content
|
||||||
|
*/
|
||||||
|
public Label getLabel() {
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param label set the label
|
||||||
|
*/
|
||||||
|
public void setLabel(Label label) {
|
||||||
|
this.label = label;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return a URL which is lookable for on the web
|
||||||
|
* @param imageName .
|
||||||
|
* @param templateName .
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public String getImageURL(String imageName, String templateName) {
|
||||||
|
currentUser = presenter.getCurrentUser();
|
||||||
|
currentScope = presenter.getCurrentScope();
|
||||||
|
/**
|
||||||
|
* Images will be stored under webapps/usersArea...
|
||||||
|
* GWT.getModuleBaseURL() returns * e.g. http://dlib28.isti.cnr.it/templatecreator/html/
|
||||||
|
* need to get just http://dlib28.isti.cnr.it/
|
||||||
|
*/
|
||||||
|
//remove "/html/" and get e.g. http://dlib28.isti.cnr.it/templatecreator
|
||||||
|
String host = GWT.getModuleBaseURL().substring(0, GWT.getModuleBaseURL().length()-6);
|
||||||
|
|
||||||
|
//loog for last slash
|
||||||
|
int lastSlash = host.lastIndexOf("/");
|
||||||
|
|
||||||
|
//get what i need : e.g. http://dlib28.isti.cnr.it/ or host = "http://localhost:8080/";
|
||||||
|
host = host.substring(0, lastSlash +1 );
|
||||||
|
//host = "http://localhost:8080/";
|
||||||
|
|
||||||
|
String imgURL = host + "usersArea/" + currentScope + "/templates/"
|
||||||
|
+ currentUser + "/CURRENT_OPEN/images/" + imageName;
|
||||||
|
|
||||||
|
return imgURL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public String getIdInBasket() {
|
||||||
|
return idInBasket;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param idInBasket .
|
||||||
|
*/
|
||||||
|
public void setIdInBasket(String idInBasket) {
|
||||||
|
this.idInBasket = idInBasket;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return expectedContent
|
||||||
|
*/
|
||||||
|
public String getExpectedContent() {
|
||||||
|
return expectedContent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param expectedContent .
|
||||||
|
*/
|
||||||
|
public void setExpectedContent(String expectedContent) {
|
||||||
|
this.expectedContent = expectedContent;
|
||||||
|
if (expectedContent.compareTo("") != 0)
|
||||||
|
label.setText(expectedContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,158 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.targets;
|
||||||
|
|
||||||
|
import com.google.gwt.user.client.ui.TextArea;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author massi
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class GenTableCell extends TextArea {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private int cellWidth;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private int cellHeight;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private int rowindex;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private int colindex;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private int colspan;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
boolean selected = false;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param rowindex
|
||||||
|
* @param colindex
|
||||||
|
*/
|
||||||
|
public GenTableCell() {
|
||||||
|
super();
|
||||||
|
this.rowindex = 0;
|
||||||
|
this.colindex = 0;
|
||||||
|
this.colspan = 1;
|
||||||
|
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param rowindex
|
||||||
|
* @param colindex
|
||||||
|
*/
|
||||||
|
public GenTableCell(int rowindex, int colindex, int cellWidth, int colspan) {
|
||||||
|
super();
|
||||||
|
this.rowindex = rowindex;
|
||||||
|
this.colindex = colindex;
|
||||||
|
this.colspan = colspan;
|
||||||
|
this.cellWidth = cellWidth;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int getWidth() {
|
||||||
|
return cellWidth;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param width
|
||||||
|
*/
|
||||||
|
public void setWidth(int width) {
|
||||||
|
this.cellWidth = width;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int getHeight() {
|
||||||
|
return cellHeight;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param height
|
||||||
|
*/
|
||||||
|
public void setHeight(int height) {
|
||||||
|
this.cellHeight = height;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int getRowindex() {
|
||||||
|
return rowindex;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param rowindex
|
||||||
|
*/
|
||||||
|
public void setRowindex(int rowindex) {
|
||||||
|
this.rowindex = rowindex;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int getColindex() {
|
||||||
|
return colindex;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param colindex
|
||||||
|
*/
|
||||||
|
public void setColindex(int colindex) {
|
||||||
|
this.colindex = colindex;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean isSelected() {
|
||||||
|
return selected;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param selected
|
||||||
|
*/
|
||||||
|
public void setSelected(boolean selected) {
|
||||||
|
this.selected = selected;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int getColspan() {
|
||||||
|
return colspan;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param colspan
|
||||||
|
*/
|
||||||
|
public void setColspan(int colspan) {
|
||||||
|
this.colspan = colspan;
|
||||||
|
}
|
||||||
|
public int getCellWidth() {
|
||||||
|
return cellWidth;
|
||||||
|
}
|
||||||
|
public void setCellWidth(int cellWidth) {
|
||||||
|
this.cellWidth = cellWidth;
|
||||||
|
}
|
||||||
|
public int getCellHeight() {
|
||||||
|
return cellHeight;
|
||||||
|
}
|
||||||
|
public void setCellHeight(int cellHeight) {
|
||||||
|
this.cellHeight = cellHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,145 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.targets;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableTable;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.TableCell;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
|
||||||
|
|
||||||
|
import com.google.gwt.user.client.ui.Button;
|
||||||
|
import com.google.gwt.user.client.ui.Composite;
|
||||||
|
import com.google.gwt.user.client.ui.FlexTable;
|
||||||
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante ISTI-CNR
|
||||||
|
* @version 1.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class GenericTable extends Composite {
|
||||||
|
private VerticalPanel myPanel;
|
||||||
|
private FlexTable myTable;
|
||||||
|
|
||||||
|
Presenter presenter;
|
||||||
|
|
||||||
|
private int rows;
|
||||||
|
private int cols;
|
||||||
|
|
||||||
|
private int cellWidth;
|
||||||
|
private int cellSpacing = 1;
|
||||||
|
private int cellPadding = 0;
|
||||||
|
|
||||||
|
private GenTableCell selectedCell = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor called when reading the model
|
||||||
|
* @param sTable
|
||||||
|
*/
|
||||||
|
public GenericTable(SerializableTable sTable, Presenter presenter, int top, int left, int width, int height) {
|
||||||
|
|
||||||
|
commonConstructorCode(presenter);
|
||||||
|
this.rows = sTable.getRowCount();
|
||||||
|
this.cols = sTable.getColsNo();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* construct the table
|
||||||
|
*/
|
||||||
|
for (int i = 0; i < rows; i++) {
|
||||||
|
for (int j = 0; j < sTable.getCellCount(i); j++) {
|
||||||
|
TableCell toPut = sTable.getValue(i, j);
|
||||||
|
int cellWidth = toPut.getCellWidth();
|
||||||
|
int cellHeight = toPut.getCellHeight();
|
||||||
|
int colspan = toPut.getColspan();
|
||||||
|
GenTableCell toAdd = new GenTableCell(i, j, cellWidth, colspan);
|
||||||
|
toAdd.setText(toPut.getContent());
|
||||||
|
toAdd.setStyleName("tableBorder");
|
||||||
|
toAdd.setWidth(""+cellWidth+"px");
|
||||||
|
myTable.setWidget(i, j, toAdd);
|
||||||
|
myTable.getFlexCellFormatter().setColSpan(i, j, colspan);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
myPanel = new VerticalPanel();
|
||||||
|
myPanel.setWidth(width+"px");
|
||||||
|
myPanel.setStyleName("d4sFrame");
|
||||||
|
myPanel.add(myTable);
|
||||||
|
initWidget(myPanel);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* common Constructors Code
|
||||||
|
*/
|
||||||
|
private void commonConstructorCode(Presenter presenter) {
|
||||||
|
this.presenter = presenter;
|
||||||
|
myTable= new FlexTable();
|
||||||
|
myTable.setWidth("90%");
|
||||||
|
myTable.setCellSpacing(cellSpacing);
|
||||||
|
myTable.setCellPadding(cellPadding);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public FlexTable getMyTable() {
|
||||||
|
return myTable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMyTable(FlexTable myTable) {
|
||||||
|
this.myTable = myTable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRowsNo() {
|
||||||
|
return rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRows(int rows) {
|
||||||
|
this.rows = rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCols() {
|
||||||
|
return cols;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCols(int cols) {
|
||||||
|
this.cols = cols;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public SerializableTable getSerializable() {
|
||||||
|
SerializableTable toReturn = new SerializableTable(this.cols);
|
||||||
|
for (int i = 0; i < myTable.getRowCount(); i++) {
|
||||||
|
toReturn.addRow(getRow(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<TableCell> getRow(int i) {
|
||||||
|
ArrayList<TableCell> toReturn = new ArrayList<TableCell>();
|
||||||
|
for (int j = 0; j < myTable.getCellCount(i); j++) {
|
||||||
|
GenTableCell tb = (GenTableCell) myTable.getWidget(i, j);
|
||||||
|
int colspan = tb.getColspan();
|
||||||
|
|
||||||
|
toReturn.add(new TableCell(tb.getText(), colspan, tb.getWidth(), tb.getHeight()));
|
||||||
|
}
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public GenTableCell getSelectedCell() {
|
||||||
|
return selectedCell;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* adda a column at the left of the selected cell of the selected table
|
||||||
|
* TODO: next version
|
||||||
|
*/
|
||||||
|
public void addColumnLeft(int colindex) {
|
||||||
|
// myTable.insertCell(beforeRow, beforeColumn)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,158 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.targets;
|
||||||
|
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
|
||||||
|
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.user.client.Window;
|
||||||
|
import com.google.gwt.user.client.ui.Composite;
|
||||||
|
import com.google.gwt.user.client.ui.Image;
|
||||||
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||||
|
/**
|
||||||
|
* <code> ImageArea </code> class is the Widget that goes into the workspace
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version October 2008 (0.2)
|
||||||
|
*/
|
||||||
|
public class ImageArea extends Composite {
|
||||||
|
|
||||||
|
private String templateName;
|
||||||
|
private String imageName;
|
||||||
|
|
||||||
|
private String currentUser;
|
||||||
|
private String currentScope;
|
||||||
|
|
||||||
|
VerticalPanel myPanel;
|
||||||
|
Image myImage = new Image();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an image with a specified URL. The load event will be fired once
|
||||||
|
* the image at the given URL has been retrieved by the browser.
|
||||||
|
*
|
||||||
|
* @param presenter .
|
||||||
|
* @param param the imageName of the image to be displayed or the URL to be displayed depending on the isURL param
|
||||||
|
* @param myTemplate the template name that owns the image, useful when template it's saved with another name
|
||||||
|
* to eventually copy the images in the new template images folder
|
||||||
|
* @param isURL true if passing a URL, false is passing image name
|
||||||
|
* @param w width
|
||||||
|
* @param h height
|
||||||
|
*/
|
||||||
|
public ImageArea(Presenter presenter, String param, String myTemplate, boolean isURL, int w, int h) {
|
||||||
|
myPanel = new VerticalPanel();
|
||||||
|
currentUser = presenter.getCurrentUser();
|
||||||
|
currentScope = presenter.getCurrentScope();
|
||||||
|
//Window.alert("Image Area");
|
||||||
|
|
||||||
|
if (isURL) {
|
||||||
|
//need to get the name from the URL
|
||||||
|
int lastSlash = param.lastIndexOf("/");
|
||||||
|
if (lastSlash > -1) {
|
||||||
|
imageName = param.substring(lastSlash+1, param.length());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
imageName = param;
|
||||||
|
this.templateName = "CURRENT_OPEN";
|
||||||
|
//Window.alert(param);
|
||||||
|
myImage.setUrl(param);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
imageName = param;
|
||||||
|
this.templateName = myTemplate;
|
||||||
|
|
||||||
|
String imgURL = getImageURL(imageName, "CURRENT_OPEN");
|
||||||
|
|
||||||
|
|
||||||
|
myImage.setUrl(imgURL);
|
||||||
|
}
|
||||||
|
myImage.setPixelSize(w, h);
|
||||||
|
myPanel.setStyleName("d4sFrame");
|
||||||
|
myPanel.add(myImage);
|
||||||
|
initWidget(myPanel);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public String getUrl() {
|
||||||
|
return myImage.getUrl();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return a URL which is lookable for on the web
|
||||||
|
* @param imageName .
|
||||||
|
* @param templateName .
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public String getImageURL(String imageName, String templateName) {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Images will be stored under webapps/usersArea...
|
||||||
|
* GWT.getModuleBaseURL() returns * e.g. http://dlib28.isti.cnr.it/templatecreator/html/
|
||||||
|
* need to get just http://dlib28.isti.cnr.it/
|
||||||
|
*/
|
||||||
|
//remove "/html/" and get e.g. http://dlib28.isti.cnr.it/templatecreator
|
||||||
|
String host = GWT.getModuleBaseURL().substring(0, GWT.getModuleBaseURL().length()-6);
|
||||||
|
|
||||||
|
//loog for last slash
|
||||||
|
int lastSlash = host.lastIndexOf("/");
|
||||||
|
|
||||||
|
//get what i need : e.g. http://dlib28.isti.cnr.it/ or host = "http://localhost:8080/";
|
||||||
|
host = host.substring(0, lastSlash +1 );
|
||||||
|
//host = "http://localhost:8080/";
|
||||||
|
|
||||||
|
String imgURL = host + "usersArea/" + currentScope + "/templates/"
|
||||||
|
+ currentUser + "/" + "CURRENT_OPEN" + "/images/" + imageName;
|
||||||
|
GWT.log(imgURL);
|
||||||
|
return imgURL;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return a string containing the owner template name
|
||||||
|
*/
|
||||||
|
public String getTemplateName() {
|
||||||
|
return templateName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param myTemplate the template owner
|
||||||
|
*/
|
||||||
|
public void setTemplateName(String myTemplate) {
|
||||||
|
this.templateName = myTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public String getImageName() {
|
||||||
|
return imageName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param imageName .
|
||||||
|
*/
|
||||||
|
public void setImageName(String imageName) {
|
||||||
|
this.imageName = imageName;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return the scope in which the application is running on
|
||||||
|
*/
|
||||||
|
public String getCurrentScope() {
|
||||||
|
return currentScope;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return the user username who is using the application
|
||||||
|
*/
|
||||||
|
public String getCurrentUser() {
|
||||||
|
return currentUser;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,260 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.targets;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.client.ComponentType;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.client.ImageConstants;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.dialog.CommentDialog;
|
||||||
|
|
||||||
|
import com.google.gwt.event.dom.client.ClickEvent;
|
||||||
|
import com.google.gwt.event.dom.client.ClickHandler;
|
||||||
|
import com.google.gwt.user.client.ui.AbsolutePanel;
|
||||||
|
import com.google.gwt.user.client.ui.Composite;
|
||||||
|
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
|
||||||
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Image;
|
||||||
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code> ReportTextArea </code> class represent the generic Widget that can be placed in the UI Component
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version July 2011 (3.0)
|
||||||
|
*/
|
||||||
|
public class ReportTextArea extends Composite {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the allowance when mouse cursor is on borders
|
||||||
|
*/
|
||||||
|
public final int DELTA = 7;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* variables of the components
|
||||||
|
*/
|
||||||
|
protected int left, top, width, height;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the controller instance of the widget
|
||||||
|
*/
|
||||||
|
private Presenter presenter;
|
||||||
|
|
||||||
|
private ComponentType type;
|
||||||
|
|
||||||
|
protected AbsolutePanel mainPanel;
|
||||||
|
|
||||||
|
protected HorizontalPanel topPanel;
|
||||||
|
|
||||||
|
protected VerticalPanel resizablePanel;
|
||||||
|
|
||||||
|
protected Image commentImage;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public VerticalPanel getResizablePanel() {
|
||||||
|
return resizablePanel;
|
||||||
|
}
|
||||||
|
protected ReportTextArea myInstance;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* default constructor
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public ReportTextArea() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param presenter .
|
||||||
|
* @param left left
|
||||||
|
* @param top top
|
||||||
|
* @param width .
|
||||||
|
* @param height .
|
||||||
|
* @param type a
|
||||||
|
*/
|
||||||
|
public ReportTextArea(ComponentType type, final Presenter presenter, int left, int top, int width, int height, boolean hasComments) {
|
||||||
|
myInstance = this;
|
||||||
|
|
||||||
|
|
||||||
|
this.type = type;
|
||||||
|
this.presenter = presenter;
|
||||||
|
this.left = left;
|
||||||
|
this.top = top;
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
|
|
||||||
|
mainPanel = new AbsolutePanel();
|
||||||
|
|
||||||
|
topPanel = new HorizontalPanel();
|
||||||
|
resizablePanel = new VerticalPanel();
|
||||||
|
|
||||||
|
mainPanel.setPixelSize(width, height);
|
||||||
|
|
||||||
|
topPanel.setPixelSize(30, 15);
|
||||||
|
resizablePanel.setPixelSize(width, height);
|
||||||
|
|
||||||
|
commentImage = new Image((hasComments) ? ImageConstants.IMAGE_COMMENTS : ImageConstants.IMAGE_COMMENTS_GRAY);
|
||||||
|
commentImage.setTitle("Show user comments");
|
||||||
|
topPanel.add(commentImage);
|
||||||
|
|
||||||
|
commentImage.setStyleName("selectable");
|
||||||
|
commentImage.addClickHandler(new ClickHandler() {
|
||||||
|
public void onClick(ClickEvent event) {
|
||||||
|
String previousComments = "";
|
||||||
|
int commentHeight = -1;
|
||||||
|
previousComments = presenter.getComponentComments(myInstance).getComment();
|
||||||
|
commentHeight = presenter.getComponentComments(myInstance).getAreaHeight();
|
||||||
|
CommentDialog dlg = new CommentDialog(presenter.getEventBus(), myInstance, presenter.getCurrentUser(), previousComments, commentHeight);
|
||||||
|
dlg.setPopupPosition(commentImage.getAbsoluteLeft()+20, commentImage.getAbsoluteTop());
|
||||||
|
dlg.show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
topPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
|
||||||
|
|
||||||
|
mainPanel.add(resizablePanel, 0, 0);
|
||||||
|
mainPanel.add(topPanel, width-18, 0);
|
||||||
|
mainPanel.setStyleName("d4sFrame");
|
||||||
|
initWidget(mainPanel);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public ComponentType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param type .
|
||||||
|
*/
|
||||||
|
public void setType(ComponentType type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* used to resize the panel
|
||||||
|
* @param width w
|
||||||
|
* @param height h
|
||||||
|
*/
|
||||||
|
public void resizePanel(int width, int height) {
|
||||||
|
if (height > 15 && width > 15) {
|
||||||
|
mainPanel.setPixelSize(width, height);
|
||||||
|
resizablePanel.setPixelSize(width, height);
|
||||||
|
mainPanel.setWidgetPosition(topPanel, width-15, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***
|
||||||
|
*
|
||||||
|
* @param height g
|
||||||
|
*/
|
||||||
|
public void setHeight(int height) {
|
||||||
|
|
||||||
|
if (height > this.height) {
|
||||||
|
mainPanel.setHeight(""+(height+20));
|
||||||
|
resizablePanel.setHeight(""+(height+20));
|
||||||
|
mainPanel.setWidgetPosition(topPanel, width-15, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param left .
|
||||||
|
* @param top .
|
||||||
|
*/
|
||||||
|
public void repositionMyPanel(int left, int top) {
|
||||||
|
//mainPanel.setWidgetPosition(resizablePanel, left, top);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public int getLeft() {
|
||||||
|
return left;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param left .
|
||||||
|
*/
|
||||||
|
public void setLeft(int left) {
|
||||||
|
this.left = left;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return -.
|
||||||
|
*/
|
||||||
|
public int getTop() {
|
||||||
|
return top;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param top .
|
||||||
|
*/
|
||||||
|
public void setTop(int top) {
|
||||||
|
this.top = top;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return the controller instance of the widget
|
||||||
|
*/
|
||||||
|
public Presenter getController() {
|
||||||
|
return presenter;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public ReportTextArea getMyInstance() {
|
||||||
|
return myInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param myInstance .
|
||||||
|
*/
|
||||||
|
public void setMyInstance(ReportTextArea myInstance) {
|
||||||
|
this.myInstance = myInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeCommentView() {
|
||||||
|
commentImage.setUrl(ImageConstants.IMAGE_COMMENTS_GRAY);
|
||||||
|
}
|
||||||
|
public void addCommentView() {
|
||||||
|
commentImage.setUrl(ImageConstants.IMAGE_COMMENTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void showComment(String comment) {
|
||||||
|
// final Window window = new Window();
|
||||||
|
// window.setTitle("");
|
||||||
|
// window.setMaximizable(true);
|
||||||
|
// window.setResizable(true);
|
||||||
|
// window.setLayout(new FitLayout());
|
||||||
|
// window.setWidth(200);
|
||||||
|
// window.setHeight(100);
|
||||||
|
// window.setModal(false);
|
||||||
|
//
|
||||||
|
// Panel windowPanel = new Panel();
|
||||||
|
// windowPanel.setBaseCls("comment-popup");
|
||||||
|
// windowPanel.setHtml(comment);
|
||||||
|
// windowPanel.setShadow(true);
|
||||||
|
// window.add(windowPanel);
|
||||||
|
// window.setPosition(commentImage.getAbsoluteLeft()+25, commentImage.getAbsoluteTop());
|
||||||
|
// window.show();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,314 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.targets;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableTSFilter;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableTSinfo;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableTable;
|
||||||
|
import org.gcube.portlets.d4sreporting.common.shared.SerializableTimeSeries;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.ReportGenerator;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.dialog.TimeSeriesDialog;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.dialog.TimeSeriesFilter;
|
||||||
|
import org.gcube.portlets.user.reportgenerator.client.dialog.TimeSeriesSampleDialog;
|
||||||
|
import org.gcube.portlets.user.workspace.client.workspace.GWTWorkspaceItem;
|
||||||
|
import org.gcube.portlets.user.workspace.client.workspace.folder.item.GWTTimeSeries;
|
||||||
|
|
||||||
|
import com.extjs.gxt.ui.client.widget.Composite;
|
||||||
|
import com.extjs.gxt.ui.client.widget.VerticalPanel;
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.event.dom.client.ClickEvent;
|
||||||
|
import com.google.gwt.event.dom.client.ClickHandler;
|
||||||
|
import com.google.gwt.user.client.Window;
|
||||||
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||||
|
import com.google.gwt.user.client.ui.Button;
|
||||||
|
import com.google.gwt.user.client.ui.FlexTable;
|
||||||
|
import com.google.gwt.user.client.ui.Grid;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.Label;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code> TSArea </code> class is a Widget you can drop a Workspace Time Series on
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version July 2011 (3.0)
|
||||||
|
*/
|
||||||
|
public class TSArea extends Composite {
|
||||||
|
|
||||||
|
private VerticalPanel mainPanel;
|
||||||
|
private SerializableTimeSeries sts = new SerializableTimeSeries();
|
||||||
|
private String idInBasket;
|
||||||
|
private Presenter presenter;
|
||||||
|
private FlexTable flexTable;
|
||||||
|
private TSArea singleton;
|
||||||
|
|
||||||
|
VerticalPanel tableContainer = new VerticalPanel();
|
||||||
|
Grid metadata = new Grid(3, 2);
|
||||||
|
|
||||||
|
Label label;
|
||||||
|
/**
|
||||||
|
* @param presenter .
|
||||||
|
* @param width .
|
||||||
|
* @param height .
|
||||||
|
* @param sts the time series
|
||||||
|
*/
|
||||||
|
public TSArea(Presenter presenter, int width, int height, SerializableTimeSeries sts) {
|
||||||
|
singleton = this;
|
||||||
|
this.presenter = presenter;
|
||||||
|
mainPanel = new VerticalPanel();
|
||||||
|
//setElement(mainPanel.getElement());
|
||||||
|
|
||||||
|
mainPanel.setStyleName("timeseriesArea");
|
||||||
|
mainPanel.addStyleName("timeseriesArea_bg");
|
||||||
|
mainPanel.setWidth(width);
|
||||||
|
mainPanel.setHeight(height);
|
||||||
|
|
||||||
|
mainPanel.add(new HTML(" ", true));
|
||||||
|
this.sts = sts;
|
||||||
|
if (sts != null) {
|
||||||
|
if (sts.getTsMetadata() != null) {
|
||||||
|
showTS(sts.getTsMetadata());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
initComponent(mainPanel);
|
||||||
|
mainPanel.layout(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* called when dropped a TS on the area
|
||||||
|
* @param toShow the TS to show
|
||||||
|
*/
|
||||||
|
public void showTS(SerializableTSinfo toShow) {
|
||||||
|
mainPanel.removeAll();
|
||||||
|
mainPanel.removeStyleName("timeseriesArea_bg");
|
||||||
|
tableContainer.removeAll();
|
||||||
|
|
||||||
|
metadata.setWidget(0, 0, new HTML("<b>TS name:</b>", true));
|
||||||
|
metadata.setWidget(0, 1, new HTML(toShow.getTitle()));
|
||||||
|
metadata.setWidget(1, 0, new HTML("<b>Creation Date:</b> ", true));
|
||||||
|
metadata.setWidget(1, 1, new HTML(toShow.getTimeSeriesCreationDate()));
|
||||||
|
metadata.setWidget(2, 0, new HTML("<b>Total rows:</b>", true));
|
||||||
|
metadata.setWidget(2, 1, new HTML(""+toShow.getDimension()));
|
||||||
|
|
||||||
|
|
||||||
|
List<String> headers = toShow.getHeaderLabels();
|
||||||
|
flexTable = new FlexTable();
|
||||||
|
|
||||||
|
int n = (headers.size() > 10) ? 10 : headers.size();
|
||||||
|
|
||||||
|
for (int i = 0; i < n ; i++) {
|
||||||
|
flexTable.getCellFormatter().setStyleName(0, i, "timeSeries_header");
|
||||||
|
flexTable.setWidget(0, i, new HTML(headers.get(i)));
|
||||||
|
flexTable.setWidget(1, i, new HTML(".."));
|
||||||
|
flexTable.getCellFormatter().setStyleName(1, i, "timeSeries_td");
|
||||||
|
}
|
||||||
|
if (headers.size() > 10) {
|
||||||
|
flexTable.setWidget(0, 11, new HTML(" more .."));
|
||||||
|
flexTable.setWidget(1, 11, new HTML(".."));
|
||||||
|
flexTable.getCellFormatter().setStyleName(0, 11, "timeSeries_header");
|
||||||
|
flexTable.getCellFormatter().setStyleName(1, 11, "timeSeries_td");
|
||||||
|
}
|
||||||
|
|
||||||
|
tableContainer.add(flexTable);
|
||||||
|
|
||||||
|
mainPanel.add(metadata);
|
||||||
|
mainPanel.add(tableContainer);
|
||||||
|
|
||||||
|
Button moreDetails = new Button("View Timeseries Metadata");
|
||||||
|
Button filter = new Button("Filter Table");
|
||||||
|
Button showSample = new Button("Show Sample");
|
||||||
|
|
||||||
|
HorizontalPanel buttonsPanel = new HorizontalPanel();
|
||||||
|
buttonsPanel.setSpacing(5);
|
||||||
|
buttonsPanel.add(moreDetails);
|
||||||
|
buttonsPanel.add(filter);
|
||||||
|
buttonsPanel.add(showSample);
|
||||||
|
|
||||||
|
mainPanel.add(buttonsPanel);
|
||||||
|
|
||||||
|
moreDetails.addClickHandler(viewMetadataTS);
|
||||||
|
showSample.addClickHandler(showTSSample);
|
||||||
|
filter.addClickHandler(applyFilterTs);
|
||||||
|
|
||||||
|
//TODO: check this
|
||||||
|
presenter.storeChangeInSession(this);
|
||||||
|
mainPanel.layout(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
ClickHandler viewMetadataTS = new ClickHandler() {
|
||||||
|
public void onClick(ClickEvent event) {
|
||||||
|
TimeSeriesDialog dlg = new TimeSeriesDialog(sts.getTsMetadata());
|
||||||
|
dlg.setAnimationEnabled(true);
|
||||||
|
dlg.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
ClickHandler applyFilterTs = new ClickHandler() {
|
||||||
|
|
||||||
|
public void onClick(ClickEvent event) {
|
||||||
|
TimeSeriesFilter dlg = new TimeSeriesFilter(singleton, sts);
|
||||||
|
//dlg.setPopupPosition(sender.getAbsoluteLeft(), sender.getAbsoluteTop());
|
||||||
|
dlg.setAnimationEnabled(true);
|
||||||
|
dlg.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
ClickHandler showTSSample = new ClickHandler() {
|
||||||
|
public void onClick(ClickEvent event) {
|
||||||
|
presenter.getModel().getModelService().getSampleTimeSeries(sts, new AsyncCallback<SerializableTable>() {
|
||||||
|
public void onFailure(Throwable caught) { Window.alert("There were Problem contacting Server, please try later");}
|
||||||
|
|
||||||
|
public void onSuccess(SerializableTable result) {
|
||||||
|
SerializableTable toPass = result;
|
||||||
|
TimeSeriesSampleDialog dlg = new TimeSeriesSampleDialog(toPass);
|
||||||
|
dlg.setAnimationEnabled(true);
|
||||||
|
dlg.show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param droppedTS the dropped timeseries
|
||||||
|
*/
|
||||||
|
public void dropTS(GWTTimeSeries droppedTS) {
|
||||||
|
idInBasket = droppedTS.getId();
|
||||||
|
SerializableTSinfo tsMetadata = convertWSTS2SerialazableTS(droppedTS);
|
||||||
|
sts = new SerializableTimeSeries(null, tsMetadata);
|
||||||
|
GWT.log("showTS TS");
|
||||||
|
showTS(tsMetadata);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void fetchTS(String identifier, boolean isInteralImage, boolean fullDetails) {
|
||||||
|
GWT.log("FETCH TS");
|
||||||
|
this.mask("fetching TimeSeries, pleas wait", "loading-indicator");
|
||||||
|
|
||||||
|
ReportGenerator.get().getWSTreeService().getTimeSeriesById(identifier, new AsyncCallback<GWTWorkspaceItem>() {
|
||||||
|
public void onSuccess(GWTWorkspaceItem result) {
|
||||||
|
unmask();
|
||||||
|
GWTTimeSeries ts = (GWTTimeSeries) result;
|
||||||
|
dropTS(ts);
|
||||||
|
}
|
||||||
|
public void onFailure(Throwable caught) {
|
||||||
|
unmask();
|
||||||
|
Window.alert("Could not fetch Time Series from infrastructure " + caught.getCause());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* converts the WorkSpace TS Object into a Report TS Object
|
||||||
|
* @param md the TS metadata to convert
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private SerializableTSinfo convertWSTS2SerialazableTS(GWTTimeSeries md) {
|
||||||
|
SerializableTSinfo tsMetadata = new SerializableTSinfo(md.getId(), md.getName(), md.getDescription(), md.getOwner(),
|
||||||
|
md.getCreationTime(), md.getLastModificationTime(), md.getTimeSeriesId(), md.getTitle(), md.getCreator(),
|
||||||
|
md.getTimeSeriesDescription(), md.getTimeSeriesCreationDate(),
|
||||||
|
md.getPublisher(), md.getSourceId(), md.getSourceName(), md.getRights(), md.getDimension(), md.getHeaderLabels());
|
||||||
|
|
||||||
|
return tsMetadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* refresh the headers once the TS has been filtered
|
||||||
|
*/
|
||||||
|
public void refreshHeaders() {
|
||||||
|
tableContainer.removeAll();
|
||||||
|
flexTable = new FlexTable();
|
||||||
|
|
||||||
|
List<String> filteredHeaders = new LinkedList<String>();
|
||||||
|
SerializableTSFilter tf = sts.getFilter();
|
||||||
|
|
||||||
|
for (Integer colNo : tf.getColsNumberToShow()) {
|
||||||
|
String toAdd = sts.getTsMetadata().getHeaderLabels().get(colNo);
|
||||||
|
filteredHeaders.add(toAdd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int n = (filteredHeaders.size() > 10) ? 10 : filteredHeaders.size();
|
||||||
|
|
||||||
|
for (int i = 0; i < n ; i++) {
|
||||||
|
flexTable.getCellFormatter().setStyleName(0, i, "timeSeries_header");
|
||||||
|
flexTable.setWidget(0, i, new HTML(filteredHeaders.get(i)));
|
||||||
|
flexTable.setWidget(1, i, new HTML(".."));
|
||||||
|
flexTable.getCellFormatter().setStyleName(1, i, "timeSeries_td");
|
||||||
|
}
|
||||||
|
if (filteredHeaders.size() > 10) {
|
||||||
|
flexTable.setWidget(0, 11, new HTML(" more .."));
|
||||||
|
flexTable.setWidget(1, 11, new HTML(".."));
|
||||||
|
flexTable.getCellFormatter().setStyleName(0, 11, "timeSeries_header");
|
||||||
|
flexTable.getCellFormatter().setStyleName(1, 11, "timeSeries_td");
|
||||||
|
}
|
||||||
|
|
||||||
|
tableContainer.add(flexTable);
|
||||||
|
Grid newGrid = new Grid(1, 2);
|
||||||
|
newGrid.setWidget(0, 0, new HTML("<b>Selected Interval:</b> ", true));
|
||||||
|
newGrid.setWidget(0, 1, new HTML(tf.getFrom() + " - " + tf.getTo() ));
|
||||||
|
tableContainer.add(newGrid);
|
||||||
|
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return the possible content
|
||||||
|
*/
|
||||||
|
public Label getLabel() {
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param label set the label
|
||||||
|
*/
|
||||||
|
public void setLabel(Label label) {
|
||||||
|
this.label = label;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public String getIdInBasket() {
|
||||||
|
return idInBasket;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param idInBasket .
|
||||||
|
*/
|
||||||
|
public void setIdInBasket(String idInBasket) {
|
||||||
|
this.idInBasket = idInBasket;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public SerializableTimeSeries getSts() {
|
||||||
|
return sts;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param sts .
|
||||||
|
*/
|
||||||
|
public void setSts(SerializableTimeSeries sts) {
|
||||||
|
this.sts = sts;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param tsf the new ts filter
|
||||||
|
*/
|
||||||
|
public void setNewFilter(SerializableTSFilter tsf) {
|
||||||
|
this.sts.setFilter(tsf);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.gcube.portlets.user.reportgenerator.client.toursteps;
|
||||||
|
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.dom.client.Element;
|
||||||
|
import com.google.gwt.uibinder.client.UiBinder;
|
||||||
|
import com.google.gwt.user.client.ui.HTML;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author massi
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class Intro extends HTML {
|
||||||
|
|
||||||
|
private static IntroUiBinder uiBinder = GWT.create(IntroUiBinder.class);
|
||||||
|
|
||||||
|
interface IntroUiBinder extends UiBinder<Element, Intro> {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Intro() {
|
||||||
|
setHTML(uiBinder.createAndBindUi(this).getInnerHTML());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
|
||||||
|
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder">
|
||||||
|
<ui:style>
|
||||||
|
/* Add CSS here. See the GWT docs on UI Binder for more details */
|
||||||
|
.important {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
</ui:style>
|
||||||
|
<div>
|
||||||
|
<!-- Add HTML content here. The ui:field attribute binds an element to
|
||||||
|
a field in the owner class. See the GWT docs on UI Binder for more details. -->
|
||||||
|
<div style="line-height: 19px; padding: 10px; font-size: 14px; ">
|
||||||
|
<div style="padding-bottom: 70px;">
|
||||||
|
<b>gCube Reporting</b>
|
||||||
|
allows users to create Reports and generate different
|
||||||
|
export formats
|
||||||
|
(OpenXML, HTML, PDF) based on results retrieved from the
|
||||||
|
infrastructure.
|
||||||
|
</div>
|
||||||
|
<div style="padding-bottom: 70px;">
|
||||||
|
gCube Templates are loaded by this
|
||||||
|
<b>gCube Report Generator</b>
|
||||||
|
to produce actual reports.
|
||||||
|
</div>
|
||||||
|
<div style="padding-bottom: 10px;">
|
||||||
|
<b>Discover</b>
|
||||||
|
gCube Reporting features through this quick tour.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</ui:UiBinder>
|
|
@ -0,0 +1,44 @@
|
||||||
|
|
||||||
|
package org.gcube.portlets.user.reportgenerator.server.portlet;
|
||||||
|
|
||||||
|
import javax.portlet.GenericPortlet;
|
||||||
|
import javax.portlet.ActionRequest;
|
||||||
|
import javax.portlet.PortletSession;
|
||||||
|
import javax.portlet.RenderRequest;
|
||||||
|
import javax.portlet.ActionResponse;
|
||||||
|
import javax.portlet.RenderResponse;
|
||||||
|
import javax.portlet.PortletException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import javax.portlet.PortletRequestDispatcher;
|
||||||
|
|
||||||
|
import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper;
|
||||||
|
|
||||||
|
import com.liferay.portal.PortalException;
|
||||||
|
import com.liferay.portal.SystemException;
|
||||||
|
import com.liferay.portal.model.User;
|
||||||
|
import com.liferay.portal.service.UserLocalServiceUtil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ReportGeneratorPortlet Portlet Class
|
||||||
|
* @author massi
|
||||||
|
*/
|
||||||
|
public class ReportGeneratorPortlet extends GenericPortlet {
|
||||||
|
|
||||||
|
public void doView(RenderRequest request, RenderResponse response)
|
||||||
|
throws PortletException, IOException {
|
||||||
|
|
||||||
|
ScopeHelper.setContext(request);
|
||||||
|
|
||||||
|
PortletRequestDispatcher dispatcher =
|
||||||
|
getPortletContext().getRequestDispatcher("/WEB-INF/jsp/ReportGeneratorPortlet_view.jsp");
|
||||||
|
dispatcher.include(request, response);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void processAction(ActionRequest request, ActionResponse response)
|
||||||
|
throws PortletException, IOException {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,311 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.server.servlet;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.application.framework.core.session.ASLSession;
|
||||||
|
import org.gcube.common.core.utils.logging.GCUBELog;
|
||||||
|
import org.gcube.portal.custom.communitymanager.OrganizationsUtil;
|
||||||
|
import org.gcube.portlets.admin.wfdocslibrary.shared.PermissionType;
|
||||||
|
import org.gcube.portlets.admin.wfdocslibrary.shared.Step;
|
||||||
|
import org.gcube.portlets.admin.wfdocslibrary.shared.WfRole;
|
||||||
|
|
||||||
|
import com.liferay.portal.kernel.exception.PortalException;
|
||||||
|
import com.liferay.portal.kernel.exception.SystemException;
|
||||||
|
import com.liferay.portal.model.Organization;
|
||||||
|
import com.liferay.portal.model.ResourceConstants;
|
||||||
|
import com.liferay.portal.model.Role;
|
||||||
|
import com.liferay.portal.model.User;
|
||||||
|
import com.liferay.portal.service.CompanyLocalServiceUtil;
|
||||||
|
import com.liferay.portal.service.OrganizationLocalServiceUtil;
|
||||||
|
import com.liferay.portal.service.PermissionLocalServiceUtil;
|
||||||
|
import com.liferay.portal.service.ResourceLocalServiceUtil;
|
||||||
|
import com.liferay.portal.service.ServiceContext;
|
||||||
|
import com.liferay.portal.service.UserLocalServiceUtil;
|
||||||
|
import com.liferay.portlet.documentlibrary.NoSuchFolderException;
|
||||||
|
import com.liferay.portlet.documentlibrary.model.DLFileEntry;
|
||||||
|
import com.liferay.portlet.documentlibrary.model.DLFolder;
|
||||||
|
import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
|
||||||
|
import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
|
||||||
|
|
||||||
|
public class DocLibraryUtil {
|
||||||
|
|
||||||
|
public static final String WORKFLOWS_FOLDER = "Workflow Documents";
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static GCUBELog log = new GCUBELog(DocLibraryUtil.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* write the Report File (payload) into Liferay DocLibrary in the workflowdocs folder
|
||||||
|
* @param roles
|
||||||
|
* @param start each Step contains a Map<WfRole, ArrayList<PermissionType>> that is needed in the writeFileIntoDocLibrary
|
||||||
|
* @param fileName
|
||||||
|
* @param buffer the payload as byte array
|
||||||
|
*/
|
||||||
|
public static boolean writeFileIntoDocLibrary(ASLSession session, List<Role> roles, Step start, String fileName, byte[] buffer) {
|
||||||
|
long docfolderid = -1;
|
||||||
|
try {
|
||||||
|
docfolderid = getWfFolder(session);
|
||||||
|
long userId = getUserId(session);
|
||||||
|
//write the file into doclib
|
||||||
|
DLFileEntry fileEntry = DLFileEntryLocalServiceUtil.addFileEntry(
|
||||||
|
userId,
|
||||||
|
getGroupID(session),
|
||||||
|
docfolderid,
|
||||||
|
fileName,
|
||||||
|
fileName,
|
||||||
|
"workflow document",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
buffer,
|
||||||
|
new ServiceContext());
|
||||||
|
log.debug("Wrote file into DocumentLibrary");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//get the file entry resource id
|
||||||
|
long resourceId = ResourceLocalServiceUtil.getResource(fileEntry.getCompanyId(),
|
||||||
|
DLFileEntry.class.getName(), ResourceConstants.SCOPE_INDIVIDUAL, String.valueOf(fileEntry.getFileEntryId())).getResourceId();
|
||||||
|
|
||||||
|
//set the permission on the file for each role
|
||||||
|
for (Role role : roles) {
|
||||||
|
String[] actionIds = getPermissionsFromWfStep(role, start);
|
||||||
|
PermissionLocalServiceUtil.setRolePermissions(role.getRoleId(), actionIds, resourceId);
|
||||||
|
log.debug("set the permissions for Role: " + role.getName());
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
log.debug(" WROTE INTO DOCsLib and ADDING permissions for name: " + fileName);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DLFileEntry updateFileIntoDocLibrary(ASLSession session, String workflowid, byte[] buffer) {
|
||||||
|
long docfolderid = -1;
|
||||||
|
DLFileEntry fileEntry = null;
|
||||||
|
try {
|
||||||
|
fileEntry = getFileEntry(session, workflowid);
|
||||||
|
docfolderid = getWfFolder(session);
|
||||||
|
long userId = getUserId(session);
|
||||||
|
|
||||||
|
String fileName = fileEntry.getTitle();
|
||||||
|
log.debug("Update file into DocumentLibrary with Name: " + fileName);
|
||||||
|
|
||||||
|
DLFileEntryLocalServiceUtil.updateFileEntry(
|
||||||
|
userId,
|
||||||
|
getGroupID(session),
|
||||||
|
docfolderid,
|
||||||
|
fileEntry.getName(),
|
||||||
|
fileEntry.getName(),
|
||||||
|
fileName,
|
||||||
|
fileEntry.getDescription(),
|
||||||
|
"",
|
||||||
|
true,
|
||||||
|
"",
|
||||||
|
buffer,
|
||||||
|
new ServiceContext());
|
||||||
|
|
||||||
|
log.debug("Update file into DocumentLibrary");
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return fileEntry;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean deleteFileFromDocLibrary(ASLSession session, String workflowid) {
|
||||||
|
DLFileEntry fileEntry = null;
|
||||||
|
try {
|
||||||
|
fileEntry = getFileEntry(session, workflowid);
|
||||||
|
DLFileEntryLocalServiceUtil.deleteDLFileEntry(fileEntry);
|
||||||
|
log.debug("Deleted");
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param session
|
||||||
|
* @param workflowid
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
* @throws SystemException
|
||||||
|
* @throws PortalException
|
||||||
|
*/
|
||||||
|
public static InputStream getFileEntryAsStream(ASLSession session, String workflowid) throws Exception {
|
||||||
|
String titleWithExtension = workflowid+".zip";
|
||||||
|
|
||||||
|
DLFileEntry fileEntry = DLFileEntryLocalServiceUtil.getFileEntryByTitle(getGroupID(session), getWfFolder(session),
|
||||||
|
titleWithExtension);
|
||||||
|
|
||||||
|
return DLFileEntryLocalServiceUtil.getFileAsStream(fileEntry.getCompanyId(),
|
||||||
|
getUserId(session), getGroupID(session), getWfFolder(session), fileEntry.getName());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DLFileEntry getFileEntry(ASLSession session, String workflowid) throws PortalException, SystemException, Exception {
|
||||||
|
String titleWithExtension = workflowid+".zip";
|
||||||
|
|
||||||
|
return DLFileEntryLocalServiceUtil.getFileEntryByTitle(getGroupID(session), getWfFolder(session),
|
||||||
|
titleWithExtension);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param role is the liferay role, for convention is created as ROLENAME_WFID e.g. EDITOR_123
|
||||||
|
* @param step containts the permissions attached to each role (just the name, e.g. EDITOR)
|
||||||
|
* @return the permissions to apply
|
||||||
|
*/
|
||||||
|
public static String[] getPermissionsFromWfStep(Role role, Step step) {
|
||||||
|
ArrayList<PermissionType> toConvert = new ArrayList<PermissionType>();
|
||||||
|
for (WfRole steprole : step.getPermissions().keySet()) {
|
||||||
|
System.out.println("Steprole: "+ steprole.getRolename());
|
||||||
|
String name = role.getName().split("_")[0]; //e.g. EDITOR <- EDITOR_123
|
||||||
|
System.out.println("role Name: "+ name);
|
||||||
|
if (steprole.getRolename().equals(name)) {
|
||||||
|
toConvert = step.getPermissions().get(steprole);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String[] toReturn = new String[toConvert.size()];
|
||||||
|
int i = 0;
|
||||||
|
for (PermissionType p : toConvert) {
|
||||||
|
toReturn[i] = getLRActionIdFromWfPermissionType(p);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* check the existence of the WFFolder or create it if not exists
|
||||||
|
* @param session
|
||||||
|
* @return true is everything goes ok
|
||||||
|
* @throws PortalException
|
||||||
|
* @throws SystemException
|
||||||
|
*/
|
||||||
|
public static long getWfFolder(ASLSession session) throws Exception {
|
||||||
|
long parentFolderId = 0;
|
||||||
|
DLFolder folder = null;
|
||||||
|
if (! wfFolderExists(session)) {
|
||||||
|
folder = DLFolderLocalServiceUtil.addFolder(getUserId(session), getGroupID(session), parentFolderId, WORKFLOWS_FOLDER, "Folder for Workflow Documents", new ServiceContext());
|
||||||
|
log.debug("Folder for WorkflowDocs created: /" + WORKFLOWS_FOLDER);
|
||||||
|
} else
|
||||||
|
folder = DLFolderLocalServiceUtil.getFolder( getGroupID(session), parentFolderId, WORKFLOWS_FOLDER);
|
||||||
|
return folder.getFolderId();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param session the ASL Session instance
|
||||||
|
* @return true if the workflow docs exists
|
||||||
|
*/
|
||||||
|
public static boolean wfFolderExists(ASLSession session) {
|
||||||
|
try {
|
||||||
|
long groupid = getGroupID(session);
|
||||||
|
long parentfolder = 0;
|
||||||
|
if (DLFolderLocalServiceUtil.getFolder(groupid, parentfolder, "Workflow Documents") != null)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
catch (NoSuchFolderException ex) {
|
||||||
|
log.debug("Folder does not exists");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param session
|
||||||
|
* @return
|
||||||
|
* @throws PortalException
|
||||||
|
* @throws SystemException
|
||||||
|
*/
|
||||||
|
public static long getGroupID(ASLSession session) throws PortalException, SystemException {
|
||||||
|
long organizationid = session.getGroupId();
|
||||||
|
Organization myOrg = OrganizationLocalServiceUtil.getOrganization(organizationid);
|
||||||
|
return myOrg.getGroup().getGroupId();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return the company webid
|
||||||
|
* @throws PortalException
|
||||||
|
* @throws SystemException
|
||||||
|
*/
|
||||||
|
public static long getCompanyID() throws PortalException, SystemException {
|
||||||
|
return OrganizationsUtil.getCompany().getCompanyId();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param session the ASL Session instance
|
||||||
|
* @return the list of the root folders
|
||||||
|
* @throws SystemException .
|
||||||
|
* @throws PortalException .
|
||||||
|
*/
|
||||||
|
public static List<DLFolder> getFolders(ASLSession session) throws SystemException, PortalException {
|
||||||
|
long companyid = getCompanyID();
|
||||||
|
List<DLFolder> folders = null;
|
||||||
|
folders = DLFolderLocalServiceUtil.getFolders(companyid);
|
||||||
|
for (DLFolder folder : folders) {
|
||||||
|
log.debug("Folder name: " + folder.getName() + " ID: " + folder.getFolderId() + " Parent: " + folder.getParentFolderId() + " Groupid: " + folder.getGroupId());
|
||||||
|
}
|
||||||
|
return folders;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param session the ASL Session instance
|
||||||
|
* @return the userid in the liferay system
|
||||||
|
*/
|
||||||
|
public static long getUserId(ASLSession session) {
|
||||||
|
List<User> users = null;
|
||||||
|
long userId = 0;
|
||||||
|
try {
|
||||||
|
users = UserLocalServiceUtil.getUsers(0, UserLocalServiceUtil.getUsersCount());
|
||||||
|
} catch (SystemException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
for(User user: users){
|
||||||
|
if(user.getScreenName().equalsIgnoreCase(session.getUsername())){
|
||||||
|
userId = user.getUserId();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* needed to convert Workflows permission into Lifearay permissions (ActionIDs)
|
||||||
|
* @param type
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static String getLRActionIdFromWfPermissionType(PermissionType type) {
|
||||||
|
switch (type) {
|
||||||
|
case EDIT_PERMISSIONS:
|
||||||
|
return "PERMISSIONS";
|
||||||
|
case VIEW:
|
||||||
|
return "VIEW";
|
||||||
|
case UPDATE:
|
||||||
|
return "UPDATE";
|
||||||
|
case DELETE:
|
||||||
|
return "DELETE";
|
||||||
|
case ADD_DISCUSSION:
|
||||||
|
return "ADD_DISCUSSION";
|
||||||
|
case DELETE_DISCUSSION:
|
||||||
|
return "DELETE_DISCUSSION";
|
||||||
|
case UPDATE_DISCUSSION:
|
||||||
|
return "UPDATE_DISCUSSION";
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,181 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.server.servlet;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
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.gcube.application.framework.core.session.ASLSession;
|
||||||
|
import org.gcube.application.framework.core.session.SessionManager;
|
||||||
|
import org.gcube.common.core.utils.logging.GCUBEClientLog;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code> ImagesUploadServlet </code> class is the server code delgated to receinve the byte stream and store i
|
||||||
|
*
|
||||||
|
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
|
||||||
|
* @version October 2008 (0.2)
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class ImagesUploadServlet extends HttpServlet {
|
||||||
|
|
||||||
|
static GCUBEClientLog _log = new GCUBEClientLog(ImagesUploadServlet.class);
|
||||||
|
|
||||||
|
final String returnOKMessage = "OK";
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private String currentUser;
|
||||||
|
|
||||||
|
private String currentScope;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param message the msg
|
||||||
|
*/
|
||||||
|
public static void logger (String message) {
|
||||||
|
System.out.println("***" + message);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* return the user template folder
|
||||||
|
* @param templateName
|
||||||
|
* @param currentDL .
|
||||||
|
* @param currentUser .
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
private String getTemplateFolder(String currentDL, String currentUser) {
|
||||||
|
_log.debug("getTemplateFolder Method called");
|
||||||
|
// platform indipendent slash
|
||||||
|
String sl = File.separator;
|
||||||
|
//e.g. /home/massi/workspace/templategen/tomcat/webapps/ROOT
|
||||||
|
String path = System.getenv("CATALINA_HOME");
|
||||||
|
path += sl + "webapps" + sl +"usersArea" + sl + currentDL +
|
||||||
|
sl + "templates" + sl + currentUser + sl ;
|
||||||
|
_log.debug("Returning Path= " + path);
|
||||||
|
return path;
|
||||||
|
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* file upload handler
|
||||||
|
* @param request .
|
||||||
|
* @param response .
|
||||||
|
* @throws ServletException .
|
||||||
|
* @throws IOException .
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||||
|
|
||||||
|
// logger("ImagesUploadServlet received:");
|
||||||
|
//
|
||||||
|
// currentUser = getUsername(request);
|
||||||
|
// currentScope = getVreName(request);
|
||||||
|
//
|
||||||
|
// String currTemplateName = request.getParameter("currTemplateName");
|
||||||
|
//
|
||||||
|
// logger("currentUser: "+currentUser);
|
||||||
|
// logger("currentVRE: "+currentScope);
|
||||||
|
// logger("currTemplateName: "+currTemplateName);
|
||||||
|
// logger("CALLING :getTemplateFolder ");
|
||||||
|
// logger("RETURNED :getTemplateFolder ");
|
||||||
|
// //platform indipendent slash
|
||||||
|
// String sl = File.separator;
|
||||||
|
// String startDirectory = getTemplateFolder(currentScope, currentUser); //e.g. /home/massi/workspace/templategen/tomcat/webapps/ROOT
|
||||||
|
// int lastSlash = startDirectory.lastIndexOf(sl);
|
||||||
|
// startDirectory = startDirectory.substring(0, lastSlash);
|
||||||
|
//
|
||||||
|
// startDirectory += sl + "CURRENT_OPEN" + sl + "images";
|
||||||
|
//
|
||||||
|
// logger("RETURNED : " + startDirectory);
|
||||||
|
// logger("WRITING... :");
|
||||||
|
//
|
||||||
|
// String fileName = "";
|
||||||
|
// PrintWriter out = response.getWriter();
|
||||||
|
//
|
||||||
|
// if (!ServletFileUpload.isMultipartContent(request))
|
||||||
|
// return;
|
||||||
|
//
|
||||||
|
// FileItemFactory factory = new DiskFileItemFactory();
|
||||||
|
// ServletFileUpload upload = new ServletFileUpload(factory);
|
||||||
|
//
|
||||||
|
// List items = null;
|
||||||
|
// try {
|
||||||
|
// items = upload.parseRequest(request);
|
||||||
|
// }
|
||||||
|
// catch (FileUploadException e) {
|
||||||
|
// e.printStackTrace();
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// File uploadedFile = null;
|
||||||
|
// for (Iterator i = items.iterator(); i.hasNext();) {
|
||||||
|
// FileItem item = (FileItem) i.next();
|
||||||
|
//
|
||||||
|
// if (item.isFormField())
|
||||||
|
// continue;
|
||||||
|
// fileName = item.getName();
|
||||||
|
// if (fileName != null && fileName.compareTo("")!=0) {
|
||||||
|
// fileName = FilenameUtils.getName(fileName);
|
||||||
|
//
|
||||||
|
// uploadedFile = new File(startDirectory + File.separator + fileName);
|
||||||
|
// try {
|
||||||
|
// if(!uploadedFile.exists()){
|
||||||
|
// File toCreate = new File(startDirectory);
|
||||||
|
// boolean success = toCreate.mkdirs();
|
||||||
|
// if (success)
|
||||||
|
// Logger.debug("New file \"" + uploadedFile + "\" has been created ");
|
||||||
|
// }
|
||||||
|
// item.write(uploadedFile);
|
||||||
|
// }
|
||||||
|
// catch (Exception e) { e.printStackTrace(); }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// out.print(returnOKMessage);
|
||||||
|
// out.close();
|
||||||
|
|
||||||
|
} //end service
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param httpServletRequest .
|
||||||
|
* @return .
|
||||||
|
*/
|
||||||
|
public String getUsername(HttpServletRequest httpServletRequest) {
|
||||||
|
|
||||||
|
HttpSession session = httpServletRequest.getSession();
|
||||||
|
String user = (String) session.getAttribute("username");
|
||||||
|
if(session.getAttribute("username")== null)
|
||||||
|
{
|
||||||
|
user = "massi";
|
||||||
|
logger("D4ScienceSession user NULL set to: " + user);
|
||||||
|
}
|
||||||
|
logger("D4ScienceSession user: " + user);
|
||||||
|
|
||||||
|
ASLSession d4session = SessionManager.getInstance().getASLSession(session.getId(), user);
|
||||||
|
d4session.setAttribute("username", user);
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param httpServletRequest .
|
||||||
|
* @return the shared session
|
||||||
|
*/
|
||||||
|
public String getVreName(HttpServletRequest httpServletRequest) {
|
||||||
|
HttpSession session = httpServletRequest.getSession();
|
||||||
|
|
||||||
|
ASLSession d4session = SessionManager.getInstance().getASLSession(session.getId(), getUsername(httpServletRequest));
|
||||||
|
String scope = d4session.getScopeName();
|
||||||
|
//need to remove the initial / of the scope
|
||||||
|
if (scope.charAt(0) == '/')
|
||||||
|
scope = scope.substring(1, scope.length());
|
||||||
|
logger("ImagesUploadServlet SCOPE: " + scope);
|
||||||
|
//String scope = "gcube/devsec";
|
||||||
|
return scope;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,130 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.server.servlet;
|
||||||
|
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.BufferedOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import java.util.zip.ZipEntry;
|
||||||
|
import java.util.zip.ZipFile;
|
||||||
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
|
import org.gcube.common.core.utils.logging.GCUBELog;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author massi
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ZipUtil {
|
||||||
|
|
||||||
|
|
||||||
|
public static GCUBELog logger = new GCUBELog(ZipUtil.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param zipFileName zipFileName
|
||||||
|
* @param dir the dir to compress
|
||||||
|
* @throws IOException .
|
||||||
|
*/
|
||||||
|
public static void zipDir(String zipFileName, String dir) throws IOException {
|
||||||
|
|
||||||
|
File dirObj = new File(dir);
|
||||||
|
if(!dirObj.isDirectory())
|
||||||
|
{
|
||||||
|
System.err.println(dir + " is not a directory");
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
|
||||||
|
logger.debug("Creating : " + zipFileName);
|
||||||
|
addDir(dirObj, out);
|
||||||
|
// Complete the ZIP file
|
||||||
|
out.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void addDir(File dirObj, ZipOutputStream out) throws IOException
|
||||||
|
{
|
||||||
|
File[] files = dirObj.listFiles();
|
||||||
|
byte[] tmpBuf = new byte[1024];
|
||||||
|
|
||||||
|
for (int i=0; i<files.length; i++)
|
||||||
|
{
|
||||||
|
if(files[i].isDirectory())
|
||||||
|
{
|
||||||
|
addDir(files[i], out);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
FileInputStream in = new FileInputStream(files[i].getAbsolutePath());
|
||||||
|
System.out.println(" Adding: " + files[i].getAbsolutePath());
|
||||||
|
|
||||||
|
String filename = files[i].getName();
|
||||||
|
if (filename.endsWith("jpeg") || filename.endsWith("jpg") || filename.endsWith("gif") || filename.endsWith("png"))
|
||||||
|
filename = "images/" + filename;
|
||||||
|
|
||||||
|
out.putNextEntry(new ZipEntry(filename));
|
||||||
|
|
||||||
|
// Transfer from the file to the ZIP file
|
||||||
|
int len;
|
||||||
|
while((len = in.read(tmpBuf)) > 0)
|
||||||
|
{
|
||||||
|
out.write(tmpBuf, 0, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Complete the entry
|
||||||
|
out.closeEntry();
|
||||||
|
in.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param archive .
|
||||||
|
* @param outputDir .
|
||||||
|
*/
|
||||||
|
public static void unzipArchive(File archive, File outputDir) {
|
||||||
|
try {
|
||||||
|
ZipFile zipfile = new ZipFile(archive);
|
||||||
|
for (Enumeration e = zipfile.entries(); e.hasMoreElements(); ) {
|
||||||
|
ZipEntry entry = (ZipEntry) e.nextElement();
|
||||||
|
unzipEntry(zipfile, entry, outputDir);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("while extracting file " + archive);
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void unzipEntry(ZipFile zipfile, ZipEntry entry, File outputDir) throws IOException {
|
||||||
|
|
||||||
|
if (entry.isDirectory()) {
|
||||||
|
createDir(new File(outputDir, entry.getName()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
File outputFile = new File(outputDir, entry.getName());
|
||||||
|
if (!outputFile.getParentFile().exists()){
|
||||||
|
createDir(outputFile.getParentFile());
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.debug("Extracting: " + entry);
|
||||||
|
BufferedInputStream inputStream = new BufferedInputStream(zipfile.getInputStream(entry));
|
||||||
|
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile));
|
||||||
|
|
||||||
|
try {
|
||||||
|
IOUtils.copy(inputStream, outputStream);
|
||||||
|
} finally {
|
||||||
|
outputStream.close();
|
||||||
|
inputStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void createDir(File dir) {
|
||||||
|
logger.info("Creating dir "+dir.getName());
|
||||||
|
if(!dir.mkdirs()) throw new RuntimeException("Can not create dir "+dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.server.servlet.loggers;
|
||||||
|
|
||||||
|
import org.gcube.application.framework.accesslogger.model.AccessLogEntry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an access log entry for creating a new Template
|
||||||
|
*/
|
||||||
|
public class CreateReportLogEntry extends AccessLogEntry{
|
||||||
|
|
||||||
|
private String templateName;
|
||||||
|
|
||||||
|
private String templateId;
|
||||||
|
|
||||||
|
public CreateReportLogEntry(String templateName, String templateId) {
|
||||||
|
super("Create_Report");
|
||||||
|
this.templateName = replaceReservedChars(templateName);
|
||||||
|
this.templateId = replaceReservedChars(templateId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getLogMessage() {
|
||||||
|
String message = "Name = " + templateName + "|ID = " + templateId;
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.server.servlet.loggers;
|
||||||
|
|
||||||
|
import org.gcube.application.framework.accesslogger.model.AccessLogEntry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an access log entry for creating a new Template
|
||||||
|
*/
|
||||||
|
public class GenerateReportLogEntry extends AccessLogEntry{
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String mimetype;
|
||||||
|
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
public GenerateReportLogEntry(String name, String mimetype, String type) {
|
||||||
|
super("Generate_Report_Output");
|
||||||
|
this.name = replaceReservedChars(name);
|
||||||
|
this.mimetype = replaceReservedChars(mimetype);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getLogMessage() {
|
||||||
|
String message = "Name = " + name + "|MIMETYPE = " + mimetype+ "|TYPE = " + type;
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.server.servlet.loggers;
|
||||||
|
|
||||||
|
import org.gcube.application.framework.accesslogger.model.AccessLogEntry;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an access log entry for creating a new Template
|
||||||
|
*/
|
||||||
|
public class OpenReportLogEntry extends AccessLogEntry{
|
||||||
|
|
||||||
|
private String templateName;
|
||||||
|
|
||||||
|
private String templateId;
|
||||||
|
|
||||||
|
public OpenReportLogEntry(String templateName, String templateId) {
|
||||||
|
super("Open_Report");
|
||||||
|
this.templateName = replaceReservedChars(templateName);
|
||||||
|
this.templateId = replaceReservedChars(templateId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getLogMessage() {
|
||||||
|
String message = "Name = " + templateName + "|ID = " + templateId;
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.server.servlet.loggers;
|
||||||
|
|
||||||
|
import org.gcube.application.framework.accesslogger.model.AccessLogEntry;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an access log entry for creating a new Template
|
||||||
|
*/
|
||||||
|
public class OpenWorkflowLogEntry extends AccessLogEntry{
|
||||||
|
|
||||||
|
private String templateName;
|
||||||
|
private String author;
|
||||||
|
private String templateId;
|
||||||
|
|
||||||
|
public OpenWorkflowLogEntry(String templateName, String templateId, String author) {
|
||||||
|
super("Open_Workflow_Report");
|
||||||
|
this.author = author;
|
||||||
|
this.templateName = replaceReservedChars(templateName);
|
||||||
|
this.templateId = replaceReservedChars(templateId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getLogMessage() {
|
||||||
|
String message = "Name = " + templateName + "|ID = " + templateId+ "|AUTHOR = " + author;
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.server.servlet.loggers;
|
||||||
|
|
||||||
|
import org.gcube.application.framework.accesslogger.model.AccessLogEntry;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an access log entry for creating a new Template
|
||||||
|
*/
|
||||||
|
public class SaveWorkflowLogEntry extends AccessLogEntry{
|
||||||
|
|
||||||
|
private String templateName;
|
||||||
|
private String author;
|
||||||
|
private String templateId;
|
||||||
|
|
||||||
|
public SaveWorkflowLogEntry(String templateName, String templateId, String author) {
|
||||||
|
super("Save_Workflow_Report");
|
||||||
|
this.author = author;
|
||||||
|
this.templateName = replaceReservedChars(templateName);
|
||||||
|
this.templateId = replaceReservedChars(templateId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getLogMessage() {
|
||||||
|
String message = "Name = " + templateName + "|ID = " + templateId+ "|AUTHOR = " + author;
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
package org.gcube.portlets.user.reportgenerator.shared;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@SuppressWarnings("serial")
|
||||||
|
public class SessionInfo implements Serializable {
|
||||||
|
|
||||||
|
private String username;
|
||||||
|
private String scope;
|
||||||
|
private Boolean isWorkflowDocument;
|
||||||
|
private Boolean isEditable;
|
||||||
|
|
||||||
|
public SessionInfo() { }
|
||||||
|
|
||||||
|
public SessionInfo(String username, String scope,
|
||||||
|
Boolean isWorkflowDocument, Boolean canEdit) {
|
||||||
|
super();
|
||||||
|
this.username = username;
|
||||||
|
this.scope = scope;
|
||||||
|
this.isWorkflowDocument = isWorkflowDocument;
|
||||||
|
this.isEditable = canEdit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUsername() {
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUsername(String username) {
|
||||||
|
this.username = username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getScope() {
|
||||||
|
return scope;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setScope(String scope) {
|
||||||
|
this.scope = scope;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean isWorkflowDocument() {
|
||||||
|
return isWorkflowDocument;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIsWorkflowDocument(Boolean isWorkflowDocument) {
|
||||||
|
this.isWorkflowDocument = isWorkflowDocument;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean isEditable() {
|
||||||
|
return isEditable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEditable(Boolean canEdit) {
|
||||||
|
this.isEditable = canEdit;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module rename-to='reports'>
|
||||||
|
<!-- Inherit the core Web Toolkit stuff. -->
|
||||||
|
<inherits name='com.google.gwt.user.User' />
|
||||||
|
|
||||||
|
<inherits name='org.gcube.portlets.user.workspace.WorkspaceTree' />
|
||||||
|
<inherits name='org.gcube.portlets.d4sreporting.common.Reporting' />
|
||||||
|
<inherits name='org.gcube.portlets.user.gcubewidgets.WidgetFactory' />
|
||||||
|
<!-- inherits name='org.gube.portlets.user.reporting.fimesexporter.Fimesexporter' /-->
|
||||||
|
<inherits name='org.gcube.portlets.user.guidedtour.GuidedTour' />
|
||||||
|
|
||||||
|
<!-- To Comment out -->
|
||||||
|
<set-property name="user.agent" value="gecko1_8" />
|
||||||
|
|
||||||
|
<inherits name='org.gcube.portlets.user.workspace.lighttree.WorkspacePortletLightTree' />
|
||||||
|
|
||||||
|
<!-- Specify the app entry point class. -->
|
||||||
|
<entry-point
|
||||||
|
class='org.gcube.portlets.user.reportgenerator.client.ReportGenerator' />
|
||||||
|
|
||||||
|
<!-- Specify the paths for translatable code -->
|
||||||
|
<source path='client' />
|
||||||
|
<source path='shared' />
|
||||||
|
|
||||||
|
</module>
|