You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by vk...@apache.org on 2009/03/27 01:15:59 UTC

svn commit: r758939 [2/3] - in /portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets: site/ wicket/component/

Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager.java?rev=758939&r1=758938&r2=758939&view=diff
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager.java (original)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager.java Fri Mar 27 00:15:58 2009
@@ -17,12 +17,17 @@
 package org.apache.jetspeed.portlets.site;
 
 import java.io.BufferedOutputStream;
+import java.io.DataOutputStream;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Enumeration;
@@ -32,7 +37,6 @@
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
-import javax.portlet.ActionRequest;
 import javax.portlet.PortletException;
 import javax.portlet.RenderRequest;
 import javax.swing.tree.DefaultMutableTreeNode;
@@ -46,12 +50,18 @@
 import org.apache.jetspeed.om.folder.Folder;
 import org.apache.jetspeed.om.folder.FolderNotFoundException;
 import org.apache.jetspeed.om.folder.InvalidFolderException;
+import org.apache.jetspeed.om.folder.MenuDefinition;
+import org.apache.jetspeed.om.folder.MenuExcludeDefinition;
+import org.apache.jetspeed.om.folder.MenuIncludeDefinition;
+import org.apache.jetspeed.om.folder.MenuOptionsDefinition;
+import org.apache.jetspeed.om.folder.MenuSeparatorDefinition;
 import org.apache.jetspeed.om.page.Fragment;
 import org.apache.jetspeed.om.page.Link;
 import org.apache.jetspeed.om.page.Page;
 import org.apache.jetspeed.om.page.SecurityConstraintsDef;
 import org.apache.jetspeed.om.portlet.LocalizedField;
 import org.apache.jetspeed.page.FolderNotUpdatedException;
+import org.apache.jetspeed.page.LinkNotUpdatedException;
 import org.apache.jetspeed.page.PageManager;
 import org.apache.jetspeed.page.PageNotFoundException;
 import org.apache.jetspeed.page.PageNotUpdatedException;
@@ -59,12 +69,18 @@
 import org.apache.jetspeed.page.document.Node;
 import org.apache.jetspeed.page.document.NodeException;
 import org.apache.jetspeed.page.document.UnsupportedDocumentTypeException;
+import org.apache.jetspeed.portalsite.MenuElement;
 import org.apache.jetspeed.portlets.security.users.WicketUserAdmin;
+import org.apache.jetspeed.portlets.site.SiteTreeNode.FileType;
+import org.apache.jetspeed.portlets.wicket.component.DynamicResourceLink;
 import org.apache.jetspeed.portlets.wicket.component.JavascriptEventConfirmation;
+import org.apache.jetspeed.portlets.wicket.component.ResourceProvider;
 import org.apache.jetspeed.security.SecurityException;
 import org.apache.wicket.Component;
 import org.apache.wicket.ResourceReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.IAjaxCallDecorator;
+import org.apache.wicket.ajax.calldecorator.AjaxPreprocessingCallDecorator;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField;
@@ -80,10 +96,13 @@
 import org.apache.wicket.markup.html.form.DropDownChoice;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.FormComponent;
+import org.apache.wicket.markup.html.form.HiddenField;
+import org.apache.wicket.markup.html.form.ListMultipleChoice;
 import org.apache.wicket.markup.html.form.RequiredTextField;
 import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.form.upload.FileUpload;
+import org.apache.wicket.markup.html.form.upload.FileUploadField;
 import org.apache.wicket.markup.html.image.Image;
-import org.apache.wicket.markup.html.link.ExternalLink;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
@@ -108,7 +127,6 @@
 {
     // protected final Log log = LogFactory.getLog(this.getClass());
     // components
-    protected PageManager pageManager;
     protected PortletRegistry registry;
     protected DecorationFactory decorationFactory;
     // session
@@ -118,23 +136,25 @@
     public final static String FOLDERS = "folders";
     public final static String JSROOT = "jsroot";
     public static final String ALL_SECURITY_REFS = "allSecurityRefs";
-    protected PageManager castorPageManager;
     private DefaultTreeModel treeModel;
     private AjaxTabbedPanel tabPanel;
     private DefaultTreeModel treeRoot;
     private JetspeedDocument document;
+    private MenuDefinition menuDefinition;
     private static List<String> pageDecoraters;
     private static List<String> portletDecorators;
     private static List<String> pageThemes;
     private static List<String> constraintsDefs;
     private static List<String> targetList;
-    private static String ADD_ACTION = "add";
-    private static String REMOVE_ACTION = "remove";
-    private static String SAVE_ACTION = "save";
+    private final static String ADD_ACTION = "add";
+    private final static String REMOVE_ACTION = "remove";
+    private final static String SAVE_ACTION = "save";
+    private final static String INCLUDES = "includes";
+    private final static String EXCLUDES = "excludes";
+    private final static String FOLDER_NODE_TYPE = "folder";
+    private final static String PAGE_NODE_TYPE = "page";
+    private List menuOptions = new ArrayList();
     String userFolder;
-    private AjaxLink addFolder;
-    private AjaxLink addPage;
-    private AjaxLink addLink;
 
     public PortalSiteManager()
     {
@@ -147,8 +167,6 @@
         tabPanel = new AjaxTabbedPanel("tabs", tabList);
         tabPanel.setOutputMarkupId(true);
         add(siteTree);
-        final ModalWindow metaDataModalWindow;
-        add(metaDataModalWindow = new ModalWindow("modalwindow"));
         Form treeForm = new Form("treeForm");
         treeForm.add(new AutoCompleteTextField<String>("userFolder", new PropertyModel(this, "userFolder"))
         {
@@ -203,42 +221,6 @@
                 ((LinkTree) getPage().get("siteTree")).getTreeState().expandNode(populateTree());
             }
         });
-        addFolder = new AjaxLink("addFolder")
-        {
-            @Override
-            public void onClick(AjaxRequestTarget target)
-            {
-                metaDataModalWindow.setContent(new AddFolderPanel(metaDataModalWindow.getContentId()));
-                metaDataModalWindow.show(target);
-            }
-        };
-        treeForm.add(addFolder);
-        addPage = new AjaxLink("addPage")
-        {
-            @Override
-            public void onClick(AjaxRequestTarget target)
-            {
-                metaDataModalWindow.setContent(new AddPagePanel(metaDataModalWindow.getContentId()));
-                metaDataModalWindow.show(target);
-            }
-        };
-        treeForm.add(addPage);
-        addLink = new AjaxLink("addLink")
-        {
-            @Override
-            public void onClick(AjaxRequestTarget target)
-            {
-                metaDataModalWindow.setContent(new AddLinkPanel(metaDataModalWindow.getContentId()));
-                metaDataModalWindow.show(target);
-            }
-        };
-        treeForm.add(addLink);
-        addFolder.setVisibilityAllowed(true);
-        addPage.setVisibilityAllowed(true);
-        addLink.setVisibilityAllowed(true);
-        addFolder.setVisible(false);
-        addPage.setVisible(false);
-        addLink.setVisible(false);
         add(treeForm);
         add(tabPanel);
         controlTabs();
@@ -295,22 +277,7 @@
                     {
                         tree.getTreeState().collapseNode(treeNode);
                     }
-                    if (siteNode.getDocType() == SiteTreeNode.FileType.Folder)
-                    {
-                        addFolder.setVisible(true);
-                        addPage.setVisible(true);
-                        addLink.setVisible(true);
-                    }
-                    else
-                    {
-                        addFolder.setVisible(false);
-                        addPage.setVisible(false);
-                        addLink.setVisible(false);
-                    }
                     target.addComponent(tabPanel);
-                    target.addComponent(addFolder);
-                    target.addComponent(addLink);
-                    target.addComponent(addPage);
                 }
 
                 @Override
@@ -344,8 +311,6 @@
         }
     }
 
