(三十三)geoserver源码添加新的数据存储

news2025/1/11 1:46:46

1.添加新的数据存储

如下图所示,为我们经常操作的添加数据存储的界面

可以看到这个代码在如下的位置。在这样的代码中实现跳转。header.add(new BookmarkablePageLink("addNew", NewDataPage.class));

public class StorePage extends GeoServerSecuredPage {
    StoreProvider provider = new StoreProvider();

    StorePanel table;

    SelectionRemovalLink removal;

    GeoServerDialog dialog;

    public StorePage() {
        // the table, and wire up selection change
        table =
                new StorePanel("table", provider, true) {
                    @Override
                    protected void onSelectionUpdate(AjaxRequestTarget target) {
                        removal.setEnabled(table.getSelection().size() > 0);
                        target.add(removal);
                    }
                };
        table.setOutputMarkupId(true);
        add(table);

        // the confirm dialog
        add(dialog = new GeoServerDialog("dialog"));
        setHeaderPanel(headerPanel());
    }

    protected Component headerPanel() {
        Fragment header = new Fragment(HEADER_PANEL, "header", this);

        // the add button
        header.add(new BookmarkablePageLink("addNew", NewDataPage.class));

        // the removal button
        header.add(removal = new SelectionRemovalLink("removeSelected", table, dialog));
        removal.setOutputMarkupId(true);
        removal.setEnabled(false);

        return header;
    }

    @Override
    protected ComponentAuthorizer getPageAuthorizer() {
        return ComponentAuthorizer.WORKSPACE_ADMIN;
    }
}

2.NewDataPage

进入到NewDataPage页面,进行初始化数据类型,分别为矢量、栅格、以及其他的数据。

    public NewDataPage() {

        final boolean thereAreWorkspaces = !getCatalog().getWorkspaces().isEmpty();

        if (!thereAreWorkspaces) {
            super.error(
                    (String) new ResourceModel("NewDataPage.noWorkspacesErrorMessage").getObject());
        }

        final Form storeForm = new Form("storeForm");
        add(storeForm);

        final ArrayList<String> sortedDsNames =
                new ArrayList<String>(getAvailableDataStores().keySet());
        Collections.sort(sortedDsNames);

        final CatalogIconFactory icons = CatalogIconFactory.get();
        final ListView dataStoreLinks =
                new ListView("vectorResources", sortedDsNames) {
                    @Override
                    protected void populateItem(ListItem item) {
                        final String dataStoreFactoryName = item.getDefaultModelObjectAsString();
                        final DataAccessFactory factory =
                                getAvailableDataStores().get(dataStoreFactoryName);
                        final String description = factory.getDescription();
                        SubmitLink link;
                        link =
                                new SubmitLink("resourcelink") {
                                    @Override
                                    public void onSubmit() {
                                        setResponsePage(
                                                new DataAccessNewPage(dataStoreFactoryName));
                                    }
                                };
                        link.setEnabled(thereAreWorkspaces);
                        link.add(new Label("resourcelabel", dataStoreFactoryName));
                        item.add(link);
                        item.add(new Label("resourceDescription", description));
                        Image icon = new Image("storeIcon", icons.getStoreIcon(factory.getClass()));
                        // TODO: icons could provide a description too to be used in alt=...
                        icon.add(new AttributeModifier("alt", new Model("")));
                        item.add(icon);
                    }
                };

        final List<String> sortedCoverageNames = new ArrayList<String>();
        sortedCoverageNames.addAll(getAvailableCoverageStores().keySet());
        Collections.sort(sortedCoverageNames);

        final ListView coverageLinks =
                new ListView("rasterResources", sortedCoverageNames) {
                    @Override
                    protected void populateItem(ListItem item) {
                        final String coverageFactoryName = item.getDefaultModelObjectAsString();
                        final Map<String, Format> coverages = getAvailableCoverageStores();
                        Format format = coverages.get(coverageFactoryName);
                        final String description = format.getDescription();
                        SubmitLink link;
                        link =
                                new SubmitLink("resourcelink") {
                                    @Override
                                    public void onSubmit() {
                                        setResponsePage(
                                                new CoverageStoreNewPage(coverageFactoryName));
                                    }
                                };
                        link.setEnabled(thereAreWorkspaces);
                        link.add(new Label("resourcelabel", coverageFactoryName));
                        item.add(link);
                        item.add(new Label("resourceDescription", description));
                        Image icon = new Image("storeIcon", icons.getStoreIcon(format.getClass()));
                        // TODO: icons could provide a description too to be used in alt=...
                        icon.add(new AttributeModifier("alt", new Model("")));
                        item.add(icon);
                    }
                };

        final List<OtherStoreDescription> otherStores = getOtherStores();

        final ListView otherStoresLinks =
                new ListView("otherStores", otherStores) {
                    @Override
                    protected void populateItem(ListItem item) {
                        final OtherStoreDescription store =
                                (OtherStoreDescription) item.getModelObject();
                        SubmitLink link;
                        link =
                                new SubmitLink("resourcelink") {
                                    @Override
                                    public void onSubmit() {
                                        setResponsePage(store.configurationPage);
                                    }
                                };
                        link.setEnabled(thereAreWorkspaces);
                        link.add(
                                new Label(
                                        "resourcelabel",
                                        new ParamResourceModel(
                                                "other." + store.key, NewDataPage.this)));
                        item.add(link);
                        item.add(
                                new Label(
                                        "resourceDescription",
                                        new ParamResourceModel(
                                                "other." + store.key + ".description",
                                                NewDataPage.this)));
                        Image icon = new Image("storeIcon", store.icon);
                        // TODO: icons could provide a description too to be used in alt=...
                        icon.add(new AttributeModifier("alt", new Model("")));
                        item.add(icon);
                    }
                };

        storeForm.add(dataStoreLinks);
        storeForm.add(coverageLinks);
        storeForm.add(otherStoresLinks);
    }

