Geoserver源码解读六 插件

系列文章目录

Geoserver源码解读一 环境搭建

Geoserver源码解读二 主入口

Geoserver源码解读三 GeoServerBasePage

Geoserver源码解读四 REST服务

Geoserver源码解读五 Catalog

Geoserver源码解读六 插件(怎么在开发模式下使用)

目录

系列文章目录

前言

一、源码位置

二、开发模式下怎么使用

三、文件资源管理插件(Resource Browser Tool)

1.概览 

2.支持多文件上传

2.1 改动一

2.2 改动二

2.3 改动三

2.4 改动四

3.国际化i18n配置

3.1 第一步 新建GeoServerApplication_zh.properties资源包

3.2 第二步 翻译并转成 ISO-8859 编码


前言

看这篇文章的人相信肯定已经知道geoserver的插件大致有哪些,实用的有哪些,我就不再多说了。简单附上一个插件的下载地址(传送门)。

因为geoserver官方社区给出的插件有很多,此处就不一一说明,这篇文章主要记录下插件的源码位置在哪和怎么在开发模式下使用插件以及以文件资源管理插件为例分析下改造的一个过程。

一、源码位置

从源码中能看到有一个【extension】文件夹(这点儿我还是比较意外的,插件的源码竟然也在源码里面,本来我还以为是另外一个需要单独下载的工程)

默认情况下它是没有蓝色小方块的,只有当你用到它时idea才会加一个蓝色小方块的标识。

二、开发模式下怎么使用

geoserver官方社区的插件在使用的时候,一般都是下载下来插件,然后放到geoserver安装目录的lib文件夹下,然后重启geoserver就行,但是在开发模式下怎么安装插件呢。

常规的思路是在主模块gs-web-app里面引用extension的下面的插件子模块应该可以了,但是我又在 pom.xml文件里发现了一些关于插件的profiles设置

于是乎,打开了maven的设置面板,勾选上想要使用的插件,再点击下刷新按钮就可以了 

三、文件资源管理插件(Resource Browser Tool)

1.概览 

       在maven的配置界面勾选上后,重启geoserver就能在浏览器界面中看到它了

没有做过i18n处理的小伙伴看到的估计名字是【Resource Browser】,这个后面再讲,这个文件资源管理器有个缺点,就是每次上传文件的时候只能上传一个,如果要想上传一个shp文件到服务器就废老劲了,咱们稍微改造下它,让它支持多文件上传

2.支持多文件上传

看过上面第一段的描述后可以看出来它的源码位置在这个地方

src/extension/web-resource

2.1 改动一

看过我前面文章的朋友们应该也知道,geoserver是基于Wicket做的,这个文件资源管理器也是一样的,先找到它的html页面

src/main/resources/org/geoserver/web/resources/PanelUpload.html

这个地方做第一个小改动

<input wicket:id="file" size="40" type="file" multiple>

在input标签上加一个multiple

2.2 改动二

在它的java类上添加查询上传的文件列表方法

org/geoserver/web/resources/PanelUpload.java

    /*** 获取上传的文件列表* @return List<FileUpload>*/public List<FileUpload> getFileUploadList() {return ((FileUploadField) get("file")).getFileUploads();}

2.3 改动三

在资源浏览器类中加获取上传的文件资源列表方法

org/geoserver/web/resources/PageResourceBrowser.java

    /*** 获取文件上传组件的文件列表* @param uploadPanel 文件上传组件* @return List<Resource>*/private List<Resource> getUploadPanelResourceList(PanelUpload uploadPanel) {String dir = uploadPanel.getDirectory();List<Resource> uploadPanelResourceList = new ArrayList<>();uploadPanel.getFileUploadList().forEach(singleFileUpload->{uploadPanelResourceList.add(store().get(Paths.path(dir, singleFileUpload.getClientFileName())));});return uploadPanelResourceList;}

2.4 改动四