-    
-
     protected class InformationTab extends BasePanel
     {
         private static final long serialVersionUID = 3039163446419682350L;
@@ -403,6 +368,41 @@
             infoForm.add(defaultPageField);
             defaultPageLabel.setVisibilityAllowed(true);
             defaultPageField.setVisibilityAllowed(true);
+            final ModalWindow metaDataModalWindow;
+            add(metaDataModalWindow = new ModalWindow("modalwindow"));
+            AjaxLink addFolder = new AjaxLink("addFolder")
+            {
+                @Override
+                public void onClick(AjaxRequestTarget target)
+                {
+                    metaDataModalWindow.setContent(new AddFolderPanel(metaDataModalWindow.getContentId()));
+                    metaDataModalWindow.show(target);
+                }
+            };
+            add(addFolder);
+            AjaxLink addPage = new AjaxLink("addPage")
+            {
+                @Override
+                public void onClick(AjaxRequestTarget target)
+                {
+                    metaDataModalWindow.setContent(new AddPagePanel(metaDataModalWindow.getContentId()));
+                    metaDataModalWindow.show(target);
+                }
+            };
+            add(addPage);
+            AjaxLink addLink = new AjaxLink("addLink")
+            {
+                @Override
+                public void onClick(AjaxRequestTarget target)
+                {
+                    metaDataModalWindow.setContent(new AddLinkPanel(metaDataModalWindow.getContentId()));
+                    metaDataModalWindow.show(target);
+                }
+            };
+            add(addLink);
+            addFolder.setVisibilityAllowed(true);
+            addPage.setVisibilityAllowed(true);
+            addLink.setVisibilityAllowed(true);
             SiteTreeNode node = getUserSelectedNode();
             if (node.getDocType() == SiteTreeNode.FileType.Folder)
             {
@@ -410,6 +410,9 @@
                 urlField.setVisible(false);
                 targetLabel.setVisible(false);
                 targetField.setVisible(false);
+                addFolder.setVisible(true);
+                addPage.setVisible(true);
+                addLink.setVisible(true);
             }
             else if (node.getDocType() == SiteTreeNode.FileType.Page)
             {
@@ -419,12 +422,15 @@
                 urlField.setVisible(false);
                 targetLabel.setVisible(false);
                 targetField.setVisible(false);
+                addFolder.setVisible(false);
+                addPage.setVisible(false);
+                addLink.setVisible(false);
             }
             else if (node.getDocType() == SiteTreeNode.FileType.Link)
             {
                 defaultPageLabel.setVisible(false);
                 defaultPageField.setVisible(false);
-                targetLabel.setVisible(false);
+                targetLabel.setVisible(true);
                 defaultPageField.setVisible(false);
                 pageDecoratorLabel.setVisible(false);
                 decoratorsList.setVisible(false);
@@ -432,6 +438,9 @@
                 portletDecoratorsList.setVisible(false);
                 themeField.setVisible(false);
                 themeLabel.setVisible(false);
+                addFolder.setVisible(false);
+                addPage.setVisible(false);
+                addLink.setVisible(false);
             }
             infoForm.add(new AjaxButton("view", infoForm)
             {
@@ -447,6 +456,11 @@
                 protected void onSubmit(AjaxRequestTarget target, Form form)
                 {
                     excuteAction(getDocument(), "remove");
+                    DefaultMutableTreeNode node = getSelectedNode();
+                    DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) node.getParent();
+                    parentNode.remove(node);
+                    LinkTree tree = (PortalTree) getPage().get("siteTree");
+                    tree.updateTree(target);
                 }
             }.add(new JavascriptEventConfirmation("onclick", "are you sure?")));
             infoForm.add(new AjaxButton("save", infoForm)
@@ -458,10 +472,25 @@
                 }
             });
             add(infoForm);
+            add(new AjaxButton("copy", infoForm)
+            {
+                @Override
+                protected void onSubmit(AjaxRequestTarget target, Form form)
+                {
+                    // TODO
+                }
+            });
+            add(new AjaxButton("move", infoForm)
+            {
+                @Override
+                protected void onSubmit(AjaxRequestTarget target, Form form)
+                {
+                    // TODO
+                }
+            });
         }
     }
 
-   
     protected class SecurityTab extends BasePanel
     {
         private static final long serialVersionUID = 7948533482848224251L;
@@ -485,7 +514,7 @@
                         @Override
                         public void onClick(AjaxRequestTarget target)
                         {
-                            metaDataModalWindow.setContent(new SecurityTabWindowPanel(metaDataModalWindow.getContentId(), constraints,ajaxPanel));
+                            metaDataModalWindow.setContent(new SecurityTabWindowPanel(metaDataModalWindow.getContentId(), constraints, ajaxPanel));
                             metaDataModalWindow.show(target);
                             target.addComponent(ajaxPanel);
                         }
@@ -506,7 +535,7 @@
                 @Override
                 public void onClick(AjaxRequestTarget target)
                 {
-                    metaDataModalWindow.setContent(new SecurityTabWindowPanel(metaDataModalWindow.getContentId(), "",ajaxPanel));
+                    metaDataModalWindow.setContent(new SecurityTabWindowPanel(metaDataModalWindow.getContentId(), "", ajaxPanel));
                     metaDataModalWindow.show(target);
                 }
             });
@@ -617,18 +646,221 @@
         }
     }
 
