Scoped Postgis DB Manager
This commit is contained in:
parent
5e9154d87e
commit
38a8b89963
|
@ -6,8 +6,7 @@ package org.gcube.application.geoportal.service.engine;
|
|||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.Synchronized;
|
||||
import org.gcube.application.geoportal.service.engine.cache.MongoClientProvider;
|
||||
import org.gcube.application.geoportal.service.engine.cache.MongoConnectionProvider;
|
||||
import org.gcube.application.geoportal.service.engine.providers.*;
|
||||
|
||||
public class ImplementationProvider {
|
||||
|
||||
|
@ -35,7 +34,11 @@ public class ImplementationProvider {
|
|||
@Setter
|
||||
private StorageClientProvider storageProvider=new StorageClientProvider();
|
||||
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private PostgisConnectionProvider dbProvider=new PostgisConnectionProvider();
|
||||
|
||||
|
||||
// @Getter
|
||||
// @Setter
|
||||
// private EMFProvider emfProvider=new ScopedEMFProvider();
|
||||
|
|
|
@ -13,7 +13,7 @@ import org.gcube.application.geoportal.common.rest.TempFile;
|
|||
import org.gcube.application.geoportal.common.utils.Files;
|
||||
import org.gcube.application.geoportal.service.engine.ImplementationProvider;
|
||||
import org.gcube.application.geoportal.service.engine.SDIManager;
|
||||
import org.gcube.application.geoportal.service.engine.StorageClientProvider;
|
||||
import org.gcube.application.geoportal.service.engine.providers.StorageClientProvider;
|
||||
import org.gcube.application.geoportal.service.engine.WorkspaceManager;
|
||||
import org.gcube.application.geoportal.service.engine.WorkspaceManager.FileOptions;
|
||||
import org.gcube.application.geoportal.service.engine.WorkspaceManager.FolderOptions;
|
||||
|
|
|
@ -8,7 +8,6 @@ import org.gcube.application.geoportal.service.model.internal.db.PostgisTable;
|
|||
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
|
||||
import org.gcube.application.geoportal.service.model.internal.faults.DataParsingException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.sql.*;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
@ -35,19 +34,7 @@ public class PostgisDBManager implements PostgisDBManagerI {
|
|||
private static DatabaseConnection config;
|
||||
|
||||
|
||||
public static void init(DatabaseConnection config) throws SQLException, IOException {
|
||||
|
||||
PostgisDBManager.config=config;
|
||||
|
||||
try{
|
||||
Class.forName("org.postgresql.Driver");
|
||||
Class.forName("org.postgis.DriverWrapper");
|
||||
}catch(Exception e){
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -83,16 +70,16 @@ public class PostgisDBManager implements PostgisDBManagerI {
|
|||
conn.commit();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.gcube.application.geoportal.PostgisDBManagerI#evaluateBoundingBox(org.gcube.application.geoportal.model.PostgisTable)
|
||||
*/
|
||||
@Override
|
||||
public BBOX evaluateBoundingBox(PostgisTable table) throws SQLException, DataParsingException {
|
||||
ResultSet rs=conn.createStatement().executeQuery("Select ST_Extent("+table.getGeometryColumn()+") as extent from "+table.getTablename());
|
||||
if(rs.next())
|
||||
return DBUtils.parseST_Extent(rs.getString("extent"));
|
||||
else throw new SQLException("No extent returned");
|
||||
}
|
||||
// /* (non-Javadoc)
|
||||
// * @see org.gcube.application.geoportal.PostgisDBManagerI#evaluateBoundingBox(org.gcube.application.geoportal.model.PostgisTable)
|
||||
// */
|
||||
// @Override
|
||||
// public BBOX evaluateBoundingBox(PostgisTable table) throws SQLException, DataParsingException {
|
||||
// ResultSet rs=conn.createStatement().executeQuery("Select ST_Extent("+table.getGeometryColumn()+") as extent from "+table.getTablename());
|
||||
// if(rs.next())
|
||||
// return DBUtils.parseST_Extent(rs.getString("extent"));
|
||||
// else throw new SQLException("No extent returned");
|
||||
// }
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.gcube.application.geoportal.PostgisDBManagerI#evaluateBoundingBox(org.gcube.application.geoportal.model.PostgisTable)
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package org.gcube.application.geoportal.service.engine.postgis;
|
||||
|
||||
import org.gcube.application.geoportal.common.model.legacy.BBOX;
|
||||
import org.gcube.application.geoportal.service.model.internal.db.DatabaseConnection;
|
||||
import org.gcube.application.geoportal.service.model.internal.db.PostgisTable;
|
||||
import org.gcube.application.geoportal.service.model.internal.faults.DataParsingException;
|
||||
|
@ -13,11 +12,9 @@ public interface PostgisDBManagerI {
|
|||
|
||||
void commit() throws SQLException;
|
||||
|
||||
// int insertCentroid(CentroidRecord record) throws SQLException;
|
||||
|
||||
// int deleteCentroid(String uuid) throws SQLException;
|
||||
|
||||
BBOX evaluateBoundingBox(PostgisTable table) throws SQLException, DataParsingException;
|
||||
|
||||
|
||||
PreparedStatement prepareInsertStatement(PostgisTable target, boolean createTable, boolean geometryAsText)
|
||||
throws SQLException;
|
||||
|
|
|
@ -2,6 +2,7 @@ package org.gcube.application.geoportal.service.engine.postgis;
|
|||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.gcube.application.geoportal.common.model.legacy.Concessione;
|
||||
import org.gcube.application.geoportal.service.engine.ImplementationProvider;
|
||||
import org.gcube.application.geoportal.service.engine.SDIManager;
|
||||
import org.gcube.application.geoportal.service.model.internal.db.DBConstants;
|
||||
import org.gcube.application.geoportal.service.model.internal.db.PostgisTable;
|
||||
|
@ -34,7 +35,10 @@ public class PostgisIndex {
|
|||
|
||||
|
||||
private SDIManager sdiManager;
|
||||
|
||||
|
||||
private static PostgisDBManager getDB() throws ConfigurationException {
|
||||
return ImplementationProvider.get().getDbProvider().getObject();
|
||||
};
|
||||
|
||||
public PostgisIndex() throws SDIInteractionException, SQLException, ConfigurationException {
|
||||
super();
|
||||
|
@ -49,7 +53,7 @@ public class PostgisIndex {
|
|||
|
||||
public void init() throws SQLException, ConfigurationException, SDIInteractionException {
|
||||
log.debug("Contacting postgis DB .. ");
|
||||
PostgisDBManagerI db=PostgisDBManager.get();
|
||||
PostgisDBManagerI db=ImplementationProvider.get().getDbProvider().getObject();
|
||||
log.debug("Checking if centroids table exists..");
|
||||
PostgisTable table=getCentroidsTable();
|
||||
db.create(table);
|
||||
|
@ -67,7 +71,7 @@ public class PostgisIndex {
|
|||
Map<String,String> centroidRow=evaluateCentroid(record);
|
||||
|
||||
log.debug("Contacting postgis DB .. ");
|
||||
PostgisDBManagerI db=PostgisDBManager.get();
|
||||
PostgisDBManagerI db=ImplementationProvider.get().getDbProvider().getObject();
|
||||
|
||||
PostgisTable centroidsTable=getCentroidsTable();
|
||||
log.debug("Inserting / updated centroid Row {} ",centroidRow);
|
||||
|
@ -97,7 +101,7 @@ public class PostgisIndex {
|
|||
|
||||
public void removeCentroid(Concessione record) {
|
||||
try {
|
||||
PostgisDBManagerI db=PostgisDBManager.get();
|
||||
PostgisDBManagerI db=ImplementationProvider.get().getDbProvider().getObject();
|
||||
PostgisTable centroidsTable=getCentroidsTable();
|
||||
log.debug("Deleting centroid if present. ID is "+record.getMongo_id());
|
||||
int result= db.deleteByFieldValue(centroidsTable, new Field(DBConstants.Concessioni.PRODUCT_ID,FieldType.TEXT), record.getMongo_id());
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package org.gcube.application.geoportal.service.engine;
|
||||
package org.gcube.application.geoportal.service.engine.providers;
|
||||
|
||||
import lombok.NonNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
@ -17,7 +17,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||
public abstract class AbstractScopedMap<T> implements Engine<T>{
|
||||
|
||||
// scope-> object
|
||||
private ConcurrentHashMap<String,TTLObject<T>> scopeMap=new ConcurrentHashMap<String,TTLObject<T>>();
|
||||
private ConcurrentHashMap<String, TTLObject<T>> scopeMap=new ConcurrentHashMap<String,TTLObject<T>>();
|
||||
|
||||
@Setter
|
||||
private TemporalAmount TTL=null;
|
|
@ -1,4 +1,4 @@
|
|||
package org.gcube.application.geoportal.service.engine;
|
||||
package org.gcube.application.geoportal.service.engine.providers;
|
||||
|
||||
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
|
||||
|
|
@ -1,11 +1,10 @@
|
|||
package org.gcube.application.geoportal.service.engine.cache;
|
||||
package org.gcube.application.geoportal.service.engine.providers;
|
||||
|
||||
import com.mongodb.MongoClient;
|
||||
import com.mongodb.MongoClientOptions;
|
||||
import com.mongodb.MongoCredential;
|
||||
import com.mongodb.ServerAddress;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.gcube.application.geoportal.service.engine.AbstractScopedMap;
|
||||
import org.gcube.application.geoportal.service.engine.ImplementationProvider;
|
||||
import org.gcube.application.geoportal.service.model.internal.db.MongoConnection;
|
||||
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
|
|
@ -1,7 +1,6 @@
|
|||
package org.gcube.application.geoportal.service.engine.cache;
|
||||
package org.gcube.application.geoportal.service.engine.providers;
|
||||
|
||||
import org.gcube.application.geoportal.service.ServiceConstants;
|
||||
import org.gcube.application.geoportal.service.engine.AbstractScopedMap;
|
||||
import org.gcube.application.geoportal.service.model.internal.db.MongoConnection;
|
||||
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
|
||||
import org.gcube.application.geoportal.service.utils.ISUtils;
|
|
@ -0,0 +1,33 @@
|
|||
package org.gcube.application.geoportal.service.engine.providers;
|
||||
|
||||
import org.gcube.application.geoportal.service.engine.postgis.PostgisDBManager;
|
||||
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
|
||||
|
||||
import java.sql.SQLException;
|
||||
|
||||
public class PostgisConnectionProvider extends AbstractScopedMap<PostgisDBManager>{
|
||||
|
||||
|
||||
public PostgisConnectionProvider() {
|
||||
super("Postgis connection descriptor cache");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PostgisDBManager retrieveObject() throws ConfigurationException {
|
||||
try {
|
||||
return PostgisDBManager.get();
|
||||
} catch (SQLException throwables) {
|
||||
throw new ConfigurationException(throwables);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void dispose(PostgisDBManager toDispose) {
|
||||
// toDispose.close();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
//
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package org.gcube.application.geoportal.service.engine;
|
||||
package org.gcube.application.geoportal.service.engine.providers;
|
||||
|
||||
import org.gcube.application.geoportal.common.model.profile.Profile;
|
||||
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
|
|
@ -1,4 +1,4 @@
|
|||
package org.gcube.application.geoportal.service.engine;
|
||||
package org.gcube.application.geoportal.service.engine.providers;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
|
||||
|
@ -18,7 +18,7 @@ import java.net.URL;
|
|||
import java.time.Duration;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
@Slf4j
|
||||
public class StorageClientProvider extends AbstractScopedMap<IClient>{
|
||||
public class StorageClientProvider extends AbstractScopedMap<IClient> {
|
||||
|
||||
|
||||
|
||||
|
@ -34,8 +34,9 @@ public class StorageClientProvider extends AbstractScopedMap<IClient>{
|
|||
|
||||
@Override
|
||||
protected void dispose(IClient toDispose) {
|
||||
try {
|
||||
toDispose.close();
|
||||
try {
|
||||
//TODO ASK LUCA
|
||||
// toDispose.close();
|
||||
}catch (NullPointerException e) {
|
||||
// expected if closed without uploading
|
||||
}catch(Throwable t) {
|
|
@ -1,9 +1,9 @@
|
|||
package org.gcube.application.geoportal.service.engine;
|
||||
package org.gcube.application.geoportal.service.engine.providers;
|
||||
|
||||
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
|
||||
import org.gcube.common.storagehub.client.dsl.StorageHubClient;
|
||||
|
||||
public class StorageHubProvider implements Engine<StorageHubClient>{
|
||||
public class StorageHubProvider implements Engine<StorageHubClient> {
|
||||
|
||||
|
||||
@Override
|
|
@ -1,4 +1,4 @@
|
|||
package org.gcube.application.geoportal.service.engine;
|
||||
package org.gcube.application.geoportal.service.engine.providers;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
|
@ -0,0 +1,14 @@
|
|||
package org.gcube.application.geoportal.service.model.internal;
|
||||
|
||||
import lombok.Data;
|
||||
import org.gcube.application.geoportal.service.model.internal.db.DatabaseConnection;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Data
|
||||
public class Configuration {
|
||||
|
||||
public DatabaseConnection postgisDBIndex;
|
||||
public Map<String,String> details;
|
||||
|
||||
}
|
|
@ -4,7 +4,9 @@ import lombok.extern.slf4j.Slf4j;
|
|||
import org.gcube.application.geoportal.common.model.legacy.Concessione;
|
||||
import org.gcube.application.geoportal.common.rest.AddSectionToConcessioneRequest;
|
||||
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
|
||||
import org.gcube.application.geoportal.service.engine.ImplementationProvider;
|
||||
import org.gcube.application.geoportal.service.engine.mongo.ConcessioniMongoManager;
|
||||
import org.gcube.application.geoportal.service.model.internal.Configuration;
|
||||
import org.gcube.application.geoportal.service.model.internal.faults.DeletionException;
|
||||
import org.gcube.application.geoportal.service.utils.Serialization;
|
||||
import org.json.JSONArray;
|
||||
|
@ -18,7 +20,22 @@ import javax.ws.rs.core.Response;
|
|||
@Slf4j
|
||||
public class ConcessioniOverMongo {
|
||||
|
||||
|
||||
|
||||
@HEAD
|
||||
@Path("some")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String getConfiguration(){
|
||||
return new GuardedMethod<String>(){
|
||||
|
||||
@Override
|
||||
protected String run() throws Exception, WebApplicationException {
|
||||
Configuration toReturn = new Configuration();
|
||||
toReturn.setPostgisDBIndex(ImplementationProvider.get().getDbProvider().getObject().getConnectionDescriptor());
|
||||
return Serialization.write(toReturn);
|
||||
}
|
||||
}.execute().getResult();
|
||||
}
|
||||
|
||||
@PUT
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
|
|
|
@ -2,9 +2,11 @@ package org.gcube.application.geoportal.service;
|
|||
|
||||
import com.mongodb.MongoClient;
|
||||
import org.gcube.application.geoportal.service.engine.ImplementationProvider;
|
||||
import org.gcube.application.geoportal.service.engine.StorageClientProvider;
|
||||
import org.gcube.application.geoportal.service.engine.cache.MongoClientProvider;
|
||||
import org.gcube.application.geoportal.service.engine.cache.MongoConnectionProvider;
|
||||
import org.gcube.application.geoportal.service.engine.postgis.PostgisDBManager;
|
||||
import org.gcube.application.geoportal.service.engine.providers.PostgisConnectionProvider;
|
||||
import org.gcube.application.geoportal.service.engine.providers.StorageClientProvider;
|
||||
import org.gcube.application.geoportal.service.engine.providers.MongoClientProvider;
|
||||
import org.gcube.application.geoportal.service.engine.providers.MongoConnectionProvider;
|
||||
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
|
||||
import org.gcube.application.geoportal.service.utils.Serialization;
|
||||
import org.gcube.contentmanagement.blobstorage.service.IClient;
|
||||
|
@ -53,7 +55,14 @@ public class BasicServiceTestUnit extends JerseyTest {
|
|||
return super.getObject();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
ImplementationProvider.get().setDbProvider(new PostgisConnectionProvider() {
|
||||
@Override
|
||||
public PostgisDBManager getObject() throws ConfigurationException {
|
||||
TokenSetter.set(scope);
|
||||
return super.getObject();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -11,7 +11,6 @@ import org.gcube.application.geoportal.common.utils.Files;
|
|||
import org.gcube.application.geoportal.common.utils.StorageUtils;
|
||||
import org.gcube.application.geoportal.service.utils.Serialization;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import javax.ws.rs.client.Entity;
|
||||
|
@ -33,10 +32,6 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
|
|||
private static final String FILES_PATH=InterfaceConstants.Methods.REGISTER_FILES_PATH;
|
||||
|
||||
|
||||
@Before
|
||||
public void setContext() {
|
||||
TokenSetter.set("/gcube/devsec/devVRE");
|
||||
}
|
||||
|
||||
|
||||
private static Concessione upload(WebTarget target,String id, String path, String ...files) throws Exception {
|
||||
|
@ -78,6 +73,14 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
|
|||
System.out.println(target.request(MediaType.APPLICATION_JSON).get(List.class));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void getConfiguration() throws Exception {
|
||||
WebTarget target=target(PATH);
|
||||
System.out.println(check(target.path("some").request(MediaType.APPLICATION_JSON).head(),String.class));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void createNew() throws Exception {
|
||||
WebTarget target=target(PATH);
|
||||
|
@ -99,6 +102,8 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void republish() throws Exception{
|
||||
WebTarget target=target(PATH);
|
||||
|
|
|
@ -6,7 +6,7 @@ import com.mongodb.MongoClient;
|
|||
import org.bson.Document;
|
||||
import org.gcube.application.geoportal.service.TokenSetter;
|
||||
import org.gcube.application.geoportal.service.engine.ImplementationProvider;
|
||||
import org.gcube.application.geoportal.service.engine.cache.MongoClientProvider;
|
||||
import org.gcube.application.geoportal.service.engine.providers.MongoClientProvider;
|
||||
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
|
Reference in New Issue