gidbcontroller.java

来自「world wind java sdk 源码」· Java 代码 · 共 541 行 · 第 1/2 页

JAVA
541
字号
            Logging.logger().severe(message);
            throw new IllegalArgumentException(message);
        }

        // TODO: capture request parameters in query history

        addResultActor();
        setResultsStatusSearching();
        try
        {
            URL serviceURL = this.gidbPanel.getServiceURL();
            GetServices getServices = new GetServices(queryParams, this.gidbPanel.getResultModel());
            getServices.executeRequest(serviceURL);
        }
        catch (Exception e)
        {
            String message = "gidb.ExceptionWhileGettingServices";
            Logging.logger().log(java.util.logging.Level.SEVERE, message, e);

            JOptionPane.showMessageDialog(null,
                "Cannot communicate with GIDB Portal at\n" + this.gidbPanel.getService(),
                "Problem communicating with GIDB Portal",
                JOptionPane.ERROR_MESSAGE);
        }
        finally
        {
            removeResultActor();
            setResultsStatusFinished();
        }
    }

    private static class GetServiceCapabilitiesTask implements Callable<Object>
    {
        private GIDBResultModel resultModel;
        private GIDBController controller;

        private GetServiceCapabilitiesTask(GIDBResultModel resultModel, GIDBController controller)
        {
            this.resultModel = resultModel;
            this.controller = controller;
        }

        public Object call() throws Exception
        {
            this.controller.doGetServiceCapabilities(this.resultModel);
            return null;
        }
    }

    private void doGetServiceCapabilities(GIDBResultModel resultModel)
    {
        if (resultModel == null)
        {
            String message = "nullValue.ResultModelIsNull";
            Logging.logger().severe(message);
            throw new IllegalArgumentException(message);
        }

        // Do not process the request if the Capabilities already exists.
        if (resultModel.getCapabilities() == null)
        {
            resultModel.setValue(CatalogKey.WAITING, Boolean.TRUE);
            resultModel.firePropertyChange();
            try
            {
                GetCapabilities getCapabilities = new GetCapabilities(resultModel);
                getCapabilities.executeRequest();

                linkLayers(resultModel);
            }
            catch (Exception e)
            {
                String message = "gidb.ExceptionWhileGettingServiceCapabilities";
                Logging.logger().log(java.util.logging.Level.SEVERE, message, e);
            }
            finally
            {
                resultModel.setValue(CatalogKey.WAITING, Boolean.FALSE);
                resultModel.firePropertyChange();
            }
        }
    }

    private void linkLayers(GIDBResultModel resultModel)
    {
        if (resultModel == null)
        {
            String message = "nullValue.ResultModelIsNull";
            Logging.logger().severe(message);
            throw new IllegalArgumentException(message);
        }

        if (resultModel.getLayerList() != null)
        {
            for (Layer layer : resultModel.getLayerList())
            {
                if (layer != null)
                {
                    Object key = layerKey(layer);
                    if (this.wwLayerMap.containsKey(key))
                    {
                        Object wwLayer = this.wwLayerMap.get(key);
                        layer.setValue(CatalogKey.LAYER_STATE, CatalogKey.LAYER_STATE_INSTALLED);
                        layer.setValue(AVKey.LAYER, wwLayer);
                    }
                }
            }
        }
    }

    private static Object layerKey(AVList params)
    {
        Object key = null;
        if (params != null)
        {
            StringBuilder sb = new StringBuilder();
            sb.append(params.getValue(AVKey.LAYER_NAMES));
            sb.append("/");
            sb.append(params.getValue(AVKey.STYLE_NAMES));
            key = sb.toString();
        }
        return key;
    }

    private static class UpdateLayerTask implements Callable<Object>
    {
        private GIDBResultModel resultModel;
        private Layer layer;
        private GIDBController controller;

        private UpdateLayerTask(GIDBResultModel resultModel, Layer layer, GIDBController controller)
        {
            this.resultModel = resultModel;
            this.layer = layer;
            this.controller = controller;
        }

        public Object call() throws Exception
        {
            this.controller.doUpdateLayer(this.resultModel, this.layer);
            return null;
        }
    }

    private void doUpdateLayer(GIDBResultModel resultModel, Layer layer)
    {
        if (resultModel == null)
        {
            String message = "nullValue.ResultModelIsNull";
            Logging.logger().severe(message);
            throw new IllegalArgumentException(message);
        }
        if (layer == null)
        {
            String message = "nullValue.LayerIsNull";
            Logging.logger().severe(message);
            throw new IllegalArgumentException(message);
        }

        try
        {
            String layerState = layer.getStringValue(CatalogKey.LAYER_STATE);
            if (CatalogKey.LAYER_STATE_READY.equalsIgnoreCase(layerState) || layerState == null)
            {
                Capabilities caps = resultModel.getCapabilities();
                addLayerToWorldWind(caps, layer);
                layer.setValue(CatalogKey.LAYER_STATE, CatalogKey.LAYER_STATE_INSTALLED);
            }
            else if (CatalogKey.LAYER_STATE_INSTALLED.equalsIgnoreCase(layerState))
            {
                removeLayerFromWorldWind(layer);
                layer.setValue(CatalogKey.LAYER_STATE, CatalogKey.LAYER_STATE_READY);
            }
        }
        catch (Exception e)
        {
            String message = "gidb.ExceptionWhileInstallingLayer";
            Logging.logger().log(java.util.logging.Level.SEVERE, message, e);
            // Flag an error happened while installing the layer.
            layer.setValue(CatalogKey.LAYER_STATE, CatalogKey.LAYER_STATE_ERROR);
            layer.addException(new CatalogException(e.getMessage(), e));
        }
        finally
        {
            resultModel.firePropertyChange();
        }
    }

    private void addLayerToWorldWind(Capabilities caps, AVList layerParams)
    {
        if (caps == null)
        {
            String message = "nullValue.CapabilitiesIsNull";
            Logging.logger().severe(message);
            throw new IllegalStateException(message);
        }
        if (layerParams == null)
        {
            String message = "nullValue.LayerParamsIsNull";
            Logging.logger().severe(message);
            throw new IllegalStateException(message);
        }

        WorldWindow wwd = this.gidbPanel.getWorldWindow();
        if (wwd == null)
        {
            String message = "No World Wind instance is running.";
            Logging.logger().severe(message);
            throw new IllegalStateException(message);
        }

        WMSTiledImageLayer wmsLayer = new WMSTiledImageLayer(caps, layerParams);
        String s = layerParams.getStringValue(AVKey.TITLE);
        if (s != null)
            wmsLayer.setName(s);
        // Some wms servers are slow, so increase the timeouts and limits used by world wind's retrievers.
        wmsLayer.setValue(AVKey.URL_CONNECT_TIMEOUT, 30000);
        wmsLayer.setValue(AVKey.URL_READ_TIMEOUT, 30000);
        wmsLayer.setValue(AVKey.RETRIEVAL_QUEUE_STALE_REQUEST_LIMIT, 60000);
        ApplicationTemplate.insertBeforePlacenames(wwd, wmsLayer);

        layerParams.setValue(AVKey.LAYER, wmsLayer);

        Object key = layerKey(layerParams);
        this.wwLayerMap.put(key, wmsLayer);
    }

    private void removeLayerFromWorldWind(AVList layerParams)
    {
        if (layerParams == null)
        {
            String message = "nullValue.LayerParamsIsNull";
            Logging.logger().severe(message);
            throw new IllegalStateException(message);
        }

        WorldWindow wwd = this.gidbPanel.getWorldWindow();
        if (wwd == null)
        {
            String message = "No World Wind instance is running.";
            Logging.logger().severe(message);
            throw new IllegalStateException(message);
        }

        gov.nasa.worldwind.layers.LayerList wwLayerList = wwd.getModel().getLayers();
        if (wwLayerList == null)
        {
            String message = "Missing Layer List in World Wind.";
            Logging.logger().severe(message);
            throw new IllegalStateException(message);
        }

        Object o = layerParams.getValue(AVKey.LAYER);
        if (o == null || !(o instanceof gov.nasa.worldwind.layers.Layer))
        {
            String message = "Layer is not installed in World Wind.";
            Logging.logger().severe(message);
            throw new IllegalStateException(message);
        }

        gov.nasa.worldwind.layers.Layer wwLayer = (gov.nasa.worldwind.layers.Layer) o;
        wwLayerList.remove(wwLayer);

        layerParams.removeKey(AVKey.LAYER);

        Object key = layerKey(layerParams);
        this.wwLayerMap.remove(key);
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?