+    protected class OptionsWindow extends WindowPanel
+    {
+        private static final long serialVersionUID = -3223669376958653554L;
+        private MenuOptionsDefinition optionsDefinition;
+
+        /**
+         * @return the optionsDefinition
+         */
+        public MenuOptionsDefinition getOptionsDefinition()
+        {
+            return optionsDefinition;
+        }
+
+        /**
+         * @param optionsDefinition
+         *            the optionsDefinition to set
+         */
+        public void setOptionsDefinition(MenuOptionsDefinition optionsDefinition)
+        {
+            this.optionsDefinition = optionsDefinition;
+        }
+
+        public OptionsWindow(String id, MenuDefinition definition, MenuOptionsDefinition options, final WebMarkupContainer markUp)
+        {
+            super(id);
+            this.optionsDefinition = (MenuOptionsDefinition) copyMenuElement(getNodeType(), options);
+            final MenuOptionsDefinition optionDef = options;
+            final MenuDefinition def = definition;
+            final Form menuform = new Form("menuForm");
+            menuform.add(new TextField("optionsField", new PropertyModel(this, "optionsDefinition.options")));
+            menuform.add(new TextField("depthField", new PropertyModel(this, "optionsDefinition.depth")));
+            menuform.add(new CheckBox("pathField", new PropertyModel(this, "optionsDefinition.paths")));
+            menuform.add(new CheckBox("regExpField", new PropertyModel(this, "optionsDefinition.regexp")));
+            menuform.add(new TextField("profileField", new PropertyModel(this, "optionsDefinition.profile")));
+            menuform.add(new TextField("skinField", new PropertyModel(this, "optionsDefinition.skin")));
+            menuform.add(new TextField("orderField", new PropertyModel(this, "optionsDefinition.order")));
+            menuform.add(new AjaxButton("save")
+            {
+                protected void onSubmit(AjaxRequestTarget target, Form menuform)
+                {
+                    menuActions(SAVE_ACTION, def, optionDef , getOptionsDefinition());
+                    ((ModalWindow) OptionsWindow.this.getParent()).close(target);
+                    target.addComponent(markUp);
+                }
+            });
+            add(menuform);
+        }
+    }
+
+    protected class IncludesWindow extends WindowPanel
+    {
+        private static final long serialVersionUID = -3223669376958653554L;
+        private MenuIncludeDefinition includes;
+
+        /**
+         * @return the includes
+         */
+        public MenuIncludeDefinition getIncludes()
+        {
+            return includes;
+        }
+
+        /**
+         * @param includes
+         *            the includes to set
+         */
+        public void setIncludes(MenuIncludeDefinition includes)
+        {
+            this.includes = includes;
+        }
+
+        public IncludesWindow(String id, MenuDefinition definition, MenuIncludeDefinition includes, final WebMarkupContainer markUp)
+        {
+            super(id);
+            this.includes = (MenuIncludeDefinition) copyMenuElement(getNodeType(), includes);
+            final MenuIncludeDefinition oldDef = includes;
+            final MenuDefinition menuDef = definition;
+            final Form menuform = new Form("menuForm");
+            menuform.add(new TextField("nameField", new PropertyModel(this, "includes.name")));
+            menuform.add(new CheckBox("nestField", new PropertyModel(this, "includes.nest")));
+            menuform.add(new AjaxButton("save")
+            {
+                @Override
+                protected void onSubmit(AjaxRequestTarget target, Form<?> form)
+                {
+                    menuActions(SAVE_ACTION, menuDef, oldDef,getIncludes());
+                    ((ModalWindow) IncludesWindow.this.getParent()).close(target);
+                    target.addComponent(markUp);
+                }
+            });
+            add(menuform);
+        }
+    }
+
+    protected class ExcludesWindow extends WindowPanel
+    {
+        private static final long serialVersionUID = -3223669376958653554L;
+        private MenuExcludeDefinition excludes;
+
+        /**
+         * @return the excludes
+         */
+        public MenuExcludeDefinition getExcludes()
+        {
+            return excludes;
+        }
+
+        /**
+         * @param excludes
+         *            the excludes to set
+         */
+        public void setExcludes(MenuExcludeDefinition excludes)
+        {
+            this.excludes = excludes;
+        }
+
+        public ExcludesWindow(String id, MenuDefinition definition, MenuExcludeDefinition excludes, final WebMarkupContainer markUp)
+        {
+            super(id);
+            this.excludes = (MenuExcludeDefinition) copyMenuElement(getNodeType(), excludes);;
+            final MenuExcludeDefinition oldDef =  excludes;
+            final MenuDefinition menuDef = definition;
+            final Form menuform = new Form("menuForm");
+            menuform.add(new TextField("nameField", new PropertyModel(this, "excludes.name")));
+            menuform.add(new AjaxButton("save")
+            {
+                @Override
+                protected void onSubmit(AjaxRequestTarget target, Form<?> form)
+                {
+                    menuActions(SAVE_ACTION, menuDef,  oldDef,getExcludes());
+                    ((ModalWindow) ExcludesWindow.this.getParent()).close(target);
+                    target.addComponent(markUp);
+                }
+            });
+            add(menuform);
+        }
+    }
+
+    protected class SeparatorWindow extends WindowPanel
+    {
+        private static final long serialVersionUID = -3223669376958653554L;
+        private MenuSeparatorDefinition separator;
+
+        /**
+         * @return the constraintName
+         */
+        public MenuSeparatorDefinition getSeparator()
+        {
+            return separator;
+        }
+
+        /**
+         * @param constraintName
+         *            the constraintName to set
+         */
+        public void setSeparator(MenuSeparatorDefinition constraintName)
+        {
+            this.separator = constraintName;
+        }
+
+        public SeparatorWindow(String id, final MenuDefinition definition, MenuSeparatorDefinition separator, final WebMarkupContainer markUp)
+        {
+            super(id);
+            this.separator = (MenuSeparatorDefinition) copyMenuElement(getNodeType(), separator);
+            final MenuSeparatorDefinition sepDef = separator;
+            Form separatorForm = new Form("separatorDataForm");
+            separatorForm.add(new TextField("separatorText", new PropertyModel(this, "separator.text")));
+            separatorForm.add(new TextField("separatorTitle", new PropertyModel(this, "separator.title")));
+            separatorForm.add(new AjaxButton("save", separatorForm)
+            {
+                @Override
+                protected void onSubmit(AjaxRequestTarget target, Form form)
+                {
+                     menuActions(SAVE_ACTION, definition, sepDef,getSeparator());
+                    ((ModalWindow) SeparatorWindow.this.getParent()).close(target);
+                    target.addComponent(markUp);
+                }
+            });
+            add(separatorForm);
+        }
+    }
+
     protected class ImportDataTab extends BasePanel
     {
         private static final long serialVersionUID = 3676403374892366510L;
-        boolean recursively;
+        private boolean recursively;
+        private FileUpload fileUpload;
+        private ExportJetspeedObject exportObject;
+
+        /**
+         * @return the fileUploadField
+         */
+        public FileUpload getFileUploadField()
+        {
+            return fileUpload;
+        }
+
+        /**
+         * @param fileUploadField
+         *            the fileUploadField to set
+         */
+        public void setFileUploadField(FileUpload fileUploadField)
+        {
+            this.fileUpload = fileUploadField;
+        }
 
         public ImportDataTab(String id, JetspeedDocument jetspeeeDoc)
         {
             super(id, jetspeeeDoc);
+            final PageManager castorPageManager = getCastorPageManager();
+            final PageManager pageManager = getPageManager();
             final SiteTreeNode node = getUserSelectedNode();
             Form exportForm = new Form("exportForm");
             Label exportLabel = new Label("exportName", "Export recursively");
-            CheckBox exportChkBox = new CheckBox("recursively", new PropertyModel(this, "recursively"));
+            CheckBox exportChkBox = new CheckBox("recursively", new PropertyModel(this, "exportObject.recursively"));
             Label exporNameLabel = new Label("expLabel", "Export Object");
             TextField exportName = new TextField("expName", new PropertyModel(this, "document.name"));
             exportLabel.setVisibilityAllowed(true);
@@ -642,24 +874,119 @@
             exportForm.add(exportName);
             exportForm.add(exportLabel);
             exportForm.add(exportChkBox);
-            final ExternalLink ajaxDownlodLink = new ExternalLink("downLoad", "http://www.msn.com");
-            ajaxDownlodLink.setVisibilityAllowed(true);
-            ajaxDownlodLink.setVisible(false);
-            ajaxDownlodLink.setOutputMarkupId(true);
-            exportForm.add(ajaxDownlodLink);
-            AjaxButton exportButton = new AjaxButton("exprtButton", exportForm)
+            exportObject = new ExportJetspeedObject(node, getPortletRequest().getUserPrincipal().getName(), false);
+            DynamicResourceLink exportButton = new DynamicResourceLink("exprtButton", new PropertyModel(this, "exportObject"))
             {
                 @Override
-                protected void onSubmit(AjaxRequestTarget target, Form<?> form)
+                public void onClick()
                 {
-                    String link = ExportObject(node, recursively, getPortletRequest().getUserPrincipal().getName());
-                    ajaxDownlodLink.setDefaultModelObject("http://www.yahoo.com" + link);
-                    ajaxDownlodLink.setVisible(true);
-                    target.addComponent(ajaxDownlodLink);
+                    setModelObject(new ExportJetspeedObject(node, getPortletRequest().getUserPrincipal().getName(), recursively));
                 }
             };
             exportForm.add(exportButton);
             add(exportForm);
+            // Adding Upload form Folder
+            Form uploadForm = new Form("uploadForm");
+            add(uploadForm);
+            uploadForm.setVisibilityAllowed(true);
+            uploadForm.setVisible(false);
+            if (node.getDocType().equals(FileType.Folder))
+            {
+                uploadForm.setMultiPart(true);
+                // Add one file input field
+                uploadForm.add(new FileUploadField("fileInput", new PropertyModel(this, "fileUploadField")));
+                uploadForm.add(new Button("uploadFile")
+                {
+                    /*
+                     * (non-Javadoc)
+                     * @see org.apache.wicket.markup.html.form.Button#onSubmit()
+                     */
+                    @Override
+                    public void onSubmit()
+                    {
+                        final FileUpload upload = fileUpload;
+                        final String userName = getPortletRequest().getUserPrincipal().getName();
+                        String usrFolder;
+                        String fileType;
+                        String fileName;
+                        String pathSeparator = System.getProperty("file.separator");
+                        boolean success = false;
+                        if (upload != null)
+                        {
+                            try
+                            {
+                                InputStream docStream = upload.getInputStream();
+                                fileName = upload.getClientFileName();
+                                fileType = fileExt(upload.getClientFileName());
+                                cleanUserFolder(userName);
+                                usrFolder = getTempFolder(userName);
+                                String destPath = node.getNodePath();
+                                DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(usrFolder + pathSeparator +
+                                                                                                                          upload.getClientFileName())));
+                                boolean again = true;
+                                while (again)
+                                {
+                                    if (docStream.read() > -1)
+                                    {
+                                        out.writeByte(docStream.read());
+                                    }
+                                    else
+                                        again = false;
+                                }
+                                docStream.close();
+                                out.close();
+                                // File writed in temp folder
+                                if (fileType != null && !fileType.equals("") && fileName != null && !fileName.equals("") && destPath != null &&
+                                    !destPath.equals(""))
+                                {
+                                    // if "/" is path, then file separator will work, as root.
+                                    if (destPath.equals("/"))
+                                        destPath = "";
+                                    Folder folder = getCastorPageManager().getFolder(userName);
+                                    if (fileType.equalsIgnoreCase("psml"))
+                                    {
+                                        Page source = folder.getPage(fileName);
+                                        Page page = null;
+                                        if (pageManager.pageExists(destPath + pathSeparator + fileName))
+                                        {
+                                            pageManager.removePage(pageManager.getPage(destPath + pathSeparator + fileName));
+                                            page = pageManager.copyPage(source, destPath + pathSeparator + fileName);
+                                        }
+                                        page = pageManager.copyPage(source, destPath + pathSeparator + fileName);
+                                        pageManager.updatePage(page);
+                                        success = true;
+                                    }
+                                    else if (fileType.equalsIgnoreCase("link"))
+                                    {
+                                        Link source = folder.getLink(fileName);
+                                        Link link;
+                                        if (pageManager.linkExists(destPath + pathSeparator + fileName))
+                                        {
+                                            pageManager.removeLink(pageManager.getLink(destPath + pathSeparator + fileName));
+                                            link = pageManager.copyLink(source, destPath + pathSeparator + fileName);
+                                        }
+                                        link = pageManager.copyLink(source, destPath + pathSeparator + fileName);
+                                        pageManager.updateLink(link);
+                                        success = true;
+                                    }
+                                    else if (fileType.equalsIgnoreCase("zip"))
+                                    {
+                                        unzipfile(fileName, usrFolder + userName, pathSeparator);
+                                        folder = getCastorPageManager().getFolder(userName);
+                                        importFolders(pageManager, getCastorPageManager(), folder, userName, destPath);
+                                        success = true;
+                                    }
+                                }
+                            }
+                            catch (Exception e)
+                            {
+                                e.printStackTrace();
+                            }
+                        }
+                    }
+                });
+                uploadForm.setVisible(true);
+            }
         }
     }
 
@@ -700,66 +1027,723 @@
             add(metaDataForm);
         }
     }
-    private class BasePanel extends Panel
+
+    protected class DocumentOrderingTabPanel extends BasePanel
     {
-        private static final long serialVersionUID = -6442196391739061842L;
-        private JetspeedDocument document;
+        List<String> listChoice = new ArrayList<String>();
+        String orderedList = "";
 
-        public BasePanel(String id, JetspeedDocument jDoc)
+        public DocumentOrderingTabPanel(String id, JetspeedDocument document)
         {
-            super(id);
-            this.document = jDoc;
-            final FeedbackPanel feedback = new FeedbackPanel("feedback");
-            feedback.setOutputMarkupId(true);
-            add(feedback);
+            super(id, document);
+            getSubFoldersPage(getDocument());
+            Form documentOrdering = new Form("docuOrderingForm");
+            Label doucmentOrderLabel = new Label("doucmentOrderLabel", "Document ordering");
+            documentOrdering.add(doucmentOrderLabel);
+            final ListMultipleChoice documnetOrder = new ListMultipleChoice("docOrders", new PropertyModel(this, "listChoice"),
+                                                                            getDocument().getDocumentOrder());
+            final HiddenField pageOrder = new HiddenField("pageOrder", new PropertyModel(this, "orderedList"));
+            documentOrdering.add(documnetOrder);
+            documentOrdering.add(pageOrder);
+            documentOrdering.add(new AjaxButton("save", documentOrdering)
+            {
+                @Override
+                protected void onSubmit(AjaxRequestTarget target, Form form)
+                {
+                    metaOrderAction(getDocument(), getOrderedList());
+                }
+
+                @Override
+                protected IAjaxCallDecorator getAjaxCallDecorator()
+                {
+                    // TODO Auto-generated method stub
+                    return new AjaxPreprocessingCallDecorator(super.getAjaxCallDecorator())
+                    {
+                        private static final long serialVersionUID = 7495281332320552876L;
+
+                        @Override
+                        public CharSequence preDecorateScript(CharSequence script)
+                        {
+                            return "convertToString();" + script;
+                        }
+                    };
+                }
+            });
+            add(documentOrdering);
         }
 
-        public BasePanel(String id)
+        /**
+         * @return the orderedList
+         */
+        public String getOrderedList()
         {
-            super(id);
-            final FeedbackPanel feedback = new FeedbackPanel("feedback");
-            feedback.setOutputMarkupId(true);
-            add(feedback);
+            return orderedList;
         }
 
         /**
-         * @return the document
+         * @param orderedList
+         *            the orderedList to set
          */
-        public JetspeedDocument getDocument()
+        public void setOrderedList(String orderedList)
         {
-            if (PortalSiteManager.this.document != document)
-            {
-                document = PortalSiteManager.this.document;
-            }
-            return document;
+            this.orderedList = orderedList;
+        }
+
+        /**
+         * @return the listChoice
+         */
+        public List<String> getListChoice()
+        {
+            return listChoice;
+        }
+
+        /**
+         * @param listChoice
+         *            the listChoice to set
+         */
+        public void setListChoice(List<String> listChoice)
+        {
+            this.listChoice = listChoice;
         }
     }
