Java tutorial
/* * 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 java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Serializable; import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import javax.portlet.PortletRequest; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeModel; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.jetspeed.PortalReservedParameters; import org.apache.jetspeed.components.portletregistry.PortletRegistry; import org.apache.jetspeed.decoration.DecorationFactory; import org.apache.jetspeed.exception.JetspeedException; 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.folder.MenuDefinition; import org.apache.jetspeed.om.folder.MenuExcludeDefinition; import org.apache.jetspeed.om.folder.MenuIncludeDefinition; import org.apache.jetspeed.om.folder.MenuOptionsDefinition; import org.apache.jetspeed.om.folder.MenuSeparatorDefinition; import org.apache.jetspeed.om.page.DynamicPage; import org.apache.jetspeed.om.page.Fragment; import org.apache.jetspeed.om.page.FragmentDefinition; import org.apache.jetspeed.om.page.Link; import org.apache.jetspeed.om.page.Page; import org.apache.jetspeed.om.page.PageTemplate; import org.apache.jetspeed.om.page.SecurityConstraintsDef; import org.apache.jetspeed.om.portlet.LocalizedField; import org.apache.jetspeed.page.FolderNotRemovedException; import org.apache.jetspeed.page.FolderNotUpdatedException; import org.apache.jetspeed.page.PageManager; import org.apache.jetspeed.page.PageNotFoundException; 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.portalsite.MenuElement; import org.apache.jetspeed.portlets.AdminPortletWebPage; import org.apache.jetspeed.portlets.site.SiteTreeNode.FileType; import org.apache.jetspeed.portlets.site.model.ExcludesDefinitionBean; import org.apache.jetspeed.portlets.site.model.IncludesDefinitionBean; import org.apache.jetspeed.portlets.site.model.JetspeedMenuDefinition; import org.apache.jetspeed.portlets.site.model.OptionsDefinitionBean; import org.apache.jetspeed.portlets.site.model.SeparatorDefinitionBean; import org.apache.jetspeed.portlets.wicket.AbstractAdminWebApplication; import org.apache.jetspeed.portlets.wicket.component.DynamicResourceLink; import org.apache.jetspeed.portlets.wicket.component.JavascriptEventConfirmation; import org.apache.jetspeed.portlets.wicket.component.ResourceProvider; import org.apache.jetspeed.request.RequestContext; import org.apache.jetspeed.security.SecurityException; import org.apache.wicket.Component; import org.apache.wicket.ResourceReference; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.IAjaxCallDecorator; import org.apache.wicket.ajax.calldecorator.AjaxPreprocessingCallDecorator; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox; 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.ComponentTag; 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; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.FormComponent; import org.apache.wicket.markup.html.form.HiddenField; import org.apache.wicket.markup.html.form.ListMultipleChoice; import org.apache.wicket.markup.html.form.RequiredTextField; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.form.upload.FileUpload; import org.apache.wicket.markup.html.form.upload.FileUploadField; import org.apache.wicket.markup.html.image.ContextImage; import org.apache.wicket.markup.html.image.Image; import org.apache.wicket.markup.html.link.ExternalLink; import org.apache.wicket.markup.html.link.PopupSettings; 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.model.ResourceModel; import org.apache.wicket.util.string.Strings; import org.apache.wicket.validation.validator.StringValidator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 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: PortalSiteManager.java 1178649 2011-10-04 00:40:14Z ate $ */ public class PortalSiteManager extends AdminPortletWebPage { public static final String PORTAL_SITE_MANAGER_INIT_NODE_TYPE_PARAM = "_jssmnodetype"; public static final String PORTAL_SITE_MANAGER_INIT_NODE_PATH_PARAM = "_jssmnodepath"; protected static final Logger log = LoggerFactory.getLogger(PortalSiteManager.class); // components protected PortletRegistry registry; protected DecorationFactory decorationFactory; public final static String TREE_ROOT = "jsRoot"; private final static String JETSPEED_PATH_SEPRATOR = "/"; private DefaultTreeModel treeModel; private AjaxTabbedPanel tabPanel; private DefaultTreeModel treeRoot; private JetspeedDocument document; private MenuDefinition menuDefinition; private List<String> pageDecorators; private List<String> portletDecorators; private List<String> pageThemes; private List<String> constraintsDefs; private List<String> targetList; private final static String ADD_ACTION = "add"; private final static String REMOVE_ACTION = "remove"; private final static String SAVE_ACTION = "save"; private final static String INCLUDES = "includes"; private final static String EXCLUDES = "excludes"; public final static String FOLDER_NODE_TYPE = "folder"; public final static String PAGE_NODE_TYPE = "page"; public final static String LINK_NODE_TYPE = "link"; List<ITab> menuTabs = new ArrayList<ITab>(); private List menuOptions = new ArrayList(); String userFolder; private DefaultTreeModel menuTreeRoot; private LinkTree menuTree; public PortalSiteManager() { super(); List<ITab> tabList = new ArrayList<ITab>(); DefaultMutableTreeNode rootNode = populateTree(); populateDocument(getInitSiteTreeNode()); PortalTree siteTree = new PortalTree("siteTree", new PropertyModel(this, "treeRoot")); siteTree.getTreeState().expandNode(rootNode); tabPanel = new AjaxTabbedPanel("tabs", tabList); tabPanel.setOutputMarkupId(true); add(siteTree); 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 = getServiceLocator().getUserManager().getUserNames(input); } catch (SecurityException e) { log.error("Failed to retrieve user names.", e); } 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(); } } }.setRequired(true)); 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()); } }); add(new FeedbackPanel("feedback")); add(treeForm); add(tabPanel); controlTabs(); setVisibilitiesOfChildComponentsByPreferences("component.visibility.", true); } private class PortalTree extends LinkTree { private static final long serialVersionUID = 3315834315652490831L; public PortalTree(String id, IModel model) { super(id, model); } @Override protected Component newNodeComponent(String id, IModel model) { 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)); } @Override protected void onNodeLinkClicked(Object node, BaseTree tree, AjaxRequestTarget target) { DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) node; SiteTreeNode siteNode = (SiteTreeNode) treeNode.getUserObject(); populateDocument(siteNode); if (siteNode.getDocType() == SiteTreeNode.FileType.Folder && !siteNode.isLoaded()) { retrieveFolders(siteNode.getNodePath(), treeNode); siteNode.setLoaded(true); } if (!tree.getTreeState().isNodeExpanded(treeNode)) { tree.getTreeState().expandNode(treeNode); } else { tree.getTreeState().collapseNode(treeNode); } controlTabs(siteNode); target.addComponent(tabPanel); tree.getTreeState().selectNode(node, true); tree.updateTree(target); } @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"); } }; } }; } } 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", new ResourceModel("common.name")); TextField nameField = new TextField("nameField", new PropertyModel(this, "document.name")); infoForm.add(nameLabel); infoForm.add(nameField); Label titleLabel = new Label("title", new ResourceModel("Title")); TextField titleField = new TextField("titleField", new PropertyModel(this, "document.title")); infoForm.add(titleLabel); infoForm.add(titleField); Label shortTitleLabel = new Label("shortTitle", new ResourceModel("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", new ResourceModel("Hidden")); CheckBox visibleCheckbox = new CheckBox("visibleCheck", new PropertyModel(this, "document.hidden")); infoForm.add(visibleLabel); infoForm.add(visibleCheckbox); Label urlLabel = new Label("urlLabel", new ResourceModel("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", new ResourceModel("DefaultPage")); TextField defaultPageField = new TextField("defaultPageField", new PropertyModel(this, "document.page")); infoForm.add(defaultPageLabel); infoForm.add(defaultPageField); defaultPageLabel.setVisibilityAllowed(true); defaultPageField.setVisibilityAllowed(true); final ModalWindow metaDataModalWindow; add(metaDataModalWindow = new ModalWindow("modalwindow")); AjaxButton addFolder = new AjaxButton("addFolder", new ResourceModel("add.subfolder"), infoForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { metaDataModalWindow.setContent(new AddFolderPanel(metaDataModalWindow.getContentId())); metaDataModalWindow.show(target); } }; infoForm.add(addFolder); AjaxButton addPage = new AjaxButton("addPage", new ResourceModel("add.page"), infoForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { metaDataModalWindow.setContent(new AddPagePanel(metaDataModalWindow.getContentId())); metaDataModalWindow.show(target); } }; infoForm.add(addPage); AjaxButton addLink = new AjaxButton("addLink", new ResourceModel("add.link"), infoForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { metaDataModalWindow.setContent(new AddLinkPanel(metaDataModalWindow.getContentId())); metaDataModalWindow.show(target); } }; infoForm.add(addLink); addFolder.setVisibilityAllowed(true); addPage.setVisibilityAllowed(true); addLink.setVisibilityAllowed(true); SiteTreeNode node = getUserSelectedNode(); if (node.getDocType() == SiteTreeNode.FileType.Folder) { urlLabel.setVisible(false); urlField.setVisible(false); targetLabel.setVisible(false); targetField.setVisible(false); addFolder.setVisible(true); addPage.setVisible(true); addLink.setVisible(true); } else if (node.getDocType() == SiteTreeNode.FileType.Page) { defaultPageLabel.setVisible(false); defaultPageField.setVisible(false); urlLabel.setVisible(false); urlField.setVisible(false); targetLabel.setVisible(false); targetField.setVisible(false); addFolder.setVisible(false); addPage.setVisible(false); addLink.setVisible(false); } else if (node.getDocType() == SiteTreeNode.FileType.Link) { defaultPageLabel.setVisible(false); defaultPageField.setVisible(false); targetLabel.setVisible(true); defaultPageField.setVisible(false); pageDecoratorLabel.setVisible(false); decoratorsList.setVisible(false); portletDecoratorLabel.setVisible(false); portletDecoratorsList.setVisible(false); themeField.setVisible(false); themeLabel.setVisible(false); addFolder.setVisible(false); addPage.setVisible(false); addLink.setVisible(false); } if (node.getDocType() == SiteTreeNode.FileType.Link) { ExternalLink viewLink = new ExternalLink("view", new Model(getDocument().getUrl()), new ResourceModel("common.view")) { @Override protected void onComponentTag(ComponentTag tag) { super.onComponentTag(tag); if (tag.getName().equalsIgnoreCase("input") && ((getLabel() != null) && (getLabel().getObject() != null))) { tag.put("value", getDefaultModelObjectAsString(getLabel().getObject())); } } }; viewLink.setPopupSettings(new PopupSettings()); infoForm.add(viewLink); } else { RequestContext context = (RequestContext) getPortletRequest() .getAttribute(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE); String basePath = context.getPortalURL().getBasePath().replace("portal", "configure"); ExternalLink viewLink = new ExternalLink("view", new Model(basePath + getDocument().getPath()), new ResourceModel("common.view")) { @Override protected void onComponentTag(ComponentTag tag) { super.onComponentTag(tag); if (tag.getName().equalsIgnoreCase("input") && ((getLabel() != null) && (getLabel().getObject() != null))) { tag.put("value", getDefaultModelObjectAsString(getLabel().getObject())); } } }; viewLink.setPopupSettings(new PopupSettings()); infoForm.add(viewLink); } infoForm.add(new AjaxButton("remove", new ResourceModel("common.remove"), infoForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form form) { excuteAction(getDocument(), REMOVE_ACTION); DefaultMutableTreeNode node = getSelectedNode(); if (node != null && node.getParent() != null) { DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) node.getParent(); parentNode.remove(node); LinkTree tree = (PortalTree) getPage().get("siteTree"); tree.updateTree(target); } } }.add(new JavascriptEventConfirmation("onclick", new ResourceModel("action.delete.confirm")))); infoForm.add(new AjaxButton("save", new ResourceModel("common.save"), infoForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form form) { excuteAction(getDocument(), SAVE_ACTION); } }); infoForm.add(new AjaxButton("copy", new ResourceModel("common.copy"), infoForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { SiteTreeNode selectedNode = getUserSelectedNode(); metaDataModalWindow.setContent( new CopyMoveWindow(metaDataModalWindow.getContentId(), selectedNode.getDocType().name(), selectedNode.getNodeName(), getUserSelectedNode().getNodePath(), true)); metaDataModalWindow.show(target); } }); infoForm.add(new AjaxButton("move", new ResourceModel("common.move"), infoForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { SiteTreeNode selectedNode = getUserSelectedNode(); metaDataModalWindow.setContent( new CopyMoveWindow(metaDataModalWindow.getContentId(), selectedNode.getDocType().name(), selectedNode.getNodeName(), getUserSelectedNode().getNodePath(), false)); metaDataModalWindow.show(target); } }); add(infoForm); } } 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")); final WebMarkupContainer ajaxPanel = new WebMarkupContainer("basePanel"); ajaxPanel.setOutputMarkupId(true); ajaxPanel.add(new Label("constraintLabel", new ResourceModel("security.constraint.title"))); ajaxPanel.add(new Label("constraintTypeLabel", new ResourceModel("security.type.title"))); ajaxPanel.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", new ResourceModel("security.ref"))); AjaxLink editLink = new AjaxLink("edit") { @Override public void onClick(AjaxRequestTarget target) { metaDataModalWindow.setContent(new SecurityTabWindowPanel( metaDataModalWindow.getContentId(), constraints, ajaxPanel)); metaDataModalWindow.show(target); target.addComponent(ajaxPanel); } }; editLink.add(new Label("editLabel", new ResourceModel("common.edit"))); listItem.add(editLink); AjaxLink deleteLink = new AjaxLink("delete") { @Override public void onClick(AjaxRequestTarget target) { securityConstraintAction(REMOVE_ACTION, constraints, ""); target.addComponent(ajaxPanel); } }; deleteLink.add( new JavascriptEventConfirmation("onclick", new ResourceModel("action.delete.confirm"))); deleteLink.add(new Label("deleteLabel", new ResourceModel("common.delete"))); listItem.add(deleteLink); } }); Form securityForm = new Form("securityFrom"); add(new AjaxButton("new", new ResourceModel("common.new"), securityForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { metaDataModalWindow.setContent( new SecurityTabWindowPanel(metaDataModalWindow.getContentId(), "", ajaxPanel)); metaDataModalWindow.show(target); } }); add(ajaxPanel); add(securityForm); } } protected class MetaDataTab extends BasePanel { private static final long serialVersionUID = 6429774536790672910L; public MetaDataTab(String id, JetspeedDocument doc) { super(id, doc); final ModalWindow metaDataModalWindow; final WebMarkupContainer ajaxPanel = new WebMarkupContainer("basePanel"); add(metaDataModalWindow = new ModalWindow("modalwindow")); ajaxPanel.add(new Label("nameLabel", new ResourceModel("metedataTab.name"))); ajaxPanel.add(new Label("languageLabel", new ResourceModel("metedataTab.language"))); final 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())); AjaxLink editLink = new AjaxLink("edit", new Model("edit")) { @Override public void onClick(AjaxRequestTarget target) { metaDataModalWindow.setContent( new MetaDataPanel(metaDataModalWindow.getContentId(), metaData, ajaxPanel)); metaDataModalWindow.show(target); } }; editLink.add(new Label("editLabel", new ResourceModel("common.edit"))); listItem.add(editLink); AjaxLink deleteLink = new AjaxLink("delete", new Model("delete")) { private static final long serialVersionUID = 1L; @Override public void onClick(AjaxRequestTarget target) { metaDataAction(REMOVE_ACTION, metaData, null); target.addComponent(ajaxPanel); } }; deleteLink.add(new Label("deleteLabel", new ResourceModel("common.delete"))); deleteLink.add( new JavascriptEventConfirmation("onclick", new ResourceModel("action.delete.confirm"))); listItem.add(deleteLink); } }; metaDataListView.setOutputMarkupId(true); ajaxPanel.setOutputMarkupId(true); ajaxPanel.add(metaDataListView); Form metaForm = new Form("metaForm"); add(metaForm); add(new AjaxButton("new", new ResourceModel("common.new"), metaForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { metaDataModalWindow.setContent(new MetaDataPanel(metaDataModalWindow.getContentId(), new JetspeedDocumentMetaData("", "", ""), ajaxPanel)); metaDataModalWindow.show(target); } }); add(ajaxPanel); } } 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, final String constrainName, final WebMarkupContainer markUp) { super(id); this.constraintName = constrainName; final FeedbackPanel feedback = new FeedbackPanel("feedback"); feedback.setOutputMarkupId(true); add(feedback); Form securityTabForm = new Form("securityDataForm"); securityTabForm.add(new Label("securityConstraintLabel", "Security Constraint")); DropDownChoice constraintsChoices = new DropDownChoice("constraints", new PropertyModel(this, "constraintName"), getConstraintsDef()); constraintsChoices.setRequired(true); securityTabForm.add(constraintsChoices); securityTabForm.add(new AjaxButton("save", new ResourceModel("common.save"), securityTabForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form form) { securityConstraintAction(SAVE_ACTION, getConstraintName(), constrainName); ((ModalWindow) SecurityTabWindowPanel.this.getParent()).close(target); target.addComponent(markUp); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { target.addComponent(feedback); } }); add(securityTabForm); } } protected class OptionsWindow extends WindowPanel { private static final long serialVersionUID = -3223669376958653554L; private OptionsDefinitionBean optionsDefinition; /** * @return the optionsDefinition */ public OptionsDefinitionBean getOptionsDefinition() { return optionsDefinition; } /** * @param optionsDefinition * the optionsDefinition to set */ public void setOptionsDefinition(OptionsDefinitionBean optionsDefinition) { this.optionsDefinition = optionsDefinition; } public OptionsWindow(String id, MenuOptionsDefinition options, final WebMarkupContainer markUp) { super(id); final String name = options.getOptions(); this.optionsDefinition = new OptionsDefinitionBean(options); final Form menuform = new Form("menuForm"); menuform.add(new TextField("optionsField", new PropertyModel(this, "optionsDefinition.options"))); menuform.add(new Label("optionLabel", new ResourceModel("menu.option"))); menuform.add(new TextField("depthField", new PropertyModel(this, "optionsDefinition.depth"))); menuform.add(new Label("depthLabel", new ResourceModel("menu.depth"))); menuform.add(new CheckBox("pathField", new PropertyModel(this, "optionsDefinition.paths"))); menuform.add(new Label("pathLabel", new ResourceModel("menu.path"))); menuform.add(new CheckBox("regExpField", new PropertyModel(this, "optionsDefinition.regexp"))); menuform.add(new Label("regExpLabel", new ResourceModel("menu.regExp"))); menuform.add(new TextField("profileField", new PropertyModel(this, "optionsDefinition.profile"))); menuform.add(new Label("profileLabel", new ResourceModel("menu.profile"))); menuform.add(new TextField("skinField", new PropertyModel(this, "optionsDefinition.skin"))); menuform.add(new Label("skinLabel", new ResourceModel("menu.skin"))); menuform.add(new TextField("orderField", new PropertyModel(this, "optionsDefinition.order"))); menuform.add(new Label("orderLabel", new ResourceModel("menu.order"))); menuform.add(new AjaxButton("save", new ResourceModel("common.save")) { protected void onSubmit(AjaxRequestTarget target, Form menuform) { menuActions(SAVE_ACTION, name, getOptionsDefinition()); ((ModalWindow) OptionsWindow.this.getParent()).close(target); target.addComponent(markUp); } }); add(menuform); } } protected class MenuWindow extends WindowPanel { private JetspeedMenuDefinition menuDef; public JetspeedMenuDefinition getMenuDef() { return menuDef; } public void setMenuDef(JetspeedMenuDefinition menuDef) { this.menuDef = menuDef; } public MenuWindow(String id, final MenuDefinition definition, final AjaxTabbedPanel tabPanel) { super(id); this.menuDef = new JetspeedMenuDefinition(definition); final FeedbackPanel feedback = new FeedbackPanel("feedback"); feedback.setOutputMarkupId(true); add(feedback); Form menuform = new Form("menuForm"); TextField nameField = new RequiredTextField("nameField", new PropertyModel(this, "menuDef.name")); menuform.add(new Label("nameLabel", new ResourceModel("common.name"))); menuform.add(nameField); TextField optionsField = new TextField("optionsField", new PropertyModel(this, "menuDef.options")); menuform.add(new Label("optionLabel", new ResourceModel("menu.option"))); menuform.add(optionsField); TextField depthField = new TextField("depthField", new PropertyModel(this, "menuDef.depth")); menuform.add(new Label("depthLabel", new ResourceModel("menu.depth"))); menuform.add(depthField); CheckBox pathField = new CheckBox("pathField", new PropertyModel(this, "menuDef.paths")); menuform.add(new Label("pathLabel", new ResourceModel("menu.path"))); menuform.add(pathField); CheckBox regExpField = new CheckBox("regExpField", new PropertyModel(this, "menuDef.regexp")); menuform.add(new Label("regExpLabel", new ResourceModel("menu.regExp"))); menuform.add(regExpField); TextField profileField = new TextField("profileField", new PropertyModel(this, "menuDef.profile")); menuform.add(new Label("profileLabel", new ResourceModel("menu.profile"))); menuform.add(profileField); TextField titleField = new TextField("titleField", new PropertyModel(this, "menuDef.title")); menuform.add(new Label("titleLabel", new ResourceModel("menu.title"))); menuform.add(titleField); TextField skinField = new TextField("skinField", new PropertyModel(this, "menuDef.skin")); menuform.add(new Label("skinLabel", new ResourceModel("menu.skin"))); menuform.add(skinField); TextField orderField = new TextField("orderField", new PropertyModel(this, "menuDef.order")); menuform.add(new Label("orderLabel", new ResourceModel("menu.order"))); menuform.add(orderField); menuform.add(new AjaxButton("save", new ResourceModel("common.save"), menuform) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { menuActions(SAVE_ACTION, definition.getName(), getMenuDef()); DefaultMutableTreeNode rootNode = (DefaultMutableTreeNode) menuTreeRoot.getRoot(); DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(new MenuTreeNode( getMenuDef().getName(), document.getPath(), document.getType(), getServiceLocator())); rootNode.insert(childNode, rootNode.getChildCount()); menuTree.getTreeState().expandNode(rootNode); menuTree.getTreeState().selectNode(childNode, true); menuTree.updateTree(target); controlMenuTabs(true); tabPanel.setSelectedTab(0); target.addComponent(menuTree); ((ModalWindow) MenuWindow.this.getParent()).close(target); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { target.addComponent(feedback); } }); add(menuform); } } protected class IncludesWindow extends WindowPanel { private static final long serialVersionUID = -3223669376958653554L; private IncludesDefinitionBean includes; /** * @return the includes */ public IncludesDefinitionBean getIncludes() { return includes; } /** * @param includes * the includes to set */ public void setIncludes(IncludesDefinitionBean includes) { this.includes = includes; } public IncludesWindow(String id, MenuIncludeDefinition includes, final WebMarkupContainer markUp) { super(id); final String includesName = includes.getName(); this.includes = new IncludesDefinitionBean(includes); final MenuIncludeDefinition oldDef = includes; final Form menuform = new Form("menuForm"); menuform.add(new TextField("nameField", new PropertyModel(this, "includes.name"))); menuform.add(new CheckBox("nestField", new PropertyModel(this, "includes.nest"))); menuform.add(new Label("namelabel", new ResourceModel("common.name"))); menuform.add(new Label("nestlabel", new ResourceModel("menu.nest.label"))); menuform.add(new AjaxButton("save", new ResourceModel("common.save"), menuform) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { menuActions(SAVE_ACTION, includesName, getIncludes()); ((ModalWindow) IncludesWindow.this.getParent()).close(target); target.addComponent(markUp); } }); add(menuform); } } protected class ExcludesWindow extends WindowPanel { private static final long serialVersionUID = -3223669376958653554L; private ExcludesDefinitionBean excludes; /** * @return the excludes */ public ExcludesDefinitionBean getExcludes() { return excludes; } /** * @param excludes * the excludes to set */ public void setExcludes(ExcludesDefinitionBean excludes) { this.excludes = excludes; } public ExcludesWindow(String id, MenuExcludeDefinition excludes, final WebMarkupContainer markUp) { super(id); final String excludeName = excludes.getName(); this.excludes = new ExcludesDefinitionBean(excludes); final Form menuform = new Form("menuForm"); menuform.add(new Label("namelabel", new ResourceModel("common.name"))); menuform.add(new TextField("nameField", new PropertyModel(this, "excludes.name"))); menuform.add(new AjaxButton("save", new ResourceModel("common.save"), menuform) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { menuActions(SAVE_ACTION, excludeName, getExcludes()); ((ModalWindow) ExcludesWindow.this.getParent()).close(target); target.addComponent(markUp); } }); add(menuform); } } protected class SeparatorWindow extends WindowPanel { private static final long serialVersionUID = -3223669376958653554L; private SeparatorDefinitionBean separator; /** * @return the constraintName */ public SeparatorDefinitionBean getSeparator() { return separator; } /** * @param constraintName * the constraintName to set */ public void setSeparator(SeparatorDefinitionBean constraintName) { this.separator = constraintName; } public SeparatorWindow(String id, MenuSeparatorDefinition separator, final WebMarkupContainer markUp) { super(id); this.separator = new SeparatorDefinitionBean(separator); final String textName = separator.getText(); Form separatorForm = new Form("separatorDataForm"); separatorForm.add(new TextField("separatorText", new PropertyModel(this, "separator.text"))); separatorForm.add(new TextField("separatorTitle", new PropertyModel(this, "separator.title"))); separatorForm.add(new Label("nameLabel", new ResourceModel("common.name"))); separatorForm.add(new Label("titleLabel", new ResourceModel("common.title"))); separatorForm.add(new AjaxButton("save", new ResourceModel("common.save"), separatorForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form form) { menuActions(SAVE_ACTION, textName, getSeparator()); ((ModalWindow) SeparatorWindow.this.getParent()).close(target); target.addComponent(markUp); } }); add(separatorForm); } } protected class ImportDataTab extends BasePanel { private static final long serialVersionUID = 3676403374892366510L; private boolean recursively = false; private FileUpload fileUpload; private ExportJetspeedObject exportObject; private boolean copyIdsOnImport = true; /** * @return the recursively */ public boolean isRecursively() { return recursively; } /** * @param recursively * the recursively to set */ public void setRecursively(boolean recursively) { this.recursively = recursively; } /** * @return the fileUploadField */ public FileUpload getFileUploadField() { return fileUpload; } /** * @param fileUploadField * the fileUploadField to set */ public void setFileUploadField(FileUpload fileUploadField) { this.fileUpload = fileUploadField; } public boolean getCopyIdsOnImport() { return copyIdsOnImport; } public void setCopyIdsOnImport(boolean copyIdsOnImport) { this.copyIdsOnImport = copyIdsOnImport; } 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"); AjaxCheckBox exportChkBox = new AjaxCheckBox("recursively", new PropertyModel(this, "recursively")) { @Override protected void onUpdate(AjaxRequestTarget target) { } }; 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); exportObject = new ExportJetspeedObject(); DynamicResourceLink exportButton = new DynamicResourceLink("exprtButton", new PropertyModel(this, "exportObject")) { @Override public void onClick() { if (node.getDocType().equals(SiteTreeNode.FileType.Folder)) { exportObject.setFileName(getDocument().getName() + ".zip"); } else { exportObject.setFileName(getDocument().getName()); } exportObject.setNode(getUserSelectedNode()); exportObject.setUserName(getPortletRequest().getUserPrincipal().getName()); exportObject.setRecursively(isRecursively()); } }; exportForm.add(exportButton); add(exportForm); // Adding Upload form Folder Form uploadForm = new Form("uploadForm"); add(uploadForm); uploadForm.setVisibilityAllowed(true); uploadForm.setVisible(false); if (node.getDocType().equals(FileType.Folder)) { uploadForm.setMultiPart(true); // Add one file input field uploadForm.add(new FileUploadField("fileInput", new PropertyModel(this, "fileUploadField"))); uploadForm.add(new CheckBox("copyIdsOnImport", new PropertyModel(this, "copyIdsOnImport"))); uploadForm.add(new Button("uploadFile") { /* * (non-Javadoc) * * @see org.apache.wicket.markup.html.form.Button#onSubmit() */ /** * */ @Override public void onSubmit() { final FileUpload upload = fileUpload; final String userName = getPortletRequest().getUserPrincipal().getName(); String pathSeparator = System.getProperty("file.separator"); boolean copyIds = getCopyIdsOnImport(); boolean success = false; if (upload != null) { try { PageManager pageManager = getServiceLocator().getPageManager(); String fileName = upload.getClientFileName(); String fileType = fileExt(upload.getClientFileName()); cleanUserFolder(userName); String usrFolder = getTempFolder(userName); String destPath = node.getNodePath(); upload.writeTo(new File(usrFolder + pathSeparator + upload.getClientFileName())); // File writed in temp folder if (fileType != null && !fileType.equals("") && fileName != null && !fileName.equals("") && destPath != null && !destPath.equals("")) { // if "/" is path, then file separator will // work, as root. if (destPath.equals("/")) destPath = ""; Folder folder = getServiceLocator().getCastorPageManager().getFolder(userName); if (fileType.equalsIgnoreCase("psml")) { Page source = folder.getPage(fileName); Page page = null; if (pageManager.pageExists(destPath + pathSeparator + fileName)) { pageManager.removePage( pageManager.getPage(destPath + pathSeparator + fileName)); } page = pageManager.copyPage(source, destPath + pathSeparator + fileName, copyIds); pageManager.updatePage(page); success = true; } else if (fileType.equalsIgnoreCase("tpsml")) { PageTemplate source = folder.getPageTemplate(fileName); PageTemplate pageTemplate = null; if (pageManager.pageTemplateExists(destPath + pathSeparator + fileName)) { pageManager.removePageTemplate(pageManager .getPageTemplate(destPath + pathSeparator + fileName)); } pageTemplate = pageManager.copyPageTemplate(source, destPath + pathSeparator + fileName, copyIds); pageManager.updatePageTemplate(pageTemplate); success = true; } else if (fileType.equalsIgnoreCase("dpsml")) { DynamicPage source = folder.getDynamicPage(fileName); DynamicPage dynamicPage = null; if (pageManager.dynamicPageExists(destPath + pathSeparator + fileName)) { pageManager.removeDynamicPage(pageManager .getDynamicPage(destPath + pathSeparator + fileName)); } dynamicPage = pageManager.copyDynamicPage(source, destPath + pathSeparator + fileName, copyIds); pageManager.updateDynamicPage(dynamicPage); success = true; } else if (fileType.equalsIgnoreCase("fpsml")) { FragmentDefinition source = folder.getFragmentDefinition(fileName); FragmentDefinition fragmentDefinition = null; if (pageManager .fragmentDefinitionExists(destPath + pathSeparator + fileName)) { pageManager.removeFragmentDefinition(pageManager .getFragmentDefinition(destPath + pathSeparator + fileName)); } fragmentDefinition = pageManager.copyFragmentDefinition(source, destPath + pathSeparator + fileName, copyIds); pageManager.updateFragmentDefinition(fragmentDefinition); success = true; } else if (fileType.equalsIgnoreCase("link")) { Link source = folder.getLink(fileName); Link link; if (pageManager.linkExists(destPath + pathSeparator + fileName)) { pageManager.removeLink( pageManager.getLink(destPath + pathSeparator + fileName)); link = pageManager.copyLink(source, destPath + pathSeparator + fileName); } link = pageManager.copyLink(source, destPath + pathSeparator + fileName); pageManager.updateLink(link); success = true; } else if (fileType.equalsIgnoreCase("zip")) { unzipfile(fileName, StringUtils.removeEnd(usrFolder, pathSeparator), pathSeparator); folder = getServiceLocator().getCastorPageManager().getFolder(userName); importFolders(pageManager, getServiceLocator().getCastorPageManager(), folder, userName, destPath, copyIds); success = true; } } } catch (Exception e) { log.error("Unexpected error during uploading page(s) or folder(s).", e); } getUserSelectedNode().setLoaded(false); } } }); uploadForm.setVisible(true); } } } protected class MetaDataPanel extends Panel { private JetspeedDocumentMetaData metaData; private JetspeedDocumentMetaData oldMetaData; public MetaDataPanel(String id, JetspeedDocumentMetaData jmetaData, final WebMarkupContainer markup) { super(id); final FeedbackPanel feedback = new FeedbackPanel("feedback"); feedback.setOutputMarkupId(true); add(feedback); 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", new ResourceModel("metedataTab.name"))); fc = new RequiredTextField("language", new PropertyModel(this, "metaData.language")); fc.add(StringValidator.minimumLength(2)); metaDataForm.add(fc); metaDataForm.add(new Label("language-label", new ResourceModel("metedataTab.language"))); fc = new RequiredTextField("metaValue", new PropertyModel(this, "metaData.value")); fc.add(StringValidator.minimumLength(2)); metaDataForm.add(fc); metaDataForm.add(new Label("value-label", new ResourceModel("metedataTab.value"))); metaDataForm.add(new AjaxButton("save", new ResourceModel("common.save"), metaDataForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form form) { metaDataAction(SAVE_ACTION, metaData, oldMetaData); ((ModalWindow) MetaDataPanel.this.getParent()).close(target); target.addComponent(markup); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { target.addComponent(feedback); } }); add(metaDataForm); } } protected class DocumentOrderingTabPanel extends BasePanel { List<String> listChoice = new ArrayList<String>(); String orderedList = ""; public DocumentOrderingTabPanel(String id, JetspeedDocument document) { super(id, document); getSubFoldersPage(getDocument()); Form documentOrdering = new Form("docuOrderingForm"); Label doucmentOrderLabel = new Label("doucmentOrderLabel", "Document ordering"); documentOrdering.add(doucmentOrderLabel); final ListMultipleChoice documnetOrder = new ListMultipleChoice("docOrders", new PropertyModel(this, "listChoice"), getDocument().getDocumentOrder()); final HiddenField pageOrder = new HiddenField("pageOrder", new PropertyModel(this, "orderedList")); documentOrdering.add(documnetOrder); documentOrdering.add(pageOrder); documentOrdering.add(new AjaxButton("save", new ResourceModel("common.save"), documentOrdering) { @Override protected void onSubmit(AjaxRequestTarget target, Form form) { metaOrderAction(getDocument(), getOrderedList()); } @Override protected IAjaxCallDecorator getAjaxCallDecorator() { return new AjaxPreprocessingCallDecorator(super.getAjaxCallDecorator()) { private static final long serialVersionUID = 7495281332320552876L; @Override public CharSequence preDecorateScript(CharSequence script) { return "convertToString();" + script; } }; } }); add(documentOrdering); } /** * @return the orderedList */ public String getOrderedList() { return orderedList; } /** * @param orderedList * the orderedList to set */ public void setOrderedList(String orderedList) { this.orderedList = orderedList; } /** * @return the listChoice */ public List<String> getListChoice() { return listChoice; } /** * @param listChoice * the listChoice to set */ public void setListChoice(List<String> listChoice) { this.listChoice = listChoice; } } protected class MenuTabPanel extends BasePanel { public DefaultTreeModel getMenuTreeRoot() { return menuTreeRoot; } public MenuTabPanel(String id, JetspeedDocument document) { super(id, document); ITab tab = null; DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("_MenusRootNode_"); final ModalWindow metaDataModalWindow; add(metaDataModalWindow = new ModalWindow("modalwindow")); // Adding menu tree node menuTreeRoot = new DefaultTreeModel(rootNode); controlMenuTabs(false); final AjaxTabbedPanel menusTab = new AjaxTabbedPanel("menuTabs", menuTabs); menuTree = new LinkTree("menuTree", new PropertyModel(this, "menuTreeRoot")) { @Override protected void onNodeLinkClicked(Object node, BaseTree tree, AjaxRequestTarget target) { Object userObject = ((DefaultMutableTreeNode) node).getUserObject(); if (!(userObject instanceof MenuTreeNode)) { return; } MenuTreeNode menuNode = (MenuTreeNode) userObject; if (menuNode.getName() != null && !menuNode.getName().equalsIgnoreCase("_MenusRootNode_")) { setMenuDefinition(menuNode.getDefinition()); controlMenuTabs(true); menusTab.setSelectedTab(0); target.addComponent(menusTab); } } }; if (getNodeType().equals(FOLDER_NODE_TYPE)) { setMenuDefinition(getServiceLocator().getPageManager().newFolderMenuDefinition()); } else { setMenuDefinition(getServiceLocator().getPageManager().newPageMenuDefinition()); } getServiceLocator().getPageManager().newFolderMenuDefinition(); // menusTab.setSelectedTab(0); getMenus(getDocument(), rootNode); menuTree.getTreeState().expandNode(rootNode); menuTree.setRootLess(true); add(new ContextImage("menusRootIcon", "images/tree/folder.gif")); add(menuTree); Form menuForm = new Form("menuForm"); add(menuForm); add(new AjaxButton("newsave", new ResourceModel("add.menu"), menuForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { MenuDefinition def = null; if (getNodeType().equals(FOLDER_NODE_TYPE)) { def = getServiceLocator().getPageManager().newFolderMenuDefinition(); } else { def = getServiceLocator().getPageManager().newPageMenuDefinition(); } metaDataModalWindow .setContent(new MenuWindow(metaDataModalWindow.getContentId(), def, menusTab)); metaDataModalWindow.show(target); } }); add(new AjaxButton("remove", new ResourceModel("common.remove"), menuForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { menuActions(REMOVE_ACTION, getMenuDefinition().getName(), new JetspeedMenuDefinition()); DefaultMutableTreeNode rootNode = (DefaultMutableTreeNode) menuTreeRoot.getRoot(); DefaultMutableTreeNode childNode = new DefaultMutableTreeNode( new MenuTreeNode(getMenuDefinition().getName(), getServiceLocator())); rootNode.remove(childNode); menuTree.getTreeState().expandNode(rootNode); menuTree.updateTree(target); target.addComponent(menuTree); target.addComponent(tabPanel); } }.add(new JavascriptEventConfirmation("onclick", new ResourceModel("action.delete.confirm")))); add(menusTab); } /** * @return the menuTabs */ public List<ITab> getMenuTabs() { return getMenuTab(); } } protected class MenuInfoPanel extends MenuBasePanel { private JetspeedMenuDefinition menuDef; public JetspeedMenuDefinition getMenuDef() { return menuDef; } public void setMenuDef(JetspeedMenuDefinition menuDef) { this.menuDef = menuDef; } public MenuInfoPanel(String id, JetspeedDocument document, MenuDefinition definition) { super(id, document, definition); final String menuDefinitionName = definition.getName(); setMenuDef(new JetspeedMenuDefinition((MenuDefinition) copyMenuElement(getNodeType(), definition))); final WebMarkupContainer ajaxPanel = new WebMarkupContainer("ajaxPanel"); final FeedbackPanel feedbackPanel = new FeedbackPanel("feedback"); ajaxPanel.setOutputMarkupId(true); Form menuform = new Form("menuForm"); TextField nameField = new RequiredTextField("nameField", new PropertyModel(this, "menuDef.name")); menuform.add(nameField); TextField optionsField = new TextField("optionsField", new PropertyModel(this, "menuDef.options")); menuform.add(optionsField); TextField depthField = new TextField("depthField", new PropertyModel(this, "menuDef.depth")); menuform.add(depthField); CheckBox pathField = new CheckBox("pathField", new PropertyModel(this, "menuDef.paths")); menuform.add(pathField); CheckBox regExpField = new CheckBox("regExpField", new PropertyModel(this, "menuDef.regexp")); menuform.add(regExpField); TextField profileField = new TextField("profileField", new PropertyModel(this, "menuDef.profile")); menuform.add(profileField); TextField titleField = new TextField("titleField", new PropertyModel(this, "menuDef.title")); menuform.add(titleField); TextField skinField = new TextField("skinField", new PropertyModel(this, "menuDef.skin")); menuform.add(skinField); TextField orderField = new TextField("orderField", new PropertyModel(this, "menuDef.order")); menuform.add(orderField); AjaxButton saveButton = new AjaxButton("save", menuform) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { menuActions(SAVE_ACTION, menuDefinitionName, getMenuDef()); target.addComponent(ajaxPanel); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { target.addComponent(feedbackPanel); } }; menuform.add(saveButton); ajaxPanel.add(menuform); add(ajaxPanel); add(feedbackPanel); } } protected class MenuSeparatorPanel extends MenuBasePanel { public MenuSeparatorPanel(String id, JetspeedDocument document, MenuDefinition definition) { super(id, document, definition); final ModalWindow metaDataModalWindow; getMenuElements(definition, MenuElement.SEPARATOR_ELEMENT_TYPE); add(metaDataModalWindow = new ModalWindow("modalwindow")); final WebMarkupContainer ajaxPanel = new WebMarkupContainer("basePanel"); ajaxPanel.setOutputMarkupId(true); ajaxPanel.add(new Label("textLabel", new ResourceModel("menu.text"))); ajaxPanel.add(new Label("titleLabel", new ResourceModel("menu.title"))); ajaxPanel.add(new ListView("separator", new PropertyModel(this, "menuOptions")) { public void populateItem(final ListItem listItem) { final MenuSeparatorDefinition separator = (MenuSeparatorDefinition) listItem.getModelObject(); listItem.add(new Label("text", separator.getText())); listItem.add(new Label("title", separator.getTitle())); AjaxLink editLink = new AjaxLink("edit") { @Override public void onClick(AjaxRequestTarget target) { metaDataModalWindow.setContent( new SeparatorWindow(metaDataModalWindow.getContentId(), separator, ajaxPanel)); metaDataModalWindow.show(target); } }; editLink.add(new Label("editLabel", new ResourceModel("common.edit"))); listItem.add(editLink); AjaxLink deleteLink = new AjaxLink("delete") { @Override public void onClick(AjaxRequestTarget target) { menuActions(REMOVE_ACTION, separator.getText(), new SeparatorDefinitionBean()); target.addComponent(ajaxPanel); } }; deleteLink.add(new Label("deleteLabel", new ResourceModel("common.delete"))); deleteLink.add( new JavascriptEventConfirmation("onclick", new ResourceModel("action.delete.confirm"))); listItem.add(deleteLink); } }); Form separtorForm = new Form("sepForm"); add(separtorForm); add(new AjaxButton("new", new ResourceModel("common.new"), separtorForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { MenuSeparatorDefinition separatorDefinition = null; if (getUserSelectedNode().getDocType() == FileType.Folder) { separatorDefinition = getServiceLocator().getPageManager() .newFolderMenuSeparatorDefinition(); } else { separatorDefinition = getServiceLocator().getPageManager().newPageMenuSeparatorDefinition(); } metaDataModalWindow.setContent(new SeparatorWindow(metaDataModalWindow.getContentId(), separatorDefinition, ajaxPanel)); metaDataModalWindow.show(target); } }); add(ajaxPanel); } } protected class MenuExlcudesPanel extends MenuBasePanel { public MenuExlcudesPanel(String id, JetspeedDocument document, MenuDefinition definition) { super(id, document, definition); getMenuElements(definition, EXCLUDES); final ModalWindow metaDataModalWindow; add(metaDataModalWindow = new ModalWindow("modalwindow")); final WebMarkupContainer ajaxPanel = new WebMarkupContainer("basePanel"); ajaxPanel.setOutputMarkupId(true); ajaxPanel.add(new Label("nameLabel", new ResourceModel("common.name"))); ajaxPanel.add(new ListView("menuData", new PropertyModel(this, "menuOptions")) { public void populateItem(final ListItem listItem) { final MenuExcludeDefinition option = (MenuExcludeDefinition) listItem.getModelObject(); listItem.add(new Label("name", option.getName())); AjaxLink editLink = new AjaxLink("edit") { @Override public void onClick(AjaxRequestTarget target) { metaDataModalWindow.setContent( new ExcludesWindow(metaDataModalWindow.getContentId(), option, ajaxPanel)); metaDataModalWindow.show(target); } }; editLink.add(new Label("editLabel", new ResourceModel("common.edit"))); listItem.add(editLink); AjaxLink deleteLink = new AjaxLink("delete") { @Override public void onClick(AjaxRequestTarget target) { menuActions(REMOVE_ACTION, option.getName(), new ExcludesDefinitionBean()); target.addComponent(ajaxPanel); } }; deleteLink.add( new JavascriptEventConfirmation("onclick", new ResourceModel("action.delete.confirm"))); deleteLink.add(new Label("deleteLabel", new ResourceModel("common.delete"))); listItem.add(deleteLink); } }); Form excludeForm = new Form("excludeForm"); add(excludeForm); add(new AjaxButton("new", new ResourceModel("common.new"), excludeForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { MenuExcludeDefinition excludeDefinition = null; if (getUserSelectedNode().getDocType() == FileType.Folder) { excludeDefinition = getServiceLocator().getPageManager().newFolderMenuExcludeDefinition(); } else { excludeDefinition = getServiceLocator().getPageManager().newPageMenuExcludeDefinition(); } metaDataModalWindow.setContent( new ExcludesWindow(metaDataModalWindow.getContentId(), excludeDefinition, ajaxPanel)); metaDataModalWindow.show(target); } }); add(ajaxPanel); } } protected class MenuIncludesPanel extends MenuBasePanel { public MenuIncludesPanel(String id, JetspeedDocument document, MenuDefinition definition) { super(id, document, definition); getMenuElements(definition, INCLUDES); final ModalWindow metaDataModalWindow; add(metaDataModalWindow = new ModalWindow("modalwindow")); final WebMarkupContainer ajaxPanel = new WebMarkupContainer("basePanel"); ajaxPanel.setOutputMarkupId(true); ajaxPanel.add(new Label("nameLabel", new ResourceModel("common.name"))); ajaxPanel.add(new Label("nestedLabel", new ResourceModel("menu.nest.label"))); ajaxPanel.add(new ListView("menuData", new PropertyModel(this, "menuOptions")) { public void populateItem(final ListItem listItem) { final MenuIncludeDefinition option = (MenuIncludeDefinition) listItem.getModelObject(); listItem.add(new Label("name", option.getName())); listItem.add(new Label("nest", Boolean.toString(option.isNest()))); AjaxLink editLink = new AjaxLink("edit") { @Override public void onClick(AjaxRequestTarget target) { metaDataModalWindow.setContent( new IncludesWindow(metaDataModalWindow.getContentId(), option, ajaxPanel)); metaDataModalWindow.show(target); } }; editLink.add(new Label("editLabel", new ResourceModel("common.edit"))); listItem.add(editLink); AjaxLink deleteLink = new AjaxLink("delete") { @Override public void onClick(AjaxRequestTarget target) { menuActions(REMOVE_ACTION, option.getName(), new IncludesDefinitionBean()); target.addComponent(ajaxPanel); } }; deleteLink.add( new JavascriptEventConfirmation("onclick", new ResourceModel("action.delete.confirm"))); deleteLink.add(new Label("deleteLabel", new ResourceModel("common.delete"))); listItem.add(deleteLink); } }); add(new AjaxLink("new") { @Override public void onClick(AjaxRequestTarget target) { MenuIncludeDefinition includeDefinition = null; if (getUserSelectedNode().getDocType() == FileType.Folder) { includeDefinition = getServiceLocator().getPageManager().newFolderMenuIncludeDefinition(); } else { includeDefinition = getServiceLocator().getPageManager().newPageMenuIncludeDefinition(); } metaDataModalWindow.setContent( new IncludesWindow(metaDataModalWindow.getContentId(), includeDefinition, ajaxPanel)); metaDataModalWindow.show(target); } }); add(ajaxPanel); } } protected class MenuOptionsPanel extends MenuBasePanel { public MenuOptionsPanel(String id, JetspeedDocument document, MenuDefinition definition) { super(id, document, definition); getMenuElements(getMenuDefinition(), MenuElement.OPTION_ELEMENT_TYPE); final ModalWindow metaDataModalWindow; add(metaDataModalWindow = new ModalWindow("modalwindow")); final WebMarkupContainer ajaxPanel = new WebMarkupContainer("basePanel"); ajaxPanel.setOutputMarkupId(true); ajaxPanel.add(new ListView("menuData", new PropertyModel(this, "menuOptions")) { public void populateItem(final ListItem listItem) { final MenuOptionsDefinition option = (MenuOptionsDefinition) listItem.getModelObject(); listItem.add(new Label("option", option.getOptions())); listItem.add(new Label("order", option.getOrder())); listItem.add(new Label("path", Boolean.toString(option.isPaths()))); listItem.add(new Label("regexp", Boolean.toString(option.isRegexp()))); listItem.add(new AjaxLink("edit") { @Override public void onClick(AjaxRequestTarget target) { metaDataModalWindow.setContent( new OptionsWindow(metaDataModalWindow.getContentId(), option, ajaxPanel)); metaDataModalWindow.show(target); target.addComponent(ajaxPanel); } }); listItem.add(new AjaxLink("delete") { @Override public void onClick(AjaxRequestTarget target) { menuActions(REMOVE_ACTION, option.getOptions(), new OptionsDefinitionBean()); target.addComponent(ajaxPanel); } }.add(new JavascriptEventConfirmation("onclick", new ResourceModel("action.delete.confirm")))); } }); add(new AjaxLink("new") { @Override public void onClick(AjaxRequestTarget target) { MenuOptionsDefinition optionDefinition = null; if (getUserSelectedNode().getDocType() == FileType.Folder) { optionDefinition = getServiceLocator().getPageManager().newFolderMenuOptionsDefinition(); } else { optionDefinition = getServiceLocator().getPageManager().newPageMenuOptionsDefinition(); } metaDataModalWindow.setContent( new OptionsWindow(metaDataModalWindow.getContentId(), optionDefinition, ajaxPanel)); metaDataModalWindow.show(target); } }); add(ajaxPanel); } } protected class BasePanel extends Panel { private static final long serialVersionUID = -6442196391739061842L; private JetspeedDocument document; public BasePanel(String id, JetspeedDocument jDoc) { super(id); this.document = jDoc; final FeedbackPanel feedback = new FeedbackPanel("feedback"); feedback.setOutputMarkupId(true); add(feedback); } public BasePanel(String id) { super(id); final FeedbackPanel feedback = new FeedbackPanel("feedback"); feedback.setOutputMarkupId(true); add(feedback); } /** * @return the document */ public JetspeedDocument getDocument() { if (PortalSiteManager.this.document != document) { document = PortalSiteManager.this.document; } return document; } } protected class ExportJetspeedObject implements ResourceProvider, Serializable { private SiteTreeNode node; private boolean recursively; private String userName; private ExportObject exportObject; private String fileName; private String filePath; private long length = -1; // default or fallback to ensure stream writing works anyways private long lastModified; /** * @param fileName * the fileName to set */ public void setFileName(String fileName) { this.fileName = fileName; } /** * @param recursively * the recursively to set */ public void setRecursively(boolean recursively) { this.recursively = recursively; } /** * @return the recursively */ public boolean isRecursively() { return recursively; } /** * @param node * the node to set */ public void setNode(SiteTreeNode node) { this.node = node; } /** * @param userName * the userName to set */ public void setUserName(String userName) { this.userName = userName; } public void close() { // } public String getContentType() { return exportObject.getContentType(); } public long getLastModified() { return lastModified; } public long getLength() { return length; } public String getName() { return this.fileName; } public InputStream getResource() { InputStream fileStream = null; try { fileStream = new FileInputStream(exportObject.getFilePath()); } catch (Exception e) { // TODO: handle exception } return fileStream; } public void open() { exportObject = exportJetspeedtObject(node, recursively, userName); filePath = exportObject.getFilePath(); File f = new File(filePath); if (f.exists()) { length = f.length(); lastModified = f.lastModified(); } } } protected class MenuBasePanel extends Panel { private JetspeedDocument document; public MenuBasePanel(String id, JetspeedDocument jDoc, MenuDefinition definition) { super(id); this.document = jDoc; setMenuDefinition(definition); } public MenuBasePanel(String id) { super(id); } /** * @return the document */ public JetspeedDocument getDocument() { if (PortalSiteManager.this.document != document) { document = PortalSiteManager.this.document; } return document; } /** * @return the menuOptions */ public List getMenuOptions() { return getMenuOption(); } /** * @param menuOptions * the menuOptions to set */ public void setMenuOptions(List menuOptions) { setMenuOption(menuOptions); } } protected class WindowPanel extends Panel { public WindowPanel(String id) { super(id); } } private class AddFolderPanel extends Panel { private JetspeedDocument document; public AddFolderPanel(String id) { super(id); final FeedbackPanel feedback = new FeedbackPanel("feedback"); feedback.setOutputMarkupId(true); add(feedback); document = new JetspeedDocument(); Form infoForm = new Form("newForm"); Label nameLabel = new Label("name", "Name"); TextField nameField = new TextField("nameField", new PropertyModel(this, "document.name")); nameField.setRequired(true); infoForm.add(nameLabel); infoForm.add(nameField); Label titleLabel = new Label("title", "Title"); TextField titleField = new TextField("titleField", new PropertyModel(this, "document.title")); titleField.setRequired(true); infoForm.add(titleLabel); infoForm.add(titleField); Label shortTitleLabel = new Label("shortTitle", "ShortTitle"); TextField shortTitleField = new TextField("shortTitleField", new PropertyModel(this, "document.shortTitle")); infoForm.add(shortTitleField); infoForm.add(shortTitleLabel); infoForm.add(new AjaxButton("new", new ResourceModel("add.subfolder"), infoForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { SiteTreeNode treeNode = getUserSelectedNode(); DefaultMutableTreeNode node = getSelectedNode(); String documentPath = ""; if (treeNode.getNodePath().equals(JETSPEED_PATH_SEPRATOR)) { documentPath = JETSPEED_PATH_SEPRATOR; } else { documentPath = treeNode.getNodePath() + JETSPEED_PATH_SEPRATOR; } Folder folder = getServiceLocator().getPageManager() .newFolder(documentPath + document.getName()); folder.setTitle(document.getTitle()); folder.setShortTitle(document.getShortTitle()); folderAction(folder, SAVE_ACTION); node.insert(new DefaultMutableTreeNode(new SiteTreeNode(folder)), 0); LinkTree tree = (PortalTree) getPage().get("siteTree"); tree.getTreeState().expandNode(node); tree.updateTree(target); ((ModalWindow) AddFolderPanel.this.getParent()).close(target); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { target.addComponent(feedback); } }); add(infoForm); } } private class AddPagePanel extends Panel { private JetspeedDocument document; public AddPagePanel(String id) { super(id); final FeedbackPanel feedback = new FeedbackPanel("feedback"); feedback.setOutputMarkupId(true); add(feedback); document = new JetspeedDocument(); Form infoForm = new Form("newForm"); Label nameLabel = new Label("name", "Name"); TextField nameField = new TextField("nameField", new PropertyModel(this, "document.name")); nameField.setRequired(true); infoForm.add(nameLabel); infoForm.add(nameField); Label titleLabel = new Label("title", "Title"); TextField titleField = new TextField("titleField", new PropertyModel(this, "document.title")); titleField.setRedirect(true); infoForm.add(titleLabel); infoForm.add(titleField); Label shortTitleLabel = new Label("shortTitle", "ShortTitle"); TextField shortTitleField = new TextField("shortTitleField", new PropertyModel(this, "document.shortTitle")); infoForm.add(shortTitleField); infoForm.add(shortTitleLabel); Label pageDecoratorLabel = new Label("pageDecorator", "Page Decorator"); DropDownChoice decoratorsList = new DropDownChoice("decoratorsList", new PropertyModel(this, "document.pageDecorator"), getPageDecorators()); infoForm.add(decoratorsList); infoForm.add(pageDecoratorLabel); Label portletDecoratorLabel = new Label("portletDecorator", "Portlet Decorator"); DropDownChoice portletDecoratorsList = new DropDownChoice("portletDecoratorsList", new PropertyModel(this, "document.portletDecorator"), getPortletDecorators()); infoForm.add(portletDecoratorLabel); infoForm.add(portletDecoratorsList); Label themeLabel = new Label("theme", "Theme"); DropDownChoice themeField = new DropDownChoice("themeList", new PropertyModel(this, "document.desktopTheme"), getThemes()); infoForm.add(themeField); infoForm.add(themeLabel); Label visibleLabel = new Label("visible", "Hidden"); CheckBox visibleCheckbox = new CheckBox("visibleCheck", new PropertyModel(this, "document.hidden")); infoForm.add(visibleLabel); infoForm.add(visibleCheckbox); infoForm.add(new AjaxButton("new", new ResourceModel("add.page"), infoForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { SiteTreeNode treeNode = getUserSelectedNode(); DefaultMutableTreeNode node = getSelectedNode(); String documentPath = ""; if (treeNode.getNodePath().equals(JETSPEED_PATH_SEPRATOR)) { documentPath = JETSPEED_PATH_SEPRATOR; } else { documentPath = treeNode.getNodePath() + JETSPEED_PATH_SEPRATOR; } Page page = getServiceLocator().getPageManager() .newPage(documentPath + document.getName() + ".psml"); page.setTitle(document.getTitle()); page.setShortTitle(document.getShortTitle()); page.setDefaultDecorator(document.getPageDecorator(), Fragment.LAYOUT); page.setDefaultDecorator(document.getPortletDecorator(), Fragment.PORTLET); page.setSkin(document.getDesktopTheme()); page.setHidden(document.isHidden()); if (page.getRootFragment() instanceof Fragment) { String layoutName = getServiceLocator().getPortalConfiguration() .getString("layout.page.default", "jetspeed-layouts::VelocityOneColumn"); ((Fragment) page.getRootFragment()).setName(layoutName); } PageAction(page, SAVE_ACTION); node.insert(new DefaultMutableTreeNode(new SiteTreeNode(page)), 0); LinkTree tree = (PortalTree) getPage().get("siteTree"); tree.getTreeState().expandNode(node); tree.updateTree(target); ((ModalWindow) AddPagePanel.this.getParent()).close(target); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { target.addComponent(feedback); } }); add(infoForm); } } private class AddLinkPanel extends Panel { private JetspeedDocument document; public AddLinkPanel(String id) { super(id); final FeedbackPanel feedback = new FeedbackPanel("feedback"); feedback.setOutputMarkupId(true); add(feedback); document = new JetspeedDocument(); Form infoForm = new Form("newForm"); Label nameLabel = new Label("name", "Name"); TextField nameField = new TextField("nameField", new PropertyModel(this, "document.name")); nameField.setRequired(true); infoForm.add(nameLabel); infoForm.add(nameField); Label titleLabel = new Label("title", "Title"); TextField titleField = new TextField("titleField", new PropertyModel(this, "document.title")); infoForm.add(titleLabel); infoForm.add(titleField); Label shortTitleLabel = new Label("shortTitle", "ShortTitle"); TextField shortTitleField = new TextField("shortTitleField", new PropertyModel(this, "document.shortTitle")); infoForm.add(shortTitleField); infoForm.add(shortTitleLabel); Label urlLabel = new Label("urlLabel", "URL"); TextField urlField = new TextField("urlField", new PropertyModel(this, "document.url")); urlField.setRequired(true); infoForm.add(urlLabel); infoForm.add(urlField); Label targetLabel = new Label("targetLabel", "Target Window"); DropDownChoice targetField = new DropDownChoice("target", new PropertyModel(this, "document.target"), getTargetList()); infoForm.add(targetLabel); infoForm.add(targetField); Label visibleLabel = new Label("visible", "Hidden"); CheckBox visibleCheckbox = new CheckBox("visibleCheck", new PropertyModel(this, "document.hidden")); infoForm.add(visibleLabel); infoForm.add(visibleCheckbox); infoForm.add(new AjaxButton("new", new ResourceModel("add.link"), infoForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { SiteTreeNode treeNode = getUserSelectedNode(); DefaultMutableTreeNode node = getSelectedNode(); String documentPath = ""; if (treeNode.getNodePath().equals(JETSPEED_PATH_SEPRATOR)) { documentPath = JETSPEED_PATH_SEPRATOR; } else { documentPath = treeNode.getNodePath() + JETSPEED_PATH_SEPRATOR; } Link link = getServiceLocator().getPageManager() .newLink(documentPath + document.getName() + ".link"); link.setTitle(document.getTitle()); link.setShortTitle(document.getShortTitle()); link.setUrl(document.getUrl()); link.setTarget(document.getTarget()); link.setHidden(document.isHidden()); linkAction(link, SAVE_ACTION); node.insert(new DefaultMutableTreeNode(new SiteTreeNode(link)), 0); LinkTree tree = (PortalTree) getPage().get("siteTree"); tree.getTreeState().expandNode(node); tree.updateTree(target); ((ModalWindow) AddLinkPanel.this.getParent()).close(target); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { target.addComponent(feedback); } }); add(infoForm); } } private class CopyMoveWindow extends Panel { TreeModel copyTreeNode; String docType; String docName; String docPath; boolean copyIds; /** * @return the docPath */ public String getDocPath() { return docPath; } /** * @param docPath * the docPath to set */ public void setDocPath(String docPath) { this.docPath = docPath; } /** * @return the docName */ public String getDocName() { return docName; } /** * @param docName * the docName to set */ public void setDocName(String docName) { this.docName = docName; } /** * @return the docType */ public String getDocType() { return docType; } public boolean getCopyIds() { return copyIds; } public void setCopyIds(boolean copyIds) { this.copyIds = copyIds; } public CopyMoveWindow(String id, final String docType, String docName, String docPath, final boolean copyFlag) { super(id); this.docType = docType; this.docName = docName.toString(); this.docPath = docPath.toString(); final String docOldName = docName.toString(); final String docOldPath = docPath.toString(); final FeedbackPanel feedback = new FeedbackPanel("feedback"); feedback.setOutputMarkupId(true); add(feedback); Form copyForm = new Form("copyForm") { @Override protected void onValidate() { if (copyFlag) { if (docOldName.equals(getDocName()) && docOldPath.equals(getDocPath())) { error(docType + " can't be copied with same name at same location"); } } else { if (docOldName.equals(getDocName()) && docOldPath.equals(getDocPath())) { error(docType + " can't be moved with same name at same location"); } } } }; copyForm.setOutputMarkupId(true); copyForm.add(new Label("docType-label", "Doc Type")); TextField typeField = new TextField("docType", new PropertyModel(this, "docType")); typeField.setRequired(true); copyForm.add(typeField); copyForm.add(new Label("docName-label", "Document Name")); TextField nameField = new TextField("docName", new PropertyModel(this, "docName")); nameField.setRequired(true); copyForm.add(nameField); AjaxCheckBox copyIdsChkBox = new AjaxCheckBox("copyIds", new PropertyModel(this, "copyIds")) { @Override protected void onUpdate(AjaxRequestTarget target) { } }; copyForm.add(copyIdsChkBox); AjaxButton copyButton = new AjaxButton("copy", new ResourceModel("common.copy"), copyForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { docAction(true, docOldName, getDocName(), docOldPath, getDocPath(), getCopyIds()); ((ModalWindow) CopyMoveWindow.this.getParent()).close(target); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { target.addComponent(feedback); } }; AjaxButton moveButton = new AjaxButton("move", new ResourceModel("common.move"), copyForm) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { docAction(false, docOldName, getDocName(), docOldPath, getDocPath(), getCopyIds()); ((ModalWindow) CopyMoveWindow.this.getParent()).close(target); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { target.addComponent(feedback); } }; copyButton.setVisibilityAllowed(true); moveButton.setVisibilityAllowed(true); copyForm.add(copyButton); copyForm.add(moveButton); if (copyFlag) { copyButton.setVisible(true); moveButton.setVisible(false); } else { copyButton.setVisible(false); moveButton.setVisible(true); } setCopyIds(!copyFlag); // Adding menu tree node DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode( new SiteTreeNode("Root", "/", FileType.Folder, false)); retrieveCopyFolders("/", rootNode); copyTreeNode = new DefaultTreeModel(rootNode); final LinkTree copyTree = new LinkTree("copyTree", new PropertyModel(this, "copyTreeNode")) { @Override protected void onNodeLinkClicked(Object node, BaseTree tree, AjaxRequestTarget target) { DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) node; SiteTreeNode siteNode = (SiteTreeNode) treeNode.getUserObject(); boolean needToUpdate = false; if (!tree.getTreeState().isNodeExpanded(treeNode)) { if (siteNode.getDocType() == SiteTreeNode.FileType.Folder && !siteNode.isLoaded()) { retrieveCopyFolders(siteNode.getNodePath(), treeNode); siteNode.setLoaded(false); needToUpdate = true; } this.getTreeState().expandNode(treeNode); } else { tree.getTreeState().collapseNode(treeNode); } this.getTreeState().selectNode(treeNode, true); if (needToUpdate) { this.updateTree(); } setDocPath(siteNode.getNodePath()); } }; copyTree.getTreeState().expandNode(copyTreeNode); // Initially select the root node in the tree copyTree.getTreeState().selectNode(rootNode, true); setDocPath(((SiteTreeNode) rootNode.getUserObject()).getNodePath()); add(copyTree); add(copyForm); } private void docAction(boolean copy, String oldName, String newName, String oldPath, String newPath, boolean copyIds) { FileType docType = getUserSelectedNode().getDocType(); if (getUserSelectedNode().getDocType() == FileType.Folder) { Folder sourceFolder = getJetspeedFolder(oldPath); Node sourceParentNode = sourceFolder.getParent(); try { String destFolderPath = newPath + JETSPEED_PATH_SEPRATOR + newName; getServiceLocator().getPageManager().deepCopyFolder(sourceFolder, destFolderPath, getFolderOwner(sourceFolder)); Folder destFolder = getServiceLocator().getPageManager().getFolder(destFolderPath); if (destFolder.getParent() != null) { setFolderTreeNodeLoadedByPath(destFolder.getParent(), false); } if (!copy) { folderAction(sourceFolder, REMOVE_ACTION); if (sourceParentNode != null) { setFolderTreeNodeLoadedByPath(sourceParentNode, false); } } } catch (Exception e) { log.error("Failed to copy folder.", e); } } else if (docType == FileType.Page) { Page sourcePage = getJetspeedPage(oldPath); Node sourceParentNode = sourcePage.getParent(); try { Page newPage = getServiceLocator().getPageManager().copyPage(sourcePage, newPath + JETSPEED_PATH_SEPRATOR + newName, copyIds); PageAction(newPage, SAVE_ACTION); if (newPage.getParent() != null) { setFolderTreeNodeLoadedByPath(newPage.getParent(), false); } if (!copy) { PageAction(sourcePage, REMOVE_ACTION); if (sourceParentNode != null) { setFolderTreeNodeLoadedByPath(sourceParentNode, false); } } } catch (NodeException e) { log.error("Failed to copy page.", e); } } else if (docType == FileType.Link) { Link sourceLink = getJetspeedLink(oldPath); Node sourceParentNode = sourceLink.getParent(); try { Link newLink = getServiceLocator().getPageManager().copyLink(sourceLink, newPath + JETSPEED_PATH_SEPRATOR + newName); linkAction(newLink, SAVE_ACTION); if (newLink.getParent() != null) { setFolderTreeNodeLoadedByPath(newLink.getParent(), false); } if (!copy) { linkAction(sourceLink, REMOVE_ACTION); if (sourceParentNode != null) { setFolderTreeNodeLoadedByPath(sourceParentNode, false); } } } catch (NodeException e) { log.error("Failed to copy link.", e); } } } } private class ExportObject implements Serializable { private String filePath; private String contentType; /** * @param filePath * @param contentType */ public ExportObject(String filePath, String contentType) { super(); this.filePath = filePath; this.contentType = contentType; } /** * @return the filePath */ public String getFilePath() { return filePath; } /** * @return the contentType */ public String getContentType() { return contentType; } } protected void controlTabs() { SiteTreeNode node = getUserSelectedNode(); controlTabs(node); } protected void controlTabs(final SiteTreeNode node) { 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); if (node.getDocType().equals(FileType.Folder)) { tempTab = new AbstractTab(new Model("Document ordering")) { public Panel getPanel(String panelId) { return new DocumentOrderingTabPanel(panelId, document); } }; tabs.getTabs().add(tempTab); } if (node.getDocType().equals(FileType.Folder) || node.getDocType().equals(FileType.Page)) { tempTab = new AbstractTab(new Model("Menus")) { public Panel getPanel(String panelId) { return new MenuTabPanel(panelId, document); } }; tabs.getTabs().add(tempTab); } tempTab = new AbstractTab(new Model("Import/Export")) { public Panel getPanel(String panelId) { 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()); 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); return; } 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; } } protected void insertSecurityReference(String name, String kind, Node node) { 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) { 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() { PortletRequest request = ((AbstractAdminWebApplication) getApplication()).getPortletRequest(); String jsroot = request.getParameter(TREE_ROOT); if (StringUtils.isEmpty(jsroot)) { jsroot = request.getPreferences().getValue(TREE_ROOT, "/"); } return jsroot; } private void securityConstraintAction(String action, String constraint, String oldConstraintName) { SiteTreeNode node = getUserSelectedNode(); Node jetspeedNode = null; PageManager pageManager = getServiceLocator().getPageManager(); if (node.getDocType() == SiteTreeNode.FileType.Folder) { jetspeedNode = (Node) getJetspeedFolder(node.getNodePath()); if (action.equals(ADD_ACTION) || action.equals(SAVE_ACTION)) { updateSecurityReference(constraint, oldConstraintName, "", jetspeedNode); } else if (action.equals(REMOVE_ACTION)) { removeSecurityReference(constraint, jetspeedNode); } folderAction((Folder) jetspeedNode, SAVE_ACTION); } else if (node.getDocType() == SiteTreeNode.FileType.Page) { jetspeedNode = (Node) getJetspeedPage(node.getNodePath()); if (action.equals(ADD_ACTION) || action.equals(SAVE_ACTION)) { updateSecurityReference(constraint, oldConstraintName, "", jetspeedNode); } else if (action.equals(REMOVE_ACTION)) { removeSecurityReference(constraint, jetspeedNode); } PageAction((Page) jetspeedNode, SAVE_ACTION); } else if (node.getDocType() == SiteTreeNode.FileType.Link) { jetspeedNode = (Node) getJetspeedLink(node.getNodePath()); if (action.equals(ADD_ACTION) || action.equals(SAVE_ACTION)) { updateSecurityReference(constraint, oldConstraintName, "", jetspeedNode); } else if (action.equals(REMOVE_ACTION)) { removeSecurityReference(constraint, jetspeedNode); } linkAction((Link) jetspeedNode, SAVE_ACTION); } populateDocument(node); } private void metaDataAction(String action, JetspeedDocumentMetaData metaData, JetspeedDocumentMetaData oldMetaData) { SiteTreeNode node = getUserSelectedNode(); Node jetspeedNode = null; PageManager pageManager = getServiceLocator().getPageManager(); if (node.getDocType() == SiteTreeNode.FileType.Folder) { jetspeedNode = (Node) getJetspeedFolder(node.getNodePath()); if (action.equals(ADD_ACTION) || action.equals(SAVE_ACTION)) { updateMetadata(metaData, oldMetaData, jetspeedNode); } else if (action.equals(REMOVE_ACTION)) { removeMetadata(metaData, jetspeedNode); } folderAction((Folder) jetspeedNode, SAVE_ACTION); } else if (node.getDocType() == SiteTreeNode.FileType.Page) { jetspeedNode = (Node) getJetspeedPage(node.getNodePath()); if (action.equals(ADD_ACTION) || action.equals(SAVE_ACTION)) { updateMetadata(metaData, oldMetaData, jetspeedNode); } else if (action.equals(REMOVE_ACTION)) { removeMetadata(metaData, jetspeedNode); } PageAction((Page) jetspeedNode, SAVE_ACTION); } else if (node.getDocType() == SiteTreeNode.FileType.Link) { jetspeedNode = (Node) getJetspeedLink(node.getNodePath()); if (action.equals(ADD_ACTION) || action.equals(SAVE_ACTION)) { updateMetadata(metaData, oldMetaData, jetspeedNode); } else if (action.equals(REMOVE_ACTION)) { removeMetadata(metaData, jetspeedNode); } linkAction((Link) jetspeedNode, SAVE_ACTION); } populateDocument(node); } private DefaultMutableTreeNode populateUserTree(String userName) { DefaultMutableTreeNode rootNode = null; rootNode = retrieveFolders("/_user/" + userName, rootNode); treeRoot = new DefaultTreeModel(rootNode); return rootNode; } private DefaultMutableTreeNode populateTree() { DefaultMutableTreeNode rootNode = null; rootNode = retrieveFolders(determineRootFolder(), rootNode); treeRoot = new DefaultTreeModel(rootNode); return rootNode; } private DefaultMutableTreeNode populateCopyTree() { DefaultMutableTreeNode rootNode = null; rootNode = retrieveCopyFolders("/", rootNode); treeRoot = new DefaultTreeModel(rootNode); return rootNode; } private DefaultMutableTreeNode retrieveFolders(String folderPath, DefaultMutableTreeNode rootNode) { return retrieveFolders(folderPath, rootNode, true); } private DefaultMutableTreeNode retrieveFolders(String folderPath, DefaultMutableTreeNode rootNode, boolean cleanBeforeRetrieve) { try { Link link; Folder folder; DefaultMutableTreeNode tmpNode; Page page; Folder rootfolder = getServiceLocator().getPageManager().getFolder(folderPath); if (rootNode == null) { rootNode = new DefaultMutableTreeNode(new SiteTreeNode(rootfolder, true)); } if (cleanBeforeRetrieve) { rootNode.removeAllChildren(); } Iterator folders = rootfolder.getFolders().iterator(); while (folders.hasNext()) { folder = (Folder) folders.next(); if (rootfolder.getPath().equals("/_user")) { if (folder.getName().startsWith("template")) { rootNode.add(new DefaultMutableTreeNode(new SiteTreeNode(folder))); } } else { rootNode.add(new DefaultMutableTreeNode(new SiteTreeNode(folder))); } } Iterator pages = rootfolder.getPages().iterator(); while (pages.hasNext()) { 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); } return rootNode; } private DefaultMutableTreeNode retrieveCopyFolders(String folderPath, DefaultMutableTreeNode rootNode) { try { Folder folder; Folder rootfolder = getServiceLocator().getPageManager().getFolder(folderPath); if (rootNode == null) { rootNode = new DefaultMutableTreeNode(new SiteTreeNode(rootfolder, true)); } Iterator folders = rootfolder.getFolders().iterator(); while (folders.hasNext()) { folder = (Folder) folders.next(); if (rootfolder.getPath().equals("/_user")) { if (folder.getName().startsWith("template")) { rootNode.add(new DefaultMutableTreeNode(new SiteTreeNode(folder))); } } else { rootNode.add(new DefaultMutableTreeNode(new SiteTreeNode(folder))); } } } catch (Exception e) { log.error("Failed to retrieve folders ", e); } return rootNode; } private List<String> getPortletDecorators() { if (portletDecorators == null) { portletDecorators = new ArrayList<String>( getServiceLocator().getDecorationFactory().getPortletDecorations(null)); } return portletDecorators; } private List<String> getPageDecorators() { if (pageDecorators == null) { pageDecorators = new ArrayList<String>( getServiceLocator().getDecorationFactory().getPageDecorations(null)); } return pageDecorators; } private List<String> getThemes() { if (pageThemes == null) { pageThemes = new ArrayList<String>( getServiceLocator().getDecorationFactory().getDesktopPageDecorations(null)); } 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>(); Iterator constraintsDefIterator; try { constraintsDefIterator = getServiceLocator().getPageManager().getPageSecurity() .getSecurityConstraintsDefs().iterator(); while (constraintsDefIterator.hasNext()) { constraintsDefs.add(((SecurityConstraintsDef) constraintsDefIterator.next()).getName()); } } catch (UnsupportedDocumentTypeException e) { log.error("Unsupported document type.", e); } catch (DocumentNotFoundException e) { log.error("Document is not found.", e); } catch (NodeException e) { log.error("Unexpected exception.", e); } } return constraintsDefs; } private void populateDocument(SiteTreeNode node) { try { if (node.getDocType() == SiteTreeNode.FileType.Folder) { document = new JetspeedDocument(getServiceLocator().getPageManager().getFolder(node.getNodePath())); } else if (node.getDocType() == SiteTreeNode.FileType.Page) { document = new JetspeedDocument(getServiceLocator().getPageManager().getPage(node.getNodePath())); } else if (node.getDocType() == SiteTreeNode.FileType.Link) { document = new JetspeedDocument(getServiceLocator().getPageManager().getLink(node.getNodePath())); } } catch (Exception e) { log.error("Failed populate document.", e); } } private void metaOrderAction(JetspeedDocument document, String choices) { SiteTreeNode node = getUserSelectedNode(); PageManager pageManger = getServiceLocator().getPageManager(); List<String> documentOrder = null; if (node != null) { if (choices != null) { documentOrder = Arrays.asList(choices.split(",")); } if (node.getDocType() == SiteTreeNode.FileType.Folder) { Folder folder = getJetspeedFolder(node.getNodePath()); folder.setDocumentOrder(documentOrder); folderAction(folder, SAVE_ACTION); } } } private void excuteAction(JetspeedDocument document, String action) { SiteTreeNode node = getUserSelectedNode(); PageManager pageManger = getServiceLocator().getPageManager(); if (node != null) { if (node.getDocType() == SiteTreeNode.FileType.Folder) { Folder folder = getJetspeedFolder(node.getNodePath()); if (action.equals("save")) { folder.setTitle(document.getTitle()); folder.setShortTitle(document.getShortTitle()); folder.setDefaultPage(document.getPage()); folder.setDefaultDecorator(document.getPageDecorator(), Fragment.LAYOUT); folder.setDefaultDecorator(document.getPortletDecorator(), Fragment.PORTLET); folder.setSkin(document.getDesktopTheme()); folder.setHidden(document.isHidden()); folderAction(folder, SAVE_ACTION); } else if (action.equals("remove")) { folderAction(folder, REMOVE_ACTION); } } else if (node.getDocType() == SiteTreeNode.FileType.Page) { Page page = getJetspeedPage(node.getNodePath()); if (action.equals("save")) { 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()); PageAction(page, SAVE_ACTION); } else if (action.equals("remove")) { PageAction(page, REMOVE_ACTION); } } else if (node.getDocType() == SiteTreeNode.FileType.Link) { Link link = getJetspeedLink(node.getNodePath()); if (action.equals("save")) { link.setTitle(document.getTitle()); link.setShortTitle(document.getShortTitle()); link.setUrl(document.getUrl()); link.setTitle(document.getTitle()); link.setHidden(document.isHidden()); linkAction(link, SAVE_ACTION); } else if (action.equals("remove")) { linkAction(link, REMOVE_ACTION); } } } } private String fileExt(String fileName) { int extIndex = fileName.lastIndexOf("."); if (extIndex > 0) { return fileName.substring(extIndex + 1, fileName.length()); } return ""; } private ExportObject exportJetspeedtObject(SiteTreeNode siteNode, boolean recursive, String userName) { String downloadPath = ""; String contentType = "text/xml"; boolean success = true; ExportObject jetspeedObject = null; String objectPath = siteNode.getNodePath(); if (!cleanUserFolder(userName)) success = false; if (success) { PageManager pageManager = getServiceLocator().getPageManager(); PageManager castorPageManager = getServiceLocator().getCastorPageManager(); try { if (siteNode.getDocType() == SiteTreeNode.FileType.Folder) { Folder folder = pageManager.getFolder(siteNode.getNodePath()); if (recursive) { PortalSiteManagerUtil.importFolder(castorPageManager, folder, userName, getRealPath(folder.getPath()), true); } 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(), true); 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) { contentType = "application/zip"; link = userName + ".zip"; } downloadPath = PortalSiteManagerUtil.getDownloadLink(siteNode.getNodeName(), userName, siteNode.getDocType().toString()); jetspeedObject = new ExportObject(downloadPath, contentType); } catch (Exception e) { log.error("Failed to export site node.", e); } } return jetspeedObject; } private String getTempFolder(String userName) { String dir = System.getProperty("java.io.tmpdir"); String path = System.getProperty("file.separator"); File file = new File(dir + path + userName); file.mkdir(); return dir + path + userName; } 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 = ""; ZipFile zipFile = null; try { zipFile = new ZipFile(destination + sepreator + file); entries = zipFile.entries(); while (entries.hasMoreElements()) { ZipEntry entry = (ZipEntry) entries.nextElement(); filePath = destination + sepreator + entry.getName(); createPath(filePath); InputStream input = null; OutputStream output = null; try { input = zipFile.getInputStream(entry); output = new FileOutputStream(filePath); IOUtils.copy(input, output); } finally { IOUtils.closeQuietly(output); IOUtils.closeQuietly(input); } } return true; } catch (IOException ioe) { log.error("Unexpected IO exception.", ioe); return false; } finally { if (zipFile != null) { try { zipFile.close(); } catch (IOException ignore) { } } } } private void createPath(String filePath) { String parentPath = ""; File file = new File(filePath); File parent = new File(file.getParent()); if (!parent.exists()) { parentPath = parent.getPath(); createPath(parentPath); parent.mkdir(); } } private Folder importFolders(PageManager pageManager, PageManager castorPageManager, Folder srcFolder, String userName, String destination, boolean copyIds) throws JetspeedException { Folder dstFolder = lookupFolder(castorPageManager, srcFolder.getPath()); dstFolder = pageManager.copyFolder(srcFolder, destination); pageManager.updateFolder(dstFolder); String newPath = ""; Iterator pages = srcFolder.getPages().iterator(); while (pages.hasNext()) { Page srcPage = (Page) pages.next(); Page dstPage = lookupPage(castorPageManager, srcPage.getPath()); newPath = destination + getRealPath(srcPage.getPath()); dstPage = pageManager.copyPage(srcPage, newPath, copyIds); pageManager.updatePage(dstPage); } Iterator links = srcFolder.getLinks().iterator(); while (links.hasNext()) { Link srcLink = (Link) links.next(); Link dstLink = lookupLink(castorPageManager, srcLink.getPath()); newPath = destination + getRealPath(srcLink.getPath()); dstLink = pageManager.copyLink(srcLink, newPath); pageManager.updateLink(dstLink); } Iterator folders = srcFolder.getFolders().iterator(); while (folders.hasNext()) { Folder folder = (Folder) folders.next(); newPath = destination + getRealPath(folder.getPath()); importFolders(pageManager, castorPageManager, folder, userName, newPath, copyIds); } return dstFolder; } private Page lookupPage(PageManager castorPageManager, String path) { try { return castorPageManager.getPage(path); } catch (Exception e) { return null; } } private Link lookupLink(PageManager castorPageManager, String path) { try { return castorPageManager.getLink(path); } catch (Exception e) { return null; } } private Folder lookupFolder(PageManager castorPageManager, String path) { try { return castorPageManager.getFolder(path); } catch (Exception e) { return null; } } private String getRealPath(String path) { int index = path.lastIndexOf("/"); if (index > 0) { return path.substring(index); } return path; } private boolean cleanUserFolder(String userName) { boolean success = false; synchronized (this) { String tmpdir = System.getProperty("java.io.tmpdir"); String path = System.getProperty("file.separator"); String folder = tmpdir + path + userName; File dir = new File(folder); if (dir.exists()) { success = deleteDir(dir); } success = dir.mkdir(); } return success; } private boolean deleteDir(File dir) { if (dir.exists()) { File[] files = dir.listFiles(); for (int i = 0; i < files.length; i++) { if (files[i].isDirectory()) { deleteDir(files[i]); } else { files[i].delete(); } } } return (dir.delete()); } private void setFolderTreeNodeLoadedByPath(final Node node, boolean loaded) { DefaultMutableTreeNode destParentTreeNode = getTreeNodeByPath(node.getPath()); SiteTreeNode siteTreeNode = (SiteTreeNode) destParentTreeNode.getUserObject(); siteTreeNode.setLoaded(loaded); } private DefaultMutableTreeNode getTreeNodeByPath(String path) { PortalTree tree = (PortalTree) getPage().get("siteTree"); TreeModel treeModel = tree.getModelObject(); List<DefaultMutableTreeNode> treeNodeList = new ArrayList<DefaultMutableTreeNode>(); findTreeNodeByPath((DefaultMutableTreeNode) treeModel.getRoot(), path, treeNodeList, 1); return (treeNodeList.isEmpty() ? null : treeNodeList.get(0)); } private void findTreeNodeByPath(DefaultMutableTreeNode node, String path, List<DefaultMutableTreeNode> treeNodeList, int maxSize) { SiteTreeNode siteTreeNode = (SiteTreeNode) node.getUserObject(); if (siteTreeNode != null && path.equals(siteTreeNode.getNodePath())) { treeNodeList.add(node); } if (treeNodeList.size() >= maxSize) { return; } for (Enumeration children = node.children(); children.hasMoreElements();) { DefaultMutableTreeNode child = (DefaultMutableTreeNode) children.nextElement(); findTreeNodeByPath(child, path, treeNodeList, maxSize); if (treeNodeList.size() >= maxSize) { return; } } } private DefaultMutableTreeNode getSelectedNode() { PortalTree tree = (PortalTree) getPage().get("siteTree"); Collection selectedNodes = tree.getTreeState().getSelectedNodes(); DefaultMutableTreeNode treeNode = null; if (selectedNodes != null) { Iterator selectedNode = selectedNodes.iterator(); while (selectedNode.hasNext()) { treeNode = (DefaultMutableTreeNode) selectedNode.next(); break; } } if (treeNode == null) { TreeModel treeModel = tree.getModelObject(); if (treeModel != null && treeModel.getRoot() != null) { treeNode = (DefaultMutableTreeNode) treeModel.getRoot(); } } if (treeNode == null) { treeNode = new DefaultMutableTreeNode(new SiteTreeNode("root", "/", FileType.Folder)); } return treeNode; } private DefaultMutableTreeNode getMenuSelectedNode() { Collection selectedNodes = menuTree.getTreeState().getSelectedNodes(); DefaultMutableTreeNode treeNode = null; if (selectedNodes != null) { Iterator selectedNode = selectedNodes.iterator(); while (selectedNode.hasNext()) { treeNode = (DefaultMutableTreeNode) selectedNode.next(); break; } if (treeNode == null) { treeNode = new DefaultMutableTreeNode(new MenuTreeNode("Menus", null)); } } return treeNode; } private SiteTreeNode getUserSelectedNode() { return (SiteTreeNode) getSelectedNode().getUserObject(); } private void getSubFoldersPage(JetspeedDocument document) { List<String> pageFolder = new ArrayList<String>(); List<String> documentOrder = document.getDocumentOrder(); Folder folder; try { folder = getJetspeedFolder(document.getPath()); Iterator folders = folder.getFolders().iterator(); while (folders.hasNext()) { pageFolder.add(((Folder) folders.next()).getName()); } Iterator pages = folder.getPages().iterator(); while (pages.hasNext()) { pageFolder.add(((Page) pages.next()).getName()); } Iterator links = folder.getLinks().iterator(); while (links.hasNext()) { pageFolder.add(((Link) links.next()).getName()); } for (String documentName : pageFolder) { if (!documentOrder.contains(documentName)) { documentOrder.add(documentName); } } } catch (InvalidFolderException e) { log.error("Invalid folder.", e); } catch (NodeException e) { log.error("Unexpected exception.", e); } } private void getMenus(JetspeedDocument document, DefaultMutableTreeNode menuNode) { MenuDefinition definitaion = null; DefaultMutableTreeNode menu = null; List menuDefinitions = null; if (getUserSelectedNode().getDocType() == FileType.Folder) { menuDefinitions = getJetspeedFolder(document.getPath()).getMenuDefinitions(); } else { menuDefinitions = getJetspeedPage(document.getPath()).getMenuDefinitions(); } if (menuDefinitions == null || menuDefinitions.size() == 0) { return; } Iterator menuItreator = menuDefinitions.iterator(); while (menuItreator.hasNext()) { definitaion = (MenuDefinition) menuItreator.next(); menu = new DefaultMutableTreeNode(new MenuTreeNode(definitaion.getName(), document.getPath(), document.getType(), getServiceLocator())); menuNode.add(menu); } } private void getMenuElements(MenuDefinition definition, String type) { List elements = new ArrayList(); if (definition.getMenuElements() == null || definition.getMenuElements().size() == 0) { elements = Collections.EMPTY_LIST; } else { Iterator menuElements = definition.getMenuElements().iterator(); Object menuElement = null; while (menuElements.hasNext()) { menuElement = menuElements.next(); if (type.equals(MenuElement.MENU_ELEMENT_TYPE) && menuElement instanceof MenuDefinition) { elements.add(menuElement); } else if (type.equals(MenuElement.OPTION_ELEMENT_TYPE) && menuElement instanceof MenuOptionsDefinition) { elements.add(menuElement); } else if (type.equals(MenuElement.SEPARATOR_ELEMENT_TYPE) && menuElement instanceof MenuSeparatorDefinition) { elements.add(menuElement); } else if (type.equals(INCLUDES) && menuElement instanceof MenuIncludeDefinition) { elements.add(menuElement); } else if (type.equals(EXCLUDES) && menuElement instanceof MenuExcludeDefinition) { elements.add(menuElement); } } } setMenuOption(elements); } private void updateList(List menuDefinitions, MenuDefinition olddefinition, MenuDefinition definition) { menuDefinitions.remove(definition); menuDefinitions.add(definition); } protected Object copyMenuElement(String type, Object srcElement) { PageManager pageManger = getServiceLocator().getPageManager(); if (srcElement instanceof MenuDefinition) { // create the new menu element and copy attributes MenuDefinition source = (MenuDefinition) srcElement; MenuDefinition menu = null; if (type.equals(PAGE_NODE_TYPE)) { menu = pageManger.newPageMenuDefinition(); } else if (type.equals(FOLDER_NODE_TYPE)) { menu = pageManger.newFolderMenuDefinition(); } menu.setDepth(source.getDepth()); menu.setName(source.getName()); menu.setOptions(source.getOptions()); menu.setOrder(source.getOrder()); menu.setPaths(source.isPaths()); menu.setProfile(source.getProfile()); menu.setRegexp(source.isRegexp()); menu.setShortTitle(source.getShortTitle()); menu.setSkin(source.getSkin()); menu.setTitle(source.getTitle()); // copy locale specific metadata menu.getMetadata().copyFields(source.getMetadata().getFields()); // recursively copy menu elements List elements = source.getMenuElements(); if (elements != null) { List copiedElements = new ArrayList(); Iterator elementsIter = elements.iterator(); while (elementsIter.hasNext()) { Object element = elementsIter.next(); Object copiedElement = copyMenuElement(type, element); if (copiedElement != null) { copiedElements.add(copiedElement); } } menu.setMenuElements(copiedElements); } return menu; } else if (srcElement instanceof MenuExcludeDefinition) { // create the new menu exclude element and copy attributes MenuExcludeDefinition source = (MenuExcludeDefinition) srcElement; MenuExcludeDefinition menuExclude = null; if (type.equals(PAGE_NODE_TYPE)) { menuExclude = pageManger.newPageMenuExcludeDefinition(); } else if (type.equals(FOLDER_NODE_TYPE)) { menuExclude = pageManger.newFolderMenuExcludeDefinition(); } menuExclude.setName(source.getName()); return menuExclude; } else if (srcElement instanceof MenuIncludeDefinition) { // create the new menu include element and copy attributes MenuIncludeDefinition source = (MenuIncludeDefinition) srcElement; MenuIncludeDefinition menuInclude = null; if (type.equals(PAGE_NODE_TYPE)) { menuInclude = pageManger.newPageMenuIncludeDefinition(); } else if (type.equals(FOLDER_NODE_TYPE)) { menuInclude = pageManger.newFolderMenuIncludeDefinition(); } menuInclude.setName(source.getName()); menuInclude.setNest(source.isNest()); return menuInclude; } else if (srcElement instanceof MenuOptionsDefinition) { // create the new menu options element and copy attributes MenuOptionsDefinition source = (MenuOptionsDefinition) srcElement; MenuOptionsDefinition menuOptions = null; if (type.equals(PAGE_NODE_TYPE)) { menuOptions = pageManger.newPageMenuOptionsDefinition(); } else if (type.equals(FOLDER_NODE_TYPE)) { menuOptions = pageManger.newFolderMenuOptionsDefinition(); } menuOptions.setDepth(source.getDepth()); menuOptions.setOptions(source.getOptions()); menuOptions.setOrder(source.getOrder()); menuOptions.setPaths(source.isPaths()); menuOptions.setProfile(source.getProfile()); menuOptions.setRegexp(source.isRegexp()); menuOptions.setSkin(source.getSkin()); return menuOptions; } else if (srcElement instanceof MenuSeparatorDefinition) { // create the new menu separator element and copy attributes MenuSeparatorDefinition source = (MenuSeparatorDefinition) srcElement; MenuSeparatorDefinition menuSeparator = null; if (type.equals(PAGE_NODE_TYPE)) { menuSeparator = pageManger.newPageMenuSeparatorDefinition(); } else if (type.equals(FOLDER_NODE_TYPE)) { menuSeparator = pageManger.newFolderMenuSeparatorDefinition(); } menuSeparator.setSkin(source.getSkin()); menuSeparator.setTitle(source.getTitle()); menuSeparator.setText(source.getText()); // copy locale specific metadata menuSeparator.getMetadata().copyFields(source.getMetadata().getFields()); return menuSeparator; } return null; } private String getNodeType() { String nodeType = FOLDER_NODE_TYPE; if (getUserSelectedNode().getDocType() == FileType.Page) { nodeType = PAGE_NODE_TYPE; } return nodeType; } /** * @return the menuDefinition */ protected MenuDefinition getMenuDefinition() { return (MenuDefinition) getPortletRequest().getPortletSession().getAttribute("menuDefinition"); } /** * @param menuDefinition * the menuDefinition to set */ protected void setMenuDefinition(MenuDefinition menuDefinition) { getPortletRequest().getPortletSession().setAttribute("menuDefinition", menuDefinition); } protected void menuActions(String action, String options, OptionsDefinitionBean element) { SiteTreeNode node = getUserSelectedNode(); MenuDefinition definition = getMenuDefinition(); MenuOptionsDefinition oldElement = getOptionsDefinition(options); MenuOptionsDefinition newElement = getOptionsDefinition(element); if (node.getDocType() == FileType.Folder) { Folder folder = getJetspeedFolder(node.getNodePath()); List menuList = folder.getMenuDefinitions(); if (action.equals(SAVE_ACTION)) { menuList.remove(definition); if (definition.getMenuElements() != null) { definition.getMenuElements().remove(oldElement); definition.getMenuElements().add(newElement); } else { List elements = new ArrayList(); elements.add(newElement); definition.setMenuElements(elements); } menuList.add(definition); } else if (action.equals(REMOVE_ACTION)) { menuList.remove(definition); definition.getMenuElements().remove(oldElement); menuList.add(definition); } folder.setMenuDefinitions(menuList); folderAction(folder, SAVE_ACTION); } else if (node.getDocType() == FileType.Page) { Page page = getJetspeedPage(node.getNodePath()); List menuList = page.getMenuDefinitions(); if (action.equals(SAVE_ACTION)) { menuList.remove(definition); if (definition.getMenuElements() != null) { definition.getMenuElements().remove(oldElement); definition.getMenuElements().add(newElement); } else { List elements = new ArrayList(); elements.add(newElement); definition.setMenuElements(elements); } menuList.add(definition); } else if (action.equals(REMOVE_ACTION)) { menuList.remove(definition); definition.getMenuElements().remove(oldElement); menuList.add(definition); } page.setMenuDefinitions(menuList); PageAction(page, SAVE_ACTION); } setMenuDefinition(definition); getMenuElements(definition, MenuElement.OPTION_ELEMENT_TYPE); } protected void menuActions(String action, String name, JetspeedMenuDefinition element) { MenuDefinition oldElement = getDefinition(name); SiteTreeNode node = getUserSelectedNode(); MenuDefinition newElement = getMenuDefinition(document.getType(), element); if (oldElement != null && oldElement.getMenuElements() != null) { newElement.setMenuElements(oldElement.getMenuElements()); } if (node.getDocType() == FileType.Folder) { Folder folder = getJetspeedFolder(node.getNodePath()); List menuList = folder.getMenuDefinitions(); if (menuList == null) { menuList = new LinkedList(); } if (action.equals(SAVE_ACTION)) { menuList.remove(oldElement); menuList.add(newElement); } else if (action.equals(REMOVE_ACTION)) { menuList.remove(oldElement); } else if (action.equals(ADD_ACTION)) { menuList.add(newElement); } folder.setMenuDefinitions(menuList); folderAction(folder, SAVE_ACTION); } else if (node.getDocType() == FileType.Page) { Page page = getJetspeedPage(node.getNodePath()); List menuList = page.getMenuDefinitions(); if (action.equals(SAVE_ACTION)) { menuList.remove(oldElement); menuList.add(newElement); } else if (action.equals(REMOVE_ACTION)) { menuList.remove(oldElement); } else if (action.equals(ADD_ACTION)) { menuList.add(newElement); } page.setMenuDefinitions(menuList); PageAction(page, SAVE_ACTION); } setMenuDefinition(newElement); } protected void menuActions(String action, String name, SeparatorDefinitionBean element) { SiteTreeNode node = getUserSelectedNode(); MenuDefinition definition = getMenuDefinition(); MenuSeparatorDefinition oldElement = getSeparatorDefinition(element.getText()); MenuSeparatorDefinition newElement = getSeparatorDefinition(element); if (node.getDocType() == FileType.Folder) { Folder folder = getJetspeedFolder(node.getNodePath()); List menuList = folder.getMenuDefinitions(); if (action.equals(SAVE_ACTION)) { menuList.remove(definition); if (definition.getMenuElements() != null) { definition.getMenuElements().remove(oldElement); definition.getMenuElements().add(newElement); } else { List elements = new ArrayList(); elements.add(newElement); definition.setMenuElements(elements); } menuList.add(definition); } else if (action.equals(REMOVE_ACTION)) { menuList.remove(definition); definition.getMenuElements().remove(oldElement); menuList.add(definition); } folder.setMenuDefinitions(menuList); folderAction(folder, SAVE_ACTION); } else if (node.getDocType() == FileType.Page) { Page page = getJetspeedPage(node.getNodePath()); List menuList = page.getMenuDefinitions(); if (action.equals(SAVE_ACTION)) { menuList.remove(definition); if (definition.getMenuElements() != null) { definition.getMenuElements().remove(oldElement); definition.getMenuElements().add(newElement); } else { List elements = new ArrayList(); elements.add(newElement); definition.setMenuElements(elements); } menuList.add(definition); } else if (action.equals(REMOVE_ACTION)) { menuList.remove(definition); definition.getMenuElements().remove(oldElement); menuList.add(definition); } page.setMenuDefinitions(menuList); PageAction(page, SAVE_ACTION); } setMenuDefinition(definition); getMenuElements(definition, MenuElement.SEPARATOR_ELEMENT_TYPE); } protected void menuActions(String action, String name, IncludesDefinitionBean element) { SiteTreeNode node = getUserSelectedNode(); MenuDefinition definition = getMenuDefinition(); MenuIncludeDefinition oldElement = getIncludesDefinition(name); MenuIncludeDefinition newElement = getIncludesDefinition(element); if (node.getDocType() == FileType.Folder) { Folder folder = getJetspeedFolder(node.getNodePath()); List menuList = folder.getMenuDefinitions(); if (action.equals(SAVE_ACTION)) { menuList.remove(definition); if (definition.getMenuElements() != null) { definition.getMenuElements().remove(oldElement); definition.getMenuElements().add(newElement); } else { List elements = new ArrayList(); elements.add(newElement); definition.setMenuElements(elements); } menuList.add(definition); } else if (action.equals(REMOVE_ACTION)) { menuList.remove(definition); definition.getMenuElements().remove(oldElement); menuList.add(definition); } folder.setMenuDefinitions(menuList); folderAction(folder, SAVE_ACTION); } else if (node.getDocType() == FileType.Page) { Page page = getJetspeedPage(node.getNodePath()); List menuList = page.getMenuDefinitions(); if (action.equals(SAVE_ACTION)) { menuList.remove(definition); if (definition.getMenuElements() != null) { definition.getMenuElements().remove(oldElement); definition.getMenuElements().add(newElement); } else { List elements = new ArrayList(); elements.add(newElement); definition.setMenuElements(elements); } menuList.add(definition); } else if (action.equals(REMOVE_ACTION)) { menuList.remove(definition); definition.getMenuElements().remove(oldElement); menuList.add(definition); } page.setMenuDefinitions(menuList); PageAction(page, SAVE_ACTION); } setMenuDefinition(definition); getMenuElements(definition, INCLUDES); } protected void menuActions(String action, String name, ExcludesDefinitionBean element) { SiteTreeNode node = getUserSelectedNode(); MenuDefinition definition = getMenuDefinition(); MenuExcludeDefinition oldElement = getExcludeDefinition(name); MenuExcludeDefinition newElement = getExcludesDefinition(element); if (node.getDocType() == FileType.Folder) { Folder folder = getJetspeedFolder(node.getNodePath()); List menuList = folder.getMenuDefinitions(); if (action.equals(SAVE_ACTION)) { menuList.remove(definition); if (definition.getMenuElements() != null) { definition.getMenuElements().remove(oldElement); definition.getMenuElements().add(newElement); } else { List elements = new ArrayList(); elements.add(newElement); definition.setMenuElements(elements); } menuList.add(definition); } else if (action.equals(REMOVE_ACTION)) { menuList.remove(definition); definition.getMenuElements().remove(oldElement); menuList.add(definition); } folder.setMenuDefinitions(menuList); folderAction(folder, SAVE_ACTION); } else if (node.getDocType() == FileType.Page) { Page page = getJetspeedPage(node.getNodePath()); List menuList = page.getMenuDefinitions(); if (action.equals(SAVE_ACTION)) { menuList.remove(definition); if (definition.getMenuElements() != null) { definition.getMenuElements().remove(oldElement); definition.getMenuElements().add(newElement); } else { List elements = new ArrayList(); elements.add(newElement); definition.setMenuElements(elements); } menuList.add(definition); } else if (action.equals(REMOVE_ACTION)) { menuList.remove(definition); definition.getMenuElements().remove(oldElement); menuList.add(definition); } page.setMenuDefinitions(menuList); PageAction(page, SAVE_ACTION); } setMenuDefinition(definition); getMenuElements(definition, EXCLUDES); } protected Page getJetspeedPage(String pagePath) { Page page = null; try { page = getServiceLocator().getPageManager().getPage(pagePath); } catch (PageNotFoundException e) { log.error("Page is not found: {}", pagePath); return null; } catch (InvalidFolderException e) { log.error("Invalid folder path: {}", pagePath); return null; } catch (NodeException e) { log.error("Unexpected exception.", e); return null; } return page; } protected Link getJetspeedLink(String pagePath) { Link link = null; try { link = getServiceLocator().getPageManager().getLink(pagePath); } catch (PageNotFoundException e) { log.error("Page is not found: {}", pagePath); return null; } catch (InvalidFolderException e) { log.error("Invalid folder path: {}", pagePath); return null; } catch (NodeException e) { log.error("Unexpected exception.", e); return null; } catch (DocumentNotFoundException e) { log.error("Document is not found: {}", pagePath); return null; } return link; } protected Folder getJetspeedFolder(String folderPath) { Folder folder = null; try { folder = getServiceLocator().getPageManager().getFolder(folderPath); } catch (FolderNotFoundException e) { log.error("Folder is not found: {}", folderPath); return null; } catch (InvalidFolderException e) { log.error("Invalid folder path: {}", folderPath); return null; } catch (NodeException e) { log.error("Unexpected exception.", e); return null; } return folder; } protected void invalidatePortalSiteSessionContext() { getPortalRequestContext().setSessionAttribute(PortalReservedParameters.PORTAL_SITE_SESSION_CONTEXT_ATTR_KEY, null); } protected boolean folderAction(Folder folder, String action) { if (action.equals(SAVE_ACTION)) { try { getServiceLocator().getPageManager().updateFolder(folder); invalidatePortalSiteSessionContext(); } catch (FolderNotUpdatedException e) { log.error("Folder is not updated.", e); return false; } catch (Exception e) { log.error("Unexpected exception.", e); return false; } } else if (action.equals(REMOVE_ACTION)) { try { getServiceLocator().getPageManager().removeFolder(folder); invalidatePortalSiteSessionContext(); } catch (FolderNotRemovedException e) { log.error("Folder is not removed.", e); return false; } catch (Exception e) { log.error("Unexpected exception.", e); return false; } } return true; } protected boolean PageAction(Page page, String action) { if (action.equals(SAVE_ACTION)) { try { getServiceLocator().getPageManager().updatePage(page); invalidatePortalSiteSessionContext(); } catch (Exception e) { log.error("Unexpected exception.", e); return false; } } else if (action.equals(REMOVE_ACTION)) { try { getServiceLocator().getPageManager().removePage(page); invalidatePortalSiteSessionContext(); } catch (Exception e) { log.error("Unexpected exception.", e); return false; } } return true; } protected boolean linkAction(Link link, String action) { if (action.equals(SAVE_ACTION)) { try { getServiceLocator().getPageManager().updateLink(link); invalidatePortalSiteSessionContext(); } catch (Exception e) { log.error("Unexpected exception.", e); return false; } } else if (action.equals(REMOVE_ACTION)) { try { getServiceLocator().getPageManager().removeLink(link); invalidatePortalSiteSessionContext(); } catch (Exception e) { log.error("Unexpected exception.", e); return false; } } return true; } /** * @return the menuOptions */ public List getMenuOption() { return this.menuOptions; } /** * @param menuOptions * the menuOptions to set */ public void setMenuOption(List menuOptions) { this.menuOptions = menuOptions; } private void controlMenuTabs(final boolean nodeSelected) { ITab tab = null; menuTabs.clear(); if (nodeSelected) { tab = new AbstractTab(new Model("Info")) { public Panel getPanel(String panelId) { return new MenuInfoPanel(panelId, document, getMenuDefinition()); } }; menuTabs.add(tab); tab = new AbstractTab(new Model("Options")) { public Panel getPanel(String panelId) { return new MenuOptionsPanel(panelId, document, getMenuDefinition()); } }; menuTabs.add(tab); tab = new AbstractTab(new Model("Separator")) { public Panel getPanel(String panelId) { return new MenuSeparatorPanel(panelId, document, getMenuDefinition()); } }; menuTabs.add(tab); tab = new AbstractTab(new Model("Includes")) { public Panel getPanel(String panelId) { return new MenuIncludesPanel(panelId, document, getMenuDefinition()); } }; menuTabs.add(tab); tab = new AbstractTab(new Model("Excludes")) { public Panel getPanel(String panelId) { return new MenuExlcudesPanel(panelId, document, getMenuDefinition()); } }; menuTabs.add(tab); } } /** * @return the menuTabs */ public List<ITab> getMenuTab() { return menuTabs; } private MenuOptionsDefinition getOptionsDefinition(String options) { List elements = getMenuDefinition().getMenuElements(); if (elements != null) { for (int index = 0; index < elements.size(); index++) { Object element = elements.get(index); if (element instanceof MenuOptionsDefinition) { if (((MenuOptionsDefinition) element).getOptions().equals(options)) { return (MenuOptionsDefinition) element; } } } } return null; } private MenuSeparatorDefinition getSeparatorDefinition(String options) { List elements = getMenuDefinition().getMenuElements(); if (elements != null) { for (int index = 0; index < elements.size(); index++) { Object element = elements.get(index); if (element instanceof MenuSeparatorDefinition) { if (((MenuSeparatorDefinition) element).getText().equals(options)) { return (MenuSeparatorDefinition) element; } } } } return null; } private MenuExcludeDefinition getExcludeDefinition(String options) { List elements = getMenuDefinition().getMenuElements(); if (elements != null) { for (int index = 0; index < elements.size(); index++) { Object element = elements.get(index); if (element instanceof MenuExcludeDefinition) { if (((MenuExcludeDefinition) element).getName().equals(options)) { return (MenuExcludeDefinition) element; } } } } return null; } private MenuIncludeDefinition getIncludesDefinition(String options) { List elements = getMenuDefinition().getMenuElements(); if (elements != null) { for (int index = 0; index < elements.size(); index++) { Object element = elements.get(index); if (element instanceof MenuIncludeDefinition) { if (((MenuIncludeDefinition) element).getName().equals(options)) { return (MenuIncludeDefinition) element; } } } } return null; } public MenuDefinition getDefinition(String name) { MenuDefinition definition = null; boolean found = true; try { if (document.getType().equals(PortalSiteManager.FOLDER_NODE_TYPE)) { return getMenu( getServiceLocator().getPageManager().getFolder(document.getPath()).getMenuDefinitions(), name); } else if (document.getType().equals(PortalSiteManager.PAGE_NODE_TYPE)) { return getMenu( getServiceLocator().getPageManager().getPage(document.getPath()).getMenuDefinitions(), name); } } catch (PageNotFoundException e) { found = false; } catch (FolderNotFoundException e) { found = false; } catch (InvalidFolderException e) { found = false; } catch (NodeException e) { found = false; } catch (Exception e) { found = false; } if (!found) { if (document.getType().equals(PortalSiteManager.PAGE_NODE_TYPE)) { definition = getServiceLocator().getPageManager().newPageMenuDefinition(); } else if (document.getType().equals(PortalSiteManager.FOLDER_NODE_TYPE)) { definition = getServiceLocator().getPageManager().newFolderMenuDefinition(); } } return definition; } private MenuDefinition getMenu(List menuDefinitions, String name) { for (int index = 0; index < menuDefinitions.size(); index++) { MenuDefinition definition = (MenuDefinition) menuDefinitions.get(index); if (definition.getName().equals(name)) { return definition; } } if (document.getType().equals(PortalSiteManager.PAGE_NODE_TYPE)) { return getServiceLocator().getPageManager().newPageMenuDefinition(); } return getServiceLocator().getPageManager().newFolderMenuDefinition(); } private MenuDefinition getMenuDefinition(String type, JetspeedMenuDefinition menuDefinition) { MenuDefinition definition = null; if (document.getType().equals(PortalSiteManager.PAGE_NODE_TYPE)) { definition = getServiceLocator().getPageManager().newPageMenuDefinition(); } else { definition = getServiceLocator().getPageManager().newFolderMenuDefinition(); } definition.setDepth(menuDefinition.getDepth()); definition.setName(menuDefinition.getName()); definition.setOptions(menuDefinition.getOptions()); definition.setOrder(menuDefinition.getOrder()); definition.setPaths(menuDefinition.isPaths()); definition.setRegexp(menuDefinition.isRegexp()); definition.setTitle(menuDefinition.getTitle()); definition.setShortTitle(menuDefinition.getShortTitle()); definition.setSkin(menuDefinition.getSkin()); definition.setProfile(menuDefinition.getProfile()); return definition; } private MenuSeparatorDefinition getSeparatorDefinition(SeparatorDefinitionBean separator) { MenuSeparatorDefinition definition = null; if (document.getType().equals(PortalSiteManager.PAGE_NODE_TYPE)) { definition = getServiceLocator().getPageManager().newPageMenuSeparatorDefinition(); } else { definition = getServiceLocator().getPageManager().newFolderMenuSeparatorDefinition(); } definition.setText(separator.getText()); definition.setTitle(separator.getTitle()); return definition; } private MenuExcludeDefinition getExcludesDefinition(ExcludesDefinitionBean excludes) { MenuExcludeDefinition definition = null; if (document.getType().equals(PortalSiteManager.PAGE_NODE_TYPE)) { definition = getServiceLocator().getPageManager().newPageMenuExcludeDefinition(); } else { definition = getServiceLocator().getPageManager().newFolderMenuExcludeDefinition(); } definition.setName(excludes.getName()); return definition; } private MenuIncludeDefinition getIncludesDefinition(IncludesDefinitionBean includes) { MenuIncludeDefinition definition = null; if (document.getType().equals(PortalSiteManager.PAGE_NODE_TYPE)) { definition = getServiceLocator().getPageManager().newPageMenuIncludeDefinition(); } else { definition = getServiceLocator().getPageManager().newFolderMenuIncludeDefinition(); } definition.setName(includes.getName()); definition.setNest(includes.isNest()); return definition; } private MenuOptionsDefinition getOptionsDefinition(OptionsDefinitionBean options) { MenuOptionsDefinition definition = null; if (document.getType().equals(PortalSiteManager.PAGE_NODE_TYPE)) { definition = getServiceLocator().getPageManager().newPageMenuOptionsDefinition(); } else { definition = getServiceLocator().getPageManager().newFolderMenuOptionsDefinition(); } definition.setDepth(options.getDepth()); definition.setOptions(options.getOptions()); definition.setOrder(options.getOrder()); definition.setPaths(options.isPaths()); definition.setRegexp(options.isRegexp()); definition.setSkin(options.getSkin()); definition.setProfile(options.getProfile()); return definition; } private SiteTreeNode getInitSiteTreeNode() { SiteTreeNode siteTreeNode = null; PortletRequest portletRequest = getPortletRequest(); String pathParam = portletRequest.getParameter(PORTAL_SITE_MANAGER_INIT_NODE_PATH_PARAM); if (pathParam == null) { pathParam = getPreference(PORTAL_SITE_MANAGER_INIT_NODE_PATH_PARAM); if (pathParam == null) { pathParam = getInitParam(PORTAL_SITE_MANAGER_INIT_NODE_PATH_PARAM); } } if (pathParam != null) { String type = PAGE_NODE_TYPE; String typeParam = null; if (typeParam == null) { typeParam = getPreference(PORTAL_SITE_MANAGER_INIT_NODE_TYPE_PARAM); if (typeParam == null) { typeParam = getInitParam(PORTAL_SITE_MANAGER_INIT_NODE_TYPE_PARAM); } } if (typeParam != null) { type = typeParam; } PageManager pageManager = getServiceLocator().getPageManager(); DefaultMutableTreeNode treeRootNode = null; try { if (PAGE_NODE_TYPE.equals(type)) { Page page = pageManager.getPage(pathParam); siteTreeNode = new SiteTreeNode(page.getName(), page.getPath(), SiteTreeNode.FileType.Page, true); treeRootNode = new DefaultMutableTreeNode(new SiteTreeNode(page)); } else if (FOLDER_NODE_TYPE.equals(type)) { Folder folder = pageManager.getFolder(pathParam); siteTreeNode = new SiteTreeNode(folder.getName(), folder.getPath(), SiteTreeNode.FileType.Folder, true); treeRootNode = new DefaultMutableTreeNode(new SiteTreeNode(folder, true)); } else if (LINK_NODE_TYPE.equals(type)) { Link link = pageManager.getLink(pathParam); siteTreeNode = new SiteTreeNode(link.getName(), link.getPath(), SiteTreeNode.FileType.Link, true); treeRootNode = new DefaultMutableTreeNode(new SiteTreeNode(link)); } } catch (Exception e) { log.error("Failed to retrieve the init site tree node on " + pathParam, e); } if (treeRootNode != null) { treeRoot = new DefaultTreeModel(treeRootNode); } } if (siteTreeNode == null) { siteTreeNode = new SiteTreeNode("ROOT", "/", SiteTreeNode.FileType.Folder, true); } return siteTreeNode; } private String getFolderOwner(final Folder folder) { String owner = null; SecurityConstraints constraints = folder.getSecurityConstraints(); if (constraints != null) { owner = constraints.getOwner(); } return owner; } }