Added full support for ModelKnowledge
This commit is contained in:
parent
9eceb98059
commit
3b125dfa15
|
@ -4,6 +4,7 @@ import java.util.Collection;
|
|||
|
||||
import org.gcube.informationsystem.base.reference.AccessType;
|
||||
import org.gcube.informationsystem.model.knowledge.TypesDiscoverer;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
||||
import org.gcube.informationsystem.types.reference.Type;
|
||||
|
||||
/**
|
||||
|
@ -11,16 +12,19 @@ import org.gcube.informationsystem.types.reference.Type;
|
|||
*/
|
||||
public class RRCTypesDiscoverer implements TypesDiscoverer<Type> {
|
||||
|
||||
protected ResourceRegistryClient resourceRegistryClient;
|
||||
protected ResourceRegistryClientImpl resourceRegistryClient;
|
||||
|
||||
public RRCTypesDiscoverer(ResourceRegistryClient resourceRegistryClient) {
|
||||
public RRCTypesDiscoverer(ResourceRegistryClientImpl resourceRegistryClient) {
|
||||
this.resourceRegistryClient = resourceRegistryClient;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Type> discover(AccessType accessType) {
|
||||
|
||||
return null;
|
||||
try {
|
||||
return resourceRegistryClient.getTypeFromServer(accessType.getTypeClass(), true);
|
||||
} catch (ResourceRegistryException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ import org.gcube.informationsystem.resourceregistry.api.exceptions.queries.Inval
|
|||
import org.gcube.informationsystem.resourceregistry.api.exceptions.queries.templates.QueryTemplateNotFoundException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.types.SchemaNotFoundException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.request.RequestInfo;
|
||||
import org.gcube.informationsystem.tree.Node;
|
||||
import org.gcube.informationsystem.types.reference.Type;
|
||||
|
||||
/**
|
||||
|
@ -73,6 +74,18 @@ public interface ResourceRegistryClient extends RequestInfo {
|
|||
public <ERElem extends ERElement> List<Type> getType(Class<ERElem> clazz, Boolean polymorphic)
|
||||
throws SchemaNotFoundException, ResourceRegistryException;
|
||||
|
||||
public String getType(String typeName, int level)
|
||||
throws SchemaNotFoundException, ResourceRegistryException;
|
||||
|
||||
public <ERElem extends ERElement> List<Type> getType(Class<ERElem> clazz, int level)
|
||||
throws SchemaNotFoundException, ResourceRegistryException;
|
||||
|
||||
public <ERElem extends ERElement> Node<Type> getTypeTreeNode(String typeName)
|
||||
throws SchemaNotFoundException, ResourceRegistryException;
|
||||
|
||||
public <ERElem extends ERElement> Node<Type> getTypeTreeNode(Class<ERElem> clazz)
|
||||
throws SchemaNotFoundException, ResourceRegistryException;
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
public <ERElem extends ERElement> List<ERElem> getInstances(Class<ERElem> clazz, Boolean polymorphic)
|
||||
|
|
|
@ -6,6 +6,7 @@ import java.util.ArrayList;
|
|||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.gcube.com.fasterxml.jackson.databind.JavaType;
|
||||
|
@ -371,24 +372,127 @@ public class ResourceRegistryClientImpl extends BaseRequestInfo implements Resou
|
|||
}
|
||||
}
|
||||
|
||||
public <ERElem extends ERElement> List<Type> getTypeFromTypesKnowledge(String typeName, Boolean polymorphic)
|
||||
throws SchemaNotFoundException, ResourceRegistryException {
|
||||
return getTypeFromTypesKnowledge(typeName, polymorphic, -1);
|
||||
}
|
||||
|
||||
|
||||
public <ERElem extends ERElement> List<Type> getTypeFromTypesKnowledge(String typeName, int level)
|
||||
throws SchemaNotFoundException, ResourceRegistryException {
|
||||
return getTypeFromTypesKnowledge(typeName, true, level);
|
||||
}
|
||||
|
||||
protected List<Type> addChildren(Node<Type> node, List<Type> types, int currentLevel, int maxLevel) {
|
||||
if(maxLevel>=0 && maxLevel <= currentLevel) {
|
||||
return types;
|
||||
}
|
||||
|
||||
Set<Node<Type>> children = node.getChildrenNodes();
|
||||
if(children!=null && children.size()>0) {
|
||||
for(Node<Type> child : children) {
|
||||
types.add(child.getNodeElement());
|
||||
types = addChildren(child, types, ++currentLevel, maxLevel);
|
||||
}
|
||||
}
|
||||
|
||||
return types;
|
||||
}
|
||||
|
||||
public <ERElem extends ERElement> List<Type> getTypeFromTypesKnowledge(String typeName, Boolean polymorphic, int level)
|
||||
throws SchemaNotFoundException, ResourceRegistryException {
|
||||
|
||||
Node<Type> node = getTypeTreeNode(typeName);
|
||||
|
||||
List<Type> types = new ArrayList<>();
|
||||
types.add(node.getNodeElement());
|
||||
|
||||
if (polymorphic) {
|
||||
addChildren(node, types, 0, level);
|
||||
}
|
||||
|
||||
return types;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType(String typeName, Boolean polymorphic) throws SchemaNotFoundException, ResourceRegistryException {
|
||||
try {
|
||||
List<Type> types = getTypeFromTypesKnowledge(typeName, polymorphic);
|
||||
return TypeMapper.serializeTypeDefinitions(types);
|
||||
} catch(ResourceRegistryException e) {
|
||||
throw e;
|
||||
} catch(Exception e) {
|
||||
throw new ResourceRegistryException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public <ERElem extends ERElement> List<Type> getType(Class<ERElem> clazz, Boolean polymorphic)
|
||||
throws SchemaNotFoundException, ResourceRegistryException {
|
||||
try {
|
||||
String json = getType(TypeUtility.getTypeName(clazz), polymorphic);
|
||||
return TypeMapper.deserializeTypeDefinitions(json);
|
||||
String typeName = TypeUtility.getTypeName(clazz);
|
||||
return getTypeFromTypesKnowledge(typeName, polymorphic);
|
||||
} catch (Exception e) {
|
||||
throw new ResourceRegistryException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getType(String typeName, int level) throws SchemaNotFoundException, ResourceRegistryException {
|
||||
try {
|
||||
List<Type> types = getTypeFromTypesKnowledge(typeName, level);
|
||||
return TypeMapper.serializeTypeDefinitions(types);
|
||||
} catch(ResourceRegistryException e) {
|
||||
throw e;
|
||||
} catch(Exception e) {
|
||||
throw new ResourceRegistryException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public <ERElem extends ERElement> List<Type> getType(Class<ERElem> clazz, int level)
|
||||
throws SchemaNotFoundException, ResourceRegistryException {
|
||||
try {
|
||||
String typeName = TypeUtility.getTypeName(clazz);
|
||||
return getTypeFromTypesKnowledge(typeName, level);
|
||||
} catch (Exception e) {
|
||||
throw new ResourceRegistryException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Node<Type> getTypeTreeNode(String typeName) throws SchemaNotFoundException, ResourceRegistryException {
|
||||
try {
|
||||
Node<Type> node = null;
|
||||
try {
|
||||
node = typesKnowledge.getModelKnowledge().getNodeByName(typeName);
|
||||
} catch (RuntimeException e) {
|
||||
throw new SchemaNotFoundException(e);
|
||||
}
|
||||
return node;
|
||||
} catch(ResourceRegistryException e) {
|
||||
throw e;
|
||||
} catch(Exception e) {
|
||||
throw new ResourceRegistryException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public <ERElem extends ERElement> Node<Type> getTypeTreeNode(Class<ERElem> clazz)
|
||||
throws SchemaNotFoundException, ResourceRegistryException {
|
||||
try {
|
||||
String typeName = TypeUtility.getTypeName(clazz);
|
||||
return getTypeTreeNode(typeName);
|
||||
} catch (Exception e) {
|
||||
throw new ResourceRegistryException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public <ERElem extends ERElement> List<Type> getTypeFromServer(Class<ERElem> clazz, Boolean polymorphic)
|
||||
throws SchemaNotFoundException, ResourceRegistryException {
|
||||
try {
|
||||
// String json = getTypeFromServer(TypeUtility.getTypeName(clazz), polymorphic);
|
||||
String json = getType(TypeUtility.getTypeName(clazz), polymorphic);
|
||||
String json = getTypeFromServer(TypeUtility.getTypeName(clazz), polymorphic);
|
||||
return TypeMapper.deserializeTypeDefinitions(json);
|
||||
} catch(ResourceRegistryException e) {
|
||||
throw e;
|
||||
|
@ -397,31 +501,7 @@ public class ResourceRegistryClientImpl extends BaseRequestInfo implements Resou
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@Override
|
||||
public String getType(String typeName, Boolean polymorphic)
|
||||
*/
|
||||
public String getTypeFromKnowledge(String typeName, Boolean polymorphic)
|
||||
throws SchemaNotFoundException, ResourceRegistryException {
|
||||
try {
|
||||
Node<Type> node = typesKnowledge.getModelKnowledge().getNodeByName(typeName);
|
||||
if(polymorphic) {
|
||||
// TODO
|
||||
// Navigate the subtree
|
||||
}else {
|
||||
// TODO
|
||||
node.getNodeElement();
|
||||
}
|
||||
return null;
|
||||
} catch(Exception e) {
|
||||
throw new ResourceRegistryException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// public String getTypeFromServer(String typeName, Boolean polymorphic)
|
||||
@Override
|
||||
public String getType(String typeName, Boolean polymorphic)
|
||||
public String getTypeFromServer(String typeName, Boolean polymorphic)
|
||||
throws SchemaNotFoundException, ResourceRegistryException {
|
||||
try {
|
||||
logger.info("Going to get {} schema", typeName);
|
||||
|
|
|
@ -13,8 +13,8 @@ import org.gcube.common.authorization.utils.secret.JWTSecret;
|
|||
import org.gcube.common.authorization.utils.secret.Secret;
|
||||
import org.gcube.common.authorization.utils.secret.SecretUtility;
|
||||
import org.gcube.common.keycloak.KeycloakClientFactory;
|
||||
import org.gcube.common.keycloak.KeycloakClientHelper;
|
||||
import org.gcube.common.keycloak.model.TokenResponse;
|
||||
import org.gcube.common.scope.api.ScopeProvider;
|
||||
import org.gcube.informationsystem.model.reference.properties.Metadata;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
|
@ -24,7 +24,6 @@ import org.slf4j.LoggerFactory;
|
|||
/**
|
||||
* @author Luca Frosini (ISTI - CNR)
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
public class ContextTest {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(ContextTest.class);
|
||||
|
@ -40,14 +39,13 @@ public class ContextTest {
|
|||
public static final String NEXTNEXT;
|
||||
public static final String DEVSEC;
|
||||
public static final String DEVVRE;
|
||||
|
||||
|
||||
protected static final Properties properties;
|
||||
|
||||
protected static final String CLIENT_ID_PROPERTY_KEY = "client_id";
|
||||
protected static final String CLIENT_SECRET_PROPERTY_KEY = "client_secret";
|
||||
|
||||
protected static final String clientID;
|
||||
protected static final String clientSecret;
|
||||
public static final String TYPE_PROPERTY_KEY = "type";
|
||||
public static final String USERNAME_PROPERTY_KEY = "username";
|
||||
public static final String PASSWORD_PROPERTY_KEY = "password";
|
||||
public static final String CLIENT_ID_PROPERTY_KEY = "clientId";
|
||||
|
||||
public static final String RESOURCE_REGISTRY_URL_PROPERTY = "RESOURCE_REGISTRY_URL";
|
||||
public static final String RESOURCE_REGISTRY_URL;
|
||||
|
@ -69,9 +67,6 @@ public class ContextTest {
|
|||
// load the properties file
|
||||
properties.load(input);
|
||||
|
||||
clientID = properties.getProperty(CLIENT_ID_PROPERTY_KEY);
|
||||
clientSecret = properties.getProperty(CLIENT_SECRET_PROPERTY_KEY);
|
||||
|
||||
RESOURCE_REGISTRY_URL = properties.getProperty(RESOURCE_REGISTRY_URL_PROPERTY);
|
||||
|
||||
} catch (IOException e) {
|
||||
|
@ -80,6 +75,10 @@ public class ContextTest {
|
|||
|
||||
}
|
||||
|
||||
private enum Type{
|
||||
USER, CLIENT_ID
|
||||
};
|
||||
|
||||
public static void set(Secret secret) throws Exception {
|
||||
SecretManagerProvider.instance.reset();
|
||||
SecretManager secretManager = new SecretManager();
|
||||
|
@ -89,15 +88,56 @@ public class ContextTest {
|
|||
}
|
||||
|
||||
public static void setContextByName(String fullContextName) throws Exception {
|
||||
logger.debug("Going to set credentials for context {}", fullContextName);
|
||||
Secret secret = getSecretByContextName(fullContextName);
|
||||
set(secret);
|
||||
}
|
||||
|
||||
|
||||
private static TokenResponse getJWTAccessToken(String context) throws Exception {
|
||||
ScopeProvider.instance.set(context);
|
||||
TokenResponse tr = KeycloakClientFactory.newInstance().queryUMAToken(clientID, clientSecret, context, null);
|
||||
return tr;
|
||||
Type type = Type.valueOf(properties.get(TYPE_PROPERTY_KEY).toString());
|
||||
|
||||
TokenResponse tr = null;
|
||||
|
||||
int index = context.indexOf('/', 1);
|
||||
String root = context.substring(0, index == -1 ? context.length() : index);
|
||||
|
||||
switch (type) {
|
||||
case CLIENT_ID:
|
||||
String clientId = properties.getProperty(CLIENT_ID_PROPERTY_KEY);
|
||||
String clientSecret = properties.getProperty(root);
|
||||
|
||||
tr = KeycloakClientFactory.newInstance().queryUMAToken(context, clientId, clientSecret, context, null);
|
||||
break;
|
||||
|
||||
case USER:
|
||||
default:
|
||||
String username = properties.getProperty(USERNAME_PROPERTY_KEY);
|
||||
String password = properties.getProperty(PASSWORD_PROPERTY_KEY);
|
||||
|
||||
switch (root) {
|
||||
case "/gcube":
|
||||
default:
|
||||
clientId = "next.d4science.org";
|
||||
break;
|
||||
|
||||
case "/pred4s":
|
||||
clientId = "pre.d4science.org";
|
||||
break;
|
||||
|
||||
case "/d4science.research-infrastructures.eu":
|
||||
clientId = "services.d4science.org";
|
||||
break;
|
||||
}
|
||||
clientSecret = null;
|
||||
|
||||
tr = KeycloakClientHelper.getTokenForUser(context, username, password);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
return tr;
|
||||
|
||||
}
|
||||
|
||||
public static Secret getSecretByContextName(String context) throws Exception {
|
||||
|
|
|
@ -3,16 +3,19 @@
|
|||
*/
|
||||
package org.gcube.informationsystem.resourceregistry.client;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.gcube.com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import org.gcube.informationsystem.base.reference.AccessType;
|
||||
import org.gcube.informationsystem.base.reference.Direction;
|
||||
import org.gcube.informationsystem.contexts.reference.entities.Context;
|
||||
import org.gcube.informationsystem.contexts.reference.relations.IsParentOf;
|
||||
import org.gcube.informationsystem.model.impl.properties.MetadataImpl;
|
||||
import org.gcube.informationsystem.model.reference.ERElement;
|
||||
import org.gcube.informationsystem.model.reference.entities.Resource;
|
||||
import org.gcube.informationsystem.model.reference.properties.Metadata;
|
||||
import org.gcube.informationsystem.model.reference.relations.IsRelatedTo;
|
||||
|
@ -20,6 +23,8 @@ import org.gcube.informationsystem.resourceregistry.api.contexts.ContextCache;
|
|||
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
|
||||
import org.gcube.informationsystem.resourceregistry.api.exceptions.types.SchemaNotFoundException;
|
||||
import org.gcube.informationsystem.serialization.ElementMapper;
|
||||
import org.gcube.informationsystem.tree.Node;
|
||||
import org.gcube.informationsystem.tree.Tree;
|
||||
import org.gcube.informationsystem.types.reference.Type;
|
||||
import org.gcube.informationsystem.utils.UUIDManager;
|
||||
import org.gcube.informationsystem.utils.UUIDUtility;
|
||||
|
@ -30,6 +35,7 @@ import org.gcube.resourcemanagement.model.reference.entities.facets.SoftwareFace
|
|||
import org.gcube.resourcemanagement.model.reference.entities.resources.EService;
|
||||
import org.gcube.resourcemanagement.model.reference.entities.resources.HostingNode;
|
||||
import org.gcube.resourcemanagement.model.reference.entities.resources.Service;
|
||||
import org.gcube.resourcemanagement.model.reference.entities.resources.VirtualService;
|
||||
import org.gcube.resourcemanagement.model.reference.relations.consistsof.IsIdentifiedBy;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
@ -60,16 +66,68 @@ public class ResourceRegistryClientTest extends ContextTest {
|
|||
logger.trace(res);
|
||||
}
|
||||
|
||||
protected List<String> getTypeNames(List<Type> types){
|
||||
List<String> list = new ArrayList<String>();
|
||||
for(Type t : types) {
|
||||
list.add(t.getName());
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
protected <ERElem extends ERElement> void getTypesFromKnowledge(Class<ERElem> clazz) throws SchemaNotFoundException, ResourceRegistryException {
|
||||
List<Type> types = resourceRegistryClient.getType(clazz, true);
|
||||
logger.trace("List size {}\n{}", types.size(), getTypeNames(types));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testModelKnowledge() throws SchemaNotFoundException, ResourceRegistryException {
|
||||
AccessType[] modelTypes = AccessType.getModelTypes();
|
||||
for(AccessType accessType : modelTypes) {
|
||||
getTypesFromKnowledge(accessType.getTypeClass());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetFacetSchema() throws SchemaNotFoundException, ResourceRegistryException {
|
||||
List<Type> typeDefinitions = resourceRegistryClient.getType(ContactFacet.class, true);
|
||||
logger.trace("{}", typeDefinitions);
|
||||
List<Type> types = resourceRegistryClient.getType(ContactFacet.class, true);
|
||||
logger.trace("List size {}\n{}", types.size(), getTypeNames(types));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetResourceSchema() throws SchemaNotFoundException, ResourceRegistryException {
|
||||
List<Type> typeDefinitions = resourceRegistryClient.getType(HostingNode.class, true);
|
||||
logger.trace("{}", typeDefinitions);
|
||||
List<Type> types = resourceRegistryClient.getType(HostingNode.class, true);
|
||||
logger.trace("List size {}\n{}", types.size(), getTypeNames(types));
|
||||
types = resourceRegistryClient.getType(VirtualService.class, true);
|
||||
logger.trace("List size {}\n{}", types.size(), getTypeNames(types));
|
||||
types = resourceRegistryClient.getType(Service.class, true);
|
||||
logger.trace("List size {}\n{}", types.size(), getTypeNames(types));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetResourceWithLevel() throws SchemaNotFoundException, ResourceRegistryException {
|
||||
for(int i=0; i<5; i++) {
|
||||
List<Type> types = resourceRegistryClient.getType(Resource.class, i);
|
||||
logger.trace("List size with level {} is {}\n{}", i, types.size(), getTypeNames(types));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetModelKnowledge() throws SchemaNotFoundException, ResourceRegistryException {
|
||||
AccessType[] modelTypes = AccessType.getModelTypes();
|
||||
for(AccessType accessType : modelTypes) {
|
||||
Tree<Type> tree = ((ResourceRegistryClientImpl) resourceRegistryClient).getModelKnowledge().getTree(accessType);
|
||||
logger.trace("{}", tree);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testGetNode() throws SchemaNotFoundException, ResourceRegistryException {
|
||||
AccessType[] modelTypes = AccessType.getModelTypes();
|
||||
for(AccessType accessType : modelTypes) {
|
||||
Node<Type> node = resourceRegistryClient.getTypeTreeNode(accessType.getTypeClass());
|
||||
logger.trace("{}", node);
|
||||
}
|
||||
}
|
||||
|
||||
interface Aux extends Service {
|
||||
|
|
Loading…
Reference in New Issue