Browse Source

Pull request #3048: CHART-17249 高德地图设计器配置界面

Merge in DESIGN/design from ~BJORN/design:feature/10.0 to feature/10.0

* commit '99d18406b87dce0823b6c6380dc596bd42f397c3':
  CHART-17249 高德地图设计器配置界面
research/11.0
ju|剧浩宇 4 years ago
parent
commit
9800ad212d
  1. 4
      designer-chart/src/main/java/com/fr/design/chartx/data/drillMap/DrillMapLayerPane.java
  2. 4
      designer-chart/src/main/java/com/fr/van/chart/drillmap/designer/data/comp/DrillMapLayerPane.java
  3. 16
      designer-chart/src/main/java/com/fr/van/chart/drillmap/designer/type/VanChartDrillMapPlotPane.java
  4. 15
      designer-chart/src/main/java/com/fr/van/chart/heatmap/designer/type/VanChartHeatMapSourceChoosePane.java
  5. 24
      designer-chart/src/main/java/com/fr/van/chart/heatmap/designer/type/VanChartHeatMapTypePane.java
  6. 258
      designer-chart/src/main/java/com/fr/van/chart/map/designer/type/GeoUrlPane.java
  7. 303
      designer-chart/src/main/java/com/fr/van/chart/map/designer/type/GisLayerPane.java
  8. 167
      designer-chart/src/main/java/com/fr/van/chart/map/designer/type/MapStatusPane.java
  9. 51
      designer-chart/src/main/java/com/fr/van/chart/map/designer/type/TileLayerPane.java
  10. 1
      designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapPlotPane.java
  11. 714
      designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapSourceChoosePane.java
  12. 165
      designer-chart/src/main/java/com/fr/van/chart/map/designer/type/WMSLayerPane.java

4
designer-chart/src/main/java/com/fr/design/chartx/data/drillMap/DrillMapLayerPane.java

@ -14,7 +14,7 @@ import com.fr.plugin.chart.type.MapType;
import com.fr.plugin.chart.type.ZoomLevel; import com.fr.plugin.chart.type.ZoomLevel;
import com.fr.van.chart.designer.TableLayout4VanChartHelper; import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import com.fr.van.chart.drillmap.designer.data.comp.MapDataTree; import com.fr.van.chart.drillmap.designer.data.comp.MapDataTree;
import com.fr.van.chart.map.designer.type.VanChartMapSourceChoosePane; import com.fr.van.chart.map.designer.type.MapStatusPane;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.JPanel; import javax.swing.JPanel;
@ -154,7 +154,7 @@ public class DrillMapLayerPane extends BasicBeanPane<VanChartDrillMapPlot> {
rowSize[i + 1] = p; rowSize[i + 1] = p;
int d = i + 1; int d = i + 1;
UILabel label = new UILabel(String.format("%s%d%s", Toolkit.i18nText("Fine-Design_Chart_Index_Article"), d, Toolkit.i18nText("Fine-Design_Chart_Index_Layer"))); UILabel label = new UILabel(String.format("%s%d%s", Toolkit.i18nText("Fine-Design_Chart_Index_Article"), d, Toolkit.i18nText("Fine-Design_Chart_Index_Layer")));
UIComboBox level = new UIComboBox(VanChartMapSourceChoosePane.ZOOM_LEVELS); UIComboBox level = new UIComboBox(MapStatusPane.ZOOM_LEVELS);
level.setEnabled(i != 0); level.setEnabled(i != 0);
UIComboBox type = new UIComboBox(items); UIComboBox type = new UIComboBox(items);
detailComps[i + 1] = new Component[]{label, level, type}; detailComps[i + 1] = new Component[]{label, level, type};

4
designer-chart/src/main/java/com/fr/van/chart/drillmap/designer/data/comp/DrillMapLayerPane.java

@ -14,7 +14,7 @@ import com.fr.plugin.chart.map.server.CompatibleGeoJSONTreeHelper;
import com.fr.plugin.chart.type.MapType; import com.fr.plugin.chart.type.MapType;
import com.fr.plugin.chart.type.ZoomLevel; import com.fr.plugin.chart.type.ZoomLevel;
import com.fr.van.chart.designer.TableLayout4VanChartHelper; import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import com.fr.van.chart.map.designer.type.VanChartMapSourceChoosePane; import com.fr.van.chart.map.designer.type.MapStatusPane;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.JPanel; import javax.swing.JPanel;
@ -105,7 +105,7 @@ public class DrillMapLayerPane extends BasicScrollPane<ChartCollection> {
rowSize[i + 1] = p; rowSize[i + 1] = p;
int d = i + 1; int d = i + 1;
UILabel label = new UILabel(String.format("%s%d%s", com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Index_Article"), d, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Index_Layer"))); UILabel label = new UILabel(String.format("%s%d%s", com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Index_Article"), d, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Index_Layer")));
UIComboBox level = new UIComboBox(VanChartMapSourceChoosePane.ZOOM_LEVELS); UIComboBox level = new UIComboBox(MapStatusPane.ZOOM_LEVELS);
level.setEnabled(i != 0); level.setEnabled(i != 0);
UIComboBox type = new UIComboBox(TEMP.get(oldMapType)); UIComboBox type = new UIComboBox(TEMP.get(oldMapType));
detailComps[i + 1] = new Component[]{label, level, type}; detailComps[i + 1] = new Component[]{label, level, type};

16
designer-chart/src/main/java/com/fr/van/chart/drillmap/designer/type/VanChartDrillMapPlotPane.java

