package org.araqne.logdb.metadata; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import org.apache.felix.ipojo.annotations.Component; import org.apache.felix.ipojo.annotations.Invalidate; import org.apache.felix.ipojo.annotations.Requires; import org.apache.felix.ipojo.annotations.Validate; import org.araqne.logdb.FieldOrdering; import org.araqne.logdb.MetadataCallback; import org.araqne.logdb.MetadataProvider; import org.araqne.logdb.MetadataService; import org.araqne.logdb.QueryContext; import org.araqne.logdb.QueryErrorMessage; import org.araqne.logdb.QueryParserService; import org.araqne.logdb.Row; @Component(name = "logdb-code-metadata") public class CodeMetadataProvider implements MetadataProvider, FieldOrdering { @Requires private MetadataService metadataService; @Requires private QueryParserService queryParserService; @Validate public void start() { metadataService.addProvider(this); } @Invalidate public void stop() { if (metadataService != null) metadataService.removeProvider(this); } @Override public List<String> getFieldOrder() { return Arrays.asList("code", "en", "ko", "cn", "jp"); } @Override public String getType() { return "codes"; } @Override public void verify(QueryContext context, String queryString) { } @Override public void query(QueryContext context, String queryString, MetadataCallback callback) { Map<String, QueryErrorMessage> codeMap = queryParserService.getErrorMessages(); List<String> codes = new ArrayList<String>(codeMap.keySet()); Collections.sort(codes); for (String code : codes) { QueryErrorMessage msg = codeMap.get(code); Map<Locale, String> templates = msg.getTemplates(); String en = templates.get(Locale.ENGLISH); String ko = templates.get(Locale.KOREAN); String cn = templates.get(Locale.CHINESE); String jp = templates.get(Locale.JAPANESE); Map<String, Object> m = new HashMap<String, Object>(); m.put("code", code); if (en != null) m.put("en", en); if (ko != null) m.put("ko", ko); if (cn != null) m.put("cn", cn); if (jp != null) m.put("jp", jp); callback.onPush(new Row(m)); } } }