Compare commits

..

21 Commits

Author SHA1 Message Date
Massimiliano Assante d98116cc37 ready to release 2022-09-22 17:15:21 +02:00
Massimiliano Assante 257141f581 updated version to 2.6 2022-09-22 17:14:53 +02:00
Massimiliano Assante cdb2e85967 - Moved to OpenJDK11
- Moved to GWT 2.9.0
2022-09-22 17:12:32 +02:00
Massimiliano Assante caa2570450 fixed bug #23898 2022-09-22 17:04:13 +02:00
Massimiliano Assante cfeef31ec1 ready to release 2022-06-16 15:44:02 +02:00
Massimiliano Assante 0eb9e7602f - Released for removal HL from portal 2022-06-16 15:43:38 +02:00
Massimiliano Assante d73f4944b6 ready to release 2021-09-09 17:15:03 +02:00
Massimiliano Assante e8cc5753bc - Fixed attachment issue #21972 2021-09-09 17:14:42 +02:00
Massimiliano Assante 40ac5d0d4e alpha test worked 2021-09-09 17:08:28 +02:00
Massimiliano Assante 23c2dedffb after Lucio suggestion 2021-09-09 16:32:48 +02:00
Massimiliano Assante 46e5e2a787 messages with attachment support 2021-09-08 10:42:50 +02:00
Massimiliano Assante 3e624e687a Temporarely removed possibility to add attachments 2021-07-28 17:47:49 +02:00
Massimiliano Assante 5ebf43429f updated css containing a syntax error 2021-07-02 16:47:41 +02:00
Massimiliano Assante ca11b0411e updated bom 2021-06-24 17:35:14 +02:00
Massimiliano Assante 94ee25e07d updated bom in pom 2021-06-22 10:50:08 +02:00
Massimiliano Assante 2b711b4de6 fixed pom 2021-06-22 10:35:45 +02:00
Massimiliano Assante 2a373db9ad Removed HomeLibrary dependency and replace with storage hub one 2021-06-22 10:33:15 +02:00
Massimiliano Assante 68059a04df minor change 2021-05-25 17:46:27 +02:00
Massimiliano Assante 57e20e7304 updated changelog 2021-04-14 15:48:35 +02:00
Massimiliano Assante 68e5119f79 added changelog md 2021-04-14 15:48:13 +02:00
lucio.lelii 1c3d93ebba solved bug:
-right panel slow down when the message were more then 1000
2021-04-13 18:50:15 +02:00
35 changed files with 632 additions and 883 deletions

View File

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<classpath> <classpath>
<classpathentry kind="src" output="target/messages-2.5.0-SNAPSHOT/WEB-INF/classes" path="src/main/java"> <classpathentry kind="src" output="target/messages-2.5.3-SNAPSHOT/WEB-INF/classes" path="src/main/java">
<attributes> <attributes>
<attribute name="optional" value="true"/> <attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry excluding="**" kind="src" output="target/messages-2.5.0-SNAPSHOT/WEB-INF/classes" path="src/main/resources"> <classpathentry excluding="**" kind="src" output="target/messages-2.5.3-SNAPSHOT/WEB-INF/classes" path="src/main/resources">
<attributes> <attributes>
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
@ -22,19 +22,19 @@
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/> <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="src" output="target/messages-2.5.0-SNAPSHOT/WEB-INF/classes" path="target/generated-sources/gwt">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="com.gwtplugins.gwt.eclipse.core.GWT_CONTAINER"/> <classpathentry kind="con" path="com.gwtplugins.gwt.eclipse.core.GWT_CONTAINER"/>
<classpathentry kind="src" output="target/test-classes" path="src/test/java"> <classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes> <attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/> <attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/messages-2.5.3-SNAPSHOT/WEB-INF/classes" path="target/generated-sources/gwt">
<attributes>
<attribute name="optional" value="true"/> <attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="output" path="target/messages-2.5.0-SNAPSHOT/WEB-INF/classes"/> <classpathentry kind="output" path="target/messages-2.5.3-SNAPSHOT/WEB-INF/classes"/>
</classpath> </classpath>

View File

@ -1,5 +1,4 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
lastWarOutDir=${webappDirectory} lastWarOutDir=${webappDirectory}
launchConfigExternalUrlPrefix=
warSrcDir=src/main/webapp warSrcDir=src/main/webapp
warSrcDirIsOutput=false warSrcDirIsOutput=false

View File

@ -1,6 +1,5 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
encoding//src/main/java=UTF-8 encoding//src/main/java=UTF-8
encoding//src/main/resources=UTF-8 encoding//src/main/resources=UTF-8
encoding//src/test/java=UTF-8
encoding//target/generated-sources/gwt=UTF-8 encoding//target/generated-sources/gwt=UTF-8
encoding/<project>=UTF-8 encoding/<project>=UTF-8

View File

@ -1,112 +1,11 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.APILeak=warning
org.eclipse.jdt.core.compiler.problem.annotatedTypeArgumentToUnannotated=info
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
org.eclipse.jdt.core.compiler.problem.deadCode=warning
org.eclipse.jdt.core.compiler.problem.deprecation=warning
org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
org.eclipse.jdt.core.compiler.problem.nullReference=warning
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
org.eclipse.jdt.core.compiler.problem.suppressWarningsNotFullyAnalysed=info
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedImport=warning
org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=1.8 org.eclipse.jdt.core.compiler.source=1.8

View File

@ -1,31 +1,130 @@
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0"> <?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="messages-2.5.0-SNAPSHOT">
<wb-module deploy-name="messages">
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/> <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="/" 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="/src/main/java"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/target/generated-sources/gwt"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/target/generated-sources/gwt"/>
<property name="java-output-path" value="/message-conversations/target/message-conversations-0.0.1-SNAPSHOT/WEB-INF/classes"/> <property name="java-output-path" value="/message-conversations/target/message-conversations-0.0.1-SNAPSHOT/WEB-INF/classes"/>
<property name="context-root" value="messages"/> <property name="context-root" value="messages"/>
</wb-module> </wb-module>
</project-modules> </project-modules>

55
CHANGELOG.md Normal file
View File

@ -0,0 +1,55 @@
# Changelog for Messages Portlet
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [v2.6.0] - 2022-09-22
- Fix Bug #23898: open with email addresse preset is not working anymore
- Moved to OpenJDK11
- Moved to GWT 2.9.0
## [v2.5.2] - 2022-06-16
- Released for removal HL from portal
## [v2.5.1] - 2021-09-09
- Fixed attachment issue #21972
## [v2.5.0] - 2021-07-28
- Ported to git
- Remove HomeLibrary dependency and replace with storage hub one
- Temporarely removed possibility to add attachments
## [v2.4.0] - 2019-10-25
- Bug #17876 the message menu isn't fully displayed if there is only one message or no other messages below
- Incident #17778 direct download attachment does not work
## [v2.3.0] - 2019-02-28
- Feature #10068, Request for enhancement: new Messages is error prone and challenging to use
- Feature #16194, Isolate Gateway user list in Messages
## [v2.1.0] - 2018-06-14
- Updated Workspace Explorer dependency
- Added support for SendTo
## [v2.0.0] -2 017-09-21
- Improved look and feel
- Responsive, works on mobile
## [v1.0.0] - 2013-01-13
- First release

26
FUNDING.md Normal file
View File

