package org.epics.archiverappliance.mgmt.bpl.reports; import java.io.IOException; import java.io.PrintWriter; import java.sql.Timestamp; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.LinkedList; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.epics.archiverappliance.common.BPLAction; import org.epics.archiverappliance.common.TimeUtils; import org.epics.archiverappliance.config.ConfigService; import org.epics.archiverappliance.config.PVTypeInfo; import org.json.simple.JSONArray; import org.json.simple.JSONAware; import org.json.simple.JSONValue; public class RecentlyChangedPVsforThisInstance implements BPLAction { private static Logger logger = Logger.getLogger(RecentlyChangedPVsforThisInstance.class.getName()); @Override public void execute(HttpServletRequest req, HttpServletResponse resp, ConfigService configService) throws IOException { String limitStr = req.getParameter("limit"); int limit = 100; logger.info("Recently changed PVs report for this instance for " + (limitStr == null ? ("default limit(" + limit + ")") : ("limit " + limitStr))); if(limitStr != null) { limit = Integer.parseInt(limitStr); } final String identity = configService.getMyApplianceInfo().getIdentity(); final class RecentlyChangedPVInfo implements JSONAware { String pvName; Timestamp modificationTimeStamp; RecentlyChangedPVInfo(String pvName, Timestamp creationTimeStamp) { this.pvName = pvName; this.modificationTimeStamp = creationTimeStamp; } @Override public String toJSONString() { HashMap<String, String> jsonObj = new HashMap<String, String>(); jsonObj.put("pvName", pvName); jsonObj.put("instance", identity); jsonObj.put("modificationTime", TimeUtils.convertToHumanReadableString(this.modificationTimeStamp)); return JSONValue.toJSONString(jsonObj); } } LinkedList<RecentlyChangedPVInfo> myPVs = new LinkedList<RecentlyChangedPVInfo>(); for(String pv : configService.getPVsForThisAppliance()) { PVTypeInfo typeInfo = configService.getTypeInfoForPV(pv); if(typeInfo != null && !typeInfo.getCreationTime().equals(typeInfo.getModificationTime())) { myPVs.add(new RecentlyChangedPVInfo(pv, typeInfo.getModificationTime())); } } Collections.sort(myPVs, new Comparator<RecentlyChangedPVInfo>() { @Override public int compare(RecentlyChangedPVInfo o1, RecentlyChangedPVInfo o2) { return o1.modificationTimeStamp.compareTo(o2.modificationTimeStamp); } }); try(PrintWriter out = resp.getWriter()){ out.println(JSONArray.toJSONString(myPVs.subList(0, Math.min(limit, myPVs.size())))); } } }