[jboss-cvs] jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action ...
Christian Bauer
christian at hibernate.org
Mon Mar 19 22:38:15 EDT 2007
User: cbauer
Date: 07/03/19 22:38:15
Modified: examples/wiki/src/main/org/jboss/seam/wiki/core/action
FileHome.java DirectoryHome.java NodeBrowser.java
Menu.java DocumentHome.java NodeHome.java
Log:
Implemented moving of documents and files between directories
Revision Changes Path
1.5 +26 -22 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/FileHome.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: FileHome.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/FileHome.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- FileHome.java 18 Mar 2007 15:44:37 -0000 1.4
+++ FileHome.java 20 Mar 2007 02:38:15 -0000 1.5
@@ -16,18 +16,35 @@
@Scope(ScopeType.CONVERSATION)
public class FileHome extends NodeHome<File> {
+ /* -------------------------- Context Wiring ------------------------------ */
+
@In
Map<String, FileMetaMap.FileMetaInfo> fileMetaMap;
+ /* -------------------------- Internal State ------------------------------ */
+
private String filename;
private String contentType;
// TODO: This should really use an InputStream and directly stream into the BLOB without consuming server memory
private byte[] filedata;
private int imagePreviewSize = 240;
+ public String getFilename() { return filename; }
+ public void setFilename(String filename) { this.filename = filename; }
+
+ public String getContentType() { return contentType; }
+ public void setContentType(String contentType) { this.contentType = contentType; }
+
+ public byte[] getFiledata() { return filedata; }
+ public void setFiledata(byte[] filedata) { this.filedata = filedata; }
+
+ public int getImagePreviewSize() { return imagePreviewSize; }
- @Override
- public String persist() {
+ /* -------------------------- Custom CUD ------------------------------ */
+
+ protected boolean preparePersist() {
+ // Sync file instance with form data
+ syncFile();
// Validate
if (filedata == null || filedata.length == 0) {
@@ -36,32 +53,20 @@
getMessageKeyPrefix() + "noFileUploaded",
"Please select a file to upload"
);
- return null;
+ return false;
}
- // Sync file instance with form data
- syncFile();
-
- return super.persist();
+ return true;
}
- @Override
- public String update() {
-
+ protected boolean prepareUpdate() {
// Sync file instance with form data
syncFile();
- return super.update();
+ return true;
}
- public String getFilename() { return filename; }
- public void setFilename(String filename) { this.filename = filename; }
-
- public String getContentType() { return contentType; }
- public void setContentType(String contentType) { this.contentType = contentType; }
-
- public byte[] getFiledata() { return filedata; }
- public void setFiledata(byte[] filedata) { this.filedata = filedata; }
+ /* -------------------------- Internal Methods ------------------------------ */
private void syncFile() {
if (filedata != null && filedata.length >0) {
@@ -89,9 +94,7 @@
}
}
- public int getImagePreviewSize() {
- return imagePreviewSize;
- }
+ /* -------------------------- Public Features ------------------------------ */
public void zoomPreviewIn() {
if (imagePreviewSize < 1600) imagePreviewSize = imagePreviewSize + 240;
@@ -100,4 +103,5 @@
public void zoomPreviewOut() {
if (imagePreviewSize > 240) imagePreviewSize = imagePreviewSize - 240;
}
+
}
1.4 +25 -24 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DirectoryHome.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: DirectoryHome.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DirectoryHome.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- DirectoryHome.java 18 Mar 2007 15:44:37 -0000 1.3
+++ DirectoryHome.java 20 Mar 2007 02:38:15 -0000 1.4
@@ -5,7 +5,6 @@
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.annotations.datamodel.DataModelSelection;
import org.jboss.seam.ScopeType;
-import org.jboss.seam.core.Events;
import org.jboss.seam.wiki.core.model.Directory;
import org.jboss.seam.wiki.core.model.Node;
import org.jboss.seam.wiki.core.model.Document;
@@ -18,10 +17,22 @@
@Scope(ScopeType.CONVERSATION)
public class DirectoryHome extends NodeHome<Directory> {
+ /* -------------------------- Context Wiring ------------------------------ */
+
+ @DataModel
+ List<Node> childNodes;
+
+ @DataModelSelection
+ Node selectedChildNode;
+
+ /* -------------------------- Internal State ------------------------------ */
+
private List<Document> childDocuments = new ArrayList<Document>();
+ public List<Document> getChildDocuments() { return childDocuments; }
+
+ /* -------------------------- Basic Overrides ------------------------------ */
@Override
- @Transactional
public void create() {
super.create();
@@ -29,9 +40,9 @@
refreshChildNodes();
}
+ /* -------------------------- Custom CUD ------------------------------ */
@Override
- @Transactional
public String persist() {
if (getParentDirectory().getParent() != null) {
@@ -55,21 +66,20 @@
}
}
- @Override
- public String remove() {
- if (getInstance().getParent() == null) return null; // Can not delete wiki root
- return super.remove();
+ protected boolean prepareRemove() {
+ return getInstance().getParent() == null; // Can not delete wiki root
}
- public List<Document> getChildDocuments() {
- return childDocuments;
- }
+ /* -------------------------- Internal Methods ------------------------------ */
- @DataModel
- List<Node> childNodes;
+ private void refreshChildNodes() {
+ childNodes = getInstance().getChildren();
+ for (Node childNode : childNodes) {
+ if (childNode instanceof Document) childDocuments.add((Document)childNode);
+ }
+ }
- @DataModelSelection
- Node selectedChildNode;
+ /* -------------------------- Public Features ------------------------------ */
@Restrict("#{s:hasPermission('Node', 'editMenu', directoryHome.instance)}")
public void moveNodeUpInList() {
@@ -85,17 +95,8 @@
refreshChildNodes();
}
- private void refreshChildNodes() {
- childNodes = getInstance().getChildren();
- for (Node childNode : childNodes) {
- if (childNode instanceof Document) childDocuments.add((Document)childNode);
- }
- }
-
@Restrict("#{s:hasPermission('Node', 'editMenu', directoryHome.instance)}")
public void previewMenuItems() {
- // Refresh UI
- Events.instance().raiseEvent("Nodes.menuStructureModified");
+ refreshMenuItems();
}
-
}
1.4 +18 -0 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeBrowser.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: NodeBrowser.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeBrowser.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- NodeBrowser.java 18 Mar 2007 15:44:37 -0000 1.3
+++ NodeBrowser.java 20 Mar 2007 02:38:15 -0000 1.4
@@ -2,6 +2,7 @@
import org.jboss.seam.annotations.*;
import org.jboss.seam.ScopeType;
+import org.jboss.seam.core.Conversation;
import org.jboss.seam.security.Identity;
import org.jboss.seam.wiki.core.dao.NodeDAO;
import org.jboss.seam.wiki.core.model.Node;
@@ -109,6 +110,23 @@
redirect.returnToCapturedView();
}
+ // TODO: Typical exit method to get out of a root or nested conversation, JBSEAM-906
+ public void exitConversation(Boolean endBeforeRedirect) {
+ Conversation currentConversation = Conversation.instance();
+ if (currentConversation.isNested()) {
+ // End this nested conversation and return to last rendered view-id of parent
+ currentConversation.endAndRedirect(endBeforeRedirect);
+ } else {
+ // End this root conversation
+ currentConversation.end();
+ // Return to the view-id that was captured when this conversation started
+ if (endBeforeRedirect)
+ redirectToLastBrowsedPage();
+ else
+ redirectToLastBrowsedPageWithConversation();
+ }
+ }
+
// Just a convenience method for recursive calling
protected void addDirectoryToPath(List<Node> path, Node directory) {
if (Identity.instance().hasPermission("Node", "read", directory) ||
1.3 +0 -0 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Menu.java
(In the diff below, changes in quantity of whitespace are not shown.)
1.5 +64 -59 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DocumentHome.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: DocumentHome.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DocumentHome.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- DocumentHome.java 18 Mar 2007 15:44:37 -0000 1.4
+++ DocumentHome.java 20 Mar 2007 02:38:15 -0000 1.5
@@ -6,20 +6,24 @@
import org.jboss.seam.core.Events;
import org.jboss.seam.Component;
import org.jboss.seam.ScopeType;
-import org.jboss.seam.security.AuthorizationException;
import org.jboss.seam.contexts.Contexts;
@Name("documentHome")
@Scope(ScopeType.CONVERSATION)
public class DocumentHome extends NodeHome<Document> {
- private String formContent;
- private boolean enabledPreview = false;
+ /* -------------------------- Context Wiring ------------------------------ */
+
+ @In(required = false) private Node selectedHistoricalNode;
+
+ /* -------------------------- Internal State ------------------------------ */
- @In(required = false)
- Node selectedHistoricalNode;
private Document historicalCopy;
private boolean minorRevision = true;
+ private String formContent;
+ private boolean enabledPreview = false;
+
+ /* -------------------------- Basic Overrides ------------------------------ */
@Override
public void create() {
@@ -36,59 +40,79 @@
historicalCopy = new Document(getInstance());
}
- @Override
- public String persist() {
- checkNodeAccessLevelChangePermission();
+ /* -------------------------- Custom CUD ------------------------------ */
- syncFormText();
- return super.persist();
- }
+ protected boolean beforePersist() {
+ // Sync document content
+ syncFormToInstance(getParentDirectory());
- @Override
- @Transactional
- public String update() {
- checkNodeAccessLevelChangePermission();
+ // Make a copy
+ historicalCopy = new Document(getInstance());
+
+ return true;
+ }
- syncFormText();
+ protected boolean beforeUpdate() {
- Events.instance().raiseEvent("Nodes.menuStructureModified");
+ // Sync document content
+ syncFormToInstance(getParentDirectory());
// Write history log and prepare a new copy for further modification
if (!isMinorRevision()) {
+ historicalCopy.setId(getInstance().getId());
getNodeDAO().persistHistoricalNode(historicalCopy);
getInstance().incrementRevision();
// New historical copy in conversation
historicalCopy = new Document(getInstance());
}
- return super.update();
+ return true;
}
- @Override
- @Transactional
- public String remove() {
+ protected boolean beforeRemove() {
// Delete all history nodes
getNodeDAO().removeHistoricalNodes(getInstance());
- // Unset the default document id
- if (getParentDirectory().getDefaultDocument().equals(getInstance()))
- getParentDirectory().setDefaultDocument(null);
+ // Null out default document
+ removeAsDefaultDocument(getParentDirectory());
- return super.remove();
+ return true;
}
- public String getFormContent() {
- // Load the document content and resolve links
- if (formContent == null) {
+ protected void afterNodeMoved(Directory oldParent, Directory newParent) {
+ // Update view
+ syncFormToInstance(oldParent); // Resolve existing links in old directory
+ syncInstanceToForm(newParent); // Now update the form, effectively re-rendering the links
+ }
+
+ /* -------------------------- Internal Methods ------------------------------ */
+
+
+ private void syncFormToInstance(Directory area) {
+ // Outject instances required for WikiLinkResolver
+ Contexts.getEventContext().set("currentDocument", getInstance());
+ Contexts.getEventContext().set("currentDirectory", area);
+
+ WikiLinkResolver wikiLinkResolver = (WikiLinkResolver)Component.getInstance("wikiLinkResolver");
+ getInstance().setContent(wikiLinkResolver.convertToWikiLinks(area, formContent));
+ }
+ private void syncInstanceToForm(Directory parentDirectory) {
// Outject instances required for WikiLinkResolver
Contexts.getEventContext().set("currentDocument", getInstance());
- Contexts.getEventContext().set("currentDirectory", getParentDirectory());
+ Contexts.getEventContext().set("currentDirectory", parentDirectory);
WikiLinkResolver wikiLinkResolver = (WikiLinkResolver)Component.getInstance("wikiLinkResolver");
- formContent = wikiLinkResolver.convertFromWikiLinks(getParentDirectory(), getInstance().getContent());
+ formContent = wikiLinkResolver.convertFromWikiLinks(parentDirectory, getInstance().getContent());
}
+
+
+ /* -------------------------- Public Features ------------------------------ */
+
+ public String getFormContent() {
+ // Load the document content and resolve links
+ if (formContent == null) syncInstanceToForm(getParentDirectory());
return formContent;
}
@@ -96,35 +120,16 @@
this.formContent = formContent;
}
+ public boolean isMinorRevision() { return minorRevision; }
+ public void setMinorRevision(boolean minorRevision) { this.minorRevision = minorRevision; }
+
public boolean isEnabledPreview() {
return enabledPreview;
}
public void setEnabledPreview(boolean enabledPreview) {
this.enabledPreview = enabledPreview;
- syncFormText();
- Events.instance().raiseEvent("Nodes.menuStructureModified");
- }
-
- public boolean isMinorRevision() {
- return minorRevision;
- }
-
- public void setMinorRevision(boolean minorRevision) {
- this.minorRevision = minorRevision;
+ syncFormToInstance(getParentDirectory());
+ refreshMenuItems();
}
-
- private void syncFormText() {
-
- // Outject instances required for WikiLinkResolver
- Contexts.getEventContext().set("currentDocument", getInstance());
- Contexts.getEventContext().set("currentDirectory", getParentDirectory());
-
- // Convert and set form content onto entity instance
- WikiLinkResolver wikiLinkResolver = (WikiLinkResolver)Component.getInstance("wikiLinkResolver");
- getInstance().setContent(
- wikiLinkResolver.convertToWikiLinks(getParentDirectory(), getFormContent())
- );
- }
-
}
1.6 +154 -60 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeHome.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: NodeHome.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeHome.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- NodeHome.java 19 Mar 2007 04:53:54 -0000 1.5
+++ NodeHome.java 20 Mar 2007 02:38:15 -0000 1.6
@@ -1,7 +1,6 @@
package org.jboss.seam.wiki.core.action;
import static javax.faces.application.FacesMessage.SEVERITY_ERROR;
-import javax.persistence.EntityManager;
import org.jboss.seam.framework.EntityHome;
import org.jboss.seam.wiki.core.dao.NodeDAO;
@@ -12,14 +11,18 @@
import org.jboss.seam.wiki.core.ui.WikiUtil;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.RequestParameter;
-import org.jboss.seam.core.Conversation;
+import org.jboss.seam.annotations.Out;
import org.jboss.seam.core.Events;
-import org.jboss.seam.Component;
+import org.jboss.seam.ScopeType;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.security.AuthorizationException;
import org.jboss.seam.security.Identity;
+import org.richfaces.component.html.HtmlTree;
+import org.richfaces.component.TreeRowKey;
+import org.richfaces.component.events.NodeSelectedEvent;
import java.util.Date;
+import java.util.Iterator;
/**
* Superclass for all creating and editing documents, directories, files, etc.
@@ -28,23 +31,37 @@
*/
public abstract class NodeHome<N extends Node> extends EntityHome<N> {
- // Convenience wiring for subclasses
+ /* -------------------------- Context Wiring ------------------------------ */
+
@In private NodeDAO nodeDAO;
@In private UserDAO userDAO;
@In private User currentUser;
- private Directory parentDirectory; // Assigned in create()
-
protected NodeDAO getNodeDAO() { return nodeDAO; }
protected UserDAO getUserDAO() { return userDAO; }
protected User getCurrentUser() { return currentUser; }
- public Directory getParentDirectory() { return parentDirectory; }
- // 'Edit' request parameter
+ @Override
+ @Out(value = "currentNode", scope = ScopeType.CONVERSATION)
+ public N getInstance() {
+ return super.getInstance();
+ }
+
+ /* -------------------------- Request Wiring ------------------------------ */
+
+ // Required 'Edit' request parameter
@RequestParameter private Long nodeId;
- // 'Create' request parameter
+ // Required 'Edit' and 'Create' request parameter
@RequestParameter private Long parentDirId;
+ /* -------------------------- Internal State ------------------------------ */
+
+ private Directory parentDirectory;
+ public Directory getParentDirectory() { return parentDirectory; }
+ public void setParentDirectory(Directory parentDirectory) { this.parentDirectory = parentDirectory; }
+
+ /* -------------------------- Basic Overrides ------------------------------ */
+
@Override
protected String getPersistenceContextName() {
return "restrictedEntityManager";
@@ -53,7 +70,6 @@
// 'Edit' or 'Create'
@Override
public Object getId() {
-
if (nodeId == null) {
return super.getId();
} else {
@@ -61,19 +77,30 @@
}
}
- // Access level filtered DAO
+ // Access level filtered DAO for retrieval by identifier
@Override
public N find() {
+ //noinspection unchecked
N result = (N)nodeDAO.findNode((Long)getId());
if (result==null) handleNotFound();
return result;
}
@Override
+ protected N createInstance() {
+ N node = super.createInstance();
+
+ // Set default permissions for new nodes - default to same access as parent directory
+ node.setWriteAccessLevel(getParentDirectory().getWriteAccessLevel());
+ node.setReadAccessLevel(getParentDirectory().getReadAccessLevel());
+
+ return node;
+ }
+
+ @Override
public void create() {
super.create();
-
// Load the parent directory (needs to be called first)
// The parentDirectory (and parentDirId) parameter can actually be null but this only happens
// when the wiki root is edited... it can only be update()ed anyway, all the other code is null-safe.
@@ -90,25 +117,20 @@
Contexts.getConversationContext().set("currentNode", getInstance());
}
- @Override
- protected N createInstance() {
- N node = super.createInstance();
-
- // Set default permissions for new nodes - default to same access as parent directory
- node.setWriteAccessLevel(getParentDirectory().getWriteAccessLevel());
- node.setReadAccessLevel(getParentDirectory().getReadAccessLevel());
-
- return node;
- }
+ /* -------------------------- Custom CUD ------------------------------ */
@Override
public String persist() {
+ if (!preparePersist()) return null;
- // Permission check (double check if subclass already called it)
+ // Permission checks
checkNodeAccessLevelChangePermission();
- // Set the wikiname
- getInstance().setWikiname(WikiUtil.convertToWikiName(getInstance().getName()));
+ // Last modified metadata
+ setLastModifiedMetadata();
+
+ // Wiki name conversion
+ setWikiName();
// Link the node with its parent directory
getParentDirectory().addChild(getInstance());
@@ -118,75 +140,75 @@
// Set its area number (if subclass didn't already set it)
if (getInstance().getAreaNumber() == null)
- getInstance().setAreaNumber(getParentDirectory().getAreaNumber());
+ getInstance().setAreaNumber(parentDirectory.getAreaNumber());
// Validate
if (!isValidModel()) return null;
+ if (!beforePersist()) return null;
return super.persist();
}
@Override
public String update() {
+ if (!prepareUpdate()) return null;
- // Permission check (double check if subclass already called it)
+ // Permission checks
checkNodeAccessLevelChangePermission();
- // Set last modified by metadata
- getInstance().setLastModifiedBy(getCurrentUser());
- getInstance().setLastModifiedOn(new Date());
+ // Last modified metadata
+ setLastModifiedMetadata();
- // Validate
- if (!isValidModel()) return null;
+ // Wiki name conversion
+ setWikiName();
// Refresh UI
- Events.instance().raiseEvent("Nodes.menuStructureModified");
+ refreshMenuItems();
- // Set the wikiname
- getInstance().setWikiname(WikiUtil.convertToWikiName(getInstance().getName()));
+ // Validate
+ if (!isValidModel()) return null;
+ if (!beforeUpdate()) return null;
return super.update();
}
@Override
public String remove() {
+ if (!prepareRemove()) return null;
// Unlink the node from its directory
getInstance().getParent().removeChild(getInstance());
// Refresh UI
- Events.instance().raiseEvent("Nodes.menuStructureModified");
+ refreshMenuItems();
+ if (!beforeRemove()) return null;
return super.remove();
}
- // TODO: Typical exit method to get out of a root or nested conversation, JBSEAM-906
- public void exitConversation(Boolean endBeforeRedirect) {
- Conversation currentConversation = Conversation.instance();
- if (currentConversation.isNested()) {
- // End this nested conversation and return to last rendered view-id of parent
- currentConversation.endAndRedirect(endBeforeRedirect);
- } else {
- // End this root conversation
- currentConversation.end();
- // Return to the view-id that was captured when this conversation started
- NodeBrowser browser = (NodeBrowser) Component.getInstance("browser");
- if (endBeforeRedirect)
- browser.redirectToLastBrowsedPage();
- else
- browser.redirectToLastBrowsedPageWithConversation();
- }
- }
+ public void parentDirectorySelected(NodeSelectedEvent nodeSelectedEvent) {
+ TreeRowKey rowkey = (TreeRowKey)((HtmlTree)nodeSelectedEvent.getSource()).getRowKey();
+ Iterator pathIterator = rowkey.iterator();
+ Long dirId = null;
+ while (pathIterator.hasNext()) dirId = (Long)pathIterator.next();
+ parentDirectory = nodeDAO.findDirectory(dirId);
+ Directory oldParentDirectory = (Directory)getInstance().getParent();
- protected void checkNodeAccessLevelChangePermission() {
+ // Move node to different directory
+ if (parentDirectory.getId() != oldParentDirectory.getId()) {
- if (!Identity.instance().hasPermission("Node", "changeAccessLevel", getInstance()))
- throw new AuthorizationException("You don't have permission for this operation");
- }
+ // Null out default document of old parent
+ removeAsDefaultDocument(oldParentDirectory);
- // Validation rules for persist(), update(), and remove();
+ // Attach to new parent
+ parentDirectory.addChild(getInstance()); // Disconnects from old parent
+ getInstance().setAreaNumber(parentDirectory.getAreaNumber());
+
+ afterNodeMoved(oldParentDirectory, parentDirectory);
+ }
+ }
- private boolean isValidModel() {
+ protected boolean isValidModel() {
if (getParentDirectory() == null) return true; // Special case, editing the wiki root
// Unique wiki name
@@ -204,4 +226,76 @@
}
+ /* -------------------------- Internal Methods ------------------------------ */
+
+ protected void setWikiName() {
+ getInstance().setWikiname(WikiUtil.convertToWikiName(getInstance().getName()));
+ }
+
+ protected void setLastModifiedMetadata() {
+ getInstance().setLastModifiedBy(currentUser);
+ getInstance().setLastModifiedOn(new Date());
+ }
+
+ protected void checkNodeAccessLevelChangePermission() {
+ if (!Identity.instance().hasPermission("Node", "changeAccessLevel", getInstance()))
+ throw new AuthorizationException("You don't have permission for this operation");
+ }
+
+ protected void removeAsDefaultDocument(Directory directory) {
+ if (directory.getDefaultDocument() != null &&
+ directory.getDefaultDocument().getId().equals(getInstance().getId())
+ ) directory.setDefaultDocument(null);
+ }
+
+ protected void refreshMenuItems() {
+ if (getInstance().isMenuItem())
+ Events.instance().raiseEvent("Nodes.menuStructureModified");
+ }
+
+ /* -------------------------- Subclass Callbacks ------------------------------ */
+
+ /**
+ * Called before the superclass does its preparation;
+ * @return boolean continue or veto
+ */
+ protected boolean preparePersist() { return true; }
+
+ /**
+ * Called after superclass did its preparation right before the actual persist()
+ * @return boolean continue or veto
+ */
+ protected boolean beforePersist() { return true; }
+
+ /**
+ * Called before the superclass does its preparation;
+ * @return boolean continue or veto
+ */
+ protected boolean prepareUpdate() { return true; }
+
+ /**
+ * Called after superclass did its preparation right before the actual update()
+ * @return boolean continue or veto
+ */
+ protected boolean beforeUpdate() { return true; }
+
+ /**
+ * Called before the superclass does its preparation;
+ * @return boolean continue or veto
+ */
+ protected boolean prepareRemove() { return true; }
+
+ /**
+ * Called after superclass did its preparation right before the actual remove()
+ * @return boolean continue or veto
+ */
+ protected boolean beforeRemove() { return true; }
+
+ /**
+ * Called after the node has been disconnected from the old parent and reconnected to the new.
+ * @param oldParent the previous parent directory
+ * @param newParent the new parent directory
+ */
+ protected void afterNodeMoved(Directory oldParent, Directory newParent) {}
+
}
More information about the jboss-cvs-commits
mailing list