From 415ccd78fbe3ec4678261e227c2e4a12e686688f Mon Sep 17 00:00:00 2001 From: Everett Kladstrup Date: Tue, 21 Jan 2014 13:59:05 -0600 Subject: [PATCH] Issue #2725 deriv param to common stage 1 * Removing viz dependencys from derivparam ** Move LevelUtilities to common ** Use spring instead of eclipse plugin extentions to configure derived parameter function types ** Use RequestRouter instead of ThriftClient so we can use IServerRequest objects in both CAVE and EDEX The next stage will be to clean up exceptions in derived parameters to stop using VizException and VizCommunicationException. Former-commit-id: bd50a38d87af59fa231a2185fd0bbd5fa7b0bcad [formerly 604ae156f8b235e2e1736863b419547289403240] Former-commit-id: 80ad25754b237c91ff633a9c93b1fd1d938d2b95 --- .../PointDataTimeSeriesAdapter.java | 2 +- .../build.properties | 2 +- .../plugin.xml | 32 ----- .../derived-parameters-python-spring.xml | 14 ++ .../DerivParamPythonFunctionAdapter.java | 23 ++++ .../IDerivParamFunctionAdapter.java | 17 ++- .../data/AbstractDataCubeAdapter.java | 12 +- .../viz/derivparam/inv/AbstractInventory.java | 38 ++++-- .../derivparam/inv/AvailabilityContainer.java | 12 +- .../viz/derivparam/inv/MetadataContainer.java | 11 +- .../library/DerivedParameterGenerator.java | 120 +++++++++--------- .../raytheon/viz/grid/inv/GridInventory.java | 14 +- .../datacatalog/AbstractDataCatalog.java | 7 +- .../AbstractInventoryDataCatalog.java | 7 +- .../datacatalog/GridDataCatalog.java | 11 +- .../META-INF/MANIFEST.MF | 4 +- .../level/util}/LevelUtilities.java | 45 +++---- 17 files changed, 205 insertions(+), 166 deletions(-) delete mode 100644 cave/com.raytheon.uf.viz.derivparam.python/plugin.xml create mode 100644 cave/com.raytheon.uf.viz.derivparam.python/res/spring/derived-parameters-python-spring.xml rename {cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/level => edexOsgi/com.raytheon.uf.common.dataplugin.level/src/com/raytheon/uf/common/dataplugin/level/util}/LevelUtilities.java (75%) diff --git a/cave/com.raytheon.uf.viz.d2d.xy.adapters/src/com/raytheon/uf/viz/d2d/xy/adapters/timeseries/PointDataTimeSeriesAdapter.java b/cave/com.raytheon.uf.viz.d2d.xy.adapters/src/com/raytheon/uf/viz/d2d/xy/adapters/timeseries/PointDataTimeSeriesAdapter.java index c095712702..a6a8222e56 100644 --- a/cave/com.raytheon.uf.viz.d2d.xy.adapters/src/com/raytheon/uf/viz/d2d/xy/adapters/timeseries/PointDataTimeSeriesAdapter.java +++ b/cave/com.raytheon.uf.viz.d2d.xy.adapters/src/com/raytheon/uf/viz/d2d/xy/adapters/timeseries/PointDataTimeSeriesAdapter.java @@ -39,6 +39,7 @@ import com.raytheon.uf.common.dataplugin.PluginDataObject; import com.raytheon.uf.common.dataplugin.level.Level; import com.raytheon.uf.common.dataplugin.level.mapping.LevelMapping; import com.raytheon.uf.common.dataplugin.level.mapping.LevelMappingFactory; +import com.raytheon.uf.common.dataplugin.level.util.LevelUtilities; import com.raytheon.uf.common.dataquery.requests.RequestConstraint; import com.raytheon.uf.common.dataquery.requests.RequestConstraint.ConstraintType; import com.raytheon.uf.common.geospatial.MapUtil; @@ -52,7 +53,6 @@ import com.raytheon.uf.common.time.TimeRange; import com.raytheon.uf.common.time.util.TimeUtil; import com.raytheon.uf.viz.core.datastructure.DataCubeContainer; import com.raytheon.uf.viz.core.exception.VizException; -import com.raytheon.uf.viz.core.level.LevelUtilities; import com.raytheon.uf.viz.core.rsc.DisplayType; import com.raytheon.uf.viz.objectiveanalysis.rsc.OAGridTransformer; import com.raytheon.uf.viz.xy.timeseries.adapter.AbstractTimeSeriesAdapter; diff --git a/cave/com.raytheon.uf.viz.derivparam.python/build.properties b/cave/com.raytheon.uf.viz.derivparam.python/build.properties index 15f66d39dc..2bf56c0a7b 100644 --- a/cave/com.raytheon.uf.viz.derivparam.python/build.properties +++ b/cave/com.raytheon.uf.viz.derivparam.python/build.properties @@ -3,4 +3,4 @@ output.. = bin/ bin.includes = META-INF/,\ .,\ localization/,\ - plugin.xml + res/ diff --git a/cave/com.raytheon.uf.viz.derivparam.python/plugin.xml b/cave/com.raytheon.uf.viz.derivparam.python/plugin.xml deleted file mode 100644 index 1e0c7dd789..0000000000 --- a/cave/com.raytheon.uf.viz.derivparam.python/plugin.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - diff --git a/cave/com.raytheon.uf.viz.derivparam.python/res/spring/derived-parameters-python-spring.xml b/cave/com.raytheon.uf.viz.derivparam.python/res/spring/derived-parameters-python-spring.xml new file mode 100644 index 0000000000..af077688c7 --- /dev/null +++ b/cave/com.raytheon.uf.viz.derivparam.python/res/spring/derived-parameters-python-spring.xml @@ -0,0 +1,14 @@ + + + + + + + + + \ No newline at end of file diff --git a/cave/com.raytheon.uf.viz.derivparam.python/src/com/raytheon/uf/viz/derivparam/python/DerivParamPythonFunctionAdapter.java b/cave/com.raytheon.uf.viz.derivparam.python/src/com/raytheon/uf/viz/derivparam/python/DerivParamPythonFunctionAdapter.java index 70b1ca3caf..3913565791 100644 --- a/cave/com.raytheon.uf.viz.derivparam.python/src/com/raytheon/uf/viz/derivparam/python/DerivParamPythonFunctionAdapter.java +++ b/cave/com.raytheon.uf.viz.derivparam.python/src/com/raytheon/uf/viz/derivparam/python/DerivParamPythonFunctionAdapter.java @@ -49,6 +49,8 @@ import com.raytheon.uf.viz.derivparam.library.DerivedParameterGenerator; * Dec 16, 2010 mschenke Initial creation * Jun 04, 2013 2041 bsteffen Switch derived parameters to use * concurrent python for threading. + * Jan 30, 2014 #2725 ekladstrup Add name and extention get methods + * after removing RCP extention point * * * @@ -158,4 +160,25 @@ public class DerivParamPythonFunctionAdapter implements } } + /* + * (non-Javadoc) + * + * @see com.raytheon.uf.viz.derivparam.IDerivParamFunctionAdapter#getName() + */ + @Override + public String getName() { + return "Python"; + } + + /* + * (non-Javadoc) + * + * @see + * com.raytheon.uf.viz.derivparam.IDerivParamFunctionAdapter#getExtension() + */ + @Override + public String getExtension() { + return "py"; + } + } diff --git a/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/IDerivParamFunctionAdapter.java b/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/IDerivParamFunctionAdapter.java index 6c835bd384..8f5b850e84 100644 --- a/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/IDerivParamFunctionAdapter.java +++ b/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/IDerivParamFunctionAdapter.java @@ -37,7 +37,8 @@ import com.raytheon.uf.viz.derivparam.DerivParamFunctionType.FunctionArgument; * Dec 16, 2010 mschenke Initial creation * Jun 04, 2013 2041 bsteffen Switch derived parameters to use * concurrent python for threading. - * + * Jan 30, 2014 #2725 ekladstrup Add name and extention get methods + * after removing RCP extention point * * * @author mschenke @@ -86,4 +87,18 @@ public interface IDerivParamFunctionAdapter { * Stop the adapter and any child threads. */ public void shutdown(); + + /** + * Return the name of the function type + * + * @return + */ + public String getName(); + + /** + * Return the file extension of the function type + * + * @return + */ + public String getExtension(); } diff --git a/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/data/AbstractDataCubeAdapter.java b/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/data/AbstractDataCubeAdapter.java index a74326d05a..629e97a791 100644 --- a/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/data/AbstractDataCubeAdapter.java +++ b/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/data/AbstractDataCubeAdapter.java @@ -37,11 +37,11 @@ import com.raytheon.uf.common.dataquery.responses.DbQueryResponse; import com.raytheon.uf.common.dataquery.responses.DbQueryResponseSet; import com.raytheon.uf.common.datastorage.Request; import com.raytheon.uf.common.datastorage.records.IDataRecord; +import com.raytheon.uf.common.serialization.comm.RequestRouter; import com.raytheon.uf.common.time.DataTime; import com.raytheon.uf.viz.core.datastructure.DefaultDataCubeAdapter; import com.raytheon.uf.viz.core.datastructure.VizDataCubeException; import com.raytheon.uf.viz.core.exception.VizException; -import com.raytheon.uf.viz.core.requests.ThriftClient; import com.raytheon.uf.viz.derivparam.inv.AvailabilityContainer; import com.raytheon.uf.viz.derivparam.inv.MetadataContainer; import com.raytheon.uf.viz.derivparam.inv.TimeAndSpace; @@ -60,6 +60,7 @@ import com.raytheon.uf.viz.derivparam.tree.AbstractRequestableNode; * Jan 30, 2012 mschenke Initial creation * Feb 25, 2013 1659 bsteffen Stop derived parameters from sending * empty requests for cached times + * Jan 30, 2014 #2725 ekladstrup Remove usage of ThriftClient * * * @@ -125,8 +126,13 @@ public abstract class AbstractDataCubeAdapter extends DefaultDataCubeAdapter { if (!fullList.isEmpty()) { DbQueryRequestSet requestSet = new DbQueryRequestSet(); requestSet.setQueries(fullList.toArray(new DbQueryRequest[0])); - DbQueryResponseSet responseSet = (DbQueryResponseSet) ThriftClient - .sendRequest(requestSet); + DbQueryResponseSet responseSet; + try { + responseSet = (DbQueryResponseSet) RequestRouter + .route(requestSet); + } catch (Exception e) { + throw new VizException(e); + } responses = responseSet.getResults(); } int responseIndex = 0; diff --git a/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/inv/AbstractInventory.java b/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/inv/AbstractInventory.java index 8b71752e20..03e6a3ff20 100644 --- a/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/inv/AbstractInventory.java +++ b/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/inv/AbstractInventory.java @@ -36,6 +36,7 @@ import java.util.concurrent.BlockingQueue; import com.raytheon.uf.common.comm.CommunicationException; import com.raytheon.uf.common.dataplugin.level.Level; import com.raytheon.uf.common.dataplugin.level.LevelFactory; +import com.raytheon.uf.common.dataplugin.level.util.LevelUtilities; import com.raytheon.uf.common.dataquery.requests.RequestConstraint; import com.raytheon.uf.common.derivparam.tree.AbstractNode; import com.raytheon.uf.common.derivparam.tree.DataTree; @@ -48,7 +49,6 @@ import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.common.time.DataTime; import com.raytheon.uf.viz.core.exception.VizCommunicationException; import com.raytheon.uf.viz.core.exception.VizException; -import com.raytheon.uf.viz.core.level.LevelUtilities; import com.raytheon.uf.viz.derivparam.data.AbstractRequestableData; import com.raytheon.uf.viz.derivparam.data.FloatRequestableData; import com.raytheon.uf.viz.derivparam.library.DerivParamConstantField; @@ -84,6 +84,8 @@ import com.raytheon.uf.viz.derivparam.tree.UnionLevelNode; * ------------- -------- ----------- -------------------------- * Mar 17, 2010 bsteffen Initial creation * Jan 23, 2014 2711 bsteffen Get all levels from LevelFactory. + * Jan 30, 2014 #2725 ekladstrup handle different exceptions for moving + * derived parameters to common * * * @@ -933,10 +935,14 @@ public abstract class AbstractInventory implements DerivParamUpdateListener { endCount += 1; nodes.add(target); } - SortedSet levels = LevelUtilities - .getOrderedSetOfStandardLevels( - level.getMasterLevel().getName()).subSet( - lowerLevel, false, upperLevel, false); + SortedSet levels = null; + try { + levels = LevelUtilities.getOrderedSetOfStandardLevels( + level.getMasterLevel().getName()).subSet( + lowerLevel, false, upperLevel, false); + } catch ( CommunicationException e ) { + throw new VizCommunicationException(e); + } for (Level fieldLevel : levels) { target = resolveNode(sourceNode, param, fieldLevel, stack, nodata); @@ -1070,15 +1076,19 @@ public abstract class AbstractInventory implements DerivParamUpdateListener { } } else { SortedSet levels = null; - if (type == LevelType.Upper) { - levels = LevelUtilities.getOrderedSetOfStandardLevels( - level.getMasterLevel().getName()).tailSet(level, - false); - } else { - levels = LevelUtilities - .getOrderedSetOfStandardLevels( - level.getMasterLevel().getName()) - .headSet(level, false).descendingSet(); + try { + if (type == LevelType.Upper) { + levels = LevelUtilities.getOrderedSetOfStandardLevels( + level.getMasterLevel().getName()).tailSet( + level, false); + } else { + levels = LevelUtilities + .getOrderedSetOfStandardLevels( + level.getMasterLevel().getName()) + .headSet(level, false).descendingSet(); + } + } catch ( CommunicationException e ) { + throw new VizCommunicationException(e); } for (Level l : levels) { target = resolveNode(fieldSourceNode, fieldParamAbbrev, l, diff --git a/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/inv/AvailabilityContainer.java b/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/inv/AvailabilityContainer.java index 345a4bd8f8..7725c986f4 100644 --- a/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/inv/AvailabilityContainer.java +++ b/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/inv/AvailabilityContainer.java @@ -34,8 +34,8 @@ import com.raytheon.uf.common.dataquery.requests.DbQueryRequestSet; import com.raytheon.uf.common.dataquery.requests.RequestConstraint; import com.raytheon.uf.common.dataquery.responses.DbQueryResponse; import com.raytheon.uf.common.dataquery.responses.DbQueryResponseSet; +import com.raytheon.uf.common.serialization.comm.RequestRouter; import com.raytheon.uf.viz.core.exception.VizException; -import com.raytheon.uf.viz.core.requests.ThriftClient; import com.raytheon.uf.viz.derivparam.tree.AbstractBaseDataNode; import com.raytheon.uf.viz.derivparam.tree.AbstractDerivedDataNode; import com.raytheon.uf.viz.derivparam.tree.AbstractRequestableNode; @@ -56,6 +56,7 @@ import com.raytheon.uf.viz.derivparam.tree.AbstractRequestableNode.Dependency; * Apr 11, 2012 bsteffen Initial creation * Feb 25, 2013 1659 bsteffen Stop derived parameters from sending * empty requests for cached times + * Jan 30, 2014 #2725 ekladstrup remove usage of ThriftClient * * * @@ -178,8 +179,13 @@ public class AvailabilityContainer { if (!requests.isEmpty()) { DbQueryRequestSet requestSet = new DbQueryRequestSet(); requestSet.setQueries(requests.toArray(new DbQueryRequest[0])); - DbQueryResponseSet responseSet = (DbQueryResponseSet) ThriftClient - .sendRequest(requestSet); + DbQueryResponseSet responseSet; + try { + responseSet = (DbQueryResponseSet) RequestRouter + .route(requestSet); + } catch (Exception e) { + throw new VizException(e); + } DbQueryResponse[] responses = responseSet.getResults(); for (int i = 0; i < responses.length; i++) { diff --git a/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/inv/MetadataContainer.java b/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/inv/MetadataContainer.java index b2833f77a0..c74eed296b 100644 --- a/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/inv/MetadataContainer.java +++ b/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/inv/MetadataContainer.java @@ -32,8 +32,8 @@ import com.raytheon.uf.common.dataquery.requests.DbQueryRequest; import com.raytheon.uf.common.dataquery.requests.DbQueryRequestSet; import com.raytheon.uf.common.dataquery.requests.RequestConstraint; import com.raytheon.uf.common.dataquery.responses.DbQueryResponseSet; +import com.raytheon.uf.common.serialization.comm.RequestRouter; import com.raytheon.uf.viz.core.exception.VizException; -import com.raytheon.uf.viz.core.requests.ThriftClient; import com.raytheon.uf.viz.derivparam.data.AbstractRequestableData; import com.raytheon.uf.viz.derivparam.tree.AbstractBaseDataNode; import com.raytheon.uf.viz.derivparam.tree.AbstractDerivedDataNode; @@ -52,6 +52,7 @@ import com.raytheon.uf.viz.derivparam.tree.AbstractRequestableNode.Dependency; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Apr 11, 2012 bsteffen Initial creation + * Jan 30, 2014 #2725 ekladstrup remove usage of ThriftClient * * * @@ -223,8 +224,12 @@ public class MetadataContainer { } DbQueryRequestSet requestSet = new DbQueryRequestSet(); requestSet.setQueries(requests.toArray(new DbQueryRequest[0])); - DbQueryResponseSet responseSet = (DbQueryResponseSet) ThriftClient - .sendRequest(requestSet); + DbQueryResponseSet responseSet; + try { + responseSet = (DbQueryResponseSet) RequestRouter.route(requestSet); + } catch (Exception e) { + throw new VizException(e); + } for (int i = 0; i < nodes.size(); i++) { AbstractBaseDataNode node = nodes.get(i); dataCache.put(node, node.getData(originalConstraints, diff --git a/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/library/DerivedParameterGenerator.java b/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/library/DerivedParameterGenerator.java index 7e3d1cd01e..8f1e88cb4e 100644 --- a/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/library/DerivedParameterGenerator.java +++ b/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/library/DerivedParameterGenerator.java @@ -29,21 +29,12 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import javax.measure.unit.Unit; import javax.xml.bind.JAXBException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IExtension; -import org.eclipse.core.runtime.IExtensionPoint; -import org.eclipse.core.runtime.IExtensionRegistry; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.ui.services.IDisposable; - import com.raytheon.uf.common.datastorage.records.IDataRecord; import com.raytheon.uf.common.localization.FileUpdatedMessage; import com.raytheon.uf.common.localization.ILocalizationFileObserver; @@ -56,7 +47,6 @@ import com.raytheon.uf.common.serialization.JAXBManager; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus.Priority; -import com.raytheon.uf.viz.core.Activator; import com.raytheon.uf.viz.derivparam.DerivParamFunctionType; import com.raytheon.uf.viz.derivparam.IDerivParamFunctionAdapter; import com.raytheon.uf.viz.derivparam.library.DerivParamMethod.MethodType; @@ -80,6 +70,9 @@ import com.raytheon.uf.viz.derivparam.library.DerivParamMethod.MethodType; * concurrent python for threading. * Nov 19, 2013 2361 njensen Only shutdown if initialized * Jan 14, 2014 2661 bsteffen Shutdown using uf.viz.core.Activator + * Jan 30, 2014 #2725 ekladstrup Refactor to remove dependencies on + * eclipse runtime and support some configuration + * through spring * * * @@ -102,8 +95,6 @@ public class DerivedParameterGenerator implements ILocalizationFileObserver { public static final String XML_DIR = DERIV_PARAM_DIR + File.separator + DEFINITIONS; - private static final String EXTENSION = "com.raytheon.uf.viz.derivparam.functionType"; - public static interface DerivParamUpdateListener { public void updateDerParLibrary( Map derParLibrary); @@ -123,21 +114,10 @@ public class DerivedParameterGenerator implements ILocalizationFileObserver { private String extension = null; - private Job notifyJob = new Job("Notify Derived Parameter Listeners") { + protected static List functionTypes = new ArrayList( + 1); - @Override - protected IStatus run(IProgressMonitor arg0) { - Collection l = null; - synchronized (listeners) { - l = new ArrayList(listeners); - } - for (DerivParamUpdateListener listener : l) { - listener.updateDerParLibrary(derParLibrary); - } - return Status.OK_STATUS; - } - - }; + protected ExecutorService execService = null; public static synchronized DerivedParameterGenerator getInstance() { if (instance == null) { @@ -146,34 +126,24 @@ public class DerivedParameterGenerator implements ILocalizationFileObserver { return instance; } + /** + * Create a function type from the adapter and add it to the function type + * list + * + * @param adapter + * @return the adapter + */ + public static IDerivParamFunctionAdapter addFunctionAdapter( + IDerivParamFunctionAdapter adapter) { + DerivParamFunctionType functionType = new DerivParamFunctionType(); + functionType.setName(adapter.getName()); + functionType.setExtension(adapter.getExtension()); + functionType.setAdapter(adapter); + functionTypes.add(functionType); + return adapter; + } + public static DerivParamFunctionType[] getFunctionTypes() { - List functionTypes = new ArrayList(); - IExtensionRegistry registry = Platform.getExtensionRegistry(); - if (registry != null) { - IExtensionPoint point = registry.getExtensionPoint(EXTENSION); - - IExtension[] extensions = point.getExtensions(); - - for (IExtension ext : extensions) { - IConfigurationElement[] config = ext.getConfigurationElements(); - - for (IConfigurationElement cfg : config) { - try { - DerivParamFunctionType functionType = new DerivParamFunctionType(); - functionType.setName(cfg.getAttribute("name")); - functionType - .setExtension(cfg.getAttribute("extension")); - functionType - .setAdapter((IDerivParamFunctionAdapter) cfg - .createExecutableExtension("adapter")); - functionTypes.add(functionType); - } catch (Throwable t) { - statusHandler.handle(Priority.DEBUG, - t.getLocalizedMessage(), t); - } - } - } - } return functionTypes.toArray(new DerivParamFunctionType[0]); } @@ -189,6 +159,10 @@ public class DerivedParameterGenerator implements ILocalizationFileObserver { } private DerivedParameterGenerator() { + // We shouldn't every be running more than one job at a time anyway, but + // use an executor service just in case we want to tweak things later. + execService = Executors.newSingleThreadExecutor(); + DerivParamFunctionType[] functionTypes = getFunctionTypes(); if (functionTypes == null || functionTypes.length == 0) { @@ -196,16 +170,9 @@ public class DerivedParameterGenerator implements ILocalizationFileObserver { "Error creating derived parameter function type," + " derived paramters will not be available"); } - Activator.getDefault().registerDisposable(new IDisposable() { - @Override - public void dispose() { - shutdown(); - } - }); this.adapter = functionTypes[0].getAdapter(); this.extension = functionTypes[0].getExtension(); - notifyJob.setSystem(true); LocalizationFile dir = PathManagerFactory.getPathManager() .getStaticLocalizationFile(DERIV_PARAM_DIR); if (dir != null) { @@ -306,7 +273,7 @@ public class DerivedParameterGenerator implements ILocalizationFileObserver { this.derParLibrary = derParLibrary; adapter.init(); - notifyJob.schedule(); + scheduleNotifyJob(listeners, derParLibrary); System.out.println("time to init derived parameters: " + (System.currentTimeMillis() - start) + "ms"); @@ -314,6 +281,33 @@ public class DerivedParameterGenerator implements ILocalizationFileObserver { } } + /** + * Run the notification thread in the executor service. + * + * @param theListeners + * @param theDerParLibrary + */ + protected void scheduleNotifyJob( + final Set theListeners, + final Map theDerParLibrary) { + Thread notifyJob = new Thread() { + + @Override + public void run() { + Collection l = null; + synchronized (listeners) { + l = new ArrayList(listeners); + } + for (DerivParamUpdateListener listener : l) { + listener.updateDerParLibrary(derParLibrary); + } + } + + }; + + execService.submit(notifyJob); + } + public Map getLibrary() { initLibrary(); return derParLibrary; diff --git a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/GridInventory.java b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/GridInventory.java index 50bf8419f4..f282178ca1 100644 --- a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/GridInventory.java +++ b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/GridInventory.java @@ -33,6 +33,7 @@ import java.util.Map.Entry; import java.util.NavigableSet; import java.util.Set; +import com.raytheon.uf.common.comm.CommunicationException; import com.raytheon.uf.common.dataplugin.grid.GridConstants; import com.raytheon.uf.common.dataplugin.grid.GridInfoConstants; import com.raytheon.uf.common.dataplugin.grid.GridInfoRecord; @@ -41,6 +42,7 @@ import com.raytheon.uf.common.dataplugin.grid.dataset.DatasetInfoLookup; import com.raytheon.uf.common.dataplugin.grid.request.GetGridTreeRequest; import com.raytheon.uf.common.dataplugin.grid.util.StaticGridDataType; import com.raytheon.uf.common.dataplugin.level.Level; +import com.raytheon.uf.common.dataplugin.level.util.LevelUtilities; import com.raytheon.uf.common.dataquery.requests.DbQueryRequest; import com.raytheon.uf.common.dataquery.requests.RequestConstraint; import com.raytheon.uf.common.dataquery.requests.RequestConstraint.ConstraintType; @@ -58,7 +60,6 @@ import com.raytheon.uf.viz.core.catalog.CatalogQuery; import com.raytheon.uf.viz.core.catalog.DbQuery; import com.raytheon.uf.viz.core.exception.VizCommunicationException; import com.raytheon.uf.viz.core.exception.VizException; -import com.raytheon.uf.viz.core.level.LevelUtilities; import com.raytheon.uf.viz.core.requests.ThriftClient; import com.raytheon.uf.viz.derivparam.data.AbstractRequestableData; import com.raytheon.uf.viz.derivparam.inv.AbstractInventory; @@ -91,6 +92,8 @@ import com.raytheon.viz.grid.util.RadarAdapter; * Nov 21, 2009 #3576 rjpeter Refactored use of DerivParamDesc. * Feb 26, 2013 1659 bsteffen Add time agnostic caching to grid derived * parameters. + * Jan 30, 2014 #2725 ekladstrup updated exception handling during move of derived + * parameters to common * * * @@ -697,8 +700,13 @@ public class GridInventory extends AbstractInventory implements String masterLevelName = get3DMasterLevel(sNode.getValue()); boolean isRadar = sNode.getValue().equals(RadarAdapter.RADAR_SOURCE); - NavigableSet levels = LevelUtilities - .getOrderedSetOfStandardLevels(masterLevelName); + NavigableSet levels; + try { + levels = LevelUtilities + .getOrderedSetOfStandardLevels(masterLevelName); + } catch (CommunicationException e) { + throw new VizCommunicationException(e); + } List> cubeLevels = new ArrayList>( levels.size()); diff --git a/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/datacatalog/AbstractDataCatalog.java b/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/datacatalog/AbstractDataCatalog.java index 8910499faf..5f398dab2a 100644 --- a/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/datacatalog/AbstractDataCatalog.java +++ b/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/datacatalog/AbstractDataCatalog.java @@ -34,6 +34,7 @@ import com.raytheon.uf.common.dataplugin.grid.util.GridLevelTranslator; import com.raytheon.uf.common.dataplugin.level.Level; import com.raytheon.uf.common.dataplugin.level.mapping.LevelMapping; import com.raytheon.uf.common.dataplugin.level.mapping.LevelMappingFactory; +import com.raytheon.uf.common.dataplugin.level.util.LevelUtilities; import com.raytheon.uf.common.dataquery.requests.RequestConstraint; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; @@ -44,8 +45,6 @@ import com.raytheon.uf.common.style.StyleException; import com.raytheon.uf.common.style.StyleManager; import com.raytheon.uf.common.style.StyleRule; import com.raytheon.uf.viz.core.drawables.ResourcePair; -import com.raytheon.uf.viz.core.exception.VizCommunicationException; -import com.raytheon.uf.viz.core.level.LevelUtilities; import com.raytheon.uf.viz.core.rsc.AbstractRequestableResourceData; import com.raytheon.uf.viz.core.rsc.DisplayType; import com.raytheon.uf.viz.core.rsc.LoadProperties; @@ -83,6 +82,8 @@ import com.vividsolutions.jts.geom.Coordinate; * Aug 20, 2013 2259 bsteffen Delete old skewt plugin. * Sep 06, 2013 2251 mnash Move graph prefs style type to * graph plugin + * Jan 30, 2014 #2725 ekladstrup updated exception handling during move of derived + * parameters to common * * * @@ -361,7 +362,7 @@ public abstract class AbstractDataCatalog implements IDataCatalog { try { levels = LevelUtilities.getOrderedSetOfStandardLevels(planesKey .replace("spatial-", "")); - } catch (VizCommunicationException e) { + } catch (CommunicationException e) { statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e); } diff --git a/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/datacatalog/AbstractInventoryDataCatalog.java b/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/datacatalog/AbstractInventoryDataCatalog.java index 5aec51b76d..2c7831ab82 100644 --- a/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/datacatalog/AbstractInventoryDataCatalog.java +++ b/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/datacatalog/AbstractInventoryDataCatalog.java @@ -40,12 +40,11 @@ import com.raytheon.uf.common.dataplugin.level.Level; import com.raytheon.uf.common.dataplugin.level.LevelFactory; import com.raytheon.uf.common.dataplugin.level.mapping.LevelMapping; import com.raytheon.uf.common.dataplugin.level.mapping.LevelMappingFactory; +import com.raytheon.uf.common.dataplugin.level.util.LevelUtilities; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.viz.core.datastructure.DataCubeContainer; -import com.raytheon.uf.viz.core.exception.VizCommunicationException; -import com.raytheon.uf.viz.core.level.LevelUtilities; import com.raytheon.uf.viz.derivparam.inv.AbstractInventory; import com.raytheon.viz.volumebrowser.vbui.DataListsProdTableComp.DataSelection; import com.raytheon.viz.volumebrowser.vbui.MenuItemManager; @@ -63,6 +62,8 @@ import com.raytheon.viz.volumebrowser.vbui.VolumeBrowserAction; * ------------ ---------- ----------- -------------------------- * Apr 14, 2010 bsteffen Initial creation * Jul 25, 2013 2112 bsteffen Fix volume browser sounding errors. + * Jan 30, 2014 #2725 ekladstrup updated exception handling during move of derived + * parameters to common * * * @@ -291,7 +292,7 @@ public abstract class AbstractInventoryDataCatalog extends AbstractDataCatalog { levels = LevelUtilities .getOrderedSetOfStandardLevels(plane.replace( "spatial-", "")); - } catch (VizCommunicationException e) { + } catch (CommunicationException e) { statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e); } diff --git a/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/datacatalog/GridDataCatalog.java b/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/datacatalog/GridDataCatalog.java index 04fce05ce6..a18dab0e6f 100644 --- a/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/datacatalog/GridDataCatalog.java +++ b/cave/com.raytheon.viz.volumebrowser/src/com/raytheon/viz/volumebrowser/datacatalog/GridDataCatalog.java @@ -39,6 +39,7 @@ import com.raytheon.uf.common.comm.CommunicationException; import com.raytheon.uf.common.dataplugin.grid.GridConstants; import com.raytheon.uf.common.dataplugin.level.Level; import com.raytheon.uf.common.dataplugin.level.mapping.LevelMappingFactory; +import com.raytheon.uf.common.dataplugin.level.util.LevelUtilities; import com.raytheon.uf.common.dataquery.requests.RequestConstraint; import com.raytheon.uf.common.dataquery.requests.RequestConstraint.ConstraintType; import com.raytheon.uf.common.geospatial.MapUtil; @@ -47,9 +48,7 @@ import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.viz.core.drawables.ResourcePair; -import com.raytheon.uf.viz.core.exception.VizCommunicationException; import com.raytheon.uf.viz.core.exception.VizException; -import com.raytheon.uf.viz.core.level.LevelUtilities; import com.raytheon.uf.viz.core.rsc.AbstractRequestableResourceData; import com.raytheon.uf.viz.core.rsc.DisplayType; import com.raytheon.uf.viz.core.rsc.ResourceType; @@ -85,6 +84,8 @@ import com.vividsolutions.jts.geom.LineString; * Jul 31, 2012 875 rferrel Now uses points. * May 30, 2013 2055 bsteffen Remove modelName from sounding pointName. * Dec 06, 2013 2271 mpduff Added check for null coordinate. + * Jan 30, 2014 #2725 ekladstrup updated exception handling during move of derived + * parameters to common * * * @@ -349,7 +350,7 @@ public class GridDataCatalog extends AbstractInventoryDataCatalog { if (tilts != null) { all.addAll(tilts); } - } catch (VizCommunicationException e) { + } catch (CommunicationException e) { statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e); } try { @@ -358,7 +359,7 @@ public class GridDataCatalog extends AbstractInventoryDataCatalog { if (pres != null) { all.addAll(pres); } - } catch (VizCommunicationException e) { + } catch (CommunicationException e) { statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e); } try { @@ -367,7 +368,7 @@ public class GridDataCatalog extends AbstractInventoryDataCatalog { if (theta != null) { all.addAll(theta); } - } catch (VizCommunicationException e) { + } catch (CommunicationException e) { statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e); } diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.level/META-INF/MANIFEST.MF b/edexOsgi/com.raytheon.uf.common.dataplugin.level/META-INF/MANIFEST.MF index 98c92d655c..855a3e38aa 100644 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.level/META-INF/MANIFEST.MF +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.level/META-INF/MANIFEST.MF @@ -19,4 +19,6 @@ Require-Bundle: com.raytheon.uf.common.dataplugin, javax.measure Export-Package: com.raytheon.uf.common.dataplugin.level, com.raytheon.uf.common.dataplugin.level.mapping, - com.raytheon.uf.common.dataplugin.level.request + com.raytheon.uf.common.dataplugin.level.request, + com.raytheon.uf.common.dataplugin.level.util +Import-Package: com.raytheon.uf.common.comm diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/level/LevelUtilities.java b/edexOsgi/com.raytheon.uf.common.dataplugin.level/src/com/raytheon/uf/common/dataplugin/level/util/LevelUtilities.java similarity index 75% rename from cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/level/LevelUtilities.java rename to edexOsgi/com.raytheon.uf.common.dataplugin.level/src/com/raytheon/uf/common/dataplugin/level/util/LevelUtilities.java index ee065cd1cf..ce500e27f1 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/level/LevelUtilities.java +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.level/src/com/raytheon/uf/common/dataplugin/level/util/LevelUtilities.java @@ -17,7 +17,7 @@ * See the AWIPS II Master Rights File ("Master Rights File.pdf") for * further licensing information. **/ -package com.raytheon.uf.viz.core.level; +package com.raytheon.uf.common.dataplugin.level.util; import java.text.ParsePosition; import java.util.Comparator; @@ -36,7 +36,6 @@ import com.raytheon.uf.common.dataplugin.level.Level; import com.raytheon.uf.common.dataplugin.level.LevelFactory; import com.raytheon.uf.common.dataplugin.level.MasterLevel; import com.raytheon.uf.common.dataplugin.level.mapping.LevelMappingFactory; -import com.raytheon.uf.viz.core.exception.VizCommunicationException; /** * Level utilities @@ -49,6 +48,8 @@ import com.raytheon.uf.viz.core.exception.VizCommunicationException; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * 11/21/2009 #3576 rjpeter Initial version + * 01/30/2014 #2725 ekladstrup Moved to common and removed + * usage of VizCommunicationException * * * @author rjpeter @@ -67,23 +68,15 @@ public class LevelUtilities { } public static boolean isPressureLevel(long levelId) - throws VizCommunicationException { - try { - return isPressureLevel(LevelFactory.getInstance().getLevel(levelId) - .getMasterLevel()); - } catch (CommunicationException e) { - throw new VizCommunicationException(e); - } + throws CommunicationException { + return isPressureLevel(LevelFactory.getInstance().getLevel(levelId) + .getMasterLevel()); } public static boolean isPressureLevel(String masterLevelName) - throws VizCommunicationException { - try { - return isPressureLevel(LevelFactory.getInstance().getMasterLevel( - masterLevelName)); - } catch (CommunicationException e) { - throw new VizCommunicationException(e); - } + throws CommunicationException { + return isPressureLevel(LevelFactory.getInstance().getMasterLevel( + masterLevelName)); } public static boolean isPressureLevel(Level level) { @@ -106,7 +99,7 @@ public class LevelUtilities { * @throws CommunicationException */ public synchronized static NavigableSet getOrderedSetOfStandardLevels( - String masterLevelName) throws VizCommunicationException { + String masterLevelName) throws CommunicationException { if (masterLevelToOrderedSet == null) { Comparator levelComparator = new Comparator() { @@ -125,13 +118,9 @@ public class LevelUtilities { }; Map> masterLevelToOrderedSet = new HashMap>(); Set allLevels; - try { - allLevels = LevelMappingFactory.getInstance( - LevelMappingFactory.VOLUMEBROWSER_LEVEL_MAPPING_FILE) - .getAllLevels(); - } catch (CommunicationException e) { - throw new VizCommunicationException(e); - } + allLevels = LevelMappingFactory.getInstance( + LevelMappingFactory.VOLUMEBROWSER_LEVEL_MAPPING_FILE) + .getAllLevels(); for (Level level : allLevels) { NavigableSet levels = masterLevelToOrderedSet.get(level .getMasterLevel().getName()); @@ -142,12 +131,8 @@ public class LevelUtilities { } if (level.isRangeLevel()) { - try { - levels.add(level.getUpperLevel()); - levels.add(level.getLowerLevel()); - } catch (CommunicationException e) { - throw new VizCommunicationException(e); - } + levels.add(level.getUpperLevel()); + levels.add(level.getLowerLevel()); } else { levels.add(level); }