--- /dev/null
+package net.java.examples.hmp.model.domain.callback;\r
+\r
+import java.util.Date;\r
+\r
+import javax.persistence.PrePersist;\r
+import javax.persistence.PreUpdate;\r
+\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+import net.java.examples.hmp.model.domain.extension.IUserChangeInfo;\r
+import net.java.examples.hmp.model.domain.extension.IUserChangeTrackable;\r
+\r
+public class UserChangeTrackListener {\r
+\r
+ public static final String DEFAULT_USER_NAME = "System";\r
+\r
+ private static final Logger LOG = LoggerFactory.getLogger(UserChangeTrackListener.class);\r
+\r
+ @PreUpdate\r
+ protected void preUpdate(IUserChangeTrackable userChangeTrackable) {\r
+ IUserChangeInfo userChangeInfo = userChangeTrackable.getUserChangeInfo();\r
+\r
+ if (userChangeInfo == null) {\r
+ LOG.warn("IUserChangeInfo of entity {} is null, no change tracking possible.", userChangeTrackable);\r
+ return;\r
+ }\r
+\r
+ userChangeInfo.setChangeDate(new Date());\r
+ userChangeInfo.setChangeUser(getCurrentUser());\r
+\r
+ if (LOG.isTraceEnabled()) {\r
+ LOG.trace("onPreUpdate objectType={}, userChangeInfo={}", userChangeTrackable.getClass().getName(), userChangeInfo.toString());\r
+ }\r
+ }\r
+\r
+ @PrePersist\r
+ protected void prePersist(IUserChangeTrackable userChangeTrackable) {\r
+ IUserChangeInfo userChangeInfo = userChangeTrackable.getUserChangeInfo();\r
+\r
+ userChangeInfo.setCreateDate(new Date());\r
+ userChangeInfo.setChangeDate(userChangeInfo.getCreateDate());\r
+ userChangeInfo.setCreateUser(getCurrentUser());\r
+ userChangeInfo.setChangeUser(userChangeInfo.getCreateUser());\r
+\r
+ if (LOG.isTraceEnabled()) {\r
+ LOG.trace("onPrePersist objectType={}, userChangeInfo={}", userChangeTrackable.getClass().getName(), userChangeInfo.toString());\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Real methodcode replaced with example-code.\r
+ * \r
+ * @return Always displays the same constant string\r
+ */\r
+ protected String getCurrentUser() {\r
+\r
+ return DEFAULT_USER_NAME;\r
+ }\r
+}\r