-    
-    private class AddFolderPanel extends Panel
+
+    protected class MenuTabPanel extends BasePanel
     {
-        private JetspeedDocument document;
+        private DefaultTreeModel menuTreeRoot;
+        public MenuDefinition definition = null;
+        List<ITab> menuTabs = new ArrayList<ITab>();
 
-        public AddFolderPanel(String id)
+        public MenuTabPanel(String id, JetspeedDocument document)
         {
-            super(id);
-            document = new JetspeedDocument();
-            Form infoForm = new Form("newForm");
-            Label nameLabel = new Label("name", "Name");
-            TextField nameField = new TextField("nameField", new PropertyModel(this, "document.name"));
-            infoForm.add(nameLabel);
-            infoForm.add(nameField);
-            Label titleLabel = new Label("title", "Title");
-            TextField titleField = new TextField("titleField", new PropertyModel(this, "document.title"));
-            infoForm.add(titleLabel);
-            infoForm.add(titleField);
-            Label shortTitleLabel = new Label("shortTitle", "ShortTitle");
-            TextField shortTitleField = new TextField("shortTitleField", new PropertyModel(this, "document.shortTitle"));
-            infoForm.add(shortTitleField);
-            infoForm.add(shortTitleLabel);
-            infoForm.add(new AjaxLink("close")
+            super(id, document);
+            ITab tab = null;
+            DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("root");
+            rootNode.add(new DefaultMutableTreeNode(new MenuTreeNode("Menu")));
+            
+            // Adding menu tree node
+            menuTreeRoot = new DefaultTreeModel(rootNode);
+            controlMenuTabs(false);
+            final AjaxTabbedPanel menusTab = new AjaxTabbedPanel("menuTabs", menuTabs);
+            LinkTree menuTree = new LinkTree("menuTree", new PropertyModel(this, "menuTreeRoot"))
             {
                 @Override
-                public void onClick(AjaxRequestTarget target)
+                protected void onNodeLinkClicked(Object node, BaseTree tree, AjaxRequestTarget target)
+                {
+                    MenuTreeNode menuNode = (MenuTreeNode) ((DefaultMutableTreeNode) node).getUserObject();
+                    if(menuNode.getName()==null)
+                    {
+                        setMenuDefinition(menuNode.getDefinition());
+                        controlMenuTabs(true);
+                        menusTab.setSelectedTab(0);
+                        target.addComponent(menusTab);                        
+                    }
+                }
+            };
+            if(getNodeType().equals(FOLDER_NODE_TYPE)){
+                setMenuDefinition(getPageManager().newFolderMenuDefinition());
+            }else{
+                setMenuDefinition(getPageManager().newPageMenuDefinition());
+            }
+            getPageManager().newFolderMenuDefinition();
+            menusTab.setSelectedTab(0);
+            getMenus(getDocument(), rootNode);
+            menuTree.getTreeState().expandNode(rootNode);
+            menuTree.setRootLess(true);
+            add(menuTree);
+            AjaxLink addLink = new AjaxLink("newsave")
+            {
+                @Override
+                public void onClick(AjaxRequestTarget target)
+                {
+                    LinkTree linkTree = (LinkTree)getParent().get("menuTree");
+                    linkTree.getTreeState().getSelectedNodes();
+                    
+                }
+            };
+            addLink.setVisibilityAllowed(true);
+            addLink.setVisible(false);
+            add(addLink);
+            AjaxLink removeLink =new AjaxLink("remove"){
+                @Override
+                public void onClick(AjaxRequestTarget target)
+                {
+                    menuActions(REMOVE_ACTION, getMenuDefinition(),null);
+                    LinkTree linkTree = (LinkTree)getParent().get("menuTree");
+                }
+            };
+            removeLink.add(new JavascriptEventConfirmation("onclick", "are you sure?"));
+            
+            add(removeLink);
+            add(menusTab);
+        }
+
+        private void controlMenuTabs(final boolean nodeSelected)
+        {
+            ITab tab = null;
+            menuTabs.clear();
+            if (nodeSelected)
+            {
+                tab = new AbstractTab(new Model("Info"))
+                {
+                    public Panel getPanel(String panelId)
+                    {
+                        return new MenuInfoPanel(panelId, getDocument(), getMenuDefinition());
+                    }
+                };
+                menuTabs.add(tab);
+                tab = new AbstractTab(new Model("Options"))
+                {
+                    public Panel getPanel(String panelId)
+                    {
+                        return new MenuOptionsPanel(panelId, getDocument(), getMenuDefinition());
+                    }
+                };
+                menuTabs.add(tab);
+                tab = new AbstractTab(new Model("Separator"))
+                {
+                    public Panel getPanel(String panelId)
+                    {
+                        return new MenuSeparatorPanel(panelId, getDocument(), getMenuDefinition());
+                    }
+                };
+                menuTabs.add(tab);
+                tab = new AbstractTab(new Model("Includes"))
+                {
+                    public Panel getPanel(String panelId)
+                    {
+                        return new MenuIncludesPanel(panelId, getDocument(), getMenuDefinition());
+                    }
+                };
+                menuTabs.add(tab);
+                tab = new AbstractTab(new Model("Excludes"))
+                {
+                    public Panel getPanel(String panelId)
+                    {
+                        return new MenuExlcudesPanel(panelId, getDocument(), getMenuDefinition());
+                    }
+                };
+                menuTabs.add(tab);
+            }
+            else
+            {
+                tab = new AbstractTab(new Model("Info"))
+                {
+                    public Panel getPanel(String panelId)
+                    {
+                        return new MenuInfoPanel(panelId, getDocument(), getMenuDefinition());
+                    }
+                };
+                menuTabs.add(tab);
+            }
+        }
+    }
+
+    protected class MenuInfoPanel extends MenuBasePanel
+    {
+        private MenuDefinition menuDef;
+        MenuDefinition oldDef = null;
+        public MenuDefinition getMenuDef()
+        {
+            return menuDef;
+        }
+        public void setMenuDef(MenuDefinition menuDef)
+        {
+           this.menuDef=menuDef;
+        }
+   
+        public MenuInfoPanel(String id, JetspeedDocument document, MenuDefinition definition)
+        {
+            super(id,document,definition);
+            oldDef = (MenuDefinition) copyMenuElement(getNodeType(), definition);
+            this.menuDef = (MenuDefinition) copyMenuElement(getNodeType(), definition);
+            final WebMarkupContainer ajaxPanel  = new WebMarkupContainer("ajaxPanel");
+            ajaxPanel.setOutputMarkupId(true);            
+            Form menuform = new Form("menuForm");
+            TextField nameField = new TextField("nameField", new PropertyModel(this, "menuDef.name"));
+            nameField.add(StringValidator.minimumLength(1));
+            menuform.add(nameField);
+            TextField optionsField = new TextField("optionsField", new PropertyModel(this, "menuDef.options"));
+            menuform.add(optionsField);
+            TextField depthField = new TextField("depthField", new PropertyModel(this, "menuDef.depth"));
+            menuform.add(depthField);
+            CheckBox pathField = new CheckBox("pathField", new PropertyModel(this, "menuDef.paths"));
+            menuform.add(pathField);
+            CheckBox regExpField = new CheckBox("regExpField", new PropertyModel(this, "menuDef.regexp"));
+            menuform.add(regExpField);
+            TextField profileField = new TextField("profileField", new PropertyModel(this, "menuDef.profile"));
+            menuform.add(profileField);
+            TextField titleField = new TextField("titleField", new PropertyModel(this, "menuDef.title"));
+            menuform.add(titleField);
+            TextField skinField = new TextField("skinField", new PropertyModel(this, "menuDef.skin"));
+            menuform.add(skinField);
+            TextField orderField = new TextField("orderField", new PropertyModel(this, "menuDef.order"));
+            menuform.add(orderField);           
+            AjaxButton saveButton =  new AjaxButton("save")
+            
+            {
+                @Override
+                protected void onSubmit(AjaxRequestTarget target, Form<?> form)
+                {
+                    menuActions(SAVE_ACTION, oldDef,getMenuDef());
+                    oldDef = (MenuDefinition) copyMenuElement(getNodeType(), getMenuDef());
+                    target.addComponent(ajaxPanel);
+                }
+            };
+            menuform.add(saveButton);
+            ajaxPanel.add(menuform);
+            add(ajaxPanel);
+        }
+    }
+
+    protected class MenuSeparatorPanel extends MenuBasePanel
+    {
+        public MenuSeparatorPanel(String id, JetspeedDocument document, MenuDefinition definition)
+        {
+            super(id,document,definition);
+            final ModalWindow metaDataModalWindow;
+            getMenuElements(definition, MenuElement.SEPARATOR_ELEMENT_TYPE);
+            final MenuDefinition def = (MenuDefinition) copyMenuElement(getNodeType(), definition);
+            add(metaDataModalWindow = new ModalWindow("modalwindow"));
+            final WebMarkupContainer ajaxPanel = new WebMarkupContainer("basePanel");
+            ajaxPanel.setOutputMarkupId(true);
+            ajaxPanel.add(new ListView("separator", new PropertyModel(this, "menuOptions"))
+            {
+                public void populateItem(final ListItem listItem)
+                {
+                    final MenuSeparatorDefinition separator = (MenuSeparatorDefinition) listItem.getModelObject();
+                    listItem.add(new Label("text", separator.getText()));
+                    listItem.add(new Label("title", separator.getTitle()));
+                    listItem.add(new AjaxLink("edit")
+                    {
+                        @Override
+                        public void onClick(AjaxRequestTarget target)
+                        {
+                            metaDataModalWindow.setContent(new SeparatorWindow(metaDataModalWindow.getContentId(), def,separator,ajaxPanel));
+                            metaDataModalWindow.show(target);
+                        }
+                    });
+                    listItem.add(new AjaxLink("delete")
+                    {
+                        @Override
+                        public void onClick(AjaxRequestTarget target)
+                        {
+                            menuActions(REMOVE_ACTION, def,separator, null);
+                            target.addComponent(ajaxPanel);
+                        }
+                    }.add(new JavascriptEventConfirmation("onclick", "are you sure?")));
+                }
+            });
+            add(new AjaxLink("new")
+            {
+                @Override
+                public void onClick(AjaxRequestTarget target)
+                {
+                    MenuSeparatorDefinition separatorDefinition = null;
+                    if (getUserSelectedNode().getDocType() == FileType.Folder)
+                    {
+                        separatorDefinition = getPageManager().newFolderMenuSeparatorDefinition();
+                    }
+                    else
+                    {
+                        separatorDefinition = getPageManager().newPageMenuSeparatorDefinition();
+                    }
+                    metaDataModalWindow.setContent(new SeparatorWindow(metaDataModalWindow.getContentId(), def, separatorDefinition, ajaxPanel));
+                    metaDataModalWindow.show(target);
+                }
+            });
+            add(ajaxPanel);
+        }
+    }
+
+    protected class MenuExlcudesPanel extends MenuBasePanel
+    {
+        public MenuExlcudesPanel(String id, JetspeedDocument document, MenuDefinition definition)
+        {
+            super(id,document,definition);
+            getMenuElements(definition, EXCLUDES);
+            final ModalWindow metaDataModalWindow;
+            final MenuDefinition def = (MenuDefinition) copyMenuElement(getNodeType(), definition);
+            add(metaDataModalWindow = new ModalWindow("modalwindow"));
+            final WebMarkupContainer ajaxPanel = new WebMarkupContainer("basePanel");
+            ajaxPanel.setOutputMarkupId(true);
+            ajaxPanel.add(new ListView("menuData", new PropertyModel(this, "menuOptions"))
+            {
+                public void populateItem(final ListItem listItem)
+                {
+                    final MenuExcludeDefinition option = (MenuExcludeDefinition) listItem.getModelObject();
+                    listItem.add(new Label("name", option.getName())); 
+                    listItem.add(new AjaxLink("edit")
+                    {
+                        @Override
+                        public void onClick(AjaxRequestTarget target)
+                        {
+                           metaDataModalWindow.setContent(new ExcludesWindow(metaDataModalWindow.getContentId(), def, option, ajaxPanel));
+                            metaDataModalWindow.show(target);
+                        }
+                    });
+                    listItem.add(new AjaxLink("delete")
+                    {
+                        @Override
+                        public void onClick(AjaxRequestTarget target)
+                        {
+                            menuActions(REMOVE_ACTION,def, option, null);
+                            target.addComponent(ajaxPanel);
+                        }
+                    }.add(new JavascriptEventConfirmation("onclick", "are you sure?")));
+                }
+            });
+            add(new AjaxLink("new")
+            {
+                @Override
+                public void onClick(AjaxRequestTarget target)
+                {
+                    MenuExcludeDefinition excludeDefinition = null;
+                    if (getUserSelectedNode().getDocType() == FileType.Folder)
+                    {
+                        excludeDefinition = getPageManager().newFolderMenuExcludeDefinition();
+                    }
+                    else
+                    {
+                        excludeDefinition = getPageManager().newPageMenuExcludeDefinition();
+                    }
+                    metaDataModalWindow.setContent(new ExcludesWindow(metaDataModalWindow.getContentId(), def, excludeDefinition, ajaxPanel));
+                    metaDataModalWindow.show(target);
+                }
+            });
+            add(ajaxPanel);
+        }
+    }
+
+    protected class MenuIncludesPanel extends MenuBasePanel
+    {
+        public MenuIncludesPanel(String id, JetspeedDocument document, MenuDefinition definition)
+        {
+            super(id,document,definition);
+            getMenuElements(definition, INCLUDES);
+            final ModalWindow metaDataModalWindow;
+            add(metaDataModalWindow = new ModalWindow("modalwindow"));
+            final MenuDefinition def = (MenuDefinition) copyMenuElement(getNodeType(), definition);
+            final WebMarkupContainer ajaxPanel = new WebMarkupContainer("basePanel");
+            ajaxPanel.setOutputMarkupId(true);
+            ajaxPanel.add(new ListView("menuData", new PropertyModel(this, "menuOptions"))
+            {
+                public void populateItem(final ListItem listItem)
+                {
+                    final MenuIncludeDefinition option = (MenuIncludeDefinition) listItem.getModelObject();
+                    listItem.add(new Label("name", option.getName()));
+                    listItem.add(new Label("nest", Boolean.toString(option.isNest())));
+                    listItem.add(new AjaxLink("edit")
+                    {
+                        @Override
+                        public void onClick(AjaxRequestTarget target)
+                        {
+                            metaDataModalWindow.setContent(new IncludesWindow(metaDataModalWindow.getContentId(), def,
+                                                                               option, ajaxPanel));
+                            metaDataModalWindow.show(target);
+                            target.addComponent(ajaxPanel);
+                        }
+                    });
+                    listItem.add(new AjaxLink("delete")
+                    {
+                        @Override
+                        public void onClick(AjaxRequestTarget target)
+                        {
+                           menuActions(REMOVE_ACTION,def,option,null);
+                            target.addComponent(ajaxPanel);
+                        }
+                    }.add(new JavascriptEventConfirmation("onclick", "are you sure?")));
+                }
+            });
+            add(new AjaxLink("new")
+            {
+                @Override
+                public void onClick(AjaxRequestTarget target)
+                {
+                    MenuIncludeDefinition includeDefinition = null;
+                    if (getUserSelectedNode().getDocType() == FileType.Folder)
+                    {
+                        includeDefinition = getPageManager().newFolderMenuIncludeDefinition();
+                    }
+                    else
+                    {
+                        includeDefinition = getPageManager().newPageMenuIncludeDefinition();
+                    }
+                    metaDataModalWindow.setContent(new IncludesWindow(metaDataModalWindow.getContentId(), def, includeDefinition, ajaxPanel));
+                    metaDataModalWindow.show(target);
+                }
+            });
+            add(ajaxPanel);
+        }
+    }
+
+    protected class MenuOptionsPanel extends MenuBasePanel
+    {
+        
+        public MenuOptionsPanel(String id, JetspeedDocument document, MenuDefinition definition)
+        {
+            super(id,document,definition);
+            getMenuElements(definition, MenuElement.OPTION_ELEMENT_TYPE);
+            final ModalWindow metaDataModalWindow;
+            final MenuDefinition def = (MenuDefinition) copyMenuElement(getNodeType(), definition);
+            add(metaDataModalWindow = new ModalWindow("modalwindow"));
+            final WebMarkupContainer ajaxPanel = new WebMarkupContainer("basePanel");
+            ajaxPanel.setOutputMarkupId(true);
+            ajaxPanel.add(new ListView("menuData", new PropertyModel(this, "menuOptions"))
+            {
+                public void populateItem(final ListItem listItem)
+                {
+                    final MenuOptionsDefinition option = (MenuOptionsDefinition) listItem.getModelObject();
+                    listItem.add(new Label("option", option.getOptions()));
+                    listItem.add(new Label("order", option.getOrder()));
+                    listItem.add(new Label("path", Boolean.toString(option.isPaths())));
+                    listItem.add(new Label("regexp", Boolean.toString(option.isRegexp())));
+                    listItem.add(new AjaxLink("edit")
+                    {
+                        @Override
+                        public void onClick(AjaxRequestTarget target)
+                        {
+                            metaDataModalWindow.setContent(new OptionsWindow(metaDataModalWindow.getContentId(),def, option,ajaxPanel));
+                            metaDataModalWindow.show(target);
+                            target.addComponent(ajaxPanel);
+                        }
+                    });
+                    listItem.add(new AjaxLink("delete")
+                    {
+                        @Override
+                        public void onClick(AjaxRequestTarget target)
+                        {
+                            menuActions(REMOVE_ACTION,def, option,null);
+                            target.addComponent(ajaxPanel);
+                        }
+                    }.add(new JavascriptEventConfirmation("onclick", "are you sure?")));
+                }
+            });
+            add(new AjaxLink("new")
+            {
+                @Override
+                public void onClick(AjaxRequestTarget target)
+                {
+                    MenuOptionsDefinition optionDefinition = null;
+                    if (getUserSelectedNode().getDocType() == FileType.Folder)
+                    {
+                        optionDefinition = getPageManager().newFolderMenuOptionsDefinition();
+                    }
+                    else
+                    {
+                        optionDefinition = getPageManager().newPageMenuOptionsDefinition();
+                    }
+                    metaDataModalWindow.setContent(new OptionsWindow(metaDataModalWindow.getContentId(),def, optionDefinition,ajaxPanel ));
+                    metaDataModalWindow.show(target);
+                }
+            });
+            add(ajaxPanel);
+        }
+    }
+
+    private class BasePanel extends Panel
+    {
+        private static final long serialVersionUID = -6442196391739061842L;
+        private JetspeedDocument document;
+
+        public BasePanel(String id, JetspeedDocument jDoc)
+        {
+            super(id);
+            this.document = jDoc;
+            final FeedbackPanel feedback = new FeedbackPanel("feedback");
+            feedback.setOutputMarkupId(true);
+            add(feedback);
+        }
+
+        public BasePanel(String id)
+        {
+            super(id);
+            final FeedbackPanel feedback = new FeedbackPanel("feedback");
+            feedback.setOutputMarkupId(true);
+            add(feedback);
+        }
+
+        /**
+         * @return the document
+         */
+        public JetspeedDocument getDocument()
+        {
+            if (PortalSiteManager.this.document != document)
+            {
+                document = PortalSiteManager.this.document;
+            }
+            return document;
+        }
+    }
+
+    protected class ExportJetspeedObject implements ResourceProvider, Serializable
+    {
+        private SiteTreeNode node;
+        private boolean recursively;
+        private String userName;
+        private ExportObject exportObject;
+        private FileInputStream inputStream;
+
+        /**
+         * @param recursively
+         *            the recursively to set
+         */
+        public void setRecursively(boolean recursively)
+        {
+            this.recursively = recursively;
+        }
+
+        /**
+         * @param nodeName
+         * @param userName
+         * @param recursively
+         */
+        public ExportJetspeedObject(SiteTreeNode node, String userName, boolean recursively)
+        {
+            super();
+            this.node = node;
+            this.userName = userName;
+            this.recursively = recursively;
+        }
+
+        public void close()
+        {
+            try
+            {
+                inputStream.close();
+            }
+            catch (IOException e)
+            {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+        }
+
+        public String getContentType()
+        {
+            return exportObject.getContentType();
+        }
+
+        public long getLastModified()
+        {
+            return 0;
+        }
+
+        public long getLength()
+        {
+            // TODO Auto-generated method stub
+            return 0;
+        }
+
+        public String getName()
+        {
+            return "";
+        }
+
+        public InputStream getResource()
+        {
+            return inputStream;
+        }
+
+        public void open()
+        {
+            exportObject = exportJetspeedtObject(node, recursively, userName);
+            try
+            {
+                inputStream = new FileInputStream(exportObject.getFilePath());
+            }
+            catch (FileNotFoundException e)
+            {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+        }
+    }
+
+    protected class MenuBasePanel extends Panel
+    {
+        private static final long serialVersionUID = 1L;
+        private JetspeedDocument document;
+
+        public MenuBasePanel(String id, JetspeedDocument jDoc, MenuDefinition definition)
+        {
+            super(id);
+            this.document = jDoc;
+            setMenuDefinition(definition);
+        }
+
+        public MenuBasePanel(String id)
+        {
+            super(id);
+        }
+
+        /**
+         * @return the document
+         */
+        public JetspeedDocument getDocument()
+        {
+            if (PortalSiteManager.this.document != document)
+            {
+                document = PortalSiteManager.this.document;
+            }
+            return document;
+        }
+
+        /**
+         * @return the menuOptions
+         */
+        public List getMenuOptions()
+        {
+            return getMenuOption();
+        }
+
+        /**
+         * @param menuOptions
+         *            the menuOptions to set
+         */
+        public void setMenuOptions(List menuOptions)
+        {
+           setMenuOption(menuOptions);
+        }
+
+        
+    }
+    protected class WindowPanel extends Panel{
+        
+        public WindowPanel(String id)
+        {
+            super(id);
+        }
+    }
+    private class AddFolderPanel extends Panel
+    {
+        private JetspeedDocument document;
+
+        public AddFolderPanel(String id)
+        {
+            super(id);
+            final FeedbackPanel feedback = new FeedbackPanel("feedback");
+            feedback.setOutputMarkupId(true);
+            add(feedback);
+            document = new JetspeedDocument();
+            Form infoForm = new Form("newForm");
+            Label nameLabel = new Label("name", "Name");
+            TextField nameField = new TextField("nameField", new PropertyModel(this, "document.name"));
+            nameField.setRequired(true);
+            infoForm.add(nameLabel);
+            infoForm.add(nameField);
+            Label titleLabel = new Label("title", "Title");
+            TextField titleField = new TextField("titleField", new PropertyModel(this, "document.title"));
+            titleField.setRequired(true);
+            infoForm.add(titleLabel);
+            infoForm.add(titleField);
+            Label shortTitleLabel = new Label("shortTitle", "ShortTitle");
+            TextField shortTitleField = new TextField("shortTitleField", new PropertyModel(this, "document.shortTitle"));
+            infoForm.add(shortTitleField);
+            infoForm.add(shortTitleLabel);
+            infoForm.add(new AjaxLink("close")
+            {
+                @Override
+                public void onClick(AjaxRequestTarget target)
                 {
                     ((ModalWindow) AddFolderPanel.this.getParent()).close(target);
                 }
@@ -778,6 +1762,9 @@
                     {
                         getPageManager().updateFolder(folder);
                         node.insert(new DefaultMutableTreeNode(new SiteTreeNode(folder)), 0);
+                        LinkTree tree = (PortalTree) getPage().get("siteTree");
+                        tree.getTreeState().expandNode(node);
+                        tree.updateTree(target);
                     }
                     catch (FolderNotUpdatedException e)
                     {
@@ -791,6 +1778,12 @@
                     }
                     ((ModalWindow) AddFolderPanel.this.getParent()).close(target);
                 }
+
+                @Override
+                protected void onError(AjaxRequestTarget target, Form<?> form)
+                {
+                    target.addComponent(feedback);
+                }
             });
             add(infoForm);
         }
@@ -798,21 +1791,226 @@
 
     private class AddPagePanel extends Panel
     {
+        private JetspeedDocument document;
+
         public AddPagePanel(String id)
         {
             super(id);
+            final FeedbackPanel feedback = new FeedbackPanel("feedback");
+            feedback.setOutputMarkupId(true);
+            add(feedback);
+            document = new JetspeedDocument();
+            Form infoForm = new Form("newForm");
+            Label nameLabel = new Label("name", "Name");
+            TextField nameField = new TextField("nameField", new PropertyModel(this, "document.name"));
+            nameField.setRequired(true);
+            infoForm.add(nameLabel);
+            infoForm.add(nameField);
+            Label titleLabel = new Label("title", "Title");
+            TextField titleField = new TextField("titleField", new PropertyModel(this, "document.title"));
+            titleField.setRedirect(true);
+            infoForm.add(titleLabel);
+            infoForm.add(titleField);
+            Label shortTitleLabel = new Label("shortTitle", "ShortTitle");
+            TextField shortTitleField = new TextField("shortTitleField", new PropertyModel(this, "document.shortTitle"));
+            infoForm.add(shortTitleField);
+            infoForm.add(shortTitleLabel);
+            Label pageDecoratorLabel = new Label("pageDecorator", "Page Decorator");
+            DropDownChoice decoratorsList = new DropDownChoice("decoratorsList", new PropertyModel(this, "document.pageDecorator"), getPageDecorators());
+            infoForm.add(decoratorsList);
+            infoForm.add(pageDecoratorLabel);
+            Label portletDecoratorLabel = new Label("portletDecorator", "Portlet Decorator");
+            DropDownChoice portletDecoratorsList = new DropDownChoice("portletDecoratorsList", new PropertyModel(this, "document.portletDecorator"),
+                                                                      getPortletDecorators());
+            infoForm.add(portletDecoratorLabel);
+            infoForm.add(portletDecoratorsList);
+            Label themeLabel = new Label("theme", "Theme");
+            DropDownChoice themeField = new DropDownChoice("themeList", new PropertyModel(this, "document.desktopTheme"), getThemes());
+            infoForm.add(themeField);
+            infoForm.add(themeLabel);
+            Label visibleLabel = new Label("visible", "Hidden");
+            CheckBox visibleCheckbox = new CheckBox("visibleCheck", new PropertyModel(this, "document.hidden"));
+            infoForm.add(visibleLabel);
+            infoForm.add(visibleCheckbox);
+            infoForm.add(new AjaxLink("close")
+            {
+                @Override
+                public void onClick(AjaxRequestTarget target)
+                {
+                    ((ModalWindow) AddPagePanel.this.getParent()).close(target);
+                }
+            });
+            infoForm.add(new AjaxButton("new")
+            {
+                @Override
+                protected void onSubmit(AjaxRequestTarget target, Form<?> form)
+                {
+                    SiteTreeNode treeNode = getUserSelectedNode();
+                    DefaultMutableTreeNode node = getSelectedNode();
+                    Page page = getPageManager().newPage(treeNode.getNodePath() + "/" + document.getName() + ".psml");
+                    page.setTitle(document.getTitle());
+                    page.setShortTitle(document.getShortTitle());
+                    page.setDefaultDecorator(document.getPageDecorator(), Fragment.LAYOUT);
+                    page.setDefaultDecorator(document.getPortletDecorator(), Fragment.PORTLET);
+                    page.setSkin(document.getDesktopTheme());
+                    page.setHidden(document.isHidden());
+                    try
+                    {
+                        getPageManager().updatePage(page);
+                        node.insert(new DefaultMutableTreeNode(new SiteTreeNode(page)), 0);
+                        LinkTree tree = (PortalTree) getPage().get("siteTree");
+                        tree.getTreeState().expandNode(node);
+                        tree.updateTree(target);
+                    }
+                    catch (PageNotUpdatedException e)
+                    {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    }
+                    catch (NodeException e)
+                    {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    }
+                    ((ModalWindow) AddPagePanel.this.getParent()).close(target);
+                }
+
+                @Override
+                protected void onError(AjaxRequestTarget target, Form<?> form)
+                {
+                    target.addComponent(feedback);
+                }
+            });
+            add(infoForm);
         }
     }
 
     private class AddLinkPanel extends Panel
     {
+        private JetspeedDocument document;
+
         public AddLinkPanel(String id)
         {
             super(id);
+            final FeedbackPanel feedback = new FeedbackPanel("feedback");
+            feedback.setOutputMarkupId(true);
+            add(feedback);
+            document = new JetspeedDocument();
+            Form infoForm = new Form("newForm");
+            Label nameLabel = new Label("name", "Name");
+            TextField nameField = new TextField("nameField", new PropertyModel(this, "document.name"));
+            nameField.setRequired(true);
+            infoForm.add(nameLabel);
+            infoForm.add(nameField);
+            Label titleLabel = new Label("title", "Title");
+            TextField titleField = new TextField("titleField", new PropertyModel(this, "document.title"));
+            infoForm.add(titleLabel);
+            infoForm.add(titleField);
+            Label shortTitleLabel = new Label("shortTitle", "ShortTitle");
+            TextField shortTitleField = new TextField("shortTitleField", new PropertyModel(this, "document.shortTitle"));
+            infoForm.add(shortTitleField);
+            infoForm.add(shortTitleLabel);
+            Label urlLabel = new Label("urlLabel", "URL");
+            TextField urlField = new TextField("urlField", new PropertyModel(this, "document.url"));
+            urlField.setRequired(true);
+            infoForm.add(urlLabel);
+            infoForm.add(urlField);
+            Label targetLabel = new Label("targetLabel", "Target Window");
+            DropDownChoice targetField = new DropDownChoice("target", new PropertyModel(this, "document.target"), getTargetList());
+            infoForm.add(targetLabel);
+            infoForm.add(targetField);
+            Label visibleLabel = new Label("visible", "Hidden");
+            CheckBox visibleCheckbox = new CheckBox("visibleCheck", new PropertyModel(this, "document.hidden"));
+            infoForm.add(visibleLabel);
+            infoForm.add(visibleCheckbox);
+            infoForm.add(new AjaxLink("close")
+            {
+                @Override
+                public void onClick(AjaxRequestTarget target)
+                {
+                    ((ModalWindow) AddLinkPanel.this.getParent()).close(target);
+                }
+            });
+            infoForm.add(new AjaxButton("new")
+            {
+                @Override
+                protected void onSubmit(AjaxRequestTarget target, Form<?> form)
+                {
+                    SiteTreeNode treeNode = getUserSelectedNode();
+                    DefaultMutableTreeNode node = getSelectedNode();
+                    Link link = getPageManager().newLink(treeNode.getNodePath() + "/" + document.getName() + ".link");
+                    link.setTitle(document.getTitle());
+                    link.setShortTitle(document.getShortTitle());
+                    link.setUrl(document.getUrl());
+                    link.setTarget(document.getTarget());
+                    link.setHidden(document.isHidden());
+                    try
+                    {
+                        getPageManager().updateLink(link);
+                        node.insert(new DefaultMutableTreeNode(new SiteTreeNode(link)), 0);
+                        LinkTree tree = (PortalTree) getPage().get("siteTree");
+                        tree.getTreeState().expandNode(node);
+                        tree.updateTree(target);
+                    }
+                    catch (LinkNotUpdatedException e)
+                    {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    }
+                    catch (NodeException e)
+                    {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    }
+                    ((ModalWindow) AddLinkPanel.this.getParent()).close(target);
+                }
+
+                @Override
+                protected void onError(AjaxRequestTarget target, Form<?> form)
+                {
+                    target.addComponent(feedback);
+                }
+            });
+            add(infoForm);
+        }
+    }
+
+    private class ExportObject implements Serializable
+    {
+        private String filePath;
+        private String contentType;
+
+        /**
+         * @param filePath
+         * @param contentType
+         */
+        public ExportObject(String filePath, String contentType)
+        {
+            super();
+            this.filePath = filePath;
+            this.contentType = contentType;
+        }
+
+        /**
+         * @return the filePath
+         */
+        public String getFilePath()
+        {
+            return filePath;
+        }
+
+        /**
+         * @return the contentType
+         */
+        public String getContentType()
+        {
+            return contentType;
         }
     }
+
     protected void controlTabs()
     {
+        SiteTreeNode node = getUserSelectedNode();
         TabbedPanel tabs = (TabbedPanel) get("tabs");
         tabs.getTabs().clear();
         ITab tempTab;
@@ -840,6 +2038,28 @@
             }
         };
         tabs.getTabs().add(tempTab);
+        if (node.getDocType().equals(FileType.Folder))
+        {
+            tempTab = new AbstractTab(new Model("Document ordering"))
+            {
+                public Panel getPanel(String panelId)
+                {
+                    return new DocumentOrderingTabPanel(panelId, document);
+                }
+            };
+            tabs.getTabs().add(tempTab);
+        }
+        if (node.getDocType().equals(FileType.Folder) || node.getDocType().equals(FileType.Page))
+        {
+            tempTab = new AbstractTab(new Model("Menus"))
+            {
+                public Panel getPanel(String panelId)
+                {
+                    return new MenuTabPanel(panelId, document);
+                }
+            };
+            tabs.getTabs().add(tempTab);
+        }
         tempTab = new AbstractTab(new Model("Import/Export"))
         {
             public Panel getPanel(String panelId)
@@ -850,6 +2070,7 @@
         tabs.getTabs().add(tempTab);
         tabs.setSelectedTab(0);
     }
+
     protected void insertMetadata(JetspeedDocumentMetaData metaData, Node node)
     {
         Locale locale = new Locale(metaData.getLanguage());
@@ -1034,7 +2255,6 @@
         }
     }
 
-   
     /**
      * @return the userFolder
      */
@@ -1052,7 +2272,6 @@
         this.userFolder = userFolder;
     }
 
