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)
);
final TypedQuery<T> query = getEntityManager().createQuery(
criteriaQuery
);
try {
return Optional.of(query.getSingleResult());
return Optional.of(
getEntityManager()
.createQuery(criteriaQuery)
.getSingleResult()
);
} catch (NoResultException ex) {
return Optional.empty();
}
@ -101,12 +101,19 @@ public class PublicationRepository
public <T extends Publication> Optional<T> findByUuidAndType(
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 {
return Optional.of(
getEntityManager()
.createNamedQuery("Publication.findByUuidAndType", type)
.setParameter("uuid", uuid)
.setParameter("type", type)
.createQuery(criteriaQuery)
.getSingleResult()
);
} catch (NoResultException ex) {
@ -123,19 +130,33 @@ public class PublicationRepository
}
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()
.createNamedQuery("Publication.findByType", type)
.setParameter("type", type)
.createQuery(criteriaQuery)
.getResultList();
}
public <T extends Publication> List<T> findByTitleAndType(
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()
.createNamedQuery("Publication.findByTitleAndType", type)
.setParameter("title", title)
.setParameter("type", type)
.createQuery(criteriaQuery)
.getResultList();
}
@ -149,10 +170,17 @@ public class PublicationRepository
public <T extends Publication> List<T> findByAuthorAndType(
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()
.createNamedQuery("Publication.findByAuthorAndType", type)
.setParameter("author", author)
.setParameter("type", type)
.createQuery(criteriaQuery)
.getResultList();
}

View File

@ -114,6 +114,7 @@ public class Publications {
final JsonObjectBuilder objectBuilder = Json
.createObjectBuilder()
.add("publicationId", publication.getPublicationId())
.add("uuid", publication.getUuid())
.add(
"authors",
publication
@ -135,7 +136,17 @@ public class Publications {
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) {

View File

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

View File

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

View File

@ -18,7 +18,8 @@ async function initPublicationPicker(publicationPickerElem: Element) {
"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 {
const response = await fetch(fetchUrl);
@ -39,7 +40,7 @@ async function initPublicationPicker(publicationPickerElem: Element) {
const selectButton = row.querySelector(".col-action button");
if (colName) {
colName.textContent = publication["name"];
colName.textContent = publication["title"];
}
if (colType) {
colType.textContent = publication["type"];
@ -84,4 +85,16 @@ async function selectPublication(
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();
}