@ -8,11 +8,14 @@ import com.fr.plugin.chart.base.VanChartTools;
import com.fr.plugin.chart.drillmap.DrillMapIndependentVanChart; import com.fr.plugin.chart.drillmap.DrillMapIndependentVanChart;
import com.fr.plugin.chart.drillmap.VanChartDrillMapPlot; import com.fr.plugin.chart.drillmap.VanChartDrillMapPlot;
import com.fr.plugin.chart.drillmap.data.DrillMapDefinition; import com.fr.plugin.chart.drillmap.data.DrillMapDefinition;
import com.fr.plugin.chart.map.designer.type.GEOJSONTreeHelper;
import com.fr.plugin.chart.type.MapType; import com.fr.plugin.chart.type.MapType;
import com.fr.plugin.chart.type.ZoomLevel; import com.fr.plugin.chart.type.ZoomLevel;
import com.fr.van.chart.map.designer.type.GeoUrlPane;
import com.fr.van.chart.map.designer.type.VanChartMapPlotPane; import com.fr.van.chart.map.designer.type.VanChartMapPlotPane;
import com.fr.van.chart.map.designer.type.VanChartMapSourceChoosePane; import com.fr.van.chart.map.designer.type.VanChartMapSourceChoosePane;
import javax.swing.tree.TreeNode;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
@ -30,10 +33,15 @@ public class VanChartDrillMapPlotPane extends VanChartMapPlotPane {
@Override @Override
protected VanChartMapSourceChoosePane createSourceChoosePane() { protected VanChartMapSourceChoosePane createSourceChoosePane() {
return new VanChartMapSourceChoosePane(){ return new VanChartMapSourceChoosePane() {
@Override @Override
protected boolean supportParam(){ protected void initGeoUrlPane() {
return false; setGeoUrlPane(new GeoUrlPane() {
@Override
protected TreeNode getRootNode() {
return GEOJSONTreeHelper.getInstance().getRootNodeWithoutPara();
}
});
} }
}; };
} }
@ -59,7 +67,7 @@ public class VanChartDrillMapPlotPane extends VanChartMapPlotPane {
protected void resetAttr(Plot plot) { protected void resetAttr(Plot plot) {
super.resetAttr(plot); super.resetAttr(plot);
if(plot instanceof VanChartDrillMapPlot) { if (plot instanceof VanChartDrillMapPlot) {
resetLayerTypeAndZoomLevel((VanChartDrillMapPlot) plot); resetLayerTypeAndZoomLevel((VanChartDrillMapPlot) plot);
} }
} }

15
designer-chart/src/main/java/com/fr/van/chart/heatmap/designer/type/VanChartHeatMapSourceChoosePane.java

@ -1,15 +0,0 @@
package com.fr.van.chart.heatmap.designer.type;
import com.fr.design.gui.ilable.UILabel;
import com.fr.van.chart.map.designer.type.VanChartMapSourceChoosePane;
/**
* Created by Mitisky on 16/10/20.
*/
public class VanChartHeatMapSourceChoosePane extends VanChartMapSourceChoosePane {
@Override
protected UILabel createSourceTitleLabel() {
return new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Map_Area_And_Point"));
}
}

24
designer-chart/src/main/java/com/fr/van/chart/heatmap/designer/type/VanChartHeatMapTypePane.java

@ -3,6 +3,8 @@ package com.fr.van.chart.heatmap.designer.type;
import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.Plot; import com.fr.chart.chartattr.Plot;
import com.fr.chartx.data.ChartDataDefinitionProvider; import com.fr.chartx.data.ChartDataDefinitionProvider;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.i18n.Toolkit;
import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import com.fr.plugin.chart.attr.plot.VanChartPlot; import com.fr.plugin.chart.attr.plot.VanChartPlot;
@ -11,6 +13,7 @@ import com.fr.plugin.chart.heatmap.HeatMapIndependentVanChart;
import com.fr.plugin.chart.heatmap.VanChartHeatMapPlot; import com.fr.plugin.chart.heatmap.VanChartHeatMapPlot;
import com.fr.plugin.chart.map.server.CompatibleGEOJSONHelper; import com.fr.plugin.chart.map.server.CompatibleGEOJSONHelper;
import com.fr.plugin.chart.vanchart.VanChart; import com.fr.plugin.chart.vanchart.VanChart;
import com.fr.van.chart.map.designer.type.GeoUrlPane;
import com.fr.van.chart.map.designer.type.VanChartMapPlotPane; import com.fr.van.chart.map.designer.type.VanChartMapPlotPane;
import com.fr.van.chart.map.designer.type.VanChartMapSourceChoosePane; import com.fr.van.chart.map.designer.type.VanChartMapSourceChoosePane;
@ -27,18 +30,27 @@ public class VanChartHeatMapTypePane extends VanChartMapPlotPane {
@Override @Override
protected VanChartMapSourceChoosePane createSourceChoosePane() { protected VanChartMapSourceChoosePane createSourceChoosePane() {
return new VanChartHeatMapSourceChoosePane(); return new VanChartMapSourceChoosePane() {
@Override
protected void initGeoUrlPane() {
setGeoUrlPane(new GeoUrlPane() {
@Override
protected UILabel createSourceTitleLabel() {
return new UILabel(Toolkit.i18nText("Fine-Design_Chart_Map_Area_And_Point"));
}
});
}
};
} }
//适用一种图表只有一种类型的 //适用一种图表只有一种类型的
public void populateBean(VanChart chart) { public void populateBean(VanChart chart) {
typeDemo.get(0).isPressing = true; typeDemo.get(0).isPressing = true;
VanChartHeatMapPlot plot = (VanChartHeatMapPlot)chart.getPlot(); VanChartHeatMapPlot plot = (VanChartHeatMapPlot) chart.getPlot();
populateSourcePane(plot); populateSourcePane(plot);
boolean enabled = !CompatibleGEOJSONHelper.isDeprecated(plot.getGeoUrl()); boolean enabled = !CompatibleGEOJSONHelper.isDeprecated(plot.getGeoUrl());
GUICoreUtils.setEnabled(this.getTypePane(), enabled); GUICoreUtils.setEnabled(this.getTypePane(), enabled);
GUICoreUtils.setEnabled(this.getSourceChoosePane().getSourceComboBox(), enabled);
checkDemosBackground(); checkDemosBackground();
} }
@ -53,13 +65,13 @@ public class VanChartHeatMapTypePane extends VanChartMapPlotPane {
return tools; return tools;
} }
protected Plot getSelectedClonedPlot(){ protected Plot getSelectedClonedPlot() {
Chart chart = getDefaultChart(); Chart chart = getDefaultChart();
VanChartHeatMapPlot newPlot = (VanChartHeatMapPlot)chart.getPlot(); VanChartHeatMapPlot newPlot = (VanChartHeatMapPlot) chart.getPlot();
Plot cloned = null; Plot cloned = null;
try { try {
cloned = (Plot)newPlot.clone(); cloned = (Plot) newPlot.clone();
} catch (CloneNotSupportedException e) { } catch (CloneNotSupportedException e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e); FineLoggerFactory.getLogger().error(e.getMessage(), e);
} }

258
designer-chart/src/main/java/com/fr/van/chart/map/designer/type/GeoUrlPane.java

@ -0,0 +1,258 @@
package com.fr.van.chart.map.designer.type;
import com.fr.base.Parameter;
import com.fr.decision.webservice.v10.map.geojson.helper.GEOJSONHelper;
import com.fr.design.constants.LayoutConstants;
import com.fr.design.event.UIObserver;
import com.fr.design.event.UIObserverListener;
import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icombobox.FRTreeComboBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.JTemplate;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.ComparatorUtils;
import com.fr.general.IOUtils;
import com.fr.plugin.chart.map.VanChartMapPlot;
import com.fr.plugin.chart.map.designer.type.GEOJSONTreeHelper;
import com.fr.plugin.chart.map.server.ChartGEOJSONHelper;
import com.fr.plugin.chart.map.server.CompatibleGEOJSONHelper;
import com.fr.plugin.chart.type.MapType;
import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import com.fr.van.chart.drillmap.designer.data.comp.MapDataTree;
import com.fr.workspace.WorkContext;
import javax.swing.JPanel;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @author Bjorn
* @version 10.0
* Created by Bjorn on 2020-12-07
*/
public class GeoUrlPane extends JPanel implements UIObserver {
private UILabel sourceTitleLabel;
private FRTreeComboBox sourceComboBox;
private MapDataTree mapDataTree;
private TreePath selectTreePath;
private UIObserverListener listener;
private String[] oldParams;
public GeoUrlPane() {
initComps();
}
private void initComps() {
this.setLayout(new BorderLayout());
this.add(createMapSourcesPane(), BorderLayout.CENTER);
}
@Override
public void registerChangeListener(UIObserverListener listener) {
this.listener = listener;
}
@Override
public boolean shouldResponseChangeListener() {
return true;
}
private JPanel createMapSourcesPane() {
mapDataTree = new MapDataTree(this.getRootNode());
mapDataTree.setEditable(false);
mapDataTree.selectDefaultTreeNode();
sourceComboBox = new FRTreeComboBox(mapDataTree, mapDataTree.getCellRenderer()) {
//搜索
protected void dealSamePath(TreePath parent, TreeNode node, UITextField textField) {
String searchText = textField.getText();
GeoUrlPane.this.mapDataTree.search(searchText);
}
//选中 tree---combobox
public void setSelectedItem(Object o) {
TreePath oldPath = mapDataTree.getSelectionPath();
Object oldText = getSelectedItem();
if (o != null && o instanceof TreePath) {
selectTreePath = (TreePath) o;
this.tree.setSelectionPath(selectTreePath);
this.getModel().setSelectedItem(pathToString(selectTreePath));
if (ComparatorUtils.equals(oldText, getSelectedItem()) && !ComparatorUtils.equals(oldPath, selectTreePath)) {
//point的江苏省切换到area的江苏省
listener.doChange();
}
} else if (o instanceof String) {//list里面没有
selectTreePath = null;
this.tree.setSelectionPath(null);
this.getModel().setSelectedItem(ChartGEOJSONHelper.getPresentNameWithPath((String) o));
}
}
@Override
protected String pathToString(TreePath path) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
//不显示后缀
return ChartGEOJSONHelper.getPresentNameWithPath(node.toString());
}
@Override
protected boolean customSelectable(DefaultMutableTreeNode node) {
return GEOJSONTreeHelper.isSelectableTreeNode(node);
}
};
sourceComboBox.setEditable(true);
sourceComboBox.setOnlyLeafSelectable(false);
sourceComboBox.addPopupMenuListener(popupMenuListener);
sourceTitleLabel = createSourceTitleLabel();
boolean hasRefreshButton = !WorkContext.getCurrent().isLocal();
UIButton button = new UIButton(IOUtils.readIcon("/com/fr/design/images/control/refresh.png"));
button.setToolTipText(Toolkit.i18nText("Fine-Design_Chart_Update_Remote_Map_JSON"));
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
GEOJSONHelper.reset();
GEOJSONHelper.getInstance();
}
});
double p = TableLayout.PREFERRED;
double d = TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH;
double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
double f = TableLayout.FILL;
double[] rowSize = {p, p};
double[] columnSize = hasRefreshButton ? new double[]{d + 10, e - 20, 20} : new double[]{f, e};
Component[] comps = hasRefreshButton
? new Component[]{sourceTitleLabel, sourceComboBox, button}
: new Component[]{sourceTitleLabel, sourceComboBox};
double hGap = hasRefreshButton ? 0 : TableLayout4VanChartHelper.COMPONENT_INTERVAL;
Component[][] components = new Component[][]{
new Component[]{null, null},
comps,
};
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, hGap, LayoutConstants.VGAP_LARGE);
}
protected UILabel createSourceTitleLabel() {
return new UILabel(Toolkit.i18nText("Fine-Design_Chart_Map_Area"));
}
protected TreeNode getRootNode() {
return GEOJSONTreeHelper.getInstance().getRootNodeWithPara();
}
private String[] getParamsName() {
JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
if (jTemplate == null) {
return new String[0];
}
Parameter[] parameters = jTemplate.getJTemplateParameters();
int len = parameters.length;
String[] names = new String[len];
for (int i = 0; i < len; i++) {
names[i] = parameters[i].getName();
}
return names;
}
private PopupMenuListener popupMenuListener = new PopupMenuListener() {
public void popupMenuCanceled(PopupMenuEvent e) {
}
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
}
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
GEOJSONTreeHelper.reset();
mapDataTree.changeRootNode(GeoUrlPane.this.getRootNode());
GEOJSONTreeHelper.getInstance().updateParamRootNode(GeoUrlPane.this.getParamsName());
if (selectTreePath != null) {
mapDataTree.setSelectNodePath(CompatibleGEOJSONHelper.completeJSONName(selectTreePath.getLastPathComponent().toString()));
selectTreePath = mapDataTree.getSelectionPath();
}
mapDataTree.updateUI();//因为服务器那边可能随时编辑,所以这边要重画
mapDataTree.setSelectionPath(selectTreePath);
mapDataTree.scrollPathToVisible(selectTreePath);
}
};
public void populate(VanChartMapPlot mapPlot) {
resetComponentValue(mapPlot, false);
String geoUrl = mapPlot.getGeoUrl();
mapDataTree.setSelectNodePath(geoUrl);
selectTreePath = mapDataTree.getSelectionPath();
if (selectTreePath == null) {//此url当前环境没有
sourceComboBox.setSelectedItem(geoUrl);
} else {
sourceComboBox.setSelectedItem(selectTreePath);
}
boolean enabled = !CompatibleGEOJSONHelper.isDeprecated(mapPlot.getGeoUrl());
GUICoreUtils.setEnabled(sourceComboBox, enabled);
}
public String update() {
return mapDataTree.getSelectNodeJSONPath();
}
protected void resetComponentValue(VanChartMapPlot mapPlot, boolean samePlotChange) {
MapType mapType = mapPlot.getMapType();
//获取最新的参数
String[] params = getParamsName();
if (!ComparatorUtils.equals(oldParams, params)) {
oldParams = params;
GEOJSONTreeHelper.getInstance().updateParamRootNode(params);
}
mapDataTree.changeRootNode(this.getRootNode());
if (samePlotChange) {
String nodePath = ChartGEOJSONHelper.getDefaultJSONURL();
mapPlot.setGeoUrl(nodePath);
mapDataTree.setSelectNodePath(nodePath);
selectTreePath = mapDataTree.getSelectionPath();
sourceComboBox.setSelectedItem(selectTreePath);
}
switch (mapType) {
case CUSTOM:
sourceTitleLabel.setText(Toolkit.i18nText("Fine-Design_Chart_Map_Area_And_Point"));
break;
case POINT:
sourceTitleLabel.setText(Toolkit.i18nText("Fine-Design_Chart_Map_Point"));
break;
case LINE:
sourceTitleLabel.setText(Toolkit.i18nText("Fine-Design_Chart_Map_Point"));
break;
default:
sourceTitleLabel.setText(Toolkit.i18nText("Fine-Design_Chart_Map_Area"));
}
}
}