@ -0,0 +1,26 @@
# Acknowledgments
The projects leading to this software have received funding from a series of European Union programmes including:
- the Sixth Framework Programme for Research and Technological Development
- [DILIGENT](https://cordis.europa.eu/project/id/004260) (grant no. 004260).
- the Seventh Framework Programme for research, technological development and demonstration
- [D4Science](https://cordis.europa.eu/project/id/212488) (grant no. 212488);
- [D4Science-II](https://cordis.europa.eu/project/id/239019) (grant no.239019);
- [ENVRI](https://cordis.europa.eu/project/id/283465) (grant no. 283465);
- [iMarine](https://cordis.europa.eu/project/id/283644) (grant no. 283644);
- [EUBrazilOpenBio](https://cordis.europa.eu/project/id/288754) (grant no. 288754).
- the H2020 research and innovation programme
- [SoBigData](https://cordis.europa.eu/project/id/654024) (grant no. 654024);
- [PARTHENOS](https://cordis.europa.eu/project/id/654119) (grant no. 654119);
- [EGI-Engage](https://cordis.europa.eu/project/id/654142) (grant no. 654142);
- [ENVRI PLUS](https://cordis.europa.eu/project/id/654182) (grant no. 654182);
- [BlueBRIDGE](https://cordis.europa.eu/project/id/675680) (grant no. 675680);
- [PerformFISH](https://cordis.europa.eu/project/id/727610) (grant no. 727610);
- [AGINFRA PLUS](https://cordis.europa.eu/project/id/731001) (grant no. 731001);
- [DESIRA](https://cordis.europa.eu/project/id/818194) (grant no. 818194);
- [ARIADNEplus](https://cordis.europa.eu/project/id/823914) (grant no. 823914);
- [RISIS 2](https://cordis.europa.eu/project/id/824091) (grant no. 824091);
- [EOSC-Pillar](https://cordis.europa.eu/project/id/857650) (grant no. 857650);
- [Blue Cloud](https://cordis.europa.eu/project/id/862409) (grant no. 862409);
- [SoBigData-PlusPlus](https://cordis.europa.eu/project/id/871042) (grant no. 871042);

View File

@ -20,29 +20,20 @@ See [Releases](https://code-repo.d4science.org/gCubeSystem/Messages/releases).
## Authors ## Authors
* **Massimiliano Assante** - [ISTI-CNR Infrascience Group](http://nemis.isti.cnr.it/groups/infrascience) * **Massimiliano Assante** ([ORCID](https://orcid.org/0000-0002-3761-1492)) - [ISTI-CNR Infrascience Group](https://www.isti.cnr.it/People/M.Assante)
## Maintainers ## Maintainers
* **Massimiliano Assante** - [ISTI-CNR Infrascience Group](http://nemis.isti.cnr.it/groups/infrascience) * **Massimiliano Assante** ([ORCID](https://orcid.org/0000-0002-3761-1492)) - [ISTI-CNR Infrascience Group](https://www.isti.cnr.it/People/M.Assante)
## License ## License
This project is licensed under the EUPL V.1.1 License - see the [LICENSE.md](LICENSE.md) file for details. This project is licensed under the EUPL V.1.1 License - see the [LICENSE.md](LICENSE.md) file for details.
## About the gCube Framework ## About the gCube Framework
This software is part of the [gCubeFramework](https://www.gcube-system.org/ "gCubeFramework"): an This software is part of the [gCubeFramework](https://www.gcube-system.org/ "gCubeFramework"): an
open-source software toolkit used for building and operating Hybrid Data open-source software toolkit used for building and operating Hybrid Data
Infrastructures enabling the dynamic deployment of Virtual Research Environments Infrastructures enabling the dynamic deployment of Virtual Research Environments
by favouring the realisation of reuse oriented policies. by favouring the realisation of reuse oriented policies.
The projects leading to this software have received funding from a series of European Union programmes including: The projects leading to this software have received funding from a series of European Union programmes see [FUNDING.md](FUNDING.md)
- the Sixth Framework Programme for Research and Technological Development
- DILIGENT (grant no. 004260);
- the Seventh Framework Programme for research, technological development and demonstration
- D4Science (grant no. 212488), D4Science-II (grant no.239019), ENVRI (grant no. 283465), EUBrazilOpenBio (grant no. 288754), iMarine(grant no. 283644);
- the H2020 research and innovation programme
- BlueBRIDGE (grant no. 675680), EGIEngage (grant no. 654142), ENVRIplus (grant no. 654182), Parthenos (grant no. 654119), SoBigData (grant no. 654024),DESIRA (grant no. 818194), ARIADNEplus (grant no. 823914), RISIS2 (grant no. 824091), PerformFish (grant no. 727610), AGINFRAplus (grant no. 731001);

View File

@ -1 +0,0 @@
${gcube.license}

View File

@ -1,61 +0,0 @@
The gCube System - ${name}
--------------------------------------------------
${description}
${gcube.description}
${gcube.funding}
Version
--------------------------------------------------
${version} (${buildDate})
Please see the file named "changelog.xml" in this directory for the release notes.
Authors
--------------------------------------------------
* Massimiliano Assante (massimiliano.assante-AT-isti.cnr.it), Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" - CNR, Pisa (Italy).
Maintainers
-----------
* Francesco Mangiacrapa (francesco.mangiacrapa-AT-isti.cnr.it), Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" - CNR, Pisa (Italy).
* Massimiliano Assante (massimiliano.assante-AT-isti.cnr.it), Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" - CNR, Pisa (Italy).
Download information
--------------------------------------------------
Source code is available from SVN:
${scm.url}
Binaries can be downloaded from the gCube website:
${gcube.website}
Installation
--------------------------------------------------
Documentation
--------------------------------------------------
Documentation is available on-line in the gCube Wiki:
${gcube.wikiRoot}/Workspace
Support
--------------------------------------------------
Bugs and support requests can be reported in the gCube issue tracking tool:
${gcube.issueTracking}
Licensing
--------------------------------------------------
This software is licensed under the terms you may find in the file named "LICENSE" in this directory.

View File

@ -1,65 +0,0 @@
<ReleaseNotes>
<Changeset component="org.gcube.portlets-user.messages.2-4-0"
date="2019-10-25">
<Change>Bug #17876 the message menu isn't fully displayed if there is only one message or no other messages below</Change>
<Change>Incident #17778 direct download attachment does not work</Change>
</Changeset>
<Changeset component="org.gcube.portlets-user.messages.2-3-0"
date="2019-02-28">
<Change>Feature #10068, Request for enhancement: new Messages is error prone and challenging to use</Change>
<Change>Feature #16194, Isolate Gateway user list in Messages</Change>
</Changeset>
<Changeset component="org.gcube.portlets-user.messages.2-1-0"
date="2018-06-14">
<Change>Updated Workspace Explorer dependency</Change>
<Change>Added support for SendTo</Change>
</Changeset>
<Changeset component="org.gcube.portlets-user.messages.2-0-0"
date="2017-09-21">
<Change>Improved look and feel</Change>
<Change>Responsive, works on mobile</Change>
</Changeset>
<Changeset component="org.gcube.portlets-user.messages.1-3-0"
date="2016-11-28">
<Change>Removed ASL Session</Change>
</Changeset>
<Changeset component="org.gcube.portlets-user.messages.0-8-0"
date="2015-10-08">
<Change>[Feature #879] Message Improvements</Change>
</Changeset>
<Changeset component="org.gcube.portlets-user.messages.0-7-0"
date="2015-06-05">
<Change>Upgraded to GWT 2.7</Change>
<Change>[Feature #129] Porting to HL 2.0</Change>
</Changeset>
<Changeset component="org.gcube.portlets-user.messages.0-6-0"
date="2013-06-04">
<Change>Fixed bug on "reply all"</Change>
<Change>Changed icons</Change>
</Changeset>
<Changeset component="org.gcube.portlets-user.messages.0-5-0"
date="2013-06-04">
<Change>Updated pom to support new gcube core (gcube release 3.2)
</Change>
</Changeset>
<Changeset component="org.gcube.portlets-user.messages.0-4-0"
date="2013-10-21">
<Change>#Ticket 2223. This project was enhancements to gwt 2.5.1
</Change>
<Change>GCF dependency was removed</Change>
</Changeset>
<Changeset component="org.gcube.portlets-user.messages.0-3-0"
date="2013-07-08">
<Change>Updated show attachments: this functionality now calls the
servlet contained in ws-tree
</Change>
<Change>Error management for attachments: it was added redirect
functionality in download servlet
</Change>
<Change>Fixed Ticket #1348</Change>
</Changeset>
<Changeset component="org.gcube.portlets-user.messages.0-1-0"
date="2013-01-13">
<Change>First Release</Change>
</Changeset>
</ReleaseNotes>

View File

@ -1,32 +0,0 @@
<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>changelog.xml</include>
<include>profile.xml</include>
</includes>
<fileMode>755</fileMode>
<filtered>true</filtered>
</fileSet>
</fileSets>
<files>
<file>
<source>target/${build.finalName}.${project.packaging}</source>
<outputDirectory>/${artifactId}</outputDirectory>
</file>
</files>
</assembly>

View File

@ -1,25 +0,0 @@
<?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>

71
pom.xml
View File

@ -13,7 +13,7 @@
<groupId>org.gcube.portets.user</groupId> <groupId>org.gcube.portets.user</groupId>
<artifactId>messages</artifactId> <artifactId>messages</artifactId>
<packaging>war</packaging> <packaging>war</packaging>
<version>2.5.0-SNAPSHOT</version> <version>2.6.0</version>
<description> <description>
gCube Messages Portlet for exchanging messages with other users. gCube Messages Portlet for exchanging messages with other users.
</description> </description>
@ -25,11 +25,7 @@
<properties> <properties>
<!-- Convenience property to set the GWT version --> <!-- Convenience property to set the GWT version -->
<gwt.version>2.8.2</gwt.version> <gwt.version>2.9.0</gwt.version>
<distroDirectory>distro</distroDirectory>
<!-- GWT 2.8 requires 1.8 -->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<gwt-material.version>2.0.1</gwt-material.version> <gwt-material.version>2.0.1</gwt-material.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
@ -39,7 +35,7 @@
<dependency> <dependency>
<groupId>org.gcube.distribution</groupId> <groupId>org.gcube.distribution</groupId>
<artifactId>maven-portal-bom</artifactId> <artifactId>maven-portal-bom</artifactId>
<version>3.6.1-SNAPSHOT</version> <version>3.6.4</version>
<type>pom</type> <type>pom</type>
<scope>import</scope> <scope>import</scope>
</dependency> </dependency>
@ -102,6 +98,12 @@
<artifactId>xercesImpl</artifactId> <artifactId>xercesImpl</artifactId>
<version>2.9.1</version> <version>2.9.1</version>
</dependency> </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
<scope>provided</scope>
</dependency>
<dependency> <dependency>
<groupId>org.gcube.portlets.widgets</groupId> <groupId>org.gcube.portlets.widgets</groupId>
<artifactId>workspace-explorer</artifactId> <artifactId>workspace-explorer</artifactId>
@ -161,11 +163,6 @@
<artifactId>gwt-material-addins</artifactId> <artifactId>gwt-material-addins</artifactId>
<version>${gwt-material.version}</version> <version>${gwt-material.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.github.gwtmaterialdesign</groupId>
<artifactId>gwt-material-table</artifactId>
<version>${gwt-material.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.gcube.portal</groupId> <groupId>org.gcube.portal</groupId>
<artifactId>notifications-common-library</artifactId> <artifactId>notifications-common-library</artifactId>
@ -200,12 +197,11 @@
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId> <artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
<version>1.7.5</version> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>junit</groupId> <groupId>junit</groupId>
@ -246,14 +242,6 @@
<hostedWebapp>${webappDirectory}</hostedWebapp> <hostedWebapp>${webappDirectory}</hostedWebapp>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0-M1</version>
<configuration>
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
</plugin>
<!-- Copy static web files before executing gwt:run --> <!-- Copy static web files before executing gwt:run -->
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
@ -279,51 +267,24 @@
<target>${maven.compiler.target}</target> <target>${maven.compiler.target}</target>
</configuration> </configuration>
</plugin> </plugin>
<!-- SA Plugin -->
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<configuration> <configuration>
<descriptors> <additionalparam>-Xdoclint:none</additionalparam>
<descriptor>${distroDirectory}/descriptor.xml</descriptor> <additionalJOption>-Xdoclint:none</additionalJOption>
</descriptors>
</configuration> </configuration>
<version>3.1.0</version>
<executions> <executions>
<execution> <execution>
<id>servicearchive</id> <id>generate-doc</id>
<phase>install</phase> <phase>install</phase>
<goals> <goals>
<goal>single</goal> <goal>jar</goal>
</goals> </goals>
</execution> </execution>
</executions> </executions>
</plugin> </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> </plugins>
</build> </build>

View File

@ -4,7 +4,6 @@ import java.util.ArrayList;
import org.gcube.portets.user.message_conversations.shared.ConvMessage; import org.gcube.portets.user.message_conversations.shared.ConvMessage;
import org.gcube.portets.user.message_conversations.shared.CurrUserAndPortalUsersWrapper; import org.gcube.portets.user.message_conversations.shared.CurrUserAndPortalUsersWrapper;
import org.gcube.portets.user.message_conversations.shared.MessagesWindow;
import org.gcube.portets.user.message_conversations.shared.WSUser; import org.gcube.portets.user.message_conversations.shared.WSUser;
import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteService;
@ -14,7 +13,6 @@ import com.google.gwt.user.client.rpc.RemoteService;
*/ */
public interface MessageService extends RemoteService { public interface MessageService extends RemoteService {
MessagesWindow getMessagesWindows(boolean sent, int limit, int offset);
ArrayList<ConvMessage> getMessages(boolean sent); ArrayList<ConvMessage> getMessages(boolean sent);
ConvMessage getMessageById(String messageId, boolean sent); ConvMessage getMessageById(String messageId, boolean sent);
CurrUserAndPortalUsersWrapper getWorkspaceUsers(); CurrUserAndPortalUsersWrapper getWorkspaceUsers();

View File

@ -1,49 +1,18 @@
package org.gcube.portets.user.message_conversations.client.autocomplete; package org.gcube.portets.user.message_conversations.client.autocomplete;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Document;
import com.google.gwt.event.dom.client.BlurEvent; import com.google.gwt.event.dom.client.*;
import com.google.gwt.event.dom.client.BlurHandler; import com.google.gwt.event.logical.shared.*;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.event.logical.shared.HasSelectionHandlers;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.*;
import com.google.gwt.user.client.ui.SuggestBox;
import com.google.gwt.user.client.ui.SuggestOracle;
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion; import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import gwt.material.design.addins.client.MaterialAddins; import gwt.material.design.addins.client.MaterialAddins;
import gwt.material.design.addins.client.autocomplete.constants.AutocompleteType; import gwt.material.design.addins.client.autocomplete.constants.AutocompleteType;
import gwt.material.design.addins.client.base.constants.AddinsCssName; import gwt.material.design.addins.client.base.constants.AddinsCssName;
import gwt.material.design.client.MaterialDesignBase; import gwt.material.design.client.MaterialDesignBase;
import gwt.material.design.client.base.AbstractValueWidget; import gwt.material.design.client.base.*;
import gwt.material.design.client.base.HasPlaceholder; import gwt.material.design.client.base.mixin.*;
import gwt.material.design.client.base.HasProgress;
import gwt.material.design.client.base.HasReadOnly;
import gwt.material.design.client.base.HasType;
import gwt.material.design.client.base.MaterialWidget;
import gwt.material.design.client.base.mixin.CssTypeMixin;
import gwt.material.design.client.base.mixin.FocusableMixin;
import gwt.material.design.client.base.mixin.ProgressMixin;
import gwt.material.design.client.base.mixin.ReadOnlyMixin;
import gwt.material.design.client.constants.CssName; import gwt.material.design.client.constants.CssName;
import gwt.material.design.client.constants.IconType; import gwt.material.design.client.constants.IconType;
import gwt.material.design.client.constants.ProgressType; import gwt.material.design.client.constants.ProgressType;
@ -54,6 +23,9 @@ import gwt.material.design.client.ui.html.Label;
import gwt.material.design.client.ui.html.ListItem; import gwt.material.design.client.ui.html.ListItem;
import gwt.material.design.client.ui.html.UnorderedList; import gwt.material.design.client.ui.html.UnorderedList;
import java.util.*;
import java.util.Map.Entry;
/** /**
* *
* @author kevzlou7979 * @author kevzlou7979
@ -90,7 +62,8 @@ public class MaterialAutoComplete extends AbstractValueWidget<List<? extends Sug
private boolean directInputAllowed = true; private boolean directInputAllowed = true;
private MaterialChipProvider chipProvider = new DefaultMaterialChipProvider(); private MaterialChipProvider chipProvider = new DefaultMaterialChipProvider();
private final ErrorMixin<AbstractValueWidget, MaterialLabel> errorMixin = new ErrorMixin<>(this, errorLabel, list, placeholderLabel);
private FocusableMixin<MaterialWidget> focusableMixin; private FocusableMixin<MaterialWidget> focusableMixin;
private ReadOnlyMixin<MaterialAutoComplete, TextBox> readOnlyMixin; private ReadOnlyMixin<MaterialAutoComplete, TextBox> readOnlyMixin;
@ -711,7 +684,11 @@ public class MaterialAutoComplete extends AbstractValueWidget<List<? extends Sug
itemBox.setEnabled(enabled); itemBox.setEnabled(enabled);
} }
@Override
public ErrorMixin<AbstractValueWidget, MaterialLabel> getErrorMixin() {
return errorMixin;
}
public Label getPlaceholderLabel() { public Label getPlaceholderLabel() {
return placeholderLabel; return placeholderLabel;
} }

View File

@ -12,12 +12,7 @@ import org.gcube.portets.user.message_conversations.client.ui.resources.Messages
import org.gcube.portets.user.message_conversations.shared.ConvMessage; import org.gcube.portets.user.message_conversations.shared.ConvMessage;
import org.gcube.portets.user.message_conversations.shared.MessageUserModel; import org.gcube.portets.user.message_conversations.shared.MessageUserModel;
import com.github.gwtbootstrap.client.ui.IconCell;
import com.github.gwtbootstrap.client.ui.constants.IconSize;
import com.google.gwt.cell.client.CheckboxCell;
import com.google.gwt.cell.client.TextCell;
import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
/* /*
* #%L * #%L
@ -43,16 +38,9 @@ import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.logical.shared.ResizeEvent; import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler; import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.RowStyles;
import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
import com.google.gwt.user.cellview.client.HasKeyboardPagingPolicy.KeyboardPagingPolicy;
import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy;
import com.google.gwt.user.client.Window; import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget; import com.google.gwt.user.client.rpc.ServiceDefTarget;
@ -62,22 +50,18 @@ import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.Widget; import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.DefaultSelectionEventManager;
import com.google.gwt.view.client.MultiSelectionModel;
import com.google.gwt.view.client.SelectionModel;
import gwt.material.design.client.constants.IconType; import gwt.material.design.client.constants.IconType;
import gwt.material.design.client.constants.Position; import gwt.material.design.client.constants.Position;
import gwt.material.design.client.data.DataSource;
import gwt.material.design.client.ui.MaterialAnchorButton; import gwt.material.design.client.ui.MaterialAnchorButton;
import gwt.material.design.client.ui.MaterialBadge; import gwt.material.design.client.ui.MaterialBadge;
import gwt.material.design.client.ui.MaterialFAB; import gwt.material.design.client.ui.MaterialFAB;
import gwt.material.design.client.ui.MaterialLink; import gwt.material.design.client.ui.MaterialLink;
import gwt.material.design.client.ui.MaterialProgress; import gwt.material.design.client.ui.MaterialProgress;
import gwt.material.design.client.ui.MaterialRow;
import gwt.material.design.client.ui.MaterialToast; import gwt.material.design.client.ui.MaterialToast;
import gwt.material.design.client.ui.animate.MaterialAnimation; import gwt.material.design.client.ui.animate.MaterialAnimation;
import gwt.material.design.client.ui.animate.Transition; import gwt.material.design.client.ui.animate.Transition;
/** /**
* @author Massimiliano Assante, CNR-ISTI * @author Massimiliano Assante, CNR-ISTI
*/ */
@ -98,28 +82,22 @@ public class ApplicationView extends Composite {
@UiField ScrollPanel scrollerPanel; @UiField ScrollPanel scrollerPanel;
//@UiField MaterialRow rightPanel; @UiField MaterialRow rightPanel;
@UiField HTMLPanel htmlPanel; @UiField HTMLPanel htmlPanel;
@UiField MaterialFAB FAB; @UiField MaterialFAB FAB;
@UiField MaterialLink menu, newMessage, switcher; @UiField MaterialLink menu, newMessage, switcher;
@UiField MaterialAnchorButton replyAll, reply, forward; @UiField MaterialAnchorButton replyAll, reply, forward;
@UiField MaterialProgress messageLoader; @UiField MaterialProgress messageLoader, messagesLoader;
@UiField MaterialBadge badge; @UiField MaterialBadge badge;
@UiField ShowMorePagerPanel pagerPanel; @UiField ShowMorePagerPanel pagerPanel;
CellTable<ConvMessage> sentCellList; MyMaterialCollection<ConvMessage> messagesCollection;
MessageProvider mp;
DataSource<ConvMessage> dataSource = new MessageDataSource(false, convService);
//InfiniteScrollView scrollView = new InfiniteScrollView(dataSource);
private ConvMessage currentSelected; private ConvMessage currentSelected;
private DisplayMessage displayMessage; private DisplayMessage displayMessage;
private WriteMessage newMessageDisplay; private WriteMessage newMessageDisplay;
private boolean isSendTo = false; private boolean isSendTo = false;
public ApplicationView(String... sendToUserNames) { public ApplicationView(String... sendToUserNames) {
initWidget(uiBinder.createAndBindUi(this)); initWidget(uiBinder.createAndBindUi(this));
((ServiceDefTarget) convService).setServiceEntryPoint(Utils.getServiceEntryPoint()); ((ServiceDefTarget) convService).setServiceEntryPoint(Utils.getServiceEntryPoint());
@ -148,96 +126,16 @@ public class ApplicationView extends Composite {
isSendTo = true; isSendTo = true;
messageLoader.setVisible(false); messageLoader.setVisible(false);
} }
readUserMessages(false, isSendTo);
GWT.log("application initialized");
sentCellList = new CellTable<ConvMessage>(ConvMessage.KEY_PROVIDER);
sentCellList.setPageSize(100);
sentCellList.setKeyboardPagingPolicy(KeyboardPagingPolicy.INCREASE_RANGE);
sentCellList.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.BOUND_TO_SELECTION);
sentCellList.setWidth("100%", false);
readUserMessages(false, isSendTo);
} }
/**
* Add the columns to the table.
*/
private void initTableColumns(CellTable<ConvMessage> cellTable
,final SelectionModel<ConvMessage> selectionModel /*,
ListHandler<ConvMessage> sortHandler*/) {
// Checkbox column. This table will uses a checkbox column for selection.
// Alternatively, you can call cellTable.setSelectionEnabled(true) to enable
// mouse selection.
cellTable.setRowStyles(new RowStyles<ConvMessage>() {
@Override
public String getStyleNames(ConvMessage row, int rowIndex) {
if (row.isRead())
return "{style.read}";
else return "";
}
});
Column<ConvMessage, Boolean> checkColumn = new Column<ConvMessage, Boolean>(
new CheckboxCell(true, false)) {
@Override
public Boolean getValue(ConvMessage object) {
// Get the value from the selection model.
return selectionModel.isSelected(object);
//return false;
}
};
cellTable.addColumn(checkColumn, SafeHtmlUtils.fromSafeConstant("</br>"));
cellTable.setColumnWidth(checkColumn, 80, Unit.PX);
// From.
Column<ConvMessage, String> fromColumn = new Column<ConvMessage, String>(
new TextCell()) {
@Override
public String getValue(ConvMessage object) {
return object.getOwner().getFullName();
}
};
cellTable.addColumn(fromColumn, "From");
cellTable.setColumnWidth(fromColumn, 40, Unit.PCT);
// Subject.
Column<ConvMessage, String> subjectColumn = new Column<ConvMessage, String>(
new TextCell()) {
@Override
public String getValue(ConvMessage object) {
return object.getSubject();
}
};
cellTable.addColumn(subjectColumn, "Subject");
cellTable.setColumnWidth(subjectColumn, 200, Unit.PCT);
// date.
Column<ConvMessage, String> dateColumn = new Column<ConvMessage, String>(
new TextCell()) {
@Override
public String getValue(ConvMessage object) {
return Utils.getFormatteDate(object.getDate());
}
};
cellTable.addColumn(dateColumn, "Date");
cellTable.setColumnWidth(subjectColumn, 20, Unit.PCT);
}
/** /**
* *
* @param sent * @param sent
* */
**/
public void readUserMessages(final boolean sent, boolean isSendTo) { public void readUserMessages(final boolean sent, boolean isSendTo) {
messagesLoader.setVisible(true);
convService.getMessages(sent, new AsyncCallback<ArrayList<ConvMessage>>() { convService.getMessages(sent, new AsyncCallback<ArrayList<ConvMessage>>() {
@Override @Override
public void onFailure(Throwable arg0) { public void onFailure(Throwable arg0) {
@ -247,35 +145,55 @@ public class ApplicationView extends Composite {
@Override @Override
public void onSuccess(ArrayList<ConvMessage> messages) { public void onSuccess(ArrayList<ConvMessage> messages) {
if (messages != null) { if (messages != null) {
totalMessages = messages.size(); showMessages(messages, sent);
mp = new MessageProvider(messages); if (!isSendTo) {
mp.addDataDisplay(sentCellList); if (messages.size() > 0)
readUserMessage(messages.get(0).getId(), sent);
// Add a selection model so we can select cells. else {
final SelectionModel<ConvMessage> selectionModel = new MultiSelectionModel<ConvMessage>(ConvMessage.KEY_PROVIDER); writeWelcomeMessage();
sentCellList.setSelectionModel(selectionModel, messageLoader.setVisible(false);
DefaultSelectionEventManager.<ConvMessage> createCheckboxManager()); }
}
initTableColumns(sentCellList, selectionModel);
pagerPanel.setDisplay(sentCellList);
pagerPanel.setIncrementSize(50);
messageLoader.setVisible(false);
readUserMessage(mp.getDataProvider().getList().get(0).getId(), sent);
} else { } else {
showErrorOccurred(); showErrorOccurred();
} }
} }
}); });
} }
private void showErrorOccurred() { private void showErrorOccurred() {
//messagesCollection.clear(); messagesLoader.setVisible(false);
messageLoader.setVisible(false); messageLoader.setVisible(false);
hideSidePanel(); hideSidePanel();
writeErrorMessage(); writeErrorMessage();
} }
/**
*
* @param messages
* @param sent
*/
public void showMessages(ArrayList<ConvMessage> messages, boolean sent) {
messagesLoader.setVisible(false);
int scrollerHeight = Window.getClientHeight() - 100;
scrollerPanel.setHeight(scrollerHeight+"px");
pagerPanel.setHeight(scrollerHeight+"px");
GWT.log("message returned are "+messages.size());
messagesCollection= new MyMaterialCollection<>(messages, c -> new MessageItem(c, messagesCollection, this, sent));
messagesCollection.init();
pagerPanel.setDisplay(messagesCollection);
for (ConvMessage convMessage : messages) {
if (! (sent || convMessage.isRead()))
unreadMessages++;
totalMessages++;
}
if (messages.size() > 0) {
GWT.log("message returned are "+messages.size());
MessageItem first = (MessageItem) messagesCollection.getChildrenList().get(0);
first.setSelected(true);
} else {
}
updateBadge(sent);
}
/** /**
* *
* @param sent * @param sent
@ -330,9 +248,8 @@ public class ApplicationView extends Composite {
displayMessage(messageId, sent); displayMessage(messageId, sent);
} }
} }
private void displayMessage(String messageId, final boolean sent) { private void displayMessage(String messageId, final boolean sent) {
messageLoader.setColor(Utils.getRandomColor());
messageLoader.setVisible(true); messageLoader.setVisible(true);
scrollerPanel.clear(); scrollerPanel.clear();
convService.getMessageById(messageId, toggleSwitch, new AsyncCallback<ConvMessage>() { convService.getMessageById(messageId, toggleSwitch, new AsyncCallback<ConvMessage>() {
@ -354,7 +271,7 @@ public class ApplicationView extends Composite {
} }
}); });
} }
private void updateBadge(boolean sent) { private void updateBadge(boolean sent) {
String badgeText = totalMessages + (sent ? " sent" : " (" + unreadMessages + " unread" + ")"); String badgeText = totalMessages + (sent ? " sent" : " (" + unreadMessages + " unread" + ")");
if (unreadMessages == 0 && !sent) if (unreadMessages == 0 && !sent)
@ -406,7 +323,8 @@ public class ApplicationView extends Composite {
private void displayNewOrReplyMessage() { private void displayNewOrReplyMessage() {
WRITING_MESSAGE = true; WRITING_MESSAGE = true;
FAB.setVisible(false); FAB.setVisible(false);
//messagesCollection.clearActive(); if (messagesCollection != null)
messagesCollection.clearActive();
scrollerPanel.clear(); scrollerPanel.clear();
scrollerPanel.add(newMessageDisplay); scrollerPanel.add(newMessageDisplay);
newMessageDisplay.setFocusOnUsersInput(); newMessageDisplay.setFocusOnUsersInput();
@ -417,7 +335,10 @@ public class ApplicationView extends Composite {
private void prepareNewMessageForSendTo(String[] usernamesToSendTo) { private void prepareNewMessageForSendTo(String[] usernamesToSendTo) {
newMessageDisplay = new WriteMessage(convService, this); newMessageDisplay = new WriteMessage(convService, this);
newMessageDisplay.setNewMessageForSendTo(usernamesToSendTo); newMessageDisplay.setNewMessageForSendTo(usernamesToSendTo);
GWT.log("setNewMessageForSendTo - Done");
displayNewOrReplyMessage(); displayNewOrReplyMessage();
GWT.log("displayNewOrReplyMessage - Done");
} }
@UiHandler("newMessage") @UiHandler("newMessage")
@ -467,6 +388,7 @@ public class ApplicationView extends Composite {
displayMessage.getMainPanel().setGrid("l8 m12 s12"); displayMessage.getMainPanel().setGrid("l8 m12 s12");
newMessageDisplay.getMainPanel().setLeft(350); newMessageDisplay.getMainPanel().setLeft(350);
newMessageDisplay.getMainPanel().setGrid("l8 m12 s12"); newMessageDisplay.getMainPanel().setGrid("l8 m12 s12");
rightPanel.setLeft(0);
toggle = ! toggle; toggle = ! toggle;
} }
@ -476,6 +398,7 @@ public class ApplicationView extends Composite {
newMessageDisplay.getMainPanel().setLeft(0); newMessageDisplay.getMainPanel().setLeft(0);
newMessageDisplay.getMainPanel().setGrid("l12 s12 m12"); newMessageDisplay.getMainPanel().setGrid("l12 s12 m12");
rightPanel.setLeft(-350);
toggle = ! toggle; toggle = ! toggle;
} }
@ -492,9 +415,9 @@ public class ApplicationView extends Composite {
FAB.setVisible(false); FAB.setVisible(false);
displayMessage.showMessage(welcomeMessage); displayMessage.showMessage(welcomeMessage);
welcomeMessage.setContent(MessagesResources.WELCOME_MESSAGE.substring(0, 102)+ " ..."); welcomeMessage.setContent(MessagesResources.WELCOME_MESSAGE.substring(0, 102)+ " ...");
MessageItem item = new MessageItem(welcomeMessage, false); MessageItem item = new MessageItem(welcomeMessage, messagesCollection, this, false);
//item.hideMessageMenu(); item.hideMessageMenu();
//messagesCollection.add(item); messagesCollection.add(item);
totalMessages++; totalMessages++;
updateBadge(false); updateBadge(false);
} }
@ -508,9 +431,9 @@ public class ApplicationView extends Composite {
FAB.setVisible(false); FAB.setVisible(false);
displayMessage.showMessage(welcomeMessage); displayMessage.showMessage(welcomeMessage);
welcomeMessage.setContent(MessagesResources.ERROR_MESSAGE.substring(0, 102)+ " ..."); welcomeMessage.setContent(MessagesResources.ERROR_MESSAGE.substring(0, 102)+ " ...");
MessageItem item = new MessageItem(welcomeMessage, false); MessageItem item = new MessageItem(welcomeMessage, messagesCollection, this, false);
//item.hideMessageMenu(); item.hideMessageMenu();
//messagesCollection.add(item); messagesCollection.add(item);
totalMessages++; totalMessages++;
updateBadge(false); updateBadge(false);
} }

View File

@ -3,7 +3,7 @@
xmlns:m="urn:import:gwt.material.design.client.ui" xmlns:m="urn:import:gwt.material.design.client.ui"
xmlns:ma="urn:import:gwt.material.design.addins.client" xmlns:ma="urn:import:gwt.material.design.addins.client"
xmlns:mc="urn:import:org.gcube.portets.user.message_conversations.client.autocomplete" xmlns:mc="urn:import:org.gcube.portets.user.message_conversations.client.autocomplete"
xmlns:s="urn:import:org.gcube.portets.user.message_conversations.client.ui"> xmlns:my="urn:import:org.gcube.portets.user.message_conversations.client.ui">
<ui:style> <ui:style>
.animation { .animation {
@ -23,17 +23,14 @@
} }
.marginTop { .marginTop {
margin-top: 60px; margin-top: 0px;
min-height: 850px;
} }
.overflowXHidden { .overflowXHidden {
overflow-x: hidden !important; /* needed in windows */ overflow-x: hidden !important; /* needed in windows */
} }
.read {
font-weight: bold; font-style: italic;
}
.modalTitle { .modalTitle {
font-size: 2em; font-size: 2em;
} }
@ -43,10 +40,11 @@
padding: 50px; padding: 50px;
} }
</ui:style> </ui:style>
<g:HTMLPanel ui:field="htmlPanel" > <g:HTMLPanel ui:field="htmlPanel">
<!-- TOP BAR --> <!-- TOP BAR -->
<m:MaterialHeader ui:field="header">
<m:MaterialNavBar ui:field="navBar" <m:MaterialNavBar ui:field="navBar"
layoutPosition="RELATIVE" addStyleNames="{style.topBar}" height="60" layoutPosition="FIXED" addStyleNames="{style.topBar}" height="60"
backgroundColor="WHITE"> backgroundColor="WHITE">
<m:MaterialNavSection float="LEFT" <m:MaterialNavSection float="LEFT"
showOn="SHOW_ON_MED_DOWN"> showOn="SHOW_ON_MED_DOWN">
@ -66,24 +64,33 @@
textColor="LIGHT_BLUE_DARKEN_2" waves="LIGHT" /> textColor="LIGHT_BLUE_DARKEN_2" waves="LIGHT" />
</m:MaterialNavSection> </m:MaterialNavSection>
</m:MaterialNavBar> </m:MaterialNavBar>
</m:MaterialHeader>
<div height='100%'>
<!-- SIDE PANEL --> <!-- SIDE PANEL -->
<s:ShowMorePagerPanel ui:field='pagerPanel' addStyleNames="{style.overflowXHidden}" height="300px" /> <m:MaterialRow ui:field="rightPanel" depth="995"
grid="l3 m3 s12" padding="0" backgroundColor="WHITE" height="90%"
layoutPosition="FIXED" top="60" left="0" width="350px"
addStyleNames="{style.animation} {style.borderRight}">
<m:MaterialProgress type="INDETERMINATE"
ui:field="messagesLoader" color="BLUE" />
<my:ShowMorePagerPanel ui:field="pagerPanel"
addStyleNames="{style.marginTop}">
</my:ShowMorePagerPanel>
</m:MaterialRow>
<!-- MAIN WINDOW -->
<m:MaterialContainer fontSize="0.8em">
<m:MaterialRow layoutPosition="RELATIVE"
grid="l8 s12 m12" top="65">
<m:MaterialProgress type="INDETERMINATE"
ui:field="messageLoader" color="TEAL" />
<g:ScrollPanel height="600px" ui:field="scrollerPanel"
addStyleNames="{style.overflowXHidden}"></g:ScrollPanel>
</m:MaterialRow>
</m:MaterialContainer>
<!-- MAIN WINDOW -->
<m:MaterialContainer>
<m:MaterialRow fontSize="0.8em">
<m:MaterialProgress type="INDETERMINATE"
ui:field="messageLoader" color="TEAL" />
<g:ScrollPanel ui:field="scrollerPanel"
addStyleNames="{style.overflowXHidden}"></g:ScrollPanel>
</m:MaterialRow>
</m:MaterialContainer>
</div>
<!-- FAB --> <!-- FAB -->
<m:MaterialFAB ui:field="FAB"> <m:MaterialFAB ui:field="FAB">
<m:MaterialButton type="FLOATING" <m:MaterialButton type="FLOATING"
@ -100,5 +107,6 @@
iconType="REPLY" /> iconType="REPLY" />
</m:MaterialFABList> </m:MaterialFABList>
</m:MaterialFAB> </m:MaterialFAB>
</g:HTMLPanel> </g:HTMLPanel>
</ui:UiBinder> </ui:UiBinder>

View File

@ -1,58 +0,0 @@
package org.gcube.portets.user.message_conversations.client.ui;
import org.gcube.portets.user.message_conversations.client.MessageServiceAsync;
import org.gcube.portets.user.message_conversations.shared.ConvMessage;
import org.gcube.portets.user.message_conversations.shared.MessagesWindow;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import gwt.material.design.client.data.DataSource;
import gwt.material.design.client.data.loader.LoadCallback;
import gwt.material.design.client.data.loader.LoadConfig;
import gwt.material.design.client.data.loader.LoadResult;
public class MessageDataSource implements DataSource<ConvMessage> {
private MessageServiceAsync convService;
private boolean sent;
public MessageDataSource(boolean sent, MessageServiceAsync convService) {
this.convService = convService;
this.sent= sent;
}
@Override
public void load(LoadConfig<ConvMessage> loadConfig, LoadCallback<ConvMessage> callback) {
convService.getMessagesWindows(this.sent, loadConfig.getOffset(), loadConfig.getLimit(),
new AsyncCallback<MessagesWindow>() {
@Override
public void onSuccess(MessagesWindow messages) {
callback.onSuccess(new LoadResult<>(messages.getMessages(), loadConfig.getOffset(), messages.getTotal()));
}
@Override
public void onFailure(Throwable throwable) {
GWT.log("Getting people async call failed.", throwable);
callback.onFailure(throwable);
}
});
}
@Override
public boolean useRemoteSort() {
// TODO Auto-generated method stub
return false;
}
}

View File

@ -23,6 +23,7 @@ import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget; import com.google.gwt.user.client.ui.Widget;
import gwt.material.design.client.constants.Color; import gwt.material.design.client.constants.Color;
import gwt.material.design.client.ui.MaterialCollection;
import gwt.material.design.client.ui.MaterialCollectionItem; import gwt.material.design.client.ui.MaterialCollectionItem;
import gwt.material.design.client.ui.MaterialDropDown; import gwt.material.design.client.ui.MaterialDropDown;
import gwt.material.design.client.ui.MaterialIcon; import gwt.material.design.client.ui.MaterialIcon;
@ -42,6 +43,8 @@ public class MessageItem extends Composite {
private boolean deleteClicked = true; private boolean deleteClicked = true;
private ApplicationView ap;
private MaterialCollection parentCollection;
private ConvMessage myMessage; private ConvMessage myMessage;
private boolean sent; private boolean sent;
@ -61,12 +64,13 @@ public class MessageItem extends Composite {
MessagesResources images = GWT.create(MessagesResources.class); MessagesResources images = GWT.create(MessagesResources.class);
public MessageItem(final ConvMessage m, boolean sent) { public MessageItem(final ConvMessage m, MaterialCollection parentCollection, ApplicationView ap, boolean sent) {
initWidget(uiBinder.createAndBindUi(this)); initWidget(uiBinder.createAndBindUi(this));
item.getElement().getStyle().setCursor(Cursor.POINTER); item.getElement().getStyle().setCursor(Cursor.POINTER);
this.sent = sent; this.sent = sent;
this.myMessage = m; this.myMessage = m;
//this.parentCollection = parentCollection; this.ap = ap;
this.parentCollection = parentCollection;
if (m.hasAttachments()) if (m.hasAttachments())
attachmentsIcon.setVisibility(Visibility.VISIBLE); attachmentsIcon.setVisibility(Visibility.VISIBLE);
if (!sent && !m.isRead()) if (!sent && !m.isRead())
@ -124,7 +128,7 @@ public class MessageItem extends Composite {
event.stopPropagation(); event.stopPropagation();
} }
}); });
/*
deleteButton.addClickHandler(new ClickHandler() { deleteButton.addClickHandler(new ClickHandler() {
@Override @Override
public void onClick(ClickEvent event) { public void onClick(ClickEvent event) {
@ -141,14 +145,26 @@ public class MessageItem extends Composite {
new MaterialToast(()->{doDelete(m.getSubject());}, link).toast("Deleting Message ("+m.getSubject()+")"); new MaterialToast(()->{doDelete(m.getSubject());}, link).toast("Deleting Message ("+m.getSubject()+")");
item.setVisible(false); item.setVisible(false);
} }
}); */ });
dd.getElement().getStyle().setWidth(300, Unit.PX); dd.getElement().getStyle().setWidth(300, Unit.PX);
String activator = "activate"+Random.nextInt(); String activator = "activate"+Random.nextInt();
dd.setActivator(activator); dd.setActivator(activator);
messageActionIcon.setActivates(activator); messageActionIcon.setActivates(activator);
} }
/*
@UiHandler("setUnreadButton")
void onSetUnread(ClickEvent e) {
e.stopPropagation();
if (myMessage.isRead()) {
ap.setMessageUnread(myMessage, this.sent);
myMessage.setRead(false);
item.addStyleName("unread-message");
} else {
Window.alert("Message is marked as unread already.");
}
}
private void doDelete(String subject) { private void doDelete(String subject) {
if (deleteClicked) { if (deleteClicked) {
ap.deleteMessage(myMessage, this.sent); ap.deleteMessage(myMessage, this.sent);
@ -156,8 +172,7 @@ public class MessageItem extends Composite {
else else
deleteClicked = true; deleteClicked = true;
} }
*/
public void setSelected(boolean active) { public void setSelected(boolean active) {
item.setBackgroundColor(Color.WHITE); item.setBackgroundColor(Color.WHITE);
item.removeStyleName("unread-message"); item.removeStyleName("unread-message");
@ -165,14 +180,22 @@ public class MessageItem extends Composite {
myMessage.setRead(true); myMessage.setRead(true);
} }
/*
@UiHandler("item") @UiHandler("item")
void onClickedMessage(ClickEvent e) { void onClickedMessage(ClickEvent e) {
checkHideSideBarOnMobile(); checkHideSideBarOnMobile();
//parentCollection.clearActive(); parentCollection.clearActive();
ap.readUserMessage(myMessage.getId(), this.sent); ap.readUserMessage(myMessage.getId(), this.sent);
setSelected(true); setSelected(true);
myMessage.setRead(true); myMessage.setRead(true);
} }
*/
private void checkHideSideBarOnMobile() {
if (Utils.isMobile())
ap.hideSidePanel();
}
public void hideMessageMenu() {
messageActionIcon.setVisible(false);
}
} }

View File

@ -1,79 +0,0 @@
package org.gcube.portets.user.message_conversations.client.ui;
import java.util.List;
import org.gcube.portets.user.message_conversations.shared.ConvMessage;
import com.google.gwt.view.client.HasData;
import com.google.gwt.view.client.ListDataProvider;
/**
* The data source for contact information used in the sample.
*/
public class MessageProvider {
/**
* The singleton instance of the database.
private static MessageProvider instance;
* Get the singleton instance of the contact database.
*
* @return the singleton instance
public static MessageProvider get() {
if (instance == null) {
instance = new MessageProvider();
}
return instance;
} */
/**
* The provider that holds the list of contacts in the database.
*/
private ListDataProvider<ConvMessage> dataProvider = new ListDataProvider<ConvMessage>();
public MessageProvider(List<ConvMessage> messages) {
List<ConvMessage> contacts = dataProvider.getList();
contacts.addAll(messages);
}
/**
* Add a new contact.
*
* @param contact the contact to add.
*/
public void addMessage(ConvMessage message) {
List<ConvMessage> contacts = dataProvider.getList();
// Remove the contact first so we don't add a duplicate.
contacts.remove(message);
contacts.add(message);
}
/**
* Add a display to the database. The current range of interest of the display
* will be populated with data.
*
* @param display a {@Link HasData}.
*/
public void addDataDisplay(HasData<ConvMessage> display) {
dataProvider.addDataDisplay(display);
}
public ListDataProvider<ConvMessage> getDataProvider() {
return dataProvider;
}
/**
* Refresh all displays.
*/
public void refreshDisplays() {
dataProvider.refresh();
}
}

View File

@ -0,0 +1,113 @@
package org.gcube.portets.user.message_conversations.client.ui;
import java.util.ArrayList;
import java.util.function.Function;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.HasRows;
import com.google.gwt.view.client.Range;
import com.google.gwt.view.client.RangeChangeEvent.Handler;
import gwt.material.design.client.ui.MaterialCollection;
public class MyMaterialCollection<T> extends MaterialCollection implements HasRows {
private final int DEFAULT_LENGTH= 20;
private boolean init_called = false;
ArrayList<T> objects = new ArrayList<>();
Function<T, Widget> converter;
public MyMaterialCollection(ArrayList<T> objects, Function<T, Widget> function) {
this.objects = objects;
this.converter = function;
}
int start=0;
int length=DEFAULT_LENGTH;
public void init(){
if (init_called) GWT.log("init already called");
else {
init_called = true;
onRangeChanged();
}
}
private void onRangeChanged() {
int widgetCountIndex = super.getWidgetCount()-1;
int index = widgetCountIndex-1>start ? widgetCountIndex: start;
int finish = length>objects.size()? objects.size():length ;
for (int i =index; i<finish; i++) {
super.add(converter.apply(objects.get(i)));
}
}
public void add(Widget widget) {}
@Override
public HandlerRegistration addRangeChangeHandler(Handler handler) {
return new MyHandlerRegistration();
}
@Override
public HandlerRegistration addRowCountChangeHandler(
com.google.gwt.view.client.RowCountChangeEvent.Handler handler) {
return new MyHandlerRegistration();
}
@Override
public int getRowCount() {
GWT.log("get row count");
return objects.size();
}
@Override
public Range getVisibleRange() {
GWT.log("get visible range");
return new Range(start, length);
}
@Override
public boolean isRowCountExact() {
GWT.log("is row exact");
return true;
}
@Override
public void setRowCount(int count) {
GWT.log("set row count");
}
@Override
public void setRowCount(int count, boolean isExact) {
GWT.log("set row count ex");
}
@Override
public void setVisibleRange(int start, int length) {
this.start = start;
this.length = length;
onRangeChanged();
}
@Override
public void setVisibleRange(Range range) {
this.setVisibleRange(range.getStart(), range.getLength());
}
class MyHandlerRegistration implements HandlerRegistration{
@Override
public void removeHandler() {
GWT.log("handler removed");
}
}
}

View File

@ -84,6 +84,7 @@ public class ShowMorePagerPanel extends AbstractPager {
public void setDisplay(HasRows display) { public void setDisplay(HasRows display) {
assert display instanceof Widget : "display must extend Widget"; assert display instanceof Widget : "display must extend Widget";
scrollable.setWidget((Widget) display); scrollable.setWidget((Widget) display);
scrollable.scrollToTop();
super.setDisplay(display); super.setDisplay(display);
} }

View File

@ -83,7 +83,7 @@ public class WriteMessage extends Composite {
} }
public void setNewMessageForSendTo(String[] usernames) { public void setNewMessageForSendTo(String[] usernames) {
GWT.log("her add the users"); GWT.log("setNewMessageForSendTo - here add the users");
convService.getUsersInfo(usernames, new AsyncCallback<ArrayList<WSUser>>() { convService.getUsersInfo(usernames, new AsyncCallback<ArrayList<WSUser>>() {
@Override @Override
public void onFailure(Throwable caught) { public void onFailure(Throwable caught) {
@ -91,7 +91,7 @@ public class WriteMessage extends Composite {
@Override @Override
public void onSuccess(ArrayList<WSUser> result) { public void onSuccess(ArrayList<WSUser> result) {
for (WSUser user : result) { for (WSUser user : result) {
acModal.addItem(new UserSuggestion(user)); acModal.addItem(new UserSuggestion(user));
} }
} }
}); });

View File

@ -23,12 +23,12 @@
layoutPosition="RELATIVE" marginBottom="0" grid="l8 m12 s12" layoutPosition="RELATIVE" marginBottom="0" grid="l8 m12 s12"
paddingLeft="10" paddingRight="60" marginLeft="5" marginTop="-5" paddingLeft="10" paddingRight="60" marginLeft="5" marginTop="-5"
addStyleNames="{style.animation} message-metadata" left="350"> addStyleNames="{style.animation} message-metadata" left="350">
<m:MaterialFooter textAlign="RIGHT"> <m:MaterialModalFooter textAlign="RIGHT">
<m:MaterialButton ui:field="btnCloseModal" text="Cancel" <m:MaterialButton ui:field="btnCloseModal" text="Cancel"
type="FLAT" textColor="BLACK" waves="DEFAULT"/> type="FLAT" textColor="BLACK" waves="DEFAULT"/>
<m:MaterialButton text="Send" type="FLAT" textColor="WHITE" <m:MaterialButton text="Send" type="FLAT" textColor="WHITE"
backgroundColor="BLUE" waves="DEFAULT" ui:field="btnSendModal" /> backgroundColor="BLUE" waves="DEFAULT" ui:field="btnSendModal" />
</m:MaterialFooter> </m:MaterialModalFooter>
<m:MaterialPanel ui:field="sendingLoader" visible="false" <m:MaterialPanel ui:field="sendingLoader" visible="false"
addStyleNames="{style.alignCenter}"> addStyleNames="{style.alignCenter}">
<m:MaterialLabel text="Sending message ..." <m:MaterialLabel text="Sending message ..."

View File

@ -0,0 +1,79 @@
package org.gcube.portets.user.message_conversations.server;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import org.gcube.portets.user.message_conversations.client.MessageService;
import org.gcube.portets.user.message_conversations.shared.ConvMessage;
import org.gcube.portets.user.message_conversations.shared.CurrUserAndPortalUsersWrapper;
import org.gcube.portets.user.message_conversations.shared.WSUser;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
@SuppressWarnings("serial")
public class ConvService extends RemoteServiceServlet implements MessageService, HttpServletRetriever {
MessageService delegate;
public void init() {
delegate = new ConvServiceImpl(this);
}
@Override
public ArrayList<ConvMessage> getMessages(boolean sent) {
return delegate.getMessages(sent);
}
@Override
public ConvMessage getMessageById(String messageId, boolean sent) {
return delegate.getMessageById(messageId, sent);
}
@Override
public CurrUserAndPortalUsersWrapper getWorkspaceUsers() {
return delegate.getWorkspaceUsers();
}
@Override
public ArrayList<WSUser> getUsersInfo(String[] usernames) {
return delegate.getUsersInfo(usernames);
}
@Override
public ArrayList<WSUser> searchUsers(String keyword) {
return delegate.searchUsers(keyword);
}
@Override
public boolean sendToById(ArrayList<String> recipientIds, ArrayList<String> listAttachmentsId, String subject,
String body) {
return delegate.sendToById(recipientIds, listAttachmentsId, subject, body);
}
@Override
public boolean deleteMessageById(String messageId, boolean sent) {
return delegate.deleteMessageById(messageId, sent);
}
@Override
public String getAttachmentDownloadURL(String itemId) {
return delegate.getAttachmentDownloadURL(itemId);
}
@Override
public boolean saveAttachmentToWorkspaceFolder(String itemId, String destinationFolderId) {
return delegate.saveAttachmentToWorkspaceFolder(itemId, destinationFolderId);
}
@Override
public boolean markMessageUnread(String messageId, boolean sent) {
return delegate.markMessageUnread(messageId, sent);
}
@Override
public HttpServletRequest getRequest() {
return getThreadLocalRequest();
}
}

View File

@ -13,10 +13,13 @@ import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingUser;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.common.portal.PortalContext; import org.gcube.common.portal.PortalContext;
import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.common.storagehub.client.dsl.ContainerType;
import org.gcube.common.storagehub.client.dsl.FileContainer; import org.gcube.common.storagehub.client.dsl.FileContainer;
import org.gcube.common.storagehub.client.dsl.OpenResolver;
import org.gcube.common.storagehub.client.dsl.StorageHubClient; import org.gcube.common.storagehub.client.dsl.StorageHubClient;
import org.gcube.common.storagehub.client.plugins.AbstractPlugin; import org.gcube.common.storagehub.client.plugins.AbstractPlugin;
import org.gcube.common.storagehub.client.proxies.MessageManagerClient; import org.gcube.common.storagehub.client.proxies.MessageManagerClient;
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
import org.gcube.common.storagehub.model.items.FolderItem; import org.gcube.common.storagehub.model.items.FolderItem;
import org.gcube.common.storagehub.model.items.Item; import org.gcube.common.storagehub.model.items.Item;
import org.gcube.common.storagehub.model.messages.Message; import org.gcube.common.storagehub.model.messages.Message;
@ -27,7 +30,6 @@ import org.gcube.portets.user.message_conversations.shared.ConvMessage;
import org.gcube.portets.user.message_conversations.shared.CurrUserAndPortalUsersWrapper; import org.gcube.portets.user.message_conversations.shared.CurrUserAndPortalUsersWrapper;
import org.gcube.portets.user.message_conversations.shared.FileModel; import org.gcube.portets.user.message_conversations.shared.FileModel;
import org.gcube.portets.user.message_conversations.shared.MessageUserModel; import org.gcube.portets.user.message_conversations.shared.MessageUserModel;
import org.gcube.portets.user.message_conversations.shared.MessagesWindow;
import org.gcube.portets.user.message_conversations.shared.WSUser; import org.gcube.portets.user.message_conversations.shared.WSUser;
import org.gcube.vomanagement.usermanagement.GroupManager; import org.gcube.vomanagement.usermanagement.GroupManager;
import org.gcube.vomanagement.usermanagement.UserManager; import org.gcube.vomanagement.usermanagement.UserManager;
@ -38,7 +40,6 @@ import org.gcube.vomanagement.usermanagement.util.ManagementUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.model.User; import com.liferay.portal.model.User;
@ -48,29 +49,20 @@ import com.liferay.portal.util.PortalUtil;
/** /**
* @author Massimiliano Assante, CNR-ISTI * @author Massimiliano Assante, CNR-ISTI
*/ */
@SuppressWarnings("serial") public class ConvServiceImpl implements MessageService {
public class ConvServiceImpl extends RemoteServiceServlet implements MessageService {
private static final Logger _log = LoggerFactory.getLogger(ConvServiceImpl.class); private static final Logger _log = LoggerFactory.getLogger(ConvServiceImpl.class);
private final int MESSAGE_BODY_CHAR_LIMIT = 79;
private PortalContext pContext; private PortalContext pContext;
private UserManager um; private UserManager um;
private HttpServletRetriever requestRetriever;
public void init() {
ConvServiceImpl(HttpServletRetriever servletRetriever) {
um = new LiferayUserManager(); um = new LiferayUserManager();
pContext = PortalContext.getConfiguration(); pContext = PortalContext.getConfiguration();
requestRetriever= servletRetriever;
} }
@Override
public MessagesWindow getMessagesWindows(boolean sent, int limit, int offset) {
// TODO Auto-generated method stub
return null;
}
/** /**
* *
* @return true if you're running into the portal, false if in development * @return true if you're running into the portal, false if in development
@ -79,7 +71,8 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ
try { try {
UserLocalServiceUtil.getService(); UserLocalServiceUtil.getService();
return true; return true;
}catch (com.liferay.portal.kernel.bean.BeanLocatorException ex) { }
catch (com.liferay.portal.kernel.bean.BeanLocatorException ex) {
_log.trace("Development Mode ON"); _log.trace("Development Mode ON");
return false; return false;
} }
@ -101,26 +94,27 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ
return null; return null;
} }
} else { } else {
return pContext.getCurrentUser(getThreadLocalRequest()); return pContext.getCurrentUser(requestRetriever.getRequest());
} }
} }
@Override @Override
public ArrayList<ConvMessage> getMessages(boolean sent) { public ArrayList<ConvMessage> getMessages(boolean sent) {
ArrayList<ConvMessage> toReturn = new ArrayList<>(); ArrayList<ConvMessage> toReturn = new ArrayList<>();
try { try {
GCubeUser user = getCurrentUser(getThreadLocalRequest()); GCubeUser user = getCurrentUser(requestRetriever.getRequest());
pContext = PortalContext.getConfiguration(); pContext = PortalContext.getConfiguration();
_log.debug("*** Reading user = " +user.getFullname()); _log.debug("*** Reading user = " +user.getFullname());
String scope = pContext.getCurrentScope(getThreadLocalRequest()); String scope = pContext.getCurrentScope(requestRetriever.getRequest());
ScopeProvider.instance.set(scope); ScopeProvider.instance.set(scope);
String token = pContext.getCurrentUserToken(scope, user.getUserId()); String token = pContext.getCurrentUserToken(scope, user.getUserId());
SecurityTokenProvider.instance.set(token); SecurityTokenProvider.instance.set(token);
MessageManagerClient client = AbstractPlugin.messages().build(); MessageManagerClient client = AbstractPlugin.messages().build();
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
List<Message> listMessages = (sent) ? client.getSentMessages(79) List<Message> listMessages = (sent) ? client.getSentMessages(MESSAGE_BODY_CHAR_LIMIT)
: client.getReceivedMessages(79); : client.getReceivedMessages(MESSAGE_BODY_CHAR_LIMIT);
if (listMessages == null) { if (listMessages == null) {
_log.error("listMessages is null, Could not read messages of {}", user.getFullname()); _log.error("listMessages is null, Could not read messages of {}", user.getFullname());
return null; return null;
@ -198,8 +192,8 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ
@Override @Override
public boolean markMessageUnread(String messageId, boolean sent) { public boolean markMessageUnread(String messageId, boolean sent) {
GCubeUser user = getCurrentUser(getThreadLocalRequest()); GCubeUser user = getCurrentUser(requestRetriever.getRequest());
String scope = pContext.getCurrentScope(getThreadLocalRequest()); String scope = pContext.getCurrentScope(requestRetriever.getRequest());
SecurityTokenProvider.instance.set(pContext.getCurrentUserToken(scope, user.getUserId())); SecurityTokenProvider.instance.set(pContext.getCurrentUserToken(scope, user.getUserId()));
try { try {
MessageManagerClient client = AbstractPlugin.messages().build(); MessageManagerClient client = AbstractPlugin.messages().build();
@ -215,9 +209,9 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ
public ConvMessage getMessageById(String messageId, boolean sent) { public ConvMessage getMessageById(String messageId, boolean sent) {
ConvMessage toReturn = null; ConvMessage toReturn = null;
try { try {
GCubeUser user = getCurrentUser(getThreadLocalRequest()); GCubeUser user = getCurrentUser(requestRetriever.getRequest());
_log.debug("*** Reading user from liferay session = " +user.getFullname()); _log.debug("*** Reading user from liferay session = " +user.getFullname());
String scope = pContext.getCurrentScope(getThreadLocalRequest()); String scope = pContext.getCurrentScope(requestRetriever.getRequest());
SecurityTokenProvider.instance.set(pContext.getCurrentUserToken(scope, user.getUserId())); SecurityTokenProvider.instance.set(pContext.getCurrentUserToken(scope, user.getUserId()));
LiferayUserManager um = new LiferayUserManager(); LiferayUserManager um = new LiferayUserManager();
MessageManagerClient client = AbstractPlugin.messages().build(); MessageManagerClient client = AbstractPlugin.messages().build();
@ -274,8 +268,8 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ
@Override @Override
public String getAttachmentDownloadURL(String itemId) { public String getAttachmentDownloadURL(String itemId) {
GCubeUser user = getCurrentUser(getThreadLocalRequest()); GCubeUser user = getCurrentUser(requestRetriever.getRequest());
String scope = pContext.getCurrentScope(getThreadLocalRequest()); String scope = pContext.getCurrentScope(requestRetriever.getRequest());
SecurityTokenProvider.instance.set(pContext.getCurrentUserToken(scope, user.getUserId())); SecurityTokenProvider.instance.set(pContext.getCurrentUserToken(scope, user.getUserId()));
_log.info("getAttachmentDownloadURL for user "+user.getUsername() + " file id="+itemId); _log.info("getAttachmentDownloadURL for user "+user.getUsername() + " file id="+itemId);
try { try {
@ -290,8 +284,8 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ
} }
@Override @Override
public boolean saveAttachmentToWorkspaceFolder(String itemId, String destinationFolderId) { public boolean saveAttachmentToWorkspaceFolder(String itemId, String destinationFolderId) {
GCubeUser user = getCurrentUser(getThreadLocalRequest()); GCubeUser user = getCurrentUser(requestRetriever.getRequest());
String scope = pContext.getCurrentScope(getThreadLocalRequest()); String scope = pContext.getCurrentScope(requestRetriever.getRequest());
SecurityTokenProvider.instance.set(pContext.getCurrentUserToken(scope, user.getUserId())); SecurityTokenProvider.instance.set(pContext.getCurrentUserToken(scope, user.getUserId()));
try { try {
StorageHubClient shc = new StorageHubClient(); StorageHubClient shc = new StorageHubClient();
@ -306,9 +300,9 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ
@Override @Override
public boolean deleteMessageById(String messageId, boolean sent) { public boolean deleteMessageById(String messageId, boolean sent) {
GCubeUser user = getCurrentUser(getThreadLocalRequest()); GCubeUser user = getCurrentUser(requestRetriever.getRequest());
_log.debug("deleteMessageById reading user from liferay session = " +user.getFullname() + " m id = " + messageId); _log.debug("deleteMessageById reading user from liferay session = " +user.getFullname() + " m id = " + messageId);
String scope = pContext.getCurrentScope(getThreadLocalRequest()); String scope = pContext.getCurrentScope(requestRetriever.getRequest());
SecurityTokenProvider.instance.set(pContext.getCurrentUserToken(scope, user.getUserId())); SecurityTokenProvider.instance.set(pContext.getCurrentUserToken(scope, user.getUserId()));
try { try {
MessageManagerClient client = AbstractPlugin.messages().build(); MessageManagerClient client = AbstractPlugin.messages().build();
@ -325,7 +319,7 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ
public ArrayList<WSUser> searchUsers(String keyword) { public ArrayList<WSUser> searchUsers(String keyword) {
ArrayList<WSUser> toReturn = new ArrayList<>(); ArrayList<WSUser> toReturn = new ArrayList<>();
if (isWithinPortal()) { if (isWithinPortal()) {
long gatewayGroupId = pContext.getCurrentGroupId(this.getThreadLocalRequest()); long gatewayGroupId = pContext.getCurrentGroupId(this.requestRetriever.getRequest());
try { try {
_log.debug("Searching " + keyword); _log.debug("Searching " + keyword);
List<GCubeUser> users = um.searchUsersByGroup(keyword, gatewayGroupId); List<GCubeUser> users = um.searchUsersByGroup(keyword, gatewayGroupId);
@ -369,7 +363,7 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ
@Override @Override
public boolean sendToById(ArrayList<String> recipientIds, ArrayList<String> listAttachmentsId, String subject, String body) { public boolean sendToById(ArrayList<String> recipientIds, ArrayList<String> listAttachmentsId, String subject, String body) {
PortalContext pContext = PortalContext.getConfiguration(); PortalContext pContext = PortalContext.getConfiguration();
GCubeUser currentUser = pContext.getCurrentUser(getThreadLocalRequest()); GCubeUser currentUser = pContext.getCurrentUser(requestRetriever.getRequest());
MessageManagerClient client = AbstractPlugin.messages().build(); MessageManagerClient client = AbstractPlugin.messages().build();
try { try {
_log.info("Sending message to: " + recipientIds.toString()); _log.info("Sending message to: " + recipientIds.toString());
@ -377,17 +371,17 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ
String checkedBody = body; String checkedBody = body;
String messageId = client.sendMessage(recipientIds, checkedSubject, checkedBody, listAttachmentsId); String messageId = client.sendMessage(recipientIds, checkedSubject, checkedBody, listAttachmentsId);
/*try { try {
body += getPublicLinksForAttachs(listAttachmentsId); body += getPublicLinksForAttachs(listAttachmentsId);
}
catch (StorageHubException e) { catch (Exception e) {
_log.error("Ops, could not generate publick link for some of the attachments"); _log.error("Ops, could not generate publick link for some of the attachments");
}*/ }
_log.debug("Sending message notification to: " + recipientIds.toString()); _log.debug("Sending message notification to: " + recipientIds.toString());
List<GenericItemBean> recipients = getUsersbyUserId(recipientIds); List<GenericItemBean> recipients = getUsersbyUserId(recipientIds);
NotificationsManager nm = new ApplicationNotificationsManager(new SocialNetworkingSite(getThreadLocalRequest()), pContext.getCurrentScope(getThreadLocalRequest()), NotificationsManager nm = new ApplicationNotificationsManager(new SocialNetworkingSite(requestRetriever.getRequest()), pContext.getCurrentScope(requestRetriever.getRequest()),
new SocialNetworkingUser( new SocialNetworkingUser(
currentUser.getUsername(), currentUser.getUsername(),
currentUser.getEmail(), currentUser.getEmail(),
@ -441,10 +435,8 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ
* @throws ItemNotFoundException * @throws ItemNotFoundException
* @throws InternalErrorException * @throws InternalErrorException
*/ */
/*
private String getPublicLinksForAttachs(ArrayList<String> listAttachments) { private String getPublicLinksForAttachs(ArrayList<String> listAttachments) {
if (listAttachments != null && (!listAttachments.isEmpty()) ) { if (listAttachments != null && (!listAttachments.isEmpty()) ) {
StorageHubClient client = new StorageHubClient(); StorageHubClient client = new StorageHubClient();
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
@ -456,24 +448,22 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ
try { try {
OpenResolver openResolver = client.open(itemId); OpenResolver openResolver = client.open(itemId);
if(openResolver.asItem().getType()==ContainerType.FOLDER) { if(openResolver.resolve().getType()==ContainerType.FILE) {
String publicLink = openResolver.asFile().getPublicLink().toString();
String publicLink = openResolver.getPublickLink(itemId).toString();; String itemName = openResolver.asFile().get().getTitle();
String itemName = item.getTitle();
builder.append(itemName + " ("+publicLink+")"); builder.append(itemName + " ("+publicLink+")");
builder.append("\n"); builder.append("\n");
}catch (StorageHubException e) { }
_log.error("While reading attachments"); } catch (StorageHubException e) {
_log.error("While reading attachments", e);
e.printStackTrace(); e.printStackTrace();
} }
}
} }
_log.debug("returning public links: "+builder.toString());
return builder.toString(); return builder.toString();
} }
else return ""; return "";
}*/ }
/** /**
@ -484,7 +474,7 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ
public CurrUserAndPortalUsersWrapper getWorkspaceUsers() { public CurrUserAndPortalUsersWrapper getWorkspaceUsers() {
PortalContext pContext = PortalContext.getConfiguration(); PortalContext pContext = PortalContext.getConfiguration();
GCubeUser currentUser = pContext.getCurrentUser(getThreadLocalRequest()); GCubeUser currentUser = pContext.getCurrentUser(requestRetriever.getRequest());
_log.debug("trying to get WorkspaceUsers .."); _log.debug("trying to get WorkspaceUsers ..");
WSUser currUser = null; WSUser currUser = null;
ArrayList<WSUser> portalUsers = new ArrayList<WSUser>(); ArrayList<WSUser> portalUsers = new ArrayList<WSUser>();

View File

@ -12,19 +12,12 @@ import org.gcube.portets.user.message_conversations.client.MessageService;
import org.gcube.portets.user.message_conversations.shared.ConvMessage; import org.gcube.portets.user.message_conversations.shared.ConvMessage;
import org.gcube.portets.user.message_conversations.shared.CurrUserAndPortalUsersWrapper; import org.gcube.portets.user.message_conversations.shared.CurrUserAndPortalUsersWrapper;
import org.gcube.portets.user.message_conversations.shared.MessageUserModel; import org.gcube.portets.user.message_conversations.shared.MessageUserModel;
import org.gcube.portets.user.message_conversations.shared.MessagesWindow;
import org.gcube.portets.user.message_conversations.shared.WSUser; import org.gcube.portets.user.message_conversations.shared.WSUser;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import com.google.gwt.user.server.rpc.RemoteServiceServlet; public class FakeConvServiceImpl implements MessageService{
public class FakeConvServiceImpl extends RemoteServiceServlet implements MessageService{
/**
*
*/
private static final long serialVersionUID = 7437932085896191683L;
private static final Logger _log = LoggerFactory.getLogger(FakeConvServiceImpl.class); private static final Logger _log = LoggerFactory.getLogger(FakeConvServiceImpl.class);
@ -35,10 +28,10 @@ public class FakeConvServiceImpl extends RemoteServiceServlet implements Message
Map<String,ConvMessage> sentMessagesMap = new HashMap<>(); Map<String,ConvMessage> sentMessagesMap = new HashMap<>();
final int messageReceivedNumberToTest = 1000; final int messageReceivedNumberToTest = 200;
final int messageSentNumberToTest = 200; final int messageSentNumberToTest = 11;
public void init() { public FakeConvServiceImpl() {
Calendar cal = Calendar.getInstance(); Calendar cal = Calendar.getInstance();
MessageUserModel mu = new MessageUserModel("andrea.rossi"); MessageUserModel mu = new MessageUserModel("andrea.rossi");
@ -46,7 +39,7 @@ public class FakeConvServiceImpl extends RemoteServiceServlet implements Message
String prefix ="received"; String prefix ="received";
receivedMessages = new ArrayList<>(); receivedMessages = new ArrayList<>();
for (int i =0; i<3000; i++) { for (int i =0; i<messageReceivedNumberToTest; i++) {
String id = "id-"+prefix+i; String id = "id-"+prefix+i;
ConvMessage msg= new ConvMessage(id, prefix+i, mu, recipients, new Date(cal.getTimeInMillis()), prefix+i, false, false); ConvMessage msg= new ConvMessage(id, prefix+i, mu, recipients, new Date(cal.getTimeInMillis()), prefix+i, false, false);
receivedMessages.add(msg); receivedMessages.add(msg);
@ -55,7 +48,7 @@ public class FakeConvServiceImpl extends RemoteServiceServlet implements Message
prefix ="sent"; prefix ="sent";
sentMessages = new ArrayList<>(); sentMessages = new ArrayList<>();
for (int i =0; i<3000; i++) { for (int i =0; i<messageSentNumberToTest; i++) {
String id = "id-"+prefix+i; String id = "id-"+prefix+i;
ConvMessage msg= new ConvMessage(id, prefix+i, mu, recipients, new Date(cal.getTimeInMillis()), prefix+i, false, false); ConvMessage msg= new ConvMessage(id, prefix+i, mu, recipients, new Date(cal.getTimeInMillis()), prefix+i, false, false);
sentMessages.add(msg); sentMessages.add(msg);
@ -71,11 +64,11 @@ public class FakeConvServiceImpl extends RemoteServiceServlet implements Message
public ArrayList<ConvMessage> getMessages(boolean sent) { public ArrayList<ConvMessage> getMessages(boolean sent) {
if (sent) { if (sent) {
_log.info("sent messages call with sent {}",sent); _log.info("sent messages call with sent {}",sent);
return new ArrayList<>(sentMessages.subList(0, messageSentNumberToTest)); return new ArrayList<>(sentMessages);
} }
else { else {
_log.info("received messages call with sent {}",sent); _log.info("received messages call with sent {}",sent);
return new ArrayList<>(receivedMessages.subList(0, messageReceivedNumberToTest)); return new ArrayList<>(receivedMessages);
} }
} }
@ -147,16 +140,5 @@ public class FakeConvServiceImpl extends RemoteServiceServlet implements Message
} }
@Override
public MessagesWindow getMessagesWindows(boolean sent, int limit, int offset) {
_log.info("get Message Window called limit {} offset {}", limit, offset);
if (sent) {
List<ConvMessage> messages = sentMessages.subList(0, messageSentNumberToTest);
return new MessagesWindow(messages.size(), new ArrayList<>(messages.subList(offset, offset+limit)));
} else {
List<ConvMessage> messages = receivedMessages.subList(0, messageReceivedNumberToTest);
return new MessagesWindow(messages.size(), new ArrayList<>(messages.subList(offset, offset+limit)));
}
}
} }

View File

@ -0,0 +1,8 @@
package org.gcube.portets.user.message_conversations.server;
import javax.servlet.http.HttpServletRequest;
public interface HttpServletRetriever {
HttpServletRequest getRequest();
}

View File

@ -5,7 +5,6 @@ import java.util.Date;
import java.util.List; import java.util.List;
import com.google.gwt.user.client.rpc.IsSerializable; import com.google.gwt.user.client.rpc.IsSerializable;
import com.google.gwt.view.client.ProvidesKey;
public class ConvMessage implements IsSerializable{ public class ConvMessage implements IsSerializable{
@ -18,15 +17,7 @@ public class ConvMessage implements IsSerializable{
private boolean isRead; private boolean isRead;
private ArrayList<FileModel> attachments; private ArrayList<FileModel> attachments;
private boolean hasAttachments; private boolean hasAttachments;
public static final ProvidesKey<ConvMessage> KEY_PROVIDER = new ProvidesKey<ConvMessage>() {
@Override
public Object getKey(ConvMessage item) {
return item == null ? null : item.getId();
}
};
public ConvMessage() { public ConvMessage() {
super(); super();
} }
@ -63,8 +54,8 @@ public class ConvMessage implements IsSerializable{
this.hasAttachments = hasAttachments; this.hasAttachments = hasAttachments;
} }
public ConvMessage(String id, String subject, MessageUserModel owner, List<MessageUserModel> recipients, Date date, public ConvMessage(String id, String subject, MessageUserModel owner, List<MessageUserModel> recipients, Date date,
String content, boolean isRead, boolean hasAttachments) { String content, boolean isRead, boolean hasAttachments) {
super(); super();
@ -166,30 +157,8 @@ public class ConvMessage implements IsSerializable{
} }
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ConvMessage other = (ConvMessage) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
} }

View File

@ -1,28 +0,0 @@
package org.gcube.portets.user.message_conversations.shared;
import java.util.ArrayList;
import com.google.gwt.user.client.rpc.IsSerializable;
public class MessagesWindow implements IsSerializable {
private int total;
private ArrayList<ConvMessage> messages;
public MessagesWindow() {
super();
}
public MessagesWindow(int total, ArrayList<ConvMessage> messages) {
super();
this.total = total;
this.messages = messages;
}
public int getTotal() {
return total;
}
public ArrayList<ConvMessage> getMessages() {
return messages;
}
}

View File

@ -18,4 +18,4 @@ log4j.logger.org.gcube.contentmanager=WARN
log4j.logger.org.gcube.resources.discovery=WARN log4j.logger.org.gcube.resources.discovery=WARN
log4j.logger.com.liferay.portal.kernel.bean.PortalBeanLocatorUtil=OFF log4j.logger.com.liferay.portal.kernel.bean.PortalBeanLocatorUtil=OFF
log4j.logger.com.liferay.portal.kernel.log.Jdk14LogImpl=OFF log4j.logger.com.liferay.portal.kernel.log.Jdk14LogImpl=OFF
log4j.logger.org.eclipse.jetty=INFO log4j.logger.org.eclipse.jetty=ERROR

View File

@ -3,7 +3,6 @@
<!-- Inherit the core Web Toolkit stuff. --> <!-- Inherit the core Web Toolkit stuff. -->
<inherits name='com.google.gwt.user.User' /> <inherits name='com.google.gwt.user.User' />
<inherits name="com.google.gwt.logging.Logging" />
<!-- Inherit the default GWT style sheet. You can change --> <!-- Inherit the default GWT style sheet. You can change -->
<!-- the theme of your GWT application by uncommenting --> <!-- the theme of your GWT application by uncommenting -->
<!-- any one of the following lines. --> <!-- any one of the following lines. -->

View File

@ -9,7 +9,7 @@
padding: 3px; padding: 3px;
} }
#wpTreepopup>div.modal-body>table>tbody>tr:nth-child (1) >td { #wpTreepopup>div.modal-body>table>tbody>tr:nth-child(1)>td {
padding: 0px; padding: 0px;
} }
@ -44,7 +44,7 @@
color: #ccc !important; color: #ccc !important;
} }
.message-metadata>div:not (.empty-state ) h4 { .message-metadata>div:not(.empty-state ) h4 {
font-size: 2em; font-size: 2em;
margin-top: 10px !important; margin-top: 10px !important;
font-weight: 400 !important; font-weight: 400 !important;

View File

@ -7,8 +7,7 @@
<!-- Servlets --> <!-- Servlets -->
<servlet> <servlet>
<servlet-name>convServlet</servlet-name> <servlet-name>convServlet</servlet-name>
<servlet-class>org.gcube.portets.user.message_conversations.server.FakeConvServiceImpl</servlet-class> <servlet-class>org.gcube.portets.user.message_conversations.server.ConvService</servlet-class>
</servlet> </servlet>
<servlet-mapping> <servlet-mapping>
@ -21,7 +20,7 @@
<servlet-class>com.liferay.portal.kernel.servlet.PortalDelegateServlet</servlet-class> <servlet-class>com.liferay.portal.kernel.servlet.PortalDelegateServlet</servlet-class>
<init-param> <init-param>
<param-name>servlet-class</param-name> <param-name>servlet-class</param-name>
<param-value>org.gcube.portets.user.message_conversations.server.FakeConvServiceImpl</param-value> <param-value>org.gcube.portets.user.message_conversations.server.ConvService</param-value>
</init-param> </init-param>
<init-param> <init-param>
<param-name>sub-context</param-name> <param-name>sub-context</param-name>