这就是我们的NewDataPage页面。

3.DataAccessNewPage

当点击进入到shp的发布界面如下所示。

对应的代码如下所示。

    /** */
    protected void initUI(final DataStoreInfo storeInfo) throws IllegalArgumentException {

        if (storeInfo.getWorkspace() == null) {
            throw new IllegalArgumentException("Workspace not provided");
        }

        final Catalog catalog = getCatalog();
        final ResourcePool resourcePool = catalog.getResourcePool();
        DataAccessFactory dsFactory;
        try {
            dsFactory = resourcePool.getDataStoreFactory(storeInfo);
        } catch (IOException e) {
            String msg =
                    (String)
                            new ResourceModel("AbstractDataAccessPage.cantGetDataStoreFactory")
                                    .getObject();
            msg += ": " + e.getMessage();
            throw new IllegalArgumentException(msg);
        }
        if (dsFactory == null) {
            String msg =
                    (String)
                            new ResourceModel("AbstractDataAccessPage.cantGetDataStoreFactory")
                                    .getObject();
            throw new IllegalArgumentException(msg);
        }

        final IModel model = new CompoundPropertyModel(storeInfo);

        final Form paramsForm = new Form("dataStoreForm", model);
        add(paramsForm);

        paramsForm.add(new Label("storeType", dsFactory.getDisplayName()));
        paramsForm.add(new Label("storeTypeDescription", dsFactory.getDescription()));

        {
            final IModel wsModel = new PropertyModel(model, "workspace");
            final IModel wsLabelModel = new ResourceModel("workspace", "Workspace");
            workspacePanel = new WorkspacePanel("workspacePanel", wsModel, wsLabelModel, true);
        }
        paramsForm.add(workspacePanel);

        final TextParamPanel dataStoreNamePanel;

        dataStoreNamePanel =
                new TextParamPanel(
                        "dataStoreNamePanel",
                        new PropertyModel(model, "name"),
                        new ResourceModel("AbstractDataAccessPage.dataSrcName", "Data Source Name"),
                        true);
        paramsForm.add(dataStoreNamePanel);

        paramsForm.add(
                new TextParamPanel(
                        "dataStoreDescriptionPanel",
                        new PropertyModel(model, "description"),
                        new ResourceModel("AbstractDataAccessPage.description", "Description"),
                        false,
                        (IValidator[]) null));

        paramsForm.add(
                new CheckBoxParamPanel(
                        "dataStoreEnabledPanel",
                        new PropertyModel(model, "enabled"),
                        new ResourceModel("enabled", "Enabled")));

        {
            /*
             * Here's where the extension point is applied in order to give extensions a chance to
             * provide custom behavior/components for the coverage form other than the default
             * single "url" input field
             */
            GeoServerApplication app = getGeoServerApplication();
            storeEditPanel =
                    StoreExtensionPoints.getStoreEditPanel(
                            "parametersPanel", paramsForm, storeInfo, app);
        }
        paramsForm.add(storeEditPanel);

        paramsForm.add(new FeedbackPanel("feedback"));

        // validate the selected workspace does not already contain a store with the same name
        final String dataStoreInfoId = storeInfo.getId();
        StoreNameValidator storeNameValidator =
                new StoreNameValidator(
                        workspacePanel.getFormComponent(),
                        dataStoreNamePanel.getFormComponent(),
                        dataStoreInfoId);
        paramsForm.add(storeNameValidator);

        paramsForm.add(new BookmarkablePageLink("cancel", StorePage.class));

        paramsForm.add(
                new AjaxSubmitLink("save", paramsForm) {
                    private static final long serialVersionUID = 1L;

                    @Override
                    protected void onError(AjaxRequestTarget target, Form form) {
                        super.onError(target, form);
                        target.add(paramsForm);
                    }

                    @Override
                    protected void onSubmit(AjaxRequestTarget target, Form form) {
                        try {
                            DataStoreInfo dataStore = (DataStoreInfo) form.getModelObject();
                            onSaveDataStore(dataStore, target, true);
                        } catch (IllegalArgumentException e) {
                            paramsForm.error(e.getMessage());
                            target.add(paramsForm);
                        }
                    }
                });

        paramsForm.add(applyLink(paramsForm));

        // save the namespace panel as an instance variable. Needed as per GEOS-3149
        makeNamespaceSyncUpWithWorkspace(paramsForm);
    }

