Fixed another potential lazy init exception
parent
f30dadf168
commit
6a9c5ee50f
|
|
@ -18,8 +18,11 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.ui.authoring.news;
|
package com.arsdigita.cms.ui.authoring.news;
|
||||||
|
|
||||||
|
import org.libreccm.l10n.GlobalizationHelper;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.librecms.contentsection.ContentSection;
|
import org.librecms.contentsection.ContentSection;
|
||||||
import org.librecms.contentsection.ContentSectionRepository;
|
import org.librecms.contentsection.ContentSectionRepository;
|
||||||
|
|
||||||
|
|
@ -32,13 +35,18 @@ import javax.inject.Inject;
|
||||||
import javax.persistence.EntityManager;
|
import javax.persistence.EntityManager;
|
||||||
import javax.persistence.TypedQuery;
|
import javax.persistence.TypedQuery;
|
||||||
import javax.transaction.Transactional;
|
import javax.transaction.Transactional;
|
||||||
|
|
||||||
import org.libreccm.security.PermissionChecker;
|
import org.libreccm.security.PermissionChecker;
|
||||||
import org.libreccm.security.Role;
|
import org.libreccm.security.Role;
|
||||||
import org.libreccm.security.RoleRepository;
|
import org.libreccm.security.RoleRepository;
|
||||||
import org.libreccm.security.Shiro;
|
import org.libreccm.security.Shiro;
|
||||||
import org.libreccm.security.User;
|
import org.libreccm.security.User;
|
||||||
|
import org.librecms.contentsection.ContentItemRepository;
|
||||||
import org.librecms.contentsection.ContentType;
|
import org.librecms.contentsection.ContentType;
|
||||||
import org.librecms.contentsection.ContentTypeRepository;
|
import org.librecms.contentsection.ContentTypeRepository;
|
||||||
|
import org.librecms.contenttypes.News;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controller class for the {@link NewItemForm}.
|
* Controller class for the {@link NewItemForm}.
|
||||||
|
|
@ -53,7 +61,7 @@ class NewItemFormController {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private Shiro shiro;
|
private Shiro shiro;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private PermissionChecker permissionChecker;
|
private PermissionChecker permissionChecker;
|
||||||
|
|
||||||
|
|
@ -62,7 +70,7 @@ class NewItemFormController {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ContentSectionRepository sectionRepo;
|
private ContentSectionRepository sectionRepo;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ContentTypeRepository typeRepo;
|
private ContentTypeRepository typeRepo;
|
||||||
|
|
||||||
|
|
@ -76,39 +84,41 @@ class NewItemFormController {
|
||||||
}
|
}
|
||||||
|
|
||||||
final List<Role> roles = user.get().getRoleMemberships().stream()
|
final List<Role> roles = user.get().getRoleMemberships().stream()
|
||||||
.map(membership -> membership.getRole())
|
.map(membership -> membership.getRole())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
final TypedQuery<Boolean> query = entityManager.createNamedQuery(
|
final TypedQuery<Boolean> query = entityManager.createNamedQuery(
|
||||||
"ContentSection.hasUsableContentTypes", Boolean.class);
|
"ContentSection.hasUsableContentTypes", Boolean.class);
|
||||||
query.setParameter("section", section);
|
query.setParameter("section", section);
|
||||||
query.setParameter("roles", roles);
|
query.setParameter("roles", roles);
|
||||||
query.setParameter("isSysAdmin", permissionChecker.isPermitted("*"));
|
query.setParameter("isSysAdmin", permissionChecker.isPermitted("*"));
|
||||||
|
|
||||||
return query.getSingleResult();
|
return query.getSingleResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
protected List<ContentType> getContentTypes(final ContentSection section) {
|
protected List<ContentType> getContentTypes(final ContentSection section) {
|
||||||
Objects.requireNonNull(section);
|
Objects.requireNonNull(section);
|
||||||
|
|
||||||
final Optional<User> user = shiro.getUser();
|
final Optional<User> user = shiro.getUser();
|
||||||
if (!user.isPresent()) {
|
if (!user.isPresent()) {
|
||||||
return Collections.EMPTY_LIST;
|
return Collections.EMPTY_LIST;
|
||||||
}
|
}
|
||||||
|
|
||||||
final List<Role> roles = user.get().getRoleMemberships().stream()
|
final List<Role> roles = user.get().getRoleMemberships().stream()
|
||||||
.map(membership -> membership.getRole())
|
.map(membership -> membership.getRole())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
final TypedQuery<ContentType> query = entityManager.createNamedQuery(
|
final TypedQuery<ContentType> query = entityManager.createNamedQuery(
|
||||||
"ContentSection.findUsableContentTypes",
|
"ContentSection.findUsableContentTypes",
|
||||||
ContentType.class);
|
ContentType.class);
|
||||||
query.setParameter("section", section);
|
query.setParameter("section", section);
|
||||||
query.setParameter("roles", roles);
|
query.setParameter("roles", roles);
|
||||||
query.setParameter("isSysAdmin", permissionChecker.isPermitted("*"));
|
query.setParameter("isSysAdmin", permissionChecker.isPermitted("*"));
|
||||||
|
|
||||||
return query.getResultList();
|
return query.getResultList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
package com.arsdigita.cms.ui.authoring.news;
|
||||||
|
|
||||||
|
import org.librecms.contentsection.ContentItemRepository;
|
||||||
|
import org.librecms.contenttypes.News;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.transaction.Transactional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
public class NewsController {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private ContentItemRepository itemRepo;
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
protected String getDescription(
|
||||||
|
final News fromNews, final Locale forLocale
|
||||||
|
) {
|
||||||
|
Objects.requireNonNull(fromNews);
|
||||||
|
final News news = itemRepo
|
||||||
|
.findById(fromNews.getObjectId(), News.class)
|
||||||
|
.orElseThrow(
|
||||||
|
() -> new IllegalArgumentException(
|
||||||
|
String.format(
|
||||||
|
"No News with ID %d available.", fromNews.getObjectId()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return news.getDescription().getValue(forLocale);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
protected String getText(final News fromNews, final Locale forLocale) {
|
||||||
|
Objects.requireNonNull(fromNews);
|
||||||
|
final News news = itemRepo
|
||||||
|
.findById(fromNews.getObjectId(), News.class)
|
||||||
|
.orElseThrow(
|
||||||
|
() -> new IllegalArgumentException(
|
||||||
|
String.format(
|
||||||
|
"No News with ID %d available",
|
||||||
|
fromNews.getObjectId()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return news.getText().getValue(forLocale);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
protected void updateText(
|
||||||
|
final News ofNews,
|
||||||
|
final Locale forLocale,
|
||||||
|
final String text
|
||||||
|
) {
|
||||||
|
Objects.requireNonNull(ofNews);
|
||||||
|
final News news = itemRepo
|
||||||
|
.findById(ofNews.getObjectId(), News.class)
|
||||||
|
.orElseThrow(
|
||||||
|
() -> new IllegalArgumentException(
|
||||||
|
String.format(
|
||||||
|
"No News with ID %d available",
|
||||||
|
ofNews.getObjectId()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
news.getText().addValue(forLocale, text);
|
||||||
|
itemRepo.save(news);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
protected void update(
|
||||||
|
final News news,
|
||||||
|
final Date releaseDate,
|
||||||
|
final Locale locale,
|
||||||
|
final String description
|
||||||
|
) {
|
||||||
|
Objects.requireNonNull(news);
|
||||||
|
final News update = itemRepo
|
||||||
|
.findById(news.getObjectId(), News.class)
|
||||||
|
.orElseThrow(
|
||||||
|
() -> new IllegalArgumentException(
|
||||||
|
String.format(
|
||||||
|
"No News with ID %d available",
|
||||||
|
news.getObjectId()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
update.setReleaseDate(releaseDate);
|
||||||
|
update.getDescription().addValue(locale, description);
|
||||||
|
itemRepo.save(update);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -36,7 +36,6 @@ import org.librecms.contenttypes.News;
|
||||||
import com.arsdigita.cms.ui.authoring.BasicPageForm;
|
import com.arsdigita.cms.ui.authoring.BasicPageForm;
|
||||||
import com.arsdigita.cms.ui.authoring.SelectedLanguageUtil;
|
import com.arsdigita.cms.ui.authoring.SelectedLanguageUtil;
|
||||||
import com.arsdigita.globalization.GlobalizedMessage;
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
import com.arsdigita.kernel.KernelConfig;
|
|
||||||
|
|
||||||
import org.libreccm.cdi.utils.CdiUtil;
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
import org.libreccm.configuration.ConfigurationManager;
|
import org.libreccm.configuration.ConfigurationManager;
|
||||||
|
|
@ -45,6 +44,7 @@ import org.librecms.contentsection.ContentItemRepository;
|
||||||
import org.librecms.contenttypes.NewsConfig;
|
import org.librecms.contenttypes.NewsConfig;
|
||||||
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.GregorianCalendar;
|
import java.util.GregorianCalendar;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
@ -181,7 +181,10 @@ public class NewsPropertyForm extends BasicPageForm
|
||||||
|
|
||||||
releaseDateSelector.addYear(releaseDate);
|
releaseDateSelector.addYear(releaseDate);
|
||||||
data.put(NEWS_DATE, releaseDate);
|
data.put(NEWS_DATE, releaseDate);
|
||||||
data.put(LEAD, item.getDescription().getValue(selectedLocale));
|
final NewsController controller = CdiUtil
|
||||||
|
.createCdiUtil()
|
||||||
|
.findBean(NewsController.class);
|
||||||
|
data.put(LEAD, controller.getDescription(item, selectedLocale));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -218,21 +221,15 @@ public class NewsPropertyForm extends BasicPageForm
|
||||||
.getSaveButton()
|
.getSaveButton()
|
||||||
.isSelected(event.getPageState())) {
|
.isSelected(event.getPageState())) {
|
||||||
|
|
||||||
|
final NewsController controller = CdiUtil
|
||||||
|
.createCdiUtil()
|
||||||
|
.findBean(NewsController.class);
|
||||||
|
|
||||||
|
final Date releaseDate = (java.util.Date) data.get(NEWS_DATE);
|
||||||
|
final String description = (String) data.get(LEAD);
|
||||||
final Locale selectedLocale = SelectedLanguageUtil
|
final Locale selectedLocale = SelectedLanguageUtil
|
||||||
.selectedLocale(state, selectedLanguageParam);
|
.selectedLocale(state, selectedLanguageParam);
|
||||||
|
controller.update(item, releaseDate, selectedLocale, description);
|
||||||
item.setReleaseDate((java.util.Date) data.get(NEWS_DATE));
|
|
||||||
item
|
|
||||||
.getDescription()
|
|
||||||
.addValue(
|
|
||||||
selectedLocale,
|
|
||||||
(String) data.get(LEAD));
|
|
||||||
|
|
||||||
final ContentItemRepository itemRepo = CdiUtil
|
|
||||||
.createCdiUtil()
|
|
||||||
.findBean(ContentItemRepository.class);
|
|
||||||
|
|
||||||
itemRepo.save(item);
|
|
||||||
}
|
}
|
||||||
if (propertiesStep != null) {
|
if (propertiesStep != null) {
|
||||||
propertiesStep.maybeForwardToNextStep(event.getPageState());
|
propertiesStep.maybeForwardToNextStep(event.getPageState());
|
||||||
|
|
|
||||||
|
|
@ -83,10 +83,13 @@ public class NewsTextBody extends TextBody {
|
||||||
|
|
||||||
final News news = getSelectedNews(state);
|
final News news = getSelectedNews(state);
|
||||||
|
|
||||||
return news
|
final NewsController controller = CdiUtil
|
||||||
.getText()
|
.createCdiUtil()
|
||||||
.getValue(SelectedLanguageUtil
|
.findBean(NewsController.class);
|
||||||
.selectedLocale(state, selectedLanguageParam));
|
return controller.getText(
|
||||||
|
news,
|
||||||
|
SelectedLanguageUtil.selectedLocale(state, selectedLanguageParam)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -97,11 +100,10 @@ public class NewsTextBody extends TextBody {
|
||||||
final Locale selectedLocale = SelectedLanguageUtil
|
final Locale selectedLocale = SelectedLanguageUtil
|
||||||
.selectedLocale(state, selectedLanguageParam);
|
.selectedLocale(state, selectedLanguageParam);
|
||||||
|
|
||||||
news.getText().addValue(selectedLocale, text);
|
final NewsController controller = CdiUtil
|
||||||
final ContentItemRepository itemRepo = CdiUtil
|
|
||||||
.createCdiUtil()
|
.createCdiUtil()
|
||||||
.findBean(ContentItemRepository.class);
|
.findBean(NewsController.class);
|
||||||
itemRepo.save(news);
|
controller.updateText(news, selectedLocale, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue