diff --git a/src/main/java/org/olat/admin/securitygroup/gui/multi/UsersToGroupWizardController.java b/src/main/java/org/olat/admin/securitygroup/gui/multi/UsersToGroupWizardController.java index 5583237750696ec8bc23c7d242b2464420dd7892..90e7c3c50021baa935220005da6efa7084c764a8 100644 --- a/src/main/java/org/olat/admin/securitygroup/gui/multi/UsersToGroupWizardController.java +++ b/src/main/java/org/olat/admin/securitygroup/gui/multi/UsersToGroupWizardController.java @@ -34,7 +34,7 @@ import org.olat.basesecurity.BaseSecurityManager; import org.olat.basesecurity.Constants; import org.olat.basesecurity.SecurityGroup; import org.olat.basesecurity.events.MultiIdentityChosenEvent; -import org.olat.core.commons.persistence.SyncHelper; +import org.olat.core.commons.persistence.PersistenceHelper; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.form.flexible.FormItemContainer; @@ -173,13 +173,13 @@ public class UsersToGroupWizardController extends WizardController { isanonymous.add(username); } else { // check if already in group - boolean inGroup = SyncHelper.containsPersistable(existIdents, ident); + boolean inGroup = PersistenceHelper.containsPersistable(existIdents, ident); if (inGroup) { // added to warning: already in group alreadyin.add(ident.getName()); } else { // ok to add -> preview (but filter duplicate entries) - if (!SyncHelper.containsPersistable(oks, ident)) { + if (!PersistenceHelper.containsPersistable(oks, ident)) { oks.add(ident); } } diff --git a/src/main/java/org/olat/collaboration/CollaborationToolsFactory.java b/src/main/java/org/olat/collaboration/CollaborationToolsFactory.java index aa359141134f74269b1febd777a13fd329c52537..8b50c8af3ff09806a20d1e6c773885e178975ade 100644 --- a/src/main/java/org/olat/collaboration/CollaborationToolsFactory.java +++ b/src/main/java/org/olat/collaboration/CollaborationToolsFactory.java @@ -29,7 +29,7 @@ import org.olat.core.id.OLATResourceable; import org.olat.core.logging.AssertException; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; -import org.olat.core.util.cache.n.CacheWrapper; +import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.coordinate.SyncerCallback; import org.olat.group.BusinessGroup; diff --git a/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java b/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java index 3a2a47ee3154a70f3842b4aab85bd9a54160ad69..d745d776bc6280aafc4312614779069112492216 100644 --- a/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java +++ b/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java @@ -94,7 +94,7 @@ import org.olat.core.manager.BasicManager; import org.olat.core.util.CodeHelper; import org.olat.core.util.FileUtils; import org.olat.core.util.StringHelper; -import org.olat.core.util.cache.n.CacheWrapper; +import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.coordinate.SyncerCallback; import org.olat.core.util.prefs.Preferences; diff --git a/src/main/java/org/olat/commons/coordinate/cluster/jms/ClusterAdminControllerCluster.java b/src/main/java/org/olat/commons/coordinate/cluster/jms/ClusterAdminControllerCluster.java index 64f724845acf3ffcf4e2db42922ab0a5cf16ce61..218124df62e38f5b98d92bb2aa9a7c296a94a815 100644 --- a/src/main/java/org/olat/commons/coordinate/cluster/jms/ClusterAdminControllerCluster.java +++ b/src/main/java/org/olat/commons/coordinate/cluster/jms/ClusterAdminControllerCluster.java @@ -57,7 +57,7 @@ import org.olat.core.id.OLATResourceable; import org.olat.core.logging.Tracing; import org.olat.core.util.Formatter; import org.olat.core.util.WebappHelper; -import org.olat.core.util.cache.n.CacheWrapper; +import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.coordinate.SyncerExecutor; import org.olat.core.util.event.MultiUserEvent; diff --git a/src/main/java/org/olat/commons/servlets/WebDAVManagerImpl.java b/src/main/java/org/olat/commons/servlets/WebDAVManagerImpl.java index ec62b54bd4a0c421fe9dfbb2068cebbc97ab0d63..ff12210aa463bf33dfede4509cf023792874bf97 100644 --- a/src/main/java/org/olat/commons/servlets/WebDAVManagerImpl.java +++ b/src/main/java/org/olat/commons/servlets/WebDAVManagerImpl.java @@ -43,7 +43,7 @@ import org.olat.core.servlets.SecureWebdavServlet; import org.olat.core.servlets.WebDAVManager; import org.olat.core.util.SessionInfo; import org.olat.core.util.UserSession; -import org.olat.core.util.cache.n.CacheWrapper; +import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.session.UserSessionManager; import org.olat.login.auth.WebDAVAuthManager; diff --git a/src/main/java/org/olat/core/commons/modules/glossary/GlossaryItemManager.java b/src/main/java/org/olat/core/commons/modules/glossary/GlossaryItemManager.java index 1e33c6fa540771978d9f2ea1785ca089193e5abb..07810f8949ae3a884ce5ddf9a9e001c8b631f59a 100644 --- a/src/main/java/org/olat/core/commons/modules/glossary/GlossaryItemManager.java +++ b/src/main/java/org/olat/core/commons/modules/glossary/GlossaryItemManager.java @@ -37,7 +37,7 @@ import org.olat.core.id.OLATResourceable; import org.olat.core.manager.BasicManager; import org.olat.core.util.FileUtils; import org.olat.core.util.StringHelper; -import org.olat.core.util.cache.n.CacheWrapper; +import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.coordinate.SyncerExecutor; import org.olat.core.util.resource.OresHelper; diff --git a/src/main/java/org/olat/core/commons/persistence/PersistenceHelper.java b/src/main/java/org/olat/core/commons/persistence/PersistenceHelper.java index db5a30fc3564bdf7600fdb7c69c53dfb43ecd892..5b069725bbd0b5c32fd2a5a0cc9c386ce79ea816 100644 --- a/src/main/java/org/olat/core/commons/persistence/PersistenceHelper.java +++ b/src/main/java/org/olat/core/commons/persistence/PersistenceHelper.java @@ -109,7 +109,6 @@ public class PersistenceHelper { /** * - * FIXME:fj:c cleanup up these methods here and class SyncHelper * Checks if the given persistable is in the given iterator (database identity). * If so, the persistable from the iterator is returned. If not, null is returned. * @param iter Iterator of persistable objects @@ -117,10 +116,9 @@ public class PersistenceHelper { * @return null if not found or the persistable object that has the same key as the given * persistable object. The object might also have object identity, but this is not guaranteed. */ - // TODO:cg: not used => Remove it, ask fj - public static Persistable getPersistableByPersistableKey(Iterator iter, Persistable persistable) { + public static Persistable getPersistableByPersistableKey(Iterator<? extends Persistable> iter, Persistable persistable) { while (iter.hasNext()) { - Persistable persistableFromIterator = (Persistable) iter.next(); + Persistable persistableFromIterator = iter.next(); if (persistable.equalsByPersistableKey(persistableFromIterator)) return persistableFromIterator; } @@ -136,7 +134,7 @@ public class PersistenceHelper { * @param persistable Persistable object * @return boolean */ - public static boolean listContainsObjectByKey(List objects, Persistable persistable) { + public static boolean listContainsObjectByKey(List<? extends Persistable> objects, Persistable persistable) { return listContainsObjectByKey(objects, persistable.getKey()); } @@ -147,10 +145,10 @@ public class PersistenceHelper { * @param persistable Persistable object * @return boolean */ - public static boolean listContainsObjectByKey(List objects, Long key) { - for (Iterator iter = objects.iterator(); iter.hasNext();) { + public static boolean listContainsObjectByKey(List<? extends Persistable> objects, Long key) { + for (Iterator<? extends Persistable> iter = objects.iterator(); iter.hasNext();) { try { - Persistable listObject = (Persistable) iter.next(); + Persistable listObject = iter.next(); if (listObject.getKey().equals(key)) { return true; } @@ -168,7 +166,7 @@ public class PersistenceHelper { * @param persistable * @return int position of object in list */ - public static int indexOf(List objects, Persistable persistable){ + public static int indexOf(List<? extends Persistable> objects, Persistable persistable){ return indexOf(objects, persistable.getKey()); } @@ -179,10 +177,10 @@ public class PersistenceHelper { * @param key * @return int position of object in list */ - public static int indexOf(List objects, Long key) { - for (Iterator iter = objects.iterator(); iter.hasNext();) { + public static int indexOf(List<? extends Persistable> objects, Long key) { + for (Iterator<? extends Persistable> iter = objects.iterator(); iter.hasNext();) { try { - Persistable listObject = (Persistable) iter.next(); + Persistable listObject = iter.next(); if (listObject.getKey().equals(key)) { return objects.indexOf(listObject); } @@ -200,7 +198,7 @@ public class PersistenceHelper { * replace value * @return boolean true: object replaced; false: object was not found in list */ - public static boolean replaceObjectInListByKey(List objects, Persistable toBeReplacedObject) { + public static boolean replaceObjectInListByKey(List<Persistable> objects, Persistable toBeReplacedObject) { int i = indexOf(objects, toBeReplacedObject); // return false when object was not found in list if (i < 0) return false; @@ -220,14 +218,14 @@ public class PersistenceHelper { * After calling this operation the originalList will contain less or the same amount of * objects */ - public static int removeObjectsFromList(List originalList, List toBeRemovedObjects) { + public static int removeObjectsFromList(List<? extends Persistable> originalList, List<? extends Persistable> toBeRemovedObjects) { int counter = 0; - Iterator removeIter = toBeRemovedObjects.iterator(); + Iterator<? extends Persistable> removeIter = toBeRemovedObjects.iterator(); while (removeIter.hasNext()) { - Persistable toBeRemoved = (Persistable) removeIter.next(); - Iterator originalIter = originalList.iterator(); + Persistable toBeRemoved = removeIter.next(); + Iterator<? extends Persistable> originalIter = originalList.iterator(); while (originalIter.hasNext()) { - Persistable fromOriginal = (Persistable) originalIter.next(); + Persistable fromOriginal = originalIter.next(); if (fromOriginal.getKey().equals(toBeRemoved.getKey())) { originalList.remove(fromOriginal); counter++; @@ -238,6 +236,33 @@ public class PersistenceHelper { return counter; } + public static Persistable findInListByKey(List<? extends Persistable> persistables, Persistable persistable) { + Long key = persistable.getKey(); + for (Iterator<? extends Persistable> iter = persistables.iterator(); iter.hasNext();) { + Persistable ppit = iter.next(); + if (ppit.getKey().equals(key)) { + return ppit; + } + } + return null; + } + + /** + * @param listOfPersistables + * @param persistable + * @return True if listOfPersistable contains persistable + */ + public static boolean containsPersistable(List<? extends Persistable> listOfPersistables, Persistable persistable) { + Long key = persistable.getKey(); + for (Iterator<? extends Persistable> iter = listOfPersistables.iterator(); iter.hasNext();) { + Persistable entry = iter.next(); + if (entry.getKey().equals(key)) { + return true; + } + } + return false; + } + /** * * @param list diff --git a/src/main/java/org/olat/core/commons/persistence/SyncHelper.java b/src/main/java/org/olat/core/commons/persistence/SyncHelper.java deleted file mode 100644 index 81cf90ae9b4bae16572625ef8b2a83e4a707c902..0000000000000000000000000000000000000000 --- a/src/main/java/org/olat/core/commons/persistence/SyncHelper.java +++ /dev/null @@ -1,84 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ - -package org.olat.core.commons.persistence; - -import java.util.Iterator; -import java.util.List; - -import org.olat.core.id.Persistable; - -/** -* Description:<br> -* -* @author Felix Jost -*/ -public class SyncHelper { - - /** - * @param persistables - * @param persistable - * @return Persistable - */ - public static Persistable findInListByKey(List persistables, Persistable persistable) { - Long key = persistable.getKey(); - for (Iterator iter = persistables.iterator(); iter.hasNext();) { - Persistable ppit = (Persistable) iter.next(); - if (ppit.getKey().equals(key)) { - return ppit; - } - } - return null; - } - - /** - * @param listOfPersistables - * @param persistable - * @return True if listOfPersistable contains persistable - */ - public static boolean containsPersistable(List listOfPersistables, Persistable persistable) { - Long key = persistable.getKey(); - for (Iterator iter = listOfPersistables.iterator(); iter.hasNext();) { - Persistable entry = (Persistable) iter.next(); - if (entry.getKey().equals(key)) { - return true; - } - } - return false; - } - - /*public static List replacePersistable(List listOfPersitables, Persistable newPersistable) { - for (Iterator iter = listOfPersitables.iterator(); iter.hasNext();) { - Persistable entry = (Persistable) iter.next(); - if (entry.getKey().equals(newPersistable.getKey())) { - int index = listOfPersitables.indexOf(entry); - listOfPersitables.add(index, newPersistable); - } - } - return listOfPersitables; - - }*/ -} diff --git a/src/main/java/org/olat/core/commons/persistence/_spring/core_persistence.xml b/src/main/java/org/olat/core/commons/persistence/_spring/core_persistence.xml index 9240a0e6f4250d51f88269c20f0c34a29259008c..6158140ec42abcad725796e4aa515fbab353d0d5 100644 --- a/src/main/java/org/olat/core/commons/persistence/_spring/core_persistence.xml +++ b/src/main/java/org/olat/core/commons/persistence/_spring/core_persistence.xml @@ -77,6 +77,7 @@ <class>org.olat.instantMessaging.model.InstantMessageImpl</class> <class>org.olat.instantMessaging.model.ImPreferencesImpl</class> + <class>org.olat.instantMessaging.model.RosterEntryImpl</class> <class>org.olat.instantMessaging.model.InstantMessageNotificationImpl</class> <properties> <property name="hibernate.generate_statistics" value="true"/> diff --git a/src/main/java/org/olat/core/commons/persistence/_spring/databaseCorecontext.xml b/src/main/java/org/olat/core/commons/persistence/_spring/databaseCorecontext.xml index d6e9394add45c3577db141b98cdb910b4cd096af..2e6445d72b0670cef5ec28b39aa9b97964d7c6a1 100644 --- a/src/main/java/org/olat/core/commons/persistence/_spring/databaseCorecontext.xml +++ b/src/main/java/org/olat/core/commons/persistence/_spring/databaseCorecontext.xml @@ -159,7 +159,7 @@ <prop key="hibernate.cache.use_query_cache">true</prop> <prop key="hibernate.cache.use_second_level_cache">true</prop> <prop key="hibernate.cache.region.factory_class">org.olat.core.commons.persistence.JpaInfinispanRegionFactory</prop> - <prop key="hibernate.cache.infinispan.cfg">infinispan-SingleVM.xml</prop> + <prop key="hibernate.cache.infinispan.cfg">infinispan-config.xml</prop> <prop key="hibernate.cache.region.jbc2.query.localonly">true</prop> <prop key="hibernate.cache.region_prefix">openolat</prop> </props> diff --git a/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperServiceImpl.java b/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperServiceImpl.java index 4d745dab909d4b5ed965a4ced46d0798b45389b3..e20f94c10c11661bb8661a7815ad43164d06f08c 100644 --- a/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperServiceImpl.java +++ b/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperServiceImpl.java @@ -35,7 +35,7 @@ import org.olat.core.util.Encoder; import org.olat.core.util.StringHelper; import org.olat.core.util.UserSession; import org.olat.core.util.WebappHelper; -import org.olat.core.util.cache.n.CacheWrapper; +import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.coordinate.Coordinator; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.coordinate.SyncerExecutor; diff --git a/src/main/java/org/olat/core/id/context/HistoryManager.java b/src/main/java/org/olat/core/id/context/HistoryManager.java index e970672acf6e0ae02a4b3cebab6b7bc7729827b3..e9d932564a7b3f041382f85b66443d28b9a88847 100644 --- a/src/main/java/org/olat/core/id/context/HistoryManager.java +++ b/src/main/java/org/olat/core/id/context/HistoryManager.java @@ -22,6 +22,7 @@ package org.olat.core.id.context; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.IOException; import org.olat.core.commons.modules.bc.FolderConfig; import org.olat.core.id.Identity; @@ -74,13 +75,7 @@ public class HistoryManager extends BasicManager { try { String pathHomePage = FolderConfig.getCanonicalRoot() + FolderConfig.getUserHomePage(identity.getName()); File resumeXml = new File(pathHomePage, "resume.xml"); - if(resumeXml.exists()) { - FileInputStream in = new FileInputStream(resumeXml); - HistoryPoint point = (HistoryPoint)historyStream.fromXML(in); - FileUtils.closeSafely(in); - return point; - } - return null; + return readHistory(resumeXml); } catch (Exception e) { logError("Cannot read resume file: ", e); return null; @@ -98,8 +93,14 @@ public class HistoryManager extends BasicManager { logError("Can not delete history file", e); } } - - - + protected HistoryPoint readHistory(File resumeXml) throws IOException { + if(resumeXml.exists()) { + FileInputStream in = new FileInputStream(resumeXml); + HistoryPoint point = (HistoryPoint)historyStream.fromXML(in); + FileUtils.closeSafely(in); + return point; + } + return null; + } } diff --git a/src/main/java/org/olat/core/id/context/HistoryPointImpl.java b/src/main/java/org/olat/core/id/context/HistoryPointImpl.java index 02c39f9459d6251e72f2c47ec3f21c69bb562a8d..6ac4e1c78ffed495d4753a2e7226c1220360abf0 100644 --- a/src/main/java/org/olat/core/id/context/HistoryPointImpl.java +++ b/src/main/java/org/olat/core/id/context/HistoryPointImpl.java @@ -20,6 +20,7 @@ package org.olat.core.id.context; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -32,8 +33,9 @@ import java.util.List; * Initial Date: 18 jan. 2011 <br> * @author srosse, stephane.rosse@frentix.com, www.frentix.com */ -public class HistoryPointImpl implements HistoryPoint { +public class HistoryPointImpl implements HistoryPoint, Serializable { + private static final long serialVersionUID = -7002881531372365733L; private final String uuid; private final String businessPath; private final List<ContextEntry> entries; diff --git a/src/main/java/org/olat/core/util/cache/n/CacheConfig.java b/src/main/java/org/olat/core/util/cache/CacheConfig.java similarity index 99% rename from src/main/java/org/olat/core/util/cache/n/CacheConfig.java rename to src/main/java/org/olat/core/util/cache/CacheConfig.java index 28f265bc5aa9c87ca960e0c6a73c804346088809..6f3ce43df0dd72c2e28106eea8215bc82bdb7774 100644 --- a/src/main/java/org/olat/core/util/cache/n/CacheConfig.java +++ b/src/main/java/org/olat/core/util/cache/CacheConfig.java @@ -23,7 +23,7 @@ * under the Apache 2.0 license as the original file. * <p> */ -package org.olat.core.util.cache.n; +package org.olat.core.util.cache; import java.util.Map; diff --git a/src/main/java/org/olat/core/util/cache/n/CacheWrapper.java b/src/main/java/org/olat/core/util/cache/CacheWrapper.java similarity index 93% rename from src/main/java/org/olat/core/util/cache/n/CacheWrapper.java rename to src/main/java/org/olat/core/util/cache/CacheWrapper.java index 30769b12863b6aa60c0cb64e00e442b898599ff4..490af22ebe8073938734c000898738f653bc06b7 100644 --- a/src/main/java/org/olat/core/util/cache/n/CacheWrapper.java +++ b/src/main/java/org/olat/core/util/cache/CacheWrapper.java @@ -23,9 +23,10 @@ * under the Apache 2.0 license as the original file. * <p> */ -package org.olat.core.util.cache.n; +package org.olat.core.util.cache; import java.io.Serializable; +import java.util.List; import org.olat.core.id.OLATResourceable; @@ -40,7 +41,7 @@ import org.olat.core.id.OLATResourceable; * Initial Date: 03.10.2007 <br> * @author Felix Jost, http://www.goodsolutions.ch */ -public interface CacheWrapper<U> { +public interface CacheWrapper<U, V extends Serializable> { public boolean containsKey(U key); @@ -51,7 +52,7 @@ public interface CacheWrapper<U> { * @return the cache entry or null when the element has expired, never been put into yet, or removed due to max-size, * or a put in a different cluster node which led to an invalidate message */ - public Serializable get(U key); + public V get(U key); /** * o_clusterREVIEW :pb review references @@ -64,7 +65,7 @@ public interface CacheWrapper<U> { * @param key * @param value */ - public void update(U key, Serializable value); + public V update(U key, V value); /** * use this put whenever you just fill up a cache from data which is already on the db or the filesystem. e.g. use it when you simply load some properties again into cache. @@ -88,7 +89,7 @@ public interface CacheWrapper<U> { * @param value * */ - public void put(U key, Serializable value); + public V put(U key, V value); /** * removes a value from the cache. this method is thread-safe diff --git a/src/main/java/org/olat/core/util/cache/n/InfinispanCacheManager.java b/src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacheManager.java similarity index 98% rename from src/main/java/org/olat/core/util/cache/n/InfinispanCacheManager.java rename to src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacheManager.java index acd16a2a6045a700f09dd0b41c46cc330b75231a..9bb7dc08e7e64db075d1f3faeaea53a7bfe18e75 100644 --- a/src/main/java/org/olat/core/util/cache/n/InfinispanCacheManager.java +++ b/src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacheManager.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.core.util.cache.n; +package org.olat.core.util.cache.infinispan; import javax.naming.InitialContext; diff --git a/src/main/java/org/olat/core/util/cache/n/InfinispanCacheWrapper.java b/src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacheWrapper.java similarity index 85% rename from src/main/java/org/olat/core/util/cache/n/InfinispanCacheWrapper.java rename to src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacheWrapper.java index 9560e1f177146cc316a3ba3a35cf9ad607374401..a66895d9d84c02256940fe8224b2fa4c5cbac0f7 100644 --- a/src/main/java/org/olat/core/util/cache/n/InfinispanCacheWrapper.java +++ b/src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacheWrapper.java @@ -23,10 +23,11 @@ * under the Apache 2.0 license as the original file. * <p> */ -package org.olat.core.util.cache.n; +package org.olat.core.util.cache.infinispan; import java.io.Serializable; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.infinispan.Cache; @@ -40,6 +41,8 @@ import org.olat.core.id.OLATResourceable; import org.olat.core.logging.OLATRuntimeException; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; +import org.olat.core.util.cache.CacheConfig; +import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.resource.OresHelper; /** @@ -50,7 +53,7 @@ import org.olat.core.util.resource.OresHelper; * Initial Date: 03.10.2007 <br> * @author Felix Jost, http://www.goodsolutions.ch */ -public class InfinispanCacheWrapper implements CacheWrapper<Object> { +public class InfinispanCacheWrapper implements CacheWrapper<Object,Serializable> { private static final OLog log = Tracing.createLoggerFor(InfinispanCacheWrapper.class); private final String cacheName; // the fully qualified name of the cache @@ -58,7 +61,7 @@ public class InfinispanCacheWrapper implements CacheWrapper<Object> { private final EmbeddedCacheManager cachemanager; private Cache<Object,Serializable> cache; - private Map<String, CacheWrapper<Object>> children = null; + private Map<String, CacheWrapper<Object, Serializable>> children = null; /** @@ -96,7 +99,7 @@ public class InfinispanCacheWrapper implements CacheWrapper<Object> { * @param config * @return */ - protected CacheWrapper<Object> createChildCacheWrapper(String childName, CacheConfig aconfig) { + protected CacheWrapper<Object,Serializable> createChildCacheWrapper(String childName, CacheConfig aconfig) { return new InfinispanCacheWrapper(childName, aconfig, cachemanager); } @@ -104,7 +107,7 @@ public class InfinispanCacheWrapper implements CacheWrapper<Object> { * * @return the map with the children or null */ - protected Map<String, CacheWrapper<Object>> getChildren() { + protected Map<String, CacheWrapper<Object,Serializable>> getChildren() { return children; } @@ -114,7 +117,7 @@ public class InfinispanCacheWrapper implements CacheWrapper<Object> { synchronized(this) {//cluster_ok by definition of this class as used in single vm CacheWrapper cwChild = null; if (children == null) { - children = new HashMap<String, CacheWrapper<Object>>(); + children = new HashMap<String, CacheWrapper<Object,Serializable>>(); } else { cwChild = children.get(childName); } @@ -152,31 +155,35 @@ public class InfinispanCacheWrapper implements CacheWrapper<Object> { return (Serializable)elem; } + @Override public void remove(Object key) { synchronized (cache) {//cluster_ok by definition of this class as used in single vm cache.remove(key); } } - public void update(Object key, Serializable value) { - // update is the same as put for the singlevm mode - synchronized (cache) {//cluster_ok by definition of this class as used in single vm + @Override + public Serializable update(Object key, Serializable value) { + Serializable reloaded; + synchronized (cache) { if(cache.containsKey(key)) { - cache.replace(key, value); + reloaded = cache.replace(key, value); } else { - cache.put(key, value); + reloaded = cache.put(key, value); } } + return reloaded; } - public void put(Object key, Serializable value) { - // put is the same as update for the singlevm mode - synchronized (cache) {//cluster_ok by definition of this class as used in single vm - cache.put(key, value); + @Override + public Serializable put(Object key, Serializable value) { + Serializable reloaded; + synchronized (cache) { + reloaded = cache.put(key, value); } + return reloaded; } - protected String getCacheName() { return cacheName; } diff --git a/src/main/java/org/olat/core/util/cache/n/InfinispanCacher.java b/src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacher.java similarity index 94% rename from src/main/java/org/olat/core/util/cache/n/InfinispanCacher.java rename to src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacher.java index e797ad57a5f8c13f4fe7329e0f12e91a5fe9a5c1..9389b8bcbb45277387ea09950f26dfb975ccb901 100644 --- a/src/main/java/org/olat/core/util/cache/n/InfinispanCacher.java +++ b/src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacher.java @@ -23,11 +23,13 @@ * under the Apache 2.0 license as the original file. * <p> */ -package org.olat.core.util.cache.n; +package org.olat.core.util.cache.infinispan; import org.infinispan.manager.EmbeddedCacheManager; import org.olat.core.id.OLATResourceable; import org.olat.core.logging.AssertException; +import org.olat.core.util.cache.CacheConfig; +import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.coordinate.Cacher; import org.olat.core.util.resource.OresHelper; diff --git a/src/main/java/org/olat/core/util/coordinate/Cacher.java b/src/main/java/org/olat/core/util/coordinate/Cacher.java index b5d2ba96ab4181a320bfe970e9166379f04d7b62..176ab325706b1fdbe096531890e909689d1222b3 100644 --- a/src/main/java/org/olat/core/util/coordinate/Cacher.java +++ b/src/main/java/org/olat/core/util/coordinate/Cacher.java @@ -26,7 +26,7 @@ package org.olat.core.util.coordinate; import org.infinispan.manager.EmbeddedCacheManager; -import org.olat.core.util.cache.n.CacheWrapper; +import org.olat.core.util.cache.CacheWrapper; /** * Description:<br> diff --git a/src/main/java/org/olat/core/util/resource/OresHelper.java b/src/main/java/org/olat/core/util/resource/OresHelper.java index 5eac00e86cdf024f44403b39d97c639a72aacb8e..fd45b9cb75286aedea70faf563cab2585277b888 100644 --- a/src/main/java/org/olat/core/util/resource/OresHelper.java +++ b/src/main/java/org/olat/core/util/resource/OresHelper.java @@ -52,26 +52,20 @@ public class OresHelper { public static OLATResourceable createOLATResourceableInstance(final String type, final Long key) { if (key == null) throw new AssertException("key may not be null; type = "+type); if (type.length() > ORES_TYPE_LENGTH) throw new AssertException("Olatresource type may not exceed 50 chars: type="+type); - return new OLATResourceable() { - public String getResourceableTypeName() { - return type; - } - public Long getResourceableId() { - return key; - } - }; + return new Resourceable(type, key); } public static OLATResourceable createOLATResourceableType(final String type) { return createOLATResourceableInstance(type, new Long(0)); } - public static OLATResourceable createOLATResourceableType(Class clazz) { + public static OLATResourceable createOLATResourceableType(Class<?> clazz) { return createOLATResourceableType(clazz.getName()); } - - + public static OLATResourceable clone(OLATResourceable original) { + return new Resourceable(original.getResourceableTypeName(), original.getResourceableId()); + } /** * Use only when you need to create a new olatresourceable instance. @@ -81,7 +75,7 @@ public class OresHelper { * @param key the key; may not be null! * @return OLATResourceable instance */ - public static OLATResourceable createOLATResourceableInstance(Class aClass, final Long key) { + public static OLATResourceable createOLATResourceableInstance(Class<?> aClass, final Long key) { String type = calculateTypeName(aClass); return createOLATResourceableInstance(type, key); } @@ -163,7 +157,7 @@ public class OresHelper { * @param aClass the class representing the type: NOTE: aClass.getName() may not exceed 50 chars * @return OLATResourceable */ - public static OLATResourceable lookupType(Class aClass) { + public static OLATResourceable lookupType(Class<?> aClass) { return lookupType(aClass, null); } @@ -172,7 +166,7 @@ public class OresHelper { * @param aClass * @return Calculated type name */ - public static String calculateTypeName(Class aClass) { + public static String calculateTypeName(Class<?> aClass) { return calculateTypeName(aClass, null); } @@ -182,7 +176,7 @@ public class OresHelper { * @param subType May not exceed 15 characters * @return Calculated type name */ - public static String calculateTypeName(Class aClass, String subType) { + public static String calculateTypeName(Class<?> aClass, String subType) { String comp = aClass.getName(); int pos = comp.lastIndexOf("."); if (pos == -1) throw new AssertException("class name without package!! (contains no dot):"+comp); @@ -201,7 +195,7 @@ public class OresHelper { * @param aClass * @return True if ores is of type aClass */ - public static boolean isOfType(OLATResourceable ores, Class aClass) { + public static boolean isOfType(OLATResourceable ores, Class<?> aClass) { String type = ores.getResourceableTypeName(); String calcName = calculateTypeName(aClass, null); boolean ok = (type.equals(calcName)); @@ -226,12 +220,9 @@ public class OresHelper { * @param subType may only contain a..z and 0..9; and may only be 15 chars long * @return OLATResourceable */ - public static OLATResourceable lookupType(Class aClass, String subType) { + public static OLATResourceable lookupType(Class<?> aClass, String subType) { final String type = calculateTypeName(aClass, subType); - OLATResourceable ores = new OLATResourceable() { - public String getResourceableTypeName() { return type; } - public Long getResourceableId() { return null; }}; - return ores; + return new Resourceable(type, null); } /** @@ -265,14 +256,6 @@ public class OresHelper { public static OLATResourceable createOLATResourceableInstanceWithoutCheck(final String type,final Long key) { if (key == null) throw new AssertException("key may not be null; type = "+type); - return new OLATResourceable() { - public String getResourceableTypeName() { - return type; - } - public Long getResourceableId() { - return key; - } - }; + return new Resourceable(type,key); } - } diff --git a/src/main/java/org/olat/core/util/resource/Resourceable.java b/src/main/java/org/olat/core/util/resource/Resourceable.java new file mode 100644 index 0000000000000000000000000000000000000000..a63944a7427ed903113dfd94b0243871ca43e129 --- /dev/null +++ b/src/main/java/org/olat/core/util/resource/Resourceable.java @@ -0,0 +1,86 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.core.util.resource; + +import java.io.Serializable; + +import org.olat.core.id.OLATResourceable; + +/** + * An implementation of the OLATresourceable which is serializable + * + * + * Initial date: 19.12.2012<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class Resourceable implements OLATResourceable, Serializable, Cloneable { + + private static final long serialVersionUID = 4493480617698403988L; + private String type; + private Long key; + + public Resourceable() { + // + } + + public Resourceable(String type, Long key) { + this.type = type; + this.key = key; + } + + @Override + public String getResourceableTypeName() { + return type; + } + + @Override + public Long getResourceableId() { + return key; + } + + @Override + public int hashCode() { + return (key == null ? 2938 : key.hashCode()) + (type == null ? 76678 : type.hashCode()); + } + + @Override + public boolean equals(Object obj) { + if(this == obj) { + return true; + } + if(obj instanceof OLATResourceable) { + OLATResourceable ores = (OLATResourceable)obj; + return type != null && type.equals(ores.getResourceableTypeName()) + && key != null && key.equals(ores.getResourceableId()); + } + return false; + } + + @Override + public String toString() { + return "resourceable[type=" + type + ":id=" + key + "]" + super.toString(); + } + + @Override + protected Resourceable clone() { + return new Resourceable(type, key); + } +} diff --git a/src/main/java/org/olat/core/util/session/UserSessionManager.java b/src/main/java/org/olat/core/util/session/UserSessionManager.java index 03fc0d122b6077dcc89161b7545e4014227695fe..b9d203b2220be2278f7d6b97bee7c7f03975adf3 100644 --- a/src/main/java/org/olat/core/util/session/UserSessionManager.java +++ b/src/main/java/org/olat/core/util/session/UserSessionManager.java @@ -52,7 +52,7 @@ import org.olat.core.logging.activity.UserActivityLoggerImpl; import org.olat.core.util.SessionInfo; import org.olat.core.util.SignOnOffEvent; import org.olat.core.util.UserSession; -import org.olat.core.util.cache.n.CacheWrapper; +import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.event.GenericEventListener; import org.olat.core.util.prefs.Preferences; @@ -91,7 +91,7 @@ public class UserSessionManager implements GenericEventListener { @Autowired private HistoryManager historyManager; - private CacheWrapper<Long> userSessionCache; + private CacheWrapper<Long,Integer> userSessionCache; @PostConstruct public void initBean() { diff --git a/src/main/java/org/olat/course/CourseFactory.java b/src/main/java/org/olat/course/CourseFactory.java index f980de6e1ad13e244676b257be85fdcc1dc05ccd..d7cdbe39f2af6ff75a80040af70ea427f9404b9d 100644 --- a/src/main/java/org/olat/course/CourseFactory.java +++ b/src/main/java/org/olat/course/CourseFactory.java @@ -76,7 +76,7 @@ import org.olat.core.util.StringHelper; import org.olat.core.util.UserSession; import org.olat.core.util.Util; import org.olat.core.util.ZipUtil; -import org.olat.core.util.cache.n.CacheWrapper; +import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.coordinate.SyncerCallback; import org.olat.core.util.coordinate.SyncerExecutor; diff --git a/src/main/java/org/olat/course/assessment/NewCachePersistingAssessmentManager.java b/src/main/java/org/olat/course/assessment/NewCachePersistingAssessmentManager.java index e9cf3d01a3574449886638d1625e2d7a32fd82e9..9f7883bc9847466adfa23ae6185e0352b0f7f10e 100644 --- a/src/main/java/org/olat/course/assessment/NewCachePersistingAssessmentManager.java +++ b/src/main/java/org/olat/course/assessment/NewCachePersistingAssessmentManager.java @@ -48,7 +48,7 @@ import org.olat.core.logging.activity.StringResourceableType; import org.olat.core.logging.activity.ThreadLocalUserActivityLogger; import org.olat.core.manager.BasicManager; import org.olat.core.util.StringHelper; -import org.olat.core.util.cache.n.CacheWrapper; +import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.coordinate.SyncerCallback; import org.olat.core.util.coordinate.SyncerExecutor; diff --git a/src/main/java/org/olat/course/member/wizard/ImportMemberOverviewIdentitiesController.java b/src/main/java/org/olat/course/member/wizard/ImportMemberOverviewIdentitiesController.java index 245b813c367f22623829862f3d994b221de26f79..a5d95c759dff89d360f5523fcdab2d6e40c7fd20 100644 --- a/src/main/java/org/olat/course/member/wizard/ImportMemberOverviewIdentitiesController.java +++ b/src/main/java/org/olat/course/member/wizard/ImportMemberOverviewIdentitiesController.java @@ -28,7 +28,7 @@ import org.olat.basesecurity.BaseSecurity; import org.olat.basesecurity.Constants; import org.olat.basesecurity.SecurityGroup; import org.olat.core.CoreSpringFactory; -import org.olat.core.commons.persistence.SyncHelper; +import org.olat.core.commons.persistence.PersistenceHelper; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.impl.Form; @@ -88,13 +88,13 @@ public class ImportMemberOverviewIdentitiesController extends StepFormBasicContr isanonymous.add(identityKey); } else { // check if already in group - boolean inGroup = SyncHelper.containsPersistable(existIdents, ident); + boolean inGroup = PersistenceHelper.containsPersistable(existIdents, ident); if (inGroup) { // added to warning: already in group alreadyin.add(ident.getName()); } else { // ok to add -> preview (but filter duplicate entries) - if (!SyncHelper.containsPersistable(oks, ident)) { + if (!PersistenceHelper.containsPersistable(oks, ident)) { oks.add(ident); } } @@ -125,13 +125,13 @@ public class ImportMemberOverviewIdentitiesController extends StepFormBasicContr isanonymous.add(username); } else { // check if already in group - boolean inGroup = SyncHelper.containsPersistable(existIdents, ident); + boolean inGroup = PersistenceHelper.containsPersistable(existIdents, ident); if (inGroup) { // added to warning: already in group alreadyin.add(ident.getName()); } else { // ok to add -> preview (but filter duplicate entries) - if (!SyncHelper.containsPersistable(oks, ident)) { + if (!PersistenceHelper.containsPersistable(oks, ident)) { oks.add(ident); } } diff --git a/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectBrokerManagerImpl.java b/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectBrokerManagerImpl.java index 2874b16e9239989116e8f3f7be680587a4989454..2dafda73bfa2e09e853e784bd2a1dafd77c625a9 100644 --- a/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectBrokerManagerImpl.java +++ b/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectBrokerManagerImpl.java @@ -46,7 +46,7 @@ import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.manager.BasicManager; import org.olat.core.util.FileUtils; -import org.olat.core.util.cache.n.CacheWrapper; +import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.coordinate.SyncerCallback; import org.olat.core.util.coordinate.SyncerExecutor; 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 043ea41ffd522c1468e2fb05cfcf31d046afc41a..ad3f5de01ded99c5efb741bf0532759410e46c73 100644 --- a/src/main/java/org/olat/ims/qti/process/QTIHelper.java +++ b/src/main/java/org/olat/ims/qti/process/QTIHelper.java @@ -38,7 +38,7 @@ import org.dom4j.Document; import org.dom4j.Element; import org.olat.core.logging.Tracing; import org.olat.core.util.ObjectCloner; -import org.olat.core.util.cache.n.CacheWrapper; +import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.vfs.LocalFileImpl; import org.olat.core.util.vfs.LocalFolderImpl; diff --git a/src/main/java/org/olat/instantMessaging/InstantMessagingService.java b/src/main/java/org/olat/instantMessaging/InstantMessagingService.java index d8291d1273fa28a7c2984455abe1ccd996abf6e4..40fcc48db9cab91c789ad20082a7a8b43219ef10 100644 --- a/src/main/java/org/olat/instantMessaging/InstantMessagingService.java +++ b/src/main/java/org/olat/instantMessaging/InstantMessagingService.java @@ -77,7 +77,7 @@ public interface InstantMessagingService { * @param chatResource * @param listener */ - public void unlistenChat(OLATResourceable chatResource, GenericEventListener listener); + public void unlistenChat(Identity identity, OLATResourceable chatResource, GenericEventListener listener); /** * Factory method to build the OLATResourceable for privat chat diff --git a/src/main/java/org/olat/instantMessaging/OpenInstantMessageEvent.java b/src/main/java/org/olat/instantMessaging/OpenInstantMessageEvent.java index 2c7cb165ddec4d82002bc927fc6f4dbe7b4ae773..7345ed538ee0f3c79d96241504c4b407cd1787fe 100644 --- a/src/main/java/org/olat/instantMessaging/OpenInstantMessageEvent.java +++ b/src/main/java/org/olat/instantMessaging/OpenInstantMessageEvent.java @@ -55,7 +55,7 @@ public class OpenInstantMessageEvent extends MultiUserEvent { } public OpenInstantMessageEvent(UserRequest ureq, RosterEntry entry) { - this(ureq, new Buddy(entry.getIdentityKey(), entry.getName())); + this(ureq, new Buddy(entry.getIdentityKey(), entry.getFullName(), entry.getNickName())); } public OpenInstantMessageEvent(UserRequest ureq, OLATResourceable ores, String roomName) { diff --git a/src/main/java/org/olat/instantMessaging/manager/InstantMessagingServiceImpl.java b/src/main/java/org/olat/instantMessaging/manager/InstantMessagingServiceImpl.java index 2ebdeafacdeeb9c2c8ea82c7cfa8908d02ecf79f..0ff8bed0428b703088e083d78716854a823863dc 100644 --- a/src/main/java/org/olat/instantMessaging/manager/InstantMessagingServiceImpl.java +++ b/src/main/java/org/olat/instantMessaging/manager/InstantMessagingServiceImpl.java @@ -22,7 +22,6 @@ package org.olat.instantMessaging.manager; import java.util.ArrayList; import java.util.Calendar; import java.util.List; -import java.util.Set; import org.olat.basesecurity.BaseSecurity; import org.olat.basesecurity.IdentityShort; @@ -43,6 +42,7 @@ import org.olat.instantMessaging.InstantMessagingService; import org.olat.instantMessaging.model.Buddy; import org.olat.instantMessaging.model.BuddyStats; import org.olat.instantMessaging.model.InstantMessageImpl; +import org.olat.instantMessaging.model.RosterEntryImpl; import org.olat.user.UserManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -56,6 +56,8 @@ import org.springframework.stereotype.Service; @Service public class InstantMessagingServiceImpl extends BasicManager implements InstantMessagingService { + @Autowired + private RosterDAO rosterDao; @Autowired private InstantMessageDAO imDao; @Autowired @@ -73,7 +75,6 @@ public class InstantMessagingServiceImpl extends BasicManager implements Instant @Autowired private BaseSecurity securityManager; - @Override public String getStatus(Long identityKey) { return "available"; @@ -182,7 +183,7 @@ public class InstantMessagingServiceImpl extends BasicManager implements Instant public Buddy getBuddyById(Long identityKey) { IdentityShort identity = securityManager.loadIdentityShortByKey(identityKey); String fullname = userManager.getUserDisplayName(identity); - return new Buddy(identity.getKey(), fullname); + return new Buddy(identity.getKey(), fullname, null); } @Override @@ -191,7 +192,7 @@ public class InstantMessagingServiceImpl extends BasicManager implements Instant List<Buddy> buddies = new ArrayList<Buddy>(contacts.size()); for(Identity contact:contacts) { String fullname = userManager.getUserDisplayName(contact.getUser()); - buddies.add(new Buddy(contact.getKey(), fullname)); + buddies.add(new Buddy(contact.getKey(), fullname, null)); } return buddies; } @@ -203,12 +204,10 @@ public class InstantMessagingServiceImpl extends BasicManager implements Instant List<Buddy> buddies = new ArrayList<Buddy>(contacts.size()); for(Identity contact:contacts) { String fullname = userManager.getUserDisplayName(contact.getUser()); - buddies.add(new Buddy(contact.getKey(), fullname)); + buddies.add(new Buddy(contact.getKey(), fullname, null)); } return buddies; } - - @Override public BuddyStats getBuddyStats(Identity me) { @@ -223,24 +222,26 @@ public class InstantMessagingServiceImpl extends BasicManager implements Instant @Override public List<Buddy> getBuddiesListenTo(OLATResourceable chatResource) { - Set<String> names = coordinator.getCoordinator().getEventBus().getListeningIdentityNamesFor(chatResource); - List<Identity> identities = securityManager.findIdentitiesByName(names); + List<RosterEntryImpl> roster = rosterDao.getRoster(chatResource, 0, -1); List<Buddy> buddies = new ArrayList<Buddy>(); - for(Identity identity:identities) { - String fullname = userManager.getUserDisplayName(identity.getUser()); - buddies.add(new Buddy(identity.getKey(), fullname)); + if(roster != null) { + for(RosterEntryImpl entry:roster) { + buddies.add(new Buddy(entry.getIdentityKey(), entry.getFullName(), entry.getNickName())); + } } return buddies; - } @Override public void listenChat(Identity identity, OLATResourceable chatResource, GenericEventListener listener) { + String fullName = userManager.getUserDisplayName(identity.getUser()); + rosterDao.createRosterEntry(chatResource, identity, fullName, null, false); coordinator.getCoordinator().getEventBus().registerFor(listener, identity, chatResource); } @Override - public void unlistenChat(OLATResourceable chatResource, GenericEventListener listener) { + public void unlistenChat(Identity identity, OLATResourceable chatResource, GenericEventListener listener) { + rosterDao.deleteEntry(identity, chatResource); coordinator.getCoordinator().getEventBus().deregisterFor(listener, chatResource); } @@ -253,10 +254,4 @@ public class InstantMessagingServiceImpl extends BasicManager implements Instant public void enableChat(Identity identity) { // } - - - - - - -} +} \ No newline at end of file diff --git a/src/main/java/org/olat/instantMessaging/manager/RosterDAO.java b/src/main/java/org/olat/instantMessaging/manager/RosterDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..b07b8fd4b78d6f112baf7d847b93be5e23a8d3e1 --- /dev/null +++ b/src/main/java/org/olat/instantMessaging/manager/RosterDAO.java @@ -0,0 +1,85 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.instantMessaging.manager; + +import java.util.Date; +import java.util.List; + +import javax.persistence.TypedQuery; + +import org.olat.core.commons.persistence.DB; +import org.olat.core.id.Identity; +import org.olat.core.id.OLATResourceable; +import org.olat.instantMessaging.model.RosterEntryImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * + * Initial date: 07.12.2012<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + */ +@Service +public class RosterDAO { + + @Autowired + private DB dbInstance; + + public RosterEntryImpl createRosterEntry(OLATResourceable chatResource, Identity from, String fullName, String nickName, boolean anonym) { + RosterEntryImpl entry = new RosterEntryImpl(); + entry.setIdentityKey(from.getKey()); + entry.setNickName(nickName); + entry.setFullName(fullName); + entry.setAnonym(anonym); + entry.setResourceTypeName(chatResource.getResourceableTypeName()); + entry.setResourceId(chatResource.getResourceableId()); + entry.setCreationDate(new Date()); + dbInstance.getCurrentEntityManager().persist(entry); + return entry; + } + + public List<RosterEntryImpl> getRoster(OLATResourceable ores, int firstResult, int maxResults) { + StringBuilder sb = new StringBuilder(); + sb.append("select entry from ").append(RosterEntryImpl.class.getName()).append(" entry ") + .append(" where entry.resourceId=:resid and entry.resourceTypeName=:resname"); + + TypedQuery<RosterEntryImpl> query = dbInstance.getCurrentEntityManager().createQuery(sb.toString(), RosterEntryImpl.class) + .setParameter("resid", ores.getResourceableId()) + .setParameter("resname", ores.getResourceableTypeName()) + .setFirstResult(firstResult); + if(maxResults > 0) { + query.setMaxResults(maxResults); + } + return query.getResultList(); + } + + public void deleteEntry(Identity identity, OLATResourceable ores) { + StringBuilder sb = new StringBuilder(); + sb.append("delete from ").append(RosterEntryImpl.class.getName()).append(" entry ") + .append(" where entry.identityKey=:identityKey") + .append(" and entry.resourceId=:resid and entry.resourceTypeName=:resname"); + + dbInstance.getCurrentEntityManager().createQuery(sb.toString()) + .setParameter("identityKey", identity.getKey()) + .setParameter("resid", ores.getResourceableId()) + .setParameter("resname", ores.getResourceableTypeName()) + .executeUpdate(); + } +} \ No newline at end of file diff --git a/src/main/java/org/olat/instantMessaging/model/Buddy.java b/src/main/java/org/olat/instantMessaging/model/Buddy.java index 9abbcd994da074bfab341317e62562895f85360b..0783fb40e375fcacebe31399c759a0f0b59635d7 100644 --- a/src/main/java/org/olat/instantMessaging/model/Buddy.java +++ b/src/main/java/org/olat/instantMessaging/model/Buddy.java @@ -31,10 +31,12 @@ public class Buddy implements OLATResourceable, Comparable<Buddy> { private final Long identityKey; private final String fullname; + private final String nickName; - public Buddy(Long identityKey, String fullname) { + public Buddy(Long identityKey, String fullname, String nickName) { this.identityKey = identityKey; this.fullname = fullname; + this.nickName = nickName; } public String getStatus() { @@ -45,6 +47,9 @@ public class Buddy implements OLATResourceable, Comparable<Buddy> { return identityKey; } + public String getNickName() { + return nickName; + } public String getFullname() { return fullname; diff --git a/src/main/java/org/olat/instantMessaging/model/RosterEntryImpl.java b/src/main/java/org/olat/instantMessaging/model/RosterEntryImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..12971cd967a4d2569eb24b935eb61c2f0ee9ee09 --- /dev/null +++ b/src/main/java/org/olat/instantMessaging/model/RosterEntryImpl.java @@ -0,0 +1,134 @@ +package org.olat.instantMessaging.model; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + +import org.hibernate.annotations.GenericGenerator; +import org.olat.core.id.CreateInfo; +import org.olat.core.id.Persistable; + +@Entity +@Table(name="o_im_roster_entry") +public class RosterEntryImpl implements Persistable, CreateInfo { + + private static final long serialVersionUID = -4265724240924748369L; + + @Id + @GeneratedValue(generator = "system-uuid") + @GenericGenerator(name = "system-uuid", strategy = "hilo") + @Column(name="id", nullable=false, unique=true, insertable=true, updatable=false) + private Long key; + + @Temporal(TemporalType.TIMESTAMP) + @Column(name="creationdate", nullable=false, insertable=true, updatable=false) + private Date creationDate; + + @Column(name="fk_identity_id", nullable=false, insertable=true, updatable=false) + private Long identityKey; + @Column(name="r_nickname", nullable=true, insertable=true, updatable=true) + private String nickName; + @Column(name="r_fullname", nullable=true, insertable=true, updatable=true) + private String fullName; + @Column(name="r_anonym", nullable=true, insertable=true, updatable=true) + private boolean anonym; + + @Column(name="r_resname", nullable=false, insertable=true, updatable=false) + private String resourceTypeName; + @Column(name="r_resid", nullable=false, insertable=true, updatable=false) + private Long resourceId; + + @Override + public Long getKey() { + return key; + } + + public void setKey(Long key) { + this.key = key; + } + + @Override + public Date getCreationDate() { + return creationDate; + } + + public void setCreationDate(Date creationDate) { + this.creationDate = creationDate; + } + + public Long getIdentityKey() { + return identityKey; + } + + public void setIdentityKey(Long identityKey) { + this.identityKey = identityKey; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public boolean isAnonym() { + return anonym; + } + + public void setAnonym(boolean anonym) { + this.anonym = anonym; + } + + public String getResourceTypeName() { + return resourceTypeName; + } + + public void setResourceTypeName(String resourceTypeName) { + this.resourceTypeName = resourceTypeName; + } + + public Long getResourceId() { + return resourceId; + } + + public void setResourceId(Long resourceId) { + this.resourceId = resourceId; + } + + @Override + public int hashCode() { + return key == null ? 92867 : key.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if(this == obj) { + return true; + } + if(obj instanceof RosterEntryImpl) { + RosterEntryImpl entry = (RosterEntryImpl)obj; + return key != null && key.equals(entry.key); + } + return false; + } + + @Override + public boolean equalsByPersistableKey(Persistable persistable) { + return equals(persistable); + } +} \ No newline at end of file diff --git a/src/main/java/org/olat/instantMessaging/ui/ChatController.java b/src/main/java/org/olat/instantMessaging/ui/ChatController.java index 7ab506ac3ad89c55d0e0312a700f7aee2414caa8..2de14d7e6ea1d3b88c5cd913e2da9f7019b96658 100644 --- a/src/main/java/org/olat/instantMessaging/ui/ChatController.java +++ b/src/main/java/org/olat/instantMessaging/ui/ChatController.java @@ -165,6 +165,7 @@ public class ChatController extends BasicController implements GenericEventListe refresh.setTitle("im.refresh"); putInitialPanel(chatPanelCtr.getInitialComponent()); + doSendPresence(toggleAnonymousForm.getNickName(), toggleAnonymousForm.isUseNickName()); } public OLATResourceable getOlatResourceable() { @@ -174,7 +175,7 @@ public class ChatController extends BasicController implements GenericEventListe @Override protected void doDispose() { allChats.remove(Integer.toString(hashCode())); - imService.unlistenChat(getOlatResourceable(), this); + imService.unlistenChat(getIdentity(), getOlatResourceable(), this); } @Override diff --git a/src/main/java/org/olat/instantMessaging/ui/ChatManagerController.java b/src/main/java/org/olat/instantMessaging/ui/ChatManagerController.java index 27ee32c3659d921c0273e3d273860d8888c50780..6cf88edcd8a2eaa61ccf8d33383f4e8a0010d024 100644 --- a/src/main/java/org/olat/instantMessaging/ui/ChatManagerController.java +++ b/src/main/java/org/olat/instantMessaging/ui/ChatManagerController.java @@ -83,7 +83,7 @@ public class ChatManagerController extends BasicController { container.remove(c); ChatController chatCtr = (ChatController)source; - imService.unlistenChat(chatCtr.getOlatResourceable(), chatCtr); + imService.unlistenChat(getIdentity(), chatCtr.getOlatResourceable(), chatCtr); } //forward event also to main controller fireEvent(ureq, event); diff --git a/src/main/java/org/olat/instantMessaging/ui/InstantMessagingMainController.java b/src/main/java/org/olat/instantMessaging/ui/InstantMessagingMainController.java index 5822afd9820861a5d85a7cee29d07f0765849c1a..54895b862e605ae45327c60ad0d403be5d4697f0 100644 --- a/src/main/java/org/olat/instantMessaging/ui/InstantMessagingMainController.java +++ b/src/main/java/org/olat/instantMessaging/ui/InstantMessagingMainController.java @@ -163,7 +163,7 @@ public class InstantMessagingMainController extends BasicController implements G */ @Override protected void doDispose() { - imService.unlistenChat(getPrivatListenToResourceable(), this); + imService.unlistenChat(getIdentity(), getPrivatListenToResourceable(), this); singleUserEventCenter.deregisterFor(this, InstantMessagingService.ASSESSMENT_EVENT_ORES); singleUserEventCenter.deregisterFor(this, InstantMessagingService.TOWER_EVENT_ORES); } diff --git a/src/main/java/org/olat/instantMessaging/ui/Roster.java b/src/main/java/org/olat/instantMessaging/ui/Roster.java index 6d00e35e1be8dca551c04d8a6c4ff59095471527..c516fb7e7e45ac9ddc65c3a26f17fc228a1981f6 100644 --- a/src/main/java/org/olat/instantMessaging/ui/Roster.java +++ b/src/main/java/org/olat/instantMessaging/ui/Roster.java @@ -68,6 +68,8 @@ public class Roster { for(Buddy buddy:buddies) { if(identityKey != null && identityKey.equals(buddy.getIdentityKey())) { //continue + } else if(buddy.getIdentityKey() == null) { + //do nothing } else if(contains(buddy.getIdentityKey())) { //update status get(buddy.getIdentityKey()).setStatus(buddy.getStatus()); diff --git a/src/main/java/org/olat/login/LoginModule.java b/src/main/java/org/olat/login/LoginModule.java index 3a4ee5f350d67c4f51351a8f649925bf22b7000c..5f55b2bf2f2106c31e209b0a64b51859229e86cb 100644 --- a/src/main/java/org/olat/login/LoginModule.java +++ b/src/main/java/org/olat/login/LoginModule.java @@ -33,7 +33,7 @@ import org.olat.core.configuration.AbstractOLATModule; import org.olat.core.configuration.PersistedProperties; import org.olat.core.logging.StartupException; import org.olat.core.logging.Tracing; -import org.olat.core.util.cache.n.CacheWrapper; +import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.login.auth.AuthenticationProvider; diff --git a/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java b/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java index aed7ae34f17e4a16b8f01613834300d5daa527f4..38d3f9ce2650d9e8db03eebd87aad192f87ff690 100644 --- a/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java +++ b/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java @@ -43,7 +43,7 @@ import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.util.StringHelper; import org.olat.core.util.WebappHelper; -import org.olat.core.util.cache.n.CacheWrapper; +import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.group.BusinessGroup; import org.olat.modules.openmeetings.OpenMeetingsModule; diff --git a/src/main/java/org/olat/modules/webFeed/dispatching/Path.java b/src/main/java/org/olat/modules/webFeed/dispatching/Path.java index 4116647ddea414abf22df0aaf56d8c1bbd54dbad..cc4540b2403d2f5f57846e5572c84c148bf8d599 100644 --- a/src/main/java/org/olat/modules/webFeed/dispatching/Path.java +++ b/src/main/java/org/olat/modules/webFeed/dispatching/Path.java @@ -31,7 +31,7 @@ import org.olat.basesecurity.BaseSecurityManager; import org.olat.core.helpers.Settings; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; -import org.olat.core.util.cache.n.CacheWrapper; +import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.coordinate.SyncerExecutor; import org.olat.modules.webFeed.managers.FeedManager; diff --git a/src/main/java/org/olat/modules/webFeed/managers/FeedManagerImpl.java b/src/main/java/org/olat/modules/webFeed/managers/FeedManagerImpl.java index 2d74ed78901e9fc6bd079d7d702653e7c0b80d2e..4aa588550fe05877a55b787d3892452fc25a8b0c 100644 --- a/src/main/java/org/olat/modules/webFeed/managers/FeedManagerImpl.java +++ b/src/main/java/org/olat/modules/webFeed/managers/FeedManagerImpl.java @@ -45,7 +45,7 @@ import org.olat.core.util.Formatter; import org.olat.core.util.ImageHelper; import org.olat.core.util.StringHelper; import org.olat.core.util.ZipUtil; -import org.olat.core.util.cache.n.CacheWrapper; +import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.coordinate.Coordinator; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.coordinate.LockResult; diff --git a/src/main/java/org/olat/modules/wiki/WikiManager.java b/src/main/java/org/olat/modules/wiki/WikiManager.java index 5c7cfb668e211b10411351a999b01454fa8f3c40..c1423b7288c11d40842ee5fef01224895f3f1e8e 100644 --- a/src/main/java/org/olat/modules/wiki/WikiManager.java +++ b/src/main/java/org/olat/modules/wiki/WikiManager.java @@ -44,7 +44,7 @@ import org.olat.core.logging.activity.LearningResourceLoggingAction; import org.olat.core.logging.activity.ThreadLocalUserActivityLogger; import org.olat.core.manager.BasicManager; import org.olat.core.util.FileUtils; -import org.olat.core.util.cache.n.CacheWrapper; +import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.controller.OLATResourceableListeningWrapperController; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.coordinate.SyncerExecutor; diff --git a/src/main/resources/database/mysql/alter_8_3_0_to_8_4_0.sql b/src/main/resources/database/mysql/alter_8_3_0_to_8_4_0.sql index 4baa9053a7be745752ddc41ef4f2b6db56ee93b0..c77e1d1f987819d92f7f4bcc35f59a5179b49f25 100644 --- a/src/main/resources/database/mysql/alter_8_3_0_to_8_4_0.sql +++ b/src/main/resources/database/mysql/alter_8_3_0_to_8_4_0.sql @@ -26,6 +26,20 @@ alter table o_im_notification add constraint idx_im_not_to_toid foreign key (fk_ alter table o_im_notification add constraint idx_im_not_to_fromid foreign key (fk_from_identity_id) references o_bs_identity (id); create index idx_im_chat_res_idx on o_im_notification (chat_resid,chat_resname); +create table if not exists o_im_roster_entry ( + id bigint not null, + creationdate datetime, + r_resname varchar(50) not null, + r_resid bigint not null, + r_nickname varchar(255), + r_fullname varchar(255), + r_anonym bit default 0, + fk_identity_id bigint not null, + primary key (id) +); +alter table o_im_roster_entry add constraint idx_im_rost_to_id foreign key (fk_identity_id) references o_bs_identity (id); +create index idx_im_rost_res_idx on o_im_roster_entry (r_resid,r_resname); + create table if not exists o_im_preferences ( id bigint not null, creationdate datetime, diff --git a/src/main/resources/serviceconfig/org/olat/core/_spring/olatcoreconfig.xml b/src/main/resources/serviceconfig/org/olat/core/_spring/olatcoreconfig.xml index c48a04b9e180422105d9a7d33f967f1fab0beb15..b49e9e78f4678930900793ece2aeadec78baa4be 100644 --- a/src/main/resources/serviceconfig/org/olat/core/_spring/olatcoreconfig.xml +++ b/src/main/resources/serviceconfig/org/olat/core/_spring/olatcoreconfig.xml @@ -46,15 +46,15 @@ <property name="cacher" ref="infinispanCacher"/> </bean> -<bean id="infinispanCacheManager" class="org.olat.core.util.cache.n.InfinispanCacheManager"> +<bean id="infinispanCacheManager" class="org.olat.core.util.cache.infinispan.InfinispanCacheManager"> <property name="configuration" value="infinispan-config.xml"/> <property name="jndiName" value="${infinispan.jndi}"/> </bean> -<bean id="infinispanCacher" class="org.olat.core.util.cache.n.InfinispanCacher" init-method="init"> +<bean id="infinispanCacher" class="org.olat.core.util.cache.infinispan.InfinispanCacher" init-method="init"> <constructor-arg index="0" ref="infinispanCacheManager"/> <property name="rootConfig"> - <bean class="org.olat.core.util.cache.n.CacheConfig"> + <bean class="org.olat.core.util.cache.CacheConfig"> <property name="childrenConfig"> <map> <entry key="org.olat.login.LoginModule_blockafterfailedattempts" value-ref="org.olat.login.LoginModule_blockafterfailedattempts" /> @@ -78,72 +78,72 @@ <!-- cache beans --> -<bean id="org.olat.login.LoginModule_blockafterfailedattempts" class="org.olat.core.util.cache.n.CacheConfig" > +<bean id="org.olat.login.LoginModule_blockafterfailedattempts" class="org.olat.core.util.cache.CacheConfig" > <property name="timeToLive" value="300" /> <property name="timeToIdle" value="0" /> <property name="maxElementsInMemory" value="1000" /> </bean> -<bean id="org.olat.commons.servlets.RSSServlet_rssdocs" class="org.olat.core.util.cache.n.CacheConfig"> +<bean id="org.olat.commons.servlets.RSSServlet_rssdocs" class="org.olat.core.util.cache.CacheConfig"> <property name="timeToLive" value="190" /> <property name="timeToIdle" value="0" /> <property name="maxElementsInMemory" value="200" /> </bean> -<bean id="org.olat.ims.qti.process.QTIHelper_QTI_xml_Documents" class="org.olat.core.util.cache.n.CacheConfig"> +<bean id="org.olat.ims.qti.process.QTIHelper_QTI_xml_Documents" class="org.olat.core.util.cache.CacheConfig"> <property name="timeToLive" value="3600" /> <property name="timeToIdle" value="1800" /> <!-- qti files may be large --> <property name="maxElementsInMemory" value="20" /> </bean> -<bean id="org.olat.modules.wiki.WikiManager_wiki" class="org.olat.core.util.cache.n.CacheConfig"> +<bean id="org.olat.modules.wiki.WikiManager_wiki" class="org.olat.core.util.cache.CacheConfig"> <property name="timeToLive" value="14400" /> <property name="timeToIdle" value="1800" /> <property name="maxElementsInMemory" value="50" /> </bean> -<bean id="org.olat.commons.calendar.ICalFileCalendarManager_calendar" class="org.olat.core.util.cache.n.CacheConfig"> +<bean id="org.olat.commons.calendar.ICalFileCalendarManager_calendar" class="org.olat.core.util.cache.CacheConfig"> <property name="timeToLive" value="3600" /> <property name="timeToIdle" value="3600" /> <property name="maxElementsInMemory" value="50" /> </bean> -<bean id="org.olat.course.CourseFactory_courses" class="org.olat.core.util.cache.n.CacheConfig"> +<bean id="org.olat.course.CourseFactory_courses" class="org.olat.core.util.cache.CacheConfig"> <property name="timeToLive" value="0" /> <property name="timeToIdle" value="3600" /> <property name="maxElementsInMemory" value="${course.cache.elements}" /> </bean> -<bean id="org.olat.collaboration.CollaborationToolsFactory_tools" class="org.olat.core.util.cache.n.CacheConfig"> +<bean id="org.olat.collaboration.CollaborationToolsFactory_tools" class="org.olat.core.util.cache.CacheConfig"> <property name="timeToLive" value="3600" /> <property name="timeToIdle" value="1800" /> <property name="maxElementsInMemory" value="5000" /> </bean> -<bean id="org.olat.core.modules.glossary.GlossaryItemManager_glossary" class="org.olat.core.util.cache.n.CacheConfig"> +<bean id="org.olat.core.modules.glossary.GlossaryItemManager_glossary" class="org.olat.core.util.cache.CacheConfig"> <property name="timeToLive" value="7200" /> <property name="timeToIdle" value="1800" /> <property name="maxElementsInMemory" value="50" /> </bean> -<bean id="org.olat.course.nodes.projectbroker.service.ProjectBrokerManagerImpl_pb" class="org.olat.core.util.cache.n.CacheConfig"> +<bean id="org.olat.course.nodes.projectbroker.service.ProjectBrokerManagerImpl_pb" class="org.olat.core.util.cache.CacheConfig"> <property name="timeToLive" value="3600" /> <property name="timeToIdle" value="3600" /> <property name="maxElementsInMemory" value="50" /> </bean> -<bean id="org.olat.commons.servlets.WebDAVManagerImpl_webdav" class="org.olat.core.util.cache.n.CacheConfig"> +<bean id="org.olat.commons.servlets.WebDAVManagerImpl_webdav" class="org.olat.core.util.cache.CacheConfig"> <property name="timeToLive" value="1800" /> <property name="timeToIdle" value="300" /> <property name="maxElementsInMemory" value="200" /> </bean> <!-- caching for the olat course. a cache is segemented as follows: first per course, then per identity --> -<bean id="org.olat.course.assessment.NewCachePersistingAssessmentManager" class="org.olat.core.util.cache.n.CacheConfig"> +<bean id="org.olat.course.assessment.NewCachePersistingAssessmentManager" class="org.olat.core.util.cache.CacheConfig"> <property name="timeToLive" value="1" /> <property name="timeToIdle" value="1" /> <property name="maxElementsInMemory" value="1" /> <property name="childrenConfig"> <map> <entry key="CourseModule"> - <bean class="org.olat.core.util.cache.n.CacheConfig"> + <bean class="org.olat.core.util.cache.CacheConfig"> <property name="childrenConfig"> <map> <entry key="Identity"> - <bean class="org.olat.core.util.cache.n.CacheConfig"> + <bean class="org.olat.core.util.cache.CacheConfig"> <property name="timeToLive" value="0" /> <property name="timeToIdle" value="60" /> <property name="maxElementsInMemory" value="1000" /> @@ -157,11 +157,11 @@ here: a course (e.g. when a course has either tons of visitors, or tons of (assessable) nodes. --> <entry key="CourseModule_dfdsf"> - <bean class="org.olat.core.util.cache.n.CacheConfig"> + <bean class="org.olat.core.util.cache.CacheConfig"> <property name="childrenConfig"> <map> <entry key="Identity"> - <bean class="org.olat.core.util.cache.n.CacheConfig"> + <bean class="org.olat.core.util.cache.CacheConfig"> <property name="timeToLive" value="0" /> <property name="timeToIdle" value="60" /> <property name="maxElementsInMemory" value="1000" /> @@ -175,7 +175,7 @@ </property> </bean> -<bean id="org.olat.core.util.UserSession" class="org.olat.core.util.cache.n.CacheConfig"> +<bean id="org.olat.core.util.UserSession" class="org.olat.core.util.cache.CacheConfig"> <property name="timeToLive" value="3600" /> <property name="timeToIdle" value="3600" /> <property name="maxElementsInMemory" value="2000" /> diff --git a/src/test/java/org/olat/core/id/context/HistoryManagerTest.java b/src/test/java/org/olat/core/id/context/HistoryManagerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..fe4aba0c37d1e70b828be08deb06d27c2b49d253 --- /dev/null +++ b/src/test/java/org/olat/core/id/context/HistoryManagerTest.java @@ -0,0 +1,53 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.core.id.context; + +import static org.junit.Assert.assertNotNull; + +import java.io.File; +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; + +import junit.framework.Assert; + +import org.junit.Test; +import org.olat.test.OlatTestCase; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * + * Initial date: 19.12.2012<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + */ +public class HistoryManagerTest extends OlatTestCase { + + @Autowired + private HistoryManager historyManager; + + @Test + public void xstreamBackwardsCompatibility() throws IOException, URISyntaxException { + URL xmlUrl = HistoryManagerTest.class.getResource("resume_ver1.xml"); + assertNotNull(xmlUrl); + File resumeXml = new File(xmlUrl.toURI()); + HistoryPoint history = historyManager.readHistory(resumeXml); + Assert.assertNotNull(history); + } +} diff --git a/src/test/java/org/olat/core/id/context/resume_ver1.xml b/src/test/java/org/olat/core/id/context/resume_ver1.xml new file mode 100644 index 0000000000000000000000000000000000000000..8dc1fbedc102bcc16e5a9ec5a65bfafa3ba569d1 --- /dev/null +++ b/src/test/java/org/olat/core/id/context/resume_ver1.xml @@ -0,0 +1,19 @@ +<org.olat.core.id.context.HistoryPointImpl> + <uuid>2</uuid> + <businessPath>[RepositorySite:0][search.my:0]</businessPath> + <entries> + <org.olat.core.id.context.MyContextEntry> + <olatResourceable class="org.olat.core.util.resource.OresHelper$1"> + <val_-type>RepositorySite</val_-type> + <val_-key>0</val_-key> + </olatResourceable> + <state class="org.olat.core.id.context.StateSite"/> + </org.olat.core.id.context.MyContextEntry> + <org.olat.core.id.context.MyContextEntry> + <olatResourceable class="org.olat.core.util.resource.OresHelper$1"> + <val_-type>search.my</val_-type> + <val_-key>0</val_-key> + </olatResourceable> + </org.olat.core.id.context.MyContextEntry> + </entries> +</org.olat.core.id.context.HistoryPointImpl> \ No newline at end of file