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/01/23 13:46:40 UTC

svn commit: r737018 [2/3] - in /portals/jetspeed-2/applications/j2-admin/trunk: ./ src/main/java/org/apache/jetspeed/portlets/security/ src/main/java/org/apache/jetspeed/portlets/security/users/ src/main/java/org/apache/jetspeed/portlets/site/ src/main...

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=737018&r1=737017&r2=737018&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 Jan 23 04:46:36 2009
@@ -22,122 +22,325 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Enumeration;
 import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
 import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletConfig;
 import javax.portlet.PortletException;
 import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
 
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.fileupload.disk.DiskFileItemFactory;
-import org.apache.commons.fileupload.portlet.PortletFileUpload;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jetspeed.CommonPortletServices;
-import org.apache.jetspeed.PortalReservedParameters;
+import org.apache.jetspeed.ajax.AJAXException;
 import org.apache.jetspeed.components.portletregistry.PortletRegistry;
 import org.apache.jetspeed.decoration.DecorationFactory;
 import org.apache.jetspeed.exception.JetspeedException;
-import org.apache.jetspeed.headerresource.HeaderResource;
+import org.apache.jetspeed.om.common.SecurityConstraints;
 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.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.PageManager;
-import org.apache.jetspeed.request.RequestContext;
-import org.apache.portals.gems.dojo.AbstractDojoVelocityPortlet;
+import org.apache.jetspeed.page.PageNotFoundException;
+import org.apache.jetspeed.page.PageNotUpdatedException;
+import org.apache.jetspeed.page.document.DocumentNotFoundException;
+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.portlets.security.users.WicketUserAdmin;
+import org.apache.jetspeed.portlets.wicket.component.JavascriptEventConfirmation;
+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.markup.html.AjaxLink;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField;
+import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
+import org.apache.wicket.extensions.ajax.markup.html.tabs.AjaxTabbedPanel;
+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.basic.Label;
+import org.apache.wicket.markup.html.form.Button;
+import org.apache.wicket.markup.html.form.CheckBox;
+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.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextField;
+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;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.markup.html.tree.BaseTree;
+import org.apache.wicket.markup.html.tree.LinkIconPanel;
+import org.apache.wicket.markup.html.tree.LinkTree;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.validation.validator.StringValidator;
 
 /**
  * Manage the Portal Site
  * 
+ * @author <a href="mailto:vkumar@apache.org">Vivek Kumar</a>
  * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
  * @version $Id: $
  */