在PageResourceBrowser类的上传按钮的提交事件回调中加处理方法

    @Overrideprotected boolean onSubmit(AjaxRequestTarget target, Component contents) {uploadPanel.getFeedbackMessages().clear();if (uploadPanel.getFileUpload() == null) {uploadPanel.error(new ParamResourceModel("fileRequired", getPage()).getString());} else {List<Resource> uploadPanelResourceList = getUploadPanelResourceList(uploadPanel);AtomicInteger successNumber = new AtomicInteger();uploadPanelResourceList.forEach(singleResource->{if (Resources.exists(singleResource)) {uploadPanel.error(new ParamResourceModel("resourceExists", getPage()).getString().replace("%", "/" + singleResource.path()));} else {try (OutputStream os = singleResource.out()) {IOUtils.copy(uploadPanel.getFileUpload().getInputStream(), os);treeView.setSelectedNode(new ResourceNode(singleResource, expandedStates), target);successNumber.getAndIncrement();
//                                            return true;} catch (IOException | IllegalStateException e) {uploadPanel.error(e.getMessage());}}});if(successNumber.get() == uploadPanelResourceList.size()){return true;}}target.add(uploadPanel.getFeedbackPanel());return false;}

到这儿这个功能就完成了,可以看到下面的多选文件的效果

3.国际化i18n配置

        关于i18n,geoserver官方也给出了一些描述

Translating GeoServer — GeoServer 2.25.x Developer Manual

我们就按照它官网的说明来(不配置也没关系,只不过默认显示的文字是英文)

3.1 第一步 新建GeoServerApplication_zh.properties资源包

从上图能看出来,这个插件默认只有德、法、韩等一些小国家的兼容,没有中文的,所以有必要让它兼容下中文,文件的内容可以拷贝GeoServerApplication.properties

3.2 第二步 翻译并转成 ISO-8859 编码

以插件的title为例在GeoServerApplication.properties中看到下面的描述

PageResourceBrowser.page.title=Resource Browser

翻译成中文是

PageResourceBrowser.page.title=文件资源管理器

但是GeoServerApplication.properties默认是不认中文的,只能用ISO-8859编码,所有要再做一个转换,网上在线转换的网址有很多,比如这个(传送门)

转换成ISO-8859编码后是

PageResourceBrowser.page.title=\u6587\u4ef6\u8d44\u6e90\u6d4f\u89c8\u5668

把其他的配置全改完之后重启geoserver就能看到插件的中文的界面了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/870546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

看番工具 -- oneAnime v1.2.5绿色版

软件简介 OneAnime是一款专为动漫爱好者设计的应用程序&#xff0c;它提供了一个庞大的动漫资源库&#xff0c;用户可以在这里找到各种类型的动漫&#xff0c;包括热门的、经典的、新番的等等。OneAnime的界面设计简洁明了&#xff0c;操作方便&#xff0c;用户可以轻松地搜索…

C++系列-Vector(一)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” Vector的介绍及使用 Vector的介绍 当vector构建的参数类型为char类型时&#xff0c;它是和string是极其类似的&#xff0c;但是二者之间也有不同&#xff0c;比如&#xff0c…

[C++] 模拟实现list(二)

标题&#xff1a;[C] 模拟实现list&#xff08;二&#xff09; 水墨不写bug 目录 &#xff08;一&#xff09;回顾 &#xff08;二&#xff09;迭代器类的封装设计 &#xff08;1&#xff09;成员函数简要分析 &#xff08;2&#xff09;const迭代器类的设计 &#xff08;…

二四、3d人脸构建

一、下载github项目3dmm_cnn-master https://github.com/anhttran/3dmm_cnn.git 一个使用深度神经网络从单个图像进行 3D 人脸建模的项目,端到端代码,可直接根据图像强度进行 3D 形状和纹理估计;使用回归的 3D 面部模型,从检测到的面部特征点估计头部姿势和表情。…

19185 01背包问题

解决这个问题的关键是使用动态规划的方法。我们可以创建一个二维数组dp[i][j]&#xff0c;其中i表示考虑前i件物品&#xff0c;j表示背包的容量。dp[i][j]的值表示在考虑前i件物品&#xff0c;且背包容量为j时能获得的最大价值。 ### 算法步骤 1. 初始化一个二维数组dp&#x…

机器学习(五) -- 监督学习(7) --SVM2

系列文章目录及链接 上篇&#xff1a;机器学习&#xff08;五&#xff09; -- 监督学习&#xff08;7&#xff09; --SVM1 下篇&#xff1a; 前言 tips&#xff1a;标题前有“***”的内容为补充内容&#xff0c;是给好奇心重的宝宝看的&#xff0c;可自行跳过。文章内容被“文…

ABAQUS大连正版代理商:亿达四方——开启东北工业智能仿真新篇章

在东北老工业基地的振兴道路上&#xff0c;大连以其独特的地理位置和深厚的产业基础&#xff0c;成为推动区域经济发展的领头羊。作为国际知名的仿真软件ABAQUS在大连地区的官方授权代理商&#xff0c;亿达四方正以科技创新为驱动&#xff0c;引领当地制造业迈向数字化、智能化…

SD卡讲解

SD 卡 (Secure Digital Memory Card) 在我们生活中已经非常普遍了&#xff0c;控制器对 SD 卡进行读写通信 操作一般有两种通信接口可选&#xff0c;一种是 SPI 接口&#xff0c;另外一种就是 SDIO 接口。SDIO 全称是安全数 字输入/输出接口&#xff0c;多媒体卡 (MMC)、SD 卡、…

【Python实战因果推断】30_双重差分1

目录 Panel Data 在讨论了干预效果异质性之后&#xff0c;是时候转换一下思路&#xff0c;回到平均干预效果上来了。在接下来的几章中&#xff0c;您将学习如何利用面板数据进行因果推断。 面板数据是一种跨时间重复观测的数据结构。在多个时间段观察同一单位&#xff0c;可以…

构建实时银行应用程序:英国金融机构 Nationwide 为何选择 MongoDB Atlas

Nationwide Building Society 超过135年的互助合作 Nationwide Building Society&#xff08;以下简称“Nationwide”&#xff09; 是一家英国金融服务提供商&#xff0c;拥有超过 1500 万名会员&#xff0c;是全球最大的建房互助会。 Nationwide 的故事可以追溯到 1884 年&am…

web后端开发--请求响应

目录 前言 请求 简单参数 原始方法 Spring方式 Post请求乱码处理 实体参数 简单实体参数 复杂实体参数 ​编辑 数组集合参数 数组参数 ​编辑 集合参数 日期参数 ​编辑 Json参数 ​编辑 传递json数据 json数组 json对象&#xff08;POJO&#xff09; jso…

Dify中的知识库API列表

1.知识库API列表 通过文本/文件创建/更新/删除文档/查询文档嵌入状态&#xff0c;知识库创建/知识库查询/文档列表查询&#xff0c;分段增/删/改/查。 接口名字功能描述请求示例POST/datasets/{dataset_id}/document/create_by_text通过文本创建文档此接口基于已存在知识库&a…

tableau人口金字塔,漏斗图,箱线图绘制 - 13

人口金字塔&#xff0c;漏斗图&#xff0c;箱线图 1. 金字塔1.1 定义1.2 金字塔创建1.2.1 数据导入1.2.2 数据异常排查1.2.3 创建度量字段1.2.4 转换属性1.2.5 创建数据桶1.2.6 选择相关属性1.2.7 年龄排序1.2.8 创建计算字段1.2.9 选择相关字段1.2.10 设置轴排序1.2.11 设置颜…

liunx清理服务器内存和日志

1、查看服务器磁盘占用情况 # 查看磁盘占用大小 df -h 2、删除data文件夹下面的日志 3、查看每个服务下面的日志输出文件&#xff0c;过大就先停掉服务再删除out文件再重启服务 4、先进入想删除输入日志的服务文件夹下&#xff0c;查看服务进程&#xff0c;杀掉进程&#xff…

DW03D是一款用于锂离子/聚合物电池保护的高集成度解决方案。DW03D包含内部功率MOSFET、高精度电压检测电路和延迟电路

一般概述 DW03D产品是单节锂离子/锂聚合物可充电电池组保护的高集成度解决方案。DW03D包括了先进的功率MOSFET&#xff0c;高精度的电压检测电路和延时电路。 DW03D具有非常小的TSS08-8的封装,这使得该器件非常适合应用于空间限制得非常小的可充电电池组应用。…

【备战秋招】——算法题目训练和总结day3

【备战秋招】——算法题目训练和总结day3&#x1f60e; 前言&#x1f64c;BC149简写单词题解思路分析代码分享&#xff1a; dd爱框框题解思路分析代码分享&#xff1a; 除2&#xff01;题解思路分析代码分享&#xff1a; 总结撒花&#x1f49e; &#x1f60e;博客昵称&#xff…

【Java数据结构】初识线性表之一:顺序表

使用Java简单实现一个顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存储。在数组上完成数据的增删查改。 线性表大致包含如下的一些方法&#xff1a; public class MyArrayList { private int[] array; pri…

怎么将mkv视频格式转为mp4?这四种转换方法你肯定要试试!

怎么将mkv视频格式转为mp4&#xff1f;你是否曾被MKV格式的魅力深深吸引&#xff0c;仿佛踏入了一个充满奇幻色彩的多媒体秘境&#xff0c;那里&#xff0c;音频如溪流潺潺&#xff0c;视频似画卷铺展&#xff0c;字幕则如同夜空中最亮的星&#xff0c;三者交织成一场视听盛宴&…

【彻底禁用Windows系统的自动更新,让电脑使用更顺心!】

文章底部关注公众号&#xff1a;电脑维修小马 回复关键词即可获取软件及注册表&#xff1a;禁用更新 功能简介 自动更新是Windows系统的一项重要功能&#xff0c;旨在保持操作系统的安全性和最新状态。然而&#xff0c;对于许多用户来说&#xff0c;自动更新并不总是那么受欢迎…

渔人杯——RE

贪吃蛇的秘密 修改代码后&#xff0c;报了一个错 # uncompyle6 version 3.9.1 # Python bytecode version base 3.7.0 (3394) # Decompiled from: Python 3.11.8 (tags/v3.11.8:db85d51, Feb 6 2024, 22:03:32) [MSC v.1937 64 bit (AMD64)] # Embedded file name: snake1.py…