Package org.projectforge.core

Source Code of org.projectforge.core.DisplayHistoryEntry

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2014 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();
  }
}
TOP

Related Classes of org.projectforge.core.DisplayHistoryEntry

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.