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