From 3e1f152fcb6bf90c8f12420a3603adaac295ca62 Mon Sep 17 00:00:00 2001 From: strentini <none@none> Date: Tue, 14 Feb 2012 12:21:02 +0100 Subject: [PATCH] FXOLAT-431 : extend datamodel of userRating: now includes lastmodified --- .../impl/UserRatingImpl.hbm.xml | 4 ++- .../commentAndRating/impl/UserRatingImpl.java | 14 ++++++++ .../impl/UserRatingsManagerImpl.java | 2 ++ .../commentAndRating/model/UserRating.java | 3 +- .../manager/EPNotificationsHelper.java | 32 +++++++++++++++---- .../view/_i18n/LocalStrings_de.properties | 1 + .../view/_i18n/LocalStrings_en.properties | 1 + .../_spring/databaseUpgradeContext.xml | 4 +++ .../database/mysql/alter_8_0_x_to_8_0_2.sql | 2 ++ .../database/mysql/setupDatabase.sql | 1 + .../database/oracle/setupDatabase.sql | 1 + .../postgresql/alter_8_0_x_to_8_0_2.sql | 2 ++ .../database/postgresql/setupDatabase.sql | 1 + 13 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 src/main/resources/database/mysql/alter_8_0_x_to_8_0_2.sql create mode 100644 src/main/resources/database/postgresql/alter_8_0_x_to_8_0_2.sql diff --git a/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.hbm.xml b/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.hbm.xml index ebf266a7ea7..1a5002ace1d 100644 --- a/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.hbm.xml +++ b/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.hbm.xml @@ -13,7 +13,9 @@ <version name="version" access="field" column="version" type="int"/> <property name="creationDate" column="creationdate" type="timestamp" /> - + + <property name="lastModified" column="lastmodified" type="timestamp" /> + <property name="resName" type="string" > <column name="resname" not-null="true" length="50" index="resname_idx2"/> </property> diff --git a/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.java b/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.java index 7415f7d6485..a0a2f666467 100644 --- a/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.java +++ b/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.java @@ -19,6 +19,8 @@ */ package org.olat.core.commons.services.commentAndRating.impl; +import java.util.Date; + import org.olat.core.commons.persistence.PersistentObject; import org.olat.core.commons.services.commentAndRating.model.UserRating; import org.olat.core.id.Identity; @@ -40,6 +42,8 @@ public class UserRatingImpl extends PersistentObject implements UserRating { private Identity creator; private Integer rating; + + private Date modifiedDate; /** * Default constructor for hibernate, don't use this! @@ -140,4 +144,14 @@ public class UserRatingImpl extends PersistentObject implements UserRating { this.rating = ratingValue; } + @Override + public Date getLastModified() { + return modifiedDate; + } + + @Override + public void setLastModified(Date date) { + modifiedDate = date; + } + } diff --git a/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingsManagerImpl.java b/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingsManagerImpl.java index 094554f143e..2ac74d03f49 100644 --- a/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingsManagerImpl.java +++ b/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingsManagerImpl.java @@ -24,6 +24,7 @@ */ package org.olat.core.commons.services.commentAndRating.impl; +import java.util.Date; import java.util.List; import org.hibernate.Hibernate; @@ -292,6 +293,7 @@ public class UserRatingsManagerImpl extends UserRatingsManager { } // Update DB entry rating.setRating(newRatingValue); + rating.setLastModified(new Date()); DB db = DBFactory.getInstance(); db.updateObject(rating); // do logging diff --git a/src/main/java/org/olat/core/commons/services/commentAndRating/model/UserRating.java b/src/main/java/org/olat/core/commons/services/commentAndRating/model/UserRating.java index 767276acfe5..8778f89a274 100644 --- a/src/main/java/org/olat/core/commons/services/commentAndRating/model/UserRating.java +++ b/src/main/java/org/olat/core/commons/services/commentAndRating/model/UserRating.java @@ -21,6 +21,7 @@ package org.olat.core.commons.services.commentAndRating.model; import org.olat.core.id.CreateInfo; import org.olat.core.id.Identity; +import org.olat.core.id.ModifiedInfo; import org.olat.core.id.Persistable; /** @@ -33,7 +34,7 @@ import org.olat.core.id.Persistable; * * @author gnaegi */ -public interface UserRating extends CreateInfo, Persistable { +public interface UserRating extends CreateInfo, ModifiedInfo, Persistable { /** * @return The OLAT resource type name of the resource which is beeing diff --git a/src/main/java/org/olat/portfolio/manager/EPNotificationsHelper.java b/src/main/java/org/olat/portfolio/manager/EPNotificationsHelper.java index f8518a5564b..340024d1c1e 100644 --- a/src/main/java/org/olat/portfolio/manager/EPNotificationsHelper.java +++ b/src/main/java/org/olat/portfolio/manager/EPNotificationsHelper.java @@ -58,10 +58,17 @@ import org.olat.portfolio.ui.structel.view.EPChangelogController; * EPNotificationsHelper provides functionality to gather SubscriptionListItems * for given Maps.<br /> * + * + * * FXOLAT-431, FXOLAT-432<br /> * this also triggered: OO-111 * * + * most of the time, the use of the available methods in EPFrontendmanager + * wasn't possible, I always need the "link-creation-time" of a link (e.g. + * between artefact and struct-Eement), thus the new methods in this class. + * + * * @author strentini, sergio.trentini@frentix.com, http://www.frentix.com * */ @@ -151,8 +158,9 @@ public class EPNotificationsHelper { tmp_bPath = rootBusinessPath + "[EPPage:" + tmp_LinkKey + "]"; tmp_linkUrl = BusinessControlFactory.getInstance().getURLFromBusinessPathString(tmp_bPath); - allItems.add(new SubscriptionListItem(translator.translate("li.newartefact", new String[] { getFullNameFromUser(link.getArtefact() - .getAuthor()), link.getArtefact().getTitle(), tmp_TargetTitle }), tmp_linkUrl, link.getCreationDate(), "b_eportfolio_link")); + allItems.add(new SubscriptionListItem(translator.translate("li.newartefact", new String[] { + getFullNameFromUser(link.getArtefact().getAuthor()), link.getArtefact().getTitle(), tmp_TargetTitle }), tmp_linkUrl, link + .getCreationDate(), "b_eportfolio_link")); } } @@ -190,13 +198,13 @@ public class EPNotificationsHelper { String tmp_linkUrl; Long tmp_linkKey = 0L; String tmp_TargetTitle; - + // now check artefacts, comments and ratings of this map List<EPStructureToArtefactLink> links = getAllArtefactLinks(map); for (EPStructureToArtefactLink link : links) { if (link.getCreationDate().after(compareDate)) { PortfolioStructure linkParent = link.getStructureElement(); - + if (linkParent instanceof EPPage) { tmp_linkKey = linkParent.getKey(); tmp_TargetTitle = linkParent.getTitle(); @@ -209,11 +217,11 @@ public class EPNotificationsHelper { tmp_bPath = rootBusinessPath + "[EPPage:" + tmp_linkKey + "]"; tmp_linkUrl = BusinessControlFactory.getInstance().getURLFromBusinessPathString(tmp_bPath); - allItems.add(new SubscriptionListItem(translator.translate("li.newartefact", new String[] { getFullNameFromUser(link.getArtefact() - .getAuthor()),link.getArtefact().getTitle(), tmp_TargetTitle }), tmp_linkUrl, link.getCreationDate(), "b_eportfolio_link")); + allItems.add(new SubscriptionListItem(translator.translate("li.newartefact", new String[] { + getFullNameFromUser(link.getArtefact().getAuthor()), link.getArtefact().getTitle(), tmp_TargetTitle }), tmp_linkUrl, link + .getCreationDate(), "b_eportfolio_link")); } } - /* the comments and ratings */ allItems.addAll(getCRItemsForMap(compareDate, map)); @@ -253,6 +261,11 @@ public class EPNotificationsHelper { for (UserRating rating : ratings) { if (rating.getCreationDate().after(compareDate)) { tmp_linkUrl = BusinessControlFactory.getInstance().getURLFromBusinessPathString(rootBusinessPath); + if (rating.getLastModified() != null) { + // there is a modified date, also add this as a listitem + allItemsToAdd.add(new SubscriptionListItem(translator.translate("li.changerating", new String[] { map.getTitle(), + getFullNameFromUser(rating.getCreator()) }), tmp_linkUrl, rating.getLastModified(), "b_star_icon")); + } allItemsToAdd.add(new SubscriptionListItem(translator.translate("li.newrating", new String[] { map.getTitle(), getFullNameFromUser(rating.getCreator()) }), tmp_linkUrl, rating.getCreationDate(), "b_star_icon")); } @@ -280,6 +293,11 @@ public class EPNotificationsHelper { if (rating.getCreationDate().after(compareDate)) { tmp_bPath = rootBusinessPath + "[EPPage:" + rating.getResSubPath() + "]"; tmp_linkUrl = BusinessControlFactory.getInstance().getURLFromBusinessPathString(tmp_bPath); + if (rating.getLastModified() != null) { + // there is a modified date, also add this as a listitem + allItemsToAdd.add(new SubscriptionListItem(translator.translate("li.changerating", new String[] { child.getTitle(), + getFullNameFromUser(rating.getCreator()) }), tmp_linkUrl, rating.getLastModified(), "b_star_icon")); + } allItemsToAdd.add(new SubscriptionListItem(translator.translate("li.newrating", new String[] { child.getTitle(), getFullNameFromUser(rating.getCreator()) }), tmp_linkUrl, rating.getCreationDate(), "b_star_icon")); } diff --git a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_de.properties index 8dc4df1019c..6f644b44729 100644 --- a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_de.properties @@ -3,6 +3,7 @@ artOnOffLink.true=Artefakte anzeigen artOnOffLink.false=Artefakte ausblenden commentLink=({0}) li.newrating=Neues Rating für '{0}' von {1} +li.changerating={1} änderte sein Rating für '{0}' li.newcomment=Neuer Kommentar zu '{0}' von {1} li.newpage=Es wurde eine neue Seite '{0}' hinzugefügt li.newstruct=Es wurde ein neues Strukturelement '{0}' hinzugefügt diff --git a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_en.properties index dcf953890cd..af135577c2b 100644 --- a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_en.properties @@ -4,6 +4,7 @@ artOnOffLink.true=Show artefacts commentLink=({0}) toc.root=Table of contents li.newrating=New rating for '{0}' from {1} +li.changerating={1} changed his rating for '{0}' li.newcomment=New comment on '{0}' from {1} li.newpage=New page '{0}' added li.newstruct=New structural element '{0}' added diff --git a/src/main/java/org/olat/upgrade/_spring/databaseUpgradeContext.xml b/src/main/java/org/olat/upgrade/_spring/databaseUpgradeContext.xml index dae9d48c2b9..dd5776dd50a 100644 --- a/src/main/java/org/olat/upgrade/_spring/databaseUpgradeContext.xml +++ b/src/main/java/org/olat/upgrade/_spring/databaseUpgradeContext.xml @@ -31,6 +31,10 @@ <constructor-arg index="0" value="OLAT_8.0.0" /> <property name="alterDbStatements" value="alter_7_1_x_to_8_0_0.sql" /> </bean> + <bean id="database_upgrade_8_0_2" class="org.olat.upgrade.DatabaseUpgrade"> + <constructor-arg index="0" value="OLAT_8.0.2" /> + <property name="alterDbStatements" value="alter_8_0_x_to_8_0_2.sql" /> + </bean> </list> </property> </bean> diff --git a/src/main/resources/database/mysql/alter_8_0_x_to_8_0_2.sql b/src/main/resources/database/mysql/alter_8_0_x_to_8_0_2.sql new file mode 100644 index 00000000000..1fdac6e9968 --- /dev/null +++ b/src/main/resources/database/mysql/alter_8_0_x_to_8_0_2.sql @@ -0,0 +1,2 @@ +-- userratings now have a lastmodified date +alter table o_userrating add column lastmodified datetime; diff --git a/src/main/resources/database/mysql/setupDatabase.sql b/src/main/resources/database/mysql/setupDatabase.sql index 2cb812dca6a..c65eff85a4d 100644 --- a/src/main/resources/database/mysql/setupDatabase.sql +++ b/src/main/resources/database/mysql/setupDatabase.sql @@ -493,6 +493,7 @@ create table if not exists o_userrating ( rating_id bigint not null, version mediumint unsigned not null, creationdate datetime, + lastmodified datetime, resname varchar(50) not null, resid bigint not null, ressubpath varchar(2048), diff --git a/src/main/resources/database/oracle/setupDatabase.sql b/src/main/resources/database/oracle/setupDatabase.sql index 6a50252da31..3bde942d16e 100644 --- a/src/main/resources/database/oracle/setupDatabase.sql +++ b/src/main/resources/database/oracle/setupDatabase.sql @@ -699,6 +699,7 @@ CREATE TABLE o_userrating ( rating_id number(20) NOT NULL, version number(11) NOT NULL, creationdate date, + lastmodified date, resname varchar2(50 char) NOT NULL, resid number(20) NOT NULL, ressubpath varchar2(2048 char), diff --git a/src/main/resources/database/postgresql/alter_8_0_x_to_8_0_2.sql b/src/main/resources/database/postgresql/alter_8_0_x_to_8_0_2.sql new file mode 100644 index 00000000000..24979578f11 --- /dev/null +++ b/src/main/resources/database/postgresql/alter_8_0_x_to_8_0_2.sql @@ -0,0 +1,2 @@ +-- userratings now have a lastmodified date +alter table o_userrating add column lastmodified timestamp; diff --git a/src/main/resources/database/postgresql/setupDatabase.sql b/src/main/resources/database/postgresql/setupDatabase.sql index afd1c770f3b..9f201646dbe 100644 --- a/src/main/resources/database/postgresql/setupDatabase.sql +++ b/src/main/resources/database/postgresql/setupDatabase.sql @@ -489,6 +489,7 @@ create table o_userrating ( rating_id int8 not null, version int4 not null, creationdate timestamp, + lastmodified timestamp, resname varchar(50) not null, resid int8 not null, ressubpath varchar(2048), -- GitLab