/** * processed parameters with relative URLs resolved against data directory. * * @param m * @param sc Context used to create GeoServerResourceLoader if required * @return processed parameters with relative URLs resolved against data directory * @deprecated Unused, call {@link ResourcePool#getParams(Map, GeoServerResourceLoader)} * directly. */ public static <K, V> Map<K, V> getParams(Map<K, V> m, ServletContext sc) { GeoServerResourceLoader loader; if (sc != null) { String basePath = GeoServerResourceLoader.lookupGeoServerDataDirectory(sc); File baseDir = new File(basePath); loader = new GeoServerResourceLoader(baseDir); } else { loader = GeoServerExtensions.bean(GeoServerResourceLoader.class); } return ResourcePool.getParams(m, loader); }
@Test public void testGetParamsFixesDatabaseFilePath() { Catalog catalog = getCatalog(); ResourcePool pool = new ResourcePool(catalog); DataStoreInfo ds = getCatalog().getFactory().createDataStore(); ds.getConnectionParameters().put("database", "file:data/test.gpkg"); Map newParams = pool.getParams(ds.getConnectionParameters(), getResourceLoader()); GeoServerDataDirectory dataDir = new GeoServerDataDirectory(getResourceLoader()); String absolutePath = dataDir.get("data/test.gpkg").dir().getAbsolutePath(); assertNotEquals(newParams.get("database"), "file:data/test.gpkg"); assertTrue(((String) newParams.get("database")).contains(absolutePath)); }
/** * Returns the datastore factory used to create underlying resources for a datastore. * * <p>This method first uses {@link DataStoreInfo#getType()} to obtain the datastore. In the * event of a failure it falls back on {@link DataStoreInfo#getConnectionParameters()}. * * @param info The data store metadata. * @return The datastore factory, or null if no such factory could be found, or the factory is * not available. * @throws IOException Any I/O errors. */ public DataAccessFactory getDataStoreFactory(DataStoreInfo info) throws IOException { DataAccessFactory factory = null; DataStoreInfo expandedStore = clone(info, true); if (info.getType() != null) { factory = DataStoreUtils.aquireFactory(expandedStore.getType()); } if (factory == null && expandedStore.getConnectionParameters() != null) { Map<String, Serializable> params = getParams(expandedStore.getConnectionParameters(), catalog.getResourceLoader()); factory = DataStoreUtils.aquireFactory(params); } return factory; }
ResourcePool.getParams( connectionParameters, catalog.getResourceLoader());
GeoServerResourceLoader resourceLoader = info.getCatalog().getResourceLoader(); Map<String, Serializable> rawParamValues = info.getConnectionParameters(); Map<String, Serializable> paramValues = rp.getParams(rawParamValues, resourceLoader); File directory = null; try {