303
designer-chart/src/main/java/com/fr/van/chart/map/designer/type/GisLayerPane.java

@ -0,0 +1,303 @@
package com.fr.van.chart.map.designer.type;
import com.fr.base.Utils;
import com.fr.design.event.UIObserver;
import com.fr.design.event.UIObserverListener;
import com.fr.design.gui.ibutton.UIButtonGroup;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.general.ComparatorUtils;
import com.fr.plugin.chart.base.GisLayer;
import com.fr.plugin.chart.map.VanChartMapPlot;
import com.fr.plugin.chart.map.server.MapLayerConfigManager;
import com.fr.plugin.chart.type.GISLayerType;
import com.fr.plugin.chart.type.GaoDeGisType;
import com.fr.plugin.chart.type.ZoomLevel;
import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JPanel;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ItemEvent;
/**
* @author Bjorn
* @version 10.0
* Created by Bjorn on 2020-12-07
*/
public class GisLayerPane extends JPanel implements UIObserver {
private UIButtonGroup gisButton;
private JPanel layerPaneCheckPane;
private UIComboBox gisGaoDeLayer;
private UIComboBox gisLayer;
private JPanel layerCardPane;
private WMSLayerPane wmsLayerPane;
private TileLayerPane tileLayerPane;
private UIComboBox zoomLevel;
private String[] layers = MapLayerConfigManager.getLayerItems();
public GisLayerPane() {
initComps();
}
private void initComps() {
this.setLayout(new BorderLayout());
this.add(createGISLayerPane(), BorderLayout.CENTER);
}
@Override
public void registerChangeListener(UIObserverListener listener) {
this.wmsLayerPane.registerChangeListener(listener);
}
@Override
public boolean shouldResponseChangeListener() {
return true;
}
public void registerZoomLevel(UIComboBox zoomLevel) {
this.zoomLevel = zoomLevel;
}
private boolean isStandardGis() {
return gisButton.getSelectedIndex() == 0;
}
private JPanel createGISLayerPane() {
gisButton = new UIButtonGroup(new String[]{Toolkit.i18nText("Fine-Design_Form_Widget_Style_Standard"), Toolkit.i18nText("Fine-Design_Chart_Custom")});
gisGaoDeLayer = new UIComboBox(MapLayerConfigManager.getGaoDeLayerItems());
gisButton.addActionListener(event -> {
refreshZoomLevel();
checkLayerCardPane();
});
gisGaoDeLayer.addItemListener(event -> refreshZoomLevel());
initCustomGISLayerPane();
initLayerCardPane();
layerPaneCheckPane = new JPanel(new CardLayout()) {
@Override
public Dimension getPreferredSize() {
if (isStandardGis()) {
return gisGaoDeLayer.getPreferredSize();
} else {
return gisLayer.getPreferredSize();
}
}
};
layerPaneCheckPane.add(gisGaoDeLayer, "standard");
layerPaneCheckPane.add(gisLayer, "custom");
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
double[] row = {p, p, p};
double[] col = {f, e};
Component[][] components = new Component[][]{
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Gis_Layer")), gisButton},
new Component[]{null, layerPaneCheckPane},
new Component[]{layerCardPane, null},
};
JPanel panel = TableLayoutHelper.createTableLayoutPane(components, row, col);
panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));
return panel;
}
private void initLayerCardPane() {
tileLayerPane = new TileLayerPane();
wmsLayerPane = new WMSLayerPane();
layerCardPane = new JPanel(new CardLayout()) {
@Override
public Dimension getPreferredSize() {
if (isStandardGis()) {
return new Dimension(0, 0);
}
String itemName = Utils.objectToString(gisLayer.getSelectedItem());
if (MapLayerConfigManager.isCustomLayer(itemName)) {
return tileLayerPane.getPreferredSize();
} else if (MapLayerConfigManager.isCustomWmsLayer(itemName)) {
return wmsLayerPane.getPreferredSize();
}
return new Dimension(0, 0);
}
};
for (String itemName : layers) {
JPanel pane = new JPanel();
if (MapLayerConfigManager.isCustomLayer(itemName)) {
pane = tileLayerPane;
} else if (MapLayerConfigManager.isCustomWmsLayer(itemName)) {
pane = wmsLayerPane;
}
layerCardPane.add(pane, itemName);
}
}
private void initCustomGISLayerPane() {
gisLayer = new UIComboBox(layers);
gisLayer.addItemListener(e ->
{
if (e.getStateChange() == ItemEvent.SELECTED) {
checkCustomLayerCardPane();
}
refreshZoomLevel();
}
);
gisLayer.addPopupMenuListener(new PopupMenuListener() {
public void popupMenuCanceled(PopupMenuEvent e) {
}
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
}
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
String selected = Utils.objectToString(gisLayer.getSelectedItem());
ZoomLevel zoomSelected = (ZoomLevel) zoomLevel.getSelectedItem();
gisLayer.setModel(new DefaultComboBoxModel(MapLayerConfigManager.getLayerItems()));
gisLayer.setSelectedItem(selected);
zoomLevel.setSelectedItem(zoomSelected);
}
});
}
private void refreshZoomLevel() {
//gis图层不同,对应的缩放等级不同。
ZoomLevel[] levels;
if (isStandardGis()) {
if (gisGaoDeLayer.getSelectedIndex() == gisGaoDeLayer.getItemCount() - 1) {
levels = MapStatusPane.ZOOM_LEVELS;
} else {
levels = MapStatusPane.GAODE_ZOOM_LEVELS;
}
} else {
if (ComparatorUtils.equals(gisLayer.getSelectedItem(), Toolkit.i18nText("Fine-Design_Chart_Layer_Blue"))) {
levels = MapStatusPane.BLUE_ZOOM_LEVELS;
} else if (ComparatorUtils.equals(gisLayer.getSelectedItem(), Toolkit.i18nText("Fine-Design_Chart_Layer_GaoDe"))) {
levels = MapStatusPane.GAODE_ZOOM_LEVELS;
} else {
levels = MapStatusPane.ZOOM_LEVELS;
}
}
zoomLevel.setModel(new DefaultComboBoxModel(levels));
}
private void checkLayerCardPane() {
CardLayout cardLayout = (CardLayout) layerPaneCheckPane.getLayout();
cardLayout.show(layerPaneCheckPane, isStandardGis() ? "standard" : "custom");
}
private void checkCustomLayerCardPane() {
CardLayout cardLayout = (CardLayout) layerCardPane.getLayout();
cardLayout.show(layerCardPane, Utils.objectToString(gisLayer.getSelectedItem()));
}
public void resetGisLayer(VanChartMapPlot mapPlot) {
//TODO Bjorn 地图gis图层自动逻辑
/* mapPlot.getGisLayer().setGisLayerType(GISLayerType.AUTO);
mapPlot.getGisLayer().setLayerName(GISLayerType.getLocString(GISLayerType.AUTO));*/
GaoDeGisType gaoDeGisType= mapPlot.getDefaultGisLayerType();
mapPlot.getGisLayer().setGisLayerType(GISLayerType.GAO_DE_API);
mapPlot.getGisLayer().setLayerName(gaoDeGisType.getTypeName());
mapPlot.getGisLayer().setGaoDeGisType(gaoDeGisType);
populate(mapPlot.getGisLayer());
}
public void populate(GisLayer layer) {
switch (layer.getGisLayerType()) {
case GAO_DE_API:
case LAYER_NULL:
populateStandardGis(layer);
break;
default:
populateCustomGis(layer);
}
refreshZoomLevel();
checkCustomLayerCardPane();
checkLayerCardPane();
}
private void populateStandardGis(GisLayer layer) {
gisButton.setSelectedIndex(0);
if (layer.getGisLayerType() == GISLayerType.LAYER_NULL) {
gisGaoDeLayer.setSelectedIndex(gisGaoDeLayer.getItemCount() - 1);
} else {
gisGaoDeLayer.setSelectedItem(layer.getGaoDeGisType().getTypeName());
}
}
private void populateCustomGis(GisLayer layer) {
gisButton.setSelectedIndex(1);
gisLayer.setSelectedItem(layer.getShowItemName());
switch (layer.getGisLayerType()) {
case CUSTOM_WMS_LAYER:
wmsLayerPane.populate(layer);
break;
case CUSTOM_TILE_LAYER:
tileLayerPane.populate(layer);
break;
}
}
public void update(GisLayer layer) {
if (isStandardGis()) {
updateStandardGis(layer);
} else {
updateCustomGis(layer);
}
}
private void updateStandardGis(GisLayer layer) {
String layerName = Utils.objectToString(gisGaoDeLayer.getSelectedItem());
layer.setLayerName(layerName);
if (gisGaoDeLayer.getSelectedIndex() == gisGaoDeLayer.getItemCount() - 1) {
layer.setGisLayerType(MapLayerConfigManager.getGisLayerType(layerName));
} else {
layer.setGisLayerType(GISLayerType.GAO_DE_API);
layer.setGaoDeGisType(GaoDeGisType.parseByLocaleName(layerName));
}
}
private void updateCustomGis(GisLayer layer) {
String layerName = Utils.objectToString(gisLayer.getSelectedItem());
layer.setLayerName(layerName);
layer.setGisLayerType(MapLayerConfigManager.getGisLayerType(layerName));
switch (layer.getGisLayerType()) {
case CUSTOM_WMS_LAYER:
wmsLayerPane.update(layer);
break;
case CUSTOM_TILE_LAYER:
tileLayerPane.update(layer);
break;
}
}
}

