package org.archive.crawler.restlet.models; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.archive.crawler.framework.CrawlController.State; import org.archive.crawler.framework.CrawlJob; import org.archive.crawler.framework.Engine; import org.archive.util.FileUtils; @SuppressWarnings("serial") public class EngineModel extends LinkedHashMap<String, Object> { public EngineModel(Engine engine, String urlBaseRef){ super(); this.put("heritrixVersion", engine.getHeritrixVersion()); this.put("heapReport", engine.heapReportData()); this.put("jobsDir", FileUtils.tryToCanonicalize(engine.getJobsDir()).getAbsolutePath()); this.put("jobsDirUrl", urlBaseRef + "jobsdir/"); List<String> actions = new LinkedList<String>(); actions.add("rescan"); actions.add("add"); actions.add("create"); this.put("availableActions", actions); this.put("jobs", makeJobList(engine, urlBaseRef)); } private List<Map<String, Object>> makeJobList(Engine engine, String urlBaseRef) { List<Map<String, Object>> jobList; jobList = new ArrayList<Map<String,Object>>(); // Generate list of jobs ArrayList<Map.Entry<String,CrawlJob>> jobConfigurations = new ArrayList<Map.Entry<String,CrawlJob>>(engine.getJobConfigs().entrySet()); Collections.sort(jobConfigurations, new Comparator<Map.Entry<String, CrawlJob>>() { public int compare(Map.Entry<String, CrawlJob> cj1, Map.Entry<String, CrawlJob> cj2) { return cj1.getValue().compareTo(cj2.getValue()); } }); for(Map.Entry<String,CrawlJob> jobConfig : jobConfigurations) { CrawlJob job = jobConfig.getValue(); Map<String, Object> crawlJobModel = new LinkedHashMap<String, Object>(); crawlJobModel.put("shortName",job.getShortName()); crawlJobModel.put("url",urlBaseRef+"job/"+job.getShortName()); crawlJobModel.put("isProfile",job.isProfile()); crawlJobModel.put("launchCount",job.getLaunchCount()); crawlJobModel.put("lastLaunch",job.getLastLaunch()); crawlJobModel.put("hasApplicationContext",job.hasApplicationContext()); crawlJobModel.put("statusDescription", job.getJobStatusDescription()); crawlJobModel.put("isLaunchInfoPartial", job.isLaunchInfoPartial()); File primaryConfig = FileUtils.tryToCanonicalize(job.getPrimaryConfig()); crawlJobModel.put("primaryConfig", primaryConfig.getAbsolutePath()); crawlJobModel.put("primaryConfigUrl", urlBaseRef + "jobdir/" + primaryConfig.getName()); if (job.getCrawlController() != null) { crawlJobModel.put("crawlControllerState", job.getCrawlController().getState()); if (job.getCrawlController().getState() == State.FINISHED) { crawlJobModel.put("crawlExitStatus", job.getCrawlController().getCrawlExitStatus()); } } crawlJobModel.put("key", jobConfig.getKey()); jobList.add(crawlJobModel); } return jobList; } }