/*
* JBoss, Home of Professional Open Source
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.seam.wiki.core.action;
import java.util.Date;
import javax.persistence.EntityManager;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.log.Log;
import org.jboss.seam.wiki.core.dao.UserDAO;
import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
import org.jboss.seam.wiki.core.feeds.FeedDAO;
import org.jboss.seam.wiki.core.model.WikiDirectory;
import org.jboss.seam.wiki.core.model.WikiNode;
import org.jboss.seam.wiki.util.WikiUtil;
/**
* @author Christian Bauer
*/
@Scope(ScopeType.CONVERSATION)
public abstract class NodeRemover<N extends WikiNode> {
@Logger
Log log;
@In
protected FeedDAO feedDAO;
@In
protected WikiNodeDAO wikiNodeDAO;
@In
protected UserDAO userDAO;
@In
protected EntityManager restrictedEntityManager;
@In
protected WikiDirectory trashArea;
public abstract boolean isRemovable(N node);
public void trash(N node) {
// Check if the cut item was a default file for its parent
if (node.getParent().isInstance(WikiDirectory.class)) {
WikiDirectory parent = (WikiDirectory)node.getParent();
if ( parent.getDefaultFile() != null && parent.getDefaultFile().getId().equals(node.getId())) {
getLog().debug("trashing default file of directory: " + parent);
parent.setDefaultFile(null);
}
}
// Generate a new (hopefully unique) name
String newName = node.getName() + "." + new Date().getTime(); // Just append a timestamp
// Add to trash area
WikiDirectory persistentTrashArea = getEntityManager().find(WikiDirectory.class, trashArea.getId());
node.setParent(persistentTrashArea);
node.setAreaNumber(persistentTrashArea.getAreaNumber());
node.setName(newName);
node.setWikiname(WikiUtil.convertToWikiName(node.getName()));
}
public abstract void removeDependencies(N node);
protected Log getLog() {
return log;
}
protected FeedDAO getFeedDAO() {
return feedDAO;
}
protected WikiNodeDAO getWikiNodeDAO() {
return wikiNodeDAO;
}
protected UserDAO getUserDAO() {
return userDAO;
}
protected EntityManager getEntityManager() {
return restrictedEntityManager;
}
}