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 + -
显示快捷键?