-   
     protected String determineRootFolder(RenderRequest request)
     {
         String jsroot = request.getParameter(JSROOT);
@@ -1075,7 +2294,7 @@
     {
         try
         {
-            Folder folder = pageManager.getFolder(root);
+            Folder folder = getPageManager().getFolder(root);
             return folder;
         }
         catch (Exception e)
@@ -1139,6 +2358,7 @@
             // TODO: handle exception
         }
     }
+
     private void metaDataAction(String action, JetspeedDocumentMetaData metaData, JetspeedDocumentMetaData oldMetaData)
     {
         SiteTreeNode node = getUserSelectedNode();
@@ -1192,32 +2412,23 @@
             // TODO: handle exception
         }
     }
+
     private DefaultMutableTreeNode populateUserTree(String userName)
     {
-        // DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(new SiteTreeNode("ROOT", "/"));
-        // List list = new ArrayList<SiteTreeNode>();
-        // list.add(new SiteTreeNode("pages", "/pages"));
-        // list.add(new SiteTreeNode("_users", "/_users"));
-        // // rootNode.add(new DefaultMutableTreeNode(list));
-        // add(rootNode, list);
         DefaultMutableTreeNode rootNode = null;
         rootNode = retrieveFolders("/_user/" + userName, rootNode);
         treeRoot = new DefaultTreeModel(rootNode);
         return rootNode;
     }
