Cantharella-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
March 2013
- 3 participants
- 30 discussions
Build failed in Jenkins: cantharella » Cantharella :: Service #120
by admin+hudson@codelutin.com 04 Mar '13
by admin+hudson@codelutin.com 04 Mar '13
04 Mar '13
See <http://ci.nuiton.org/jenkins/job/cantharella/nc.ird$cantharella.service/120…>
Changes:
[Éric Chatellier] Fix indexing and document missing file management
------------------------------------------
projectStarted nc.ird:cantharella.service:1.1-SNAPSHOT
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Cantharella :: Service 1.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] Deleting <http://ci.nuiton.org/jenkins/job/cantharella/nc.ird$cantharella.service/ws/…>
mojoStarted org.apache.maven.plugins:maven-clean-plugin:2.5(default-clean)
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ cantharella.service ---
mojoSucceeded org.apache.maven.plugins:maven-clean-plugin:2.5(default-clean)
mojoStarted org.apache.maven.plugins:maven-enforcer-plugin:1.2(check-project-files)
[INFO]
[INFO] --- maven-enforcer-plugin:1.2:enforce (check-project-files) @ cantharella.service ---
mojoSucceeded org.apache.maven.plugins:maven-enforcer-plugin:1.2(check-project-files)
[INFO] Using 'UTF-8' encoding to copy filtered resources.
mojoStarted org.apache.maven.plugins:maven-resources-plugin:2.6(default-resources)
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ cantharella.service ---
[INFO] Copying 3 resources
mojoSucceeded org.apache.maven.plugins:maven-resources-plugin:2.6(default-resources)
mojoStarted org.apache.maven.plugins:maven-dependency-plugin:2.6(unpack-code-formatter-conf)
[INFO]
[INFO] --- maven-dependency-plugin:2.6:unpack (unpack-code-formatter-conf) @ cantharella.service ---
[INFO] Configured Artifact: nc.ird:cantharella:code-formatter-conf:1.1-SNAPSHOT:zip
[INFO] Unpacking /var/local/jenkins/data/jobs/cantharella/workspace/trunk/target/cantharella-1.1-SNAPSHOT-code-formatter-conf.zip to <http://ci.nuiton.org/jenkins/job/cantharella/nc.ird$cantharella.service/ws/…> with includes "**/*.xml" and excludes ""
mojoSucceeded org.apache.maven.plugins:maven-dependency-plugin:2.6(unpack-code-formatter-conf)
mojoStarted com.googlecode.maven-java-formatter-plugin:maven-java-formatter-plugin:0.3.1(default)
[INFO]
[INFO] --- maven-java-formatter-plugin:0.3.1:format (default) @ cantharella.service ---
[INFO] Using 'UTF-8' encoding to format source files.
[INFO] Number of files to be formatted: 63
[INFO] Successfully formatted: 2 file(s)
[INFO] Fail to format : 0 file(s)
[INFO] Skipped : 61 file(s)
[INFO] Approximate time taken: 0s
mojoSucceeded com.googlecode.maven-java-formatter-plugin:maven-java-formatter-plugin:0.3.1(default)
mojoStarted org.apache.maven.plugins:maven-compiler-plugin:3.0(default-compile)
[INFO]
[INFO] --- maven-compiler-plugin:3.0:compile (default-compile) @ cantharella.service ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 54 source files to <http://ci.nuiton.org/jenkins/job/cantharella/nc.ird$cantharella.service/ws/…>
[INFO] -------------------------------------------------------------
mojoFailed org.apache.maven.plugins:maven-compiler-plugin:3.0(default-compile)[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] <http://ci.nuiton.org/jenkins/job/cantharella/nc.ird$cantharella.service/ws/…>:[46,29] package org.apache.commons.io does not exist
[ERROR] <http://ci.nuiton.org/jenkins/job/cantharella/nc.ird$cantharella.service/ws/…>:[153,28] cannot find symbol
symbol: variable FilenameUtils
location: class nc.ird.cantharella.service.services.impl.DocumentServiceImpl
[INFO] 2 errors
[INFO] -------------------------------------------------------------
projectFailed nc.ird:cantharella.service:1.1-SNAPSHOT
1
1
r175 - in trunk/cantharella.data/src/main: java/nc/ird/cantharella/data/model sql
by echatellier@users.forge.codelutin.com 04 Mar '13
by echatellier@users.forge.codelutin.com 04 Mar '13
04 Mar '13
Author: echatellier
Date: 2013-03-04 16:46:24 +0100 (Mon, 04 Mar 2013)
New Revision: 175
Url: http://forge.codelutin.com/projects/cantharella/repository/revisions/175
Log:
Remove estImage attribute (unused)
Modified:
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/TypeDocument.java
trunk/cantharella.data/src/main/sql/dev_update.sql
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/TypeDocument.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/TypeDocument.java 2013-03-04 15:44:37 UTC (rev 174)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/TypeDocument.java 2013-03-04 15:46:24 UTC (rev 175)
@@ -29,7 +29,6 @@
import javax.persistence.Lob;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
-import javax.validation.constraints.NotNull;
import nc.ird.cantharella.data.model.utils.AbstractModel;
@@ -68,10 +67,6 @@
// see HHH-6105
private String description;
- /** If the type document represents an image ? */
- @NotNull
- private Boolean estImage;
-
/** {@inheritDoc} */
@Override
public TypeDocument clone() throws CloneNotSupportedException {
@@ -80,7 +75,6 @@
clone.nom = nom;
clone.domaine = domaine;
clone.description = description;
- clone.estImage = estImage;
return clone;
}
@@ -159,21 +153,4 @@
public void setDescription(String description) {
this.description = description;
}
-
- /**
- * estImage getter
- * @return estImage
- */
- public Boolean getEstImage() {
- return estImage;
- }
-
- /**
- * estImage setter
- * @param estImage estImage
- */
- public void setEstImage(Boolean estImage) {
- this.estImage = estImage;
- }
-
}
Modified: trunk/cantharella.data/src/main/sql/dev_update.sql
===================================================================
--- trunk/cantharella.data/src/main/sql/dev_update.sql 2013-03-04 15:44:37 UTC (rev 174)
+++ trunk/cantharella.data/src/main/sql/dev_update.sql 2013-03-04 15:46:24 UTC (rev 175)
@@ -171,4 +171,6 @@
add constraint FK3737353B20FEEDAC
foreign key (molecule)
references Molecule;
+
+ alter table typedocument drop column estimage;
COMMIT;
\ No newline at end of file
1
0
Author: echatellier
Date: 2013-03-04 16:44:37 +0100 (Mon, 04 Mar 2013)
New Revision: 174
Url: http://forge.codelutin.com/projects/cantharella/repository/revisions/174
Log:
Fix common io
Modified:
trunk/cantharella.service/pom.xml
Modified: trunk/cantharella.service/pom.xml
===================================================================
--- trunk/cantharella.service/pom.xml 2013-03-04 15:37:36 UTC (rev 173)
+++ trunk/cantharella.service/pom.xml 2013-03-04 15:44:37 UTC (rev 174)
@@ -50,7 +50,6 @@
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
- <scope>test</scope>
</dependency>
<dependency>
<groupId>org.nuiton</groupId>
1
0
r173 - trunk/cantharella.data/src/main/resources
by echatellier@users.forge.codelutin.com 04 Mar '13
by echatellier@users.forge.codelutin.com 04 Mar '13
04 Mar '13
Author: echatellier
Date: 2013-03-04 16:37:36 +0100 (Mon, 04 Mar 2013)
New Revision: 173
Url: http://forge.codelutin.com/projects/cantharella/repository/revisions/173
Log:
Fix i18n
Modified:
trunk/cantharella.data/src/main/resources/data_en.properties
Modified: trunk/cantharella.data/src/main/resources/data_en.properties
===================================================================
--- trunk/cantharella.data/src/main/resources/data_en.properties 2013-03-04 15:31:05 UTC (rev 172)
+++ trunk/cantharella.data/src/main/resources/data_en.properties 2013-03-04 15:37:36 UTC (rev 173)
@@ -244,20 +244,20 @@
ErreurTestBio.nom=Name
ErreurTestBio.description=Description
-TypeDocument.nom=Nom
-TypeDocument.domaine=Domaine
+TypeDocument.nom=Name
+TypeDocument.domaine=Domain
TypeDocument.description=Description
-Document.titre=Titre
-Document.createur=Créateur
-Document.dateCreation=Date de création
-Document.editeur=Éditeur
+Document.titre=Title
+Document.createur=Creator
+Document.dateCreation=Creation date
+Document.editeur=Editor
Document.description=Description
-Document.langue=Langue
-Document.contrainteLegale=Contrainte légale
-Document.ajoutePar=Ajouté par
-Document.typeDocument=Type de document
-Document.fileName=Nom
+Document.langue=Language
+Document.contrainteLegale=Legal constraint
+Document.ajoutePar=Added by
+Document.typeDocument=Document type
+Document.fileName=Name
Document.fileMimetype=Format
#Internationalisation des enums#
1
0
04 Mar '13
Author: echatellier
Date: 2013-03-04 16:31:05 +0100 (Mon, 04 Mar 2013)
New Revision: 172
Url: http://forge.codelutin.com/projects/cantharella/repository/revisions/172
Log:
Fix indexing and document missing file management
Added:
trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/exceptions/InvalidFileExtensionException.java
Modified:
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java
trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/SearchBean.java
trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/DocumentService.java
trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/DocumentServiceImpl.java
trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/LotServiceImpl.java
trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/SearchServiceImpl.java
trunk/cantharella.service/src/main/resources/cantharella.conf
trunk/cantharella.service/src/main/resources/service_fr.properties
trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/config/WebApplicationImpl.java
trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ManageDocumentPage.java
trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.html
trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.java
trunk/cantharella.web/src/main/resources/web_en.properties
trunk/cantharella.web/src/main/resources/web_fr.properties
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java 2013-03-04 13:33:53 UTC (rev 171)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java 2013-03-04 15:31:05 UTC (rev 172)
@@ -36,6 +36,7 @@
import org.apache.commons.lang3.StringUtils;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
+import org.hibernate.LazyInitializationException;
import org.hibernate.search.bridge.FieldBridge;
import org.hibernate.search.bridge.LuceneOptions;
import org.slf4j.Logger;
@@ -98,16 +99,21 @@
document.add(new Field("produit.lot.campagne.nom", lot.getCampagne().getNom(), luceneOptions.getStore(),
luceneOptions.getIndex(), luceneOptions.getTermVector()));
- // commons information for all produit
- List<LotPersonneDroits> personnesDroits = lot.getPersonnesDroits();
- for (LotPersonneDroits lotPersonneDroit : personnesDroits) {
- document.add(new Field("droit.pk2", String.valueOf(lotPersonneDroit.getId().getPk2().getIdPersonne()),
- luceneOptions.getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector()));
+ try {
+ // commons information for all produit
+ List<LotPersonneDroits> personnesDroits = lot.getPersonnesDroits();
+ for (LotPersonneDroits lotPersonneDroit : personnesDroits) {
+ document.add(new Field("droit.pk2", String.valueOf(lotPersonneDroit.getId().getPk2().getIdPersonne()),
+ luceneOptions.getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector()));
+ }
+ List<CampagnePersonneDroits> campagnesDroits = lot.getCampagne().getPersonnesDroits();
+ for (CampagnePersonneDroits campagnesDroit : campagnesDroits) {
+ document.add(new Field("droit.pk2", String.valueOf(campagnesDroit.getId().getPk2().getIdPersonne()),
+ luceneOptions.getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector()));
+ }
+ } catch (LazyInitializationException ex) {
+ // FIXME echatellier 20130304 caused by https://hibernate.onjira.com/browse/HSEARCH-1260
+ LOG.warn("Can't index security due to exception", ex);
}
- List<CampagnePersonneDroits> campagnesDroits = lot.getCampagne().getPersonnesDroits();
- for (CampagnePersonneDroits campagnesDroit : campagnesDroits) {
- document.add(new Field("droit.pk2", String.valueOf(campagnesDroit.getId().getPk2().getIdPersonne()),
- luceneOptions.getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector()));
- }
}
}
Added: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/exceptions/InvalidFileExtensionException.java
===================================================================
--- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/exceptions/InvalidFileExtensionException.java (rev 0)
+++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/exceptions/InvalidFileExtensionException.java 2013-03-04 15:31:05 UTC (rev 172)
@@ -0,0 +1,42 @@
+/*
+ * #%L
+ * Cantharella :: Service
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2009 - 2013 IRD (Institut de Recherche pour le Developpement) and by respective authors (see below)
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+package nc.ird.cantharella.service.exceptions;
+
+import nc.ird.cantharella.data.exceptions.AbstractException;
+
+/**
+ * Exception thrown when file extension is not valid.
+ *
+ * @author Eric Chatellier
+ */
+public class InvalidFileExtensionException extends AbstractException {
+
+ /**
+ * Constructor
+ * @param message message
+ */
+ public InvalidFileExtensionException(String message) {
+ super(message);
+ }
+
+}
Property changes on: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/exceptions/InvalidFileExtensionException.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/SearchBean.java
===================================================================
--- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/SearchBean.java 2013-03-04 13:33:53 UTC (rev 171)
+++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/SearchBean.java 2013-03-04 15:31:05 UTC (rev 172)
@@ -34,8 +34,8 @@
/** Search query. */
protected String query;
- /** Search locale. */
- protected String locale;
+ /** Search country. */
+ protected String country;
/**
* Constructor.
@@ -72,20 +72,20 @@
}
/**
- * Search locale getter.
+ * Search country getter.
*
- * @return locale
+ * @return country
*/
- public String getLocale() {
- return locale;
+ public String getCountry() {
+ return country;
}
/**
- * Search query setter.
+ * Search country setter.
*
- * @param locale locale
+ * @param country country
*/
- public void setLocale(String locale) {
- this.locale = locale;
+ public void setCountry(String country) {
+ this.country = country;
}
}
Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/DocumentService.java
===================================================================
--- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/DocumentService.java 2013-03-04 13:33:53 UTC (rev 171)
+++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/DocumentService.java 2013-03-04 15:31:05 UTC (rev 172)
@@ -28,6 +28,7 @@
import nc.ird.cantharella.data.exceptions.DataNotFoundException;
import nc.ird.cantharella.data.model.Document;
import nc.ird.cantharella.data.model.TypeDocument;
+import nc.ird.cantharella.service.exceptions.InvalidFileExtensionException;
import nc.ird.cantharella.service.utils.normalizers.TypeDocumentNormalizer;
import nc.ird.cantharella.service.utils.normalizers.UniqueFieldNormalizer;
import nc.ird.cantharella.service.utils.normalizers.utils.Normalize;
@@ -108,7 +109,8 @@
* @param clientFileName file name
* @param contentType content type
* @param content content data
+ * @throws InvalidFileExtensionException when file name extension is not valid
*/
@Transactional(readOnly = true)
- void addDocumentContent(Document document, String clientFileName, String contentType, byte[] content);
+ void addDocumentContent(Document document, String clientFileName, String contentType, byte[] content) throws InvalidFileExtensionException;
}
Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/DocumentServiceImpl.java
===================================================================
--- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/DocumentServiceImpl.java 2013-03-04 13:33:53 UTC (rev 171)
+++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/DocumentServiceImpl.java 2013-03-04 15:31:05 UTC (rev 172)
@@ -26,6 +26,8 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.List;
import javax.imageio.ImageIO;
@@ -37,13 +39,16 @@
import nc.ird.cantharella.data.exceptions.UnexpectedException;
import nc.ird.cantharella.data.model.Document;
import nc.ird.cantharella.data.model.TypeDocument;
+import nc.ird.cantharella.service.exceptions.InvalidFileExtensionException;
import nc.ird.cantharella.service.services.DocumentService;
import nc.ird.cantharella.utils.AssertTools;
+import org.apache.commons.io.FilenameUtils;
import org.imgscalr.Scalr;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
/**
@@ -60,6 +65,19 @@
@Autowired
private GenericDao dao;
+ /** Configuration allowed extension list */
+ private Collection<String> documentExtensionAllowed;
+
+ /**
+ * Configuration allowed extension list setter.
+ * @param documentExtensionAllowed configuration value
+ */
+ @Value("${document.extension.allowed}")
+ private void setDcumentExtensionAllowed(String documentExtensionAllowed) {
+ String[] values = documentExtensionAllowed.split("\\s*,\\s*");
+ this.documentExtensionAllowed = Arrays.asList(values);
+ }
+
/** {@inheritDoc} */
@Override
public List<TypeDocument> listTypeDocuments() {
@@ -128,14 +146,23 @@
/** {@inheritDoc} */
@Override
- public void addDocumentContent(Document document, String clientFileName, String contentType, byte[] content) {
+ public void addDocumentContent(Document document, String clientFileName, String contentType, byte[] content)
+ throws InvalidFileExtensionException {
+ AssertTools.assertNotEmpty(clientFileName);
+ String extension = FilenameUtils.getExtension(clientFileName);
+ extension = extension.toLowerCase(); // check lower case
+ if (!documentExtensionAllowed.contains(extension)) {
+ throw new InvalidFileExtensionException("File extension is not valid");
+ }
+
try {
// resize original image
document.setFileName(clientFileName);
document.setFileMimetype(contentType);
document.setFileContent(content);
+ // image detection is based on file mimetype
if (contentType.startsWith("image/")) {
BufferedImage originalImage = ImageIO.read(new ByteArrayInputStream(content));
BufferedImage thumbImage = Scalr.resize(originalImage, 100, 100);
Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/LotServiceImpl.java
===================================================================
--- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/LotServiceImpl.java 2013-03-04 13:33:53 UTC (rev 171)
+++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/LotServiceImpl.java 2013-03-04 15:31:05 UTC (rev 172)
@@ -41,10 +41,7 @@
import nc.ird.cantharella.service.services.LotService;
import nc.ird.cantharella.utils.AssertTools;
-import org.hibernate.Session;
import org.hibernate.SessionFactory;
-import org.hibernate.search.FullTextSession;
-import org.hibernate.search.Search;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -215,17 +212,12 @@
@Override
public void updateLot(Lot lot) throws DataConstraintException {
LOG.info("updateLot " + lot.getRef());
- //try {
- dao.merge(lot);
-
- Session session = sessionFactory.getCurrentSession();
- FullTextSession fullTextSession = Search.getFullTextSession(session);
- fullTextSession.index(lot);
-
- /*} catch (DataNotFoundException e) {
+ try {
+ dao.update(lot);
+ } catch (DataNotFoundException e) {
LOG.error(e.getMessage(), e);
throw new UnexpectedException(e);
- }*/
+ }
}
/** {@inheritDoc} */
Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/SearchServiceImpl.java
===================================================================
--- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/SearchServiceImpl.java 2013-03-04 13:33:53 UTC (rev 171)
+++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/SearchServiceImpl.java 2013-03-04 15:31:05 UTC (rev 172)
@@ -128,8 +128,8 @@
strQuery += search.getQuery();
}
strQuery += " ";
- if (search.getLocale() != null) {
- strQuery += search.getLocale();
+ if (search.getCountry() != null) {
+ strQuery += search.getCountry();
}
strQuery = strQuery.trim();
Modified: trunk/cantharella.service/src/main/resources/cantharella.conf
===================================================================
--- trunk/cantharella.service/src/main/resources/cantharella.conf 2013-03-04 13:33:53 UTC (rev 171)
+++ trunk/cantharella.service/src/main/resources/cantharella.conf 2013-03-04 15:31:05 UTC (rev 172)
@@ -4,7 +4,7 @@
# $Id$
# $HeadURL$
# %%
-# Copyright (C) 2009 - 2012 IRD (Institut de Recherche pour le Developpement) and by respective authors (see below)
+# Copyright (C) 2009 - 2013 IRD (Institut de Recherche pour le Developpement) and by respective authors (see below)
# %%
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -32,3 +32,6 @@
admin.courriel=ISlog(a)ird.fr
admin.password=password
+
+# Document's allowed extensions
+document.extension.allowed=jpeg,jpg,gif,png,xls,doc,pdf,cdx,mol
Modified: trunk/cantharella.service/src/main/resources/service_fr.properties
===================================================================
--- trunk/cantharella.service/src/main/resources/service_fr.properties 2013-03-04 13:33:53 UTC (rev 171)
+++ trunk/cantharella.service/src/main/resources/service_fr.properties 2013-03-04 15:31:05 UTC (rev 172)
@@ -21,7 +21,7 @@
# #L%
###
updatePassword.subject=Cantharella - Nouveau mot de passe
-updatePassword.text=Vote mot de passe Cantharella a été regénéré : {0}
+updatePassword.text=Votre mot de passe Cantharella a été regénéré : {0}
register.subject=Cantharella - Demande de création de compte
register.text=Nous avons bien reçu votre demande de création de compte Cantharella.
Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/config/WebApplicationImpl.java
===================================================================
--- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/config/WebApplicationImpl.java 2013-03-04 13:33:53 UTC (rev 171)
+++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/config/WebApplicationImpl.java 2013-03-04 15:31:05 UTC (rev 172)
@@ -139,6 +139,10 @@
@Value("${document.maxUploadSize}")
protected long documentMaxUploadSize;
+ /** Configuration document's allowed extensions. */
+ @Value("${document.extension.allowed}")
+ protected String documentExtensionAllowed;
+
/**
* Constructor
* @param debug Debug mode
@@ -436,4 +440,13 @@
public long getDocumentMaxUploadSize() {
return documentMaxUploadSize;
}
+
+ /**
+ * Get document allowed extension.
+ *
+ * @return document allowed extension
+ */
+ public String getDocumentExtensionAllowed() {
+ return documentExtensionAllowed;
+ }
}
\ No newline at end of file
Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ManageDocumentPage.java
===================================================================
--- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ManageDocumentPage.java 2013-03-04 13:33:53 UTC (rev 171)
+++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ManageDocumentPage.java 2013-03-04 15:31:05 UTC (rev 172)
@@ -31,10 +31,11 @@
import nc.ird.cantharella.data.model.TypeDocument;
import nc.ird.cantharella.data.model.utils.DocumentAttachable;
import nc.ird.cantharella.data.validation.utils.ModelValidator;
+import nc.ird.cantharella.service.exceptions.InvalidFileExtensionException;
import nc.ird.cantharella.service.services.DocumentService;
import nc.ird.cantharella.service.services.PersonneService;
+import nc.ird.cantharella.utils.BeanTools.AccessType;
import nc.ird.cantharella.utils.CollectionTools;
-import nc.ird.cantharella.utils.BeanTools.AccessType;
import nc.ird.cantharella.web.config.WebApplicationImpl;
import nc.ird.cantharella.web.config.WebContext;
import nc.ird.cantharella.web.pages.TemplatePage;
@@ -48,6 +49,7 @@
import nc.ird.cantharella.web.utils.panels.SimpleTooltipPanel;
import nc.ird.cantharella.web.utils.renderers.MapChoiceRenderer;
+import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
@@ -141,13 +143,16 @@
// get configuration
long documentMaxUploadSize = ((WebApplicationImpl) getApplication()).getDocumentMaxUploadSize();
+ String documentExtensionAllowed = ((WebApplicationImpl) getApplication()).getDocumentExtensionAllowed();
// Initialisation du modèle
documentModel = new Model<Document>(document == null ? new Document() : document);
- boolean createMode = document == null;
+ final boolean createMode = document == null;
if (createMode) {
+ documentModel.getObject().setDateCreation(new Date());
documentModel.getObject().setCreateur(getSession().getUtilisateur());
+ documentModel.getObject().setEditeur(getSession().getUtilisateur().getOrganisme());
documentModel.getObject().setAjoutePar(getSession().getUtilisateur());
}
@@ -245,12 +250,33 @@
// Fichier
formView.add(new SimpleTooltipPanel("Document.file.info", new Model<String>(getString("Document.file.info",
- Model.of(new Object[] { documentMaxUploadSize })))));
+ Model.of(new Object[] { documentMaxUploadSize, documentExtensionAllowed})))));
formView.add(fileUploadField);
// Action : création du document
Button createButton = new SubmittableButton(ACTION_CREATE, new SubmittableButtonEvents() {
@Override
+ public void onValidate() {
+ Document document = documentModel.getObject();
+ final FileUpload uploadedFile = fileUploadField.getFileUpload();
+ if (uploadedFile != null) {
+ try {
+ documentService.addDocumentContent(document, uploadedFile.getClientFileName(), uploadedFile
+ .getContentType(), uploadedFile.getBytes());
+
+ // if no error
+ validateModel();
+ } catch (InvalidFileExtensionException ex) {
+ error(getString("ManageDocumentPage.Error.notAllowedExtension"));
+ }
+ } else if (StringUtils.isEmpty(document.getFileName())) {
+ error(getString("ManageDocumentPage.Error.emptyFile"));
+ } else {
+ validateModel();
+ }
+ }
+
+ @Override
public void onProcess() throws DataConstraintException {
Document document = documentModel.getObject();
documentAttachable.addDocument(document);
@@ -261,17 +287,6 @@
successNextPage(ACTION_CREATE);
redirect();
}
-
- @Override
- public void onValidate() {
- final FileUpload uploadedFile = fileUploadField.getFileUpload();
- if (uploadedFile != null) {
- Document document = documentModel.getObject();
- documentService.addDocumentContent(document, uploadedFile.getClientFileName(), uploadedFile
- .getContentType(), uploadedFile.getBytes());
- }
- validateModel();
- }
});
createButton.setVisibilityAllowed(createMode);
formView.add(createButton);
Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.html
===================================================================
--- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.html 2013-03-04 13:33:53 UTC (rev 171)
+++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.html 2013-03-04 15:31:05 UTC (rev 172)
@@ -38,8 +38,8 @@
<input type="text" wicket:id="SearchPage.Query" />
</div>
<div class="property">
- <label for="SearchPage.Locale"><wicket:message key="SearchPage.Locale" /></label>
- <select id="SearchPage.Locale" wicket:id="SearchPage.Locale" />
+ <label for="SearchPage.Country"><wicket:message key="SearchPage.Country" /></label>
+ <select id="SearchPage.Country" wicket:id="SearchPage.Country" />
</div>
<div class="actions">
<input type="submit" wicket:message="value:SearchPage.Search" />
Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.java
===================================================================
--- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.java 2013-03-04 13:33:53 UTC (rev 171)
+++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.java 2013-03-04 15:31:05 UTC (rev 172)
@@ -141,7 +141,7 @@
}
};
searchForm.add(new TextField<String>("SearchPage.Query", new PropertyModel<String>(queryModel, "query")));
- searchForm.add(new DropDownChoice<String>("SearchPage.Locale", new PropertyModel<String>(queryModel, "locale"),
+ searchForm.add(new DropDownChoice<String>("SearchPage.Country", new PropertyModel<String>(queryModel, "country"),
WebContext.COUNTRY_CODES.get(getSession().getLocale()), new MapChoiceRenderer<String, String>(
WebContext.COUNTRIES.get(getSession().getLocale()))));
add(searchForm);
Modified: trunk/cantharella.web/src/main/resources/web_en.properties
===================================================================
--- trunk/cantharella.web/src/main/resources/web_en.properties 2013-03-04 13:33:53 UTC (rev 171)
+++ trunk/cantharella.web/src/main/resources/web_en.properties 2013-03-04 15:31:05 UTC (rev 172)
@@ -213,6 +213,8 @@
ManageDocumentPage=Document management
ManageDocumentPage.Create.OK=Document will be saved on form submit
ManageDocumentPage.Update.OK=Document will be updated on form submit
+ManageDocumentPage.Error.notAllowedExtension=File extension not allowed
+ManageDocumentPage.Error.emptyFile=File is mandatory
ManageDocumentPage.Delete.OK=Document will be deleted on form submit
ManageDocumentPage.Form.uploadTooLarge=Document size can't be bigger than ${maxSize}
@@ -294,7 +296,7 @@
SearchPage=Search
SearchPage.Search=Search
SearchPage.Query=Query
-SearchPage.Locale=Language
+SearchPage.Country=Country
SearchPage.Specimens=Specimens
SearchPage.Lots=Samples
SearchPage.Extractions=Extractions
@@ -415,7 +417,7 @@
Document.link=Link
Document.type=Type
Document.file=File
-Document.file.info=File size must be less than ${0}Mb
+Document.file.info=File size must be less than ${0}Mb\nFile extension must be in the following : ${1}
#BASIC#
Actions=Actions
Modified: trunk/cantharella.web/src/main/resources/web_fr.properties
===================================================================
--- trunk/cantharella.web/src/main/resources/web_fr.properties 2013-03-04 13:33:53 UTC (rev 171)
+++ trunk/cantharella.web/src/main/resources/web_fr.properties 2013-03-04 15:31:05 UTC (rev 172)
@@ -213,6 +213,8 @@
ManageDocumentPage.Create.OK=L'enregistrement du document s'effectuera à la validation du formulaire
ManageDocumentPage.Update.OK=La modification du document s'effectuera à la validation du formulaire
ManageDocumentPage.Delete.OK=La suppression du document s'effectuera à la validation du formulaire
+ManageDocumentPage.Error.notAllowedExtension=Extension de fichier non autorisée
+ManageDocumentPage.Error.emptyFile=Le fichier est requis
ManageDocumentPage.Form.uploadTooLarge=La taille du document ne peut pas dépasser ${maxSize}
UpdateUtilisateurPage=Gestion du compte
@@ -293,7 +295,7 @@
SearchPage=Recherche
SearchPage.Search=Rechercher
SearchPage.Query=Requête
-SearchPage.Locale=Langue
+SearchPage.Country=Pays
SearchPage.Specimens=Specimens
SearchPage.Lots=Lots
SearchPage.Extractions=Extractions
@@ -413,7 +415,7 @@
Document.link=Lien
Document.type=Type
Document.file=Fichier
-Document.file.info=La taille du fichier doit faire moins de ${0}Mo
+Document.file.info=La taille du fichier doit faire moins de ${0}Mo\nL'extension du fichier doit être une des suivantes : ${1}
#BASIC#
Actions=Actions
1
0
r171 - trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/config
by echatellier@users.forge.codelutin.com 04 Mar '13
by echatellier@users.forge.codelutin.com 04 Mar '13
04 Mar '13
Author: echatellier
Date: 2013-03-04 14:33:53 +0100 (Mon, 04 Mar 2013)
New Revision: 171
Url: http://forge.codelutin.com/projects/cantharella/repository/revisions/171
Log:
Remove property that handle exception
Modified:
trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/config/ServiceContext.java
Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/config/ServiceContext.java
===================================================================
--- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/config/ServiceContext.java 2013-03-04 13:26:12 UTC (rev 170)
+++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/config/ServiceContext.java 2013-03-04 13:33:53 UTC (rev 171)
@@ -153,11 +153,6 @@
properties.put("mail.debug", mailDebugProperty);
properties.put("mail.smtp.connectiontimeout", MAIL_SMTP_TIMEOUT);
properties.put("mail.smtp.timeout", MAIL_SMTP_TIMEOUT);
- if (mailDebugProperty) {
- // this next line generate a SMTPAddressSucceededException
- // when sending an email
- properties.put("mail.smtp.reportsuccess", Boolean.TRUE);
- }
mailSender.setJavaMailProperties(properties);
mailSender.setHost(mailHostProperty);
mailSender.setPort(MAIL_SMTP_PORT);
1
0
r170 - trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/config
by echatellier@users.forge.codelutin.com 04 Mar '13
by echatellier@users.forge.codelutin.com 04 Mar '13
04 Mar '13
Author: echatellier
Date: 2013-03-04 14:26:12 +0100 (Mon, 04 Mar 2013)
New Revision: 170
Url: http://forge.codelutin.com/projects/cantharella/repository/revisions/170
Log:
Add comment
Modified:
trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/config/ServiceContext.java
Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/config/ServiceContext.java
===================================================================
--- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/config/ServiceContext.java 2013-03-04 13:24:47 UTC (rev 169)
+++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/config/ServiceContext.java 2013-03-04 13:26:12 UTC (rev 170)
@@ -154,6 +154,8 @@
properties.put("mail.smtp.connectiontimeout", MAIL_SMTP_TIMEOUT);
properties.put("mail.smtp.timeout", MAIL_SMTP_TIMEOUT);
if (mailDebugProperty) {
+ // this next line generate a SMTPAddressSucceededException
+ // when sending an email
properties.put("mail.smtp.reportsuccess", Boolean.TRUE);
}
mailSender.setJavaMailProperties(properties);
1
0
r169 - trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/config
by echatellier@users.forge.codelutin.com 04 Mar '13
by echatellier@users.forge.codelutin.com 04 Mar '13
04 Mar '13
Author: echatellier
Date: 2013-03-04 14:24:47 +0100 (Mon, 04 Mar 2013)
New Revision: 169
Url: http://forge.codelutin.com/projects/cantharella/repository/revisions/169
Log:
Report success only when debug property is true (generate a success exception)
Modified:
trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/config/ServiceContext.java
Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/config/ServiceContext.java
===================================================================
--- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/config/ServiceContext.java 2013-03-04 11:33:07 UTC (rev 168)
+++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/config/ServiceContext.java 2013-03-04 13:24:47 UTC (rev 169)
@@ -153,7 +153,9 @@
properties.put("mail.debug", mailDebugProperty);
properties.put("mail.smtp.connectiontimeout", MAIL_SMTP_TIMEOUT);
properties.put("mail.smtp.timeout", MAIL_SMTP_TIMEOUT);
- properties.put("mail.smtp.reportsuccess", Boolean.TRUE);
+ if (mailDebugProperty) {
+ properties.put("mail.smtp.reportsuccess", Boolean.TRUE);
+ }
mailSender.setJavaMailProperties(properties);
mailSender.setHost(mailHostProperty);
mailSender.setPort(MAIL_SMTP_PORT);
1
0
04 Mar '13
Author: echatellier
Date: 2013-03-04 12:33:07 +0100 (Mon, 04 Mar 2013)
New Revision: 168
Url: http://forge.codelutin.com/projects/cantharella/repository/revisions/168
Log:
fixes #1643: Add search engine security implementation
Added:
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/config/HibernateSearchIntegrator.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/CampagnePersonneBridge.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/IndexEventListener.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/LotPersonneBridge.java
Modified:
trunk/cantharella.data/pom.xml
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/config/DataContext.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/dao/GenericDao.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/dao/impl/HibernateTemplateDao.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Campagne.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/CampagnePersonneDroits.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Document.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Extraction.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Extrait.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Lot.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/LotPersonneDroits.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Molecule.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/MoleculeProvenance.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Personne.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Produit.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Purification.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Specimen.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Station.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/TestBio.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java
trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/UtilisateurSearchFilter.java
trunk/cantharella.data/src/main/resources/META-INF/services/org.hibernate.integrator.spi.Integrator
trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/LotService.java
trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/LotServiceImpl.java
trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/SearchServiceImpl.java
trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/utilisateur/ManageUtilisateurPage.java
Modified: trunk/cantharella.data/pom.xml
===================================================================
--- trunk/cantharella.data/pom.xml 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/pom.xml 2013-03-04 11:33:07 UTC (rev 168)
@@ -119,6 +119,10 @@
<artifactId>hibernate-search-engine</artifactId>
</dependency>
<dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-search-orm</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
</dependency>
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/config/DataContext.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/config/DataContext.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/config/DataContext.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -315,7 +315,7 @@
hibernateProperties.setProperty("hibernate.search.default.directory_provider", "filesystem");
hibernateProperties.setProperty("hibernate.search.default.indexBase", hibernateSearchIndexBase);
hibernateProperties.setProperty("hibernate.search.analyzer", hibernateSearchAnalyzer);
-
+ hibernateProperties.setProperty("hibernate.search.enable_dirty_check", "false");
// Hibernate: Session
//hibernateProperties.setProperty("hibernate.current_session_context_class", "thread");
//hibernateProperties.setProperty(Environment.JTA_PLATFORM, "hibernate.transaction.factory_class", SpringTransactionFactory.class.getName());
Added: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/config/HibernateSearchIntegrator.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/config/HibernateSearchIntegrator.java (rev 0)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/config/HibernateSearchIntegrator.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -0,0 +1,142 @@
+package nc.ird.cantharella.data.config;
+
+/*
+ * #%L
+ * Cantharella :: Data
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2009 - 2013 IRD (Institut de Recherche pour le Developpement) and by respective authors (see below)
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+
+import java.util.List;
+
+import nc.ird.cantharella.data.model.Campagne;
+import nc.ird.cantharella.data.model.CampagnePersonneDroits;
+import nc.ird.cantharella.data.model.Lot;
+import nc.ird.cantharella.data.model.LotPersonneDroits;
+import nc.ird.cantharella.data.model.search.IndexEventListener;
+
+import org.hibernate.Session;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+import org.hibernate.event.service.spi.EventListenerRegistry;
+import org.hibernate.event.spi.EventType;
+import org.hibernate.event.spi.PostDeleteEvent;
+import org.hibernate.event.spi.PostDeleteEventListener;
+import org.hibernate.event.spi.PostInsertEvent;
+import org.hibernate.event.spi.PostInsertEventListener;
+import org.hibernate.event.spi.PostUpdateEvent;
+import org.hibernate.event.spi.PostUpdateEventListener;
+import org.hibernate.integrator.spi.Integrator;
+import org.hibernate.metamodel.source.MetadataImplementor;
+import org.hibernate.search.FullTextSession;
+import org.hibernate.search.Search;
+import org.hibernate.service.spi.SessionFactoryServiceRegistry;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Register cantharella validator into hibernate using integrator.
+ *
+ * @author echatellier
+ */
+public class HibernateSearchIntegrator implements Integrator, PostDeleteEventListener, PostUpdateEventListener,
+ PostInsertEventListener {
+
+ /** Logger */
+ private static final Logger LOG = LoggerFactory.getLogger(HibernateSearchIntegrator.class);
+
+ /** {@inheritDoc} */
+ @Override
+ public void integrate(Configuration configuration, SessionFactoryImplementor sessionFactory,
+ SessionFactoryServiceRegistry serviceRegistry) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Registering custom search listener into hibernate");
+ }
+
+ // register validator
+ EventListenerRegistry eventRegistry = serviceRegistry.getService(EventListenerRegistry.class);
+
+ IndexEventListener listener = new IndexEventListener(IndexEventListener.Installation.SINGLE_INSTANCE);
+ eventRegistry.prependListeners(EventType.POST_DELETE, listener);
+ eventRegistry.prependListeners(EventType.POST_UPDATE, listener);
+ eventRegistry.prependListeners(EventType.POST_INSERT, listener);
+ listener.initialize(configuration);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void integrate(MetadataImplementor metadata, SessionFactoryImplementor sessionFactory,
+ SessionFactoryServiceRegistry serviceRegistry) {
+ integrate((Configuration) null, sessionFactory, serviceRegistry);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void disintegrate(SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) {
+
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void onPostInsert(PostInsertEvent event) {
+ Object entity = event.getEntity();
+ LOG.debug("[Event] onPostInsert on : " + entity);
+ reIndexEntity(event.getSession(), event.getEntity());
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void onPostUpdate(PostUpdateEvent event) {
+ Object entity = event.getEntity();
+ LOG.debug("[Event] onPostUpdate on : " + entity);
+ reIndexEntity(event.getSession(), event.getEntity());
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void onPostDelete(PostDeleteEvent event) {
+ Object entity = event.getEntity();
+ LOG.debug("[Event] onPostDelete on : " + entity);
+ reIndexEntity(event.getSession(), event.getEntity());
+ }
+
+ /**
+ * Reindex entity associated with event entity depending on
+ * entity type.
+ *
+ * @param session current session
+ * @param entity current entity
+ */
+ protected void reIndexEntity(Session session, Object entity) {
+ if (entity instanceof LotPersonneDroits) {
+ Lot lot = ((LotPersonneDroits) entity).getId().getPk1();
+ lot = (Lot) session.merge(lot);
+ FullTextSession fullTextSession = Search.getFullTextSession(session);
+ fullTextSession.index(lot);
+ } else if (entity instanceof CampagnePersonneDroits) {
+ Campagne campagne = ((CampagnePersonneDroits) entity).getId().getPk1();
+ campagne = (Campagne) session.merge(campagne);
+ FullTextSession fullTextSession = Search.getFullTextSession(session);
+ List<Lot> lots = campagne.getLots();
+ for (Lot lot : lots) {
+ fullTextSession.index(lot);
+ }
+ }
+ }
+}
Property changes on: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/config/HibernateSearchIntegrator.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/dao/GenericDao.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/dao/GenericDao.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/dao/GenericDao.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -287,7 +287,8 @@
* Merge a model from the hibernate session.
* @param <M> Model type
* @param model Model (not null)
+ * @return merged object
*/
@Transactional
- <M extends AbstractModel> void merge(M model);
+ <M extends AbstractModel> M merge(M model);
}
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/dao/impl/HibernateTemplateDao.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/dao/impl/HibernateTemplateDao.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/dao/impl/HibernateTemplateDao.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -298,9 +298,10 @@
}
/** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
@Override
- public <M extends AbstractModel> void merge(M model) {
+ public <M extends AbstractModel> M merge(M model) {
AssertTools.assertNotNull(model);
- sessionFactory.getCurrentSession().merge(model);
+ return (M) sessionFactory.getCurrentSession().merge(model);
}
}
\ No newline at end of file
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Campagne.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Campagne.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Campagne.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -50,8 +50,12 @@
import org.apache.commons.beanutils.BeanComparator;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.Type;
+import org.hibernate.search.annotations.ContainedIn;
import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.IndexedEmbedded;
import org.hibernate.search.annotations.Store;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
@@ -119,6 +123,7 @@
/** Lots */
@NotNull
@OneToMany(mappedBy = "campagne", fetch = FetchType.LAZY)
+ @ContainedIn
private List<Lot> lots;
/** Créateur */
@@ -135,6 +140,7 @@
/** Droits personnes */
@NotNull
@OneToMany(mappedBy = "id.pk1", fetch = FetchType.LAZY)
+ @IndexedEmbedded
private List<CampagnePersonneDroits> personnesDroits;
/** Stations prospectées **/
@@ -144,9 +150,11 @@
private List<Station> stations;
/** Attached documents. */
- @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true)
+ @OneToMany(fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "campagne")
@Cascade( { CascadeType.SAVE_UPDATE })
+ @Fetch(value = FetchMode.SUBSELECT)
+ // see HHH-1718
private List<Document> documents;
/**
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/CampagnePersonneDroits.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/CampagnePersonneDroits.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/CampagnePersonneDroits.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -22,20 +22,29 @@
*/
package nc.ird.cantharella.data.model;
+import javax.persistence.Embeddable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
+import nc.ird.cantharella.data.model.search.CampagnePersonneBridge;
import nc.ird.cantharella.data.model.utils.AbstractModel;
import nc.ird.cantharella.data.model.utils.CompositeId;
+import org.hibernate.search.annotations.ClassBridge;
+import org.hibernate.search.annotations.Index;
+import org.hibernate.search.annotations.IndexedEmbedded;
+import org.hibernate.search.annotations.Store;
+
/**
* Modèle : droits d'une personne sur une campagne
* @author Mickael Tricot
*/
@Entity
@Table
+@Embeddable
+@ClassBridge(name = "campagne", index = Index.YES, store = Store.YES, impl = CampagnePersonneBridge.class)
public class CampagnePersonneDroits extends AbstractModel {
/** Droits */
@@ -45,6 +54,7 @@
/** ID */
@EmbeddedId
@NotNull
+ @IndexedEmbedded
private CompositeId<Campagne, Personne> id;
/**
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Document.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Document.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Document.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -26,6 +26,7 @@
import java.util.Date;
import javax.persistence.Basic;
+import javax.persistence.Embeddable;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
@@ -49,6 +50,7 @@
* @author Eric Chatellier
*/
@Entity
+@Embeddable
public class Document extends AbstractModel {
/** Id du document. */
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Extraction.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Extraction.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Extraction.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -53,6 +53,8 @@
import org.apache.commons.collections.comparators.ComparatorChain;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.Type;
import org.hibernate.search.annotations.ContainedIn;
import org.hibernate.search.annotations.Field;
@@ -103,7 +105,7 @@
/** Lot utilisé pour l'extraction **/
@NotNull
@ManyToOne(fetch = FetchType.EAGER, optional = false)
- @IndexedEmbedded(depth = 1)
+ @IndexedEmbedded
private Lot lot;
/** Masse avant l'extraction **/
@@ -132,9 +134,11 @@
private List<Extrait> extraits;
/** Attached documents. */
- @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true)
+ @OneToMany(fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "extraction")
@Cascade( { CascadeType.SAVE_UPDATE })
+ @Fetch(value = FetchMode.SUBSELECT)
+ // see HHH-1718
private List<Document> documents;
/**
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Extrait.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Extrait.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Extrait.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -28,10 +28,10 @@
import javax.persistence.ManyToOne;
import javax.validation.constraints.NotNull;
+import org.hibernate.search.annotations.IndexedEmbedded;
+
import nc.ird.cantharella.data.validation.CollectionUniqueField;
-import org.hibernate.search.annotations.IndexedEmbedded;
-
/**
* Modèle : Produit issue d'une extraction
* @author Adrien Cheype
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Lot.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Lot.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Lot.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -53,7 +53,10 @@
import org.apache.commons.beanutils.BeanComparator;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.Type;
+import org.hibernate.search.annotations.ContainedIn;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.FullTextFilterDef;
import org.hibernate.search.annotations.FullTextFilterDefs;
@@ -90,7 +93,7 @@
/** Campagne */
@NotNull
@ManyToOne(fetch = FetchType.EAGER, optional = false)
- @IndexedEmbedded(depth = 1)
+ @IndexedEmbedded
private Campagne campagne;
/** complement */
@@ -147,6 +150,7 @@
/** Droits attribués aux personnes */
@OneToMany(mappedBy = "id.pk1", fetch = FetchType.LAZY)
@NotNull
+ @IndexedEmbedded
private List<LotPersonneDroits> personnesDroits;
/** Spécimen source */
@@ -158,18 +162,21 @@
/** Station */
@NotNull
@ManyToOne(fetch = FetchType.EAGER, optional = false)
- @IndexedEmbedded(depth = 1)
+ @IndexedEmbedded
private Station station;
/** Extractions provenants du lot */
@OneToMany(mappedBy = "lot", fetch = FetchType.LAZY)
@NotNull
+ @ContainedIn
private List<Extraction> extractions;
/** Attached documents. */
- @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true)
+ @OneToMany(fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "lot")
@Cascade( { CascadeType.SAVE_UPDATE })
+ @Fetch(value = FetchMode.SUBSELECT)
+ // see HHH-1718
private List<Document> documents;
/**
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/LotPersonneDroits.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/LotPersonneDroits.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/LotPersonneDroits.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -22,20 +22,29 @@
*/
package nc.ird.cantharella.data.model;
+import javax.persistence.Embeddable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
+import nc.ird.cantharella.data.model.search.LotPersonneBridge;
import nc.ird.cantharella.data.model.utils.AbstractModel;
import nc.ird.cantharella.data.model.utils.CompositeId;
+import org.hibernate.search.annotations.ClassBridge;
+import org.hibernate.search.annotations.Index;
+import org.hibernate.search.annotations.IndexedEmbedded;
+import org.hibernate.search.annotations.Store;
+
/**
* Modèle : droits d'une personne sur un lot
* @author Mickael Tricot
*/
@Entity
@Table
+@Embeddable
+@ClassBridge(name = "lot", index = Index.YES, store = Store.YES, impl = LotPersonneBridge.class)
public class LotPersonneDroits extends AbstractModel {
/** Droits */
@@ -45,6 +54,7 @@
/** ID */
@EmbeddedId
@NotNull
+ @IndexedEmbedded
private CompositeId<Lot, Personne> id;
/**
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Molecule.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Molecule.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Molecule.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -46,6 +46,8 @@
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.Type;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Indexed;
@@ -105,7 +107,7 @@
/** Campagne. */
@ManyToOne(fetch = FetchType.EAGER)
- @IndexedEmbedded(depth = 1)
+ @IndexedEmbedded
private Campagne campagne;
/** Identifiee par. */
@@ -134,12 +136,15 @@
/** Produit utilisé obtenir le résultat */
@OneToMany(mappedBy = "molecule", fetch = FetchType.LAZY, orphanRemoval = true)
@Cascade( { CascadeType.SAVE_UPDATE })
+ @IndexedEmbedded
private List<MoleculeProvenance> provenances;
/** Attached documents. */
- @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true)
+ @OneToMany(fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "molecule")
@Cascade( { CascadeType.SAVE_UPDATE })
+ @Fetch(value = FetchMode.SUBSELECT)
+ // see HHH-1718
private List<Document> documents;
/**
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/MoleculeProvenance.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/MoleculeProvenance.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/MoleculeProvenance.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -34,6 +34,9 @@
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
+import org.hibernate.search.annotations.ContainedIn;
+import org.hibernate.search.annotations.IndexedEmbedded;
+
import nc.ird.cantharella.data.config.DataContext;
import nc.ird.cantharella.data.model.utils.AbstractModel;
@@ -59,11 +62,13 @@
/** Molecule dont fait partie la provenance */
@NotNull
@ManyToOne(fetch = FetchType.EAGER, optional = false)
+ @ContainedIn
private Molecule molecule;
/** Produit sur lequel porte la provenance **/
@NotNull
@ManyToOne(fetch = FetchType.EAGER, optional = false)
+ @IndexedEmbedded
private Produit produit;
/**
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Personne.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Personne.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Personne.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -50,6 +50,8 @@
import org.apache.commons.collections.comparators.ComparatorChain;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.Index;
import org.hibernate.annotations.Type;
import org.hibernate.validator.constraints.Email;
@@ -184,9 +186,11 @@
private List<TestBio> testsBioCrees;
/** Attached documents. */
- @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true)
+ @OneToMany(fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "personne")
@Cascade( { CascadeType.SAVE_UPDATE })
+ @Fetch(value = FetchMode.SUBSELECT)
+ // see HHH-1718
private List<Document> documents;
/**
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Produit.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Produit.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Produit.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -57,7 +57,7 @@
*/
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
-@ClassBridge(name = "produitBridge", index = Index.YES, store = Store.YES, impl = ProduitBridge.class)
+@ClassBridge(name = "produit", index = Index.YES, store = Store.YES, impl = ProduitBridge.class)
public abstract class Produit extends AbstractModel implements Cloneable, Comparable<Produit> {
/** Id du produit */
@@ -81,6 +81,7 @@
/** Purifications effectuées à partir du produit */
@NotNull
@OneToMany(mappedBy = "produit", fetch = FetchType.LAZY)
+ @ContainedIn
private List<Purification> purificationsSuivantes;
/** Résultats de tests biologiques effectués à partir du produit */
@@ -210,5 +211,4 @@
public void setResultatsTestsBioSuivants(List<ResultatTestBio> resultatsTestsBioSuivants) {
this.resultatsTestsBioSuivants = resultatsTestsBioSuivants;
}
-
}
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Purification.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Purification.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Purification.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -55,7 +55,10 @@
import org.apache.commons.collections.comparators.ComparatorChain;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.Type;
+import org.hibernate.search.annotations.ContainedIn;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.FullTextFilterDef;
import org.hibernate.search.annotations.FullTextFilterDefs;
@@ -143,6 +146,7 @@
@NotNull
@OneToMany(mappedBy = "purification", fetch = FetchType.LAZY, orphanRemoval = true)
@Cascade( { CascadeType.REFRESH, CascadeType.SAVE_UPDATE })
+ @ContainedIn
private List<Fraction> fractions;
/**
@@ -153,9 +157,11 @@
private Lot lotSource;
/** Attached documents. */
- @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true)
+ @OneToMany(fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "purification")
@Cascade( { CascadeType.SAVE_UPDATE })
+ @Fetch(value = FetchMode.SUBSELECT)
+ // see HHH-1718
private List<Document> documents;
/**
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Specimen.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Specimen.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Specimen.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -50,6 +50,8 @@
import org.apache.commons.beanutils.BeanComparator;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.Type;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.FullTextFilterDef;
@@ -146,11 +148,11 @@
@Temporal(TemporalType.DATE)
private Date dateDepot;
- /** Embranchement */
+ /** Num dépot */
@Length(max = LENGTH_TINY_TEXT)
private String numDepot;
- /** Embranchement */
+ /** Lieu depot */
@Length(max = LENGTH_MEDIUM_TEXT)
private String lieuDepot;
@@ -172,9 +174,11 @@
private Personne createur;
/** Attached documents. */
- @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true)
+ @OneToMany(fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "specimen")
@Cascade( { CascadeType.SAVE_UPDATE })
+ @Fetch(value = FetchMode.SUBSELECT)
+ // see HHH-1718
private List<Document> documents;
/**
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Station.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Station.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Station.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -51,7 +51,10 @@
import org.hibernate.annotations.AccessType;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.Type;
+import org.hibernate.search.annotations.ContainedIn;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.FullTextFilterDef;
import org.hibernate.search.annotations.FullTextFilterDefs;
@@ -124,6 +127,7 @@
/** Lots */
@NotNull
@OneToMany(mappedBy = "station", fetch = FetchType.LAZY)
+ @ContainedIn
private List<Lot> lots;
/** Stations */
@@ -133,12 +137,15 @@
/** Spécimens de référence qui sont rattachés à cette station */
@OneToMany(mappedBy = "station", fetch = FetchType.LAZY)
+ @ContainedIn
private List<Specimen> specimensRattaches;
/** Attached documents. */
- @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true)
+ @OneToMany(fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "station")
@Cascade( { CascadeType.SAVE_UPDATE })
+ @Fetch(value = FetchMode.SUBSELECT)
+ // see HHH-1718
private List<Document> documents;
/**
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/TestBio.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/TestBio.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/TestBio.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -57,6 +57,8 @@
import org.apache.commons.beanutils.BeanComparator;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.Type;
import org.hibernate.search.annotations.ContainedIn;
import org.hibernate.search.annotations.Field;
@@ -146,9 +148,11 @@
private List<ResultatTestBio> resultats;
/** Attached documents. */
- @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true)
+ @OneToMany(fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "resultatTestBio")
@Cascade( { CascadeType.SAVE_UPDATE })
+ @Fetch(value = FetchMode.SUBSELECT)
+ // see HHH-1718
private List<Document> documents;
/**
Added: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/CampagnePersonneBridge.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/CampagnePersonneBridge.java (rev 0)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/CampagnePersonneBridge.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -0,0 +1,68 @@
+package nc.ird.cantharella.data.model.search;
+
+/*
+ * #%L
+ * Cantharella :: Data
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2010 - 2013 IRD (Institut de Recherche pour le Developpement) and by respective authors (see below)
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+
+import nc.ird.cantharella.data.model.Campagne;
+import nc.ird.cantharella.data.model.CampagnePersonneDroits;
+import nc.ird.cantharella.data.model.Personne;
+import nc.ird.cantharella.data.model.utils.CompositeId;
+
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+import org.hibernate.search.bridge.FieldBridge;
+import org.hibernate.search.bridge.LuceneOptions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Hibernate search can't index CompositeId by himself.
+ *
+ * To index right on entities, we add a field "droit.pk2" containing user
+ * id, meaning "this user can see this indexed document".
+ *
+ * @author Eric Chatellier
+ */
+public class CampagnePersonneBridge implements FieldBridge {
+
+ /** Logger */
+ private static final Logger LOG = LoggerFactory.getLogger(CampagnePersonneBridge.class);
+
+ /** {@inheritDoc} */
+ @Override
+ public void set(String name, Object value, Document document, LuceneOptions luceneOptions) {
+
+ CampagnePersonneDroits campagnePersonneDroits = (CampagnePersonneDroits) value;
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Custom indexing of CampagnePersonneDroits : "
+ + campagnePersonneDroits.getId().getPk1().getIdCampagne() + ","
+ + campagnePersonneDroits.getId().getPk2().getIdPersonne());
+ }
+
+ CompositeId<Campagne, Personne> compositeId = campagnePersonneDroits.getId();
+
+ // commons information for all produit
+ document.add(new Field("droit.pk2", String.valueOf(compositeId.getPk2().getIdPersonne()), luceneOptions
+ .getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector()));
+ }
+}
Property changes on: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/CampagnePersonneBridge.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/IndexEventListener.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/IndexEventListener.java (rev 0)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/IndexEventListener.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -0,0 +1,105 @@
+/*
+ * #%L
+ * Cantharella :: Data
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 - 2013 IRD (Institut de Recherche pour le Developpement) and by respective authors (see below)
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+package nc.ird.cantharella.data.model.search;
+
+import java.io.Serializable;
+
+import nc.ird.cantharella.data.model.Campagne;
+import nc.ird.cantharella.data.model.CampagnePersonneDroits;
+import nc.ird.cantharella.data.model.Lot;
+import nc.ird.cantharella.data.model.LotPersonneDroits;
+
+import org.hibernate.Session;
+import org.hibernate.event.spi.AbstractEvent;
+import org.hibernate.event.spi.PostDeleteEvent;
+import org.hibernate.event.spi.PostInsertEvent;
+import org.hibernate.event.spi.PostUpdateEvent;
+import org.hibernate.search.backend.spi.WorkType;
+import org.hibernate.search.event.impl.FullTextIndexEventListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Hibernate event listener to force reindexation on custom indexed entity:
+ * {@link LotPersonneDroits} and {@link CampagnePersonneDroits}.
+ *
+ * @author Eric Chatellier
+ */
+public class IndexEventListener extends FullTextIndexEventListener {
+
+ /** Logger */
+ private static final Logger LOG = LoggerFactory.getLogger(IndexEventListener.class);
+
+ /**
+ * Constructor.
+ * @param installation installation strategy
+ */
+ public IndexEventListener(Installation installation) {
+ super(installation);
+ }
+
+ /** {@inheritDoc}. */
+ @Override
+ public void onPostDelete(PostDeleteEvent event) {
+ Object entity = event.getEntity();
+ LOG.debug("[Event] onPostDelete on : " + entity);
+ reIndexEntity(event, event.getEntity(), event.getId());
+ }
+
+ /** {@inheritDoc}. */
+ @Override
+ public void onPostInsert(PostInsertEvent event) {
+ Object entity = event.getEntity();
+ LOG.debug("[Event] onPostInsert on : " + entity);
+ reIndexEntity(event, event.getEntity(), event.getId());
+ }
+
+ /** {@inheritDoc}. */
+ @Override
+ public void onPostUpdate(PostUpdateEvent event) {
+ Object entity = event.getEntity();
+ LOG.debug("[Event] onPostUpdate on : " + entity);
+ reIndexEntity(event, event.getEntity(), event.getId());
+ }
+
+ /**
+ * Reindex entity associated with event entity depending on
+ * entity type.
+ *
+ * @param event event
+ * @param entity current entity
+ * @param id entity id
+ */
+ protected void reIndexEntity(AbstractEvent event, Object entity, Serializable id) {
+ Session session = event.getSession();
+ if (entity instanceof LotPersonneDroits) {
+ Lot lot = ((LotPersonneDroits) entity).getId().getPk1();
+ lot = (Lot) session.merge(lot);
+ super.processWork(lot, id, WorkType.INDEX, event, false);
+ } else if (entity instanceof CampagnePersonneDroits) {
+ Campagne campagne = ((CampagnePersonneDroits) entity).getId().getPk1();
+ campagne = (Campagne) session.merge(campagne);
+ super.processWork(campagne, id, WorkType.INDEX, event, false);
+ }
+ }
+}
Property changes on: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/IndexEventListener.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/LotPersonneBridge.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/LotPersonneBridge.java (rev 0)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/LotPersonneBridge.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -0,0 +1,67 @@
+package nc.ird.cantharella.data.model.search;
+
+/*
+ * #%L
+ * Cantharella :: Data
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2010 - 2013 IRD (Institut de Recherche pour le Developpement) and by respective authors (see below)
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+
+import nc.ird.cantharella.data.model.Lot;
+import nc.ird.cantharella.data.model.LotPersonneDroits;
+import nc.ird.cantharella.data.model.Personne;
+import nc.ird.cantharella.data.model.utils.CompositeId;
+
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+import org.hibernate.search.bridge.FieldBridge;
+import org.hibernate.search.bridge.LuceneOptions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Hibernate search can't index CompositeId by himself.
+ *
+ * To index right on entities, we add a field "droit.pk2" containing user
+ * id, meaning "this user can see this indexed document".
+ *
+ * @author Eric Chatellier
+ */
+public class LotPersonneBridge implements FieldBridge {
+
+ /** Logger */
+ private static final Logger LOG = LoggerFactory.getLogger(LotPersonneBridge.class);
+
+ /** {@inheritDoc} */
+ @Override
+ public void set(String name, Object value, Document document, LuceneOptions luceneOptions) {
+
+ LotPersonneDroits lotPersonneDroits = (LotPersonneDroits) value;
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Custom indexing of LotPersonneDroits : " + lotPersonneDroits.getId().getPk1().getIdLot() + ","
+ + lotPersonneDroits.getId().getPk2().getIdPersonne());
+ }
+
+ CompositeId<Lot, Personne> compositeId = lotPersonneDroits.getId();
+
+ // commons information for all produit
+ document.add(new Field("droit.pk2", String.valueOf(compositeId.getPk2().getIdPersonne()), luceneOptions
+ .getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector()));
+ }
+}
Property changes on: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/LotPersonneBridge.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -23,24 +23,29 @@
* #L%
*/
+import java.util.List;
+
+import nc.ird.cantharella.data.model.CampagnePersonneDroits;
import nc.ird.cantharella.data.model.Extrait;
import nc.ird.cantharella.data.model.Fraction;
+import nc.ird.cantharella.data.model.Lot;
+import nc.ird.cantharella.data.model.LotPersonneDroits;
import nc.ird.cantharella.data.model.Produit;
import nc.ird.cantharella.data.model.ResultatTestBio;
import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.hibernate.search.bridge.FieldBridge;
import org.hibernate.search.bridge.LuceneOptions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* {@link ResultatTestBio} class contains a polymorphic entity that can't be
* properly indexed by hibernate search.
*
- * @author echatellier
+ * @author Eric Chatellier
*/
public class ProduitBridge implements FieldBridge {
@@ -52,68 +57,57 @@
public void set(String name, Object value, Document document, LuceneOptions luceneOptions) {
Produit produit = (Produit) value;
- if (LOG.isDebugEnabled()) {
- LOG.debug("Custom indexing of Produit entity : " + produit);
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Custom indexing of Produit entity : " + produit);
}
// commons information for all produit
- document.add(new Field("ref", produit.getRef(), luceneOptions.getStore(), luceneOptions.getIndex(),
- luceneOptions.getTermVector()));
+ //document.add(new Field("produit.ref", produit.getRef(), luceneOptions.getStore(), luceneOptions.getIndex(),
+ // luceneOptions.getTermVector()));
+ Lot lot = null;
if (produit instanceof Extrait) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Custom indexing of Extrait entity");
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Custom indexing of Extrait entity");
}
Extrait extrait = (Extrait) produit;
- document.add(new Field("extraction.lot.ref", extrait.getExtraction().getLot().getRef(), luceneOptions
- .getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector()));
- document.add(new Field("extraction.lot.specimen.embranchement", extrait.getExtraction().getLot()
- .getSpecimenRef().getEmbranchement(), luceneOptions.getStore(), luceneOptions.getIndex(),
- luceneOptions.getTermVector()));
- if (StringUtils.isNotBlank(extrait.getExtraction().getLot().getSpecimenRef().getFamille())) {
- document.add(new Field("extraction.lot.specimen.famille", extrait.getExtraction().getLot()
- .getSpecimenRef().getFamille(), luceneOptions.getStore(), luceneOptions.getIndex(),
- luceneOptions.getTermVector()));
- }
- if (StringUtils.isNotBlank(extrait.getExtraction().getLot().getSpecimenRef().getGenre())) {
- document.add(new Field("extraction.lot.specimen.genre", extrait.getExtraction().getLot()
- .getSpecimenRef().getGenre(), luceneOptions.getStore(), luceneOptions.getIndex(), luceneOptions
- .getTermVector()));
- }
- if (StringUtils.isNotBlank(extrait.getExtraction().getLot().getSpecimenRef().getEspece())) {
- document.add(new Field("extraction.lot.specimen.expece", extrait.getExtraction().getLot()
- .getSpecimenRef().getEspece(), luceneOptions.getStore(), luceneOptions.getIndex(),
- luceneOptions.getTermVector()));
- }
- document.add(new Field("extraction.lot.campagne.nom", extrait.getExtraction().getLot().getCampagne()
- .getNom(), luceneOptions.getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector()));
+ lot = extrait.getExtraction().getLot();
} else if (produit instanceof Fraction) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Custom indexing of Fraction entity");
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Custom indexing of Fraction entity");
}
Fraction fraction = (Fraction) produit;
- document.add(new Field("purification.lotSource.ref", fraction.getPurification().getLotSource().getRef(),
+ lot = fraction.getPurification().getLotSource();
+ }
+
+ document.add(new Field("produit.lot.ref", lot.getRef(), luceneOptions.getStore(), luceneOptions.getIndex(),
+ luceneOptions.getTermVector()));
+ document.add(new Field("produit.lot.speciment.embranchement", lot.getSpecimenRef().getEmbranchement(),
+ luceneOptions.getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector()));
+ if (StringUtils.isNotBlank(lot.getSpecimenRef().getFamille())) {
+ document.add(new Field("produit.lot.speciment.famille", lot.getSpecimenRef().getFamille(), luceneOptions
+ .getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector()));
+ }
+ if (StringUtils.isNotBlank(lot.getSpecimenRef().getGenre())) {
+ document.add(new Field("produit.lot.speciment.genre", lot.getSpecimenRef().getGenre(), luceneOptions
+ .getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector()));
+ }
+ if (StringUtils.isNotBlank(lot.getSpecimenRef().getEspece())) {
+ document.add(new Field("produit.lot.speciment.expece", lot.getSpecimenRef().getEspece(), luceneOptions
+ .getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector()));
+ }
+ document.add(new Field("produit.lot.campagne.nom", lot.getCampagne().getNom(), luceneOptions.getStore(),
+ luceneOptions.getIndex(), luceneOptions.getTermVector()));
+
+ // commons information for all produit
+ List<LotPersonneDroits> personnesDroits = lot.getPersonnesDroits();
+ for (LotPersonneDroits lotPersonneDroit : personnesDroits) {
+ document.add(new Field("droit.pk2", String.valueOf(lotPersonneDroit.getId().getPk2().getIdPersonne()),
luceneOptions.getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector()));
- document.add(new Field("purification.lotSource.speciment.embranchement", fraction.getPurification()
- .getLotSource().getSpecimenRef().getEmbranchement(), luceneOptions.getStore(), luceneOptions
- .getIndex(), luceneOptions.getTermVector()));
- if (StringUtils.isNotBlank(fraction.getPurification().getLotSource().getSpecimenRef().getFamille())) {
- document.add(new Field("purification.lotSource.speciment.famille", fraction.getPurification()
- .getLotSource().getSpecimenRef().getFamille(), luceneOptions.getStore(), luceneOptions
- .getIndex(), luceneOptions.getTermVector()));
- }
- if (StringUtils.isNotBlank(fraction.getPurification().getLotSource().getSpecimenRef().getGenre())) {
- document.add(new Field("purification.lotSource.speciment.genre", fraction.getPurification()
- .getLotSource().getSpecimenRef().getGenre(), luceneOptions.getStore(),
- luceneOptions.getIndex(), luceneOptions.getTermVector()));
- }
- if (StringUtils.isNotBlank(fraction.getPurification().getLotSource().getSpecimenRef().getEspece())) {
- document.add(new Field("purification.lotSource.speciment.expece", fraction.getPurification()
- .getLotSource().getSpecimenRef().getEspece(), luceneOptions.getStore(), luceneOptions
- .getIndex(), luceneOptions.getTermVector()));
- }
- document.add(new Field("purification.lotSource.campagne.nom", fraction.getPurification().getLotSource()
- .getCampagne().getNom(), luceneOptions.getStore(), luceneOptions.getIndex(), luceneOptions
- .getTermVector()));
}
+ List<CampagnePersonneDroits> campagnesDroits = lot.getCampagne().getPersonnesDroits();
+ for (CampagnePersonneDroits campagnesDroit : campagnesDroits) {
+ document.add(new Field("droit.pk2", String.valueOf(campagnesDroit.getId().getPk2().getIdPersonne()),
+ luceneOptions.getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector()));
+ }
}
}
Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/UtilisateurSearchFilter.java
===================================================================
--- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/UtilisateurSearchFilter.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/UtilisateurSearchFilter.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -43,7 +43,7 @@
* Filtre lucene utilisé par hibernate search pour filtrer les resultats
* suivant l'utilisateur connecté.
*
- * @author echatellier
+ * @author Eric Chatellier
*/
public class UtilisateurSearchFilter extends Filter {
@@ -96,7 +96,7 @@
LOG.debug("Filtering term docs for administrator");
}
// all docs
- for (int idx = 0; idx < bitSet.length(); idx++) {
+ for (int idx = 0; idx < reader.maxDoc(); idx++) {
if (!reader.isDeleted(idx)) {
bitSet.set(idx);
}
@@ -105,12 +105,23 @@
if (LOG.isDebugEnabled()) {
LOG.debug("Filtering term docs for utilisateur");
}
- // only docs matching terms
- TermDocs termDocs = reader.termDocs(new Term("createur.idPersonne", String.valueOf(utilisateur
+ // only docs where user is creator
+ TermDocs termDocsCreateur = reader.termDocs(new Term("createur.idPersonne", String.valueOf(utilisateur
.getIdPersonne())));
- while (termDocs.next()) {
- bitSet.set(termDocs.doc());
+ while (termDocsCreateur.next()) {
+ if (!reader.isDeleted(termDocsCreateur.doc())) {
+ bitSet.set(termDocsCreateur.doc());
+ }
}
+
+ // and docs where user has rights on
+ TermDocs termDocsDroits = reader
+ .termDocs(new Term("droit.pk2", String.valueOf(utilisateur.getIdPersonne())));
+ while (termDocsDroits.next()) {
+ if (!reader.isDeleted(termDocsCreateur.doc())) {
+ bitSet.set(termDocsDroits.doc());
+ }
+ }
}
return bitSet;
Modified: trunk/cantharella.data/src/main/resources/META-INF/services/org.hibernate.integrator.spi.Integrator
===================================================================
--- trunk/cantharella.data/src/main/resources/META-INF/services/org.hibernate.integrator.spi.Integrator 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.data/src/main/resources/META-INF/services/org.hibernate.integrator.spi.Integrator 2013-03-04 11:33:07 UTC (rev 168)
@@ -1 +1,2 @@
-nc.ird.cantharella.data.config.ValidationIntegrator
\ No newline at end of file
+nc.ird.cantharella.data.config.ValidationIntegrator
+nc.ird.cantharella.data.config.HibernateSearchIntegrator
\ No newline at end of file
Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/LotService.java
===================================================================
--- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/LotService.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/LotService.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -25,8 +25,6 @@
import java.util.List;
import java.util.SortedSet;
-import org.springframework.transaction.annotation.Transactional;
-
import nc.ird.cantharella.data.exceptions.DataConstraintException;
import nc.ird.cantharella.data.exceptions.DataNotFoundException;
import nc.ird.cantharella.data.model.Lot;
@@ -37,6 +35,8 @@
import nc.ird.cantharella.service.utils.normalizers.UniqueFieldNormalizer;
import nc.ird.cantharella.service.utils.normalizers.utils.Normalize;
+import org.springframework.transaction.annotation.Transactional;
+
/**
* Service : lots
* @author Mickael Tricot
@@ -51,6 +51,12 @@
long countLots();
/**
+ * Rafraichit un lot (pour éviter des LazyLoadingException)
+ * @param lot Lot
+ */
+ void refreshLot(Lot lot);
+
+ /**
* Créée un lot
* @param lot Lot
* @throws DataConstraintException Si le lot (nom) existe déjà
Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/LotServiceImpl.java
===================================================================
--- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/LotServiceImpl.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/LotServiceImpl.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -27,6 +27,8 @@
import java.util.SortedSet;
import java.util.TreeSet;
+import javax.annotation.Resource;
+
import nc.ird.cantharella.data.dao.GenericDao;
import nc.ird.cantharella.data.exceptions.DataConstraintException;
import nc.ird.cantharella.data.exceptions.DataNotFoundException;
@@ -39,6 +41,10 @@
import nc.ird.cantharella.service.services.LotService;
import nc.ird.cantharella.utils.AssertTools;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.search.FullTextSession;
+import org.hibernate.search.Search;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -59,6 +65,10 @@
@Autowired
private GenericDao dao;
+ /** Hibernate session factory. */
+ @Resource
+ private SessionFactory sessionFactory;
+
/** {@inheritDoc} */
@Override
public long countLots() {
@@ -67,6 +77,13 @@
/** {@inheritDoc} */
@Override
+ public void refreshLot(Lot lot) {
+ AssertTools.assertNotNull(lot);
+ dao.refresh(lot);
+ }
+
+ /** {@inheritDoc} */
+ @Override
public void createLot(Lot lot) throws DataConstraintException {
LOG.info("createLot " + lot.getRef());
dao.create(lot);
@@ -198,12 +215,17 @@
@Override
public void updateLot(Lot lot) throws DataConstraintException {
LOG.info("updateLot " + lot.getRef());
- try {
- dao.update(lot);
- } catch (DataNotFoundException e) {
+ //try {
+ dao.merge(lot);
+
+ Session session = sessionFactory.getCurrentSession();
+ FullTextSession fullTextSession = Search.getFullTextSession(session);
+ fullTextSession.index(lot);
+
+ /*} catch (DataNotFoundException e) {
LOG.error(e.getMessage(), e);
throw new UnexpectedException(e);
- }
+ }*/
}
/** {@inheritDoc} */
Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/SearchServiceImpl.java
===================================================================
--- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/SearchServiceImpl.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/SearchServiceImpl.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -116,7 +116,7 @@
// passer les tests pour que les indexes lucene contiennent des données
// nécéssaire car il ne sont écrits que lorsque Spring commmit la
// transaction (c'est à dire jamais dans les tests)
- fullTextSession.flushToIndexes();
+ //fullTextSession.flushToIndexes();
//fullTextSession.setFlushMode(FlushMode.MANUAL);
//fullTextSession.setCacheMode(CacheMode.IGNORE);
@@ -206,7 +206,7 @@
String fieldName = fieldInfos.fieldName(i);
// il semble impossible de ne pas recuperer l'id du document
// on l'exclut donc manuellement
- if (!fieldName.startsWith("id") && !fieldName.contains(".id")) {
+ if (!fieldName.startsWith("id") && !fieldName.contains(".id") && !fieldName.endsWith(".pk2")) {
fieldList.add(fieldInfos.fieldName(i));
}
}
Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/utilisateur/ManageUtilisateurPage.java
===================================================================
--- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/utilisateur/ManageUtilisateurPage.java 2013-03-04 11:31:56 UTC (rev 167)
+++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/utilisateur/ManageUtilisateurPage.java 2013-03-04 11:33:07 UTC (rev 168)
@@ -39,7 +39,11 @@
import nc.ird.cantharella.data.validation.utils.ModelValidator;
import nc.ird.cantharella.service.exceptions.EmailException;
import nc.ird.cantharella.service.services.CampagneService;
+import nc.ird.cantharella.service.services.LotService;
import nc.ird.cantharella.service.services.PersonneService;
+import nc.ird.cantharella.utils.BeanTools;
+import nc.ird.cantharella.utils.BeanTools.AccessType;
+import nc.ird.cantharella.utils.CollectionTools;
import nc.ird.cantharella.web.pages.TemplatePage;
import nc.ird.cantharella.web.pages.domain.personne.panels.ManagePersonnePanel;
import nc.ird.cantharella.web.pages.model.ManageUtilisateurModel;
@@ -50,13 +54,8 @@
import nc.ird.cantharella.web.utils.renderers.EnumChoiceRenderer;
import nc.ird.cantharella.web.utils.security.AuthRole;
import nc.ird.cantharella.web.utils.security.AuthRoles;
-import nc.ird.cantharella.utils.BeanTools;
-import nc.ird.cantharella.utils.BeanTools.AccessType;
-import nc.ird.cantharella.utils.CollectionTools;
import org.apache.commons.collections.comparators.ComparatorChain;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -76,6 +75,8 @@
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Gestion d'un utilisateur par un admin
@@ -119,6 +120,10 @@
@SpringBean
private CampagneService campagneService;
+ /** Service : lot */
+ @SpringBean
+ private LotService lotService;
+
/** Modèle : droits sur un lot, en cours de saisie */
private final IModel<LotPersonneDroits> lotsPersonneDroitsModel;
@@ -295,8 +300,10 @@
throw new UnexpectedException(e);
}
// Recharge la campagne pour éviter une LazyLoadingException
- campagneService.refreshCampagne(droits.getId().getPk1());
- manageUtilisateurModel.getObject().getCampagnesDroits().put(droits.getId().getPk1(), droits);
+ Campagne campagne = droits.getId().getPk1();
+ campagneService.refreshCampagne(campagne);
+ manageUtilisateurModel.getObject().getCampagnesDroits().put(campagne, droits);
+ campagne.getPersonnesDroits().add(droits);
// puisque droits sur Campagne-Tous, suppression des Campagne-Lot de cette campagne
// Se base sur le réf de lot plutôt que l'objet pour être indépendant du contexte de persistance
@@ -314,7 +321,11 @@
LOG.error(e.getMessage(), e);
throw new UnexpectedException(e);
}
- manageUtilisateurModel.getObject().getLotsDroits().put(droits.getId().getPk1(), droits);
+ Lot lot = droits.getId().getPk1();
+ // Evite une LazyLoadingException car la campagne n'est plus dans la session
+ lotService.refreshLot(lot);
+ manageUtilisateurModel.getObject().getLotsDroits().put(lot, droits);
+ lot.getPersonnesDroits().add(droits);
}
// Mise à jour des listes
updateAvailableCampagnes();
1
0
04 Mar '13
Author: echatellier
Date: 2013-03-04 12:31:56 +0100 (Mon, 04 Mar 2013)
New Revision: 167
Url: http://forge.codelutin.com/projects/cantharella/repository/revisions/167
Log:
Fix document update message
Modified:
trunk/cantharella.web/src/main/resources/web_en.properties
trunk/cantharella.web/src/main/resources/web_fr.properties
Modified: trunk/cantharella.web/src/main/resources/web_en.properties
===================================================================
--- trunk/cantharella.web/src/main/resources/web_en.properties 2013-02-28 09:48:44 UTC (rev 166)
+++ trunk/cantharella.web/src/main/resources/web_en.properties 2013-03-04 11:31:56 UTC (rev 167)
@@ -211,10 +211,10 @@
ManageTestBioPage.Delete.DataConstraintException=There are data linked to this biassay
ManageDocumentPage=Document management
-ManageDocumentPage.Create.OK=Document added
-ManageDocumentPage.Update.OK=Document updated
-ManageDocumentPage.Delete.OK=Document deleted
-ManageDocumentPage.Form.uploadTooLarge=La taille du document ne peut pas dépasser ${maxSize}
+ManageDocumentPage.Create.OK=Document will be saved on form submit
+ManageDocumentPage.Update.OK=Document will be updated on form submit
+ManageDocumentPage.Delete.OK=Document will be deleted on form submit
+ManageDocumentPage.Form.uploadTooLarge=Document size can't be bigger than ${maxSize}
UpdateUtilisateurPage=Account management
UpdateUtilisateurPage.Password=Password
Modified: trunk/cantharella.web/src/main/resources/web_fr.properties
===================================================================
--- trunk/cantharella.web/src/main/resources/web_fr.properties 2013-02-28 09:48:44 UTC (rev 166)
+++ trunk/cantharella.web/src/main/resources/web_fr.properties 2013-03-04 11:31:56 UTC (rev 167)
@@ -210,9 +210,9 @@
ManageTestBioPage.Delete.DataConstraintException=Il existe des données liées à ce test biologique
ManageDocumentPage=Gestion d'un document
-ManageDocumentPage.Create.OK=Document ajouté
-ManageDocumentPage.Update.OK=Document mis à jour
-ManageDocumentPage.Delete.OK=Document supprimé
+ManageDocumentPage.Create.OK=L'enregistrement du document s'effectuera à la validation du formulaire
+ManageDocumentPage.Update.OK=La modification du document s'effectuera à la validation du formulaire
+ManageDocumentPage.Delete.OK=La suppression du document s'effectuera à la validation du formulaire
ManageDocumentPage.Form.uploadTooLarge=La taille du document ne peut pas dépasser ${maxSize}
UpdateUtilisateurPage=Gestion du compte
1
0