167
designer-chart/src/main/java/com/fr/van/chart/map/designer/type/MapStatusPane.java

@ -0,0 +1,167 @@
package com.fr.van.chart.map.designer.type;
import com.fr.design.gui.ibutton.UIButtonGroup;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.ispinner.UISpinner;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.TableLayout;
import com.fr.plugin.chart.base.ViewCenter;
import com.fr.plugin.chart.map.VanChartMapPlot;
import com.fr.plugin.chart.type.ZoomLevel;
import com.fr.stable.ArrayUtils;
import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
/**
* @author Bjorn
* @version 10.0
* Created by Bjorn on 2020-12-07
*/
public class MapStatusPane extends JPanel {
public static final ZoomLevel[] ZOOM_LEVELS = new ZoomLevel[]{
ZoomLevel.AUTO,
ZoomLevel.ZERO, ZoomLevel.ZEROPOINTFIVE,
ZoomLevel.ONE, ZoomLevel.ONEPOINTFIVE,
ZoomLevel.TWO, ZoomLevel.TWOPOINTFIVE,
ZoomLevel.THREE, ZoomLevel.THREEPOINTFIVE,
ZoomLevel.FOUR, ZoomLevel.FOURPOINTFIVE,
ZoomLevel.FIVE, ZoomLevel.FIVEPOINTFIVE,
ZoomLevel.SIX, ZoomLevel.SIXPOINTFIVE,
ZoomLevel.SEVEN, ZoomLevel.SEVENPOINTFIVE,
ZoomLevel.EIGHT, ZoomLevel.EIGHTPOINTFIVE,
ZoomLevel.NINE, ZoomLevel.NINEPOINTFIVE,
ZoomLevel.TEN, ZoomLevel.TENPOINTFIVE,
ZoomLevel.ELEVEN, ZoomLevel.ELEVENTPOINTFIVE,
ZoomLevel.TWELVE, ZoomLevel.TWELVEPOINTFIVE,
ZoomLevel.THIRTEEN, ZoomLevel.THIRTEENPOINTFIVE,
ZoomLevel.FOURTEEN, ZoomLevel.FOURTEENPOINTFIVE,
ZoomLevel.FIFTEEN, ZoomLevel.FIFTEENPOINTFIVE,
ZoomLevel.SIXTEEN, ZoomLevel.SIXTEENPOINTFIVE,
ZoomLevel.SEVENTEEN, ZoomLevel.SEVENTEENPOINTFIVE,
ZoomLevel.EIGHTEEN
};
//深蓝和高德地图下拉框层级
public static final ZoomLevel[] BLUE_ZOOM_LEVELS = ArrayUtils.subarray(ZOOM_LEVELS, 0, 34);
public static final ZoomLevel[] GAODE_ZOOM_LEVELS = ArrayUtils.addAll(new ZoomLevel[]{ZoomLevel.AUTO}, (ZoomLevel[]) ArrayUtils.subarray(ZOOM_LEVELS, 7, 38));
private static final String AUTO_CENTER_STRING = Toolkit.i18nText("Fine-Design_Chart_Automatic");
private static final String CUSTOM_CENTER_STRING = Toolkit.i18nText("Fine-Design_Chart_Custom");
private JPanel levelAndCenterPane;
private JPanel longAndLatPane;
private UIComboBox zoomLevel;
private UIButtonGroup viewCenterCom;
private UISpinner longitude;
private UISpinner latitude;
public MapStatusPane() {
initComps();
}
public UIComboBox getZoomLevel() {
return zoomLevel;
}
private void initComps() {
zoomLevel = new UIComboBox(ZOOM_LEVELS);
viewCenterCom = new UIButtonGroup(new String[]{AUTO_CENTER_STRING, CUSTOM_CENTER_STRING});
longitude = new UISpinner(-Double.MAX_VALUE, Double.MAX_VALUE, 1, 0.0);
latitude = new UISpinner(-Double.MAX_VALUE, Double.MAX_VALUE, 1, 0.0);
double p = TableLayout.PREFERRED;
double d = TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH;
double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
double s = TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH;
double[] rowSize = {p, p, p};
double[] columnSize = {d, e};
double[] column = {d, s};
Component[][] comps = new Component[][]{
new Component[]{null, null},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Zoom_Layer")), zoomLevel},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_View_Center")), viewCenterCom},
};
levelAndCenterPane = TableLayout4VanChartHelper.createGapTableLayoutPane(comps, rowSize, columnSize);
Component[][] longAndLatComps = new Component[][]{
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Longitude")), longitude},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Latitude")), latitude}
};
longAndLatPane = TableLayout4VanChartHelper.createGapTableLayoutPane(longAndLatComps, rowSize, column);
longAndLatPane.setBorder(BorderFactory.createEmptyBorder(0, 12, 0, 0));
longAndLatPane.setVisible(false);
this.setLayout(new BorderLayout(0, 6));
this.add(levelAndCenterPane, BorderLayout.NORTH);
this.add(longAndLatPane, BorderLayout.CENTER);
viewCenterCom.addActionListener(event ->
longAndLatPane.setVisible(!isAutoViewCenter()));
}
@Override
public Dimension getPreferredSize() {
if (longAndLatPane.isVisible()) {
return super.getPreferredSize();
} else {
return levelAndCenterPane.getPreferredSize();
}
}
private boolean isAutoViewCenter() {
return viewCenterCom.getSelectedIndex() == 0;
}
public void resetViewCenter(VanChartMapPlot mapPlot) {
mapPlot.setViewCenter(new ViewCenter());
viewCenterCom.setSelectedIndex(0);
longitude.setValue(0);
latitude.setValue(0);
longAndLatPane.setVisible(false);
}
public void resetZoomLevel(VanChartMapPlot mapPlot) {
mapPlot.setZoomLevel(ZoomLevel.AUTO);
zoomLevel.setSelectedItem(mapPlot.getZoomLevel());
}
public void populate(VanChartMapPlot mapPlot) {
zoomLevel.setSelectedItem(mapPlot.getZoomLevel());
ViewCenter viewCenter = mapPlot.getViewCenter();
if (viewCenter.isAuto()) {
viewCenterCom.setSelectedIndex(0);
longitude.setValue(0);
latitude.setValue(0);
} else {
viewCenterCom.setSelectedIndex(1);
longitude.setValue(viewCenter.getLongitude());
latitude.setValue(viewCenter.getLatitude());
}
longAndLatPane.setVisible(!isAutoViewCenter());
}
public void update(VanChartMapPlot mapPlot) {
mapPlot.setZoomLevel((ZoomLevel) zoomLevel.getSelectedItem());
ViewCenter viewCenter = mapPlot.getViewCenter();
if (isAutoViewCenter()) {
viewCenter.setAuto(true);
} else {
viewCenter.setAuto(false);
viewCenter.setLongitude(longitude.getValue());
viewCenter.setLatitude(latitude.getValue());
}
}
}