+
     private DefaultMutableTreeNode populateTree()
     {
-        // DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(new SiteTreeNode("ROOT", "/"));
-        // List list = new ArrayList<SiteTreeNode>();
-        // list.add(new SiteTreeNode("pages", "/pages"));
-        // list.add(new SiteTreeNode("_users", "/_users"));
-        // // rootNode.add(new DefaultMutableTreeNode(list));
-        // add(rootNode, list);
         DefaultMutableTreeNode rootNode = null;
         rootNode = retrieveFolders("/", rootNode);
         treeRoot = new DefaultTreeModel(rootNode);
         return rootNode;
     }
+
     private DefaultMutableTreeNode retrieveFolders(String folderPath, DefaultMutableTreeNode rootNode)
     {
         try
@@ -1229,13 +2440,23 @@
             Folder rootfolder = getPageManager().getFolder(folderPath);
             if (rootNode == null)
             {
-                rootNode = new DefaultMutableTreeNode(new SiteTreeNode(rootfolder));
+                rootNode = new DefaultMutableTreeNode(new SiteTreeNode(rootfolder, true));
             }
             Iterator folders = rootfolder.getFolders().iterator();
             while (folders.hasNext())
             {
                 folder = (Folder) folders.next();
-                rootNode.add(new DefaultMutableTreeNode(new SiteTreeNode(folder)));
+                if (rootfolder.getPath().equals("/_user"))
+                {
+                    if (folder.getName().startsWith("template"))
+                    {
+                        rootNode.add(new DefaultMutableTreeNode(new SiteTreeNode(folder)));
+                    }
+                }
+                else
+                {
+                    rootNode.add(new DefaultMutableTreeNode(new SiteTreeNode(folder)));
+                }
             }
             Iterator pages = rootfolder.getPages().iterator();
             while (pages.hasNext())
@@ -1261,6 +2482,7 @@
         }
         return rootNode;
     }
