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/13 18:50:17 UTC

svn commit: r753325 - in /portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site: PortalSiteManager$MetaDataTab.html PortalSiteManager$SecurityTab.html PortalSiteManager.html PortalSiteManager.java

Author: vkumar
Date: Fri Mar 13 17:50:07 2009
New Revision: 753325

URL: http://svn.apache.org/viewvc?rev=753325&view=rev
Log:
New Feature & Bug fixes in portal site manager

1) Adding busy indicator
2) Updating meta tab with ajax
3) Updating security tab with ajax
4) Adding new meta data bug fix

Modified:
    portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager$MetaDataTab.html
    portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager$SecurityTab.html
    portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager.html
    portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager.java

Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager$MetaDataTab.html
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager%24MetaDataTab.html?rev=753325&r1=753324&r2=753325&view=diff
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager$MetaDataTab.html (original)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager$MetaDataTab.html Fri Mar 13 17:50:07 2009
@@ -20,39 +20,27 @@
 
 <html xmlns="http://www.w3.org/1999/xhtml">
 <wicket:panel>
-&nbsp;
-	<table>
-		<tr>
-			<td>
-			<div wicket:id="feedback"></div>
-			</td>
-		</tr>
-		<tr>
-			<td>
-			<table cellpadding="2">
+	&nbsp;
+	<div wicket:id="feedback"></div>
+	<span wicket:id="basePanel">
+		<table cellpadding="2">
 			<thead>
 				<tr>
-					<th class="portlet-section-header">Name</th>
-					<th class="portlet-section-header">Language</th>
-					<th class="portlet-section-header">Value</th>
+					<th class="portlet-section-header">Security Constraint</th>
+					<th class="portlet-section-header">Constraint Type</th>
+					<th>&nbsp;</th>
 					<th>&nbsp;</th>
-					<th>&nbsp;</th>						
 				</tr>
 			</thead>
-				<tr class="even" wicket:id="metaData">
-					<td><span wicket:id="name" /></td>
-					<td><span wicket:id="language" /></td>
-					<td><span wicket:id="value" /></td>
-					<td><a href wicket:id="edit" >Edit</a></td>
-					<td>&nbsp;<a href wicket:id="delete">Delete</a></td>
-				</tr>
-			</table>
-			</td>
-		</tr>
-		<tr>
-			<td><input type="button" wicket:id="new" value="New" /></td>
-		</tr>
-	</table>
-<div wicket:id="modalwindow"></div>
+			<tr class="even" wicket:id="metaData">
+				<td><span wicket:id="name" /></td>
+				<td><span wicket:id="type" /></td>
+				<td><a href="" wicket:id="edit">Edit</a></td>
+				<td>&nbsp;<a href="" wicket:id="delete">Delete</a></td>
+			</tr>
+		</table>
+	</span>
+	<input type="button" wicket:id="new" value="New" />
+	<div wicket:id="modalwindow">[modal window goes here]</div>	
 </wicket:panel>
 </html>
\ No newline at end of file

Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager$SecurityTab.html
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager%24SecurityTab.html?rev=753325&r1=753324&r2=753325&view=diff
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager$SecurityTab.html (original)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager$SecurityTab.html Fri Mar 13 17:50:07 2009
@@ -21,36 +21,26 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <wicket:panel>
 	&nbsp;
-	<table style="width:100%;">
-		<tr>
-			<td>
-			<div wicket:id="feedback"></div>
-			</td>
-		</tr>
-		<tr>
-			<td>
-			<table cellpadding="2">
-				<thead>
-					<tr>
-						<th class="portlet-section-header">Security Constraint</th>
-						<th class="portlet-section-header">Constraint Type</th>
-						<th>&nbsp;</th>
-						<th>&nbsp;</th>
-					</tr>
-				</thead>
-				<tr class="even" wicket:id="metaData">
-					<td><span wicket:id="name" /></td>
-					<td><span wicket:id="type" /></td>
-					<td><a href="" wicket:id="edit">Edit</a></td>
-					<td>&nbsp;<a href="" wicket:id="delete">Delete</a></td>
+	<div wicket:id="feedback"></div>
+	<span wicket:id="basePanel">
+		<table cellpadding="2">
+			<thead>
+				<tr>
+					<th class="portlet-section-header">Security Constraint</th>
+					<th class="portlet-section-header">Constraint Type</th>
+					<th>&nbsp;</th>
+					<th>&nbsp;</th>
 				</tr>
-			</table>
-			</td>
-		</tr>
-		<tr>
-			<td><input type="button" wicket:id="new" value="New" /></td>
-		</tr>
-	</table>
+			</thead>
+			<tr class="even" wicket:id="metaData">
+				<td><span wicket:id="name" /></td>
+				<td><span wicket:id="type" /></td>
+				<td><a href="" wicket:id="edit">Edit</a></td>
+				<td>&nbsp;<a href="" wicket:id="delete">Delete</a></td>
+			</tr>
+		</table>
+	</span>
+	<input type="button" wicket:id="new" value="New" />
 	<div wicket:id="modalwindow">[modal window goes here]</div>	
 </wicket:panel>
 </html>
\ No newline at end of file

Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager.html
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager.html?rev=753325&r1=753324&r2=753325&view=diff
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager.html (original)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager.html Fri Mar 13 17:50:07 2009
@@ -24,6 +24,17 @@
 table.wicket-tree-content {
 	width: 100%;
 }
+#bysy_indicator {
+  display: none;
+  float: right;
+  background: rgb(255,241,168);
+  margin-top: 5px;
+  z-index: 1000;
+  width: 200;
+  font-weight: bold;
+  text-align: center;
+  font-size: 1em;
+}
 </style>
 </wicket:head>
 <table>
