diff --git a/src/main/java/org/olat/commons/calendar/CalendarNotificationHandler.java b/src/main/java/org/olat/commons/calendar/CalendarNotificationHandler.java index 1b80a9ad85dbfae3a89aa3dc0b02244f0c23a767..0c70893886f1f26a22d116b7e6799ba3d2be6965 100644 --- a/src/main/java/org/olat/commons/calendar/CalendarNotificationHandler.java +++ b/src/main/java/org/olat/commons/calendar/CalendarNotificationHandler.java @@ -89,7 +89,10 @@ public class CalendarNotificationHandler extends LogDelegator implements Notific } else if (type.equals(CalendarController.ACTION_CALENDAR_GROUP)) { BusinessGroup group = CoreSpringFactory.getImpl(BusinessGroupService.class).loadBusinessGroup(id); calType = CalendarManager.TYPE_GROUP; - title = translator.translate("cal.notifications.header.group", new String[]{group.getName()}); + if(group == null) { + return NotificationsManager.getInstance().getNoSubscriptionInfo(); + } + title = translator.translate("cal.notifications.header.group", new String[]{ group.getName() }); } if (calType != null) { diff --git a/src/main/java/org/olat/modules/webFeed/search/indexer/FeedCourseNodeIndexer.java b/src/main/java/org/olat/modules/webFeed/search/indexer/FeedCourseNodeIndexer.java index 36a324d3bf2d4e5a47893a390e51ccbaab1f920e..f7bae1ee8504c73fa0b15af33782c82c3f78f51a 100644 --- a/src/main/java/org/olat/modules/webFeed/search/indexer/FeedCourseNodeIndexer.java +++ b/src/main/java/org/olat/modules/webFeed/search/indexer/FeedCourseNodeIndexer.java @@ -59,36 +59,39 @@ public abstract class FeedCourseNodeIndexer extends DefaultIndexer implements Co * @see org.olat.search.service.indexer.Indexer#doIndex(org.olat.search.service.SearchResourceContext, * java.lang.Object, org.olat.search.service.indexer.OlatFullIndexer) */ + @Override public void doIndex(SearchResourceContext searchResourceContext, ICourse course, CourseNode courseNode, OlatFullIndexer indexer) throws IOException, InterruptedException { RepositoryEntry repositoryEntry = courseNode.getReferencedRepositoryEntry(); - // used for log messages - String repoEntryName = "*name not available*"; - try { - repoEntryName = repositoryEntry.getDisplayname(); - if (log.isDebug()) { - log.info("Indexing: " + repoEntryName); - } - Feed feed = FeedManager.getInstance().getFeed(repositoryEntry.getOlatResource()); - - // Set the document type, e.g. type.repository.entry.FileResource.BLOG - SearchResourceContext nodeSearchContext = new SearchResourceContext(searchResourceContext); - nodeSearchContext.setBusinessControlFor(courseNode); - nodeSearchContext.setDocumentType(getDocumentType()); - nodeSearchContext.setTitle(courseNode.getShortTitle()); - nodeSearchContext.setDescription(courseNode.getLongTitle()); - - // Create the olatDocument for the feed course node itself - OlatDocument feedNodeDoc = new FeedNodeDocument(feed, nodeSearchContext); - indexer.addDocument(feedNodeDoc.getLuceneDocument()); - - // Only index items. Feed itself is indexed by RepositoryEntryIndexer. - for (Item item : feed.getPublishedItems()) { - OlatDocument itemDoc = new FeedItemDocument(item, nodeSearchContext); - indexer.addDocument(itemDoc.getLuceneDocument()); + if(repositoryEntry != null) { + // used for log messages + String repoEntryName = "*name not available*"; + try { + repoEntryName = repositoryEntry.getDisplayname(); + if (log.isDebug()) { + log.info("Indexing: " + repoEntryName); + } + Feed feed = FeedManager.getInstance().getFeed(repositoryEntry.getOlatResource()); + + // Set the document type, e.g. type.repository.entry.FileResource.BLOG + SearchResourceContext nodeSearchContext = new SearchResourceContext(searchResourceContext); + nodeSearchContext.setBusinessControlFor(courseNode); + nodeSearchContext.setDocumentType(getDocumentType()); + nodeSearchContext.setTitle(courseNode.getShortTitle()); + nodeSearchContext.setDescription(courseNode.getLongTitle()); + + // Create the olatDocument for the feed course node itself + OlatDocument feedNodeDoc = new FeedNodeDocument(feed, nodeSearchContext); + indexer.addDocument(feedNodeDoc.getLuceneDocument()); + + // Only index items. Feed itself is indexed by RepositoryEntryIndexer. + for (Item item : feed.getPublishedItems()) { + OlatDocument itemDoc = new FeedItemDocument(item, nodeSearchContext); + indexer.addDocument(itemDoc.getLuceneDocument()); + } + } catch (NullPointerException e) { + log.error("Error indexing feed:" + repoEntryName, e); } - } catch (NullPointerException e) { - log.error("Error indexing feed:" + repoEntryName, e); } } diff --git a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java index 974859b2b6980424ee927aac028aad317d3ff7d0..e2c54ed093fc7bb226f6628925155d57d914424c 100755 --- a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java +++ b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java @@ -1489,14 +1489,12 @@ public class EPStructureManager extends BasicManager { sb.append("select element from ").append(EPStructureElement.class.getName()).append(" element") .append(" where element.olatResource=:resource"); - DBQuery query = dbInstance.createQuery(sb.toString()); - query.setEntity("resource", resource); - - @SuppressWarnings("unchecked") - List<PortfolioStructure> resources = query.list(); + List<PortfolioStructure> resources = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), PortfolioStructure.class) + .setParameter("resource", resource) + .getResultList(); // if not found, it is an empty list - if (resources.isEmpty()) return null; - return resources.get(0); + return resources.isEmpty() ? null : resources.get(0); } /** diff --git a/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java b/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java index ae47e9f5e295c53e4949040642f0483a9c265c00..da8d79259edd8197313092589cba3ba8de1be9fa 100644 --- a/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java +++ b/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java @@ -391,13 +391,17 @@ public class RepositoryEditDescriptionController extends FormBasicController { private boolean validateTextElement(TextElement el, int maxLength) { boolean ok; - String val = el.getValue(); - el.clearError(); - if(val != null && val.length() > maxLength) { - el.setErrorKey("input.toolong", new String[]{ Integer.toString(maxLength) }); - ok = false; - } else { + if(el == null) { ok = true; + } else { + String val = el.getValue(); + el.clearError(); + if(val != null && val.length() > maxLength) { + el.setErrorKey("input.toolong", new String[]{ Integer.toString(maxLength) }); + ok = false; + } else { + ok = true; + } } return ok; } diff --git a/src/main/java/org/olat/search/service/document/file/WordOOXMLDocument.java b/src/main/java/org/olat/search/service/document/file/WordOOXMLDocument.java index 2883e24e82ce76abdf2de096185d7fa181687102..da0e2b1771e57dad940cf6f21ce955195cf9c88b 100644 --- a/src/main/java/org/olat/search/service/document/file/WordOOXMLDocument.java +++ b/src/main/java/org/olat/search/service/document/file/WordOOXMLDocument.java @@ -103,6 +103,7 @@ public class WordOOXMLDocument extends FileDocument { } catch (DocumentException e) { throw e; } catch (Exception e) { + e.printStackTrace(); throw new DocumentException(e.getMessage()); } finally { FileUtils.closeSafely(zip); diff --git a/src/main/java/org/olat/search/service/document/file/utils/SlicedDocument.java b/src/main/java/org/olat/search/service/document/file/utils/SlicedDocument.java index da4afa5dd9b0e2ad6ab242e4e058ec45c437e8b7..95fba7bc4daa9288aed9cd464bcb9a0461e0b652 100644 --- a/src/main/java/org/olat/search/service/document/file/utils/SlicedDocument.java +++ b/src/main/java/org/olat/search/service/document/file/utils/SlicedDocument.java @@ -41,7 +41,7 @@ public class SlicedDocument { public void setHeader(int index, StringBuilder doc) { ensureSize(headers, index); - documents.set(index, doc); + headers.set(index, doc); size += doc.length(); } diff --git a/src/main/java/org/olat/search/service/indexer/repository/course/CPCourseNodeIndexer.java b/src/main/java/org/olat/search/service/indexer/repository/course/CPCourseNodeIndexer.java index 1611af8e2797cf4f6afccdd894e333bdb5fa8128..b6740ac4f5a66a28c3ad3b28a81ca8fa1e075b28 100644 --- a/src/main/java/org/olat/search/service/indexer/repository/course/CPCourseNodeIndexer.java +++ b/src/main/java/org/olat/search/service/indexer/repository/course/CPCourseNodeIndexer.java @@ -28,7 +28,6 @@ package org.olat.search.service.indexer.repository.course; import java.io.File; import java.io.IOException; -import org.olat.core.logging.AssertException; import org.olat.core.util.vfs.LocalFolderImpl; import org.olat.core.util.vfs.VFSContainer; import org.olat.course.ICourse; @@ -53,24 +52,26 @@ public class CPCourseNodeIndexer extends FolderIndexer implements CourseNodeInde private final static String SUPPORTED_TYPE_NAME = "org.olat.course.nodes.CPCourseNode"; - public void doIndex(SearchResourceContext repositoryResourceContext, ICourse course, CourseNode courseNode, OlatFullIndexer indexWriter) throws IOException,InterruptedException { - if (isLogDebugEnabled()) logDebug("Index Content Package..."); - - SearchResourceContext courseNodeResourceContext = new SearchResourceContext(repositoryResourceContext); - courseNodeResourceContext.setBusinessControlFor(courseNode); - courseNodeResourceContext.setDocumentType(TYPE); - courseNodeResourceContext.setTitle(courseNode.getShortTitle()); - courseNodeResourceContext.setDescription(courseNode.getLongTitle()); + @Override + public void doIndex(SearchResourceContext repositoryResourceContext, ICourse course, CourseNode courseNode, OlatFullIndexer indexWriter) + throws IOException,InterruptedException { + RepositoryEntry re = CPEditController.getCPReference(courseNode.getModuleConfiguration(), false); + if(re != null) { + SearchResourceContext courseNodeResourceContext = new SearchResourceContext(repositoryResourceContext); + courseNodeResourceContext.setBusinessControlFor(courseNode); + courseNodeResourceContext.setDocumentType(TYPE); + courseNodeResourceContext.setTitle(courseNode.getShortTitle()); + courseNodeResourceContext.setDescription(courseNode.getLongTitle()); - RepositoryEntry re = CPEditController.getCPReference(courseNode.getModuleConfiguration(), true); - if (re == null) throw new AssertException("configurationkey 'CONFIG_KEY_REPOSITORY_SOFTKEY' of BB CP was missing"); - File cpRoot = FileResourceManager.getInstance().unzipFileResource(re.getOlatResource()); - if (cpRoot == null) throw new AssertException("file of repository entry " + re.getKey() + "was missing"); - - VFSContainer rootContainer = new LocalFolderImpl(cpRoot); - doIndexVFSContainer(courseNodeResourceContext,rootContainer,indexWriter,"", FolderIndexerAccess.FULL_ACCESS); + File cpRoot = FileResourceManager.getInstance().unzipFileResource(re.getOlatResource()); + if(cpRoot != null) { + VFSContainer rootContainer = new LocalFolderImpl(cpRoot); + doIndexVFSContainer(courseNodeResourceContext,rootContainer,indexWriter,"", FolderIndexerAccess.FULL_ACCESS); + } + } } + @Override public String getSupportedTypeName() { return SUPPORTED_TYPE_NAME; } diff --git a/src/main/java/org/olat/search/service/indexer/repository/course/ScormCourseNodeIndexer.java b/src/main/java/org/olat/search/service/indexer/repository/course/ScormCourseNodeIndexer.java index b09630a927b758b46ec0a3182ad89305a481d8ff..a6878989c3ac391eded308487ad1285382748f1d 100644 --- a/src/main/java/org/olat/search/service/indexer/repository/course/ScormCourseNodeIndexer.java +++ b/src/main/java/org/olat/search/service/indexer/repository/course/ScormCourseNodeIndexer.java @@ -24,7 +24,6 @@ import java.io.IOException; import org.olat.course.ICourse; import org.olat.course.nodes.CourseNode; -import org.olat.course.nodes.ScormCourseNode; import org.olat.fileresource.FileResourceManager; import org.olat.repository.RepositoryEntry; import org.olat.resource.OLATResource; @@ -49,18 +48,19 @@ public class ScormCourseNodeIndexer extends ScormRepositoryIndexer implements Co public void doIndex(SearchResourceContext repositoryResourceContext, ICourse course, CourseNode courseNode, OlatFullIndexer indexWriter) throws IOException, InterruptedException { - SearchResourceContext courseNodeResourceContext = new SearchResourceContext(repositoryResourceContext); - courseNodeResourceContext.setBusinessControlFor(courseNode); - courseNodeResourceContext.setDocumentType(NODE_TYPE); - courseNodeResourceContext.setTitle(courseNode.getShortTitle()); - courseNodeResourceContext.setDescription(courseNode.getLongTitle()); - - ScormCourseNode scormNode = (ScormCourseNode)courseNode; - RepositoryEntry repoEntry = scormNode.getReferencedRepositoryEntry(); - OLATResource ores = repoEntry.getOlatResource(); - File cpRoot = FileResourceManager.getInstance().unzipFileResource(ores); - - doIndex(courseNodeResourceContext, indexWriter, cpRoot); + RepositoryEntry repoEntry = courseNode.getReferencedRepositoryEntry(); + if(repoEntry != null) { + SearchResourceContext courseNodeResourceContext = new SearchResourceContext(repositoryResourceContext); + courseNodeResourceContext.setBusinessControlFor(courseNode); + courseNodeResourceContext.setDocumentType(NODE_TYPE); + courseNodeResourceContext.setTitle(courseNode.getShortTitle()); + courseNodeResourceContext.setDescription(courseNode.getLongTitle()); + + OLATResource ores = repoEntry.getOlatResource(); + File cpRoot = FileResourceManager.getInstance().unzipFileResource(ores); + + doIndex(courseNodeResourceContext, indexWriter, cpRoot); + } } @Override diff --git a/src/test/java/org/olat/portfolio/manager/EPStructureManagerTest.java b/src/test/java/org/olat/portfolio/manager/EPStructureManagerTest.java index a9b29f4f890e1cded03feabe6af28f7d5f32f894..7120df27658011c2ecc64689a672a1bd4be34b1e 100644 --- a/src/test/java/org/olat/portfolio/manager/EPStructureManagerTest.java +++ b/src/test/java/org/olat/portfolio/manager/EPStructureManagerTest.java @@ -451,6 +451,20 @@ public class EPStructureManagerTest extends OlatTestCase { Assert.assertEquals(map, myCloneAlt.get(0)); } + @Test + public void loadPortfolioStructure_resourceable() { + Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("EP-res-tmp-"); + //a template + PortfolioStructureMap template = epStructureManager.createPortfolioMapTemplate(user, "resourced-el", "resource-element"); + epStructureManager.savePortfolioStructure(template); + dbInstance.commitAndCloseSession(); + + OLATResource resource = template.getOlatResource(); + PortfolioStructure structure = epStructureManager.loadPortfolioStructure(resource); + Assert.assertNotNull(structure); + Assert.assertEquals(template, structure); + } + @Test public void testCountStructureElementsFromOthers() { Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("EP-tmp-"); @@ -464,8 +478,6 @@ public class EPStructureManagerTest extends OlatTestCase { Assert.assertEquals(0, count); } - - @Test public void testMoveUp() { //save parent and 5 children