From 094f968d1dd2377836fa19b88bf83c70f8de5b8b Mon Sep 17 00:00:00 2001 From: Nate Jensen Date: Thu, 25 Apr 2013 14:39:35 -0500 Subject: [PATCH] Issue #1926 faster first time startup Change-Id: Iddd1667d262204932b4f76b8e6c44e09cfc53ccc Former-commit-id: e0765511904bc44dfcbcc800c7a8bd6aff9be98d [formerly 84e0f09de38a27eed2c53c31951a83aa98fab6b2] [formerly 31b05de2d18b091712fa395ab5646a084a1bdc2b] [formerly 51ebd8007a65dc3994fa5d1a1fd2e215e9225b38 [formerly 31b05de2d18b091712fa395ab5646a084a1bdc2b [formerly a184bc9a967754e2e12be73da7a1e16c02490432]]] Former-commit-id: 51ebd8007a65dc3994fa5d1a1fd2e215e9225b38 Former-commit-id: 31ffccc17c9fd1fd6031925bb198c74fca29986d [formerly d059b1d524e5a9dfcaf9d29706bd11371eff9633] Former-commit-id: 450dd42ddae506572b1246ce5278cf39a32dbafc --- .../uf/viz/monitor/scan/ScanStarterJob.java | 3 ++ .../monitor/scan/config/AbsConfigMgr.java | 30 ++++++++++++------- .../monitor/scan/config/SCANConfig.java | 17 +++++++---- 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/ScanStarterJob.java b/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/ScanStarterJob.java index 9201d1f1f7..196c8d9f1b 100644 --- a/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/ScanStarterJob.java +++ b/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/ScanStarterJob.java @@ -26,6 +26,7 @@ import org.eclipse.core.runtime.jobs.Job; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; +import com.raytheon.uf.common.monitor.scan.config.SCANConfig; import com.raytheon.uf.common.monitor.scan.config.SCANConfigEnums.ScanTables; import com.raytheon.uf.viz.core.VizApp; @@ -76,6 +77,8 @@ public class ScanStarterJob extends Job { scan.setup(icao); } + SCANConfig.getInstance(); + VizApp.runAsync(new Runnable() { @Override diff --git a/edexOsgi/com.raytheon.uf.common.monitor/src/com/raytheon/uf/common/monitor/scan/config/AbsConfigMgr.java b/edexOsgi/com.raytheon.uf.common.monitor/src/com/raytheon/uf/common/monitor/scan/config/AbsConfigMgr.java index d6248b5eba..dca0972fde 100644 --- a/edexOsgi/com.raytheon.uf.common.monitor/src/com/raytheon/uf/common/monitor/scan/config/AbsConfigMgr.java +++ b/edexOsgi/com.raytheon.uf.common.monitor/src/com/raytheon/uf/common/monitor/scan/config/AbsConfigMgr.java @@ -23,8 +23,12 @@ import java.awt.Point; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; +import java.util.Map; import com.raytheon.uf.common.localization.IPathManager; +import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel; +import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType; +import com.raytheon.uf.common.localization.LocalizationFile; import com.raytheon.uf.common.localization.PathManagerFactory; import com.raytheon.uf.common.monitor.data.CommonTableConfig.SortDirection; import com.raytheon.uf.common.monitor.scan.config.SCANConfigEnums.ScanThresholdColor; @@ -42,6 +46,7 @@ import com.raytheon.uf.common.serialization.SerializationUtil; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Oct 21, 2009 3039 lvenable Initial creation + * Apr 25, 2013 1926 njensen Improved initialization speed * * * @@ -52,12 +57,12 @@ public abstract class AbsConfigMgr { /** * Map of attribute names and SCANAttributesXML. */ - HashMap attrMap; + protected Map attrMap; /** * Map of attribute names and column index. */ - HashMap indexMap; + protected Map indexMap; /** * Default XML name. @@ -76,7 +81,6 @@ public abstract class AbsConfigMgr { indexMap = new HashMap(); init(); - createAttributeMap(getAttributes()); } /** @@ -109,12 +113,16 @@ public abstract class AbsConfigMgr { SCANAbstractXML cfgXML = null; IPathManager pm = PathManagerFactory.getPathManager(); - String path = pm.getStaticFile(getFullDefaultConfigName()) - .getAbsolutePath(); - - cfgXML = (SCANAbstractXML) SerializationUtil - .jaxbUnmarshalFromXmlFile(path.toString()); - + LocalizationFile lfile = pm.getLocalizationFile(pm.getContext( + LocalizationType.CAVE_STATIC, LocalizationLevel.SITE), + getFullDefaultConfigName()); + if (lfile == null || !lfile.exists()) { + lfile = pm.getLocalizationFile(pm.getContext( + LocalizationType.CAVE_STATIC, LocalizationLevel.BASE), + getFullDefaultConfigName()); + } + cfgXML = SerializationUtil.jaxbUnmarshalFromXmlFile( + SCANAbstractXML.class, lfile.getFile()); return cfgXML; } catch (Exception e) { e.printStackTrace(); @@ -142,8 +150,8 @@ public abstract class AbsConfigMgr { IPathManager pm = PathManagerFactory.getPathManager(); String path = pm.getStaticFile(newConfigFile).getAbsolutePath(); - cfgXML = (SCANAbstractXML) SerializationUtil - .jaxbUnmarshalFromXmlFile(path.toString()); + cfgXML = SerializationUtil.jaxbUnmarshalFromXmlFile( + SCANAbstractXML.class, path.toString()); return cfgXML; } catch (Exception e) { diff --git a/edexOsgi/com.raytheon.uf.common.monitor/src/com/raytheon/uf/common/monitor/scan/config/SCANConfig.java b/edexOsgi/com.raytheon.uf.common.monitor/src/com/raytheon/uf/common/monitor/scan/config/SCANConfig.java index 8d223950f3..d149a7dc8a 100644 --- a/edexOsgi/com.raytheon.uf.common.monitor/src/com/raytheon/uf/common/monitor/scan/config/SCANConfig.java +++ b/edexOsgi/com.raytheon.uf.common.monitor/src/com/raytheon/uf/common/monitor/scan/config/SCANConfig.java @@ -50,6 +50,7 @@ import com.raytheon.uf.common.monitor.scan.xml.SCANAttributesXML; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Oct 25, 2009 3039 lvenable Initial creation + * Apr 25, 2013 1926 njensen synchronized instance creation * * * @@ -60,7 +61,7 @@ public class SCANConfig { /** * Class instance */ - private static SCANConfig classInstance; + private static volatile SCANConfig classInstance; /** * Unwarned configuration data class. @@ -242,11 +243,18 @@ public class SCANConfig { * @return Class instance. */ public static SCANConfig getInstance() { - if (classInstance == null) { - classInstance = new SCANConfig(); + SCANConfig retVal = classInstance; + if (retVal == null) { + synchronized (SCANConfig.class) { + retVal = classInstance; + if (retVal == null) { + classInstance = new SCANConfig(); + retVal = classInstance; + } + } } - return classInstance; + return retVal; } /** @@ -261,7 +269,6 @@ public class SCANConfig { cellTrendConfigMgr = new TrendSetConfigMgr("CellTrendSets.xml"); dmdTrendConfigMgr = new TrendSetConfigMgr("DmdTrendSets.xml"); - ; setupTableIntFormatMap(); setupTrendIntFormatMaps();