/*
* 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 org.jboss.seam.wiki.core.model.User;
import org.jboss.seam.wiki.core.model.WikiDirectory;
import org.jboss.seam.wiki.core.model.WikiMenuItem;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.Component;
import java.util.List;
import java.io.Serializable;
/**
* @author Christian Bauer
*/
@Name("directoryNodeRemover")
public class DirectoryNodeRemover extends NodeRemover<WikiDirectory> implements Serializable {
public boolean isRemovable(WikiDirectory dir) {
if (getWikiNodeDAO().findChildrenCount(dir) > 0) {
getLog().debug("directory is not deletable, has children: " + dir);
return false;
}
WikiDirectory trashArea = (WikiDirectory)Component.getInstance("trashArea");
WikiDirectory memberArea = (WikiDirectory)Component.getInstance("memberArea");
WikiDirectory helpArea = (WikiDirectory) Component.getInstance("helpArea");
return dir.getParent() != null // Wiki ROOT not deleteable
&& !dir.getId().equals(trashArea.getId())
&& !dir.getId().equals(memberArea.getId())
&& !dir.getId().equals(helpArea.getId());
}
public void trash(WikiDirectory node) {
throw new IllegalStateException("Can't trash WikiDirectory instance");
}
public void removeDependencies(WikiDirectory dir) {
getLog().debug("removing dependencies of: " + dir);
// Feed
if (dir.getFeed() != null) {
getLog().debug("removing feed of directory: " + dir);
getFeedDAO().removeFeed(dir);
}
// WikiMenuItem
WikiMenuItem menuItem = getWikiNodeDAO().findMenuItem(dir);
if (menuItem != null) {
getLog().debug("removing menu item of directory: " + menuItem);
getEntityManager().remove(menuItem);
}
// User.homeDirectory
User user = getWikiNodeDAO().findWikiDirectoryMemberHome(dir.getId());
if (user != null) {
getLog().debug("setting member home to null: " + user);
user.setMemberHome(null);
}
}
}