51
designer-chart/src/main/java/com/fr/van/chart/map/designer/type/TileLayerPane.java

@ -0,0 +1,51 @@
package com.fr.van.chart.map.designer.type;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itextarea.UITextArea;
import com.fr.design.layout.TableLayout;
import com.fr.plugin.chart.base.GisLayer;
import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Component;
/**
* @author Bjorn
* @version 10.0
* Created by Bjorn on 2020-12-07
*/
public class TileLayerPane extends JPanel {
private UITextArea customTileLayer;
private UITextArea attribution;
public TileLayerPane() {
double p = TableLayout.PREFERRED;
double[] rowSize = {p, p};
double[] COLUMN_SIZE = {TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH, TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH - 3};
customTileLayer = new UITextArea();
attribution = new UITextArea();
Component[][] comps = new Component[][]{
new Component[]{new UILabel("url"), customTileLayer},
new Component[]{new UILabel("Attribution"), attribution}
};
JPanel panel = TableLayout4VanChartHelper.createGapTableLayoutPane(comps, rowSize, COLUMN_SIZE);
panel.setBorder(TableLayout4VanChartHelper.SECOND_EDIT_AREA_BORDER);
this.setLayout(new BorderLayout());
this.add(panel, BorderLayout.CENTER);
}
public void populate(GisLayer layer) {
customTileLayer.setText(layer.getCustomTileLayer());
attribution.setText(layer.getAttribution());
}
public void update(GisLayer layer) {
layer.setCustomTileLayer(customTileLayer.getText());
layer.setAttribution(attribution.getText());
}
}

1
designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapPlotPane.java

@ -78,7 +78,6 @@ public class VanChartMapPlotPane extends AbstractVanChartTypePane {
boolean enabled = !CompatibleGEOJSONHelper.isDeprecated(plot.getGeoUrl()); boolean enabled = !CompatibleGEOJSONHelper.isDeprecated(plot.getGeoUrl());
GUICoreUtils.setEnabled(this.getTypePane(), enabled); GUICoreUtils.setEnabled(this.getTypePane(), enabled);
GUICoreUtils.setEnabled(this.sourceChoosePane.getSourceComboBox(), enabled);
checkDemosBackground(); checkDemosBackground();
} }

714
designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapSourceChoosePane.java