-public class PortalSiteManager extends AbstractDojoVelocityPortlet 
+public class PortalSiteManager extends WicketUserAdmin
 {
-    protected final Log log = LogFactory.getLog(this.getClass());
-    
+    // protected final Log log = LogFactory.getLog(this.getClass());
     // components
     protected PageManager pageManager;
     protected PortletRegistry registry;
     protected DecorationFactory decorationFactory;
-    
     // session
     protected final static String SESSION_FOLDERS = "jetspeed.site.manager.folders";
     protected final static String SESSION_ROOT = "jetspeed.site.manager.root";
-    
     // context
     public final static String FOLDERS = "folders";
-    public final static String JSROOT = "jsroot";   
+    public final static String JSROOT = "jsroot";
     public static final String ALL_SECURITY_REFS = "allSecurityRefs";
-    
-	protected PageManager castorPageManager;
-    
-    public void init(PortletConfig config)
-    throws PortletException 
-    {
-        super.init(config);
-        pageManager = (PageManager) getPortletContext().getAttribute(CommonPortletServices.CPS_PAGE_MANAGER_COMPONENT);        
-        if (null == pageManager) 
-        { 
-            PortletException pe = new PortletException("Failed to find the Page Manager on SiteViewController initialization");
-            throw new RuntimeException(pe); 
-        }
-        registry = (PortletRegistry) getPortletContext().getAttribute(CommonPortletServices.CPS_REGISTRY_COMPONENT);
-        if (null == registry)
-        {
-            PortletException pe = new PortletException("Failed to find the Portlet Registry on SiteViewController initialization");
-            throw new RuntimeException(pe);             
-        }
-        decorationFactory = (DecorationFactory) getPortletContext().getAttribute(CommonPortletServices.CPS_DECORATION_FACTORY);
-        if (null == decorationFactory)
-        {
-            PortletException pe = new PortletException("Failed to find the Decoration Factory on SiteViewController initialization");
-            throw new RuntimeException(pe);             
-        }
-        castorPageManager = (PageManager) getPortletContext().getAttribute(CommonPortletServices.CPS_IMPORTER_MANAGER);
-        if (null == castorPageManager) {
-            PortletException pe = new PortletException(
-                    "Failed to find the castorPageManager on SiteViewController initialization");
-            throw new RuntimeException(pe);
-        }
-    }
-    
-    public void doView(RenderRequest request, RenderResponse response)
-            throws PortletException, IOException
+    protected PageManager castorPageManager;
+    private DefaultTreeModel treeModel;
+    private AjaxTabbedPanel tabPanel;
+    private DefaultTreeModel treeRoot;
+    private JetspeedDocument document;
+    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";
+    String userFolder;
+    private AjaxLink addFolder;
+    private AjaxLink addPage;
+    private AjaxLink addLink;
+
+    public PortalSiteManager()
     {
-        try
+        super();
+        List<ITab> tabList = new ArrayList<ITab>();
+        DefaultMutableTreeNode rootNode = populateTree();
+        populateDocument(new SiteTreeNode("ROOT", "/", SiteTreeNode.FileType.Folder, true));
+        PortalTree siteTree = new PortalTree("siteTree", new PropertyModel(this, "treeRoot"));
+        siteTree.getTreeState().expandNode(rootNode);
+        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"))
+        {
+            @Override
+            protected Iterator<String> getChoices(String input)
+            {
+                if (Strings.isEmpty(input) || input.length() < 1)
+                {
+                    List<String> emptyList = Collections.emptyList();
+                    return emptyList.iterator();
+                }
+                List<String> choices = new ArrayList<String>(10);
+                List<String> userNames = null;
+                try
+                {
+                    userNames = getUserManager().getUserNames(input);
+                }
+                catch (SecurityException e)
+                {
+                    // TODO Auto-generated catch block
+                    e.printStackTrace();
+                }
+                if (userNames == null)
+                {
+                    List<String> emptyList = Collections.emptyList();
+                    return emptyList.iterator();
+                }
+                if(userNames.size()>10)
+                {
+                    return userNames.subList(0, 10).iterator();    
+                }else{
+                    return userNames.iterator();
+                }               
+            }
+        });
+        treeForm.add(new Button("userFolderButton")
+        {
+            @Override
+            public void onSubmit()
+            {
+                ((LinkTree) getPage().get("siteTree")).getTreeState().expandNode(populateUserTree(userFolder));
+            }
+        });
+        treeForm.add(new Button("portalFolderButton")
+        {
+            @Override
+            public void onSubmit()
+            {
+                setUserFolder("");
+                ((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")
         {
-            String jsroot = determineRootFolder(request);
-            RequestContext requestContext = 
-                (RequestContext) request.getAttribute(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE);
-            this.getContext(request).put("page-decorations", decorationFactory.getPageDecorations(requestContext));
-            this.getContext(request).put("portlet-decorations", decorationFactory.getPortletDecorations(requestContext));
-            this.getContext(request).put("themes", decorationFactory.getDesktopPageDecorations(requestContext));
-            this.getContext(request).put("treeName", "portal");
-            this.getContext(request).put("userTree", determineuserTree(request));
-            this.getContext(request).put("defaultLayout", request.getPreferences().getValue("defaultLayout", "jetspeed-layouts::VelocityTwoColumns"));            
-            this.getContext(request).put(FOLDERS, retrieveFolders(request, jsroot));
-            this.getContext(request).put(ALL_SECURITY_REFS, pageManager.getPageSecurity().getSecurityConstraintsDefs());
-            if(request.getPortletSession().getAttribute("status") ==null){
-                request.getPortletSession().setAttribute("status","");
+            @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();
+    }
+
+    private class PortalTree extends LinkTree
+    {
+        private static final long serialVersionUID = 3315834315652490831L;
+
+        public PortalTree(String id, IModel model)
+        {
+            super(id, model);
         }
-        catch (Exception e)
+
+        @Override
+        protected Component newNodeComponent(String id, IModel model)
         {
-            log.error("Failed to get root folder", e);
-            throw new PortletException("Failed to get root folder");
+            final IModel nodeModel = model;
+            return new LinkIconPanel(id, model, PortalTree.this)
+            {
+                private static final long serialVersionUID = 1L;
+                String path = "images";
+
+                @Override
+                protected Component newContentComponent(String componentId, BaseTree tree, IModel model)
+                {
+                    return new Label(componentId, getNodeTextModel(model));
+                }
+
+                /*
+                 * (non-Javadoc)
+                 * @see org.apache.wicket.markup.html.tree.LinkIconPanel#onNodeLinkClicked(java.lang.Object, org.apache.wicket.markup.html.tree.BaseTree,
+                 * org.apache.wicket.ajax.AjaxRequestTarget)
+                 */
+                @Override
+                protected void onNodeLinkClicked(Object node, BaseTree tree, AjaxRequestTarget target)
+                {
+                    super.onNodeLinkClicked(node, tree, target);
+                    DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) node;
+                    SiteTreeNode siteNode = (SiteTreeNode) treeNode.getUserObject();
+                    if (!tree.getTreeState().isNodeExpanded(treeNode))
+                    {
+                        populateDocument(siteNode);
+                        if (siteNode.getDocType() == SiteTreeNode.FileType.Folder && !siteNode.isLoaded())
+                        {
+                            retrieveFolders(siteNode.getNodePath(), treeNode);
+                            siteNode.setLoaded(true);
+                            tree.updateTree();
+                        }
+                        tree.getTreeState().expandNode(treeNode);
+                        controlTabs();
+                    }
+                    else
+                    {
+                        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
+                protected Component newImageComponent(String componentId, BaseTree tree, IModel<Object> model)
+                {
+                    return new Image(componentId)
+                    {
+                        private static final long serialVersionUID = 1L;
+
+                        @Override
+                        protected ResourceReference getImageResourceReference()
+                        {
+                            SiteTreeNode siteModel = (SiteTreeNode) ((DefaultMutableTreeNode) nodeModel.getObject()).getUserObject();
+                            if (siteModel.getDocType() == SiteTreeNode.FileType.Folder)
+                            {
+                                return new ResourceReference(PortalTree.class, path + "/folder.gif");
+                            }
+                            else if (siteModel.getDocType() == SiteTreeNode.FileType.Page)
+                            {
+                                return new ResourceReference(PortalTree.class, path + "/page.gif");
+                            }
+                            else if (siteModel.getDocType() == SiteTreeNode.FileType.Link)
+                            {
+                                return new ResourceReference(PortalTree.class, path + "/link.gif");
+                            }
+                            return new ResourceReference(PortalTree.class, path + "/folder_closed.gif");
+                        }
+                    };
+                }
+            };
         }
-        
-        super.doView(request, response);
-        request.getPortletSession().removeAttribute("status");
     }
-    
+
     protected String determineRootFolder(RenderRequest request)
     {
         String jsroot = request.getParameter(JSROOT);
@@ -145,17 +348,18 @@
         {
             jsroot = request.getPreferences().getValue("root", "/_user/" + request.getRemoteUser() + "/");
         }
-        this.getContext(request).put(JSROOT, jsroot);
+        // this.getContext(request).put(JSROOT, jsroot);
         return jsroot;
     }
+
     protected String determineuserTree(RenderRequest request)
     {
-    	String userTree;
-    	userTree = request.getPreferences().getValue("displayUserTree","false");
-    	return userTree;
+        String userTree;
+        userTree = request.getPreferences().getValue("displayUserTree", "false");
+        return userTree;
     }
-    public Folder retrieveFolders(RenderRequest request, String root)
-    throws PortletException
+
+    public Folder retrieveFolders(RenderRequest request, String root) throws PortletException
     {
         try
         {
@@ -164,284 +368,1378 @@
         }
         catch (Exception e)
         {
-            log.error("Failed to retrieve folders ", e);
+            // log.error("Failed to retrieve folders ", e);
+            e.printStackTrace();
             throw new PortletException("Failed to get root folder");
         }
     }
-    
-    protected void includeHeaderContent(HeaderResource headerResource)
-    {
-        headerResource.dojoAddCoreLibraryRequire("dojo.lang.*");
-        //headerResource.dojoAddCoreLibraryRequire("dojo.dnd.*");
-        headerResource.dojoAddCoreLibraryRequire("dojo.dnd.HtmlDragManager");
-        headerResource.dojoAddCoreLibraryRequire("dojo.dnd.DragAndDrop");
-        headerResource.dojoAddCoreLibraryRequire("dojo.dnd.HtmlDragAndDrop");
-        
-        headerResource.dojoAddCoreLibraryRequire("dojo.event.*");
-        headerResource.dojoAddCoreLibraryRequire("dojo.io");
-                
-        headerResource.dojoAddCoreLibraryRequire("dojo.widget.ContentPane");
-        headerResource.dojoAddCoreLibraryRequire("dojo.widget.LayoutContainer");
-        
-        headerResource.dojoAddCoreLibraryRequire("dojo.widget.Tree");
-        headerResource.dojoAddCoreLibraryRequire("dojo.widget.TreeRPCController");        
-        // headerResource.dojoAddCoreLibraryRequire("dojo.widget.TreeLoadingControllerV3");
-        headerResource.dojoAddCoreLibraryRequire("dojo.widget.TreeSelector");
-        headerResource.dojoAddCoreLibraryRequire("dojo.widget.TreeNode");
-        headerResource.dojoAddCoreLibraryRequire("dojo.widget.TreeContextMenu");
-        
-        headerResource.dojoAddCoreLibraryRequire("dojo.widget.ValidationTextbox");
-        headerResource.dojoAddCoreLibraryRequire("dojo.widget.ComboBox");
-        headerResource.dojoAddCoreLibraryRequire("dojo.widget.Checkbox");
-        headerResource.dojoAddCoreLibraryRequire("dojo.widget.Dialog");
-        headerResource.dojoAddCoreLibraryRequire("dojo.widget.Button");
-        
-        //headerResource.dojoAddModuleLibraryRequire( "jetspeed.desktop.core" );
-        headerResource.dojoAddModuleLibraryRequire( "jetspeed.site" );
-        headerResource.dojoAddModuleLibraryRequire( "jetspeed.widget.EditorTable" );        
-    }
-
-    public void doEdit(RenderRequest request, RenderResponse response)
-    throws PortletException, IOException
-    {
-        response.setContentType("text/html");
-        doPreferencesEdit(request, response);
-    }
-    
-    public void processAction(ActionRequest request, ActionResponse actionResponse) throws PortletException, java.io.IOException
-    {
-        String add = request.getParameter("Save");
-        String fileName ="";
-        String destPath="";
-        String fileType="";
-        String path="";
-        String usrFolder="";
-        boolean success = false;
-
-        if (add != null)
-        { 
-            processPreferencesAction(request, actionResponse);
-        } else {
-            cleanUserFolder(request.getUserPrincipal().toString());
-            try {
-                DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
-                PortletFileUpload portletFileUpload = new PortletFileUpload(diskFileItemFactory);
-                if (PortletFileUpload.isMultipartContent(request)) {
-                    Iterator fileIt = portletFileUpload.parseRequest(request).iterator();
-                    while (fileIt.hasNext()) {
-                        FileItem fileItem = (FileItem) fileIt.next();
-                        if (fileItem.getFieldName().equals("psmlFile")) {
-                            synchronized (this) {
-                                fileName = fileItem.getName();
-                                usrFolder = getTempFolder(request);
-                                path= System.getProperty("file.separator");
-                                String filePath = usrFolder + path + fileItem.getName();
-                                FileOutputStream out = new FileOutputStream(filePath);
-                                out.write(fileItem.get());
-                                out.close();
-                            }
-                        }else if(fileItem.isFormField() && fileItem.getFieldName().equalsIgnoreCase("importPath")){
-                            destPath= fileItem.getString();
-                        }  
-                    }
-                    fileType = fileExt(fileName);
-                    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 = castorPageManager.getFolder(request.getUserPrincipal().toString());
-                        if(fileType.equalsIgnoreCase("psml")){
-                            Page source = folder.getPage(fileName);
-                            Page page = null;
-                            if(pageManager.pageExists(destPath + "/" + fileName)){
-                                pageManager.removePage(pageManager.getPage(destPath + "/" + fileName));
-                                page = pageManager.copyPage(source, destPath + "/" + fileName);
-                            }
-                            page = pageManager.copyPage(source, destPath + "/" + fileName);                               
-                            pageManager.updatePage(page);
-                            success = true;
-                        }else if(fileType.equalsIgnoreCase("link")){
-                            Link source = folder.getLink(fileName);
-                            Link link;
-                            if(pageManager.linkExists(destPath + "/" + fileName)){
-                                pageManager.removeLink(pageManager.getLink(destPath + "/" + fileName));
-                                link = pageManager.copyLink(source, destPath + "/" + fileName);
-                            }
-                            link = pageManager.copyLink(source, destPath + "/" + fileName);
-                            pageManager.updateLink(link);
-                            success = true;
-                        }else if(fileType.equalsIgnoreCase("zip")){
-                            unzipfile(fileName,usrFolder + path,path);
-                            folder = castorPageManager.getFolder(request.getUserPrincipal().toString());
-                            importFolders(folder, request.getUserPrincipal().toString(), destPath);
-                            success = true;
-                        }
-                    }
-                }
-                if (success){
-                    request.getPortletSession().setAttribute("status",fileName);
-                 }else{
-                    request.getPortletSession().setAttribute("status","false"); 
-                 }
-            } catch (Exception e) {
-                request.getPortletSession().setAttribute("status","false");
-                //throw new PortletException("Error occured in file uplodad");
-            }
-        }
 
-    }    
-	private String fileExt(String fileName){
-	    int extIndex = fileName.lastIndexOf(".");
-        if(extIndex>0){
-            return fileName.substring(extIndex+1, fileName.length());
+    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
+    private String getTempFolder(ActionRequest request)
     {
-      byte[] buffer = new byte[1024];
-      int len;
-
-      while((len = in.read(buffer)) >= 0)
-        out.write(buffer, 0, len);
-
-      in.close();
-      out.close();
+        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 boolean  unzipfile(String file,String destination,String sepreator) {
-      Enumeration entries;
-      String filePath="";
-      try {
-          ZipFile zipFile = new ZipFile(destination+sepreator+file);
-
-        entries = zipFile.entries();
+    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();
+    }
 
-        while(entries.hasMoreElements()) {
-          ZipEntry entry = (ZipEntry)entries.nextElement();
-          filePath = destination+sepreator+entry.getName();
-          createPath(filePath);
-          copyInputStream(zipFile.getInputStream(entry),
-             new BufferedOutputStream(new FileOutputStream(filePath)));
+    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;
         }
-
-        zipFile.close();
-        return true;
-      } catch (IOException ioe) {
-        ioe.printStackTrace();
-        return false;
-      }
     }
-    
-    private void createPath(String filePath) {
-        String parentPath="";
+
+    private void createPath(String filePath)
+    {
+        String parentPath = "";
         File file = new File(filePath);
         File parent = new File(file.getParent());
-        if (!parent.exists()) {
+        if (!parent.exists())
+        {
             parentPath = parent.getPath();
             createPath(parentPath);
             parent.mkdir();
         }
     }
-    private Folder importFolders(Folder srcFolder,String userName,String destination) throws JetspeedException {
+
+    private Folder importFolders(Folder srcFolder, String userName, String destination) throws JetspeedException
+    {
         Folder dstFolder = lookupFolder(srcFolder.getPath());
-        dstFolder = pageManager.copyFolder(srcFolder,destination);
+        dstFolder = pageManager.copyFolder(srcFolder, destination);
         pageManager.updateFolder(dstFolder);
-        String newPath="";
+        String newPath = "";
         Iterator pages = srcFolder.getPages().iterator();
-        while (pages.hasNext()) {
+        while (pages.hasNext())
+        {
             Page srcPage = (Page) pages.next();
             Page dstPage = lookupPage(srcPage.getPath());
-            newPath = destination+getRealPath(srcPage.getPath());
-            dstPage = pageManager.copyPage(srcPage,newPath);
+            newPath = destination + getRealPath(srcPage.getPath());
+            dstPage = pageManager.copyPage(srcPage, newPath);
             pageManager.updatePage(dstPage);
         }
-
         Iterator links = srcFolder.getLinks().iterator();
-        while (links.hasNext()) {
+        while (links.hasNext())
+        {
             Link srcLink = (Link) links.next();
             Link dstLink = lookupLink(srcLink.getPath());
-            newPath = destination+getRealPath(srcLink.getPath());
+            newPath = destination + getRealPath(srcLink.getPath());
             dstLink = pageManager.copyLink(srcLink, newPath);
             pageManager.updateLink(dstLink);
         }
         Iterator folders = srcFolder.getFolders().iterator();
-        while (folders.hasNext()) {
+        while (folders.hasNext())
+        {
             Folder folder = (Folder) folders.next();
-            newPath = destination+getRealPath(folder.getPath());
-            importFolders(folder,userName, newPath );
+            newPath = destination + getRealPath(folder.getPath());
+            importFolders(folder, userName, newPath);
         }
-
         return dstFolder;
     }
-    private Page lookupPage(String path) {
-        try {
+
+    private Page lookupPage(String path)
+    {
+        try
+        {
             return castorPageManager.getPage(path);
-        } catch (Exception e) {
+        }
+        catch (Exception e)
+        {
             return null;
         }
     }
 
-    private Link lookupLink(String path) {
-        try {
+    private Link lookupLink(String path)
+    {
+        try
+        {
             return castorPageManager.getLink(path);
-        } catch (Exception e) {
+        }
+        catch (Exception e)
+        {
             return null;
         }
     }
 
-    private Folder lookupFolder(String path) {
-        try {
+    private Folder lookupFolder(String path)
+    {
+        try
+        {
             return castorPageManager.getFolder(path);
-        } catch (Exception e) {
+        }
+        catch (Exception e)
+        {
             return null;
         }
     }
-    private String getRealPath(String path){
+
+    private String getRealPath(String path)
+    {
         int index = path.lastIndexOf("/");
-        if (index>0)
+        if (index > 0)
         {
             return path.substring(index);
         }
         return path;
-         
     }
-    private boolean cleanUserFolder( String userName) {
+
+    private boolean cleanUserFolder(String userName)
+    {
         boolean success = false;
-        synchronized (this) {
+        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()) {
+            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() ) {
+    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();
-               }
+            for (int i = 0; i < files.length; i++)
+            {
+                if (files[i].isDirectory())
+                {
+                    deleteDir(files[i]);
+                }
+                else
+                {
+                    files[i].delete();
+                }
             }
-          }
-          return( dir.delete() );
+        }
+        return (dir.delete());
     }
 
+    protected class InformationTab extends BasePanel
+    {
+        private static final long serialVersionUID = 3039163446419682350L;
+
+        public InformationTab(String id, JetspeedDocument document)
+        {
+            super(id, document);
+            Form infoForm = new Form("infoForm");
+            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);
+            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());
+            themeField.setVisibilityAllowed(true);
+            themeLabel.setVisibilityAllowed(true);
+            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);
+            Label urlLabel = new Label("urlLabel", "URL");
+            TextField urlField = new TextField("urlField", new PropertyModel(this, "document.url"));
+            infoForm.add(urlLabel);
+            infoForm.add(urlField);
+            urlLabel.setVisibilityAllowed(true);
+            urlField.setVisibilityAllowed(true);
+            Label targetLabel = new Label("targetLabel", "Target Window");
+            DropDownChoice targetField = new DropDownChoice("target", new PropertyModel(this, "document.target"), getTargetList());
+            infoForm.add(targetLabel);
+            infoForm.add(targetField);
+            targetLabel.setVisibilityAllowed(true);
+            targetField.setVisibilityAllowed(true);
+            Label defaultPageLabel = new Label("defaultPage", "Default Page");
+            TextField defaultPageField = new TextField("defaultPageField", new PropertyModel(this, "document.page"));
+            infoForm.add(defaultPageLabel);
+            infoForm.add(defaultPageField);
+            defaultPageLabel.setVisibilityAllowed(true);
+            defaultPageField.setVisibilityAllowed(true);
+            SiteTreeNode node = getUserSelectedNode();
+            if (node.getDocType() == SiteTreeNode.FileType.Folder)
+            {
+                urlLabel.setVisible(false);
+                urlField.setVisible(false);
+                targetLabel.setVisible(false);
+                targetField.setVisible(false);
+            }
+            else if (node.getDocType() == SiteTreeNode.FileType.Page)
+            {
+                defaultPageLabel.setVisible(false);
+                defaultPageField.setVisible(false);
+                urlLabel.setVisible(false);
+                urlField.setVisible(false);
+                targetLabel.setVisible(false);
+                targetField.setVisible(false);
+            }
+            else if (node.getDocType() == SiteTreeNode.FileType.Link)
+            {
+                defaultPageLabel.setVisible(false);
+                defaultPageField.setVisible(false);
+                targetLabel.setVisible(false);
+                defaultPageField.setVisible(false);
+                pageDecoratorLabel.setVisible(false);
+                decoratorsList.setVisible(false);
+                portletDecoratorLabel.setVisible(false);
+                portletDecoratorsList.setVisible(false);
+                themeField.setVisible(false);
+                themeLabel.setVisible(false);
+            }
+            infoForm.add(new AjaxButton("view", infoForm)
+            {
+                @Override
+                protected void onSubmit(AjaxRequestTarget target, Form form)
+                {
+                    excuteAction(getDocument(), "view");
+                }
+            });
+            infoForm.add(new AjaxButton("remove", infoForm)
+            {
+                @Override
+                protected void onSubmit(AjaxRequestTarget target, Form form)
+                {
+                    excuteAction(getDocument(), "remove");
+                }
+            }.add(new JavascriptEventConfirmation("onclick", "are you sure?")));
+            infoForm.add(new AjaxButton("save", infoForm)
+            {
+                @Override
+                protected void onSubmit(AjaxRequestTarget target, Form form)
+                {
+                    excuteAction(getDocument(), "save");
+                }
+            });
+            add(infoForm);
+        }
+    }
+
+    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;
+            }
+        }
+        return treeNode;
+    }
+
+    private SiteTreeNode getUserSelectedNode()
+    {
+        SiteTreeNode nodeTree = null;
+        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)
+            {
+                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"))
+            {
+                public void populateItem(final ListItem listItem)
+                {
+                    final String constraints = (String) listItem.getModelObject();
+                    listItem.add(new Label("name", constraints));
+                    listItem.add(new Label("type", "Security Reference"));
+                    listItem.add(new AjaxLink("edit")
+                    {
+                        @Override
+                        public void onClick(AjaxRequestTarget target)
+                        {
+                            metaDataModalWindow.setContent(new SecurityTabWindowPanel(metaDataModalWindow.getContentId(), constraints));
+                            metaDataModalWindow.show(target);
+                        }
+                    });
+                    listItem.add(new AjaxLink("delete")
+                    {
+                        @Override
+                        public void onClick(AjaxRequestTarget target)
+                        {
+                            securityConstraintAction(REMOVE_ACTION, constraints, "");
+                        }
+                    }.add(new JavascriptEventConfirmation("onclick", "are you sure?")));
+                }
+            });
+            add(new AjaxLink("new")
+            {
+                @Override
+                public void onClick(AjaxRequestTarget target)
+                {
+                    metaDataModalWindow.setContent(new SecurityTabWindowPanel(metaDataModalWindow.getContentId(), ""));
+                    metaDataModalWindow.show(target);
+                }
+            });
+        }
+    }
+
+    protected class MetaDataTab extends BasePanel
+    {
+        private static final long serialVersionUID = 6429774536790672910L;
+
+        public MetaDataTab(String id, JetspeedDocument doc)
+        {
+            super(id, doc);
+            final ModalWindow metaDataModalWindow;
+            add(metaDataModalWindow = new ModalWindow("modalwindow"));
+            ListView metaDataListView = new ListView("metaData", new PropertyModel(this, "document.metaData"))
+            {
+                private static final long serialVersionUID = 1L;
+
+                public void populateItem(final ListItem listItem)
+                {
+                    final JetspeedDocumentMetaData metaData = (JetspeedDocumentMetaData) listItem.getModelObject();
+                    listItem.add(new Label("name", metaData.getName()));
+                    listItem.add(new Label("language", metaData.getLanguage()));
+                    listItem.add(new Label("value", metaData.getValue()));
+                    listItem.add(new AjaxLink("edit", new Model("Edit"))
+                    {
+                        @Override
+                        public void onClick(AjaxRequestTarget target)
+                        {
+                            metaDataModalWindow.setContent(new MetaDataPanel(metaDataModalWindow.getContentId(), getDocument(), metaData));
+                            metaDataModalWindow.show(target);
+                        }
+                    });
+                    listItem.add(new AjaxLink("delete", new Model("Delete"))
+                    {
+                        private static final long serialVersionUID = 1L;
+
+                        @Override
+                        public void onClick(AjaxRequestTarget target)
+                        {
+                            metaDataAction(REMOVE_ACTION, metaData, null);
+                        }
+                    }.add(new JavascriptEventConfirmation("onclick", "are you sure?")));
+                }
+            };
+            add(metaDataListView);
+            add(new AjaxLink("new", new Model("New"))
+            {
+                @Override
+                public void onClick(AjaxRequestTarget target)
+                {
+                    metaDataModalWindow.setContent(new MetaDataPanel(metaDataModalWindow.getContentId(), getDocument(),
+                                                                     new JetspeedDocumentMetaData("", "", "")));
+                    metaDataModalWindow.show(target);
+                }
+            });
+        }
+    }
+
+    protected class SecurityTabWindowPanel extends Panel
+    {
+        private static final long serialVersionUID = -3223669376958653554L;
+        private String constraintName;
+
+        /**
+         * @return the constraintName
+         */
+        public String getConstraintName()
+        {
+            return constraintName;
+        }
+
+        /**
+         * @param constraintName
+         *            the constraintName to set
+         */
+        public void setConstraintName(String constraintName)
+        {
+            this.constraintName = constraintName;
+        }
+
+        public SecurityTabWindowPanel(String id, String constrainName)
+        {
+            super(id);
+            this.constraintName = constrainName;
+            Form securityTabForm = new Form("securityDataForm");
+            securityTabForm.add(new Label("securityConstraintLabel", "Security Constraint"));
+            DropDownChoice constraintsChoices = new DropDownChoice("constraints", new PropertyModel(this, "constraintName"), getConstraintsDef());
+            securityTabForm.add(constraintsChoices);
+            securityTabForm.add(new AjaxButton("save", securityTabForm)
+            {
+                @Override
+                protected void onSubmit(AjaxRequestTarget target, Form form)
+                {
+                    securityConstraintAction(SAVE_ACTION, getConstraintName(), null);
+                    ((ModalWindow) SecurityTabWindowPanel.this.getParent()).close(target);
+                }
+            });
+            add(securityTabForm);
+        }
+    }
+
+    protected class ImportDataTab extends BasePanel
+    {
+        private static final long serialVersionUID = 3676403374892366510L;
+        boolean recursively;
+
+        public ImportDataTab(String id, JetspeedDocument jetspeeeDoc)
+        {
+            super(id, jetspeeeDoc);
+            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"));
+            Label exporNameLabel = new Label("expLabel", "Export Object");
+            TextField exportName = new TextField("expName", new PropertyModel(this, "document.name"));
+            exportLabel.setVisibilityAllowed(true);
+            exportChkBox.setVisibilityAllowed(true);
+            if (node.getDocType() != SiteTreeNode.FileType.Folder)
+            {
+                exportLabel.setVisible(false);
+                exportChkBox.setVisible(false);
+            }
+            exportForm.add(exporNameLabel);
+            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)
+            {
+                @Override
+                protected void onSubmit(AjaxRequestTarget target, Form<?> form)
+                {
+                    String link = ExportObject(node, recursively, getPortletRequest().getUserPrincipal().getName());
+                    ajaxDownlodLink.setDefaultModelObject("http://www.yahoo.com" + link);
+                    ajaxDownlodLink.setVisible(true);
+                    target.addComponent(ajaxDownlodLink);
+                }
+            };
+            exportForm.add(exportButton);
+            add(exportForm);
+        }
+    }
+
+    protected class MetaDataPanel extends BasePanel
+    {
+        private JetspeedDocumentMetaData metaData;
+        private JetspeedDocumentMetaData oldMetaData;
+
+        public MetaDataPanel(String id, JetspeedDocument document, JetspeedDocumentMetaData jmetaData)
+        {
+            super(id, document);
+            this.metaData = jmetaData;
+            this.oldMetaData = jmetaData;
+            Form metaDataForm = new Form("metaDataForm");
+            FormComponent fc;
+            fc = new RequiredTextField("name", new PropertyModel(this, "metaData.name"));
+            fc.add(StringValidator.minimumLength(2));
+            metaDataForm.add(fc);
+            metaDataForm.add(new Label("name-label", "Name"));
+            fc = new RequiredTextField("language", new PropertyModel(this, "metaData.language"));
+            fc.add(StringValidator.minimumLength(2));
+            metaDataForm.add(fc);
+            metaDataForm.add(new Label("language-label", "Language"));
+            fc = new RequiredTextField("metaValue", new PropertyModel(this, "metaData.value"));
+            fc.add(StringValidator.minimumLength(2));
+            metaDataForm.add(fc);
+            metaDataForm.add(new Label("value-label", "Value"));
+            metaDataForm.add(new AjaxButton("save", metaDataForm)
+            {
+                @Override
+                protected void onSubmit(AjaxRequestTarget target, Form form)
+                {
+                    metaDataAction(SAVE_ACTION, metaData, oldMetaData);
+                    ((ModalWindow) MetaDataPanel.this.getParent()).close(target);
+                }
+            });
+            add(metaDataForm);
+        }
+    }
+
+    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);
+            }
+        }
+        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);
+            }
+        }
+        catch (Exception e)
+        {
+            // TODO: handle exception
+        }
+    }
+
+    protected void insertMetadata(JetspeedDocumentMetaData metaData, Node node)
+    {
+        Locale locale = new Locale(metaData.getLanguage());
+        node.getMetadata().addField(locale, metaData.getName(), metaData.getValue());
+    }
+
+    protected void updateMetadata(JetspeedDocumentMetaData metaData, JetspeedDocumentMetaData oldMetaData, Node node)
+    {
+        Collection cfields = node.getMetadata().getFields(oldMetaData.getName());
+        if (cfields == null || cfields.size() == 0)
+        {
+            insertMetadata(metaData, node);
+        }
+        boolean found = false;
+        Iterator fields = cfields.iterator();
+        while (fields.hasNext())
+        {
+            LocalizedField field = (LocalizedField) fields.next();
+            if (areFieldsSame(field.getName(), oldMetaData.getName()) && areFieldsSame(field.getLocale().toString(), oldMetaData.getLanguage()))
+            {
+                field.setName(metaData.getName());
+                field.setLocale(new Locale(metaData.getLanguage()));
+                field.setValue(metaData.getValue());
+                found = true;
+                break;
+            }
+        }
+        if (!found)
+            insertMetadata(metaData, node);
+    }
+
+    protected void removeMetadata(JetspeedDocumentMetaData metaData, Node node)
+    {
+        Collection cfields = node.getMetadata().getFields(metaData.getName());
+        Collection allFields = node.getMetadata().getFields();
+        if (cfields == null || cfields.size() == 0)
+        {
+            return;
+        }
+        boolean found = false;
+        Iterator fields = cfields.iterator();
+        while (fields.hasNext())
+        {
+            LocalizedField field = (LocalizedField) fields.next();
+            if (areFieldsSame(field.getName(), metaData.getName()) && areFieldsSame(field.getLocale().toString(), metaData.getLanguage()))
+            {
+                cfields.remove(field);
+                if (allFields.remove(field))
+                {
+                    node.getMetadata().setFields(allFields);
+                }
+                found = true;
+                break;
+            }
+        }
+    }
+
+    protected boolean isBlank(String field)
+    {
+        if (field == null || field.trim().length() == 0)
+            return true;
+        return false;
+    }
+
+    protected boolean isFieldModified(String paramValue, String prevValue)
+    {
+        if (paramValue == null)
+        {
+            if (prevValue == null)
+                return false;
+            else
+                return true;
+        }
+        else
+        {
+            if (prevValue == null)
+                return true;
+            if (prevValue.equals(paramValue))
+                return false;
+            else
+                return true;
+        }
+    }
+
+    protected boolean areFieldsSame(String f1, String f2)
+    {
+        return !isFieldModified(f1, f2);
+    }
+
+    protected boolean isBooleanModified(String paramValue, boolean prevValue)
+    {
+        if (paramValue == null)
+        {
+            if (prevValue == false)
+                return false;
+            else
+                return true;
+        }
+        else
+        {
+            if (prevValue == false)
+                return true;
+            else
+                return false;
+        }
+    }
+
+    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
+        {
+            Link link;
+            Folder folder;
+            DefaultMutableTreeNode tmpNode;
+            Page page;
+            Folder rootfolder = getPageManager().getFolder(folderPath);
+            if (rootNode == null)
+            {
+                rootNode = new DefaultMutableTreeNode(new SiteTreeNode(rootfolder));
+            }
+            Iterator folders = rootfolder.getFolders().iterator();
+            while (folders.hasNext())
+            {
+                folder = (Folder) folders.next();
+                rootNode.add(new DefaultMutableTreeNode(new SiteTreeNode(folder)));
+            }
+            Iterator pages = rootfolder.getPages().iterator();
+            while (pages.hasNext())
+            {
+                page = (Page) pages.next();
+                tmpNode = new DefaultMutableTreeNode(new SiteTreeNode(page));
+                tmpNode.setAllowsChildren(false);
+                rootNode.add(tmpNode);
+            }
+            Iterator links = rootfolder.getLinks().iterator();
+            while (links.hasNext())
+            {
+                link = (Link) links.next();
+                tmpNode = new DefaultMutableTreeNode(new SiteTreeNode(link));
+                tmpNode.setAllowsChildren(false);
+                rootNode.add(tmpNode);
+            }
+        }
+        catch (Exception e)
+        {
+            // log.error("Failed to retrieve folders ", e);
+            e.printStackTrace();
+        }
+        return rootNode;
+    }
+
+    private List<String> getPortletDecorators()
+    {
+        if (portletDecorators == null)
+        {
+            portletDecorators = new ArrayList<String>();
+            Iterator iterator = getDecorationFactory().getPortletDecorations(null).iterator();
+            while (iterator.hasNext())
+            {
+                portletDecorators.add((String) iterator.next());
+            }
+        }
+        return portletDecorators;
+    }
+
+    private List<String> getPageDecorators()
+    {
+        if (pageDecoraters == null)
+        {
+            pageDecoraters = new ArrayList<String>();
+            Iterator iterator = getDecorationFactory().getPageDecorations(null).iterator();
+            while (iterator.hasNext())
+            {
+                pageDecoraters.add((String) iterator.next());
+            }
+        }
+        return pageDecoraters;
+    }
+
+    private List<String> getThemes()
+    {
+        if (pageThemes == null)
+        {
+            pageThemes = new ArrayList<String>();
+            Iterator iterator = getDecorationFactory().getDesktopPageDecorations(null).iterator();
+            while (iterator.hasNext())
+            {
+                pageDecoraters.add((String) iterator.next());
+            }
+        }
+        return pageThemes;
+    }
+
+    private List<String> getTargetList()
+    {
+        if (targetList == null)
+        {
+            targetList = new ArrayList<String>();
+            targetList.add("new");
+            targetList.add("self");
+            targetList.add("top");
+            targetList.add("parent");
+        }
+        return targetList;
+    }
+
+    private List<String> getConstraintsDef()
+    {
+        if (constraintsDefs == null)
+        {
+            constraintsDefs = new ArrayList<String>();
+            try
+            {
+                Iterator constraintsDefIterator = getPageManager().getPageSecurity().getSecurityConstraintsDefs().iterator();
+                while (constraintsDefIterator.hasNext())
+                {
+                    constraintsDefs.add(((SecurityConstraintsDef) constraintsDefIterator.next()).getName());
+                }
+            }
+            catch (Exception e)
+            {
+                // TODO: handle exception
+            }
+        }
+        return constraintsDefs;
+    }
+
+    private void populateDocument(SiteTreeNode node)
+    {
+        try
+        {
+            if (node.getDocType() == SiteTreeNode.FileType.Folder)
+            {
+                document = new JetspeedDocument(getPageManager().getFolder(node.getNodePath()));
+            }
+            else if (node.getDocType() == SiteTreeNode.FileType.Page)
+            {
+                document = new JetspeedDocument(getPageManager().getPage(node.getNodePath()));
+            }
+            else if (node.getDocType() == SiteTreeNode.FileType.Link)
+            {
+                document = new JetspeedDocument(getPageManager().getLink(node.getNodePath()));
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    private void controlTabs()
+    {
+        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"))
+        {
+            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)
+            {
+                try
+                {
+                    Folder folder = pageManger.getFolder(node.getNodePath());
+                    if (action.equals("save"))
+                    {
+                        folder.setTitle(document.getTitle());
+                        folder.setShortTitle(document.getShortTitle());
+                        folder.setDefaultDecorator(document.getPageDecorator(), Fragment.LAYOUT);
+                        folder.setDefaultDecorator(document.getPortletDecorator(), Fragment.PORTLET);
+                        folder.setSkin(document.getDesktopTheme());
+                        folder.setHidden(document.isHidden());
+                        pageManger.updateFolder(folder);
+                    }
+                    else if (action.equals("remove"))
+                    {
+                        pageManger.removeFolder(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();
+                }
+            }
+            else if (node.getDocType() == SiteTreeNode.FileType.Page)
+            {
+                try
+                {
+                    Page page = pageManger.getPage(node.getNodePath());
+                    if (action.equals("save"))
+                    {
+                        page = pageManger.getPage(node.getNodePath());
+                        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());
+                        pageManger.updatePage(page);
+                    }
+                    else if (action.equals("remove"))
+                    {
+                        pageManger.removePage(page);
+                    }
+                }
+                catch (PageNotFoundException e)
+                {
+                    // TODO Auto-generated catch block
+                    e.printStackTrace();
+                }
+                catch (PageNotUpdatedException e)
+                {
+                    // TODO Auto-generated catch block
+                    e.printStackTrace();
+                }
+                catch (NodeException e)
+                {
+                    // TODO Auto-generated catch block
+                    e.printStackTrace();
+                }
+            }
+            else if (node.getDocType() == SiteTreeNode.FileType.Link)
+            {
+                try
+                {
+                    Link link = pageManger.getLink(node.getNodePath());
+                    if (action.equals("save"))
+                    {
+                        link = pageManger.getLink(node.getNodePath());
+                        link.setTitle(document.getTitle());
+                        link.setShortTitle(document.getShortTitle());
+                        link.setUrl(document.getUrl());
+                        link.setTitle(document.getTitle());
+                        link.setHidden(document.isHidden());
+                        pageManger.updateLink(link);
+                    }
+                    else if (action.equals("remove"))
+                    {
+                        pageManger.removeLink(link);
+                    }
+                }
+                catch (UnsupportedDocumentTypeException e)
+                {
+                    // TODO Auto-generated catch block
+                    e.printStackTrace();
+                }
+                catch (DocumentNotFoundException e)
+                {
+                    // TODO Auto-generated catch block
+                    e.printStackTrace();
+                }
+                catch (NodeException e)
+                {
+                    // TODO Auto-generated catch block
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    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)
+    {
+        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);
+            }
+        }
+    }
+
+    private String ExportObject(SiteTreeNode siteNode, boolean recursive, String userName)
+    {
+        String downloadPath = "";
+        boolean success = true;
+        String objectPath = siteNode.getNodePath();
+        if (!cleanUserFolder(userName))
+            success = false;
+        if (success)
+        {
+            PageManager pageManager = getPageManager();
+            PageManager castorPageManager = getCastorPageManager();
+            try
+            {
+                if (siteNode.getDocType() == SiteTreeNode.FileType.Folder)
+                {
+                    Folder folder = pageManager.getFolder(siteNode.getNodePath());
+                    if (recursive)
+                    {
+                        PortalSiteManagerUtil.importFolder(castorPageManager, folder, userName, getRealPath(folder.getPath()));
+                    }
+                    else
+                    {
+                        Folder destFolder = castorPageManager.copyFolder(folder, PortalSiteManagerUtil.getUserFolder(userName, true) + siteNode.getNodeName());
+                        castorPageManager.updateFolder(destFolder);
+                    }
+                }
+                else if (siteNode.getDocType() == SiteTreeNode.FileType.Page)
+                {
+                    objectPath = PortalSiteManagerUtil.getParentPath(objectPath);
+                    Folder folder = pageManager.getFolder(objectPath);
+                    Page page = folder.getPage(siteNode.getNodeName());
+                    Page destPage = castorPageManager.copyPage(page, PortalSiteManagerUtil.getUserFolder(userName, true) + siteNode.getNodeName());
+                    castorPageManager.updatePage(destPage);
+                }
+                else if (siteNode.getDocType() == SiteTreeNode.FileType.Link)
+                {
+                    objectPath = PortalSiteManagerUtil.getParentPath(objectPath);
+                    Folder folder = pageManager.getFolder(objectPath);
+                    Link link = folder.getLink(siteNode.getNodeName());
+                    Link destLink = castorPageManager.copyLink(link, PortalSiteManagerUtil.getUserFolder(userName, true) + siteNode.getNodeName());
+                    castorPageManager.updateLink(destLink);
+                }
+                String link = userName + "_" + siteNode.getNodeName();
+                if (siteNode.getDocType() == SiteTreeNode.FileType.Folder)
+                    link = userName + ".zip";
+                getServletRequest().getSession().setAttribute("file", link);
+                downloadPath = PortalSiteManagerUtil.getDownloadLink(getServletRequest(), siteNode.getNodeName(), userName, siteNode.getDocType().toString());
+            }
+            catch (Exception e)
+            {
+                e.printStackTrace();
+            }
+        }
+        return downloadPath;
+    }
+
+    /**
+     * @return the userFolder
+     */
+    public String getUserFolder()
+    {
+        return userFolder;
+    }
+
+    /**
+     * @param userFolder
+     *            the userFolder to set
+     */
+    public void setUserFolder(String userFolder)
+    {
+        this.userFolder = userFolder;
+    }
+
+    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")
+            {
+                @Override
+                public void onClick(AjaxRequestTarget target)
+                {
+                    ((ModalWindow) AddFolderPanel.this.getParent()).close(target);
+                }
+            });
+            infoForm.add(new AjaxButton("new")
+            {
+                @Override
+                protected void onSubmit(AjaxRequestTarget target, Form<?> form)
+                {
+                    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);
+                }
+            });
+            add(infoForm);
+        }
+    }
+
+    private class AddPagePanel extends Panel
+    {
+        public AddPagePanel(String id)
+        {
+            super(id);
+        }
+    }
+
+    private class AddLinkPanel extends Panel
+    {
+        public AddLinkPanel(String id)
+        {
+            super(id);
+        }
+    }
 }

Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManagerApplication.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManagerApplication.java?rev=737018&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManagerApplication.java (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManagerApplication.java Fri Jan 23 04:46:36 2009
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.portlets.site;
+
+import org.apache.jetspeed.portlets.wicket.AbstractAdminWebApplication;
+
+/**
+ * @author <a href="mailto:vkumar@apache.org">Vivek Kumar</a>
+ * @version $Id:
+ */
+public class PortalSiteManagerApplication extends AbstractAdminWebApplication
+{
+
+    @Override
+    public Class getHomePage()
+    {
+        return PortalSiteManager.class;
+    }
+}

Propchange: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManagerApplication.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain



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