@@ -69,4 +80,32 @@
 	</form>
 </table>
 <div wicket:id="modalwindow"></div>
+<div id="bysy_indicator">Loading ...</div>
+<script type="text/javascript">
+ window.onload = setupFunc;
+
+ function setupFunc() {
+   document.getElementsByTagName('body')[0].onclick = clickFunc;
+   hideBusysign();
+         Wicket.Ajax.registerPreCallHandler(showBusysign);
+         Wicket.Ajax.registerPostCallHandler(hideBusysign);
+         Wicket.Ajax.registerFailureHandler(hideBusysign);
+ }
+
+ function hideBusysign() {
+   document.getElementById('bysy_indicator').style.display ='none';
+ }
+
+ function showBusysign() {
+   document.getElementById('bysy_indicator').style.display ='inline';
+ }
+
+ function clickFunc(eventData) {
+   var clickedElement = (window.event) ? event.srcElement : eventData.target;
+   if (clickedElement.tagName.toUpperCase() == 'BUTTON' || clickedElement.tagName.toUpperCase() == 'A' || clickedElement.parentNode.tagName.toUpperCase() == 'A'
+     || (clickedElement.tagName.toUpperCase() == 'INPUT' && (clickedElement.type.toUpperCase() == 'BUTTON' || clickedElement.type.toUpperCase() == 'SUBMIT'))) {
+     showBusysign();
+   } 
+ }
+ </script>
 </html>
\ No newline at end of file

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=753325&r1=753324&r2=753325&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 13 17:50:07 2009
@@ -73,6 +73,7 @@
 import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
 import org.apache.wicket.extensions.markup.html.tabs.ITab;
 import org.apache.wicket.extensions.markup.html.tabs.TabbedPanel;
+import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Button;
 import org.apache.wicket.markup.html.form.CheckBox;
@@ -175,12 +176,14 @@
                     List<String> emptyList = Collections.emptyList();
                     return emptyList.iterator();
                 }
-                if(userNames.size()>10)
+                if (userNames.size() > 10)
+                {
+                    return userNames.subList(0, 10).iterator();
+                }
+                else
                 {
-                    return userNames.subList(0, 10).iterator();    
-                }else{
                     return userNames.iterator();
-                }               
+                }
             }
         });
         treeForm.add(new Button("userFolderButton")
@@ -341,223 +344,7 @@
         }
     }
 
-    protected String determineRootFolder(RenderRequest request)
-    {
-        String jsroot = request.getParameter(JSROOT);
-        if (jsroot == null || jsroot.equals(""))
-        {
-            jsroot = request.getPreferences().getValue("root", "/_user/" + request.getRemoteUser() + "/");
-        }
-        // this.getContext(request).put(JSROOT, jsroot);
-        return jsroot;
-    }
-
-    protected String determineuserTree(RenderRequest request)
-    {
-        String userTree;
-        userTree = request.getPreferences().getValue("displayUserTree", "false");
-        return userTree;
-    }
-
-    public Folder retrieveFolders(RenderRequest request, String root) throws PortletException
-    {
-        try
-        {
-            Folder folder = pageManager.getFolder(root);
-            return folder;
-        }
-        catch (Exception e)
-        {
-            // log.error("Failed to retrieve folders ", e);
-            e.printStackTrace();
-            throw new PortletException("Failed to get root folder");
-        }
-    }
-
-    private String fileExt(String fileName)
-    {
-        int extIndex = fileName.lastIndexOf(".");
-        if (extIndex > 0)
-        {
-            return fileName.substring(extIndex + 1, fileName.length());
-        }
-        return "";
-    }
-
-    private String getTempFolder(ActionRequest request)
-    {
-        String dir = System.getProperty("java.io.tmpdir");
-        String path = System.getProperty("file.separator");
-        File file = new File(dir + path + request.getUserPrincipal());
-        file.mkdir();
-        return dir + path + request.getUserPrincipal();
-    }
-
-    private static final void copyInputStream(InputStream in, OutputStream out) throws IOException
-    {
-        byte[] buffer = new byte[1024];
-        int len;
-        while ((len = in.read(buffer)) >= 0)
-            out.write(buffer, 0, len);
-        in.close();
-        out.close();
-    }
-
-    private boolean unzipfile(String file, String destination, String sepreator)
-    {
-        Enumeration entries;
-        String filePath = "";
-        try
-        {
-            ZipFile zipFile = new ZipFile(destination + sepreator + file);
-            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)));
-            }
-            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(Folder srcFolder, String userName, String destination) throws JetspeedException
-    {
-        Folder dstFolder = lookupFolder(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(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(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(folder, userName, newPath);
-        }
-        return dstFolder;
-    }
-
-    private Page lookupPage(String path)
-    {
-        try
-        {
-            return castorPageManager.getPage(path);
-        }
-        catch (Exception e)
-        {
-            return null;
-        }
-    }
-
-    private Link lookupLink(String path)
-    {
-        try
-        {
-            return castorPageManager.getLink(path);
-        }
-        catch (Exception e)
-        {
-            return null;
-        }
-    }
-
-    private Folder lookupFolder(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());
-    }
+    
 
     protected class InformationTab extends BasePanel
     {
@@ -674,59 +461,19 @@
         }
     }
 
-    private DefaultMutableTreeNode getSelectedNode()
+   
+    protected class SecurityTab extends BasePanel
     {
-        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;
-            }
-        }
-        return treeNode;
-    }
+        private static final long serialVersionUID = 7948533482848224251L;
 