这里看到数据的初始化流程。

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

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

相关文章

Notes/Domino 14 Early Access Drop3发布

大家好&#xff0c;才是真的好。 其实上周&#xff0c;就是国庆假期的时候&#xff0c;HCL Notes/Domino 14 Early Access Drop3&#xff08;以下简称EA3&#xff09;就已经发布&#xff0c;而且和传说中的一样&#xff0c;带来了数项惊人的新特性。 我们先讲讲这一版本新特性…

正向代理——流量代理

文章目录 流量代理1. 正向代理2. 反向代理3. 流量转发工具4. 实验4.1 实验环境4.2 reGeorg工具 流量代理 1. 正向代理 正向代理是客户端和其他所有服务器&#xff08;重点&#xff1a;所有&#xff09;的代理者 2. 反向代理 反向代理是客户端和所要代理的服务器之间的代理。…

3.3 Tessellation Shader (TESS) Geometry Shader(GS)

一、曲面细分着色器的应用 海浪&#xff0c;雪地等 与置换贴图的结合 二、几何着色器的应用 几何动画 草地等&#xff08;与曲面着色器结合&#xff09; 三、着色器执行顺序 1.TESS的输入与输出 输入 Patch&#xff0c;可以看成是多个顶点的集合&#xff0c;包含每个顶点的属…

无线设备天线的选型及其安装注意事项

天线作为无线传输过程中一个必不可少的配件&#xff0c;因此天线的安装和选型对于无线传输的稳定性发挥着至关重要的作用。本文将介绍影响天线安装对于无线通信效果的影响。 一、天线的工作原理 天线是一种能量变换器&#xff0c;它把传输线上传播的导行波&#xff0c;变换成在…

innovus:antenna设置

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 innovus和ICC2还不一样&#xff0c;ICC2需要读antenna rule&#xff0c;innovus只看antenna lef&#xff0c;所以要检查一下lef里antenna信息全不全。 然后设置如下option: s…

实验室超声波清洗机如何进行提取、乳化?

近年来&#xff0c;超声波清洗机已被广泛应用于实验室中&#xff0c;如提取、清洗、乳化等&#xff0c;由于其具有高效、节能和自动化程度高等其他技术不可比拟的优势&#xff0c;现已在各行各业广泛应用&#xff0c;本文主要就实验室超声波清洗机提取、乳化方面做个简单的介绍…

流量代理——正向代理

流量代理 正向代理和反向代理 正向代理就是客户端和其他所有服务器&#xff08;重点&#xff1a;所有&#xff09;的代理者。 反向代理是客户端和所要代理的服务器之间的代理。 流量转发工具 需要放在拿到shell的服务器上可使用 lcx&#xff1a;端口流量转发&#xff0c;不具…

百度百科词条编辑要求,怎样创建百度百科之实操篇

