Some bugfixes

pull/1/head
Jens Pelzetter 2022-07-30 20:13:46 +02:00
parent fd188a4f92
commit 3f4da7553c
5 changed files with 99 additions and 42 deletions

View File

@ -70,12 +70,12 @@ public class PublicationRepository
criteriaBuilder.equal(from.get("publicationId"), publicationId) criteriaBuilder.equal(from.get("publicationId"), publicationId)
); );
final TypedQuery<T> query = getEntityManager().createQuery(
criteriaQuery
);
try { try {
return Optional.of(query.getSingleResult()); return Optional.of(
getEntityManager()
.createQuery(criteriaQuery)
.getSingleResult()
);
} catch (NoResultException ex) { } catch (NoResultException ex) {
return Optional.empty(); return Optional.empty();
} }
@ -101,12 +101,19 @@ public class PublicationRepository
public <T extends Publication> Optional<T> findByUuidAndType( public <T extends Publication> Optional<T> findByUuidAndType(
final String uuid, final Class<T> type final String uuid, final Class<T> type
) { ) {
final CriteriaBuilder criteriaBuilder = getEntityManager()
.getCriteriaBuilder();
final CriteriaQuery<T> criteriaQuery = criteriaBuilder.createQuery(type);
final Root<T> from = criteriaQuery.from(type);
criteriaQuery.where(
criteriaBuilder.equal(from.get("uuid"), uuid)
);
try { try {
return Optional.of( return Optional.of(
getEntityManager() getEntityManager()
.createNamedQuery("Publication.findByUuidAndType", type) .createQuery(criteriaQuery)
.setParameter("uuid", uuid)
.setParameter("type", type)
.getSingleResult() .getSingleResult()
); );
} catch (NoResultException ex) { } catch (NoResultException ex) {
@ -123,19 +130,33 @@ public class PublicationRepository
} }
public <T extends Publication> List<T> findByType(final Class<T> type) { public <T extends Publication> List<T> findByType(final Class<T> type) {
final CriteriaBuilder criteriaBuilder = getEntityManager()
.getCriteriaBuilder();
final CriteriaQuery<T> criteriaQuery = criteriaBuilder.createQuery(type);
criteriaQuery.from(type);
return getEntityManager() return getEntityManager()
.createNamedQuery("Publication.findByType", type) .createQuery(criteriaQuery)
.setParameter("type", type)
.getResultList(); .getResultList();
} }
public <T extends Publication> List<T> findByTitleAndType( public <T extends Publication> List<T> findByTitleAndType(
final String title, final Class<T> type final String title, final Class<T> type
) { ) {
final CriteriaBuilder criteriaBuilder = getEntityManager()
.getCriteriaBuilder();
final CriteriaQuery<T> criteriaQuery = criteriaBuilder.createQuery(type);
final Root<T> from = criteriaQuery.from(type);
criteriaQuery.where(
criteriaBuilder.like(
criteriaBuilder.lower(from.get("title")),
String.format("%%%s%%", title)
)
);
return getEntityManager() return getEntityManager()
.createNamedQuery("Publication.findByTitleAndType", type) .createQuery(criteriaQuery)
.setParameter("title", title)
.setParameter("type", type)
.getResultList(); .getResultList();
} }
@ -149,10 +170,17 @@ public class PublicationRepository
public <T extends Publication> List<T> findByAuthorAndType( public <T extends Publication> List<T> findByAuthorAndType(
final Person author, final Class<T> type final Person author, final Class<T> type
) { ) {
final CriteriaBuilder criteriaBuilder = getEntityManager()
.getCriteriaBuilder();
final CriteriaQuery<T> criteriaQuery = criteriaBuilder.createQuery(type);
final Root<T> from = criteriaQuery.from(type);
criteriaQuery.where(
criteriaBuilder.equal(from.get("author"), author)
);
return getEntityManager() return getEntityManager()
.createNamedQuery("Publication.findByAuthorAndType", type) .createQuery(criteriaQuery)
.setParameter("author", author)
.setParameter("type", type)
.getResultList(); .getResultList();
} }

View File

@ -114,6 +114,7 @@ public class Publications {
final JsonObjectBuilder objectBuilder = Json final JsonObjectBuilder objectBuilder = Json
.createObjectBuilder() .createObjectBuilder()
.add("publicationId", publication.getPublicationId()) .add("publicationId", publication.getPublicationId())
.add("uuid", publication.getUuid())
.add( .add(
"authors", "authors",
publication publication
@ -135,7 +136,17 @@ public class Publications {
publication.getTitle() publication.getTitle()
) )
) )
.add("year", publication.getYearOfPublication()); .add(
"type",
publication.getClass().getSimpleName()
);
if (publication.getYearOfPublication() == null) {
objectBuilder.addNull("year");
} else {
publication.getYearOfPublication();
}
if (publication instanceof PublicationWithPublisher) { if (publication instanceof PublicationWithPublisher) {

View File

@ -45,7 +45,7 @@
</cc:interface> </cc:interface>
<cc:implementation> <cc:implementation>
<div class="scicms-publications-picker" <div class="scicms-publication-picker"
data-publicationtype="#{cc.attrs.publicationType}" data-publicationtype="#{cc.attrs.publicationType}"
data-baseUrl="#{cc.attrs.baseUrl}" data-baseUrl="#{cc.attrs.baseUrl}"
data-contentsection="#{cc.attrs.contentSection}" data-contentsection="#{cc.attrs.contentSection}"
@ -114,7 +114,7 @@
label="#{SciPublicationsUiMessageBundle['publicationpicker.filter.label']}" label="#{SciPublicationsUiMessageBundle['publicationpicker.filter.label']}"
inputId="#{cc.attrs.publicationPickerId}-filter" inputId="#{cc.attrs.publicationPickerId}-filter"
name="" /> name="" />
</form>
<template id="#{cc.attrs.publicationPickerId}-row"> <template id="#{cc.attrs.publicationPickerId}-row">
<tr> <tr>
<td class="col-name"></td> <td class="col-name"></td>
@ -138,6 +138,7 @@
</thead> </thead>
<tbody></tbody> <tbody></tbody>
</table> </table>
</form>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-warning" <button class="btn btn-warning"
data-dismiss="modal" data-dismiss="modal"

View File

@ -88,6 +88,10 @@
</ui:define> </ui:define>
<ui:define name="publicationScripts">
<script src="#{request.contextPath}/assets/@scipublications/publication-picker.js" />
</ui:define>
</ui:composition> </ui:composition>
</html> </html>

View File

@ -18,7 +18,8 @@ async function initPublicationPicker(publicationPickerElem: Element) {
"data-contentsection" "data-contentsection"
); );
const fetchUrl = `/content-sections/${contentSection}/publications?type=${publicationType}`; // const fetchUrl = `/content-sections/${contentSection}/publications?type=${publicationType}`;
const fetchUrl = `/scipublications/publications?type=${publicationType}`;
try { try {
const response = await fetch(fetchUrl); const response = await fetch(fetchUrl);
@ -39,7 +40,7 @@ async function initPublicationPicker(publicationPickerElem: Element) {
const selectButton = row.querySelector(".col-action button"); const selectButton = row.querySelector(".col-action button");
if (colName) { if (colName) {
colName.textContent = publication["name"]; colName.textContent = publication["title"];
} }
if (colType) { if (colType) {
colType.textContent = publication["type"]; colType.textContent = publication["type"];
@ -84,4 +85,16 @@ async function selectPublication(
return; return;
} }
const publicationPickerParam = publicationPickerElem.querySelector(
".publicationpicker-param"
) as HTMLInputElement;
if (!publicationPickerParam) {
console.error("publicationPickerParam is null.");
return;
}
publicationPickerParam.value = `UUID-${publicationUuid}`;
const form = publicationPickerElem.querySelector("form") as HTMLFormElement;
form.submit();
} }