-    private SiteTreeNode getUserSelectedNode()
-    {
-        SiteTreeNode nodeTree = null;
-        PortalTree tree = (PortalTree) getPage().get("siteTree");
-        Collection selectedNodes = tree.getTreeState().getSelectedNodes();
-        DefaultMutableTreeNode treeNode = null;
-        if (selectedNodes != null)
+        public SecurityTab(String id, JetspeedDocument document)
         {
-            Iterator selectedNode = selectedNodes.iterator();
-            while (selectedNode.hasNext())
-            {
-                treeNode = (DefaultMutableTreeNode) selectedNode.next();
-                break;
-            }
-            if (treeNode != null)
-            {
-                nodeTree = (SiteTreeNode) treeNode.getUserObject();
-            }
-            else
-            {
-                nodeTree = new SiteTreeNode("ROOT", "/", SiteTreeNode.FileType.Folder);
-            }
-        }
-        return nodeTree;
-    }
-
-    protected class SecurityTab extends BasePanel
-    {
-        private static final long serialVersionUID = 7948533482848224251L;
-
-        public SecurityTab(String id, JetspeedDocument document)
-        {
-            super(id, document);
-            final ModalWindow metaDataModalWindow;
-            add(metaDataModalWindow = new ModalWindow("modalwindow"));
-            add(new ListView("metaData", new PropertyModel(this, "document.securityConstraints"))
+            super(id, document);
+            final ModalWindow metaDataModalWindow;
+            add(metaDataModalWindow = new ModalWindow("modalwindow"));
+            final WebMarkupContainer ajaxPanel = new WebMarkupContainer("basePanel");
+            ajaxPanel.setOutputMarkupId(true);
+            ajaxPanel.add(new ListView("metaData", new PropertyModel(this, "document.securityConstraints"))
             {
                 public void populateItem(final ListItem listItem)
                 {
@@ -738,8 +485,9 @@
                         @Override
                         public void onClick(AjaxRequestTarget target)
                         {
-                            metaDataModalWindow.setContent(new SecurityTabWindowPanel(metaDataModalWindow.getContentId(), constraints));
+                            metaDataModalWindow.setContent(new SecurityTabWindowPanel(metaDataModalWindow.getContentId(), constraints,ajaxPanel));
                             metaDataModalWindow.show(target);
+                            target.addComponent(ajaxPanel);
                         }
                     });
                     listItem.add(new AjaxLink("delete")
@@ -748,6 +496,7 @@
                         public void onClick(AjaxRequestTarget target)
                         {
                             securityConstraintAction(REMOVE_ACTION, constraints, "");
+                            target.addComponent(ajaxPanel);
                         }
                     }.add(new JavascriptEventConfirmation("onclick", "are you sure?")));
                 }
@@ -757,10 +506,11 @@
                 @Override
                 public void onClick(AjaxRequestTarget target)
                 {
-                    metaDataModalWindow.setContent(new SecurityTabWindowPanel(metaDataModalWindow.getContentId(), ""));
+                    metaDataModalWindow.setContent(new SecurityTabWindowPanel(metaDataModalWindow.getContentId(), "",ajaxPanel));
                     metaDataModalWindow.show(target);
                 }
             });
+            add(ajaxPanel);
         }
     }
 
@@ -772,8 +522,9 @@
         {
             super(id, doc);
             final ModalWindow metaDataModalWindow;
+            final WebMarkupContainer ajaxPanel = new WebMarkupContainer("basePanel");
             add(metaDataModalWindow = new ModalWindow("modalwindow"));
-            ListView metaDataListView = new ListView("metaData", new PropertyModel(this, "document.metaData"))
+            final ListView metaDataListView = new ListView("metaData", new PropertyModel(this, "document.metaData"))
             {
                 private static final long serialVersionUID = 1L;
 
@@ -788,7 +539,7 @@
                         @Override
                         public void onClick(AjaxRequestTarget target)
                         {
-                            metaDataModalWindow.setContent(new MetaDataPanel(metaDataModalWindow.getContentId(), getDocument(), metaData));
+                            metaDataModalWindow.setContent(new MetaDataPanel(metaDataModalWindow.getContentId(), getDocument(), metaData, ajaxPanel));
                             metaDataModalWindow.show(target);
                         }
                     });
@@ -800,21 +551,25 @@
                         public void onClick(AjaxRequestTarget target)
                         {
                             metaDataAction(REMOVE_ACTION, metaData, null);
+                            target.addComponent(ajaxPanel);
                         }
                     }.add(new JavascriptEventConfirmation("onclick", "are you sure?")));
                 }
             };
-            add(metaDataListView);
+            metaDataListView.setOutputMarkupId(true);
+            ajaxPanel.setOutputMarkupId(true);
+            ajaxPanel.add(metaDataListView);
             add(new AjaxLink("new", new Model("New"))
             {
                 @Override
                 public void onClick(AjaxRequestTarget target)
                 {
                     metaDataModalWindow.setContent(new MetaDataPanel(metaDataModalWindow.getContentId(), getDocument(),
-                                                                     new JetspeedDocumentMetaData("", "", "")));
+                                                                     new JetspeedDocumentMetaData("", "", ""), ajaxPanel));
                     metaDataModalWindow.show(target);
                 }
             });
+            add(ajaxPanel);
         }
     }
 
@@ -840,7 +595,7 @@
             this.constraintName = constraintName;
         }
 