+
     private List<String> getPortletDecorators()
     {
         if (portletDecorators == null)
@@ -1274,6 +2496,7 @@
         }
         return portletDecorators;
     }
+
     private List<String> getPageDecorators()
     {
         if (pageDecoraters == null)
@@ -1287,6 +2510,7 @@
         }
         return pageDecoraters;
     }
+
     private List<String> getThemes()
     {
         if (pageThemes == null)
@@ -1300,6 +2524,7 @@
         }
         return pageThemes;
     }
+
     private List<String> getTargetList()
     {
         if (targetList == null)
@@ -1312,6 +2537,7 @@
         }
         return targetList;
     }
+
     private List<String> getConstraintsDef()
     {
         if (constraintsDefs == null)
@@ -1332,6 +2558,7 @@
         }
         return constraintsDefs;
     }
+
     private void populateDocument(SiteTreeNode node)
     {
         try
@@ -1349,11 +2576,52 @@
                 document = new JetspeedDocument(getPageManager().getLink(node.getNodePath()));
             }
         }
-        catch (Exception e)
-        {
-            e.printStackTrace();
-        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    private void metaOrderAction(JetspeedDocument document, String choices)
+    {
+        SiteTreeNode node = getUserSelectedNode();
+        PageManager pageManger = getPageManager();
+        List<String> documentOrder = null;
+        if (node != null)
+        {
+            if (choices != null)
+            {
+                documentOrder = Arrays.asList(choices.split(","));
+            }
+            if (node.getDocType() == SiteTreeNode.FileType.Folder)
+            {
+                try
+                {
+                    Folder folder = pageManger.getFolder(node.getNodePath());
+                    {
+                        folder.setDocumentOrder(documentOrder);
+                        pageManger.updateFolder(folder);
+                    }
+                }
+                catch (FolderNotFoundException e)
+                {
+                    // TODO Auto-generated catch block
+                    e.printStackTrace();
+                }
+                catch (InvalidFolderException e)
+                {
+                    // TODO Auto-generated catch block
+                    e.printStackTrace();
+                }
+                catch (NodeException e)
+                {
+                    // TODO Auto-generated catch block
+                    e.printStackTrace();
+                }
+            }
+        }
     }
+
     private void excuteAction(JetspeedDocument document, String action)
     {
         SiteTreeNode node = getUserSelectedNode();
@@ -1471,6 +2739,7 @@
             }
         }
     }
