Author: fdesbois Date: 2010-07-01 16:50:15 +0000 (Thu, 01 Jul 2010) New Revision: 587 Log: Evo #2352 : Cartography for contacts : - Use PieChart page as redirection for Eastwood (or other google chart api implementation servlet) Added: trunk/wao-business/src/test/java/fr/ifremer/wao/bean/PieChartDataImplTest.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/PieChart.java Removed: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceChartAbstract.java Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/PieChartDataImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv/ImportHelper.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceCartographyImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceChartEmpty.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSynthesisImpl.java trunk/wao-business/src/main/resources/i18n/wao-business-en_GB.properties trunk/wao-business/src/main/resources/i18n/wao-business-fr_FR.properties trunk/wao-business/src/main/xmi/wao.zargo trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceCartographyImplTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSynthesisImplTest.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/AppModule.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartImpl.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartServlet.java trunk/wao-ui/src/main/webapp/WEB-INF/web.xml Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/PieChartDataImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/PieChartDataImpl.java 2010-07-01 12:59:33 UTC (rev 586) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/PieChartDataImpl.java 2010-07-01 16:50:15 UTC (rev 587) @@ -1,6 +1,9 @@ package fr.ifremer.wao.bean; +import org.nuiton.util.StringUtil; + import java.util.ArrayList; +import java.util.Arrays; /** * Created: 1 juil. 2010 @@ -10,6 +13,10 @@ */ public class PieChartDataImpl extends PieChartData { + private static final String VALUE_SEPARATOR = ","; + + private static final String PROPERTY_SEPARATOR = "|"; + public PieChartDataImpl() { labels = new ArrayList<String>(); values = new ArrayList<Double>(); @@ -23,5 +30,54 @@ values.add(value); colors.add(color); } + + /** + * This method is used to set all data from a input string {@code data}. + * The data as string is created using {@link #getData()}. + * + * @param data input string of data to set + */ + @Override + public void setData(String data) { + // need to escape separator | + String[] properties = data.split("\\" + PROPERTY_SEPARATOR); + labels.clear(); + for (String value : properties[0].split(VALUE_SEPARATOR)) { + labels.add(value); + } + values.clear(); + for (String value : properties[1].split(VALUE_SEPARATOR)) { + values.add(Double.valueOf(value)); + } + colors.clear(); + for (String value : properties[2].split(VALUE_SEPARATOR)) { + colors.add(value); + } + } + + /** + * Concatenate all data as a string. Each property (labels, values and + * colors) are separated by {@link #PROPERTY_SEPARATOR} and each value + * are separated by {@link #VALUE_SEPARATOR}. Properties order is : + * labels, values and colors. + * + * @return a String corresponding to all data + */ + @Override + public String getData() { + String[] data = new String[] { + StringUtil.join(labels, VALUE_SEPARATOR, true), + StringUtil.join(values, VALUE_SEPARATOR, true), + StringUtil.join(colors, VALUE_SEPARATOR, true) + }; + + String result = StringUtil.join(Arrays.asList(data), PROPERTY_SEPARATOR, true); + return result; + } + + @Override + public String toString() { + return getData(); + } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv/ImportHelper.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv/ImportHelper.java 2010-07-01 12:59:33 UTC (rev 586) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv/ImportHelper.java 2010-07-01 16:50:15 UTC (rev 587) @@ -252,7 +252,7 @@ calendar.set(Calendar.DAY_OF_MONTH, 1); } catch (ParseException eee) { // If the date can't be parse, it must be ok with header pattern - logger.debug("Date parse error : " + eee.getMessage()); + logger.trace("Date parse error : " + eee.getMessage()); dateFormat = new SimpleDateFormat(pattern); result = dateFormat.parse(value); calendar.setTime(result); Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceCartographyImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceCartographyImpl.java 2010-07-01 12:59:33 UTC (rev 586) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceCartographyImpl.java 2010-07-01 16:50:15 UTC (rev 587) @@ -5,6 +5,7 @@ import fr.ifremer.wao.WaoException; import fr.ifremer.wao.bean.ContactState; import fr.ifremer.wao.bean.ContactStateStatistics; +import fr.ifremer.wao.bean.PieChartData; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.io.BoatDistrictData; import fr.ifremer.wao.io.kml.BoatDistrictKmlReader; @@ -130,11 +131,10 @@ protected InputStream executeExportContactStatisticsKml(TopiaContext transaction, Company company) { - Collection<ContactStateStatistics> data = - serviceSynthesis.getContactStateStatistics(company, null); + PieChartData data = serviceSynthesis.getContactPieChartData(company); - String miniChartUrl = serviceChart.getContactPieChartUrl(true); - String bigChartUrl = serviceChart.getContactPieChartUrl(false); + String miniChartUrl = serviceChart.getPieChartUrl(data, true); + String bigChartUrl = serviceChart.getPieChartUrl(data, false); return null; } Deleted: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceChartAbstract.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceChartAbstract.java 2010-07-01 12:59:33 UTC (rev 586) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceChartAbstract.java 2010-07-01 16:50:15 UTC (rev 587) @@ -1,55 +0,0 @@ -package fr.ifremer.wao.service; - -import fr.ifremer.wao.bean.ContactState; -import fr.ifremer.wao.bean.ContactStateStatistics; -import fr.ifremer.wao.bean.PieChartData; -import fr.ifremer.wao.bean.PieChartDataImpl; - -import java.util.Collection; - -/** - * Created: 1 juil. 2010 - * - * @author fdesbois <fdesbois at codelutin.com> - * @version $Id$ - */ -public abstract class ServiceChartAbstract implements ServiceChart { - - @Override - public PieChartData getContactPieChartData( - Collection<ContactStateStatistics> data) { - - int realized = 0, refused = 0, other = 0, total = 0; - - for (ContactStateStatistics stats : data) { - for (ContactState state : stats.getData().keySet()) { - - Integer value = stats.getData().get(state); - total += value; - - switch (state) { - case BOARDING_DONE: - case BOARDING_EXPECTED: - realized += value; break; - case BOAT_REFUSED: - case BOAT_DEFINITIVE_REFUSED: - refused += value; break; - default: - other += value; - } - } - } - - PieChartData result = new PieChartDataImpl(); - - result.addData("Réalisés", getPercentage(realized, total), "0000FF"); - result.addData("Refusés", getPercentage(refused, total), "FF0000"); - result.addData("Autres", getPercentage(other, total), "FFFF10"); - - return result; - } - - protected double getPercentage(int value, int total) { - return value / total * 100; - } -} Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceChartEmpty.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceChartEmpty.java 2010-07-01 12:59:33 UTC (rev 586) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceChartEmpty.java 2010-07-01 16:50:15 UTC (rev 587) @@ -1,8 +1,10 @@ package fr.ifremer.wao.service; -import fr.ifremer.wao.bean.ContactStateStatistics; +import fr.ifremer.wao.bean.PieChartData; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import java.util.Collection; +import java.util.Arrays; /** * Created: 30 juin 2010 @@ -10,10 +12,20 @@ * @author fdesbois <fdesbois at codelutin.com> * @version $Id$ */ -public class ServiceChartEmpty extends ServiceChartAbstract { +public class ServiceChartEmpty implements ServiceChart { + private static final Logger logger = LoggerFactory.getLogger(ServiceChartEmpty.class); + @Override - public String getContactPieChartUrl(boolean thumb) { + public String getPieChartUrl(PieChartData data, boolean thumb) { + + if (logger.isDebugEnabled()) { + logger.debug("labels : " + data.getLabels()); + logger.debug("values : " + data.getValues()); + logger.debug("colors : " + data.getColors()); + logger.debug("thumb : " + thumb); + } + return ""; } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSynthesisImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSynthesisImpl.java 2010-07-01 12:59:33 UTC (rev 586) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSynthesisImpl.java 2010-07-01 16:50:15 UTC (rev 587) @@ -37,12 +37,13 @@ import fr.ifremer.wao.bean.ContactState; import fr.ifremer.wao.bean.ContactStateStatistics; import fr.ifremer.wao.bean.ContactStateStatisticsImpl; +import fr.ifremer.wao.bean.PieChartData; +import fr.ifremer.wao.bean.PieChartDataImpl; import fr.ifremer.wao.bean.SamplingFilter; import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.Contact; import fr.ifremer.wao.entity.ContactDAO; -import fr.ifremer.wao.entity.SampleMonth; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.WaoUser; import org.nuiton.topia.TopiaContext; @@ -75,7 +76,7 @@ */ public class ServiceSynthesisImpl extends ServiceSynthesisAbstract { - private static final Logger log = + private static final Logger logger = LoggerFactory.getLogger(ServiceSynthesisImpl.class); private WaoContext context; @@ -157,8 +158,8 @@ // builder.setSampleRowProperty("M." + SampleMonth.SAMPLE_ROW); // builder.applySamplingFilter(filter); - if (log.isTraceEnabled()) { - log.trace("Exec query : " + query); + if (logger.isTraceEnabled()) { + logger.trace("Exec query : " + query); } List<Object[]> res = transaction.findByQuery(query); @@ -169,10 +170,10 @@ int sumExpected = ((Long)tab[2]).intValue(); serie1.put(date, sumExpected); serie2.put(date, sumReal); - if (log.isTraceEnabled()) { + if (logger.isTraceEnabled()) { DateFormat dateFormat = new SimpleDateFormat(period.getPattern()); - log.trace("Res : " + dateFormat.format(date) + " : " + logger.trace("Res : " + dateFormat.format(date) + " : " + sumReal + " / " + sumExpected); } } @@ -242,8 +243,8 @@ addGroup(contact + "." + Contact.BOAT). addOrderDesc("COUNT(*)"); - if (log.isTraceEnabled()) { - log.trace("Exec query : " + query); + if (logger.isTraceEnabled()) { + logger.trace("Exec query : " + query); } List<Map<String, Object>> nbBoardingsByBoat = transaction.findByQuery(query); @@ -313,8 +314,8 @@ query.setSelect(companyNameProperty, "COUNT(*)"). addGroup(companyNameProperty); - if (log.isDebugEnabled()) { - log.debug("Query for total : " + query); + if (logger.isDebugEnabled()) { + logger.debug("Query for total : " + query); } List<Object[]> totalResults = transaction.findByQuery(query); @@ -329,8 +330,8 @@ toString() ); - if (log.isDebugEnabled()) { - log.debug("Query for result : " + query); + if (logger.isDebugEnabled()) { + logger.debug("Query for result : " + query); } List<Object[]> diffResults = transaction.findByQuery(query); @@ -339,8 +340,8 @@ for (Object[] row : diffResults) { String rowCompanyName = (String)row[0]; Long rowCount = (Long)row[1]; - if (log.isDebugEnabled()) { - log.debug("result row : " + rowCompanyName + " = " + rowCount); + if (logger.isDebugEnabled()) { + logger.debug("result row : " + rowCompanyName + " = " + rowCount); } results.put(rowCompanyName, rowCount.doubleValue()); } @@ -351,8 +352,8 @@ for (Object[] row : totalResults) { String rowCompanyName = (String)row[0]; Long rowCount = (Long)row[1]; - if (log.isDebugEnabled()) { - log.debug("total row : " + rowCompanyName + " = " + rowCount); + if (logger.isDebugEnabled()) { + logger.debug("total row : " + rowCompanyName + " = " + rowCount); } Double value = results.get(rowCompanyName); if (value == null) { @@ -427,8 +428,8 @@ addOrder(companyNameProperty). setSelect(companyNameProperty, stateProperty, "COUNT(*)"); - if (log.isDebugEnabled()) { - log.debug("Query : " + query); + if (logger.isDebugEnabled()) { + logger.debug("Query : " + query); } List<Object[]> res = transaction.findByQuery(query); @@ -438,8 +439,8 @@ int rowState = (Integer)row[1]; ContactState state = ContactState.valueOf(rowState); Long rowCount = (Long)row[2]; - if (log.isDebugEnabled()) { - log.debug("res : " + rowCompanyName + " _ " + state + " _ " + rowCount); + if (logger.isDebugEnabled()) { + logger.debug("res : " + rowCompanyName + " _ " + state + " _ " + rowCount); } ContactStateStatistics stats = results.get(rowCompanyName); if (stats == null) { @@ -486,8 +487,8 @@ query.setSelect(companyNameProperty, dataInputProperty, tideBeginDateProperty); - if (log.isDebugEnabled()) { - log.debug("Query : " + query); + if (logger.isDebugEnabled()) { + logger.debug("Query : " + query); } List<Object[]> res = transaction.findByQuery(query); @@ -499,11 +500,11 @@ int nbDays = DateUtils.getDifferenceInDays(rowTideBeginDate, rowDataInputDate); - if (log.isDebugEnabled()) { - log.debug("Company : " + rowCompanyName); - log.debug("tideBegin : " + rowTideBeginDate); - log.debug("dataInput : " + rowDataInputDate); - log.debug("nbDays : " + nbDays); + if (logger.isDebugEnabled()) { + logger.debug("Company : " + rowCompanyName); + logger.debug("tideBegin : " + rowTideBeginDate); + logger.debug("dataInput : " + rowDataInputDate); + logger.debug("nbDays : " + nbDays); } ContactAverageReactivity avg = results.get(rowCompanyName); @@ -518,4 +519,63 @@ return results.values(); } + @Override + public PieChartData executeGetContactPieChartData(TopiaContext transaction, + Company company) + throws TopiaException { + + Collection<ContactStateStatistics> data = + executeGetContactStateStatistics(transaction, company, null); + + int realized = 0, refused = 0, other = 0, total = 0; + + for (ContactStateStatistics stats : data) { + + if (logger.isDebugEnabled()) { + logger.debug("Stats for : " + stats.getCompanyName()); + } + + for (ContactState state : stats.getData().keySet()) { + + Integer value = stats.getData().get(state); + total += value; + + if (logger.isDebugEnabled()) { + logger.debug("state = " + state + " _ value = " + value); + } + + switch (state) { + case BOARDING_DONE: + case BOARDING_EXPECTED: + realized += value; break; + case BOAT_REFUSED: + case BOAT_DEFINITIVE_REFUSED: + refused += value; break; + default: + other += value; + } + } + } + + if (logger.isDebugEnabled()) { + logger.debug("realized = " + realized + " (" + getPercentage(realized, total) + "%)" + + " _ refused = " + refused + " (" + getPercentage(refused, total) + "%)" + + " _ other = " + other + " (" + getPercentage(other, total) + "%)" + + " _ total = " + total + " (" + getPercentage(total, total) + "%)" + ); + } + + PieChartData result = new PieChartDataImpl(); + + result.addData("Réalisés", getPercentage(realized, total), "0000FF"); + result.addData("Refusés", getPercentage(refused, total), "FF0000"); + result.addData("Autres", getPercentage(other, total), "FFFF10"); + + return result; + } + + protected double getPercentage(int value, int total) { + return (double)value / (double)total * 100; + } + } Modified: trunk/wao-business/src/main/resources/i18n/wao-business-en_GB.properties =================================================================== --- trunk/wao-business/src/main/resources/i18n/wao-business-en_GB.properties 2010-07-01 12:59:33 UTC (rev 586) +++ trunk/wao-business/src/main/resources/i18n/wao-business-en_GB.properties 2010-07-01 16:50:15 UTC (rev 587) @@ -27,6 +27,8 @@ wao.error.serviceBoat.importBoatCsv= wao.error.serviceCartography.exportContactStatisticsKml= wao.error.serviceCartography.importBoatDistrictKml= +wao.error.serviceChart.getContactPieChartData= +wao.error.serviceChart.getContactPieChartUrl= wao.error.serviceContact.exportContactCsv= wao.error.serviceContact.getContacts= wao.error.serviceContact.getNbContacts= @@ -61,6 +63,7 @@ wao.error.serviceSampling.importSamplingPlanCsv= wao.error.serviceSynthesis.getBoardingBoats= wao.error.serviceSynthesis.getContactDataInputDateReactivity= +wao.error.serviceSynthesis.getContactPieChartData= wao.error.serviceSynthesis.getContactStateStatistics= wao.error.serviceSynthesis.getDataSampling= wao.error.serviceSynthesis.getNonComplianceBoardingIndicator= Modified: trunk/wao-business/src/main/resources/i18n/wao-business-fr_FR.properties =================================================================== --- trunk/wao-business/src/main/resources/i18n/wao-business-fr_FR.properties 2010-07-01 12:59:33 UTC (rev 586) +++ trunk/wao-business/src/main/resources/i18n/wao-business-fr_FR.properties 2010-07-01 16:50:15 UTC (rev 587) @@ -26,6 +26,8 @@ wao.error.serviceBoat.importBoatCsv=Probl\u00E8me d'import du fichier CSV. V\u00E9rifiez l'en-t\u00EAte du fichier \: [ NAVS_COD,CARN_NOM,CARN_LONGUEUR_HT,CARN_ANNEE,QUARTIER_IMMA,PER_COD,PER_NOM,PER_PRENOM,NAVS_ACTIVE ]. Voir documentation pour plus de d\u00E9tails. wao.error.serviceCartography.exportContactStatisticsKml= wao.error.serviceCartography.importBoatDistrictKml=Impossible d'importer les coordonn\u00E9es des quartiers des navires. V\u00E9rifiez la documentation pour le bon format du fichier Kml. +wao.error.serviceChart.getContactPieChartData= +wao.error.serviceChart.getContactPieChartUrl= wao.error.serviceContact.exportContactCsv=Impossible d'exporter les contacts wao.error.serviceContact.getContacts=Impossible de filtrer la liste des contacts wao.error.serviceContact.getNbContacts=Impossible de compter le nombre de contacts filtr\u00E9s @@ -60,6 +62,7 @@ wao.error.serviceSampling.importSamplingPlanCsv=Erreur \u00E0 la ligne %1$d [CODE \= %2$s] wao.error.serviceSynthesis.getBoardingBoats=Impossible de r\u00E9cup\u00E9rer les donn\u00E9es du graphique concernant les embarquements sur les navires wao.error.serviceSynthesis.getContactDataInputDateReactivity=Impossible de r\u00E9cup\u00E9rer l'indicateur de r\u00E9activit\u00E9 sur les dates de saisies dans Allegro +wao.error.serviceSynthesis.getContactPieChartData= wao.error.serviceSynthesis.getContactStateStatistics=Impossible de r\u00E9cup\u00E9rer les statistiques sur les \u00E9tats des contacts wao.error.serviceSynthesis.getDataSampling=Impossible de r\u00E9cup\u00E9rer les donn\u00E9es pour le graphique dynamique des efforts de mar\u00E9es wao.error.serviceSynthesis.getNonComplianceBoardingIndicator=Impossible de r\u00E9cup\u00E9rer l'indicateur de non respect du nombre d'observateurs embarqu\u00E9s Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java 2010-07-01 12:59:33 UTC (rev 586) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java 2010-07-01 16:50:15 UTC (rev 587) @@ -30,21 +30,31 @@ import fr.ifremer.wao.entity.CompanyDAO; import fr.ifremer.wao.entity.Contact; import fr.ifremer.wao.entity.ContactDAO; +import fr.ifremer.wao.entity.ContactImpl; import fr.ifremer.wao.entity.ElligibleBoat; import fr.ifremer.wao.entity.ElligibleBoatDAO; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.SampleRowDAO; import fr.ifremer.wao.entity.WaoUser; import fr.ifremer.wao.entity.WaoUserDAO; +import fr.ifremer.wao.service.ServiceBoat; +import fr.ifremer.wao.service.ServiceContact; +import fr.ifremer.wao.service.ServiceReferential; +import fr.ifremer.wao.service.ServiceSampling; import fr.ifremer.wao.service.ServiceSamplingImpl; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; +import org.nuiton.util.DateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.InputStream; +import java.util.Date; +import java.util.List; + /** * AbstractServiceTest * @@ -506,4 +516,104 @@ } return user; } + + protected void prepareContactsData(Company company1, Company company2) + throws WaoBusinessException, TopiaException { + + InputStream input = getClass().getResourceAsStream("/import/navires.csv"); + ServiceBoat serviceBoat = manager.getServiceBoat(); + serviceBoat.importBoatCsv(input); + List<Boat> boats = serviceBoat.getBoatsByImmatriculations("174258"); + Boat boat = boats.get(0); + + List<Boat> boats2 = serviceBoat.getBoatsByImmatriculations("177474"); + Boat boat2 = boats2.get(0); + + TopiaContext transaction = manager.getContext().beginTransaction(); + + WaoUserDAO userDAO = WaoDAOHelper.getWaoUserDAO(transaction); + WaoUser user = userDAO.create(WaoUser.FIRST_NAME,"Jean", WaoUser.LAST_NAME, "Michmuche", + WaoUser.COMPANY, company1); + company1.addWaoUser(user); + WaoUser user2 = userDAO.create(WaoUser.FIRST_NAME,"Bill", WaoUser.LAST_NAME, "Murray", + WaoUser.COMPANY, company2); + company2.addWaoUser(user2); + + transaction.commitTransaction(); + + input = getClass().getResourceAsStream("/import/zonesPeche.csv"); + ServiceReferential serviceReferential = manager.getServiceReferential(); + serviceReferential.importFishingZoneCsv(input); + + input = getClass().getResourceAsStream("/import/echantillonnage.csv"); + ServiceSampling serviceSampling = manager.getServiceSampling(); + serviceSampling.importSamplingPlanCsv(input); + + SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction); + SampleRow row = rowDAO.findByCode("2010_0001"); + SampleRow row2 = rowDAO.findByCode("2009_0006"); + + transaction.closeContext(); + + + ServiceContact serviceContact = manager.getServiceContact(); + + // Contacts for company TARTANPION + Contact contact1 = new ContactImpl(); + contact1.setBoat(boat); + contact1.setObserver(user); + contact1.setSampleRow(row); + contact1.setContactState(ContactState.BOARDING_DONE); + Date begin = DateUtils.createDate(3, 3, 2010); + contact1.setTideBeginDate(begin); + serviceContact.saveContact(contact1, false); + + Contact contact2 = new ContactImpl(); + contact2.setBoat(boat); + contact2.setObserver(user); + contact2.setSampleRow(row); + contact2.setContactState(ContactState.BOARDING_DONE); + begin = DateUtils.createDate(3, 10, 2010); + contact2.setTideBeginDate(begin); + serviceContact.saveContact(contact2, false); + + Contact contact3 = new ContactImpl(); + contact3.setBoat(boat); + contact3.setObserver(user); + contact3.setSampleRow(row); + contact3.setContactState(ContactState.BOAT_REFUSED); + begin = DateUtils.createDate(3, 5, 2010); + contact3.setTopiaCreateDate(begin); + serviceContact.saveContact(contact3, false); + + // Contacts for company BIS + Contact contact4 = new ContactImpl(); + contact4.setBoat(boat2); + contact4.setObserver(user2); + contact4.setSampleRow(row2); + contact4.setContactState(ContactState.BOARDING_EXPECTED); + begin = DateUtils.createDate(3, 3, 2010); + contact4.setTopiaCreateDate(begin); + serviceContact.saveContact(contact4, false); + + Contact contact5 = new ContactImpl(); + contact5.setBoat(boat2); + contact5.setObserver(user2); + contact5.setSampleRow(row2); + contact5.setContactState(ContactState.BOAT_UNAVAILABLE); + begin = DateUtils.createDate(3, 5, 2010); + contact5.setTopiaCreateDate(begin); + serviceContact.saveContact(contact5, false); + + // Contact refused by program, will not be in result + Contact contact6 = new ContactImpl(); + contact6.setBoat(boat2); + contact6.setObserver(user2); + contact6.setSampleRow(row2); + contact6.setContactState(ContactState.BOAT_UNAVAILABLE); + begin = DateUtils.createDate(3, 3, 2010); + contact6.setTopiaCreateDate(begin); + contact6.setValidationProgram(Boolean.FALSE); + serviceContact.saveContact(contact6, false); + } } Added: trunk/wao-business/src/test/java/fr/ifremer/wao/bean/PieChartDataImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/bean/PieChartDataImplTest.java (rev 0) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/bean/PieChartDataImplTest.java 2010-07-01 16:50:15 UTC (rev 587) @@ -0,0 +1,47 @@ +package fr.ifremer.wao.bean; + +import org.junit.Assert; +import org.junit.Test; + +/** + * Created: 1 juil. 2010 + * + * @author fdesbois <fdesbois at codelutin.com> + * @version $Id$ + */ +public class PieChartDataImplTest { + + @Test + public void testSetData() throws Exception { + + String input = "Réalisé,Refusé,Autres|20.0,30.0,50.0|FFFFFF,FFFFFF,FFFFFF"; + PieChartData data = new PieChartDataImpl(); + + data.setData(input); + + Assert.assertEquals(3, data.getLabels().size()); + Assert.assertTrue(data.getLabels().contains("Réalisé")); + Assert.assertTrue(data.getLabels().contains("Refusé")); + Assert.assertTrue(data.getLabels().contains("Autres")); + Assert.assertEquals(3, data.getValues().size()); + Assert.assertTrue(data.getValues().contains(20.0)); + Assert.assertTrue(data.getValues().contains(30.0)); + Assert.assertTrue(data.getValues().contains(50.0)); + Assert.assertEquals(3, data.getColors().size()); + Assert.assertTrue(data.getColors().contains("FFFFFF")); + } + + @Test + public void testGetData() throws Exception { + + PieChartData data = new PieChartDataImpl(); + + data.addData("Réalisé", 20.0, "FFFFFF"); + data.addData("Refusé", 30.0, "FFFFFF"); + data.addData("Autres", 50.0, "FFFFFF"); + + String expected = "Réalisé,Refusé,Autres|20.0,30.0,50.0|FFFFFF,FFFFFF,FFFFFF"; + Assert.assertEquals(expected, data.getData()); + + } +} Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceCartographyImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceCartographyImplTest.java 2010-07-01 12:59:33 UTC (rev 586) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceCartographyImplTest.java 2010-07-01 16:50:15 UTC (rev 587) @@ -5,6 +5,7 @@ import fr.ifremer.wao.WaoDAOHelper; import fr.ifremer.wao.entity.BoatDistrict; import fr.ifremer.wao.entity.BoatDistrictDAO; +import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.io.ImportResults; import org.junit.Assert; import org.junit.Before; @@ -90,9 +91,15 @@ } @Test - public void testExportContactStatisticsKml() { + public void testExportContactStatisticsKml() throws TopiaException, WaoBusinessException { /** PREPARE DATA **/ + // Company TARTANPION + Company company = createDefaultCompany(); + Company company2 = createCompany("BIS"); + + prepareContactsData(company, company2); + /** EXEC METHOD **/ service.exportContactStatisticsKml(null); } Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSynthesisImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSynthesisImplTest.java 2010-07-01 12:59:33 UTC (rev 586) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSynthesisImplTest.java 2010-07-01 16:50:15 UTC (rev 587) @@ -25,8 +25,8 @@ package fr.ifremer.wao.service; +import fr.ifremer.wao.AbstractServiceTest; import fr.ifremer.wao.WaoDAOHelper; -import fr.ifremer.wao.TestManager; import fr.ifremer.wao.bean.BoardingResult; import fr.ifremer.wao.bean.ContactAverageReactivity; import fr.ifremer.wao.bean.ContactState; @@ -40,58 +40,60 @@ import fr.ifremer.wao.entity.SampleRowDAO; import fr.ifremer.wao.entity.WaoUser; import fr.ifremer.wao.entity.WaoUserDAO; -import java.io.InputStream; -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Map; import org.apache.commons.collections.CollectionUtils; -import org.junit.After; -import org.junit.AfterClass; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Test; import org.nuiton.topia.TopiaContext; import org.nuiton.util.DateUtils; import org.nuiton.util.PeriodDates; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static org.junit.Assert.*; +import java.io.InputStream; +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + /** * * @author fdesbois <fdesbois at codelutin.com> */ -public class ServiceSynthesisImplTest { +public class ServiceSynthesisImplTest extends AbstractServiceTest { - private static TestManager manager; + private static final Logger logger = + LoggerFactory.getLogger(ServiceSynthesisImplTest.class); - private static final Logger log = LoggerFactory.getLogger(ServiceSynthesisImplTest.class); - private ServiceSynthesis service; - public ServiceSynthesisImplTest() { - } - - @BeforeClass - public static void setUpClass() throws Exception { - manager = new TestManager(); - } - - @AfterClass - public static void tearDownClass() throws Exception { - } - @Before - public void setUp() throws Exception { - manager.start(); + public void initialize() { + logger.info("initialize ServiceCartographyImplTest"); service = manager.getServiceSynthesis(); } - @After - public void tearDown() throws Exception { - manager.stop(); - } +// @BeforeClass +// public static void setUpClass() throws Exception { +// manager = new TestManager(); +// } +// +// @AfterClass +// public static void tearDownClass() throws Exception { +// } +// +// @Before +// public void setUp() throws Exception { +// manager.start(); +// service = manager.getServiceSynthesis(); +// } +// +// @After +// public void tearDown() throws Exception { +// manager.stop(); +// } /** * Test of getDataSampling method, of class ServiceSynthesisImpl. @@ -106,7 +108,7 @@ */ @Test public void testGetBoardingBoats() throws Exception { - log.info("getBoardingBoats"); + logger.info("getBoardingBoats"); /** PREPARE DATA **/ InputStream input = getClass().getResourceAsStream("/import/navires.csv"); ServiceBoat serviceBoat = manager.getServiceBoat(); @@ -194,7 +196,7 @@ */ @Test public void testGetNonComplianceBoardingIndicator() throws Exception { - log.info("getNonComplianceBoardingIndicator"); + logger.info("getNonComplianceBoardingIndicator"); /** PREPARE DATA **/ InputStream input = getClass().getResourceAsStream("/import/navires.csv"); ServiceBoat serviceBoat = manager.getServiceBoat(); @@ -301,108 +303,115 @@ */ @Test public void testGetContactStateStatistics() throws Exception { - log.info("getContactStateStatistics"); + logger.info("getContactStateStatistics"); /** PREPARE DATA **/ - InputStream input = getClass().getResourceAsStream("/import/navires.csv"); - ServiceBoat serviceBoat = manager.getServiceBoat(); - serviceBoat.importBoatCsv(input); - List<Boat> boats = serviceBoat.getBoatsByImmatriculations("174258"); - Boat boat = boats.get(0); +// InputStream input = getClass().getResourceAsStream("/import/navires.csv"); +// ServiceBoat serviceBoat = manager.getServiceBoat(); +// serviceBoat.importBoatCsv(input); +// List<Boat> boats = serviceBoat.getBoatsByImmatriculations("174258"); +// Boat boat = boats.get(0); +// +// List<Boat> boats2 = serviceBoat.getBoatsByImmatriculations("177474"); +// Boat boat2 = boats2.get(0); +// +// TopiaContext transaction = manager.getContext().beginTransaction(); +// +// CompanyDAO companyDAO = WaoDAOHelper.getCompanyDAO(transaction); +// Company company = companyDAO.create(Company.NAME, "TARTANPION"); +// Company company2 = companyDAO.create(Company.NAME, "BIS"); +// +// WaoUserDAO userDAO = WaoDAOHelper.getWaoUserDAO(transaction); +// WaoUser user = userDAO.create(WaoUser.FIRST_NAME,"Jean", WaoUser.LAST_NAME, "Michmuche", +// WaoUser.COMPANY, company); +// company.addWaoUser(user); +// WaoUser user2 = userDAO.create(WaoUser.FIRST_NAME,"Bill", WaoUser.LAST_NAME, "Murray", +// WaoUser.COMPANY, company2); +// company2.addWaoUser(user2); +// +// transaction.commitTransaction(); +// +// input = getClass().getResourceAsStream("/import/zonesPeche.csv"); +// ServiceReferential serviceReferential = manager.getServiceReferential(); +// serviceReferential.importFishingZoneCsv(input); +// +// input = getClass().getResourceAsStream("/import/echantillonnage.csv"); +// ServiceSampling serviceSampling = manager.getServiceSampling(); +// serviceSampling.importSamplingPlanCsv(input); +// +// SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction); +// SampleRow row = rowDAO.findByCode("2010_0001"); +// SampleRow row2 = rowDAO.findByCode("2009_0006"); +// +// transaction.closeContext(); +// +// +// ServiceContact serviceContact = manager.getServiceContact(); +// +// // Contacts for company TARTANPION +// Contact contact1 = new ContactImpl(); +// contact1.setBoat(boat); +// contact1.setObserver(user); +// contact1.setSampleRow(row); +// contact1.setContactState(ContactState.BOARDING_DONE); +// Date begin = DateUtils.createDate(3, 3, 2010); +// contact1.setTideBeginDate(begin); +// serviceContact.saveContact(contact1, false); +// +// Contact contact2 = new ContactImpl(); +// contact2.setBoat(boat); +// contact2.setObserver(user); +// contact2.setSampleRow(row); +// contact2.setContactState(ContactState.BOARDING_DONE); +// begin = DateUtils.createDate(3, 10, 2010); +// contact2.setTideBeginDate(begin); +// serviceContact.saveContact(contact2, false); +// +// Contact contact3 = new ContactImpl(); +// contact3.setBoat(boat); +// contact3.setObserver(user); +// contact3.setSampleRow(row); +// contact3.setContactState(ContactState.BOAT_REFUSED); +// begin = DateUtils.createDate(3, 5, 2010); +// contact3.setTopiaCreateDate(begin); +// serviceContact.saveContact(contact3, false); +// +// // Contacts for company BIS +// Contact contact4 = new ContactImpl(); +// contact4.setBoat(boat2); +// contact4.setObserver(user2); +// contact4.setSampleRow(row2); +// contact4.setContactState(ContactState.BOARDING_EXPECTED); +// begin = DateUtils.createDate(3, 3, 2010); +// contact4.setTopiaCreateDate(begin); +// serviceContact.saveContact(contact4, false); +// +// Contact contact5 = new ContactImpl(); +// contact5.setBoat(boat2); +// contact5.setObserver(user2); +// contact5.setSampleRow(row2); +// contact5.setContactState(ContactState.BOAT_UNAVAILABLE); +// begin = DateUtils.createDate(3, 5, 2010); +// contact5.setTopiaCreateDate(begin); +// serviceContact.saveContact(contact5, false); +// +// // Contact refused by program, will not be in result +// Contact contact6 = new ContactImpl(); +// contact6.setBoat(boat2); +// contact6.setObserver(user2); +// contact6.setSampleRow(row2); +// contact6.setContactState(ContactState.BOAT_UNAVAILABLE); +// begin = DateUtils.createDate(3, 3, 2010); +// contact6.setTopiaCreateDate(begin); +// contact6.setValidationProgram(Boolean.FALSE); +// serviceContact.saveContact(contact6, false); - List<Boat> boats2 = serviceBoat.getBoatsByImmatriculations("177474"); - Boat boat2 = boats2.get(0); - TopiaContext transaction = manager.getContext().beginTransaction(); + // Company TARTANPION + Company company = createDefaultCompany(); + Company company2 = createCompany("BIS"); - CompanyDAO companyDAO = WaoDAOHelper.getCompanyDAO(transaction); - Company company = companyDAO.create(Company.NAME, "TARTANPION"); - Company company2 = companyDAO.create(Company.NAME, "BIS"); + prepareContactsData(company, company2); - WaoUserDAO userDAO = WaoDAOHelper.getWaoUserDAO(transaction); - WaoUser user = userDAO.create(WaoUser.FIRST_NAME,"Jean", WaoUser.LAST_NAME, "Michmuche", - WaoUser.COMPANY, company); - company.addWaoUser(user); - WaoUser user2 = userDAO.create(WaoUser.FIRST_NAME,"Bill", WaoUser.LAST_NAME, "Murray", - WaoUser.COMPANY, company2); - company2.addWaoUser(user2); - - transaction.commitTransaction(); - - input = getClass().getResourceAsStream("/import/zonesPeche.csv"); - ServiceReferential serviceReferential = manager.getServiceReferential(); - serviceReferential.importFishingZoneCsv(input); - - input = getClass().getResourceAsStream("/import/echantillonnage.csv"); - ServiceSampling serviceSampling = manager.getServiceSampling(); - serviceSampling.importSamplingPlanCsv(input); - - SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction); - SampleRow row = rowDAO.findByCode("2010_0001"); - SampleRow row2 = rowDAO.findByCode("2009_0006"); - - transaction.closeContext(); - - - ServiceContact serviceContact = manager.getServiceContact(); - - // Contacts for company TARTANPION - Contact contact1 = new ContactImpl(); - contact1.setBoat(boat); - contact1.setObserver(user); - contact1.setSampleRow(row); - contact1.setContactState(ContactState.BOARDING_DONE); - Date begin = DateUtils.createDate(3, 3, 2010); - contact1.setTideBeginDate(begin); - serviceContact.saveContact(contact1, false); - - Contact contact2 = new ContactImpl(); - contact2.setBoat(boat); - contact2.setObserver(user); - contact2.setSampleRow(row); - contact2.setContactState(ContactState.BOARDING_DONE); - begin = DateUtils.createDate(3, 10, 2010); - contact2.setTideBeginDate(begin); - serviceContact.saveContact(contact2, false); - - Contact contact3 = new ContactImpl(); - contact3.setBoat(boat); - contact3.setObserver(user); - contact3.setSampleRow(row); - contact3.setContactState(ContactState.BOAT_REFUSED); - begin = DateUtils.createDate(3, 5, 2010); - contact3.setTopiaCreateDate(begin); - serviceContact.saveContact(contact3, false); - - // Contacts for company BIS - Contact contact4 = new ContactImpl(); - contact4.setBoat(boat2); - contact4.setObserver(user2); - contact4.setSampleRow(row2); - contact4.setContactState(ContactState.BOARDING_EXPECTED); - begin = DateUtils.createDate(3, 3, 2010); - contact4.setTopiaCreateDate(begin); - serviceContact.saveContact(contact4, false); - - Contact contact5 = new ContactImpl(); - contact5.setBoat(boat2); - contact5.setObserver(user2); - contact5.setSampleRow(row2); - contact5.setContactState(ContactState.BOAT_UNAVAILABLE); - begin = DateUtils.createDate(3, 5, 2010); - contact5.setTopiaCreateDate(begin); - serviceContact.saveContact(contact5, false); - - // Contact refused by program, will not be in result - Contact contact6 = new ContactImpl(); - contact6.setBoat(boat2); - contact6.setObserver(user2); - contact6.setSampleRow(row2); - contact6.setContactState(ContactState.BOAT_UNAVAILABLE); - begin = DateUtils.createDate(3, 3, 2010); - contact6.setTopiaCreateDate(begin); - contact6.setValidationProgram(Boolean.FALSE); - serviceContact.saveContact(contact6, false); - /** EXEC METHOD **/ // result for company TARTANPION with no period @@ -437,7 +446,7 @@ assertEquals(1, data.get(ContactState.BOAT_UNAVAILABLE).intValue()); // result for period 3/1/2010 to 31/3/2010 for BIS company - begin = DateUtils.createDate(3, 1, 2010); + Date begin = DateUtils.createDate(3, 1, 2010); Date end = DateUtils.createDate(31, 3, 2010); PeriodDates period = new PeriodDates(begin, end); @@ -457,7 +466,7 @@ */ @Test public void testGetContactDataInputDateReactivity() throws Exception { - log.info("getContactDataInputDateReactivity"); + logger.info("getContactDataInputDateReactivity"); /** PREPARE DATA **/ InputStream input = getClass().getResourceAsStream("/import/navires.csv"); ServiceBoat serviceBoat = manager.getServiceBoat(); Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/PieChart.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/PieChart.java (rev 0) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/PieChart.java 2010-07-01 16:50:15 UTC (rev 587) @@ -0,0 +1,32 @@ +package fr.ifremer.wao.ui.pages; + +import fr.ifremer.wao.bean.PieChartData; +import fr.ifremer.wao.service.ServiceChart; +import org.apache.tapestry5.ioc.annotations.Inject; +import org.apache.tapestry5.ioc.annotations.InjectService; +import org.slf4j.Logger; + +import java.net.MalformedURLException; +import java.net.URL; + +/** + * Created: 1 juil. 2010 + * + * @author fdesbois <fdesbois at codelutin.com> + * @version $Id$ + */ +public class PieChart { + + @Inject + private Logger logger; + + @InjectService("serviceChartServlet") + private ServiceChart chartServlet; + + URL onActivate(PieChartData data, boolean thumb) + throws MalformedURLException { + + return new URL(chartServlet.getPieChartUrl(data, thumb)); + } + +} Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/AppModule.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/AppModule.java 2010-07-01 12:59:33 UTC (rev 586) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/AppModule.java 2010-07-01 16:50:15 UTC (rev 587) @@ -27,6 +27,8 @@ import fr.ifremer.wao.WaoContextImpl; import fr.ifremer.wao.bean.ConnectedUser; +import fr.ifremer.wao.bean.PieChartData; +import fr.ifremer.wao.bean.PieChartDataImpl; import fr.ifremer.wao.service.ServiceBoat; import fr.ifremer.wao.service.ServiceBoatImpl; import fr.ifremer.wao.service.ServiceCartography; @@ -44,16 +46,21 @@ import fr.ifremer.wao.service.ServiceSynthesisImpl; import fr.ifremer.wao.service.ServiceUser; import fr.ifremer.wao.service.ServiceUserImpl; +import fr.ifremer.wao.ui.pages.PieChart; import org.apache.tapestry5.SymbolConstants; +import org.apache.tapestry5.ioc.Configuration; import org.apache.tapestry5.ioc.MappedConfiguration; import org.apache.tapestry5.ioc.OrderedConfiguration; import org.apache.tapestry5.ioc.ServiceBinder; import org.apache.tapestry5.ioc.annotations.EagerLoad; +import org.apache.tapestry5.ioc.services.Coercion; +import org.apache.tapestry5.ioc.services.CoercionTuple; import org.apache.tapestry5.ioc.services.RegistryShutdownHub; import org.apache.tapestry5.services.ApplicationStateContribution; import org.apache.tapestry5.services.ApplicationStateCreator; import org.apache.tapestry5.services.ApplicationStateManager; import org.apache.tapestry5.services.ComponentRequestFilter; +import org.apache.tapestry5.services.PageRenderLinkSource; import org.apache.tapestry5.services.Request; import org.apache.tapestry5.services.RequestFilter; import org.apache.tapestry5.services.RequestHandler; @@ -77,7 +84,6 @@ public static void bind(ServiceBinder binder) { binder.bind(ContactModelFactory.class); - binder.bind(ServiceChartServlet.class); } /** @@ -153,11 +159,16 @@ return instance; } - public ServiceChart buildServiceChart() { - ServiceChartImpl instance = new ServiceChartImpl(); + public ServiceChart buildServiceChart(PageRenderLinkSource pageRender) { + ServiceChartImpl instance = new ServiceChartImpl(pageRender); return instance; } + public ServiceChart buildServiceChartServlet() { + ServiceChartServlet instance = new ServiceChartServlet(); + return instance; + } + public ServiceAuthentication buildServiceAuthentication( ApplicationStateManager stateManager) { ServiceAuthentication instance = @@ -234,22 +245,6 @@ }; } -// /** -// * This is the Shutdown service definition. This service is used when the -// * server shutdown. It detects the Tapestry registry shutdown. -// * @param hub -// * @param context -// * @return -// */ -// @EagerLoad -// public RegistryShutdownListener buildWaoShutdown( -// @InjectService("RegistryShutdownHub") RegistryShutdownHub hub, -// WaoContext context) { -// RegistryShutdownListener listener = new WaoManager(context); -// hub.addRegistryShutdownListener(listener); -// return listener; -// } - /** * Used to instanciate SessionState ConnectedUser when session expires. * @@ -287,12 +282,37 @@ RequiresAuthenticationFilter.class); } + /** + * Contribute to Coercion of Tapestry for PieChartData used as page context. + * + * @param configuration Coercion configuration + * @see PieChart + */ + public static void contributeTypeCoercer( + Configuration<CoercionTuple<?, ?>> configuration) { + + Coercion<String, PieChartData> coercion1 = new Coercion<String, PieChartData>() { + @Override + public PieChartData coerce(String input) { + PieChartData data = new PieChartDataImpl(); + data.setData(input); + return data; + } + }; + Coercion<PieChartData, String> coercion2 = new Coercion<PieChartData, String>() { -// public void contributeValidationMessagesSource(OrderedConfiguration<String> configuration) { -// configuration.add("myValidationMessages", "jumpstart/web/validators/ValidationMessages"); -// configuration.add("myTranslationMessages", "jumpstart/web/translators/TranslationMessages"); -// } + @Override + public String coerce(PieChartData input) { + return input.getData(); + } + }; + // coercions for String <-> PieChartData + configuration.add(new CoercionTuple<String, PieChartData>( + String.class, PieChartData.class, coercion1)); + configuration.add(new CoercionTuple<PieChartData, String>( + PieChartData.class, String.class, coercion2)); + } } Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartImpl.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartImpl.java 2010-07-01 12:59:33 UTC (rev 586) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartImpl.java 2010-07-01 16:50:15 UTC (rev 587) @@ -1,29 +1,37 @@ package fr.ifremer.wao.ui.services; -import fr.ifremer.wao.WaoProperty; -import fr.ifremer.wao.service.ServiceChartAbstract; +import fr.ifremer.wao.bean.PieChartData; +import fr.ifremer.wao.service.ServiceChart; +import fr.ifremer.wao.ui.pages.PieChart; +import org.apache.tapestry5.Link; +import org.apache.tapestry5.services.PageRenderLinkSource; -import java.util.Collection; - /** + * Implementation of {@link ServiceChart} that create urls to charts. + * This implementation only redirect to Wao pages like for example {@link PieChart}. + * <p /> * Created: 1 juil. 2010 * * @author fdesbois <fdesbois at codelutin.com> * @version $Id$ */ -public class ServiceChartImpl extends ServiceChartAbstract { +public class ServiceChartImpl implements ServiceChart { + /** Service used to create links */ + private PageRenderLinkSource pageRender; + + public ServiceChartImpl(PageRenderLinkSource pageRender) { + this.pageRender = pageRender; + } + @Override - public String getContactPieChartUrl(boolean thumb) { - StringBuilder url = new StringBuilder("http://"). - append(WaoProperty.SERVER_PATH.getValue()). - append("/contacts/piechart"); + public String getPieChartUrl(PieChartData data, boolean thumb) { + // Create link to PieChart. This page is used to redirect + // data to the correct chartServlet + Link link = pageRender.createPageRenderLinkWithContext( + PieChart.class, data, thumb); - if (thumb) { - url.append("/mini"); - } - - return url.toString(); + return link.toAbsoluteURI(); } } Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartServlet.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartServlet.java 2010-07-01 12:59:33 UTC (rev 586) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartServlet.java 2010-07-01 16:50:15 UTC (rev 587) @@ -1,26 +1,21 @@ package fr.ifremer.wao.ui.services; import fr.ifremer.wao.WaoProperty; -import fr.ifremer.wao.bean.ContactState; -import fr.ifremer.wao.bean.ContactStateStatistics; import fr.ifremer.wao.bean.PieChartData; import fr.ifremer.wao.service.ServiceChart; -import fr.ifremer.wao.service.ServiceChartAbstract; import org.nuiton.util.StringUtil; -import java.text.NumberFormat; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - /** + * Implementation of {@link ServiceChart} using Google PieChart Api syntax to + * create urls. The property {@link WaoProperty#CHART_SERVER_PATH} defines + * the path of the application used to create a PieChart. + * <p /> * Created: 30 juin 2010 * * @author fdesbois <fdesbois at codelutin.com> * @version $Id$ */ -public class ServiceChartServlet { +public class ServiceChartServlet implements ServiceChart { private static final String PROPERTY_SEPARATOR = "&"; private static final String PROPERTY_VALUE_SEPARATOR = ","; @@ -33,11 +28,12 @@ private static final String PROPERTY_SIZE = "chs="; private static final String PROPERTY_VALUE = "chd=t:"; - private static final String PIE_CHART_MINI_TYPE = PROPERTY_TYPE + "p"; + private static final String PIE_CHART_MINI_TYPE = PROPERTY_TYPE + "p3"; private static final String PIE_CHART_MAXI_TYPE = PROPERTY_TYPE + "p3"; private static final String PIE_CHART_MINI_SIZE = PROPERTY_SIZE + "50x50"; private static final String PIE_CHART_MAXI_SIZE = PROPERTY_SIZE + "450x250"; + @Override public String getPieChartUrl(PieChartData data, boolean thumb) { String values = StringUtil.join(data.getValues(), @@ -48,10 +44,11 @@ StringBuilder url = new StringBuilder(getBaseUrl()); - if (!thumb) { + if (thumb) { url.append(PIE_CHART_MINI_TYPE). append(PROPERTY_SEPARATOR).append(PIE_CHART_MINI_SIZE); + // Labels only on big image } else { String labels = StringUtil.join(data.getLabels(), PROPERTY_LABEL_SEPARATOR, false); @@ -61,6 +58,7 @@ append(PROPERTY_SEPARATOR).append(PROPERTY_LABEL).append(labels); } + // Add values and colors url.append(PROPERTY_SEPARATOR).append(PROPERTY_VALUE).append(values). append(PROPERTY_SEPARATOR).append(PROPERTY_COLOR).append(colors); Modified: trunk/wao-ui/src/main/webapp/WEB-INF/web.xml =================================================================== --- trunk/wao-ui/src/main/webapp/WEB-INF/web.xml 2010-07-01 12:59:33 UTC (rev 586) +++ trunk/wao-ui/src/main/webapp/WEB-INF/web.xml 2010-07-01 16:50:15 UTC (rev 587) @@ -43,14 +43,6 @@ <filter-name>app</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> - <servlet> - <servlet-name>ContactPieChart</servlet-name> - <servlet-class>fr.ifremer.wao.ui.servlet.ContactPieChart</servlet-class> - </servlet> - <servlet-mapping> - <servlet-name>Main</servlet-name> - <url-pattern>/start</url-pattern> - </servlet-mapping> <!-- <session-config> <session-timeout>1</session-timeout> </session-config>-->