-        public SecurityTabWindowPanel(String id, String constrainName)
+        public SecurityTabWindowPanel(String id, final String constrainName, final WebMarkupContainer markUp)
         {
             super(id);
             this.constraintName = constrainName;
@@ -853,8 +608,9 @@
                 @Override
                 protected void onSubmit(AjaxRequestTarget target, Form form)
                 {
-                    securityConstraintAction(SAVE_ACTION, getConstraintName(), null);
+                    securityConstraintAction(SAVE_ACTION, getConstraintName(), constrainName);
                     ((ModalWindow) SecurityTabWindowPanel.this.getParent()).close(target);
+                    target.addComponent(markUp);
                 }
             });
             add(securityTabForm);
@@ -912,7 +668,7 @@
         private JetspeedDocumentMetaData metaData;
         private JetspeedDocumentMetaData oldMetaData;
 
-        public MetaDataPanel(String id, JetspeedDocument document, JetspeedDocumentMetaData jmetaData)
+        public MetaDataPanel(String id, JetspeedDocument document, JetspeedDocumentMetaData jmetaData, final WebMarkupContainer markup)
         {
             super(id, document);
             this.metaData = jmetaData;
@@ -938,118 +694,162 @@
                 {
                     metaDataAction(SAVE_ACTION, metaData, oldMetaData);
                     ((ModalWindow) MetaDataPanel.this.getParent()).close(target);
+                    target.addComponent(markup);
                 }
             });
             add(metaDataForm);
         }
     }
-
-    private void securityConstraintAction(String action, String constraint, String oldConstraintName)
+    private class BasePanel extends Panel
     {
-        SiteTreeNode node = getUserSelectedNode();
-        Node jetspeedNode = null;
-        PageManager pageManager = getPageManager();
-        try
+        private static final long serialVersionUID = -6442196391739061842L;
+        private JetspeedDocument document;
+
+        public BasePanel(String id, JetspeedDocument jDoc)
         {
-            if (node.getDocType() == SiteTreeNode.FileType.Folder)
+            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)
             {
-                jetspeedNode = (Node) pageManager.getFolder(node.getNodePath());
-                if (action.equals(ADD_ACTION) || action.equals(SAVE_ACTION))
-                {
-                    updateSecurityReference(constraint, oldConstraintName, "", jetspeedNode);
-                }
-                else if (action.equals(REMOVE_ACTION))
-                {
-                    removeSecurityReference(constraint, jetspeedNode);
-                }
-                pageManager.updateFolder((Folder) jetspeedNode);
+                document = PortalSiteManager.this.document;
             }
-            else if (node.getDocType() == SiteTreeNode.FileType.Page)
+            return document;
+        }
+    }
+    
+    private class AddFolderPanel extends Panel
+    {
+        private JetspeedDocument document;
+
+        public AddFolderPanel(String id)
+        {
+            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")
             {
-                jetspeedNode = (Node) getPageManager().getPage(node.getNodePath());
-                if (action.equals(ADD_ACTION) || action.equals(SAVE_ACTION))
-                {
-                    updateSecurityReference(constraint, oldConstraintName, "", jetspeedNode);
-                }
-                else if (action.equals(REMOVE_ACTION))
+                @Override
+                public void onClick(AjaxRequestTarget target)
                 {
-                    removeSecurityReference(constraint, jetspeedNode);
+                    ((ModalWindow) AddFolderPanel.this.getParent()).close(target);
                 }
-                pageManager.updatePage((Page) jetspeedNode);
-            }
-            else if (node.getDocType() == SiteTreeNode.FileType.Link)
+            });
+            infoForm.add(new AjaxButton("new")
             {
-                jetspeedNode = (Node) getPageManager().getLink(node.getNodePath());
-                if (action.equals(ADD_ACTION) || action.equals(SAVE_ACTION))
-                {
-                    updateSecurityReference(constraint, oldConstraintName, "", jetspeedNode);
-                }
-                else if (action.equals(REMOVE_ACTION))
+                @Override
+                protected void onSubmit(AjaxRequestTarget target, Form<?> form)
                 {
-                    removeSecurityReference(constraint, jetspeedNode);
+                    SiteTreeNode treeNode = getUserSelectedNode();
+                    DefaultMutableTreeNode node = getSelectedNode();
+                    Folder folder = getPageManager().newFolder(treeNode.getNodePath() + "/" + document.getName());
+                    folder.setTitle(document.getTitle());
+                    folder.setShortTitle(document.getShortTitle());
+                    try
+                    {
+                        getPageManager().updateFolder(folder);
+                        node.insert(new DefaultMutableTreeNode(new SiteTreeNode(folder)), 0);
+                    }
+                    catch (FolderNotUpdatedException e)
+                    {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    }
+                    catch (NodeException e)
+                    {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    }
+                    ((ModalWindow) AddFolderPanel.this.getParent()).close(target);
                 }
-                pageManager.updateLink((Link) jetspeedNode);
-            }
+            });
+            add(infoForm);
         }
-        catch (Exception e)
+    }
+
+    private class AddPagePanel extends Panel
+    {
+        public AddPagePanel(String id)
         {
-            // TODO: handle exception
+            super(id);
         }
     }
 
