r1186 - in trunk: coser-business/src/main/java/fr/ifremer/coser/bean coser-web/src/main/java/fr/ifremer/coser/web
Author: tchemit Date: 2014-06-06 13:18:54 +0200 (Fri, 06 Jun 2014) New Revision: 1186 Url: http://forge.codelutin.com/projects/coser/repository/revisions/1186 Log: improve zone map Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/bean/ZoneMap.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/CoserApplicationListener.java Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/bean/ZoneMap.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/bean/ZoneMap.java 2014-06-06 08:04:45 UTC (rev 1185) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/ZoneMap.java 2014-06-06 11:18:54 UTC (rev 1186) @@ -22,17 +22,21 @@ * #L% */ +import com.google.common.base.Predicate; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import fr.ifremer.coser.storage.DataStorage; +import fr.ifremer.coser.storage.DataStorageWalker; import fr.ifremer.coser.storage.DataStorages; import fr.ifremer.coser.storage.MemoryDataStorage; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import java.io.File; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; @@ -46,8 +50,11 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class ZoneMap implements Serializable{ +public class ZoneMap implements Serializable { + /** Logger. */ + private static final Log log = LogFactory.getLog(ZoneMap.class); + private static final long serialVersionUID = 1L; protected final DataStorage storage; @@ -112,19 +119,22 @@ public Map<String, String> getZoneMetaInfo(Locale locale) { Map<String, String> result = new HashMap<String, String>(); - Iterator<String[]> itZone = storage.iterator(true); - while (itZone.hasNext()) { - // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map" - String[] tuple = itZone.next(); - if (locale != null && "fr".equals(locale.getLanguage())) { - result.put(tuple[0], tuple[6]); - } else if (locale != null && "es".equals(locale.getLanguage())) { - result.put(tuple[0], tuple[8]); - } else { - result.put(tuple[0], tuple[7]); - } - } + GetZoneMetaInfoWalker walker = new GetZoneMetaInfoWalker(locale, result); + DataStorages.walk(storage, walker); +// Iterator<String[]> itZone = storage.iterator(true); +// while (itZone.hasNext()) { +// // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map" +// String[] tuple = itZone.next(); +// if (locale != null && "fr".equals(locale.getLanguage())) { +// result.put(tuple[0], tuple[6]); +// } else if (locale != null && "es".equals(locale.getLanguage())) { +// result.put(tuple[0], tuple[8]); +// } else { +// result.put(tuple[0], tuple[7]); +// } +// } + return result; } @@ -134,15 +144,19 @@ * @return zone images map */ public Map<String, String> getZonePictures() { + Map<String, String> result = new HashMap<String, String>(); - Iterator<String[]> itZone = storage.iterator(true); - while (itZone.hasNext()) { - // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map" - String[] tuple = itZone.next(); - result.put(tuple[0], tuple[9]); - } + GetZonePictureWalker walker = new GetZonePictureWalker(result); + DataStorages.walk(storage, walker); +// Iterator<String[]> itZone = storage.iterator(true); +// while (itZone.hasNext()) { +// // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map" +// String[] tuple = itZone.next(); +// result.put(tuple[0], tuple[9]); +// } + return result; } @@ -152,22 +166,25 @@ * @return couple facadeid/list<zoneid> */ public Map<String, List<String>> getZoneByFacade() { + Map<String, List<String>> zonesByFacade = new HashMap<String, List<String>>(); + GetZoneByFacadeWalker walker = new GetZoneByFacadeWalker(zonesByFacade); + DataStorages.walk(storage, walker); - // get subzone for main zone - Iterator<String[]> itZone = storage.iterator(true); - while (itZone.hasNext()) { - // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map" - String[] tuple = itZone.next(); - String facadeid = tuple[1]; - String zoneid = tuple[0]; - List<String> zones = zonesByFacade.get(facadeid); - if (zones == null) { - zones = new ArrayList<String>(); - zonesByFacade.put(facadeid, zones); - } - zones.add(zoneid); - } +// // get subzone for main zone +// Iterator<String[]> itZone = storage.iterator(true); +// while (itZone.hasNext()) { +// // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map" +// String[] tuple = itZone.next(); +// String facadeid = tuple[1]; +// String zoneid = tuple[0]; +// List<String> zones = zonesByFacade.get(facadeid); +// if (zones == null) { +// zones = new ArrayList<String>(); +// zonesByFacade.put(facadeid, zones); +// } +// zones.add(zoneid); +// } return zonesByFacade; } @@ -179,13 +196,17 @@ */ public Map<String, String> getFacades() { Map<String, String> facades = new LinkedHashMap<String, String>(); - // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map" - Iterator<String[]> itZone = storage.iterator(true); - while (itZone.hasNext()) { - String[] tuple = itZone.next(); - // on a pas d'id pour les facades - facades.put(tuple[1], tuple[2]); - } + + GetFacadesWalker walker = new GetFacadesWalker(facades); + DataStorages.walk(storage, walker); + +// // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map" +// Iterator<String[]> itZone = storage.iterator(true); +// while (itZone.hasNext()) { +// String[] tuple = itZone.next(); +// // on a pas d'id pour les facades +// facades.put(tuple[1], tuple[2]); +// } return facades; } @@ -196,16 +217,22 @@ * * @return zones for the given facade (or all zones if no facade is given) */ - public List<String> getZonesForFacade(String facade) { + public List<String> getZonesForFacade(final String facade) { + List<String> facades = Lists.newArrayList(); - // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map" - Iterator<String[]> itZone = storage.iterator(true); - while (itZone.hasNext()) { - String[] tuple = itZone.next(); - if (facade == null || tuple[1].equals(facade)) { - facades.add(tuple[0]); - } - } + + GetZonesForFacadeWalker walker = new GetZonesForFacadeWalker(facade, facades); + FacadeNameOrAllPredicate predicate = new FacadeNameOrAllPredicate(facade); + DataStorages.walk(storage, predicate, walker); + +// // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map" +// Iterator<String[]> itZone = storage.iterator(true); +// while (itZone.hasNext()) { +// String[] tuple = itZone.next(); +// if (facade == null || tuple[1].equals(facade)) { +// facades.add(tuple[0]); +// } +// } return facades; } @@ -226,4 +253,140 @@ return result; } + + protected static class GetZonePictureWalker implements DataStorageWalker { + + protected final Map<String, String> result; + + public GetZonePictureWalker(Map<String, String> result) { + this.result = result; + } + + @Override + public void onRow(String... tuple) { + + // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map" + String pictureName = tuple[9]; + String zoneId = tuple[0]; + result.put(zoneId, pictureName); + + if (StringUtils.isBlank(pictureName)) { + if (log.isWarnEnabled()) { + log.warn(String.format("No picture defined for zone: %s", zoneId)); + } + } + + if (log.isDebugEnabled()) { + log.debug(String.format("zone: %s -- picture: %s", zoneId, pictureName)); + } + + } + } + + protected static class GetZonesForFacadeWalker implements DataStorageWalker { + + protected final String facade; + + protected final List<String> facades; + + public GetZonesForFacadeWalker(String facade, List<String> facades) { + this.facade = facade; + this.facades = facades; + } + + @Override + public void onRow(String... tuple) { + + // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map" + facades.add(tuple[0]); + + } + } + + protected static class GetFacadesWalker implements DataStorageWalker { + + protected final Map<String, String> facades; + + public GetFacadesWalker(Map<String, String> facades) { + this.facades = facades; + } + + @Override + public void onRow(String... tuple) { + + // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map" + // on a pas d'id pour les facades + facades.put(tuple[1], tuple[2]); + + } + } + + protected static class GetZoneMetaInfoWalker implements DataStorageWalker { + + protected final Map<String, String> result; + + protected final int localeIndex; + + public GetZoneMetaInfoWalker(Locale locale, Map<String, String> result) { + + this.result = result; + + if (locale != null && "fr".equals(locale.getLanguage())) { + localeIndex = 6; + } else if (locale != null && "es".equals(locale.getLanguage())) { + localeIndex = 8; + } else { + localeIndex = 7; + } + + } + + @Override + public void onRow(String... tuple) { + + // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map" + result.put(tuple[0], tuple[localeIndex]); + + } + } + + protected static class GetZoneByFacadeWalker implements DataStorageWalker { + + protected final Map<String, List<String>> zonesByFacade; + + public GetZoneByFacadeWalker(Map<String, List<String>> zonesByFacade) { + this.zonesByFacade = zonesByFacade; + } + + + @Override + public void onRow(String... tuple) { + + // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map" + String facadeid = tuple[1]; + String zoneid = tuple[0]; + List<String> zones = zonesByFacade.get(facadeid); + if (zones == null) { + zones = new ArrayList<String>(); + zonesByFacade.put(facadeid, zones); + } + zones.add(zoneid); + + } + } + + protected static class FacadeNameOrAllPredicate implements Predicate<String[]> { + + private final String facade; + + public FacadeNameOrAllPredicate(String facade) { + this.facade = facade; + } + + @Override + public boolean apply(String[] input) { + return facade == null || input[1].equals(facade); + } + } + } Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/CoserApplicationListener.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/CoserApplicationListener.java 2014-06-06 08:04:45 UTC (rev 1185) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/CoserApplicationListener.java 2014-06-06 11:18:54 UTC (rev 1186) @@ -21,12 +21,15 @@ * #L% */ +import fr.ifremer.coser.bean.ZoneMap; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import java.util.Date; +import java.util.Map; /** * To listen start and end of the application. @@ -51,6 +54,10 @@ log.info("Application starting at " + new Date() + "..."); } CoserWebApplicationContext.init(); + + CoserWebApplicationContext coserWebApplicationContext = CoserWebApplicationContext.get(); + + checkConfiguration(coserWebApplicationContext); } @Override @@ -60,4 +67,23 @@ } CoserWebApplicationContext.close(); } + + protected void checkConfiguration(CoserWebApplicationContext coserWebApplicationContext) { + + + // check that zone pictures are sane + ZoneMap zoneMap = coserWebApplicationContext.getZoneMap(); + + Map<String, String> zonePictures = zoneMap.getZonePictures(); + for (Map.Entry<String, String> entry : zonePictures.entrySet()) { + + if (StringUtils.isBlank(entry.getValue())) { + + if (log.isErrorEnabled()) { + log.error(String.format("Zone with no picture: %s", entry.getKey())); + } + } + } + + } }
participants (1)
-
tchemit@users.forge.codelutin.com