package org.wikipedia.miner.web.service; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.TimeZone; import javax.servlet.http.HttpServletRequest; import org.simpleframework.xml.*; import org.wikipedia.miner.db.WEnvironment.StatisticName; import org.wikipedia.miner.model.Wikipedia; import org.dmilne.xjsf.Service; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; @SuppressWarnings("serial") public class StatsService extends WMService{ DateFormat df ; public StatsService() { super("meta","Provides statistics of a specific wikipedia version", "<p>Retrieves statistics (article counts, last edit date, etc.) for a wikipedia dump.</p>", false ); TimeZone tz = TimeZone.getTimeZone("GMT:00"); df = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z") ; df.setTimeZone( tz ); } @Override public Message buildWrappedResponse(HttpServletRequest request) throws Exception { Message msg = new Message(request, getWikipediaName(request)) ; Wikipedia w = getWikipedia(request) ; for (StatisticName statName:StatisticName.values()) { long stat = w.getEnvironment().retrieveStatistic(statName) ; switch(statName) { case lastEdit: String date = df.format(new Date(stat)) ; msg.addStat(statName, date) ; break ; default: msg.addStat(statName, String.valueOf(stat)) ; break ; } } return msg; } public static class Message extends Service.Message { @SerializedName(value="for") @Attribute(name="for") private String wikiName ; @Expose @ElementMap(inline=true,attribute=true,entry="statistic",key="name") private HashMap<StatisticName,String> statistics = new HashMap<StatisticName,String>() ; private Message(HttpServletRequest request, String wikiName) { super(request) ; this.wikiName = wikiName ; } private void addStat(StatisticName name, String value) { statistics.put(name, value) ; } public String getWikiName() { return wikiName; } public Map<StatisticName, String> getStatistics() { return Collections.unmodifiableMap(statistics); } } }