Java tutorial
///////////////////////////////////////////////////////////////////////////// // // Project ProjectForge Community Edition // www.projectforge.org // // Copyright (C) 2001-2013 Kai Reinhard (k.reinhard@micromata.de) // // ProjectForge is dual-licensed. // // This community edition is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as published // by the Free Software Foundation; version 3 of the License. // // This community edition is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General // Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, see http://www.gnu.org/licenses/. // ///////////////////////////////////////////////////////////////////////////// package org.projectforge.core; import java.io.Serializable; import java.sql.Timestamp; import java.util.Collection; import java.util.Date; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.Transformer; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.builder.ReflectionToStringBuilder; import org.hibernate.Session; import org.projectforge.common.DateHelper; import org.projectforge.common.NumberHelper; import org.projectforge.user.PFUserDO; import org.projectforge.user.UserGroupCache; import de.micromata.hibernate.history.HistoryEntry; import de.micromata.hibernate.history.HistoryEntryType; import de.micromata.hibernate.history.delta.CollectionPropertyDelta; import de.micromata.hibernate.history.delta.PropertyDelta; /** * For storing the hibernate history entries in flat format. * @author Kai Reinhard (k.reinhard@micromata.de) * */ public class DisplayHistoryEntry implements Serializable { private static final long serialVersionUID = 3900345445639438747L; private PFUserDO user; private final HistoryEntryType entryType; private String propertyName; private String propertyType; private String oldValue; private String newValue; private final Timestamp timestamp; public DisplayHistoryEntry(final UserGroupCache userCache, final HistoryEntry entry) { this.timestamp = entry.getTimestamp(); final Integer userId = NumberHelper.parseInteger(entry.getUserName()); if (userId != null) { this.user = userCache.getUser(userId); } // entry.getClassName(); // entry.getComment(); this.entryType = entry.getType(); // entry.getEntityId(); } private PFUserDO getUser(final UserGroupCache userCache, final String userId) { if (StringUtils.isBlank(userId) == true) { return null; } final Integer id = NumberHelper.parseInteger(userId); if (id == null) { return null; } return userCache.getUser(id); } public DisplayHistoryEntry(final UserGroupCache userCache, final HistoryEntry entry, final PropertyDelta prop, final Session session) { this(userCache, entry); this.propertyType = prop.getPropertyType(); Object oldObjectValue = null; Object newObjectValue = null; if (PFUserDO.class.getName().equals(this.propertyType) == true) { PFUserDO user = getUser(userCache, prop.getOldValue()); if (user != null) { oldObjectValue = user; } user = getUser(userCache, prop.getNewValue()); if (user != null) { newObjectValue = user; } } if (oldObjectValue == null) { oldObjectValue = prop.getOldObjectValue(session); } if (newObjectValue == null) { newObjectValue = prop.getNewObjectValue(session); } final String propType = prop.getPropertyType(); if (prop instanceof CollectionPropertyDelta) { this.oldValue = String.valueOf(toShortNameOfList(oldObjectValue)); this.newValue = String.valueOf(toShortNameOfList(newObjectValue)); } else if ("java.util.Date".equals(propType) == true || "java.sql.Date".equals(propType) == true || "java.sql.Timestamp".equals(propType) == true) { this.oldValue = formatDate(oldObjectValue); this.newValue = formatDate(newObjectValue); } else { this.oldValue = toShortName(oldObjectValue); this.newValue = toShortName(newObjectValue); } this.propertyName = prop.getPropertyName(); } private String formatDate(final Object objectValue) { if (objectValue == null) { return ""; } if (objectValue instanceof java.sql.Date) { return DateHelper.formatIsoDate((Date) objectValue); } else if (objectValue instanceof Date) { return DateHelper.formatIsoTimestamp((Date) objectValue); } return String.valueOf(objectValue); } private Object toShortNameOfList(final Object value) { if (value instanceof Collection<?>) { return CollectionUtils.collect((Collection<?>) value, new Transformer() { public Object transform(final Object input) { return toShortName(input); } }); } return value; } String toShortName(final Object object) { return String.valueOf( object instanceof ShortDisplayNameCapable ? ((ShortDisplayNameCapable) object).getShortDisplayName() : object); } /** * @return the entryType */ public HistoryEntryType getEntryType() { return entryType; } /** * @return the newValue */ public String getNewValue() { return newValue; } /** * @param newValue the newValue to set * @return this for chaining. */ public void setNewValue(final String newValue) { this.newValue = newValue; } /** * @return the oldValue */ public String getOldValue() { return oldValue; } /** * @param oldValue the oldValue to set * @return this for chaining. */ public void setOldValue(final String oldValue) { this.oldValue = oldValue; } /** * @return the propertyName */ public String getPropertyName() { return propertyName; } /** * Use-full for prepending id of childs (e. g. entries in a collection displayed in the history table of the parent object). Example: AuftragDO -> AuftragsPositionDO. * @param propertyName */ public void setPropertyName(final String propertyName) { this.propertyName = propertyName; } /** * @return the propertyType */ public String getPropertyType() { return propertyType; } public PFUserDO getUser() { return user; } public Timestamp getTimestamp() { return timestamp; } /** * Returns string containing all fields (except the password, via ReflectionToStringBuilder). * @return */ @Override public String toString() { return new ReflectionToStringBuilder(this).toString(); } }