@ -1,739 +1,113 @@
package com.fr.van.chart.map.designer.type; package com.fr.van.chart.map.designer.type;
import com.fr.base.Parameter;
import com.fr.base.Utils;
import com.fr.decision.webservice.v10.map.WMSFactory;
import com.fr.decision.webservice.v10.map.geojson.helper.GEOJSONHelper;
import com.fr.design.constants.LayoutConstants;
import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.event.UIObserver; import com.fr.design.event.UIObserver;
import com.fr.design.event.UIObserverListener; import com.fr.design.event.UIObserverListener;
import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ibutton.UIButtonGroup;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.icombobox.FRTreeComboBox;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.ispinner.UISpinner;
import com.fr.design.gui.itextarea.UITextArea;
import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.i18n.Toolkit; import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper; import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.JTemplate;
import com.fr.general.ComparatorUtils;
import com.fr.general.IOUtils;
import com.fr.general.http.HttpClient;
import com.fr.plugin.chart.base.GisLayer;
import com.fr.plugin.chart.base.ViewCenter;
import com.fr.plugin.chart.map.VanChartMapPlot; import com.fr.plugin.chart.map.VanChartMapPlot;
import com.fr.plugin.chart.map.designer.type.GEOJSONTreeHelper;
import com.fr.plugin.chart.map.layer.WMSLayer;
import com.fr.plugin.chart.map.server.ChartGEOJSONHelper;
import com.fr.plugin.chart.map.server.CompatibleGEOJSONHelper; import com.fr.plugin.chart.map.server.CompatibleGEOJSONHelper;
import com.fr.plugin.chart.map.server.MapLayerConfigManager;
import com.fr.plugin.chart.type.GISLayerType;
import com.fr.plugin.chart.type.MapType;
import com.fr.plugin.chart.type.ZoomLevel;
import com.fr.stable.ArrayUtils;
import com.fr.van.chart.designer.TableLayout4VanChartHelper; import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import com.fr.van.chart.drillmap.designer.data.comp.MapDataTree;
import com.fr.workspace.WorkContext;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.SwingWorker;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import java.util.ArrayList;
import java.util.List;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Component; import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
/** /**
* Created by Mitisky on 16/5/11. * Created by Mitisky on 16/5/11.
* 地图类型选择面板,关于json资源路径/gis图层等设置面板 * 地图类型选择面板,关于json资源路径/gis图层等设置面板
*/ */
public class VanChartMapSourceChoosePane extends JPanel implements UIObserver { public class VanChartMapSourceChoosePane extends JPanel implements UIObserver {
private static final double[] COLUMN_SIZE = {48, TableLayout.FILL, TableLayout.PREFERRED};
public static final ZoomLevel[] ZOOM_LEVELS = new ZoomLevel[]{
ZoomLevel.AUTO,
ZoomLevel.ZERO, ZoomLevel.ZEROPOINTFIVE,
ZoomLevel.ONE, ZoomLevel.ONEPOINTFIVE,
ZoomLevel.TWO, ZoomLevel.TWOPOINTFIVE,
ZoomLevel.THREE, ZoomLevel.THREEPOINTFIVE,
ZoomLevel.FOUR, ZoomLevel.FOURPOINTFIVE,
ZoomLevel.FIVE, ZoomLevel.FIVEPOINTFIVE,
ZoomLevel.SIX, ZoomLevel.SIXPOINTFIVE,
ZoomLevel.SEVEN, ZoomLevel.SEVENPOINTFIVE,
ZoomLevel.EIGHT, ZoomLevel.EIGHTPOINTFIVE,
ZoomLevel.NINE, ZoomLevel.NINEPOINTFIVE,
ZoomLevel.TEN, ZoomLevel.TENPOINTFIVE,
ZoomLevel.ELEVEN, ZoomLevel.ELEVENTPOINTFIVE,
ZoomLevel.TWELVE, ZoomLevel.TWELVEPOINTFIVE,
ZoomLevel.THIRTEEN, ZoomLevel.THIRTEENPOINTFIVE,
ZoomLevel.FOURTEEN, ZoomLevel.FOURTEENPOINTFIVE,
ZoomLevel.FIFTEEN, ZoomLevel.FIFTEENPOINTFIVE,
ZoomLevel.SIXTEEN, ZoomLevel.SIXTEENPOINTFIVE,
ZoomLevel.SEVENTEEN, ZoomLevel.SEVENTEENPOINTFIVE,
ZoomLevel.EIGHTEEN
};
//深蓝和高德地图下拉框层级
private static final ZoomLevel[] BLUE_ZOOM_LEVELS =(ZoomLevel[]) ArrayUtils.subarray(ZOOM_LEVELS, 0, 34);
private static final ZoomLevel[] GAODE_ZOOM_LEVELS =ArrayUtils.addAll(new ZoomLevel[]{ZoomLevel.AUTO}, (ZoomLevel[])ArrayUtils.subarray(ZOOM_LEVELS, 7, 38));
private static final String AUTO_CENTER_STRING = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Automatic");
private static final String CUSTOM_CENTER_STRING = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom");
private UILabel sourceTitleLabel; private GeoUrlPane geoUrlPane;
private FRTreeComboBox sourceComboBox;
private MapDataTree mapDataTree;
private TreePath selectTreePath;
private UIComboBox gisLayer; private GisLayerPane gisLayerPane;
private JPanel layerCardPane;
private UITextArea wmsUrl; private MapStatusPane mapStatusPane;
private UIButton connectButton;
private JPanel wmsLayerPane;
private java.util.List<UICheckBox> wmsLayerCheckBoxs = new ArrayList<UICheckBox>();
private UITextArea customTileLayer;
private UITextArea attribution;
private UIComboBox zoomLevel;
private UIButtonGroup viewCenterCom;
private JPanel longAndLatPane;
private UISpinner longitude;
private UISpinner latitude;
private String[] oldParams;
private UIObserverListener listener;
private String[] layers = MapLayerConfigManager.getLayerItems();
/**
* 给组件登记一个观察者监听事件
*
* @param listener 观察者监听事件
*/
@Override
public void registerChangeListener(UIObserverListener listener) {
this.listener = listener;
}
/**
* 组件是否需要响应添加的观察者事件
*
* @return 如果需要响应观察者事件则返回true否则返回false
*/
@Override
public boolean shouldResponseChangeListener() {
return true;
}
public VanChartMapSourceChoosePane() { public VanChartMapSourceChoosePane() {
initGeoUrlPane();
initMapStatusPane();
initGisLayerPane();
this.setLayout(new BorderLayout()); this.setLayout(new BorderLayout());
this.setBorder(BorderFactory.createEmptyBorder(10,5,0,0)); this.setBorder(BorderFactory.createEmptyBorder(10, 5, 0, 0));
double p = TableLayout.PREFERRED; double p = TableLayout.PREFERRED;
double[] columnSize = {230}; double[] columnSize = {230};
double[] rowSize = {p,p,p,p,p,p,p,p}; double[] rowSize = {p, p, p, p, p, p, p, p};
JPanel panel = new JPanel(new BorderLayout()); JPanel panel = new JPanel(new BorderLayout());
panel.add(createMapSourcesPane(), BorderLayout.NORTH);
panel.add(createGISLayerPane(), BorderLayout.CENTER);
JPanel BasePane = TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Basic"), panel); panel.add(geoUrlPane, BorderLayout.NORTH);
panel.add(gisLayerPane, BorderLayout.CENTER);
JPanel basePane = TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Report_Basic"), panel);
JPanel mapStatusPaneWithTitle = TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Map_Init_Status"), mapStatusPane);
Component[][] comps = new Component[][]{ Component[][] comps = new Component[][]{
new Component[]{BasePane}, new Component[]{basePane},
new Component[]{createMapInitStatusPane()} new Component[]{mapStatusPaneWithTitle}
}; };
JPanel contentPane = TableLayoutHelper.createTableLayoutPane(comps,rowSize,columnSize); JPanel contentPane = TableLayoutHelper.createTableLayoutPane(comps, rowSize, columnSize);
this.add(contentPane, BorderLayout.CENTER); this.add(contentPane, BorderLayout.CENTER);
} }
protected boolean supportParam(){ public void setGeoUrlPane(GeoUrlPane geoUrlPane) {
return true; this.geoUrlPane = geoUrlPane;
}
protected TreeNode getRootNode() {
return supportParam() ? GEOJSONTreeHelper.getInstance().getRootNodeWithPara() : GEOJSONTreeHelper.getInstance().getRootNodeWithoutPara();
} }
protected UILabel createSourceTitleLabel() { @Override
return new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Map_Area")); public void registerChangeListener(UIObserverListener listener) {
} geoUrlPane.registerChangeListener(listener);
gisLayerPane.registerChangeListener(listener);
private JPanel createMapSourcesPane() {
mapDataTree = new MapDataTree(this.getRootNode());
mapDataTree.setEditable(false);
mapDataTree.selectDefaultTreeNode();
sourceComboBox = new FRTreeComboBox(mapDataTree, mapDataTree.getCellRenderer()){
//搜索
protected void dealSamePath(TreePath parent, TreeNode node, UITextField textField){
String searchText = textField.getText();
VanChartMapSourceChoosePane.this.mapDataTree.search(searchText);
}
//选中 tree---combobox
public void setSelectedItem(Object o) {
TreePath oldPath = mapDataTree.getSelectionPath();
Object oldText = getSelectedItem();
if(o != null && o instanceof TreePath){
selectTreePath =(TreePath)o;
this.tree.setSelectionPath(selectTreePath);
this.getModel().setSelectedItem(pathToString(selectTreePath));
if(ComparatorUtils.equals(oldText, getSelectedItem()) && !ComparatorUtils.equals(oldPath, selectTreePath)) {
//point的江苏省切换到area的江苏省
listener.doChange();
}
} else if(o instanceof String){//list里面没有
selectTreePath = null;
this.tree.setSelectionPath(null);
this.getModel().setSelectedItem(ChartGEOJSONHelper.getPresentNameWithPath((String) o));
}
}
@Override
protected String pathToString(TreePath path) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
//不显示后缀
return ChartGEOJSONHelper.getPresentNameWithPath(node.toString());
}
@Override
protected boolean customSelectable(DefaultMutableTreeNode node){
return GEOJSONTreeHelper.isSelectableTreeNode(node);
}
};
sourceComboBox.setEditable(true);
sourceComboBox.setOnlyLeafSelectable(false);
sourceComboBox.addPopupMenuListener(popupMenuListener);
sourceTitleLabel = createSourceTitleLabel();
boolean hasRefreshButton = !WorkContext.getCurrent().isLocal();
UIButton button = new UIButton(IOUtils.readIcon("/com/fr/design/images/control/refresh.png"));
button.setToolTipText(Toolkit.i18nText("Fine-Design_Chart_Update_Remote_Map_JSON"));
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
GEOJSONHelper.reset();
GEOJSONHelper.getInstance();
}
});
double p = TableLayout.PREFERRED;
double d = TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH;
double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
double[] rowSize = {p, p};
double[] columnSize = hasRefreshButton ? new double[]{d + 10, e - 20, 20} : new double[]{d, e};
Component[] comps = hasRefreshButton ? new Component[]{sourceTitleLabel, sourceComboBox, button} : new Component[]{sourceTitleLabel, sourceComboBox};
double hGap = hasRefreshButton ? 0 : TableLayout4VanChartHelper.COMPONENT_INTERVAL;
Component[][] components = new Component[][]{
new Component[]{null,null},
comps,
};
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, hGap, LayoutConstants.VGAP_LARGE);
}
private JPanel createGISLayerPane() {
JPanel panel = new JPanel(new BorderLayout(0, 8));
gisLayer = new UIComboBox(layers);
gisLayer.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
refreshZoomLevel();
}
});
gisLayer.addPopupMenuListener(new PopupMenuListener() {
public void popupMenuCanceled(PopupMenuEvent e) {
}
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
}
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
String selected = Utils.objectToString(gisLayer.getSelectedItem());
ZoomLevel zoomSelected = (ZoomLevel) zoomLevel.getSelectedItem();
gisLayer.setModel(new DefaultComboBoxModel(MapLayerConfigManager.getLayerItems()));
gisLayer.setSelectedItem(selected);
zoomLevel.setSelectedItem(zoomSelected);
}
});
gisLayer.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
checkLayerCardPane();
}
}
});
final JPanel tileLyaerPane = createCustomTileLayer();
final JPanel wmsLayerPane = createWMSPanel();
layerCardPane = new JPanel(new CardLayout()){
@Override
public Dimension getPreferredSize() {
String itemName = Utils.objectToString(gisLayer.getSelectedItem());
if (MapLayerConfigManager.isCustomLayer(itemName)) {
return tileLyaerPane.getPreferredSize();
} else if (MapLayerConfigManager.isCustomWmsLayer(itemName)) {
return wmsLayerPane.getPreferredSize();
}
return new Dimension(0,0);
}
};
for(String itemName : layers){
JPanel pane = new JPanel();
if (MapLayerConfigManager.isCustomLayer(itemName)) {
pane = tileLyaerPane;
} else if (MapLayerConfigManager.isCustomWmsLayer(itemName)) {
pane = wmsLayerPane;
}
layerCardPane.add(pane, itemName);
}
JPanel panel1 = TableLayout4VanChartHelper.createGapTableLayoutPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Gis_Layer"), gisLayer);
panel.add(panel1, BorderLayout.CENTER);
panel.add(layerCardPane, BorderLayout.SOUTH);
return panel;
}
private void refreshZoomLevel(){
//gis图层不同,对应的缩放等级不同。
ZoomLevel[] levels;
if (ComparatorUtils.equals(gisLayer.getSelectedItem(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Layer_Blue"))) {
levels = BLUE_ZOOM_LEVELS;
} else if (ComparatorUtils.equals(gisLayer.getSelectedItem(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Layer_GaoDe"))) {
levels = GAODE_ZOOM_LEVELS;
} else {
levels = ZOOM_LEVELS;
}
zoomLevel.setModel(new DefaultComboBoxModel(levels));
}
private JPanel createCustomTileLayer() {
double p = TableLayout.PREFERRED;
double[] rowSize = {p, p};
double[] COLUMN_SIZE = {TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH, TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH-3};
customTileLayer = new UITextArea();
attribution = new UITextArea();
Component[][] comps = new Component[][]{
new Component[]{new UILabel("url"), customTileLayer},
new Component[]{new UILabel("Attribution"), attribution}
};
JPanel panel = TableLayout4VanChartHelper.createGapTableLayoutPane(comps, rowSize, COLUMN_SIZE);
panel.setBorder(TableLayout4VanChartHelper.SECOND_EDIT_AREA_BORDER);
return panel;
}
private JPanel createWMSPanel() {
final double p = TableLayout.PREFERRED;
double[] rowSize = {p};
double[] COLUMN_SIZE = {TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH, 84,44};
wmsUrl = new UITextArea();
connectButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Connect_WMP"));
Component[][] comps = new Component[][]{
new Component[]{new UILabel("url"), wmsUrl, connectButton}
};
JPanel northPane = TableLayout4VanChartHelper.createGapTableLayoutPane(comps, rowSize, COLUMN_SIZE);
northPane.setBorder(TableLayout4VanChartHelper.SECOND_EDIT_AREA_BORDER);
JPanel wmsPanel = new JPanel(new BorderLayout(0, 4));
wmsLayerPane = new JPanel(new BorderLayout());
resetWMSLayerPane(new ArrayList<WMSLayer>());
wmsPanel.add(northPane, BorderLayout.NORTH);
wmsPanel.add(wmsLayerPane, BorderLayout.CENTER);
connectButton.addActionListener(actionListener);
addMouseListener();
return wmsPanel;
}
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new SwingWorker<Void, Double>() {
private java.util.List<WMSLayer> list = new ArrayList<>();
@Override
protected Void doInBackground() throws Exception {
HttpClient httpClient = new HttpClient(wmsUrl.getText() + "service=WMS&request=GetCapabilities");
httpClient.asGet();
if (!httpClient.isServerAlive()) {
return null;
}
String res = httpClient.getResponseText();
List<String> layers = WMSFactory.readLayers(res);
list.clear();
for (String layer : layers) {
list.add(new WMSLayer(layer, false));
}
return null;
}
@Override
protected void done() {
connectButton.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Connect_WMP"));
if(list != null && list.size() > 0) {
resetWMSLayerPane(list);
} else {
FineJOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Invalid_WMS"));
}
}
}.execute();
}
};
private void addMouseListener() {
connectButton.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
connectButton.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Connecting_WMP"));
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
});
} }
private void resetWMSLayerPane(java.util.List<WMSLayer> wmsLayers) { @Override
public boolean shouldResponseChangeListener() {
int size = wmsLayers.size(); return true;
double[] rowSize = new double[size];
Component[][] comps = new Component[size][2];
wmsLayerCheckBoxs.clear();
wmsLayerPane.removeAll();
for(int i =0; i < size; i++){
rowSize[i] = TableLayout.PREFERRED;
comps[i][0] = i == 0 ? new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_WMS_Layers"), SwingConstants.RIGHT) : null;
WMSLayer layer = wmsLayers.get(i);
UICheckBox checkBox = new UICheckBox(layer.getLayer());
checkBox.registerChangeListener(listener);
checkBox.setToolTipText(layer.getLayer());
checkBox.setSelected(layer.isSelected());
comps[i][1] = checkBox;
wmsLayerCheckBoxs.add(checkBox);
}
wmsLayerPane.add(TableLayoutHelper.createCommonTableLayoutPane(comps,rowSize, COLUMN_SIZE,0), BorderLayout.CENTER);
VanChartMapSourceChoosePane.this.updateUI();
} }
private JPanel createMapInitStatusPane() { protected void initGeoUrlPane() {
zoomLevel = new UIComboBox(ZOOM_LEVELS); geoUrlPane = new GeoUrlPane();
viewCenterCom = new UIButtonGroup(new String[]{AUTO_CENTER_STRING, CUSTOM_CENTER_STRING});
longitude = new UISpinner(-Double.MAX_VALUE,Double.MAX_VALUE,1,0.0);
latitude = new UISpinner(-Double.MAX_VALUE,Double.MAX_VALUE,1,0.0);
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double d = TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH;
double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH;
double s = TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH;
double[] rowSize = {p,p,p};
double[] columnSize = {d, e};
double[] column = {d, s};
Component[][] comps = new Component[][]{
new Component[]{null, null},
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Zoom_Layer")), zoomLevel},
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_View_Center")), viewCenterCom},
};
final JPanel northPane = TableLayout4VanChartHelper.createGapTableLayoutPane(comps,rowSize,columnSize);
Component[][] longAndLatComps = new Component[][]{
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Longitude")), longitude},
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Latitude")), latitude}
};
longAndLatPane =TableLayout4VanChartHelper.createGapTableLayoutPane(longAndLatComps,rowSize,column);
longAndLatPane.setBorder(BorderFactory.createEmptyBorder(0,12,0,0));
longAndLatPane.setVisible(false);
JPanel contentPane = new JPanel(new BorderLayout(0, 6)){
@Override
public Dimension getPreferredSize() {
if(longAndLatPane.isVisible()) {
return super.getPreferredSize();
} else {
return northPane.getPreferredSize();
}
}
};
contentPane.add(northPane, BorderLayout.NORTH);
contentPane.add(longAndLatPane, BorderLayout.CENTER);
viewCenterCom.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
longAndLatPane.setVisible(!isAutoViewCenter());
}
});
return TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Map_Init_Status"), contentPane);
} }
private boolean isAutoViewCenter() { private void initGisLayerPane() {
return viewCenterCom.getSelectedIndex()==0; gisLayerPane = new GisLayerPane();
gisLayerPane.registerZoomLevel(mapStatusPane.getZoomLevel());
} }
private PopupMenuListener popupMenuListener = new PopupMenuListener() { private void initMapStatusPane() {
public void popupMenuCanceled(PopupMenuEvent e) { mapStatusPane = new MapStatusPane();
}
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
}
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
GEOJSONTreeHelper.reset();
mapDataTree.changeRootNode(VanChartMapSourceChoosePane.this.getRootNode());
GEOJSONTreeHelper.getInstance().updateParamRootNode(VanChartMapSourceChoosePane.this.getParams());
if(selectTreePath != null){
mapDataTree.setSelectNodePath(CompatibleGEOJSONHelper.completeJSONName(selectTreePath.getLastPathComponent().toString()));
selectTreePath = mapDataTree.getSelectionPath();
}
mapDataTree.updateUI();//因为服务器那边可能随时编辑,所以这边要重画
mapDataTree.setSelectionPath(selectTreePath);
mapDataTree.scrollPathToVisible(selectTreePath);
}
};
private void checkLayerCardPane() {
CardLayout cardLayout = (CardLayout) layerCardPane.getLayout();
cardLayout.show(layerCardPane, Utils.objectToString(gisLayer.getSelectedItem()));
} }
public void resetComponentValue(VanChartMapPlot mapPlot) { public void resetComponentValue(VanChartMapPlot mapPlot) {
resetComponentValue(mapPlot, true); geoUrlPane.resetComponentValue(mapPlot, true);
//重置图层属性 //重置图层属性
resetGisLayer(mapPlot); gisLayerPane.resetGisLayer(mapPlot);
//重置缩放等级 //重置缩放等级
resetZoomLevel(mapPlot); mapStatusPane.resetZoomLevel(mapPlot);
//重置中心点位置 //重置中心点位置
resetViewCenter(mapPlot); mapStatusPane.resetViewCenter(mapPlot);
} }
protected void resetComponentValue(VanChartMapPlot mapPlot, boolean samePlotChange) {
MapType mapType = mapPlot.getMapType();
//获取最新的参数
String[] params = getParams();
if (!ComparatorUtils.equals(oldParams, params)){
oldParams = params;
GEOJSONTreeHelper.getInstance().updateParamRootNode(params);
}
mapDataTree.changeRootNode(this.getRootNode());
if(samePlotChange) {
String nodePath = ChartGEOJSONHelper.getDefaultJSONURL();
mapPlot.setGeoUrl(nodePath);
mapDataTree.setSelectNodePath(nodePath);
selectTreePath = mapDataTree.getSelectionPath();
sourceComboBox.setSelectedItem(selectTreePath);
}
switch (mapType){
case CUSTOM:
sourceTitleLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Map_Area_And_Point"));
break;
case POINT:
sourceTitleLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Map_Point"));
break;
case LINE:
sourceTitleLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Map_Point"));
break;
default:
sourceTitleLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Map_Area"));
}
}
private String[] getParams() {
JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate();
if (jTemplate == null){
return new String[0];
}
return getParamsName((jTemplate.getJTemplateParameters()));
}
private String[] getParamsName(Parameter[] parameters) {
String[] names = new String[parameters.length];
for (int i = 0; i < parameters.length; i++){
names[i] = parameters[i].getName();
}
return names;
}
private void resetViewCenter(VanChartMapPlot mapPlot) {
mapPlot.setViewCenter(new ViewCenter());
viewCenterCom.setSelectedIndex(0);
longitude.setValue(0);
latitude.setValue(0);
longAndLatPane.setVisible(false);
}
private void resetZoomLevel(VanChartMapPlot mapPlot) {
mapPlot.setZoomLevel(ZoomLevel.AUTO);
zoomLevel.setSelectedItem(mapPlot.getZoomLevel());
}
private void resetGisLayer(VanChartMapPlot mapPlot) {
//TODO Bjorn 地图gis图层自动逻辑
/* mapPlot.getGisLayer().setGisLayerType(GISLayerType.AUTO);
mapPlot.getGisLayer().setLayerName(GISLayerType.getLocString(GISLayerType.AUTO));*/
String layerName = mapPlot.getDefaultGisLayerName();
mapPlot.getGisLayer().setGisLayerType(GISLayerType.PREDEFINED_LAYER);
mapPlot.getGisLayer().setLayerName(layerName);
gisLayer.setSelectedItem(mapPlot.getGisLayer().getShowItemName());
}
public void populateBean(VanChartMapPlot mapPlot) { public void populateBean(VanChartMapPlot mapPlot) {
resetComponentValue(mapPlot, false); geoUrlPane.populate(mapPlot);
gisLayerPane.populate(mapPlot.getGisLayer());
mapDataTree.setSelectNodePath(mapPlot.getGeoUrl()); mapStatusPane.populate(mapPlot);
selectTreePath = mapDataTree.getSelectionPath();
if(selectTreePath == null){//此url当前环境没有
sourceComboBox.setSelectedItem(mapPlot.getGeoUrl());
} else {
sourceComboBox.setSelectedItem(selectTreePath);
}
GisLayer layer = mapPlot.getGisLayer();
gisLayer.setSelectedItem(layer.getShowItemName());
wmsUrl.setText(layer.getWmsUrl());
resetWMSLayerPane(layer.getWmsLayers());
customTileLayer.setText(layer.getCustomTileLayer());
attribution.setText(layer.getAttribution());
refreshZoomLevel();
zoomLevel.setSelectedItem(mapPlot.getZoomLevel());
ViewCenter viewCenter = mapPlot.getViewCenter();
if(viewCenter.isAuto()){
viewCenterCom.setSelectedIndex(0);
longitude.setValue(0);
latitude.setValue(0);
} else {
viewCenterCom.setSelectedIndex(1);
longitude.setValue(viewCenter.getLongitude());
latitude.setValue(viewCenter.getLatitude());
}
longAndLatPane.setVisible(!isAutoViewCenter());
checkLayerCardPane();
} }
public void updateBean(VanChartMapPlot mapPlot) { public void updateBean(VanChartMapPlot mapPlot) {
if(!CompatibleGEOJSONHelper.isDeprecated(mapPlot.getGeoUrl())){ if (!CompatibleGEOJSONHelper.isDeprecated(mapPlot.getGeoUrl())) {
mapPlot.setGeoUrl(mapDataTree.getSelectNodeJSONPath()); mapPlot.setGeoUrl(geoUrlPane.update());
}
GisLayer layer = mapPlot.getGisLayer();
String layerName = Utils.objectToString(gisLayer.getSelectedItem());
layer.setLayerName(layerName);
layer.setGisLayerType(MapLayerConfigManager.getGisLayerType(layerName));
switch (layer.getGisLayerType()){
case CUSTOM_WMS_LAYER:
layer.setWmsUrl(wmsUrl.getText());
layer.setWmsLayers(new ArrayList<WMSLayer>());
for(UICheckBox checkBox : wmsLayerCheckBoxs){
layer.addWmsLayer(new WMSLayer(checkBox.getText(), checkBox.isSelected()));
}
break;
case CUSTOM_TILE_LAYER:
layer.setCustomTileLayer(customTileLayer.getText());
layer.setAttribution(attribution.getText());
break;
} }
mapPlot.setZoomLevel((ZoomLevel) zoomLevel.getSelectedItem()); gisLayerPane.update(mapPlot.getGisLayer());
mapStatusPane.update(mapPlot);
ViewCenter viewCenter = mapPlot.getViewCenter();
if(isAutoViewCenter()){
viewCenter.setAuto(true);
} else {
viewCenter.setAuto(false);
viewCenter.setLongitude(longitude.getValue());
viewCenter.setLatitude(latitude.getValue());
}
}
public UIComboBox getSourceComboBox(){
return this.sourceComboBox;
} }
} }