+
     private String fileExt(String fileName)
     {
         int extIndex = fileName.lastIndexOf(".");
@@ -1481,10 +2750,12 @@
         return "";
     }
 
-    private String ExportObject(SiteTreeNode siteNode, boolean recursive, String userName)
+    private ExportObject exportJetspeedtObject(SiteTreeNode siteNode, boolean recursive, String userName)
     {
         String downloadPath = "";
+        String contentType = "text/xml";
         boolean success = true;
+        ExportObject jetspeedObject = null;
         String objectPath = siteNode.getNodePath();
         if (!cleanUserFolder(userName))
             success = false;
@@ -1525,24 +2796,28 @@
                 }
                 String link = userName + "_" + siteNode.getNodeName();
                 if (siteNode.getDocType() == SiteTreeNode.FileType.Folder)
+                {
+                    contentType = "application/zip";
                     link = userName + ".zip";
-                getServletRequest().getSession().setAttribute("file", link);
-                downloadPath = PortalSiteManagerUtil.getDownloadLink(getServletRequest(), siteNode.getNodeName(), userName, siteNode.getDocType().toString());
+                }
+                downloadPath = PortalSiteManagerUtil.getDownloadLink(siteNode.getNodeName(), userName, siteNode.getDocType().toString());
+                jetspeedObject = new ExportObject(downloadPath, contentType);
             }
             catch (Exception e)
             {
                 e.printStackTrace();
             }
         }
-        return downloadPath;
+        return jetspeedObject;
     }
-    private String getTempFolder(ActionRequest request)
+
+    private String getTempFolder(String userName)
     {
         String dir = System.getProperty("java.io.tmpdir");
         String path = System.getProperty("file.separator");
-        File file = new File(dir + path + request.getUserPrincipal());
+        File file = new File(dir + path + userName);
         file.mkdir();
-        return dir + path + request.getUserPrincipal();
+        return dir + path + userName;
     }
 
     private static final void copyInputStream(InputStream in, OutputStream out) throws IOException
@@ -1565,192 +2840,827 @@
             entries = zipFile.entries();
             while (entries.hasMoreElements())
             {
-                ZipEntry entry = (ZipEntry) entries.nextElement();
-                filePath = destination + sepreator + entry.getName();
-                createPath(filePath);
-                copyInputStream(zipFile.getInputStream(entry), new BufferedOutputStream(new FileOutputStream(filePath)));
+                ZipEntry entry = (ZipEntry) entries.nextElement();
+                filePath = destination + sepreator + entry.getName();
+                createPath(filePath);
+                copyInputStream(zipFile.getInputStream(entry), new BufferedOutputStream(new FileOutputStream(filePath)));
+            }
+            zipFile.close();
+            return true;
+        }
+        catch (IOException ioe)
+        {
+            ioe.printStackTrace();
+            return false;
+        }
+    }
+
+    private void createPath(String filePath)
+    {
+        String parentPath = "";
+        File file = new File(filePath);
+        File parent = new File(file.getParent());
+        if (!parent.exists())
+        {
+            parentPath = parent.getPath();
+            createPath(parentPath);
+            parent.mkdir();
+        }
+    }
+
+    private Folder importFolders(PageManager pageManager, PageManager castorPageManager, Folder srcFolder, String userName, String destination)
+                                                                                                                                               throws JetspeedException
+    {
+        Folder dstFolder = lookupFolder(castorPageManager, srcFolder.getPath());
+        dstFolder = pageManager.copyFolder(srcFolder, destination);
+        pageManager.updateFolder(dstFolder);
+        String newPath = "";
+        Iterator pages = srcFolder.getPages().iterator();
+        while (pages.hasNext())
+        {
+            Page srcPage = (Page) pages.next();
+            Page dstPage = lookupPage(castorPageManager, srcPage.getPath());
+            newPath = destination + getRealPath(srcPage.getPath());
+            dstPage = pageManager.copyPage(srcPage, newPath);
+            pageManager.updatePage(dstPage);
+        }
+        Iterator links = srcFolder.getLinks().iterator();
+        while (links.hasNext())
+        {
+            Link srcLink = (Link) links.next();
+            Link dstLink = lookupLink(castorPageManager, srcLink.getPath());
+            newPath = destination + getRealPath(srcLink.getPath());
+            dstLink = pageManager.copyLink(srcLink, newPath);
+            pageManager.updateLink(dstLink);
+        }
+        Iterator folders = srcFolder.getFolders().iterator();
+        while (folders.hasNext())
+        {
+            Folder folder = (Folder) folders.next();
+            newPath = destination + getRealPath(folder.getPath());
+            importFolders(pageManager, castorPageManager, folder, userName, newPath);
+        }
+        return dstFolder;
+    }
+
+    private Page lookupPage(PageManager castorPageManager, String path)
+    {
+        try
+        {
+            return castorPageManager.getPage(path);
+        }
+        catch (Exception e)
+        {
+            return null;
+        }
+    }
+
+    private Link lookupLink(PageManager castorPageManager, String path)
+    {
+        try
+        {
+            return castorPageManager.getLink(path);
+        }
+        catch (Exception e)
+        {
+            return null;
+        }
+    }
+
+    private Folder lookupFolder(PageManager castorPageManager, String path)
+    {
+        try
+        {
+            return castorPageManager.getFolder(path);
+        }
+        catch (Exception e)
+        {
+            return null;
+        }
+    }
+
+    private String getRealPath(String path)
+    {
+        int index = path.lastIndexOf("/");
+        if (index > 0)
+        {
+            return path.substring(index);
+        }
+        return path;
+    }
+
+    private boolean cleanUserFolder(String userName)
+    {
+        boolean success = false;
+        synchronized (this)
+        {
+            String tmpdir = System.getProperty("java.io.tmpdir");
+            String path = System.getProperty("file.separator");
+            String folder = tmpdir + path + userName;
+            File dir = new File(folder);
+            if (dir.exists())
+            {
+                success = deleteDir(dir);
+            }
+            success = dir.mkdir();
+        }
+        return success;
+    }
+
+    private boolean deleteDir(File dir)
+    {
+        if (dir.exists())
+        {
+            File[] files = dir.listFiles();
+            for (int i = 0; i < files.length; i++)
+            {
+                if (files[i].isDirectory())
+                {
+                    deleteDir(files[i]);
+                }
+                else
+                {
+                    files[i].delete();
+                }
+            }
+        }
+        return (dir.delete());
+    }
+
+    private DefaultMutableTreeNode getSelectedNode()
+    {
+        PortalTree tree = (PortalTree) getPage().get("siteTree");
+        Collection selectedNodes = tree.getTreeState().getSelectedNodes();
+        DefaultMutableTreeNode treeNode = null;
+        if (selectedNodes != null)
+        {
+            Iterator selectedNode = selectedNodes.iterator();
+            while (selectedNode.hasNext())
+            {
+                treeNode = (DefaultMutableTreeNode) selectedNode.next();
+                break;
+            }
+            if (treeNode == null)
+            {
+                treeNode = new DefaultMutableTreeNode(new SiteTreeNode("root", "/", FileType.Folder));
+            }
+        }

[... 768 lines stripped ...]


---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org