-    private void metaDataAction(String action, JetspeedDocumentMetaData metaData, JetspeedDocumentMetaData oldMetaData)
+    private class AddLinkPanel extends Panel
     {
-        SiteTreeNode node = getUserSelectedNode();
-        Node jetspeedNode = null;
-        PageManager pageManager = getPageManager();
-        try
+        public AddLinkPanel(String id)
         {
-            if (node.getDocType() == SiteTreeNode.FileType.Folder)
+            super(id);
+        }
+    }
+    protected void controlTabs()
+    {
+        TabbedPanel tabs = (TabbedPanel) get("tabs");
+        tabs.getTabs().clear();
+        ITab tempTab;
+        tempTab = new AbstractTab(new Model("Information"))
+        {
+            public Panel getPanel(String panelId)
             {
-                jetspeedNode = (Node) pageManager.getFolder(node.getNodePath());
-                if (action.equals(ADD_ACTION) || action.equals(SAVE_ACTION))
-                {
-                    updateMetadata(metaData, oldMetaData, jetspeedNode);
-                }
-                else if (action.equals(REMOVE_ACTION))
-                {
-                    removeMetadata(metaData, jetspeedNode);
-                }
-                pageManager.updateFolder((Folder) jetspeedNode);
+                return new InformationTab(panelId, document);
             }
-            else if (node.getDocType() == SiteTreeNode.FileType.Page)
+        };
+        tabs.getTabs().add(tempTab);
+        tempTab = new AbstractTab(new Model("Metadata"))
+        {
+            public Panel getPanel(String panelId)
             {
-                jetspeedNode = (Node) getPageManager().getPage(node.getNodePath());
-                if (action.equals(ADD_ACTION) || action.equals(SAVE_ACTION))
-                {
-                    updateMetadata(metaData, oldMetaData, jetspeedNode);
-                }
-                else if (action.equals(REMOVE_ACTION))
-                {
-                    removeMetadata(metaData, jetspeedNode);
-                }
-                pageManager.updatePage((Page) jetspeedNode);
+                return new MetaDataTab(panelId, document);
             }
-            else if (node.getDocType() == SiteTreeNode.FileType.Link)
+        };
+        tabs.getTabs().add(tempTab);
+        tempTab = new AbstractTab(new Model("Security"))
+        {
+            public Panel getPanel(String panelId)
             {
-                jetspeedNode = (Node) getPageManager().getLink(node.getNodePath());
-                if (action.equals(ADD_ACTION) || action.equals(SAVE_ACTION))
-                {
-                    updateMetadata(metaData, oldMetaData, jetspeedNode);
-                }
-                else if (action.equals(REMOVE_ACTION))
-                {
-                    removeMetadata(metaData, jetspeedNode);
-                }
-                pageManager.updateLink((Link) jetspeedNode);
+                return new SecurityTab(panelId, document);
             }
-        }
-        catch (Exception e)
+        };
+        tabs.getTabs().add(tempTab);
+        tempTab = new AbstractTab(new Model("Import/Export"))
         {
-            // TODO: handle exception
-        }
+            public Panel getPanel(String panelId)
+            {
+                return new ImportDataTab(panelId, document);
+            }
+        };
+        tabs.getTabs().add(tempTab);
+        tabs.setSelectedTab(0);
     }
-
     protected void insertMetadata(JetspeedDocumentMetaData metaData, Node node)
     {
         Locale locale = new Locale(metaData.getLanguage());
@@ -1062,6 +862,7 @@
         if (cfields == null || cfields.size() == 0)
         {
             insertMetadata(metaData, node);
+            return;
         }
         boolean found = false;
         Iterator fields = cfields.iterator();
@@ -1157,24 +958,257 @@
         }
     }
 
-    private DefaultMutableTreeNode populateUserTree(String userName)
+    protected void insertSecurityReference(String name, String kind, Node node) throws AJAXException
     {
-        // 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;
+        if (node.getSecurityConstraints() == null)
+        {
+            SecurityConstraints cons = node.newSecurityConstraints();
+            node.setSecurityConstraints(cons);
+        }
+        if (kind.equals("Owner"))
+        {
+            node.getSecurityConstraints().setOwner(name);
+        }
+        else
+        {
+            List refs = node.getSecurityConstraints().getSecurityConstraintsRefs();
+            if (refs.contains(name))
+                return;
+            refs.add(name);
+        }
+        return;
     }
 