大部分人都不知道百度百科词条编辑有什么要求&#xff0c;也不知道百度百科词条内容到底是否靠谱&#xff0c;下面洛希爱做百科网将为大家带来百度百科创建实操技能分享。 1、百度一下【百度百科】找到百度词条的官网 2、打开百度百科的官网 我们就会发现 总共创建了多少个百度…

SpringCloud ---day1

认识微服务 单体架构 微服务架构 方便进行打包上线,版本的更新上线,降低项目之间的耦合度,减少代码量巨大导致的编译/打包时间长的问题 SpringCloud简介 项目熟悉 业务流程 项目模块划分 服务拆分原则 什么时候拆: 对于一个初创的项目&#xff0c;首先要做的是验证项目的可…

如何进行前端代码打包和压缩?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

优秀的推荐系统架构与应用:从YouTube到Pinterest、Flink和阿里巴巴

文章目录 &#x1f31f; 业界经典&#xff1a;YouTube深度学习推荐系统的经典架构长什么样&#xff1f;&#x1f34a; 基础架构&#x1f34a; 深度学习模型&#x1f34a; 额外组件 &#x1f31f; 图神经网络&#xff1a;Pinterest如何应用图神经网络的&#xff1f;&#x1f34a…

如何构建前端自动化测试套件?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

PBootCMS解析、例子

一、分析以下程序 {pboot:nav num10 parent0}<li class"nav-item {pboot:if([nav:scode]{sort:tcode})}active{/pboot:if}"><a class"nav-link" href"[nav:link]">[nav:name]</a></li> {/pboot:nav} 当前栏目的顶级栏目…

ruoyi-cloud 升级mybatis plus 报错 Invalid bound statement (not found)

1.项目是用的ruoyi-cloud 2.项目自带mybatis 想升级为mybatis plus 3.mybatis plus集成后,启动正常,但是dao访问xml时,报错Invalid bound statement (not found) 4.试了好多次无果,后来又把application.yml的mybatis-plus换成mybatis,目的是查看是否mybatis能否正确关联到sq…

C++:超越C语言的独特魅力

W...Y的主页&#x1f60a; 代码仓库分享&#x1f495; &#x1f354;前言&#xff1a; 今天我们依旧来完善补充C&#xff0c;区分C与C语言的区别。上一篇我们讲了关键字、命名空间、C的输入与输出、缺省参数等知识点。今天我们继续走进C的世界。 目录 函数重载 函数重载概…

Linux常用命令——command命令

在线Linux命令查询工具 command 调用并执行指定的命令 补充说明 command命令调用指定的指令并执行&#xff0c;命令执行时不查询shell函数。command命令只能够执行shell内部的命令。 语法 command(参数)参数 指令&#xff1a;需要调用的指令及参数。 实例 使用command…

好奇喵 | Rust编程语言的简单了解~

前言 有时候会听到别人谈论小众的语言&#xff0c;最近经常听到rust语言&#xff0c;感觉很厉害的样子&#xff0c;就简单了解了一下。 Rust 语言是一种高效、可靠的通用高级语言。其高效不仅限于开发效率&#xff0c;它的执行效率也是令人称赞的&#xff0c;是一种少有的兼顾…

lesson0-C++入门(6000余字详细配图讲解)

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 1. C关键字 2. 命名空间 ​编辑 3. C输入&输出 4. 缺省参数 5. 函数重载 6. 引用 7. 内联函数 1. C关键字 C总计63个关键字&#xff0c;C语言32个关键字&#xff0c;C兼容%99的C语言&#xff0c;只有极少…

【小白使用-已验证】PhpStudy下载安装使用教程23.10.17

1.phpstudy是什么&#xff1f; phpstudy是一个php运行环境的集成包&#xff0c;用户不需要去配置运行环境&#xff0c;就可以使用&#xff0c;phpstudy不仅是一款比较好用的php调试环境工具&#xff0c;并且还包括了开发工具和常用手册&#xff0c;对于新手是有很大帮助的。 一…

AC/DC电源模块工作效率的特点

BOSHIDA AC/DC电源模块工作效率的特点 AC/DC电源模块是一种用来将交流电转换为直流电的设备&#xff0c;在各种电子设备中应用广泛。其中&#xff0c;工作效率是评价AC/DC电源模块性能的关键指标之一。下面将从工作效率的特点方面进行阐述&#xff0c;以帮助读者更好地理解AC/…