package com.nvarghese.beowulf.common.scan.model; import java.util.Date; import java.util.HashMap; import java.util.Map; import com.google.code.morphia.annotations.Embedded; import com.google.code.morphia.annotations.Entity; import com.google.code.morphia.annotations.PrePersist; import com.google.code.morphia.annotations.Transient; import com.nvarghese.beowulf.common.model.AbstractDocument; @Entity("scanconfigs") public class MasterScanConfigDocument extends AbstractDocument { @Embedded("http_client") private HttpClientScanConfigDocument httpClientScanConfig; @Embedded("scan_settings") private SettingScanConfigDocument settingScanConfig; @Embedded("report_settings") private ReportScanConfigDocument reportScanConfig; @Embedded("session_settings") private SessionSettingScanConfigDocument sessionScanConfig; @Embedded("test_modules") private Map<Long, TestModuleScanConfigDocument> testModules; @Transient private Map<Long, TestModuleScanConfigDocument> enabledTestModules; @Transient private boolean enabledTestModulesLoaded; public MasterScanConfigDocument() { setCreatedOn(new Date()); httpClientScanConfig = new HttpClientScanConfigDocument(); settingScanConfig = new SettingScanConfigDocument(); reportScanConfig = new ReportScanConfigDocument(); sessionScanConfig = new SessionSettingScanConfigDocument(); testModules = new HashMap<Long, TestModuleScanConfigDocument>(); enabledTestModules = new HashMap<Long, TestModuleScanConfigDocument>(); enabledTestModulesLoaded = false; } @PrePersist void prePersist() { setLastUpdated(new Date()); } // @PostPersist // void postPersistDocument() { // // loadEnabledTestModules(); // } // // @PostLoad // void postLoadDocument() { // // loadEnabledTestModules(); // // } private void loadEnabledTestModules() { for (TestModuleScanConfigDocument testModuleConfigDoc : testModules.values()) { if (testModuleConfigDoc.isEnabled()) { enabledTestModules.put(testModuleConfigDoc.getModuleNumber(), testModuleConfigDoc); } } enabledTestModulesLoaded = true; } public HttpClientScanConfigDocument getHttpClientScanConfig() { return httpClientScanConfig; } public void setHttpClientScanConfig(HttpClientScanConfigDocument httpClientScanConfig) { this.httpClientScanConfig = httpClientScanConfig; } public SettingScanConfigDocument getSettingScanConfig() { return settingScanConfig; } public void setSettingScanConfig(SettingScanConfigDocument settingScanConfig) { this.settingScanConfig = settingScanConfig; } public ReportScanConfigDocument getReportScanConfig() { return reportScanConfig; } public void setReportScanConfig(ReportScanConfigDocument reportScanConfig) { this.reportScanConfig = reportScanConfig; } public SessionSettingScanConfigDocument getSessionScanConfig() { return sessionScanConfig; } public void setSessionScanConfig(SessionSettingScanConfigDocument sessionScanConfig) { this.sessionScanConfig = sessionScanConfig; } public Map<Long, TestModuleScanConfigDocument> getTestModules() { return testModules; } public void setTestModules(Map<Long, TestModuleScanConfigDocument> testModules) { this.testModules = testModules; } public Map<Long, TestModuleScanConfigDocument> getEnabledTestModules() { if (!isEnabledTestModulesLoaded()) { loadEnabledTestModules(); } return enabledTestModules; } private boolean isEnabledTestModulesLoaded() { boolean loaded = false; if (enabledTestModulesLoaded == true && enabledTestModules.size() > 0) { // this is only a sanity check loaded = true; } else { enabledTestModulesLoaded = false; } return loaded; } }