-    private DefaultMutableTreeNode populateTree()
+    protected void updateSecurityReference(String name, String oldName, String kind, Node node) throws AJAXException
     {
-        // DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(new SiteTreeNode("ROOT", "/"));
-        // List list = new ArrayList<SiteTreeNode>();
+        if (node.getSecurityConstraints() == null)
+        {
+            SecurityConstraints cons = node.newSecurityConstraints();
+            node.setSecurityConstraints(cons);
+        }
+        List refs = node.getSecurityConstraints().getSecurityConstraintsRefs();
+        if (refs == null || refs.size() == 0)
+        {
+            insertSecurityReference(name, kind, node);
+        }
+        boolean found = false;
+        if (kind.equals("Owner"))
+        {
+            node.getSecurityConstraints().setOwner(name);
+            found = true;
+        }
+        else
+        {
+            for (int ix = 0; ix < refs.size(); ix++)
+            {
+                String ref = (String) refs.get(ix);
+                if (areFieldsSame(ref, oldName))
+                {
+                    refs.set(ix, name);
+                    found = true;
+                    break;
+                }
+            }
+        }
+        if (!found)
+            insertSecurityReference(name, kind, node);
+        return;
+    }
+
+    protected void removeSecurityReference(String name, Node node)
+    {
+        if (node.getSecurityConstraints() != null)
+        {
+            String kind = "";
+            if (kind.equals("Owner"))
+            {
+                node.getSecurityConstraints().setOwner(null);
+            }
+            else
+            {
+                List refs = node.getSecurityConstraints().getSecurityConstraintsRefs();
+                if (!refs.contains(name))
+                    return; // nothing to do
+                refs.remove(name);
+            }
+        }
+    }
+
+   
+    /**
+     * @return the userFolder
+     */
+    protected String getUserFolder()
+    {
+        return userFolder;
+    }
+
+    /**
+     * @param userFolder
+     *            the userFolder to set
+     */
+    protected void setUserFolder(String userFolder)
+    {
+        this.userFolder = userFolder;
+    }
+
+   
+    protected String determineRootFolder(RenderRequest request)
+    {
+        String jsroot = request.getParameter(JSROOT);
+        if (jsroot == null || jsroot.equals(""))
+        {
+            jsroot = request.getPreferences().getValue("root", "/_user/" + request.getRemoteUser() + "/");
+        }
+        // this.getContext(request).put(JSROOT, jsroot);
+        return jsroot;
+    }
+
+    protected String determineuserTree(RenderRequest request)
+    {
+        String userTree;
+        userTree = request.getPreferences().getValue("displayUserTree", "false");
+        return userTree;
+    }
+
+    protected Folder retrieveFolders(RenderRequest request, String root) throws PortletException
+    {
+        try
+        {
+            Folder folder = pageManager.getFolder(root);
+            return folder;
+        }
+        catch (Exception e)
+        {
+            // log.error("Failed to retrieve folders ", e);
+            e.printStackTrace();
+            throw new PortletException("Failed to get root folder");
+        }
+    }
+
+    private void securityConstraintAction(String action, String constraint, String oldConstraintName)
+    {
+        SiteTreeNode node = getUserSelectedNode();
+        Node jetspeedNode = null;
+        PageManager pageManager = getPageManager();
+        try
+        {
+            if (node.getDocType() == SiteTreeNode.FileType.Folder)
+            {
+                jetspeedNode = (Node) pageManager.getFolder(node.getNodePath());
+                if (action.equals(ADD_ACTION) || action.equals(SAVE_ACTION))
+                {
+                    updateSecurityReference(constraint, oldConstraintName, "", jetspeedNode);
+                }
+                else if (action.equals(REMOVE_ACTION))
+                {
+                    removeSecurityReference(constraint, jetspeedNode);
+                }
+                pageManager.updateFolder((Folder) jetspeedNode);
+            }
+            else if (node.getDocType() == SiteTreeNode.FileType.Page)
+            {
+                jetspeedNode = (Node) getPageManager().getPage(node.getNodePath());
+                if (action.equals(ADD_ACTION) || action.equals(SAVE_ACTION))
+                {
+                    updateSecurityReference(constraint, oldConstraintName, "", jetspeedNode);
+                }
+                else if (action.equals(REMOVE_ACTION))
+                {
+                    removeSecurityReference(constraint, jetspeedNode);
+                }
+                pageManager.updatePage((Page) jetspeedNode);
+            }
+            else if (node.getDocType() == SiteTreeNode.FileType.Link)
+            {
+                jetspeedNode = (Node) getPageManager().getLink(node.getNodePath());
+                if (action.equals(ADD_ACTION) || action.equals(SAVE_ACTION))
+                {
+                    updateSecurityReference(constraint, oldConstraintName, "", jetspeedNode);
+                }
+                else if (action.equals(REMOVE_ACTION))
+                {
+                    removeSecurityReference(constraint, jetspeedNode);
+                }
+                pageManager.updateLink((Link) jetspeedNode);
+            }
+            populateDocument(node);
+        }
+        catch (Exception e)
+        {
+            // TODO: handle exception
+        }
+    }
+    private void metaDataAction(String action, JetspeedDocumentMetaData metaData, JetspeedDocumentMetaData oldMetaData)
+    {
+        SiteTreeNode node = getUserSelectedNode();
+        Node jetspeedNode = null;
+        PageManager pageManager = getPageManager();
+        try
+        {
+            if (node.getDocType() == SiteTreeNode.FileType.Folder)
+            {
+                jetspeedNode = (Node) pageManager.getFolder(node.getNodePath());
+                if (action.equals(ADD_ACTION) || action.equals(SAVE_ACTION))
+                {
+                    updateMetadata(metaData, oldMetaData, jetspeedNode);
+                }
+                else if (action.equals(REMOVE_ACTION))
+                {
+                    removeMetadata(metaData, jetspeedNode);
+                }
+                pageManager.updateFolder((Folder) jetspeedNode);
+            }
+            else if (node.getDocType() == SiteTreeNode.FileType.Page)
+            {
+                jetspeedNode = (Node) getPageManager().getPage(node.getNodePath());
+                if (action.equals(ADD_ACTION) || action.equals(SAVE_ACTION))
+                {
+                    updateMetadata(metaData, oldMetaData, jetspeedNode);
+                }
+                else if (action.equals(REMOVE_ACTION))
+                {
+                    removeMetadata(metaData, jetspeedNode);
+                }
+                pageManager.updatePage((Page) jetspeedNode);
+            }
+            else if (node.getDocType() == SiteTreeNode.FileType.Link)
+            {
+                jetspeedNode = (Node) getPageManager().getLink(node.getNodePath());
+                if (action.equals(ADD_ACTION) || action.equals(SAVE_ACTION))
+                {
+                    updateMetadata(metaData, oldMetaData, jetspeedNode);
+                }
+                else if (action.equals(REMOVE_ACTION))
+                {
+                    removeMetadata(metaData, jetspeedNode);
+                }
+                pageManager.updateLink((Link) jetspeedNode);
+            }
+            populateDocument(node);
+        }
+        catch (Exception e)
+        {
+            // 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));
@@ -1184,7 +1218,6 @@
         treeRoot = new DefaultTreeModel(rootNode);
         return rootNode;
     }
-
     private DefaultMutableTreeNode retrieveFolders(String folderPath, DefaultMutableTreeNode rootNode)
     {
         try
@@ -1228,7 +1261,6 @@
         }
         return rootNode;
     }
