2014-10-14 14:35:43 +02:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
*/
|
2014-10-14 17:17:24 +02:00
|
|
|
package org.gcube.portlets.user.uriresolvermanager.readers;
|
2014-10-14 14:35:43 +02:00
|
|
|
|
|
|
|
import static org.gcube.resources.discovery.icclient.ICFactory.clientFor;
|
|
|
|
import static org.gcube.resources.discovery.icclient.ICFactory.queryFor;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Iterator;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import org.gcube.common.resources.gcore.ServiceEndpoint;
|
|
|
|
import org.gcube.common.resources.gcore.ServiceEndpoint.AccessPoint;
|
|
|
|
import org.gcube.common.resources.gcore.ServiceEndpoint.Property;
|
|
|
|
import org.gcube.common.resources.gcore.utils.Group;
|
|
|
|
import org.gcube.common.scope.api.ScopeProvider;
|
2014-10-14 18:13:47 +02:00
|
|
|
import org.gcube.portlets.user.uriresolvermanager.entity.ServiceParameter;
|
2014-10-14 17:17:24 +02:00
|
|
|
import org.gcube.portlets.user.uriresolvermanager.util.ScopeUtil;
|
2014-10-14 14:35:43 +02:00
|
|
|
import org.gcube.resources.discovery.client.api.DiscoveryClient;
|
|
|
|
import org.gcube.resources.discovery.client.queries.api.SimpleQuery;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
|
|
|
* @Oct 7, 2014
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public class RuntimeResourceReader {
|
|
|
|
|
|
|
|
public static final Logger logger = LoggerFactory.getLogger(RuntimeResourceReader.class);
|
|
|
|
|
2014-10-14 18:13:47 +02:00
|
|
|
public List<ServiceParameter> serviceParameters;
|
2014-10-14 14:35:43 +02:00
|
|
|
|
|
|
|
private String resourceName;
|
|
|
|
|
2014-10-14 17:27:13 +02:00
|
|
|
private String scope;
|
|
|
|
|
2014-10-14 18:13:47 +02:00
|
|
|
private String serviceBaseURI;
|
|
|
|
|
2014-10-14 17:27:13 +02:00
|
|
|
/**
|
|
|
|
* @throws Exception
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public RuntimeResourceReader(String scope, String resourceName) throws Exception {
|
|
|
|
this.scope = scope;
|
|
|
|
this.resourceName = resourceName;
|
|
|
|
readResource(scope, resourceName);
|
|
|
|
}
|
2014-10-14 14:35:43 +02:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param scope
|
|
|
|
* @return the application URI
|
|
|
|
* @throws Exception
|
|
|
|
*/
|
2014-10-14 18:13:47 +02:00
|
|
|
protected String readResource(String scope, String resourceName) throws Exception {
|
2014-10-14 17:27:13 +02:00
|
|
|
|
2014-10-14 14:35:43 +02:00
|
|
|
try{
|
2014-10-15 11:32:07 +02:00
|
|
|
logger.info("Tentative read resource: "+resourceName+", scope: "+scope);
|
2014-10-14 14:35:43 +02:00
|
|
|
|
|
|
|
this.resourceName = resourceName;
|
2014-10-14 18:13:47 +02:00
|
|
|
this.scope = scope;
|
|
|
|
|
2014-10-14 14:35:43 +02:00
|
|
|
String infraName = ScopeUtil.getInfrastructureNameFromScope(scope);
|
|
|
|
|
|
|
|
logger.info("Instancing root scope: "+infraName);
|
|
|
|
ScopeProvider.instance.set(infraName);
|
|
|
|
|
|
|
|
SimpleQuery query = queryFor(ServiceEndpoint.class);
|
|
|
|
query.addCondition("$resource/Profile/Name/string() eq '"+resourceName+"'");
|
|
|
|
|
|
|
|
DiscoveryClient<ServiceEndpoint> client = clientFor(ServiceEndpoint.class);
|
2014-10-14 17:27:13 +02:00
|
|
|
|
2014-10-14 14:35:43 +02:00
|
|
|
List<ServiceEndpoint> r = client.submit(query);
|
|
|
|
if (r == null || r.isEmpty()) throw new Exception("Cannot retrieve the runtime resource: "+resourceName);
|
|
|
|
|
|
|
|
ServiceEndpoint se = r.get(0);
|
|
|
|
if(se.profile()==null)
|
|
|
|
throw new Exception("IS profile is null for resource: "+resourceName);
|
|
|
|
|
|
|
|
Group<AccessPoint> accessPoints = se.profile().accessPoints();
|
|
|
|
if(accessPoints.size()==0) throw new Exception("Accesspoint in resource "+resourceName+" not found");
|
|
|
|
|
|
|
|
AccessPoint ap = accessPoints.iterator().next();
|
2014-10-14 17:27:13 +02:00
|
|
|
|
2014-10-14 14:35:43 +02:00
|
|
|
|
|
|
|
Group<Property> properties = ap.properties();
|
|
|
|
|
|
|
|
if(properties.size()==0){
|
|
|
|
logger.warn("Properties in resource "+resourceName+" not found");
|
|
|
|
}else{
|
|
|
|
|
2014-10-14 18:13:47 +02:00
|
|
|
serviceParameters = new ArrayList<ServiceParameter>(properties.size());
|
2014-10-14 14:35:43 +02:00
|
|
|
|
|
|
|
Iterator<Property> iter = properties.iterator();
|
|
|
|
|
|
|
|
while (iter.hasNext()) {
|
|
|
|
|
|
|
|
Property prop = iter.next();
|
|
|
|
|
2014-10-14 18:13:47 +02:00
|
|
|
serviceParameters.add(new ServiceParameter(prop.value(), true));
|
2014-10-14 14:35:43 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-10-14 17:27:13 +02:00
|
|
|
logger.info("returning URI: "+ap.address());
|
2014-10-14 18:13:47 +02:00
|
|
|
this.serviceBaseURI = ap.address();
|
|
|
|
return serviceBaseURI;
|
2014-10-14 17:27:13 +02:00
|
|
|
// parameters.setUser(ap.username()); //username
|
|
|
|
//
|
|
|
|
// String decryptedPassword = StringEncrypter.getEncrypter().decrypt(ap.password());
|
|
|
|
//
|
|
|
|
// parameters.setPassword(decryptedPassword); //password
|
|
|
|
// Group<Property> properties = ap.properties();
|
2014-10-14 14:35:43 +02:00
|
|
|
|
|
|
|
}catch (Exception e) {
|
2014-10-14 17:27:13 +02:00
|
|
|
logger.error("Sorry, an error occurred on reading the resource "+resourceName+ "Runtime Reosurces",e);
|
|
|
|
throw new Exception("Sorry, an error occurred on reading the resource "+resourceName+ "Runtime Reosurces");
|
2014-10-14 14:35:43 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public String getResourceName() {
|
|
|
|
return resourceName;
|
|
|
|
}
|
|
|
|
|
2014-10-14 18:13:47 +02:00
|
|
|
public List<ServiceParameter> getServiceParameters() {
|
|
|
|
return serviceParameters;
|
|
|
|
}
|
|
|
|
|
|
|
|
public String getServiceBaseURI() {
|
|
|
|
return serviceBaseURI;
|
|
|
|
}
|
2014-10-14 14:35:43 +02:00
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
StringBuilder builder = new StringBuilder();
|
2014-10-14 18:13:47 +02:00
|
|
|
builder.append("RuntimeResourceReader [serviceParameters=");
|
|
|
|
builder.append(serviceParameters);
|
2014-10-14 14:35:43 +02:00
|
|
|
builder.append(", resourceName=");
|
|
|
|
builder.append(resourceName);
|
2014-10-14 18:13:47 +02:00
|
|
|
builder.append(", scope=");
|
|
|
|
builder.append(scope);
|
|
|
|
builder.append(", serviceBaseURI=");
|
|
|
|
builder.append(serviceBaseURI);
|
2014-10-14 14:35:43 +02:00
|
|
|
builder.append("]");
|
|
|
|
return builder.toString();
|
|
|
|
}
|
2014-10-14 18:13:47 +02:00
|
|
|
|
|
|
|
/*public static void main(String[] args) {
|
2014-10-14 14:35:43 +02:00
|
|
|
try {
|
2014-10-14 17:27:13 +02:00
|
|
|
RuntimeResourceReader resolver = new RuntimeResourceReader("/gcube", "Gis-Resolver");
|
2014-10-14 14:35:43 +02:00
|
|
|
System.out.println(resolver);
|
|
|
|
} catch (Exception e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
2014-10-14 18:13:47 +02:00
|
|
|
}*/
|
2014-10-14 14:35:43 +02:00
|
|
|
|
|
|
|
}
|