Author: fdesbois Date: 2010-07-01 12:59:33 +0000 (Thu, 01 Jul 2010) New Revision: 586 Log: Evo #2352 : Cartography for contacts : - Implement ServiceChart using GoogleChart Api Added: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/PieChartDataImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceChartAbstract.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartServlet.java Modified: trunk/wao-business/src/main/filters/Wao.properties trunk/wao-business/src/main/java/fr/ifremer/wao/WaoProperty.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/xmi/wao.zargo 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/webapp/WEB-INF/web.xml Modified: trunk/wao-business/src/main/filters/Wao.properties =================================================================== --- trunk/wao-business/src/main/filters/Wao.properties 2010-07-01 12:53:05 UTC (rev 585) +++ trunk/wao-business/src/main/filters/Wao.properties 2010-07-01 12:59:33 UTC (rev 586) @@ -47,5 +47,8 @@ ## Server path for link in mails (must be override) wao.server.path=localhost:8080/wao +## Server path for chart generation +chart.server.path= + ## Version (not necessary to override it) wao.version=${project.version} Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoProperty.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoProperty.java 2010-07-01 12:53:05 UTC (rev 585) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoProperty.java 2010-07-01 12:59:33 UTC (rev 586) @@ -33,22 +33,24 @@ * @author fdesbois <fdesbois at codelutin.com> */ public enum WaoProperty { - /** Path for log on activityCalendar import **/ + /** Path for log on activityCalendar import */ FILENAME_LOG_ACTIVITY_IMPORT("wao.log.activityCalendar.import"), - /** Path for log on activityCalendar access **/ + /** Path for log on activityCalendar access */ FILENAME_LOG_ACTIVITY_ACCESS("wao.log.activityCalendar.access"), - /** Host for email **/ + /** Host for email */ EMAIL_HOST("wao.email.host"), - /** Port for email **/ + /** Port for email */ EMAIL_PORT("wao.email.port"), - /** From for email **/ + /** From for email */ EMAIL_FROM("wao.email.from"), - /** Contact email (same as from) **/ + /** Contact email (same as from) */ EMAIL_CONTACT(EMAIL_FROM.getKey()), - /** App version **/ + /** App version */ APP_VERSION("wao.version"), - /** Server path **/ - SERVER_PATH("wao.server.path"); + /** Server path */ + SERVER_PATH("wao.server.path"), + /** Path for Eastwood */ + CHART_SERVER_PATH("chart.server.path"); private String key; Added: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/PieChartDataImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/PieChartDataImpl.java (rev 0) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/PieChartDataImpl.java 2010-07-01 12:59:33 UTC (rev 586) @@ -0,0 +1,27 @@ +package fr.ifremer.wao.bean; + +import java.util.ArrayList; + +/** + * Created: 1 juil. 2010 + * + * @author fdesbois <fdesbois at codelutin.com> + * @version $Id$ + */ +public class PieChartDataImpl extends PieChartData { + + public PieChartDataImpl() { + labels = new ArrayList<String>(); + values = new ArrayList<Double>(); + colors = new ArrayList<String>(); + } + + + @Override + public void addData(String label, Double value, String color) { + labels.add(label); + values.add(value); + colors.add(color); + } + +} 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:53:05 UTC (rev 585) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceCartographyImpl.java 2010-07-01 12:59:33 UTC (rev 586) @@ -3,6 +3,7 @@ import fr.ifremer.wao.WaoContext; import fr.ifremer.wao.WaoDAOHelper; import fr.ifremer.wao.WaoException; +import fr.ifremer.wao.bean.ContactState; import fr.ifremer.wao.bean.ContactStateStatistics; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.io.BoatDistrictData; @@ -20,6 +21,8 @@ import java.io.IOException; import java.io.InputStream; import java.util.Collection; +import java.util.HashMap; +import java.util.Map; /** * Created: 29 juin 2010 @@ -130,7 +133,8 @@ Collection<ContactStateStatistics> data = serviceSynthesis.getContactStateStatistics(company, null); - String chartUrl = serviceChart.getContactStatePieChartUrl(data); + String miniChartUrl = serviceChart.getContactPieChartUrl(true); + String bigChartUrl = serviceChart.getContactPieChartUrl(false); return null; } Added: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceChartAbstract.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceChartAbstract.java (rev 0) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceChartAbstract.java 2010-07-01 12:59:33 UTC (rev 586) @@ -0,0 +1,55 @@ +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:53:05 UTC (rev 585) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceChartEmpty.java 2010-07-01 12:59:33 UTC (rev 586) @@ -10,10 +10,10 @@ * @author fdesbois <fdesbois at codelutin.com> * @version $Id$ */ -public class ServiceChartEmpty implements ServiceChart { +public class ServiceChartEmpty extends ServiceChartAbstract { @Override - public String getContactStatePieChartUrl(Collection<ContactStateStatistics> data) { + public String getContactPieChartUrl(boolean thumb) { return ""; } } Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) 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:53:05 UTC (rev 585) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/AppModule.java 2010-07-01 12:59:33 UTC (rev 586) @@ -77,6 +77,7 @@ public static void bind(ServiceBinder binder) { binder.bind(ContactModelFactory.class); + binder.bind(ServiceChartServlet.class); } /** 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:53:05 UTC (rev 585) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartImpl.java 2010-07-01 12:59:33 UTC (rev 586) @@ -1,22 +1,29 @@ package fr.ifremer.wao.ui.services; -import fr.ifremer.wao.bean.ContactStateStatistics; -import fr.ifremer.wao.service.ServiceChart; +import fr.ifremer.wao.WaoProperty; +import fr.ifremer.wao.service.ServiceChartAbstract; import java.util.Collection; /** - * Created: 30 juin 2010 + * Created: 1 juil. 2010 * * @author fdesbois <fdesbois at codelutin.com> * @version $Id$ */ -public class ServiceChartImpl implements ServiceChart { +public class ServiceChartImpl extends ServiceChartAbstract { @Override - public String getContactStatePieChartUrl(Collection<ContactStateStatistics> data) { - // Create Url compatible for Google Chart API and Eastwood (JFreeChart) - return null; + public String getContactPieChartUrl(boolean thumb) { + StringBuilder url = new StringBuilder("http://"). + append(WaoProperty.SERVER_PATH.getValue()). + append("/contacts/piechart"); + + if (thumb) { + url.append("/mini"); + } + + return url.toString(); } } Added: 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 (rev 0) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceChartServlet.java 2010-07-01 12:59:33 UTC (rev 586) @@ -0,0 +1,76 @@ +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; + +/** + * Created: 30 juin 2010 + * + * @author fdesbois <fdesbois at codelutin.com> + * @version $Id$ + */ +public class ServiceChartServlet { + + private static final String PROPERTY_SEPARATOR = "&"; + private static final String PROPERTY_VALUE_SEPARATOR = ","; + private static final String PROPERTY_LABEL_SEPARATOR = "|"; + private static final String PROPERTY_COLOR_SEPARATOR = ","; + + private static final String PROPERTY_TYPE = "cht="; + private static final String PROPERTY_LABEL = "chl="; + private static final String PROPERTY_COLOR = "chco="; + 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_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"; + + public String getPieChartUrl(PieChartData data, boolean thumb) { + + String values = StringUtil.join(data.getValues(), + PROPERTY_VALUE_SEPARATOR, false); + + String colors = StringUtil.join(data.getColors(), + PROPERTY_COLOR_SEPARATOR, false); + + StringBuilder url = new StringBuilder(getBaseUrl()); + + if (!thumb) { + url.append(PIE_CHART_MINI_TYPE). + append(PROPERTY_SEPARATOR).append(PIE_CHART_MINI_SIZE); + + } else { + String labels = StringUtil.join(data.getLabels(), + PROPERTY_LABEL_SEPARATOR, false); + + url.append(PIE_CHART_MAXI_TYPE). + append(PROPERTY_SEPARATOR).append(PIE_CHART_MAXI_SIZE). + append(PROPERTY_SEPARATOR).append(PROPERTY_LABEL).append(labels); + } + + url.append(PROPERTY_SEPARATOR).append(PROPERTY_VALUE).append(values). + append(PROPERTY_SEPARATOR).append(PROPERTY_COLOR).append(colors); + + return url.toString(); + } + + protected String getBaseUrl() { + String baseUrl = "http://" + WaoProperty.CHART_SERVER_PATH.getValue() + + "/chart?"; + return baseUrl; + } + +} 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:53:05 UTC (rev 585) +++ trunk/wao-ui/src/main/webapp/WEB-INF/web.xml 2010-07-01 12:59:33 UTC (rev 586) @@ -43,6 +43,14 @@ <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>-->