diff --git a/src/main/java/org/olat/admin/user/imp/ImportStep00.java b/src/main/java/org/olat/admin/user/imp/ImportStep00.java index 73f7b1642371ecb68d1d772a038123328eff3ea0..07b01ba2d231ea083c7001f26893d659717ff71e 100644 --- a/src/main/java/org/olat/admin/user/imp/ImportStep00.java +++ b/src/main/java/org/olat/admin/user/imp/ImportStep00.java @@ -26,6 +26,7 @@ package org.olat.admin.user.imp; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -369,8 +370,14 @@ class ImportStep00 extends BasicStep { // check that no user with same (institutional) e-mail is already in OLAT if ( (thisKey.equals(UserConstants.INSTITUTIONALEMAIL) || thisKey.equals(UserConstants.EMAIL)) && !thisValue.isEmpty() ) { // check that no user with same email is already in OLAT - Identity identity = UserManager.getInstance().findIdentityByEmail(thisValue); - if (identity != null && !ud.equals(identity)) { + List<Identity> identities = UserManager.getInstance().findIdentitiesByEmail(Collections.singletonList(thisValue)); + if(identities.size() > 1) { + textAreaElement.setErrorKey("error.email.douplicate", new String[] { String.valueOf(i + 1), thisValue }); + importDataError = true; + break; + } + + if (identities.size() == 1 && !ud.equals(identities.get(0))) { textAreaElement.setErrorKey("error.email.exists", new String[] { String.valueOf(i + 1), thisValue }); importDataError = true; break; diff --git a/src/main/java/org/olat/ims/qti/process/QTIHelper.java b/src/main/java/org/olat/ims/qti/process/QTIHelper.java index fb570c381e4869224993e05f72ca407b98dd816a..70a37eacbb02bcb08aad17015393a20aa20d9ba8 100644 --- a/src/main/java/org/olat/ims/qti/process/QTIHelper.java +++ b/src/main/java/org/olat/ims/qti/process/QTIHelper.java @@ -440,8 +440,6 @@ public class QTIHelper { // we use a putSilent here (no invalidation notifications to other cluster nodes), since // we did not generate new data, but simply asked to reload it. ehCachLoadedQTIDocs.put(key, new Object[] { lmf, doc }); - log.audit("load, parse and cache Document for [[" + key + "]]"); - if (isDebugEnabled) { log.debug("[" + debugEnabledTime + "] Document loaded, parsed and put into cache!"); log.debug("[" + debugEnabledTime + "] Document approx Mem usage " + ObjectCloner.getObjectSize(doc)); diff --git a/src/main/java/org/olat/modules/fo/FilterForUserController.java b/src/main/java/org/olat/modules/fo/FilterForUserController.java index ba33f14ca126928a9533072d8e86669e5fea387b..d7aa7f65b3886d05064b5d69e35cba8c1ddc68d7 100644 --- a/src/main/java/org/olat/modules/fo/FilterForUserController.java +++ b/src/main/java/org/olat/modules/fo/FilterForUserController.java @@ -34,7 +34,6 @@ import org.olat.core.CoreSpringFactory; import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory; import org.olat.core.commons.modules.bc.meta.MetaInfo; import org.olat.core.commons.modules.bc.meta.tagged.MetaTagged; -import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl; import org.olat.core.commons.services.mark.Mark; import org.olat.core.commons.services.mark.MarkResourceStat; import org.olat.core.commons.services.mark.MarkingService; @@ -75,6 +74,7 @@ import org.olat.core.logging.AssertException; import org.olat.core.util.Formatter; import org.olat.core.util.StringHelper; import org.olat.core.util.resource.OresHelper; +import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSItem; import org.olat.core.util.vfs.VFSLeaf; import org.olat.core.util.vfs.VFSMediaResource; @@ -476,7 +476,7 @@ public class FilterForUserController extends BasicController { map.put("modified", dateFormat.format(m.getLastModified())); // message attachments ForumManager fm = ForumManager.getInstance(); - OlatRootFolderImpl msgContainer = fm.getMessageContainer(forum.getKey(), m.getKey()); + VFSContainer msgContainer = fm.getMessageContainer(forum.getKey(), m.getKey()); map.put("messageContainer", msgContainer); List<VFSItem> attachments = new ArrayList<VFSItem>(msgContainer.getItems(new VFSItemExcludePrefixFilter(MessageEditController.ATTACHMENT_EXCLUDE_PREFIXES))); // List attachments = msgContainer.getItems(); diff --git a/src/main/java/org/olat/modules/fo/ForumController.java b/src/main/java/org/olat/modules/fo/ForumController.java index 436719b2a18231e2b845ef98a9f08448ad99879c..3967c45039d662645a0ff0e1596915be49fa8f40 100644 --- a/src/main/java/org/olat/modules/fo/ForumController.java +++ b/src/main/java/org/olat/modules/fo/ForumController.java @@ -1229,7 +1229,7 @@ public class ForumController extends BasicController implements GenericEventList map.put("lastname", Formatter.truncate(creator.getUser().getProperty(UserConstants.LASTNAME, ureq.getLocale()),18)); map.put("modified", f.formatDateAndTime(m.getLastModified())); // message attachments - OlatRootFolderImpl msgContainer = fm.getMessageContainer(forum.getKey(), m.getKey()); + VFSContainer msgContainer = fm.getMessageContainer(forum.getKey(), m.getKey()); map.put("messageContainer", msgContainer); final List<VFSItem> attachments = new ArrayList<VFSItem>(msgContainer.getItems(new VFSItemExcludePrefixFilter(MessageEditController.ATTACHMENT_EXCLUDE_PREFIXES))); map.put("attachments", attachments); diff --git a/src/main/java/org/olat/modules/fo/ForumManager.java b/src/main/java/org/olat/modules/fo/ForumManager.java index 05be5bc980b3cb62cb05b2fa557ccfc887f0e3bd..4bcea1c544007638b08d96654bc6f0818a4ef41c 100644 --- a/src/main/java/org/olat/modules/fo/ForumManager.java +++ b/src/main/java/org/olat/modules/fo/ForumManager.java @@ -25,7 +25,6 @@ package org.olat.modules.fo; -import java.io.File; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; @@ -48,7 +47,8 @@ import org.olat.core.commons.services.text.TextService; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.logging.AssertException; -import org.olat.core.manager.BasicManager; +import org.olat.core.logging.OLog; +import org.olat.core.logging.Tracing; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.resource.OresHelper; import org.olat.core.util.vfs.VFSContainer; @@ -61,7 +61,8 @@ import org.springframework.stereotype.Service; * @author Felix Jost */ @Service -public class ForumManager extends BasicManager { +public class ForumManager { + private static final OLog log = Tracing.createLoggerFor(ForumManager.class); private static ForumManager INSTANCE; @Autowired @@ -104,7 +105,7 @@ public class ForumManager extends BasicManager { public List<Message> getThread(Long msgid, int firstResult, int maxResults, Message.OrderBy orderBy, boolean asc) { long rstart = 0; - if (isLogDebugEnabled()){ + if (log.isDebug()){ rstart = System.currentTimeMillis(); } @@ -124,9 +125,9 @@ public class ForumManager extends BasicManager { } List<Message> messages = dbQuery.list(); - if (isLogDebugEnabled()){ + if (log.isDebug()){ long rstop = System.currentTimeMillis(); - logDebug("time to fetch thread with topmsg_id " + msgid + " :" + (rstop - rstart), null); + log.debug("time to fetch thread with topmsg_id " + msgid + " :" + (rstop - rstart), null); } return messages; } @@ -201,7 +202,7 @@ public class ForumManager extends BasicManager { */ private List<Message> getMessagesByForumID(Long forum_id, int firstResult, int maxResults, boolean onlyThreads, Message.OrderBy orderBy, boolean asc) { long rstart = 0; - if(isLogDebugEnabled()){ + if(log.isDebug()){ rstart = System.currentTimeMillis(); } @@ -224,9 +225,9 @@ public class ForumManager extends BasicManager { } List<Message> messages = dbQuery.list(); - if(isLogDebugEnabled()){ + if(log.isDebug()){ long rstop = System.currentTimeMillis(); - logDebug("time to fetch forum with forum_id " + forum_id + " :" + (rstop - rstart), null); + log.debug("time to fetch forum with forum_id " + forum_id + " :" + (rstop - rstart), null); } return messages; } @@ -483,8 +484,8 @@ public class ForumManager extends BasicManager { OLATResourceable ores = OresHelper.createOLATResourceableInstance(Forum.class, forumKey); markingService.getMarkManager().deleteMarks(ores, m.getKey().toString()); - if(isLogDebugEnabled()){ - logDebug("Deleting message ", m.getKey().toString()); + if(log.isDebug()){ + log.debug("Deleting message ", m.getKey().toString()); } } @@ -530,25 +531,22 @@ public class ForumManager extends BasicManager { * @param messageKey * @return the valid container for the attachments to place into */ - public OlatRootFolderImpl getMessageContainer(Long forumKey, Long messageKey) { - String fKey = forumKey.toString(); - String mKey = messageKey.toString(); - StringBuilder sb = new StringBuilder(); - sb.append("/forum/"); - sb.append(fKey); - sb.append("/"); - sb.append(mKey); - String pathToMsgDir = sb.toString(); - OlatRootFolderImpl messageContainer = new OlatRootFolderImpl(pathToMsgDir, null); - File baseFile = messageContainer.getBasefile(); - baseFile.mkdirs(); - return messageContainer; + public VFSContainer getMessageContainer(Long forumKey, Long messageKey) { + VFSContainer forumContainer = getForumContainer(forumKey); + VFSItem messageContainer = forumContainer.resolve(messageKey.toString()); + if(messageContainer == null) { + return forumContainer.createChildContainer(messageKey.toString()); + } else if(messageContainer instanceof VFSContainer) { + return (VFSContainer)messageContainer; + } + log.error("The following message container is not a directory: " + messageContainer); + return null; } private void moveMessageContainer(Long fromForumKey, Long fromMessageKey, Long toForumKey, Long toMessageKey) { // copy message container - OlatRootFolderImpl toMessageContainer = getMessageContainer(toForumKey, toMessageKey); - OlatRootFolderImpl fromMessageContainer = getMessageContainer(fromForumKey, fromMessageKey); + VFSContainer toMessageContainer = getMessageContainer(toForumKey, toMessageKey); + VFSContainer fromMessageContainer = getMessageContainer(fromForumKey, fromMessageKey); for (VFSItem vfsItem : fromMessageContainer.getItems()) { toMessageContainer.copyFrom(vfsItem); } @@ -564,16 +562,16 @@ public class ForumManager extends BasicManager { fContainer.delete(); } - private OlatRootFolderImpl getForumContainer(Long forumKey) { - String fKey = forumKey.toString(); - StringBuilder sb = new StringBuilder(); - sb.append("/forum/"); - sb.append(fKey); - String pathToForumDir = sb.toString(); - OlatRootFolderImpl fContainer = new OlatRootFolderImpl(pathToForumDir, null); - File baseFile = fContainer.getBasefile(); - baseFile.mkdirs(); - return fContainer; + private VFSContainer getForumContainer(Long forumKey) { + OlatRootFolderImpl fContainer = new OlatRootFolderImpl("/forum", null); + VFSItem forumContainer = fContainer.resolve(forumKey.toString()); + if(forumContainer == null) { + return fContainer.createChildContainer(forumKey.toString()); + } else if(forumContainer instanceof VFSContainer) { + return (VFSContainer)forumContainer; + } + log.error("The following forum container is not a directory: " + forumContainer); + return null; } /** diff --git a/src/main/java/org/olat/modules/fo/MessageEditController.java b/src/main/java/org/olat/modules/fo/MessageEditController.java index e057a0fe33e85f8af57f3f7bf70a8c7d700ddef6..8c0bcf16d587524811463bde6244222351a71691 100644 --- a/src/main/java/org/olat/modules/fo/MessageEditController.java +++ b/src/main/java/org/olat/modules/fo/MessageEditController.java @@ -228,7 +228,7 @@ public class MessageEditController extends FormBasicController { List<VFSItem> attachments = new ArrayList<VFSItem>(); // add already existing attachments: if (message.getKey() != null) { - OlatRootFolderImpl msgContainer = fm.getMessageContainer(message.getForum().getKey(), message.getKey()); + VFSContainer msgContainer = fm.getMessageContainer(message.getForum().getKey(), message.getKey()); attachments.addAll(msgContainer.getItems(exclFilter)); } // add files from TempFolder @@ -328,7 +328,7 @@ public class MessageEditController extends FormBasicController { fileExists = true; } if (message.getKey() != null) { - OlatRootFolderImpl msgContainer = fm.getMessageContainer(message.getForum().getKey(), message.getKey()); + VFSContainer msgContainer = fm.getMessageContainer(message.getForum().getKey(), message.getKey()); if (msgContainer.resolve(fileName) != null) { fileExists = true; } @@ -459,7 +459,7 @@ public class MessageEditController extends FormBasicController { */ public void persistTempUploadedFiles(Message tmpMessage) { if (tmpMessage == null) throw new AssertException("Message may not be null to persist temp files"); - OlatRootFolderImpl msgContainer = fm.getMessageContainer(message.getForum().getKey(), message.getKey()); + VFSContainer msgContainer = fm.getMessageContainer(message.getForum().getKey(), message.getKey()); if (msgContainer != null) { List<VFSItem> tmpFList = getTempFolderFileList(); for (VFSItem file : tmpFList) { @@ -472,11 +472,7 @@ public class MessageEditController extends FormBasicController { ); } catch (IOException e) { removeTempUploadedFiles(); - throw new RuntimeException ( - "I/O error saving uploaded file:" - +msgContainer.getBasefile().getAbsolutePath() - +File.separator +leaf.getName() - ); + throw new RuntimeException ("I/O error saving uploaded file:" + msgContainer + "/" + leaf.getName()); } } } diff --git a/src/main/java/org/olat/modules/fo/archiver/formatters/ForumRTFFormatter.java b/src/main/java/org/olat/modules/fo/archiver/formatters/ForumRTFFormatter.java index a1b8f0c290a18ab82d5dd90d787a93feceefdbfd..e7939387212bea9146637b291ec0e58eb03540f6 100644 --- a/src/main/java/org/olat/modules/fo/archiver/formatters/ForumRTFFormatter.java +++ b/src/main/java/org/olat/modules/fo/archiver/formatters/ForumRTFFormatter.java @@ -157,7 +157,7 @@ public class ForumRTFFormatter extends ForumFormatter { } sb.append(" \\par}"); // attachment(s) - OlatRootFolderImpl msgContainer = fm.getMessageContainer(getForumKey(), mn.getKey()); + VFSContainer msgContainer = fm.getMessageContainer(getForumKey(), mn.getKey()); List<VFSItem> attachments = msgContainer.getItems(); if (attachments != null && attachments.size() > 0){ VFSItem item = container.resolve("attachments"); diff --git a/src/main/java/org/olat/modules/fo/archiver/formatters/ForumStreamedRTFFormatter.java b/src/main/java/org/olat/modules/fo/archiver/formatters/ForumStreamedRTFFormatter.java index 582272afcb09e2a0c580e0742b5d010fb9656695..ea3c1df4ca2637791b7eea3ab6e7cfe082ad9f00 100644 --- a/src/main/java/org/olat/modules/fo/archiver/formatters/ForumStreamedRTFFormatter.java +++ b/src/main/java/org/olat/modules/fo/archiver/formatters/ForumStreamedRTFFormatter.java @@ -38,7 +38,6 @@ import java.util.zip.ZipOutputStream; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringEscapeUtils; -import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl; import org.olat.core.id.Identity; import org.olat.core.id.UserConstants; import org.olat.core.logging.AssertException; @@ -48,6 +47,7 @@ import org.olat.core.util.WebappHelper; import org.olat.core.util.ZipUtil; import org.olat.core.util.filter.FilterFactory; import org.olat.core.util.nodes.INode; +import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSItem; import org.olat.modules.fo.ForumManager; import org.olat.modules.fo.MessageNode; @@ -143,7 +143,7 @@ public class ForumStreamedRTFFormatter extends ForumFormatter { } sb.append(" \\par}"); // attachment(s) - OlatRootFolderImpl msgContainer = fm.getMessageContainer(getForumKey(), mn.getKey()); + VFSContainer msgContainer = fm.getMessageContainer(getForumKey(), mn.getKey()); List<VFSItem> attachments = msgContainer.getItems(); if (attachments != null && attachments.size() > 0){ sb.append("{\\pard \\f0\\fs15 Attachment(s): "); diff --git a/src/main/java/org/olat/modules/fo/portfolio/ForumArtefactHandler.java b/src/main/java/org/olat/modules/fo/portfolio/ForumArtefactHandler.java index a76db64d7af6fbeb0254ac9d454c7eab68a07cee..18d501539967343511c9650eadab7467eec9b153 100755 --- a/src/main/java/org/olat/modules/fo/portfolio/ForumArtefactHandler.java +++ b/src/main/java/org/olat/modules/fo/portfolio/ForumArtefactHandler.java @@ -21,11 +21,11 @@ package org.olat.modules.fo.portfolio; import java.util.List; -import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.OLATResourceable; +import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSItem; import org.olat.modules.fo.ForumManager; import org.olat.modules.fo.Message; @@ -56,7 +56,7 @@ public class ForumArtefactHandler extends EPAbstractHandler<ForumArtefact> { String thread = fm.getThreadtop() != null ? fm.getThreadtop().getTitle() + " - " : ""; artefact.setTitle(thread + fm.getTitle()); - OlatRootFolderImpl msgContainer = fMgr.getMessageContainer(fm.getForum().getKey(), fm.getKey()); + VFSContainer msgContainer = fMgr.getMessageContainer(fm.getForum().getKey(), fm.getKey()); if (msgContainer != null) { List<VFSItem> foAttach = msgContainer.getItems(); if (foAttach.size()!=0){