Author: bleny
Date: 2011-02-11 17:50:49 +0000 (Fri, 11 Feb 2011)
New Revision: 1005
Log:
add filtering on ContactStateMotif
Added:
trunk/wao-business/src/main/java/fr/ifremer/wao/service/EntitiesTranslator.java
Modified:
trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java
trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java
trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java
trunk/wao-business/src/main/xmi/wao.zargo
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java
trunk/wao-ui/src/main/webapp/Contacts.tml
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java 2011-02-11 15:13:05 UTC (rev 1004)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java 2011-02-11 17:50:49 UTC (rev 1005)
@@ -637,6 +637,10 @@
query.addEquals(contactProperty.completeSampling(), completeSampling.toArray());
}
+ if (filter.getContactStateMotif() != null) {
+ query.addEquals(contactProperty.contactStateMotif(), filter.getContactStateMotif());
+ }
+
if (logger.isDebugEnabled()) {
logger.debug("query with filters on Contacts is " + query);
}
Added: trunk/wao-business/src/main/java/fr/ifremer/wao/service/EntitiesTranslator.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/service/EntitiesTranslator.java (rev 0)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/EntitiesTranslator.java 2011-02-11 17:50:49 UTC (rev 1005)
@@ -0,0 +1,97 @@
+package fr.ifremer.wao.service;
+
+import fr.ifremer.wao.WaoDAOHelper;
+import fr.ifremer.wao.entity.TranslatableEntity;
+import fr.ifremer.wao.entity.Translation;
+import fr.ifremer.wao.entity.TranslationDAO;
+import org.apache.commons.lang.LocaleUtils;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+/**
+ * Manage the translations of all entities. This class aim to be
+ * used by service that output some translatable entities and
+ * provides methods to fulfill an entity with its translations
+ * to make it ready to printed in a localized UI.
+ */
+public class EntitiesTranslator {
+
+ private static final Logger log =
+ LoggerFactory.getLogger(EntitiesTranslator.class);
+
+ protected TopiaContext transaction;
+
+ public EntitiesTranslator(TopiaContext transaction) {
+ this.transaction = transaction;
+ }
+
+ /** For a given list of entities, make all known translations available
+ * in the entity.
+ *
+ * This method will look in database to find all translations for a given
+ * entity and push them in the object.
+ */
+ public <E extends TranslatableEntity> List<E> translateEntities(List<E> entities) throws TopiaException {
+ List<E> result = new ArrayList<E>(entities);
+ TranslationDAO translationDAO = WaoDAOHelper.getTranslationDAO(transaction);
+ for (TranslatableEntity entity : result) {
+ // find translations for this entity
+ List<Translation> translations = translationDAO.findAllById(entity.getTopiaId());
+ for (Translation translation : translations) {
+ Locale locale = LocaleUtils.toLocale(translation.getLocale());
+ entity.setTranslation(locale, translation.getText());
+ }
+ }
+ return result;
+ }
+
+ public void updateTranslations(List<? extends TranslatableEntity> entities) throws TopiaException {
+
+ TranslationDAO translationDAO = WaoDAOHelper.getTranslationDAO(transaction);
+
+ int translationAdded = 0;
+ int translationUpdated = 0;
+
+ for (TranslatableEntity entity : entities) {
+ Map<Locale, String> translations = entity.getTranslations();
+ String id = entity.getTopiaId();
+
+ for (Map.Entry<Locale, String> translation : translations.entrySet()) {
+ Locale locale = translation.getKey();
+ String value = translation.getValue();
+
+ Translation translationEntity = translationDAO.findByProperties(
+ Translation.PROPERTY_ID, id,
+ Translation.PROPERTY_LOCALE, locale.toString());
+ // create or update
+ if (translationEntity == null) {
+ translationDAO.create(Translation.PROPERTY_ID, id,
+ Translation.PROPERTY_LOCALE, locale.toString(),
+ Translation.PROPERTY_TEXT, value);
+ translationAdded += 1;
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("will change translation from '" + translationEntity.getText() +
+ "' to '" + value + "'");
+ }
+ translationEntity.setText(value);
+ translationDAO.update(translationEntity);
+ translationUpdated += 1;
+ }
+ }
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug(translationAdded + " translation added, " +
+ translationUpdated + " translations updated");
+ }
+ }
+
+}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2011-02-11 15:13:05 UTC (rev 1004)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2011-02-11 17:50:49 UTC (rev 1005)
@@ -51,6 +51,7 @@
import fr.ifremer.wao.entity.Contact;
import fr.ifremer.wao.entity.ContactDAO;
import fr.ifremer.wao.entity.ContactImpl;
+import fr.ifremer.wao.entity.ContactStateMotif;
import fr.ifremer.wao.entity.ElligibleBoat;
import fr.ifremer.wao.entity.ElligibleBoatDAO;
import fr.ifremer.wao.entity.FishingZone;
@@ -96,6 +97,7 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -191,13 +193,21 @@
Map<String, Contact> results = dao.findAllMappedByQuery(query);
+ List<ContactStateMotif> motives = new LinkedList<ContactStateMotif>();
+
// force load
for (Contact contact : results.values()) {
contact.getMainObserver();
contact.sizeSecondaryObservers();
contact.getTerrestrialLocation();
+ if (contact.getContactStateMotif() != null) {
+ motives.add(contact.getContactStateMotif());
+ }
}
+ EntitiesTranslator translator = new EntitiesTranslator(transaction);
+ translator.translateEntities(motives);
+
return results;
}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-02-11 15:13:05 UTC (rev 1004)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-02-11 17:50:49 UTC (rev 1005)
@@ -400,7 +400,8 @@
ContactState substituteState = ContactState.getSubstituteForMotif(contactState);
notTranslatedResult = contactStateMotifDAO.findAllByContactStateOrdinal(substituteState.ordinal());
}
- List<ContactStateMotif> result = translateEntities(transaction, notTranslatedResult);
+ EntitiesTranslator translator = new EntitiesTranslator(transaction);
+ List<ContactStateMotif> result = translator.translateEntities(notTranslatedResult);
if (log.isDebugEnabled()) {
log.debug(result.size() + " motifs found for state " + contactState);
@@ -419,7 +420,8 @@
contactStateMotifDAO.update(motif);
}
}
- updateTranslations(transaction, motifs);
+ EntitiesTranslator translator = new EntitiesTranslator(transaction);
+ translator.updateTranslations(motifs);
transaction.commitTransaction();
}
@@ -455,7 +457,8 @@
motif.setTranslation(Locale.ENGLISH, "Other");
motifs.add(motif);
- updateTranslations(transaction, motifs);
+ EntitiesTranslator translator = new EntitiesTranslator(transaction);
+ translator.updateTranslations(motifs);
count = contactStateMotifDAO.count();
if (log.isDebugEnabled()) {
@@ -467,67 +470,4 @@
}
}
}
-
-
- /** For a given list of entities, make all known translations available
- * in the entity.
- *
- * This method will look in database to find all translations for a given
- * entity and push them in the object.
- */
- protected <E extends TranslatableEntity> List<E> translateEntities(TopiaContext transaction, List<E> entities) throws TopiaException {
- List<E> result = new ArrayList<E>(entities);
- TranslationDAO translationDAO = WaoDAOHelper.getTranslationDAO(transaction);
- for (TranslatableEntity entity : result) {
- // find translations for this entity
- List<Translation> translations = translationDAO.findAllById(entity.getTopiaId());
- for (Translation translation : translations) {
- Locale locale = LocaleUtils.toLocale(translation.getLocale());
- entity.setTranslation(locale, translation.getText());
- }
- }
- return result;
- }
-
- protected void updateTranslations(TopiaContext transaction, List<? extends TranslatableEntity> entities) throws TopiaException {
-
- TranslationDAO translationDAO = WaoDAOHelper.getTranslationDAO(transaction);
-
- int translationAdded = 0;
- int translationUpdated = 0;
-
- for (TranslatableEntity entity : entities) {
- Map<Locale, String> translations = entity.getTranslations();
- String id = entity.getTopiaId();
-
- for (Map.Entry<Locale, String> translation : translations.entrySet()) {
- Locale locale = translation.getKey();
- String value = translation.getValue();
-
- Translation translationEntity = translationDAO.findByProperties(
- Translation.PROPERTY_ID, id,
- Translation.PROPERTY_LOCALE, locale.toString());
- // create or update
- if (translationEntity == null) {
- translationDAO.create(Translation.PROPERTY_ID, id,
- Translation.PROPERTY_LOCALE, locale.toString(),
- Translation.PROPERTY_TEXT, value);
- translationAdded += 1;
- } else {
- if (log.isDebugEnabled()) {
- log.debug("will change translation from '" + translationEntity.getText() +
- "' to '" + value + "'");
- }
- translationEntity.setText(value);
- translationDAO.update(translationEntity);
- translationUpdated += 1;
- }
- }
- }
-
- if (log.isDebugEnabled()) {
- log.debug(translationAdded + " translation added, " +
- translationUpdated + " translations updated");
- }
- }
}
Modified: trunk/wao-business/src/main/xmi/wao.zargo
===================================================================
(Binary files differ)
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java 2011-02-11 15:13:05 UTC (rev 1004)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java 2011-02-11 17:50:49 UTC (rev 1005)
@@ -348,7 +348,7 @@
private GenericSelectModel<ContactStateMotif> contactStateMotifSelectModel;
- public SelectModel getContactStateMotifSelectModel() {
+ public GenericSelectModel<ContactStateMotif> getContactStateMotifSelectModel() {
if (contactStateMotifSelectModel == null) {
List<ContactStateMotif> motifs = serviceReferential.getAllContactStateMotifs(contact.getContactState());
if (motifs.size() != 0) {
@@ -413,6 +413,12 @@
contact.setTerrestrialLocation(terrestrialLocation);
}
+ if (StringUtils.isEmpty(contactStateMotifId)) {
+ contact.setContactStateMotif(null);
+ } else {
+ contact.setContactStateMotif(getContactStateMotifSelectModel().findObject(contactStateMotifId));
+ }
+
ValidationResult validationResult = serviceContact.validateContact(contact);
if ( ! validationResult.isSuccess()) {
contactForm.recordError(validationResult.getMessage());
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java 2011-02-11 15:13:05 UTC (rev 1004)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java 2011-02-11 17:50:49 UTC (rev 1005)
@@ -34,6 +34,7 @@
import fr.ifremer.wao.bean.UserRole;
import fr.ifremer.wao.bean.ValidationResult;
import fr.ifremer.wao.entity.Contact;
+import fr.ifremer.wao.entity.ContactStateMotif;
import fr.ifremer.wao.entity.TerrestrialLocation;
import fr.ifremer.wao.entity.WaoUser;
import fr.ifremer.wao.io.ImportResults;
@@ -51,6 +52,7 @@
import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.SelectModel;
import org.apache.tapestry5.StreamResponse;
import org.apache.tapestry5.annotations.Environmental;
import org.apache.tapestry5.annotations.Import;
@@ -60,6 +62,7 @@
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.beaneditor.BeanModel;
+import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.corelib.components.Zone;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
@@ -209,6 +212,9 @@
@Log
Object onSuccessFromFiltersForm() throws WaoException {
+ if (StringUtils.isNotEmpty(contactStateMotifId)) {
+ getContactFilter().setContactStateMotif(getContactStateMotifSelectModel().findObject(contactStateMotifId));
+ }
if (isEdited()) {
return filtersZone.getBody();
}
@@ -254,6 +260,33 @@
return terrestrialLocationSelectModel;
}
+ @Property
+ @Persist
+ private String contactStateMotifId;
+
+ private GenericSelectModel<ContactStateMotif> contactStateMotifSelectModel;
+
+ public GenericSelectModel<ContactStateMotif> getContactStateMotifSelectModel() {
+ if (contactStateMotifSelectModel == null) {
+ if (contactFilter.getState() != null) {
+ List<ContactStateMotif> motifs = serviceReferential.getAllContactStateMotifs(contactFilter.getState());
+ if (motifs.size() != 0) {
+ contactStateMotifSelectModel = new GenericSelectModel<ContactStateMotif>(
+ motifs, ContactStateMotif.class, "translation", ContactStateMotif.TOPIA_ID, propertyAccess);
+ }
+ }
+ }
+ return contactStateMotifSelectModel;
+ }
+
+ public Zone onValueChangedFromState(ContactState contactState) {
+ contactFilter.setState(contactState);
+ // refresh
+ contactStateMotifSelectModel = null;
+ contactStateMotifId = null;
+ return filtersZone;
+ }
+
/**************************** CONTACT IMPORT/EXPORT ***********************/
@Property
Modified: trunk/wao-ui/src/main/webapp/Contacts.tml
===================================================================
--- trunk/wao-ui/src/main/webapp/Contacts.tml 2011-02-11 15:13:05 UTC (rev 1004)
+++ trunk/wao-ui/src/main/webapp/Contacts.tml 2011-02-11 17:50:49 UTC (rev 1005)
@@ -74,7 +74,13 @@
<label for="fromDate">${message:wao.ui.misc.since} :</label>
<input t:type="datefield" class="width70" t:id="fromDate" value="contactFilter.fromDate" />
<label for="state">${message:wao.ui.field.Contact.contactState} :</label>
- <select t:type="select" t:id="state" value="contactFilter.state"/>
+ <select t:type="select" t:id="state" value="contactFilter.state" t:zone="so-contacts-filters" />
+ <t:if test="contactStateMotifSelectModel">
+ <input t:type="select"
+ t:id="stateMotif"
+ t:value="contactStateMotifId"
+ t:model="contactStateMotifSelectModel" />
+ </t:if>
<t:if t:test="user.admin">
<label for="company">${message:wao.ui.entity.Company} :</label>
<input t:type="select" t:id="company" t:model="companySelectModel" value="companyId"/>
@@ -263,7 +269,14 @@
</span>
</p:boatCell>
<p:stateCell>
- ${getLabelForEnum(contact.contactState)}
+ <t:if test="contact.contactStateMotif">
+ <span t:type="ck/Tooltip" title="${message:wao.ui.field.Contact.contactStateMotif}" t:value="${contact.contactStateMotif}" t:effect="appear">
+ ${getLabelForEnum(contact.contactState)}
+ </span>
+ <p:else>
+ ${getLabelForEnum(contact.contactState)}
+ </p:else>
+ </t:if>
</p:stateCell>
<p:observationBeginDateCell>
<t:output value="contact.observationBeginDate" format="dateTimeFormat" />