/**
* gets an author from the database by determining the type of the provided id. if no author is present it builds one from the id.
* @param id the author identifier
* @return the author retrieved from the database or build with the identifier
* @throws JDOMException thrown upon parsing the source response
* @throws IOException thrown upon reading profiles from disc
* @throws SAXException thrown when parsing the files from disc
*/
public PublicationAuthor retrieveAuthor(String id) throws JDOMException, IOException, SAXException {
typeOfID = determineID(id);
LOGGER.info("given ID: " + id + " is of type " + typeOfID);
EntityManagerFactory emf = Persistence.createEntityManagerFactory("publicationAuthors");
EntityManager em = emf.createEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<PublicationAuthor> q = cb.createQuery(PublicationAuthor.class);
Root<PublicationAuthor> c = q.from(PublicationAuthor.class);
List<Predicate> predicates = new ArrayList<>();
if (typeOfID.equals("surname")) {
if (id.contains(",")) {
predicates.add(cb.equal(c.get("surname"),id.substring(0,id.indexOf(","))));
predicates.add(cb.equal(c.get("firstname"),id.substring(id.indexOf(",")+1)));
LOGGER.info("retriving surname, firstname from database for " + id);
} else if (id.contains(" ")) {
predicates.add(cb.equal(c.get("firstname"),id.substring(0,id.indexOf(" "))));
predicates.add(cb.equal(c.get("surname"),id.substring(id.indexOf(" ")+1)));
LOGGER.info("retrieving firstname surname from database for " + id);
} else {
predicates.add(cb.equal(c.get("surname"), id));
LOGGER.info("retrieving surname from database for " + id);
}
}
predicates.add(cb.equal(c.get(typeOfID), id));
q.select(c).where(cb.equal(c.get(typeOfID), id));
TypedQuery<PublicationAuthor> query = em.createQuery(q);
List<PublicationAuthor> authors = query.getResultList();
em.close();
if (authors.size() == 1) {
LOGGER.info("found author in database");
this.author = authors.get(0);
return author;
}
LOGGER.info("no match in database");
return buildAuthor(id);
}
AuthorBuilder.java 文件源码
java
阅读 27
收藏 0
点赞 0
评论 0
项目:bibliometrics
作者:
评论列表
文章目录