Reorganized code to support multiple urls and to manage query via Java API instead of HTTP API
git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/information-system/resource-registry@133203 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
6662e7b6ef
commit
c1e4e869bf
|
@ -20,7 +20,8 @@ import com.tinkerpop.blueprints.impls.orient.OrientGraphFactory;
|
|||
*/
|
||||
public abstract class SecurityContextMapper {
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(SecurityContextMapper.class);
|
||||
private static Logger logger = LoggerFactory
|
||||
.getLogger(SecurityContextMapper.class);
|
||||
|
||||
public static final String MANAGEMENT_SECURITY_CONTEXT = "ManagementSecurityContext";
|
||||
|
||||
|
@ -31,30 +32,33 @@ public abstract class SecurityContextMapper {
|
|||
boolean created = DatabaseIntializator.initGraphDB();
|
||||
|
||||
logger.trace("Creating factory for {} connecting as {}",
|
||||
DatabaseEnvironment.getDBURI(),
|
||||
DatabaseEnvironment.DB_URI,
|
||||
DatabaseEnvironment.DEFAULT_ADMIN_USERNAME);
|
||||
|
||||
securityContextFactories = new HashMap<>();
|
||||
|
||||
OrientGraphFactory factory = new OrientGraphFactory(
|
||||
DatabaseEnvironment.getDBURI(),
|
||||
DatabaseEnvironment.DB_URI,
|
||||
DatabaseEnvironment.DEFAULT_ADMIN_USERNAME,
|
||||
DatabaseEnvironment.CHANGED_ADMIN_PASSWORD)
|
||||
.setupPool(1, 10);
|
||||
|
||||
for(PermissionMode p : PermissionMode.values()){
|
||||
for (PermissionMode p : PermissionMode.values()) {
|
||||
Map<String, OrientGraphFactory> map = new HashMap<>();
|
||||
map.put(null, factory);
|
||||
securityContextFactories.put(p, map);
|
||||
map.put(null, factory);
|
||||
}
|
||||
|
||||
if(created){
|
||||
if (created) {
|
||||
OrientGraph orientGraph = factory.getTx();
|
||||
SecurityContext.createSecurityContext(orientGraph, MANAGEMENT_SECURITY_CONTEXT, true);
|
||||
SecurityContext.createSecurityContext(orientGraph,
|
||||
MANAGEMENT_SECURITY_CONTEXT, true);
|
||||
|
||||
getSecurityContextFactory(MANAGEMENT_SECURITY_CONTEXT, PermissionMode.READER);
|
||||
getSecurityContextFactory(MANAGEMENT_SECURITY_CONTEXT, PermissionMode.WRITER);
|
||||
getSecurityContextFactory(MANAGEMENT_SECURITY_CONTEXT,
|
||||
PermissionMode.READER);
|
||||
getSecurityContextFactory(MANAGEMENT_SECURITY_CONTEXT,
|
||||
PermissionMode.WRITER);
|
||||
|
||||
DatabaseIntializator.createEntitiesAndRelations();
|
||||
}
|
||||
|
@ -99,22 +103,24 @@ public abstract class SecurityContextMapper {
|
|||
* use null for no context (used for admin operations)
|
||||
* @return
|
||||
*/
|
||||
public static OrientGraphFactory getSecurityContextFactory(String contextID, PermissionMode permissionMode) {
|
||||
public static OrientGraphFactory getSecurityContextFactory(
|
||||
String contextID, PermissionMode permissionMode) {
|
||||
OrientGraphFactory factory = null;
|
||||
|
||||
Map<String, OrientGraphFactory> permissionSecurityContextFactories =
|
||||
securityContextFactories.get(permissionMode);
|
||||
Map<String, OrientGraphFactory> permissionSecurityContextFactories = securityContextFactories
|
||||
.get(permissionMode);
|
||||
|
||||
factory = permissionSecurityContextFactories.get(contextID);
|
||||
|
||||
if (factory == null) {
|
||||
|
||||
String username = getSecurityRoleOrUserName(permissionMode,
|
||||
SecurityType.USER, contextID);
|
||||
String password = DatabaseEnvironment.DEFAULT_PASSWORDS.get(permissionMode);
|
||||
SecurityType.USER, contextID);
|
||||
String password = DatabaseEnvironment.DEFAULT_PASSWORDS
|
||||
.get(permissionMode);
|
||||
|
||||
factory = new OrientGraphFactory(DatabaseEnvironment.getDBURI(),
|
||||
username, password).setupPool(1, 10);
|
||||
factory = new OrientGraphFactory(DatabaseEnvironment.DB_URI,
|
||||
username, password).setupPool(1, 10);
|
||||
|
||||
permissionSecurityContextFactories.put(contextID, factory);
|
||||
}
|
||||
|
|
|
@ -62,28 +62,17 @@ public class DatabaseEnvironment {
|
|||
public static final Map<PermissionMode, String> DEFAULT_PASSWORDS;
|
||||
|
||||
|
||||
protected static int currentHost;
|
||||
protected static final String HOSTS;
|
||||
protected static final String[] HOST_ARRAY;
|
||||
public static final String DB_URI;
|
||||
|
||||
public static final String[] HOSTS;
|
||||
public static final String[] HTTP_URL_STRINGS;
|
||||
public static final String[] URI_DBS;
|
||||
|
||||
|
||||
public static String getDBURI(){
|
||||
return URI_DBS[currentHost];
|
||||
}
|
||||
|
||||
|
||||
public static String getHTTPURL(){
|
||||
return HTTP_URL_STRINGS[currentHost];
|
||||
}
|
||||
|
||||
static {
|
||||
Properties properties = new Properties();
|
||||
InputStream input = null;
|
||||
|
||||
currentHost = 0;
|
||||
|
||||
try {
|
||||
|
||||
input = DatabaseEnvironment.class.getClassLoader().getResourceAsStream(PROPERTY_FILENAME);
|
||||
|
@ -91,8 +80,7 @@ public class DatabaseEnvironment {
|
|||
// load a properties file
|
||||
properties.load(input);
|
||||
|
||||
String hostsString = properties.getProperty(HOST_VARNAME);
|
||||
HOSTS = hostsString.split(",");
|
||||
HOSTS = properties.getProperty(HOST_VARNAME);
|
||||
|
||||
REMOTE_PROTOCOL = properties.getProperty(REMOTE_PROTOCOL_VARNAME);
|
||||
|
||||
|
@ -100,7 +88,7 @@ public class DatabaseEnvironment {
|
|||
HTTP_PORT = properties.getProperty(HTTP_PORT_VARNAME);
|
||||
|
||||
DB = properties.getProperty(DB_VARNAME);
|
||||
|
||||
DB_URI = REMOTE_PROTOCOL + HOSTS + "/" + DB;
|
||||
|
||||
USERNAME = properties.getProperty(USERNAME_VARNAME);
|
||||
PASSWORD = properties.getProperty(PASSWORD_VARNAME);
|
||||
|
@ -121,13 +109,11 @@ public class DatabaseEnvironment {
|
|||
DEFAULT_PASSWORDS.put(PermissionMode.READER, DEFAULT_CREATED_READER_USER_PASSWORD);
|
||||
|
||||
|
||||
HOST_ARRAY = HOSTS.split(";");
|
||||
HTTP_URL_STRINGS = new String[HOST_ARRAY.length];
|
||||
|
||||
HTTP_URL_STRINGS = new String[HOSTS.length];
|
||||
URI_DBS = new String[HOSTS.length];
|
||||
|
||||
for(int i=0; i<HOSTS.length; i++){
|
||||
HTTP_URL_STRINGS[i] = HTTP_PROTOCOL + HOSTS[i] + HTTP_PORT;
|
||||
URI_DBS[i] = REMOTE_PROTOCOL + HOSTS[i] + "/" + DB;
|
||||
for(int i=0; i<HOST_ARRAY.length; i++){
|
||||
HTTP_URL_STRINGS[i] = HTTP_PROTOCOL + HOST_ARRAY[i] + HTTP_PORT;
|
||||
}
|
||||
|
||||
} catch(Exception e){
|
||||
|
|
|
@ -11,6 +11,7 @@ import org.gcube.informationsystem.resourceregistry.context.SecurityContextMappe
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.orientechnologies.common.log.OLogManager;
|
||||
import com.orientechnologies.orient.client.remote.OServerAdmin;
|
||||
import com.orientechnologies.orient.core.metadata.OMetadata;
|
||||
import com.orientechnologies.orient.core.metadata.schema.OClass;
|
||||
|
@ -28,7 +29,8 @@ import com.tinkerpop.blueprints.impls.orient.OrientVertexType;
|
|||
*/
|
||||
public class DatabaseIntializator {
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(DatabaseIntializator.class);
|
||||
private static Logger logger = LoggerFactory
|
||||
.getLogger(DatabaseIntializator.class);
|
||||
|
||||
private static final String DATABASE_TYPE = "graph";
|
||||
private static final String STORAGE_MODE = "plocal";
|
||||
|
@ -37,38 +39,54 @@ public class DatabaseIntializator {
|
|||
|
||||
public static boolean initGraphDB() throws Exception {
|
||||
|
||||
logger.trace("Connecting to {} as {} to create new DB", DatabaseEnvironment.getDBURI(), DatabaseEnvironment.USERNAME);
|
||||
OServerAdmin serverAdmin = new OServerAdmin(DatabaseEnvironment.getDBURI()).connect(DatabaseEnvironment.USERNAME,
|
||||
DatabaseEnvironment.PASSWORD);
|
||||
OLogManager.instance().setWarnEnabled(false);
|
||||
OLogManager.instance().setErrorEnabled(false);
|
||||
OLogManager.instance().setInfoEnabled(false);
|
||||
OLogManager.instance().setDebugEnabled(false);
|
||||
|
||||
logger.trace("Connecting to {} as {} to create new DB",
|
||||
DatabaseEnvironment.DB_URI, DatabaseEnvironment.USERNAME);
|
||||
OServerAdmin serverAdmin = new OServerAdmin(DatabaseEnvironment.DB_URI)
|
||||
.connect(DatabaseEnvironment.USERNAME,
|
||||
DatabaseEnvironment.PASSWORD);
|
||||
|
||||
if (!serverAdmin.existsDatabase()) {
|
||||
|
||||
logger.trace("Creating Database {}", DatabaseEnvironment.getDBURI());
|
||||
serverAdmin.createDatabase(DatabaseEnvironment.DB, DATABASE_TYPE, STORAGE_MODE);
|
||||
logger.trace("Creating Database {}", DatabaseEnvironment.DB_URI);
|
||||
serverAdmin.createDatabase(DatabaseEnvironment.DB, DATABASE_TYPE,
|
||||
STORAGE_MODE);
|
||||
|
||||
logger.trace(
|
||||
"Connecting to newly created database {} as {} with default password",
|
||||
DatabaseEnvironment.getDBURI(), DatabaseEnvironment.DEFAULT_ADMIN_USERNAME);
|
||||
DatabaseEnvironment.DB_URI,
|
||||
DatabaseEnvironment.DEFAULT_ADMIN_USERNAME);
|
||||
|
||||
OrientGraphFactory factory = new OrientGraphFactory(DatabaseEnvironment.getDBURI(),
|
||||
DatabaseEnvironment.DEFAULT_ADMIN_USERNAME, DatabaseEnvironment.DEFAULT_ADMIN_PASSWORD).setupPool(
|
||||
1, 10);
|
||||
OrientGraphFactory factory = new OrientGraphFactory(
|
||||
DatabaseEnvironment.DB_URI,
|
||||
DatabaseEnvironment.DEFAULT_ADMIN_USERNAME,
|
||||
DatabaseEnvironment.DEFAULT_ADMIN_PASSWORD)
|
||||
.setupPool(1, 10);
|
||||
|
||||
OrientGraphNoTx orientGraphNoTx = factory.getNoTx();
|
||||
|
||||
OMetadata oMetadata = orientGraphNoTx.getRawGraph().getMetadata();
|
||||
OSecurity oSecurity = oMetadata.getSecurity();
|
||||
|
||||
logger.trace("Changing {} password", DatabaseEnvironment.DEFAULT_ADMIN_USERNAME);
|
||||
OUser admin = oSecurity.getUser(DatabaseEnvironment.DEFAULT_ADMIN_USERNAME);
|
||||
logger.trace("Changing {} password",
|
||||
DatabaseEnvironment.DEFAULT_ADMIN_USERNAME);
|
||||
OUser admin = oSecurity
|
||||
.getUser(DatabaseEnvironment.DEFAULT_ADMIN_USERNAME);
|
||||
admin.setPassword(DatabaseEnvironment.CHANGED_ADMIN_PASSWORD);
|
||||
admin.save();
|
||||
|
||||
for (PermissionMode permissionMode : DatabaseEnvironment.DEFAULT_PASSWORDS.keySet()) {
|
||||
for (PermissionMode permissionMode : DatabaseEnvironment.DEFAULT_PASSWORDS
|
||||
.keySet()) {
|
||||
OUser oUser = oSecurity.getUser(permissionMode.toString());
|
||||
oUser.setPassword(DatabaseEnvironment.DEFAULT_PASSWORDS.get(permissionMode));
|
||||
oUser.setPassword(DatabaseEnvironment.DEFAULT_PASSWORDS
|
||||
.get(permissionMode));
|
||||
oUser.save();
|
||||
logger.trace("Updating password for user {}", permissionMode.toString());
|
||||
logger.trace("Updating password for user {}",
|
||||
permissionMode.toString());
|
||||
}
|
||||
|
||||
logger.trace("Setting Record-level Security (see https://orientdb.com/docs/last/Database-Security.html)");
|
||||
|
@ -92,7 +110,7 @@ public class DatabaseIntializator {
|
|||
return false;
|
||||
}
|
||||
|
||||
public static void createEntitiesAndRelations() throws Exception{
|
||||
public static void createEntitiesAndRelations() throws Exception {
|
||||
ERDiscovery.addPackage(Embedded.class.getPackage());
|
||||
ERDiscovery.addPackage(Entity.class.getPackage());
|
||||
ERDiscovery.addPackage(Relation.class.getPackage());
|
||||
|
|
|
@ -45,10 +45,11 @@ public class Access {
|
|||
*/
|
||||
@GET
|
||||
public String query(@QueryParam(AccessPath.QUERY_PARAM) String query,
|
||||
@QueryParam(AccessPath.LIMIT_PARAM) int limit,
|
||||
@QueryParam(AccessPath.FETCH_PLAN_PARAM) String fetchPlan)
|
||||
throws InvalidQueryException {
|
||||
logger.info("Requested query (fetch plan {}):\n{}", fetchPlan, query);
|
||||
return queryManager.execute(query, fetchPlan);
|
||||
logger.info("Requested query (fetch plan {}, limit : {}):\n{}", fetchPlan, limit, query);
|
||||
return queryManager.query(query, limit, fetchPlan);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -160,7 +160,7 @@ public class ContextManagementImpl implements ContextManagement {
|
|||
SecurityContext.addToSecurityContext(orientGraph,
|
||||
context.asVertex(), uuidString);
|
||||
|
||||
String contextJsonString = Utility.toJsonString(context.asVertex());
|
||||
String contextJsonString = Utility.toJsonString(context.asVertex(), true);
|
||||
logger.trace("Creating {}", contextJsonString);
|
||||
|
||||
orientGraph.commit();
|
||||
|
@ -185,7 +185,7 @@ public class ContextManagementImpl implements ContextManagement {
|
|||
OrientGraph orientGraph = SecurityContextMapper
|
||||
.getSecurityContextFactory(null, PermissionMode.READER).getTx();
|
||||
Vertex context = getContext(orientGraph, contextUUID);
|
||||
return Utility.toJsonString(context);
|
||||
return Utility.toJsonString(context, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -223,7 +223,7 @@ public class ContextManagementImpl implements ContextManagement {
|
|||
|
||||
orientGraph.commit();
|
||||
|
||||
String contextJsonString = Utility.toJsonString(context);
|
||||
String contextJsonString = Utility.toJsonString(context, true);
|
||||
logger.info("Context renamed {}", contextJsonString);
|
||||
|
||||
orientGraph.shutdown();
|
||||
|
@ -246,7 +246,7 @@ public class ContextManagementImpl implements ContextManagement {
|
|||
.getSecurityContextFactory(null, PermissionMode.WRITER).getTx();
|
||||
Vertex context = getContext(orientGraph, contextToMoveUUID);
|
||||
|
||||
logger.trace("Context to move {}", Utility.toJsonString(context));
|
||||
logger.trace("Context to move {}", Utility.toJsonString(context, true));
|
||||
|
||||
checkContext(orientGraph, newParentUUID,
|
||||
context.getProperty(Context.NAME_PROPERTY).toString());
|
||||
|
@ -263,14 +263,14 @@ public class ContextManagementImpl implements ContextManagement {
|
|||
if (newParentUUID != null) {
|
||||
Vertex parent = getContext(orientGraph, newParentUUID);
|
||||
logger.trace("New Parent Context {}",
|
||||
Utility.toJsonString(parent));
|
||||
Utility.toJsonString(parent, true));
|
||||
orientGraph.addEdge(null, parent, context, IsParentOf.NAME);
|
||||
}
|
||||
|
||||
orientGraph.commit();
|
||||
|
||||
context = getContext(orientGraph, contextToMoveUUID);
|
||||
String contextJsonString = Utility.toJsonString(context);
|
||||
String contextJsonString = Utility.toJsonString(context, true);
|
||||
logger.info("Context moved {}", contextJsonString);
|
||||
|
||||
orientGraph.shutdown();
|
||||
|
@ -288,7 +288,7 @@ public class ContextManagementImpl implements ContextManagement {
|
|||
.getSecurityContextFactory(null, PermissionMode.WRITER).getTx();
|
||||
Vertex context = getContext(orientGraph, uuid);
|
||||
logger.trace("Context to be delete {}",
|
||||
Utility.toJsonString(context));
|
||||
Utility.toJsonString(context, true));
|
||||
|
||||
Iterable<Edge> edges = context.getEdges(Direction.OUT, IsParentOf.NAME);
|
||||
if (edges != null && edges.iterator().hasNext()) {
|
||||
|
|
|
@ -508,8 +508,8 @@ public class EntityManagementImpl implements EntityManagement {
|
|||
|
||||
logger.trace("Creating {} ({}) beetween {} -> {}",
|
||||
Relation.class.getSimpleName(), relationType,
|
||||
Utility.toJsonString(source),
|
||||
Utility.toJsonString(target));
|
||||
Utility.toJsonString(source, true),
|
||||
Utility.toJsonString(target, true));
|
||||
|
||||
Edge edge = orientGraph.addEdge(null, source, target, relationType);
|
||||
|
||||
|
|
|
@ -3,24 +3,22 @@
|
|||
*/
|
||||
package org.gcube.informationsystem.resourceregistry.resources.impl;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.InputStream;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.net.URLEncoder;
|
||||
import java.io.StringWriter;
|
||||
import java.io.Writer;
|
||||
import java.util.List;
|
||||
|
||||
import org.gcube.informationsystem.resourceregistry.api.Query;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.InvalidQueryException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextException;
|
||||
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper;
|
||||
import org.gcube.informationsystem.resourceregistry.api.rest.AccessPath;
|
||||
import org.gcube.informationsystem.resourceregistry.context.SecurityContextMapper.PermissionMode;
|
||||
import org.gcube.informationsystem.resourceregistry.dbinitialization.DatabaseEnvironment;
|
||||
import org.gcube.informationsystem.resourceregistry.resources.utils.ContextUtility;
|
||||
import org.glassfish.jersey.internal.util.Base64;
|
||||
import org.gcube.informationsystem.resourceregistry.resources.utils.Utility;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.sun.research.ws.wadl.HTTPMethods;
|
||||
import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
|
||||
import com.orientechnologies.orient.core.record.impl.ODocument;
|
||||
import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
|
||||
|
||||
/**
|
||||
* @author Luca Frosini (ISTI - CNR)
|
||||
|
@ -30,15 +28,17 @@ public class QueryImpl implements Query {
|
|||
|
||||
private static Logger logger = LoggerFactory.getLogger(QueryImpl.class);
|
||||
|
||||
/*
|
||||
private static final String QUERY = "query/";
|
||||
private static final String SQL = "sql/";
|
||||
private static final String DEFAULT_LIMIT = "20/";
|
||||
|
||||
private static final String DEFAULT_LIMIT = DEFAULT_LIMIT_INT + "/";
|
||||
|
||||
private static final URL BASE_QUERY_URL;
|
||||
|
||||
static {
|
||||
try {
|
||||
URL url = new URL(DatabaseEnvironment.getHTTPURL());
|
||||
URL url = new URL(DatabaseEnvironment.HTTP_URL_STRINGS[0]);
|
||||
URL urlQuery = new URL(url, QUERY);
|
||||
URL urlDB = new URL(urlQuery, DatabaseEnvironment.DB + "/");
|
||||
BASE_QUERY_URL = new URL(urlDB, SQL);
|
||||
|
@ -76,13 +76,13 @@ public class QueryImpl implements Query {
|
|||
URL queryURL = new URL(BASE_QUERY_URL, URLEncoder.encode(query,
|
||||
"UTF-8") + "/");
|
||||
|
||||
/*
|
||||
/ *
|
||||
if (limit != null && limit > 0) {
|
||||
queryURL = new URL(queryURL, limit.toString() + "/");
|
||||
} else {
|
||||
queryURL = new URL(queryURL, DEFAULT_LIMIT);
|
||||
}
|
||||
*/
|
||||
* /
|
||||
queryURL = new URL(queryURL, DEFAULT_LIMIT);
|
||||
|
||||
|
||||
|
@ -119,5 +119,54 @@ public class QueryImpl implements Query {
|
|||
throw new InvalidQueryException(e.getMessage(), e);
|
||||
}
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
@Override
|
||||
public String query(String query, int limit, String fetchPlan)
|
||||
throws InvalidQueryException {
|
||||
|
||||
int sanitizedLimit = limit > 4 ? limit : AccessPath.DEFAULT_LIMIT;
|
||||
|
||||
ODatabaseDocumentTx oDatabaseDocumentTx = null;
|
||||
|
||||
try {
|
||||
oDatabaseDocumentTx = ContextUtility
|
||||
.getActualSecurityContextDatabaseTx(PermissionMode.READER);
|
||||
|
||||
|
||||
OSQLSynchQuery<ODocument> osqlSynchQuery = new OSQLSynchQuery<>(query, sanitizedLimit);
|
||||
osqlSynchQuery.setFetchPlan(fetchPlan);
|
||||
osqlSynchQuery.setCacheableResult(true);
|
||||
|
||||
logger.debug("Going to execute query : \"{}\", fetchPlan : \"{}\", limit : {}",
|
||||
osqlSynchQuery.getText(), osqlSynchQuery.getFetchPlan(),
|
||||
osqlSynchQuery.getLimit());
|
||||
|
||||
List<Object> records = oDatabaseDocumentTx.query(osqlSynchQuery);
|
||||
|
||||
Writer writer = new StringWriter();
|
||||
writer.append("{\"result\":[");
|
||||
for(int i=0; i<records.size(); i++){
|
||||
ODocument oDocument = (ODocument) records.get(i);
|
||||
writer.append(Utility.toJsonString(oDocument, false));
|
||||
if( i<(records.size()-1) ){
|
||||
writer.append(",");
|
||||
}
|
||||
}
|
||||
writer.append("]}");
|
||||
|
||||
return writer.toString();
|
||||
|
||||
} catch (Exception e) {
|
||||
throw new InvalidQueryException(e.getMessage());
|
||||
} finally {
|
||||
if (oDatabaseDocumentTx != null) {
|
||||
oDatabaseDocumentTx.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ import org.gcube.informationsystem.resourceregistry.context.SecurityContextMappe
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
|
||||
import com.orientechnologies.orient.core.metadata.security.OSecurity;
|
||||
import com.orientechnologies.orient.core.record.impl.ODocument;
|
||||
import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
|
||||
|
@ -25,6 +26,7 @@ import com.tinkerpop.blueprints.Edge;
|
|||
import com.tinkerpop.blueprints.Vertex;
|
||||
import com.tinkerpop.blueprints.impls.orient.OrientGraph;
|
||||
import com.tinkerpop.blueprints.impls.orient.OrientGraphFactory;
|
||||
import com.tinkerpop.blueprints.impls.orient.OrientGraphNoTx;
|
||||
|
||||
/**
|
||||
* @author Luca Frosini (ISTI - CNR)
|
||||
|
@ -77,12 +79,25 @@ public class ContextUtility {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
public static OrientGraphFactory getFactory(PermissionMode permissionMode) throws ResourceRegistryException{
|
||||
try {
|
||||
String contextID = getActualContextUUID();
|
||||
return SecurityContextMapper
|
||||
.getSecurityContextFactory(contextID, permissionMode);
|
||||
} catch (ContextException ce) {
|
||||
logger.error("Unable to retrieve context.", ce);
|
||||
throw ce;
|
||||
} catch (Exception e) {
|
||||
logger.error("Unable to retrieve context.", e);
|
||||
throw new ResourceRegistryException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static OrientGraph getActualSecurityContextGraph(
|
||||
PermissionMode permissionMode) throws ResourceRegistryException {
|
||||
try {
|
||||
String contextID = getActualContextUUID();
|
||||
OrientGraphFactory factory = SecurityContextMapper
|
||||
.getSecurityContextFactory(contextID, permissionMode);
|
||||
OrientGraphFactory factory = getFactory(permissionMode);
|
||||
return factory.getTx();
|
||||
} catch (ContextException ce) {
|
||||
logger.error("Unable to retrieve context.", ce);
|
||||
|
@ -93,6 +108,35 @@ public class ContextUtility {
|
|||
}
|
||||
}
|
||||
|
||||
public static OrientGraphNoTx getActualSecurityContextGraphNoTx(
|
||||
PermissionMode permissionMode) throws ResourceRegistryException {
|
||||
try {
|
||||
OrientGraphFactory factory = getFactory(permissionMode);
|
||||
return factory.getNoTx();
|
||||
} catch (ContextException ce) {
|
||||
logger.error("Unable to retrieve context.", ce);
|
||||
throw ce;
|
||||
} catch (Exception e) {
|
||||
logger.error("Unable to retrieve context.", e);
|
||||
throw new ResourceRegistryException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static ODatabaseDocumentTx getActualSecurityContextDatabaseTx(
|
||||
PermissionMode permissionMode) throws ResourceRegistryException {
|
||||
try {
|
||||
OrientGraphFactory factory = getFactory(permissionMode);
|
||||
return factory.getDatabase();
|
||||
} catch (ContextException ce) {
|
||||
logger.error("Unable to retrieve context.", ce);
|
||||
throw ce;
|
||||
} catch (Exception e) {
|
||||
logger.error("Unable to retrieve context.", e);
|
||||
throw new ResourceRegistryException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static Vertex getContextVertexByFullName(OrientGraph orientGraph,
|
||||
String fullName) throws ContextNotFoundException {
|
||||
|
||||
|
@ -119,7 +163,7 @@ public class ContextUtility {
|
|||
Vertex context = iterator.next();
|
||||
|
||||
logger.trace("Context Representing Vertex : {}",
|
||||
Utility.toJsonString(context));
|
||||
Utility.toJsonString(context, true));
|
||||
|
||||
if (iterator.hasNext()) {
|
||||
throw new ContextNotFoundException(
|
||||
|
|
|
@ -42,6 +42,10 @@ public class Utility {
|
|||
|
||||
public static String toJsonString(OrientElement element, boolean raw) {
|
||||
ORecord oRecord = element.getRecord();
|
||||
return toJsonString(oRecord, raw);
|
||||
}
|
||||
|
||||
public static String toJsonString(ORecord oRecord, boolean raw) {
|
||||
if (raw) {
|
||||
return oRecord.toJSON();
|
||||
}
|
||||
|
@ -64,7 +68,7 @@ public class Utility {
|
|||
}
|
||||
}
|
||||
|
||||
public static String toJsonString(Element element) {
|
||||
public static String toJsonString(Element element, boolean raw) {
|
||||
try {
|
||||
return toJsonObject(element, true).toString();
|
||||
} catch (Exception e) {
|
||||
|
@ -99,7 +103,7 @@ public class Utility {
|
|||
Iterator<Vertex> iterator = vertexes.iterator();
|
||||
Vertex entity = iterator.next();
|
||||
|
||||
logger.trace("{} with {} is : {}", entityType, uuid, Utility.toJsonString(entity));
|
||||
logger.trace("{} with {} is : {}", entityType, uuid, Utility.toJsonString(entity, true));
|
||||
|
||||
if (iterator.hasNext()) {
|
||||
throw new ResourceRegistryException("Found more than one "
|
||||
|
@ -136,7 +140,7 @@ public class Utility {
|
|||
Edge relation = iterator.next();
|
||||
|
||||
logger.trace("{} with {} is : {}", relationType, uuid,
|
||||
Utility.toJsonString(relation));
|
||||
Utility.toJsonString(relation, true));
|
||||
|
||||
if (iterator.hasNext()) {
|
||||
throw new ResourceRegistryException("Found more than one "
|
||||
|
|
|
@ -17,7 +17,7 @@ public class QueryManagerFactory implements Factory<Query>{
|
|||
return new Query() {
|
||||
|
||||
@Override
|
||||
public String execute(String query, String fetchPlan) throws InvalidQueryException {
|
||||
public String query(String query, int limit, String fetchPlan) throws InvalidQueryException {
|
||||
if (query.equals("error"))
|
||||
throw new InvalidQueryException("error in query");
|
||||
return "result";
|
||||
|
|
|
@ -21,7 +21,10 @@ public class QueryImplTest {
|
|||
public void testQuery() throws InvalidQueryException{
|
||||
ScopeProvider.instance.set("/gcube/devNext");
|
||||
QueryImpl queryImpl = new QueryImpl();
|
||||
String ret = queryImpl.execute("select * from CPUFacet", null);
|
||||
|
||||
String query = "select * from CPUFacet";
|
||||
String ret = queryImpl.query(query, 2, null);
|
||||
|
||||
logger.debug(ret);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
HOST=orientdb01-d-d4s.d4science.org,orientdb02-d-d4s.d4science.org,orientdb02-d-d4s.d4science.org
|
||||
HOST=orientdb01-d-d4s.d4science.org;orientdb02-d-d4s.d4science.org;orientdb03-d-d4s.d4science.org
|
||||
REMOTE_PROTOCOL=remote:
|
||||
HTTP_PROTOCOL=https://
|
||||
HTTP_PORT=:443
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
#HOST=orientdb01-d-d4s.d4science.org
|
||||
HOST=pc-frosini.isti.cnr.it
|
||||
REMOTE_PROTOCOL= remote:
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
</appender>
|
||||
|
||||
|
||||
<logger name="org.gcube" level="DEBUG" />
|
||||
<logger name="org.gcube" level="TRACE" />
|
||||
|
||||
<root level="WARN">
|
||||
<appender-ref ref="STDOUT" />
|
||||
|
|
Loading…
Reference in New Issue