Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/themes/ThemeFactory.java @ 9555:ef5754ba5573
Implemented legend aggregation based on type of themes.
Added theme-editor style configuration for aggregated legend entries.
Only configured themes get aggregated.
author | gernotbelger |
---|---|
date | Tue, 23 Oct 2018 16:26:48 +0200 |
parents | f0ea2063b58e |
children |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/themes/ThemeFactory.java Mon Oct 22 18:26:05 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/themes/ThemeFactory.java Tue Oct 23 16:26:48 2018 +0200 @@ -8,10 +8,6 @@ package org.dive4elements.river.themes; -import org.dive4elements.artifacts.common.utils.XMLUtils; -import org.dive4elements.river.artifacts.D4EArtifact; -import org.dive4elements.river.artifacts.context.RiverContext; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -20,6 +16,9 @@ import javax.xml.xpath.XPathConstants; import org.apache.log4j.Logger; +import org.dive4elements.artifacts.common.utils.XMLUtils; +import org.dive4elements.river.artifacts.D4EArtifact; +import org.dive4elements.river.artifacts.context.RiverContext; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; @@ -29,7 +28,7 @@ /** * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> * - * Mapping-matching rules: + * Mapping-matching rules: * */ public class ThemeFactory { @@ -40,23 +39,24 @@ private ThemeFactory() { } - /** * Creates a new theme from <i>config</i>. * - * @param themeCfg The theme config document that is used to fetch parent - * themes. - * @param config The theme config node. + * @param themeCfg + * The theme config document that is used to fetch parent + * themes. + * @param config + * The theme config node. * * @return a new theme. */ - public static Theme createTheme(Document themeCfg, Node config) { - String name = getName(config); - String desc = getDescription(config); + public static Theme createTheme(final Document themeCfg, final Node config) { + final String name = getName(config); + final String desc = getDescription(config); log.trace("Create new theme: " + name); - Theme theme = new DefaultTheme(name, desc); + final DefaultTheme theme = new DefaultTheme(name, desc); parseInherits(themeCfg, config, theme); parseFields(config, theme); @@ -65,26 +65,21 @@ return theme; } - /** * Get first matching theme for facet. * - * @param name Name to match "from" of theme mapping. - * @param pattern String to 'compare' to pattern in mapping. - * @param output Name of the current output + * @param name + * Name to match "from" of theme mapping. + * @param pattern + * String to 'compare' to pattern in mapping. + * @param output + * Name of the current output * * @return First matching theme. */ - public static Theme getTheme( - RiverContext c, - String name, - String pattern, - String output, - String groupName) - { + public static Theme getTheme(final RiverContext c, final String name, final String pattern, final String output, final String groupName) { if (log.isDebugEnabled()) { - log.debug( - "Search theme for: " + name + " - pattern: " + pattern); + log.debug("Search theme for: " + name + " - pattern: " + pattern); } if (c == null || name == null) { @@ -94,15 +89,15 @@ // Fetch mapping and themes. @SuppressWarnings("unchecked") - Map<String, List<ThemeMapping>> map = (Map<String, List<ThemeMapping>>) - c.get(RiverContext.THEME_MAPPING); + final + Map<String, List<ThemeMapping>> map = (Map<String, List<ThemeMapping>>) c.get(RiverContext.THEME_MAPPING); @SuppressWarnings("unchecked") - List<ThemeGroup> tgs = (List<ThemeGroup>) - c.get(RiverContext.THEMES); + final + List<ThemeGroup> tgs = (List<ThemeGroup>) c.get(RiverContext.THEMES); ThemeGroup group = null; - for (ThemeGroup tg: tgs) { + for (final ThemeGroup tg : tgs) { if (tg.getName().equals(groupName)) { group = tg; break; @@ -114,16 +109,16 @@ return null; } - Map<String, Theme> t = group.getThemes(); + final Map<String, Theme> t = group.getThemes(); - D4EArtifact artifact = (D4EArtifact) c.get(RiverContext.ARTIFACT_KEY); + final D4EArtifact artifact = (D4EArtifact) c.get(RiverContext.ARTIFACT_KEY); if (map == null || map.isEmpty() || t == null || t.isEmpty()) { log.warn("No mappings or themes found. Cannot retrieve theme!"); return null; } - List<ThemeMapping> mapping = map.get(name); + final List<ThemeMapping> mapping = map.get(name); if (mapping == null) { log.warn("No theme found for mapping: " + name); @@ -131,77 +126,60 @@ } // Take first mapping of which all conditions are satisfied. - for (ThemeMapping tm: mapping) { - if (name.equals(tm.getFrom()) - && tm.applyPattern(pattern) - && tm.masterAttrMatches(artifact) - && tm.outputMatches(output)) - { - String target = tm.getTo(); + for (final ThemeMapping tm : mapping) { + if (name.equals(tm.getFrom()) && tm.applyPattern(pattern) && tm.masterAttrMatches(artifact) && tm.outputMatches(output)) { + final String target = tm.getTo(); log.debug("Found theme '" + target + "'"); return t.get(target); } } - String msg = - "No theme found for '" + name + - "' with pattern '" + pattern + "' and output " + output + "."; + final String msg = "No theme found for '" + name + "' with pattern '" + pattern + "' and output " + output + "."; log.warn(msg); return null; } - @SuppressWarnings("unchecked") - public static List<ThemeGroup> getThemeGroups(RiverContext c) { - List<ThemeGroup> tgs = (List<ThemeGroup>) - c.get(RiverContext.THEMES); + public static List<ThemeGroup> getThemeGroups(final RiverContext c) { + final List<ThemeGroup> tgs = (List<ThemeGroup>) c.get(RiverContext.THEMES); return tgs; } - @SuppressWarnings("unchecked") - public static List<Theme> getThemes (RiverContext c, String name) { - List<ThemeGroup> tgs = (List<ThemeGroup>) - c.get(RiverContext.THEMES); + public static List<Theme> getThemes(final RiverContext c, final String name) { + final List<ThemeGroup> tgs = (List<ThemeGroup>) c.get(RiverContext.THEMES); if (tgs == null) { return null; } - List<Theme> themes = new ArrayList<Theme>(); - for (ThemeGroup tg: tgs) { + final List<Theme> themes = new ArrayList<>(); + for (final ThemeGroup tg : tgs) { themes.add(tg.getThemeByName(name)); } return themes; } - protected static String getName(Node config) { - return ((Element)config).getAttribute("name"); + private static String getName(final Node config) { + return ((Element) config).getAttribute("name"); } - - protected static String getDescription(Node config) { - return ((Element)config).getAttribute("desc"); + private static String getDescription(final Node config) { + return ((Element) config).getAttribute("desc"); } - - protected static void parseInherits(Document themeCfg, Node cfg, Theme t) { + private static void parseInherits(final Document themeCfg, final Node cfg, final DefaultTheme t) { parseInherits(themeCfg, cfg, t, null); } - protected static void parseInherits( - Document themeCfg, - Node cfg, - Theme t, - Map<String, Node> themes - ) { + private static void parseInherits(final Document themeCfg, final Node cfg, final DefaultTheme t, Map<String, Node> themes) { log.trace("ThemeFactory.parseInherits"); - NodeList inherits = ((Element)cfg).getElementsByTagName("inherit"); + final NodeList inherits = ((Element) cfg).getElementsByTagName("inherit"); - int num = inherits.getLength(); + final int num = inherits.getLength(); if (num == 0) { log.trace("Theme does not inherit from other themes."); @@ -215,43 +193,41 @@ } for (int i = 0; i < num; i++) { - Node inherit = inherits.item(i); - String from = ((Element)inherit).getAttribute("from"); + final Node inherit = inherits.item(i); + final String from = ((Element) inherit).getAttribute("from"); - Node tmp = themes.get(from); + final Node tmp = themes.get(from); parseInherits(themeCfg, tmp, t, themes); parseFields(tmp, t); } } - protected static Map<String, Node> buildThemeMap(Document themeCfg) { - Map<String, Node> map = new HashMap<String, Node>(); - String xpath = "/themes/themegroup/theme"; + private static Map<String, Node> buildThemeMap(final Document themeCfg) { + final Map<String, Node> map = new HashMap<>(); + final String xpath = "/themes/themegroup/theme"; - NodeList nodes = (NodeList)XMLUtils.xpath( - themeCfg, xpath, XPathConstants.NODESET); + final NodeList nodes = (NodeList) XMLUtils.xpath(themeCfg, xpath, XPathConstants.NODESET); if (nodes != null) { for (int i = 0, N = nodes.getLength(); i < N; ++i) { - Node node = nodes.item(i); - String name = ((Element)node).getAttribute("name"); + final Node node = nodes.item(i); + final String name = ((Element) node).getAttribute("name"); map.put(name, node); } } return map; } - - protected static void parseFields(Node config, Theme theme) { + private static void parseFields(final Node config, final DefaultTheme theme) { if (config == null || theme == null) { log.warn("Parsing fields without node or theme is senseless!"); return; } - NodeList fields = ((Element)config).getElementsByTagName("field"); + final NodeList fields = ((Element) config).getElementsByTagName("field"); - int num = fields.getLength(); + final int num = fields.getLength(); log.trace("Found " + num + " own fields in this theme."); @@ -261,34 +237,33 @@ } for (int i = 0; i < num; i++) { - Node field = fields.item(i); + final Node field = fields.item(i); addField(theme, field); } } - - protected static void addField(Theme theme, Node field) { - String name = ((Element)field).getAttribute("name"); + private static void addField(final DefaultTheme theme, final Node field) { + final String name = ((Element) field).getAttribute("name"); log.trace("Add field " + name + " to theme " + theme.getName()); - NamedNodeMap attrs = field.getAttributes(); + final NamedNodeMap attrs = field.getAttributes(); - int num = attrs != null ? attrs.getLength() : 0; + final int num = attrs != null ? attrs.getLength() : 0; if (num == 0) { log.warn("This field has no attributes."); return; } - ThemeField theField = new DefaultThemeField(name); + final ThemeField theField = new DefaultThemeField(name); for (int i = 0; i < num; i++) { - Node attr = attrs.item(i); + final Node attr = attrs.item(i); - String key = attr.getNodeName(); - String value = attr.getNodeValue(); + final String key = attr.getNodeName(); + final String value = attr.getNodeValue(); theField.setAttribute(key, value); } @@ -296,11 +271,10 @@ theme.addField(name, theField); } + private static void parseAttrs(final Node config, final DefaultTheme theme) { + final NamedNodeMap attrs = config.getAttributes(); - protected static void parseAttrs(Node config, Theme theme) { - NamedNodeMap attrs = config.getAttributes(); - - int num = attrs != null ? attrs.getLength() : 0; + final int num = attrs != null ? attrs.getLength() : 0; if (num == 0) { log.trace("Theme has no attributes set."); @@ -308,13 +282,20 @@ } for (int i = 0; i < num; i++) { - Node attr = attrs.item(i); + final Node attr = attrs.item(i); - String name = attr.getNodeName(); - String value = attr.getNodeValue(); + final String name = attr.getNodeName(); + final String value = attr.getNodeValue(); theme.addAttribute(name, value); } } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : + + public static Theme getLegendTheme(final RiverContext flysContext, final String themeType) { + + @SuppressWarnings("unchecked") + final + Map<String, Theme> themes = (Map<String, Theme>) flysContext.get(RiverContext.LEGEND); + return themes.get(themeType); + } +} \ No newline at end of file