// $HeadURL$
// $Id$
//
//
// Screensaver is an open-source project developed by the ICCB-L and NSRB labs
// at Harvard Medical School. This software is distributed under the terms of
// the GNU General Public License.
package edu.harvard.med.screensaver.ui.arch.util;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import com.google.common.collect.Lists;
import edu.harvard.med.screensaver.db.GenericEntityDAO;
import edu.harvard.med.screensaver.model.AuditedAbstractEntity;
import edu.harvard.med.screensaver.model.activities.AdministrativeActivityType;
import edu.harvard.med.screensaver.model.users.AdministratorUser;
import edu.harvard.med.screensaver.ui.arch.view.AbstractBackingBean;
import edu.harvard.med.screensaver.ui.arch.view.aspects.UICommand;
import edu.harvard.med.screensaver.util.StringUtils;
public class EntityComments<E extends AuditedAbstractEntity> extends AbstractBackingBean
{
private GenericEntityDAO _dao;
private E _entity;
private String _newComment;
private DataModel _model;
private AdministratorUser _admin;
public EntityComments(GenericEntityDAO dao)
{
_dao = dao;
}
protected EntityComments()
{}
public void setEntity(E entity)
{
_entity = entity;
reset();
// load current admin instance while we're in session, to avoid NonUniqueObjectException on save
if (getScreensaverUser() instanceof AdministratorUser) {
_admin = (AdministratorUser) _dao.reloadEntity(getScreensaverUser());
}
}
public DataModel getCommentsDataModel()
{
if (_model == null) {
_model = new ListDataModel(Lists.newArrayList(_entity.getUpdateActivitiesOfType(AdministrativeActivityType.COMMENT)));
}
return _model;
}
@UICommand
public String addNewComment()
{
if (StringUtils.isEmpty(_newComment)) {
showMessage("requiredValue", "Comment");
return REDISPLAY_PAGE_ACTION_RESULT;
}
_entity.createComment(_admin, _newComment);
reset();
return REDISPLAY_PAGE_ACTION_RESULT;
}
public String getNewComment()
{
return _newComment;
}
public void setNewComment(String newComment)
{
_newComment = newComment;
}
private void reset()
{
_newComment = null;
_model = null;
}
}