Author: fdesbois
Date: 2010-01-19 14:57:51 +0000 (Tue, 19 Jan 2010)
New Revision: 238
Added:
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/UserFilterImpl.java
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/AbstractMappedGridDataSource.java
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/BoatDataSource.java
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/ContactDataSource.java
Modified:
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/BoatFilterImpl.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactFilterImpl.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImpl.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceContactImpl.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImpl.java
trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Boats.java
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Contacts.java
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Index.java
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/ContactModelFactory.java
trunk/suiviobsmer-ui/src/main/webapp/Boats.tml
trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml
trunk/suiviobsmer-ui/src/main/webapp/img/chart-area.png
Log:
Evol #1991 : Manage query for retrieve boats and contacts from Tapestry Grid (using GridDataSource). TODO orderBy for contacts (maybe revert and new evol for next version) and orderBy for Boats (Ok for 0.1.1 version)
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/BoatFilterImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/BoatFilterImpl.java 2010-01-18 19:27:24 UTC (rev 237)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/BoatFilterImpl.java 2010-01-19 14:57:51 UTC (rev 238)
@@ -40,10 +40,11 @@
public class BoatFilterImpl extends BoatFilter {
@Override
- public TopiaQuery prepareQueryForBoat(TopiaQuery query, String main) {
+ public TopiaQuery prepareQueryForBoat(TopiaQuery query, String boat) {
- String boat = main + ".boat";
-
+ // Limit
+ query = prepareQueryForLimit(query);
+
if (!StringUtils.isEmpty(getBoatName())) {
query.add(boat + ".name", Op.LIKE, getBoatName() + "%");
}
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactFilterImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactFilterImpl.java 2010-01-18 19:27:24 UTC (rev 237)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactFilterImpl.java 2010-01-19 14:57:51 UTC (rev 238)
@@ -52,7 +52,7 @@
}
query = prepareQueryForSampling(query, query.getMainAlias() + "." + Contact.SAMPLE_ROW);
- query = prepareQueryForBoat(query, query.getMainAlias());
+ query = prepareQueryForBoat(query, query.getMainAlias() + "." + Contact.BOAT);
if (getMammalsObservation() && getMammalsCapture()) {
query.add(contact + ".mammalsObservation = :mammals OR " + contact + ".mammalsCapture = :mammals").
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/UserFilterImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/UserFilterImpl.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/UserFilterImpl.java 2010-01-19 14:57:51 UTC (rev 238)
@@ -0,0 +1,27 @@
+
+package fr.ifremer.suiviobsmer.bean;
+
+import org.nuiton.topia.framework.TopiaQuery;
+
+/**
+ * UserFilterImpl
+ *
+ * Created: 18 janv. 2010
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class UserFilterImpl extends UserFilter {
+
+ @Override
+ public TopiaQuery prepareQueryForLimit(TopiaQuery query) {
+ if (getStartIndex() != null && getEndIndex() != null) {
+ query.setLimit(getStartIndex(), getEndIndex());
+ }
+ return query;
+ }
+
+}
Property changes on: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/UserFilterImpl.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImpl.java 2010-01-18 19:27:24 UTC (rev 237)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImpl.java 2010-01-19 14:57:51 UTC (rev 238)
@@ -86,56 +86,71 @@
BoatDAO dao = SuiviObsmerModelDAOHelper.getBoatDAO(transaction);
TopiaQuery<Boat> query = dao.createQuery("B");
- // Immatriculation
- if (filter.getBoatImmatriculation() != null) {
- query.add("B.immatriculation", filter.getBoatImmatriculation());
- }
+ query = createQueryForBoatFilter(query, filter);
- // Name
- if (!StringUtils.isEmpty(filter.getBoatName())) {
- query.add("B.name", Op.LIKE, filter.getBoatName() + "%");
- }
+ results = query.executeToEntityMap(Boat.IMMATRICULATION, Integer.class);
- // DistrictCode
- if (!StringUtils.isEmpty(filter.getBoatDistrictCode())) {
- query.add("B.districtCode", filter.getBoatDistrictCode());
- }
+ transaction.closeContext();
+ } catch (Exception eee) {
+ SuiviObsmerContext.serviceException(transaction, "Impossible de filtrer la liste des navires", eee);
+ }
+ return results;
+ }
+
+ protected TopiaQuery<Boat> createQueryForBoatFilter(TopiaQuery<Boat> query, BoatFilter filter) {
+ String main = query.getMainAlias();
+ query = filter.prepareQueryForBoat(query, main);
- boolean sampleRowCodeFiltered = !StringUtils.isEmpty(filter.getSampleRowCode());
- boolean professionFiltered = filter.getProfession() != null;
- boolean fishingZoneFiltered = filter.getFishingZone() != null;
- boolean sampleRowFiltered = sampleRowCodeFiltered || professionFiltered || fishingZoneFiltered;
+ boolean sampleRowCodeFiltered = !StringUtils.isEmpty(filter.getSampleRowCode());
+ boolean professionFiltered = filter.getProfession() != null;
+ boolean fishingZoneFiltered = filter.getFishingZone() != null;
+ boolean sampleRowFiltered = sampleRowCodeFiltered || professionFiltered || fishingZoneFiltered;
- // Add join for ElligibleBoat
- if (sampleRowFiltered) {
- String elligibleBoatClassName = ElligibleBoat.class.getName();
- query.addFrom(elligibleBoatClassName + " E").add("E.boat = B");
- }
- // SampleRowCode
- if (sampleRowCodeFiltered) {
- query.add("E.sampleRow.code", filter.getSampleRowCode());
- }
- // Profession
- if (professionFiltered) {
- query.add("E.sampleRow.profession", filter.getProfession());
- }
+ // Add join for ElligibleBoat
+ if (sampleRowFiltered) {
+ String elligibleBoatClassName = ElligibleBoat.class.getName();
+ query.addFrom(elligibleBoatClassName + " E").add("E.boat = " + main);
+ }
+ // SampleRowCode
+ if (sampleRowCodeFiltered) {
+ query.add("E.sampleRow.code", filter.getSampleRowCode());
+ }
+ // Profession
+ if (professionFiltered) {
+ query.add("E.sampleRow.profession", filter.getProfession());
+ }
- // TODO FishingZone
-
- // Company : only if an other filter is set for the sampleRow
- if (filter.getCompany() != null && sampleRowFiltered) {
- query.add("E.sampleRow.company", filter.getCompany());
- query.add("E.companyActive = :booleanTrue OR (E.companyActive IS NULL AND E.globalActive = :booleanTrue)").
- addParam("booleanTrue", Boolean.TRUE);
- }
+ // TODO FishingZone
- results = query.executeToEntityMap(Boat.IMMATRICULATION, Integer.class);
+ // Company : only if an other filter is set for the sampleRow
+ if (filter.getCompany() != null && sampleRowFiltered) {
+ query.add("E.sampleRow.company", filter.getCompany());
+ query.add("E.companyActive = :booleanTrue OR (E.companyActive IS NULL AND E.globalActive = :booleanTrue)").
+ addParam("booleanTrue", Boolean.TRUE);
+ }
+ return query;
+ }
+
+ @Override
+ public int countBoatsByFilter(BoatFilter filter) throws SuiviObsmerException {
+ TopiaContext transaction = null;
+ int result = 0;
+ try {
+ transaction = rootContext.beginTransaction();
+
+ BoatDAO dao = SuiviObsmerModelDAOHelper.getBoatDAO(transaction);
+ TopiaQuery<Boat> query = dao.createQuery("B");
+
+ query = createQueryForBoatFilter(query, filter);
+
+ result = query.executeCount();
+
transaction.closeContext();
} catch (Exception eee) {
SuiviObsmerContext.serviceException(transaction, "Impossible de filtrer la liste des navires", eee);
}
- return results;
+ return result;
}
/**
@@ -186,7 +201,7 @@
SampleRow sampleRow = elligible.getSampleRow();
// SampleRow non closed only
- if (!sampleRow.isFinished()) {
+ //if (!sampleRow.isFinished()) {
String companyId = sampleRow.getCompany() != null ?
sampleRow.getCompany().getTopiaId() : "";
@@ -194,7 +209,7 @@
if (companyId.equals(company.getTopiaId())) {
elligibleBoats.put(sampleRow.getCode(), elligible);
}
- }
+ //}
}
// Last contact
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceContactImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceContactImpl.java 2010-01-18 19:27:24 UTC (rev 237)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceContactImpl.java 2010-01-19 14:57:51 UTC (rev 238)
@@ -101,68 +101,14 @@
ContactDAO dao = SuiviObsmerModelDAOHelper.getContactDAO(transaction);
- TopiaQuery<Contact> query = dao.createQuery("C").addOrderDesc("C." + TopiaEntity.TOPIA_CREATE_DATE);
+ TopiaQuery<Contact> query = dao.createQuery("C");
-// if (filter.getSampleRow() != null) {
-// query.add("C." + Contact.SAMPLE_ROW, filter.getSampleRow());
-// } else if (!StringUtils.isEmpty(filter.getSectorName())) {
-// query.addFrom(FishingZone.class.getName() + " F");
-// query.add("F.sectorName", filter.getSectorName()).add("C.sampleRow IN elements(F.sampleRow)");
-// } else if (!StringUtils.isEmpty(filter.getFacadeName())) {
-// query.addFrom(FishingZone.class.getName() + " F");
-// query.add("F.facadeName", filter.getFacadeName()).add("C.sampleRow IN elements(F.sampleRow)");
-// }
-//
-// if (!StringUtils.isEmpty(filter.getBoatName())) {
-// query.add("C.boat.name", Op.LIKE, filter.getBoatName() + "%");
-// }
-//
-// if (!StringUtils.isEmpty(filter.getBoatDistrictCode())) {
-// query.add("C.boat.districtCode", filter.getBoatDistrictCode());
-// }
-//
-// if (filter.getBoatImmatriculation() != null) {
-// query.add("C.boat.immatriculation", filter.getBoatImmatriculation());
-// }
-
query = filter.prepareQueryForContact(query);
-// if (filter.getObserver() != null) {
-// query.add(Contact.USER, filter.getObserver());
-// } else if (filter.getCompany() != null) {
-// query.add("C.user.company", filter.getCompany());
-// }
+ query.addOrderDesc("C." + TopiaEntity.TOPIA_CREATE_DATE).addLoad(Contact.USER + "." + User.COMPANY);
-// if (filter.getMammalsObservation() && filter.getMammalsCapture()) {
-// query.add("C.mammalsObservation = :mammals OR C.mammalsCapture = :mammals").addParam("mammals", Boolean.TRUE);
-// } else if (filter.getMammalsObservation()) {
-// query.add("C." + Contact.MAMMALS_OBSERVATION, Boolean.TRUE);
-// } else if (filter.getMammalsCapture()) {
-// query.add("C." + Contact.MAMMALS_CAPTURE, Boolean.TRUE);
-// }
-//
-// List<Object> programValidValues = new ArrayList<Object>();
-// if (filter.getProgramAccepted()) {
-// programValidValues.add(Boolean.TRUE);
-// }
-// if (filter.getProgramRefused()) {
-// programValidValues.add(Boolean.FALSE);
-// }
-// query.add("C." + Contact.VALIDATION_PROGRAM, programValidValues, filter.getProgramUndefined());
-//
-// List<Object> companyValidValues = new ArrayList<Object>();
-// if (filter.getCompanyAccepted()) {
-// companyValidValues.add(Boolean.TRUE);
-// }
-// if (filter.getCompanyRefused()) {
-// companyValidValues.add(Boolean.FALSE);
-// }
-// query.add("C." + Contact.VALIDATION_COMPANY, companyValidValues, filter.getCompanyUndefined());
-
- query.addLoad("user.company");
-
if (log.isDebugEnabled()) {
- log.debug("Query : " + query);
+ log.debug("Query : " + query);
}
results = query.executeToEntityMap();
@@ -406,6 +352,9 @@
// Create new elligible boat not active in a global way
elligible = elligibleDAO.create(
ElligibleBoat.BOAT, boat, ElligibleBoat.SAMPLE_ROW, row);
+ if (log.isDebugEnabled()) {
+ log.debug("Create elligibleBoat for : " + boat.getImmatriculation() + " - " + row.getCode());
+ }
}
elligible.setCompanyActive(Boolean.TRUE);
@@ -462,9 +411,11 @@
String tideBeginString = ImportHelper.read(reader, CONTACT.CONT_DEBUT_MAREE);
String tideEndString = ImportHelper.read(reader, CONTACT.CONT_FIN_MAREE);
String nbObservantsString = ImportHelper.read(reader, CONTACT.CONT_NB_OBSERV);
+ String dataInputString = ImportHelper.read(reader, CONTACT.CONT_ALLEGRO);
Date tideBegin = !StringUtils.isEmpty(tideBeginString) ? dateFormat.parse(tideBeginString) : null;
Date tideEnd = !StringUtils.isEmpty(tideEndString) ? dateFormat.parse(tideEndString) : null;
+ Date dataInput = !StringUtils.isEmpty(dataInputString) ? dateFormat.parse(dataInputString) : null;
int nbObservants = !StringUtils.isEmpty(nbObservantsString) ? Integer.parseInt(nbObservantsString) : 0;
boolean mammalsCapture =
ImportHelper.parseContactMammals(reader, CONTACT.CONT_MAM_CAPT);
@@ -477,6 +428,7 @@
contact.setNbObservants(nbObservants);
contact.setMammalsCapture(mammalsCapture);
contact.setMammalsObservation(mammalsObsv);
+ contact.setDataInputDate(dataInput);
result.incNbImported();
@@ -518,4 +470,25 @@
return result;
}
+ @Override
+ public int countContactsByFilter(ContactFilter filter) throws SuiviObsmerException {
+ TopiaContext transaction = null;
+ int result = 0;
+ try {
+ transaction = rootContext.beginTransaction();
+
+ ContactDAO dao = SuiviObsmerModelDAOHelper.getContactDAO(transaction);
+ TopiaQuery<Contact> query = dao.createQuery("C");
+ query = filter.prepareQueryForContact(query);
+
+ result = query.executeCount();
+
+ transaction.closeContext();
+ } catch (Exception eee) {
+ SuiviObsmerContext.serviceException(transaction,
+ "Impossible de compter le nombre de contacts filtrés", eee);
+ }
+ return result;
+ }
+
}
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImpl.java 2010-01-18 19:27:24 UTC (rev 237)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImpl.java 2010-01-19 14:57:51 UTC (rev 238)
@@ -543,7 +543,7 @@
} else {
row = dao.create(SampleRow.CODE, code);
- String companyName = reader.get(SAMPLING.SOCIETE_NOM.name()).trim();
+ String companyName = ImportHelper.read(reader, SAMPLING.SOCIETE_NOM);
// Create link with company if set in file
if (!StringUtils.isEmpty(companyName)) {
Modified: trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo
===================================================================
(Binary files differ)
Added: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/AbstractMappedGridDataSource.java
===================================================================
--- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/AbstractMappedGridDataSource.java (rev 0)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/AbstractMappedGridDataSource.java 2010-01-19 14:57:51 UTC (rev 238)
@@ -0,0 +1,178 @@
+
+package fr.ifremer.suiviobsmer.ui.data;
+
+import fr.ifremer.suiviobsmer.SuiviObsmerException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.tapestry5.PropertyConduit;
+import org.apache.tapestry5.grid.ColumnSort;
+import org.apache.tapestry5.grid.GridDataSource;
+import org.apache.tapestry5.grid.SortConstraint;
+import org.apache.tapestry5.ioc.internal.util.TapestryException;
+import org.nuiton.topia.persistence.TopiaEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * ContactDataSource
+ *
+ * Created: 18 janv. 2010
+ *
+ * @param <K> Type of the map key
+ * @param <E> Type of the map value
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public abstract class AbstractMappedGridDataSource<K, E extends TopiaEntity> implements GridDataSource {
+
+// @Inject
+// private ServiceContact serviceContact;
+
+ private Logger log = LoggerFactory.getLogger(AbstractMappedGridDataSource.class);
+
+// private UserFilter filter;
+
+ private Map<K, E> mapResults;
+
+ private List<E> listResults;
+
+ private int nbRows = -1;
+
+ private int nbRowsPerPage;
+
+// public AbstractMappedGridDataSource(UserFilter filter) {
+// this.filter = filter;
+// }
+
+ @Override
+ public int getAvailableRows() {
+ if (nbRows < 0) {
+ try {
+ nbRows = count();
+ if (log.isDebugEnabled()) {
+ log.debug("Count : " + nbRows);
+ }
+ } catch (SuiviObsmerException eee) {
+ throw new TapestryException("", eee);
+ }
+ }
+ return nbRows;
+ }
+
+ @Override
+ public void prepare(int startIndex, int endIndex, List<SortConstraint> sortConstraints) {
+ if (log.isDebugEnabled()) {
+ log.debug("Prepare results : " + startIndex + ", " + endIndex);
+ }
+ nbRowsPerPage = endIndex - startIndex + 1;
+ try {
+ mapResults = execute(startIndex, endIndex, getSortConstraint(sortConstraints));
+ listResults = new ArrayList<E>(mapResults.values());
+
+ // FIXME manage sort columns in execute ???? obvious
+ sortResults(sortConstraints);
+ } catch (SuiviObsmerException eee) {
+ throw new TapestryException("", eee);
+ }
+ }
+
+ protected abstract Map<K, E> execute(int startIndex, int endIndex, SortConstraint orderBy) throws SuiviObsmerException;
+
+ protected abstract int count() throws SuiviObsmerException;
+
+ protected SortConstraint getSortConstraint(List<SortConstraint> sortConstraints) {
+ for (SortConstraint constraint : sortConstraints)
+ {
+ final ColumnSort sort = constraint.getColumnSort();
+
+ if (sort != ColumnSort.UNSORTED) {
+ return constraint;
+ }
+ }
+ return null;
+ }
+
+ protected void sortResults(List<SortConstraint> sortConstraints) {
+
+ for (SortConstraint constraint : sortConstraints)
+ {
+ final ColumnSort sort = constraint.getColumnSort();
+
+ if (sort == ColumnSort.UNSORTED) continue;
+
+ final PropertyConduit conduit = constraint.getPropertyModel().getConduit();
+
+ final Comparator valueComparator = new Comparator<Comparable>()
+ {
+ public int compare(Comparable o1, Comparable o2)
+ {
+ // Simplify comparison, and handle case where both are nulls.
+
+ if (o1 == o2) return 0;
+
+ if (o2 == null) return 1;
+
+ if (o1 == null) return -1;
+
+ return o1.compareTo(o2);
+ }
+ };
+
+ final Comparator rowComparator = new Comparator()
+ {
+ public int compare(Object row1, Object row2)
+ {
+ Comparable value1 = (Comparable) conduit.get(row1);
+ Comparable value2 = (Comparable) conduit.get(row2);
+
+ return valueComparator.compare(value1, value2);
+ }
+ };
+
+ final Comparator reverseComparator = new Comparator()
+ {
+ public int compare(Object o1, Object o2)
+ {
+ int modifier = sort == ColumnSort.ASCENDING ? 1 : -1;
+
+ return modifier * rowComparator.compare(o1, o2);
+ }
+ };
+
+ // We can freely sort this list because its just a copy.
+
+ Collections.sort(listResults, reverseComparator);
+ }
+ }
+
+ @Override
+ public Object getRowValue(int index) {
+ index = index % nbRowsPerPage;
+ if (index >= listResults.size()) {
+ if (log.isErrorEnabled()) {
+ log.error("Size error : " + index + " / " + listResults.size());
+ }
+ return null;
+ }
+ return CollectionUtils.get(listResults, index);
+ }
+
+ @Override
+ public abstract Class getRowType();
+
+ public E get(K key) {
+ return mapResults.get(key);
+ }
+
+ public List<E> values() {
+ return listResults;
+ }
+
+}
Property changes on: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/AbstractMappedGridDataSource.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Added: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/BoatDataSource.java
===================================================================
--- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/BoatDataSource.java (rev 0)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/BoatDataSource.java 2010-01-19 14:57:51 UTC (rev 238)
@@ -0,0 +1,75 @@
+
+package fr.ifremer.suiviobsmer.ui.data;
+
+import fr.ifremer.suiviobsmer.SuiviObsmerException;
+import fr.ifremer.suiviobsmer.bean.BoatFilter;
+import fr.ifremer.suiviobsmer.entity.Boat;
+import fr.ifremer.suiviobsmer.services.ServiceBoat;
+import java.util.Map;
+import org.apache.tapestry5.beaneditor.PropertyModel;
+import org.apache.tapestry5.grid.ColumnSort;
+import org.apache.tapestry5.grid.SortConstraint;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * BoatDataSource
+ *
+ * Created: 19 janv. 2010
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class BoatDataSource extends AbstractMappedGridDataSource<Integer, Boat> {
+
+ private static Logger log = LoggerFactory.getLogger(BoatDataSource.class);
+
+ private BoatFilter filter;
+
+ private ServiceBoat service;
+
+ public BoatDataSource(BoatFilter filter, ServiceBoat service) {
+ this.filter = filter;
+ this.service = service;
+ }
+
+
+ @Override
+ protected Map<Integer, Boat> execute(int startIndex, int endIndex, SortConstraint orderBy) throws SuiviObsmerException {
+ if (log.isInfoEnabled()) {
+ log.info("BUSINESS REQUEST [getBoatsByFilter]");
+ }
+ filter.setStartIndex(startIndex);
+ filter.setEndIndex(endIndex);
+
+ if (orderBy != null) {
+ PropertyModel property = orderBy.getPropertyModel();
+ String filterOrder = property.getPropertyName();
+
+ ColumnSort sort = orderBy.getColumnSort();
+ if (sort.equals(ColumnSort.DESCENDING)) {
+ filterOrder += " desc";
+ }
+ filter.setOrderBy(filterOrder);
+ }
+
+ return service.getBoatsByFilter(filter);
+ }
+
+ @Override
+ protected int count() throws SuiviObsmerException {
+ if (log.isInfoEnabled()) {
+ log.info("BUSINESS REQUEST [countBoatsByFilter]");
+ }
+ return service.countBoatsByFilter(filter);
+ }
+
+ @Override
+ public Class<?> getRowType() {
+ return Boat.class;
+ }
+
+}
Property changes on: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/BoatDataSource.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Added: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/ContactDataSource.java
===================================================================
--- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/ContactDataSource.java (rev 0)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/ContactDataSource.java 2010-01-19 14:57:51 UTC (rev 238)
@@ -0,0 +1,60 @@
+
+package fr.ifremer.suiviobsmer.ui.data;
+
+import fr.ifremer.suiviobsmer.SuiviObsmerException;
+import fr.ifremer.suiviobsmer.bean.ContactFilter;
+import fr.ifremer.suiviobsmer.entity.Contact;
+import fr.ifremer.suiviobsmer.services.ServiceContact;
+import java.util.Map;
+import org.apache.tapestry5.grid.SortConstraint;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * ContactDataSource
+ *
+ * Created: 18 janv. 2010
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ContactDataSource extends AbstractMappedGridDataSource<String, Contact> {
+
+ private static Logger log = LoggerFactory.getLogger(ContactDataSource.class);
+
+ private ContactFilter filter;
+
+ private ServiceContact serviceContact;
+
+ public ContactDataSource(ContactFilter filter, ServiceContact service) {
+ this.filter = filter;
+ serviceContact = service;
+ }
+
+ @Override
+ public Class<?> getRowType() {
+ return Contact.class;
+ }
+
+ @Override
+ protected Map<String, Contact> execute(int startIndex, int endIndex, SortConstraint orderBy) throws SuiviObsmerException {
+ if (log.isInfoEnabled()) {
+ log.info("BUSINESS REQUEST [getContactsByFilter]");
+ }
+ filter.setStartIndex(startIndex);
+ filter.setEndIndex(endIndex);
+ return serviceContact.getContactsByFilter(filter);
+ }
+
+ @Override
+ protected int count() throws SuiviObsmerException {
+ if (log.isInfoEnabled()) {
+ log.info("BUSINESS REQUEST [countContactsByFilter]");
+ }
+ return serviceContact.countContactsByFilter(filter);
+ }
+
+}
Property changes on: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/ContactDataSource.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Boats.java
===================================================================
--- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Boats.java 2010-01-18 19:27:24 UTC (rev 237)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Boats.java 2010-01-19 14:57:51 UTC (rev 238)
@@ -46,6 +46,7 @@
import fr.ifremer.suiviobsmer.ui.base.SuiviObsmerPage;
import fr.ifremer.suiviobsmer.ui.components.FeedBack;
import fr.ifremer.suiviobsmer.ui.components.Layout;
+import fr.ifremer.suiviobsmer.ui.data.BoatDataSource;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
@@ -55,7 +56,6 @@
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
-import java.util.Map;
import java.util.zip.GZIPInputStream;
import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils;
@@ -415,7 +415,8 @@
/**************************** Boats List *****************************************/
@Persist
- private Map<Integer, Boat> boats;
+// private Map<Integer, Boat> boats;
+ private BoatDataSource boats;
@Property
@Persist
@@ -429,15 +430,22 @@
@InjectComponent
private Zone boatsZone;
- public Map<Integer, Boat> getBoats() throws SuiviObsmerException {
+ public BoatDataSource getBoats() throws SuiviObsmerException {
if (boats == null) {
- if (log.isInfoEnabled()) {
- log.info("BUSINESS REQUEST [getBoatsByFilter]");
- }
- boats = serviceBoat.getBoatsByFilter(boatFilter);
+ boats = new BoatDataSource(getBoatFilter(), serviceBoat);
}
return boats;
}
+
+// public Map<Integer, Boat> getBoats() throws SuiviObsmerException {
+// if (boats == null) {
+// if (log.isInfoEnabled()) {
+// log.info("BUSINESS REQUEST [getBoatsByFilter]");
+// }
+// boats = serviceBoat.getBoatsByFilter(boatFilter);
+// }
+// return boats;
+// }
public String getRowClass() {
String result = "";
Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Contacts.java
===================================================================
--- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Contacts.java 2010-01-18 19:27:24 UTC (rev 237)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Contacts.java 2010-01-19 14:57:51 UTC (rev 238)
@@ -35,9 +35,9 @@
import fr.ifremer.suiviobsmer.entity.User;
import fr.ifremer.suiviobsmer.services.ServiceBoat;
import fr.ifremer.suiviobsmer.services.ServiceContact;
-import fr.ifremer.suiviobsmer.services.ServiceReferential;
import fr.ifremer.suiviobsmer.services.ServiceSampling;
import fr.ifremer.suiviobsmer.ui.base.AbstractFilteredPage;
+import fr.ifremer.suiviobsmer.ui.data.ContactDataSource;
import fr.ifremer.suiviobsmer.ui.data.BusinessUtils;
import fr.ifremer.suiviobsmer.ui.base.GenericSelectModel;
import fr.ifremer.suiviobsmer.ui.base.SuiviObsmerPage;
@@ -47,7 +47,6 @@
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
-import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -55,8 +54,7 @@
import org.apache.commons.lang.StringUtils;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.Field;
-import org.apache.tapestry5.OptionModel;
-import org.apache.tapestry5.SelectModel;
+import org.apache.tapestry5.PersistenceConstants;
import org.apache.tapestry5.StreamResponse;
import org.apache.tapestry5.annotations.IncludeStylesheet;
import org.apache.tapestry5.annotations.InjectComponent;
@@ -67,8 +65,6 @@
import org.apache.tapestry5.beaneditor.BeanModel;
import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.corelib.components.Zone;
-import org.apache.tapestry5.internal.OptionModelImpl;
-import org.apache.tapestry5.internal.SelectModelImpl;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.ioc.services.PropertyAccess;
import org.apache.tapestry5.services.BeanModelSource;
@@ -114,11 +110,11 @@
@Inject
private ServiceBoat serviceBoat;
- @Persist("flash")
+ @Persist(PersistenceConstants.FLASH)
private String editableContactId;
void setupRender() throws SuiviObsmerException {
- initFilter();
+ //initFilter();
contacts = null;
getContacts();
contactsForm.clearErrors();
@@ -136,7 +132,8 @@
private Zone importExportZone;
@Property
- @Persist("flash")
+// @Persist(PersistenceConstants.FLASH)
+ @Persist
private boolean filtersVisible;
private boolean reset;
@@ -144,6 +141,7 @@
public ContactFilter getContactFilter() throws SuiviObsmerException {
if (contactFilter == null) {
contactFilter = new ContactFilterImpl();
+ initFilter();
// if (!user.getAdmin()) {
// contactFilter.setCompany(user.getCompany());
// }
@@ -159,6 +157,7 @@
@Override
protected void resetFilter() {
contactFilter = null;
+ filtersVisible = false;
}
// @Override
@@ -197,6 +196,7 @@
void onSuccessFromFiltersForm() throws SuiviObsmerException {
if (reset) {
contactFilter = null;
+ filtersVisible = false;
} else {
filtersVisible = true;
}
@@ -262,7 +262,8 @@
private ContactModelFactory contactModelFactory;
@Persist
- private Map<String, Contact> contacts;
+ private ContactDataSource contacts;
+// private Map<String, Contact> contacts;
@Property
private Contact contact;
@@ -275,23 +276,33 @@
private GenericSelectModel<User> userSelectModel;
@Property
- @Persist("flash")
+ @Persist(PersistenceConstants.FLASH)
private String contactUserId;
private ContactState contactState;
private boolean even = true;
- public Map<String, Contact> getContacts() throws SuiviObsmerException {
+ public ContactDataSource getContacts() throws SuiviObsmerException {
if (contacts == null) {
if (log.isInfoEnabled()) {
- log.info("BUSINESS REQUEST [getContactsByFilter]");
+ log.info("Create DataSource");
}
- contacts = serviceContact.getContactsByFilter(getContactFilter());
+ contacts = new ContactDataSource(getContactFilter(), serviceContact);
}
return contacts;
}
+// public Map<String, Contact> getContacts() throws SuiviObsmerException {
+// if (contacts == null) {
+// if (log.isInfoEnabled()) {
+// log.info("Create DataSource");
+// }
+// contacts = serviceContact.getContactsByFilter(getContactFilter());
+// }
+// return contacts;
+// }
+
public BeanModel<Contact> getContactModel() {
if (contactModel == null) {
contactModel = user.getAdmin() ?
@@ -391,7 +402,7 @@
}
void onSelectedFromAcceptContact(String contactId) throws SuiviObsmerException {
- contact = getContacts().get(contactId);
+ contact = getContacts().get(contactId);
if (user.getAdmin()) {
contact.setValidationProgram(Boolean.TRUE);
} else {
@@ -464,7 +475,7 @@
/**************************** CONTACT SAVE ********************************/
- @Persist("flash")
+ @Persist(PersistenceConstants.FLASH)
private String contactSelectedId;
@InjectComponent
Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Index.java
===================================================================
--- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Index.java 2010-01-18 19:27:24 UTC (rev 237)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Index.java 2010-01-19 14:57:51 UTC (rev 238)
@@ -32,6 +32,7 @@
import java.util.ArrayList;
import java.util.List;
import org.apache.tapestry5.Asset2;
+import org.apache.tapestry5.PersistenceConstants;
import org.apache.tapestry5.annotations.IncludeStylesheet;
import org.apache.tapestry5.annotations.Log;
import org.apache.tapestry5.annotations.Path;
@@ -78,7 +79,7 @@
private DateFormat dateFormat;
- @Persist("flash")
+ @Persist(PersistenceConstants.FLASH)
private String editedId;
@Property
Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/ContactModelFactory.java
===================================================================
--- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/ContactModelFactory.java 2010-01-18 19:27:24 UTC (rev 237)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/ContactModelFactory.java 2010-01-19 14:57:51 UTC (rev 238)
@@ -23,12 +23,14 @@
import fr.ifremer.suiviobsmer.entity.Contact;
import fr.ifremer.suiviobsmer.entity.FishingZone;
+import fr.ifremer.suiviobsmer.entity.User;
import java.lang.annotation.Annotation;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.PropertyConduit;
import org.apache.tapestry5.beaneditor.BeanModel;
import org.apache.tapestry5.beaneditor.RelativePosition;
import org.apache.tapestry5.services.BeanModelSource;
+import org.nuiton.topia.persistence.TopiaEntity;
/**
* ContactModelFactory
@@ -53,24 +55,24 @@
// New properties for contactModel
contactModel.add("createdBy", null);
- contactModel.add("sampleRow", getSampleRowPropertyConduit());
- contactModel.add("boat", getBoatPropertyConduit());
+ contactModel.add(Contact.SAMPLE_ROW, getSampleRowPropertyConduit());
+ contactModel.add(Contact.BOAT, getBoatPropertyConduit());
contactModel.add("mammals", null);
contactModel.add("validation", null);
contactModel.add("actions", null);
contactModel.include(
"createdBy",
- "topiaCreateDate",
- "sampleRow",
- "boat",
- "state",
- "tideBeginDate",
- "tideEndDate",
- "nbObservants",
+ TopiaEntity.TOPIA_CREATE_DATE,
+ Contact.SAMPLE_ROW,
+ Contact.BOAT,
+ Contact.STATE,
+ Contact.TIDE_BEGIN_DATE,
+ Contact.TIDE_END_DATE,
+ Contact.NB_OBSERVANTS,
"mammals",
- "dataInputDate",
- "comment",
+ Contact.DATA_INPUT_DATE,
+ Contact.COMMENT,
"validation",
"actions");
@@ -80,16 +82,16 @@
public BeanModel<Contact> buildAdminContactModel(BeanModelSource beanModelSource, ComponentResources resources) {
BeanModel<Contact> contactModel = buildContactModel(beanModelSource, resources);
contactModel.exclude("createdBy");
- contactModel.add(RelativePosition.AFTER,"topiaCreateDate", "observer", getUserPropertyConduit());
- contactModel.add(RelativePosition.AFTER, "observer", "company", getCompanyPropertyConduit());
- contactModel.add(RelativePosition.AFTER, "sampleRow", "program", getProgramPropertyConduit());
+ contactModel.add(RelativePosition.AFTER, TopiaEntity.TOPIA_CREATE_DATE, "observer", getUserPropertyConduit());
+ contactModel.add(RelativePosition.AFTER, "observer", User.COMPANY, getCompanyPropertyConduit());
+ contactModel.add(RelativePosition.AFTER, Contact.SAMPLE_ROW, "program", getProgramPropertyConduit());
contactModel.add(RelativePosition.AFTER, "program", "professionCode", getProfessionCodePropertyConduit());
contactModel.add(RelativePosition.AFTER, "professionCode", "professionLibelle", getProfessionLibellePropertyConduit());
contactModel.add(RelativePosition.AFTER, "professionLibelle", "professionSpecies", getProfessionSpeciesPropertyConduit());
contactModel.add(RelativePosition.AFTER, "professionSpecies", "fishingZoneFacade", getFishingZoneFacadePropertyConduit());
contactModel.add(RelativePosition.AFTER, "fishingZoneFacade", "fishingZoneSector", getFishingZoneSectorPropertyConduit());
contactModel.add(RelativePosition.AFTER, "fishingZoneSector", "fishingZoneDivision", getFishingZoneDivisionPropertyConduit());
- contactModel.add(RelativePosition.AFTER, "boat", "boatImmatriculation", getBoatImmatriculationPropertyConduit());
+ contactModel.add(RelativePosition.AFTER, Contact.BOAT, "boatImmatriculation", getBoatImmatriculationPropertyConduit());
contactModel.add(RelativePosition.AFTER, "boatImmatriculation", "boatDistrictCode", getBoatDistrictCodePropertyConduit());
return contactModel;
}
Modified: trunk/suiviobsmer-ui/src/main/webapp/Boats.tml
===================================================================
--- trunk/suiviobsmer-ui/src/main/webapp/Boats.tml 2010-01-18 19:27:24 UTC (rev 237)
+++ trunk/suiviobsmer-ui/src/main/webapp/Boats.tml 2010-01-19 14:57:51 UTC (rev 238)
@@ -107,7 +107,7 @@
<!-- BOATLIST:: -->
<div class="fleft" id="so-boats-list">
<h1>Liste des navires</h1>
- <div t:type="grid" t:source="boats.values()" t:row="boat"
+ <div t:type="grid" t:source="boats" t:row="boat"
t:include="name, immatriculation, districtCode, boatLength, buildYear" t:rowClass="prop:rowClass" t:rowsPerPage="20">
<p:nameCell>
<t:if t:test="canCreateNewContactFromList()">
Modified: trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml
===================================================================
--- trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml 2010-01-18 19:27:24 UTC (rev 237)
+++ trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml 2010-01-19 14:57:51 UTC (rev 238)
@@ -112,7 +112,7 @@
<t:zone t:id="gridZone" t:update="show">
<form t:type="form" t:id="contactsForm" t:zone="gridZone">
<t:errors id="so-contact-form-errors" t:banner="message:contactsForm-errors-banner"/>
- <div t:type="grid" t:source="contacts.values()" t:row="contact" class="t-data-grid ${gridClass}" t:model="contactModel" t:rowClass="prop:rowClass"
+ <div t:type="grid" t:source="contacts" t:row="contact" class="t-data-grid ${gridClass}" t:model="contactModel" t:rowClass="prop:rowClass"
t:rowsPerPage="20">
<p:createdByCell>
<t:if t:test="editionMode">
Modified: trunk/suiviobsmer-ui/src/main/webapp/img/chart-area.png
===================================================================
(Binary files differ)