165
designer-chart/src/main/java/com/fr/van/chart/map/designer/type/WMSLayerPane.java

@ -0,0 +1,165 @@
package com.fr.van.chart.map.designer.type;
import com.fr.decision.webservice.v10.map.WMSFactory;
import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.event.UIObserver;
import com.fr.design.event.UIObserverListener;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itextarea.UITextArea;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.general.http.HttpClient;
import com.fr.plugin.chart.base.GisLayer;
import com.fr.plugin.chart.map.layer.WMSLayer;
import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.SwingWorker;
import java.util.ArrayList;
import java.util.List;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
/**
* @author Bjorn
* @version 10.0
* Created by Bjorn on 2020-12-07
*/
public class WMSLayerPane extends JPanel implements UIObserver {
private static final double[] COLUMN_SIZE = {48, TableLayout.FILL, TableLayout.PREFERRED};
private UITextArea wmsUrl;
private UIButton connectButton;
private JPanel wmsLayerPane;
private List<UICheckBox> wmsLayerCheckBoxs = new ArrayList<>();
private UIObserverListener listener;
@Override
public void registerChangeListener(UIObserverListener listener) {
this.listener = listener;
}
@Override
public boolean shouldResponseChangeListener() {
return true;
}
public WMSLayerPane() {
final double p = TableLayout.PREFERRED;
double[] rowSize = {p};
double[] COLUMN_SIZE = {TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH, 84, 44};
wmsUrl = new UITextArea();
connectButton = new UIButton(Toolkit.i18nText("Fine-Design_Chart_Connect_WMP"));
Component[][] comps = new Component[][]{
new Component[]{new UILabel("url"), wmsUrl, connectButton}
};
JPanel northPane = TableLayout4VanChartHelper.createGapTableLayoutPane(comps, rowSize, COLUMN_SIZE);
northPane.setBorder(TableLayout4VanChartHelper.SECOND_EDIT_AREA_BORDER);
wmsLayerPane = new JPanel(new BorderLayout());
resetWMSLayerPane(new ArrayList<>());
this.setLayout(new BorderLayout(0, 6));
this.add(northPane, BorderLayout.NORTH);
this.add(wmsLayerPane, BorderLayout.CENTER);
addListener();
}
private void addListener() {
connectButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new SwingWorker<Void, Double>() {
private java.util.List<WMSLayer> list = new ArrayList<>();
@Override
protected Void doInBackground() {
HttpClient httpClient = new HttpClient(wmsUrl.getText() + "service=WMS&request=GetCapabilities");
httpClient.asGet();
if (!httpClient.isServerAlive()) {
return null;
}
String res = httpClient.getResponseText();
List<String> layers = WMSFactory.readLayers(res);
list.clear();
for (String layer : layers) {
list.add(new WMSLayer(layer, false));
}
return null;
}
@Override
protected void done() {
connectButton.setText(Toolkit.i18nText("Fine-Design_Chart_Connect_WMP"));
if (list != null && list.size() > 0) {
resetWMSLayerPane(list);
} else {
FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Design_Chart_Invalid_WMS"));
}
}
}.execute();
}
});
connectButton.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
connectButton.setText(Toolkit.i18nText("Fine-Design_Chart_Connecting_WMP"));
}
});
}
private void resetWMSLayerPane(java.util.List<WMSLayer> wmsLayers) {
int size = wmsLayers.size();
double[] rowSize = new double[size];
Component[][] comps = new Component[size][2];
wmsLayerCheckBoxs.clear();
wmsLayerPane.removeAll();
for (int i = 0; i < size; i++) {
rowSize[i] = TableLayout.PREFERRED;
comps[i][0] = i == 0 ? new UILabel(Toolkit.i18nText("Fine-Design_Chart_WMS_Layers"), SwingConstants.RIGHT) : null;
WMSLayer layer = wmsLayers.get(i);
UICheckBox checkBox = new UICheckBox(layer.getLayer());
checkBox.registerChangeListener(listener);
checkBox.setToolTipText(layer.getLayer());
checkBox.setSelected(layer.isSelected());
comps[i][1] = checkBox;
wmsLayerCheckBoxs.add(checkBox);
}
wmsLayerPane.add(TableLayoutHelper.createCommonTableLayoutPane(comps, rowSize, COLUMN_SIZE, 0), BorderLayout.CENTER);
updateUI();
}
public void populate(GisLayer layer) {
wmsUrl.setText(layer.getWmsUrl());
resetWMSLayerPane(layer.getWmsLayers());
}
public void update(GisLayer layer) {
layer.setWmsUrl(wmsUrl.getText());
layer.setWmsLayers(new ArrayList<>());
for (UICheckBox checkBox : wmsLayerCheckBoxs) {
layer.addWmsLayer(new WMSLayer(checkBox.getText(), checkBox.isSelected()));
}
}
}
Loading…
Cancel
Save