-
     private List<String> getPortletDecorators()
     {
         if (portletDecorators == null)
@@ -1242,7 +1274,6 @@
         }
         return portletDecorators;
     }
-
     private List<String> getPageDecorators()
     {
         if (pageDecoraters == null)
@@ -1256,7 +1287,6 @@
         }
         return pageDecoraters;
     }
-
     private List<String> getThemes()
     {
         if (pageThemes == null)
@@ -1270,7 +1300,6 @@
         }
         return pageThemes;
     }
-
     private List<String> getTargetList()
     {
         if (targetList == null)
@@ -1283,7 +1312,6 @@
         }
         return targetList;
     }
-
     private List<String> getConstraintsDef()
     {
         if (constraintsDefs == null)
@@ -1304,7 +1332,6 @@
         }
         return constraintsDefs;
     }
-
     private void populateDocument(SiteTreeNode node)
     {
         try
@@ -1327,54 +1354,13 @@
             e.printStackTrace();
         }
     }
-
-    private void controlTabs()
+    private void excuteAction(JetspeedDocument document, String action)
     {
-        TabbedPanel tabs = (TabbedPanel) get("tabs");
-        tabs.getTabs().clear();
-        ITab tempTab;
-        tempTab = new AbstractTab(new Model("Information"))
-        {
-            public Panel getPanel(String panelId)
-            {
-                return new InformationTab(panelId, document);
-            }
-        };
-        tabs.getTabs().add(tempTab);
-        tempTab = new AbstractTab(new Model("Metadata"))
-        {
-            public Panel getPanel(String panelId)
-            {
-                return new MetaDataTab(panelId, document);
-            }
-        };
-        tabs.getTabs().add(tempTab);
-        tempTab = new AbstractTab(new Model("Security"))
+        SiteTreeNode node = getUserSelectedNode();
+        PageManager pageManger = getPageManager();
+        if (node != null)
         {
-            public Panel getPanel(String panelId)
-            {
-                return new SecurityTab(panelId, document);
-            }
-        };
-        tabs.getTabs().add(tempTab);
-        tempTab = new AbstractTab(new Model("Import/Export"))
-        {
-            public Panel getPanel(String panelId)
-            {
-                return new ImportDataTab(panelId, document);
-            }
-        };
-        tabs.getTabs().add(tempTab);
-        tabs.setSelectedTab(0);
-    }
-
-    private void excuteAction(JetspeedDocument document, String action)
-    {
-        SiteTreeNode node = getUserSelectedNode();
-        PageManager pageManger = getPageManager();
-        if (node != null)
-        {
-            if (node.getDocType() == SiteTreeNode.FileType.Folder)
+            if (node.getDocType() == SiteTreeNode.FileType.Folder)
             {
                 try
                 {
@@ -1485,112 +1471,14 @@
             }
         }
     }
-
-    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()
-        {
-            return document;
-        }
-    }
-
-    protected void insertSecurityReference(String name, String kind, Node node) throws AJAXException
-    {
-        if (node.getSecurityConstraints() == null)
-        {
-            SecurityConstraints cons = node.newSecurityConstraints();
-            node.setSecurityConstraints(cons);
-        }
-        if (kind.equals("Owner"))
-        {
-            node.getSecurityConstraints().setOwner(name);
-        }
-        else
-        {
-            List refs = node.getSecurityConstraints().getSecurityConstraintsRefs();
-            if (refs.contains(name))
-                return;
-            refs.add(name);
-        }
-        return;
-    }
-
-    protected void updateSecurityReference(String name, String oldName, String kind, Node node) throws AJAXException
-    {
-        if (node.getSecurityConstraints() == null)
-        {
-            SecurityConstraints cons = node.newSecurityConstraints();
-            node.setSecurityConstraints(cons);
-        }
-        List refs = node.getSecurityConstraints().getSecurityConstraintsRefs();
-        if (refs == null || refs.size() == 0)
-        {
-            insertSecurityReference(name, kind, node);
-        }
-        boolean found = false;
-        if (kind.equals("Owner"))
-        {
-            node.getSecurityConstraints().setOwner(name);
-            found = true;
-        }
-        else
-        {
-            for (int ix = 0; ix < refs.size(); ix++)
-            {
-                String ref = (String) refs.get(ix);
-                if (areFieldsSame(ref, oldName))
-                {
-                    refs.set(ix, name);
-                    found = true;
-                    break;
-                }
-            }
-        }
-        if (!found)
-            insertSecurityReference(name, kind, node);
-        return;
-    }
-
-    protected void removeSecurityReference(String name, Node node)
+    private String fileExt(String fileName)
     {
-        if (node.getSecurityConstraints() != null)
+        int extIndex = fileName.lastIndexOf(".");
+        if (extIndex > 0)
         {
-            String kind = "";
-            if (kind.equals("Owner"))
-            {
-                node.getSecurityConstraints().setOwner(null);
-            }
-            else
-            {
-                List refs = node.getSecurityConstraints().getSecurityConstraintsRefs();
-                if (!refs.contains(name))
-                    return; // nothing to do
-                refs.remove(name);
-            }
+            return fileName.substring(extIndex + 1, fileName.length());
         }
+        return "";
     }
 
     private String ExportObject(SiteTreeNode siteNode, boolean recursive, String userName)
@@ -1648,98 +1536,221 @@
         }
         return downloadPath;
     }
+    private String getTempFolder(ActionRequest request)
+    {
+        String dir = System.getProperty("java.io.tmpdir");
+        String path = System.getProperty("file.separator");
+        File file = new File(dir + path + request.getUserPrincipal());
+        file.mkdir();
+        return dir + path + request.getUserPrincipal();
+    }
 
