package com.sysu.admin.utils.shape.geoserver;

/**
 * @author shu hao
 * @description:
 * @date 2021/12/23 9:16
 */
//import it.geosolutions.geoserver.rest.GeoServerRESTManager;
//import it.geosolutions.geoserver.rest.GeoServerRESTPublisher;
//import it.geosolutions.geoserver.rest.decoder.RESTDataStore;
//import it.geosolutions.geoserver.rest.decoder.RESTLayer;
//import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder;
//import it.geosolutions.geoserver.rest.encoder.datastore.GSPostGISDatastoreEncoder;
//import it.geosolutions.geoserver.rest.encoder.datastore.GSShapefileDatastoreEncoder;
//import it.geosolutions.geoserver.rest.encoder.feature.GSFeatureTypeEncoder;
import java.io.IOException;

public class GeoServerUtil {
    public static void main(String[] args) throws IOException {

        GeoserverPublishPostGISData("wuhan", "localhost", "kq");
    }


    //发布postgis中的数据
    public static void GeoserverPublishPostGISData(String workspace, String store_name, String typeName) throws IOException{

        //postgis连接配置
//        PostGisConfig postGisConfig = new PostGisConfig();
//        GeoServerConfig geoServerConfig = new GeoServerConfig();
//        //判断工作区（workspace）是否存在，不存在则创建
//        GeoServerRESTManager manager = new GeoServerRESTManager(new URL(geoServerConfig.getUrl()), geoServerConfig.getUser(), geoServerConfig.getPassword());
//
//        GeoServerRESTPublisher publisher = manager.getPublisher() ;
//        List<String> workspaces = manager.getReader().getWorkspaceNames();
//        if(!workspaces.contains(workspace)){
//            boolean createws = publisher.createWorkspace(workspace);
//            System.out.println("create ws : " + createws);
//        }else {
//            System.out.println("workspace已经存在了,ws :" + workspace);
//        }
//
//
//        //判断数据存储（datastore）是否已经存在，不存在则创建
//        RESTDataStore restStore = manager.getReader().getDatastore(workspace, store_name);
//        if(restStore == null){
//            GSPostGISDatastoreEncoder store = new GSPostGISDatastoreEncoder(store_name);
//            store.setHost(postGisConfig.getUrl());//设置url
//            store.setPort(postGisConfig.getPort());//设置端口
//            store.setUser(postGisConfig.getUser());// 数据库的用户名
//            store.setPassword(postGisConfig.getPassword());// 数据库的密码
//            store.setDatabase(postGisConfig.getDatabase());// 那个数据库;
//            store.setSchema(typeName); //当前先默认使用public这个schema
//            store.setConnectionTimeout(20);// 超时设置
//            //store.setName(schema);
//            store.setMaxConnections(20); // 最大连接数
//            store.setMinConnections(1);     // 最小连接数
//            store.setExposePrimaryKeys(true);
//            boolean createStore = manager.getStoreManager().create(workspace, store);
//            System.out.println("create store : " + createStore);
//        } else {
//            System.out.println("数据存储已经存在了,store:" + store_name);
//        }
//
//        //判断图层是否已经存在，不存在则创建并发布
//        RESTLayer layer = manager.getReader().getLayer(workspace, typeName);
//        if(layer == null){
//            GSFeatureTypeEncoder pds = new GSFeatureTypeEncoder();
//            pds.setTitle(typeName);
//            pds.setName(typeName);
//            pds.setSRS("EPSG:4326");
//            GSLayerEncoder layerEncoder = new GSLayerEncoder();
//
//            boolean publish = manager.getPublisher().publishDBLayer(workspace, store_name,  pds, layerEncoder);
//            System.out.println("publish : " + publish);
//        }else {
//            System.out.println("表已经发布过了,table:" + typeName);
//        }

    }
    //发布shapefile数据
    public static void GeoserverPublishShapefileData(String url,String username,String passwd) throws IOException{

//        String ws = "testshape" ;     //待创建和发布图层的工作区名称workspace
//        String store_name = "testShapeStore" ; //待创建和发布图层的数据存储名称store
//        String srs="EPSG:4326";
//        //压缩文件的完整路径
//        File zipFile=new File("D:/软件安装/geoserver/GeoServer 2.14.0/data_dir/data/shapefiles/states.zip");
//        String layername="states";//图层名称
//        //shp文件所在的位置
//        String urlDatastore="file:data/shapefiles/states.shp";
//        //判断工作区（workspace）是否存在，不存在则创建
//        URL u = new URL(url);
//        //获取管理对象
//        GeoServerRESTManager manager = new GeoServerRESTManager(u, username, passwd);
//        //获取发布对象
//        GeoServerRESTPublisher publisher = manager.getPublisher() ;
//        //获取所有的工作空间名称
//        List<String> workspaces = manager.getReader().getWorkspaceNames();
//        //判断工作空间是否存在
//        if(!workspaces.contains(ws)){
//            //创建一个新的存储空间
//            boolean createws = publisher.createWorkspace(ws);
//            System.out.println("create ws : " + createws);
//        }else {
//            System.out.println("workspace已经存在了,ws :" + ws);
//        }
//
//        //判断数据存储（datastore）是否已经存在，不存在则创建
//        URL urlShapefile = new URL(urlDatastore);
//        RESTDataStore restStore = manager.getReader().getDatastore(ws, store_name);
//        if(restStore == null){
//            //创建shape文件存储
//            GSShapefileDatastoreEncoder store = new GSShapefileDatastoreEncoder(store_name, urlShapefile);
//            boolean createStore = manager.getStoreManager().create(ws, store);
//            System.out.println("create store : " + createStore);
//        } else {
//            System.out.println("数据存储已经存在了,store:" + store_name);
//        }
//
//        //判断图层是否已经存在，不存在则创建并发布
//        RESTLayer layer = manager.getReader().getLayer(ws, layername);
//        if(layer == null){
//            //发布图层
//            boolean publish = manager.getPublisher().publishShp(ws, store_name, layername, zipFile, srs);
//            System.out.println("publish : " + publish);
//        }else {
//
//            System.out.println("表已经发布过了,table:" + store_name);
//        }

    }
}



