2020-07-24 17:21:48 +02:00
|
|
|
|
2020-07-29 17:03:19 +02:00
|
|
|
package eu.dnetlib.dhp.oa.graph.dump.graph;
|
2020-07-24 17:21:48 +02:00
|
|
|
|
|
|
|
import java.io.StringReader;
|
2020-07-29 17:03:19 +02:00
|
|
|
import java.sql.ResultSet;
|
|
|
|
import java.sql.SQLException;
|
|
|
|
import java.sql.Statement;
|
|
|
|
import java.util.*;
|
|
|
|
import java.util.function.Consumer;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
import eu.dnetlib.dhp.schema.common.ModelSupport;
|
2020-07-24 17:21:48 +02:00
|
|
|
import org.dom4j.Document;
|
|
|
|
import org.dom4j.DocumentException;
|
|
|
|
import org.dom4j.Element;
|
2020-07-29 17:03:19 +02:00
|
|
|
import org.dom4j.Node;
|
2020-07-24 17:21:48 +02:00
|
|
|
import org.dom4j.io.SAXReader;
|
2020-07-29 17:03:19 +02:00
|
|
|
import org.jetbrains.annotations.NotNull;
|
2020-07-24 17:21:48 +02:00
|
|
|
|
2020-07-29 17:03:19 +02:00
|
|
|
import eu.dnetlib.dhp.schema.dump.oaf.graph.ResearchInitiative;
|
2020-07-24 17:21:48 +02:00
|
|
|
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException;
|
|
|
|
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService;
|
|
|
|
|
|
|
|
public class QueryInformationSystem {
|
|
|
|
|
|
|
|
private ISLookUpService isLookUp;
|
2020-07-29 17:03:19 +02:00
|
|
|
private List<String> contextRelationResult;
|
2020-07-24 17:21:48 +02:00
|
|
|
|
|
|
|
private static final String XQUERY = "for $x in collection('/db/DRIVER/ContextDSResources/ContextDSResourceType') "
|
|
|
|
+
|
|
|
|
" where $x//CONFIGURATION/context[./@type='community' or ./@type='ri'] " +
|
2020-07-29 17:03:19 +02:00
|
|
|
" and $x//context/param[./@name = 'status']/text() = 'all' " +
|
2020-07-24 17:21:48 +02:00
|
|
|
" return " +
|
2020-07-29 17:03:19 +02:00
|
|
|
"$x//context";
|
2020-07-24 17:21:48 +02:00
|
|
|
|
2020-07-29 17:03:19 +02:00
|
|
|
private static final String XQUERY_ENTITY = "for $x in collection('/db/DRIVER/ContextDSResources/ContextDSResourceType') "
|
|
|
|
+
|
|
|
|
"where $x//context[./@type='community' or ./@type = 'ri'] and $x//context/param[./@name = 'status']/text() = 'all' return "
|
|
|
|
+
|
|
|
|
"concat(data($x//context/@id) , '@@', $x//context/param[./@name =\"name\"]/text(), '@@', " +
|
|
|
|
"$x//context/param[./@name=\"description\"]/text(), '@@', $x//context/param[./@name = \"subject\"]/text(), '@@', "
|
|
|
|
+
|
|
|
|
"$x//context/param[./@name = \"zenodoCommunity\"]/text(), '@@', $x//context/@type)";
|
|
|
|
|
|
|
|
public void getContextInformation(final Consumer<ContextInfo> consumer) throws ISLookUpException {
|
|
|
|
|
|
|
|
isLookUp
|
|
|
|
.quickSearchProfile(XQUERY_ENTITY)
|
|
|
|
.forEach(c -> {
|
|
|
|
ContextInfo cinfo = new ContextInfo();
|
|
|
|
String[] cSplit = c.split("@@");
|
|
|
|
cinfo.setId(cSplit[0]);
|
|
|
|
cinfo.setName(cSplit[1]);
|
|
|
|
cinfo.setDescription(cSplit[2]);
|
|
|
|
if (!cSplit[3].trim().equals("")){
|
|
|
|
cinfo.setSubject(Arrays.asList(cSplit[3].split(",")));
|
|
|
|
}
|
|
|
|
cinfo.setZenodocommunity(cSplit[4]);
|
|
|
|
cinfo.setType(cSplit[5]);
|
|
|
|
consumer.accept(cinfo);
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public List<String> getContextRelationResult() {
|
|
|
|
return contextRelationResult;
|
|
|
|
}
|
2020-07-24 17:21:48 +02:00
|
|
|
|
2020-07-29 17:03:19 +02:00
|
|
|
public void setContextRelationResult(List<String> contextRelationResult) {
|
|
|
|
this.contextRelationResult = contextRelationResult;
|
2020-07-24 17:21:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public ISLookUpService getIsLookUp() {
|
|
|
|
return isLookUp;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setIsLookUp(ISLookUpService isLookUpService) {
|
|
|
|
this.isLookUp = isLookUpService;
|
|
|
|
}
|
|
|
|
|
2020-07-29 17:03:19 +02:00
|
|
|
public void execContextRelationQuery() throws ISLookUpException {
|
|
|
|
contextRelationResult = isLookUp.quickSearchProfile(XQUERY);
|
2020-07-24 17:21:48 +02:00
|
|
|
|
2020-07-29 17:03:19 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public void getContextRelation(final Consumer<ContextInfo> consumer, String category, String prefix) {
|
|
|
|
|
|
|
|
contextRelationResult.forEach(xml -> {
|
|
|
|
ContextInfo cinfo = new ContextInfo();
|
2020-07-24 17:21:48 +02:00
|
|
|
final Document doc;
|
2020-07-29 17:03:19 +02:00
|
|
|
|
2020-07-24 17:21:48 +02:00
|
|
|
try {
|
2020-07-29 17:03:19 +02:00
|
|
|
|
2020-07-24 17:21:48 +02:00
|
|
|
doc = new SAXReader().read(new StringReader(xml));
|
|
|
|
Element root = doc.getRootElement();
|
2020-07-29 17:03:19 +02:00
|
|
|
cinfo.setId(root.attributeValue("id"));
|
|
|
|
|
|
|
|
Iterator it = root.elementIterator();
|
|
|
|
while (it.hasNext()) {
|
|
|
|
Element el = (Element) it.next();
|
|
|
|
if(el.getName().equals("category")){
|
|
|
|
String categoryId = el.attributeValue("id");
|
|
|
|
categoryId = categoryId.substring(categoryId.lastIndexOf("::") + 2);
|
|
|
|
if (categoryId.equals(category)) {
|
|
|
|
cinfo.setDatasourceList(getCategoryList(el, prefix));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
consumer.accept(cinfo);
|
2020-07-24 17:21:48 +02:00
|
|
|
} catch (DocumentException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
2020-07-29 17:03:19 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@NotNull
|
|
|
|
private List<String> getCategoryList(Element el, String prefix) {
|
|
|
|
List<String> datasourceList = new ArrayList<>();
|
|
|
|
for(Object node : el.selectNodes(".//param")){
|
|
|
|
Node n = (Node)node;
|
|
|
|
if(n.valueOf("./@name").equals("openaireId")){
|
|
|
|
datasourceList.add(prefix + "|" + n.getText());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// cat_iterator = el.elementIterator();
|
|
|
|
// while (cat_iterator.hasNext()) {
|
|
|
|
// Element catEl = (Element) cat_iterator.next();
|
|
|
|
// if (catEl.getName().equals("param") && catEl.attribute("name").getValue().equals("openaireId")) {
|
|
|
|
// datasourceList.add(catEl.getText());
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
return datasourceList;
|
2020-07-24 17:21:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|