-    /**
-     * @return the userFolder
-     */
-    public String getUserFolder()
+    private static final void copyInputStream(InputStream in, OutputStream out) throws IOException
     {
-        return userFolder;
+        byte[] buffer = new byte[1024];
+        int len;
+        while ((len = in.read(buffer)) >= 0)
+            out.write(buffer, 0, len);
+        in.close();
+        out.close();
     }
 
-    /**
-     * @param userFolder
-     *            the userFolder to set
-     */
-    public void setUserFolder(String userFolder)
+    private boolean unzipfile(String file, String destination, String sepreator)
     {
-        this.userFolder = userFolder;
+        Enumeration entries;
+        String filePath = "";
+        try
+        {
+            ZipFile zipFile = new ZipFile(destination + sepreator + file);
+            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)));
+            }
+            zipFile.close();
+            return true;
+        }
+        catch (IOException ioe)
+        {
+            ioe.printStackTrace();
+            return false;
+        }
     }
 
-    private class AddFolderPanel extends Panel
+    private void createPath(String filePath)
     {
-        private JetspeedDocument document;
+        String parentPath = "";
+        File file = new File(filePath);
+        File parent = new File(file.getParent());
+        if (!parent.exists())
+        {
+            parentPath = parent.getPath();
+            createPath(parentPath);
+            parent.mkdir();
+        }
+    }
 
-        public AddFolderPanel(String id)
+    private Folder importFolders(Folder srcFolder, String userName, String destination) throws JetspeedException
+    {
+        Folder dstFolder = lookupFolder(srcFolder.getPath());
+        dstFolder = pageManager.copyFolder(srcFolder, destination);
+        pageManager.updateFolder(dstFolder);
+        String newPath = "";
+        Iterator pages = srcFolder.getPages().iterator();
+        while (pages.hasNext())
         {
-            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")
+            Page srcPage = (Page) pages.next();
+            Page dstPage = lookupPage(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(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(folder, userName, newPath);
+        }
+        return dstFolder;
+    }
+
+    private Page lookupPage(String path)
+    {
+        try
+        {
+            return castorPageManager.getPage(path);
+        }
+        catch (Exception e)
+        {
+            return null;
+        }
+    }
+
+    private Link lookupLink(String path)
+    {
+        try
+        {
+            return castorPageManager.getLink(path);
+        }
+        catch (Exception e)
+        {
+            return null;
+        }
+    }
+
+    private Folder lookupFolder(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())
             {
-                @Override
-                public void onClick(AjaxRequestTarget target)
+                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())
                 {
-                    ((ModalWindow) AddFolderPanel.this.getParent()).close(target);
+                    deleteDir(files[i]);
                 }
-            });
-            infoForm.add(new AjaxButton("new")
-            {
-                @Override
-                protected void onSubmit(AjaxRequestTarget target, Form<?> form)
+                else
                 {
-                    SiteTreeNode treeNode = getUserSelectedNode();
-                    DefaultMutableTreeNode node = getSelectedNode();
-                    Folder folder = getPageManager().newFolder(treeNode.getNodePath() + "/" + document.getName());
-                    folder.setTitle(document.getTitle());
-                    folder.setShortTitle(document.getShortTitle());
-                    try
-                    {
-                        getPageManager().updateFolder(folder);
-                        node.insert(new DefaultMutableTreeNode(new SiteTreeNode(folder)), 0);
-                    }
-                    catch (FolderNotUpdatedException e)
-                    {
-                        // TODO Auto-generated catch block
-                        e.printStackTrace();
-                    }
-                    catch (NodeException e)
-                    {
-                        // TODO Auto-generated catch block
-                        e.printStackTrace();
-                    }
-                    ((ModalWindow) AddFolderPanel.this.getParent()).close(target);
+                    files[i].delete();
                 }
-            });
-            add(infoForm);
+            }
         }
+        return (dir.delete());
     }
-
-    private class AddPagePanel extends Panel
+    private DefaultMutableTreeNode getSelectedNode()
     {
-        public AddPagePanel(String id)
+        PortalTree tree = (PortalTree) getPage().get("siteTree");
+        Collection selectedNodes = tree.getTreeState().getSelectedNodes();
+        DefaultMutableTreeNode treeNode = null;
+        if (selectedNodes != null)
         {
-            super(id);
+            Iterator selectedNode = selectedNodes.iterator();
+            while (selectedNode.hasNext())
+            {
+                treeNode = (DefaultMutableTreeNode) selectedNode.next();
+                break;
+            }
         }
+        return treeNode;
     }
 
-    private class AddLinkPanel extends Panel
+    private SiteTreeNode getUserSelectedNode()
     {
-        public AddLinkPanel(String id)
+        SiteTreeNode nodeTree = null;
+        PortalTree tree = (PortalTree) getPage().get("siteTree");
+        Collection selectedNodes = tree.getTreeState().getSelectedNodes();
+        DefaultMutableTreeNode treeNode = null;
+        if (selectedNodes != null)
         {
-            super(id);
+            Iterator selectedNode = selectedNodes.iterator();
+            while (selectedNode.hasNext())
+            {
+                treeNode = (DefaultMutableTreeNode) selectedNode.next();
+                break;
+            }
+            if (treeNode != null)
+            {
+                nodeTree = (SiteTreeNode) treeNode.getUserObject();
+            }
+            else
+            {
+                nodeTree = new SiteTreeNode("ROOT", "/", SiteTreeNode.FileType.Folder);
+            }
         }
+        return nodeTree;
     }
+
 }



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