org.opencms.workplace.tools.sites.CmsSiteDetailDialog Maven / Gradle / Ivy
Show all versions of opencms-test Show documentation
/*
* File : $Source$
* Date : $Date$
* Version: $Revision$
*
* This library is part of OpenCms -
* the Open Source Content Management System
*
* Copyright (C) 2002 - 2009 Alkacon Software (http://www.alkacon.com)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* For further information about Alkacon Software, please see the
* company website: http://www.alkacon.com
*
* For further information about OpenCms, please see the
* project website: http://www.opencms.org
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.opencms.workplace.tools.sites;
import org.opencms.ade.configuration.CmsADEManager;
import org.opencms.configuration.CmsSystemConfiguration;
import org.opencms.file.CmsFile;
import org.opencms.file.CmsObject;
import org.opencms.file.CmsProperty;
import org.opencms.file.CmsPropertyDefinition;
import org.opencms.file.CmsResource;
import org.opencms.file.CmsResourceFilter;
import org.opencms.file.CmsVfsResourceNotFoundException;
import org.opencms.file.types.CmsResourceTypeFolder;
import org.opencms.file.types.CmsResourceTypeFolderSubSitemap;
import org.opencms.file.types.CmsResourceTypeJsp;
import org.opencms.file.types.I_CmsResourceType;
import org.opencms.i18n.CmsEncoder;
import org.opencms.jsp.CmsJspActionElement;
import org.opencms.loader.CmsLoaderException;
import org.opencms.main.CmsException;
import org.opencms.main.CmsIllegalArgumentException;
import org.opencms.main.CmsLog;
import org.opencms.main.OpenCms;
import org.opencms.module.CmsModule;
import org.opencms.site.CmsSite;
import org.opencms.util.CmsStringUtil;
import org.opencms.widgets.CmsCheckboxWidget;
import org.opencms.widgets.CmsComboWidget;
import org.opencms.widgets.CmsDisplayWidget;
import org.opencms.widgets.CmsInputWidget;
import org.opencms.widgets.CmsSelectWidget;
import org.opencms.widgets.CmsSelectWidgetOption;
import org.opencms.widgets.CmsVfsFileWidget;
import org.opencms.workplace.CmsDialog;
import org.opencms.workplace.CmsWidgetDialog;
import org.opencms.workplace.CmsWidgetDialogParameter;
import org.opencms.workplace.CmsWorkplaceSettings;
import org.opencms.xml.content.CmsXmlContent;
import org.opencms.xml.content.CmsXmlContentFactory;
import org.opencms.xml.types.I_CmsXmlContentValue;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;
import org.apache.commons.logging.Log;
/**
* Dialog for showing the sites details.
*
* @since 9.0.0
*/
public class CmsSiteDetailDialog extends CmsWidgetDialog {
/** The module name constant. */
public static final String MODULE_NAME = "org.opencms.workplace.tools.sites";
/** Defines which pages are valid for this dialog. */
public static final String[] PAGES = {"page1"};
/** Module parameter constant for the create OU default flag. */
public static final String PARAM_CREATE_OU = "createou";
/** Module parameter constant for the web server script. */
public static final String PARAM_OU_DESCRIPTION = "oudescription";
/** The dialog action for editing a site. */
protected static final String DIALOG_EDIT = "edit";
/** Constant. */
private static final String BLANK_HTML = "blank.html";
/** Dialog new action parameter value. */
private static final String DIALOG_NEW = "new";
/** The logger for this class. */
private static Log LOG = CmsLog.getLog(CmsSiteDetailDialog.class.getName());
/** Constant. */
private static final String MODEL_PAGE = "ModelPage";
/** Constant. */
private static final String MODEL_PAGE_PAGE = "ModelPage/Page";
/** Constant. */
private static final String NEW = ".templates/";
/** Signals whether to create an OU or not. */
private boolean m_createou;
/** The OU description text. */
private String m_ouDescription;
/** The edit action to perform. */
private String m_paramEditaction;
/** The sites parameter. */
private String m_paramSites;
/** The dialog object. */
private CmsSiteBean m_site;
/** The name of the sites root folder. */
private String m_sitename;
/** The template property. */
private String m_template;
/**
* Public constructor with JSP action element.
*
* @param jsp an initialized JSP action element
*/
public CmsSiteDetailDialog(CmsJspActionElement jsp) {
super(jsp);
}
/**
* Public constructor with JSP variables.
*
* @param context the JSP page context
* @param req the JSP request
* @param res the JSP response
*/
public CmsSiteDetailDialog(PageContext context, HttpServletRequest req, HttpServletResponse res) {
this(new CmsJspActionElement(context, req, res));
}
/**
* @see org.opencms.workplace.CmsWidgetDialog#actionCommit()
*/
@Override
public void actionCommit() {
try {
// validate the dialog form
validateDialog();
// create a root site clone of the current CMS object.
CmsObject cms = OpenCms.initCmsObject(getCms());
cms.getRequestContext().setSiteRoot("");
// create the site root path
String siteRoot = "/sites".concat(m_sitename);
m_site.setSiteRoot(siteRoot);
CmsResource siteRootResource = null;
String sitePath = null;
// check if the site root already exists
try {
// take the existing site and do not perform any OU related actions
siteRootResource = cms.readResource(siteRoot);
sitePath = cms.getSitePath(siteRootResource);
} catch (CmsVfsResourceNotFoundException e) {
// not create a new site folder and the according OU if option is checked checked
I_CmsResourceType type = OpenCms.getResourceManager().getResourceType(
CmsResourceTypeFolderSubSitemap.TYPE_SUBSITEMAP);
siteRootResource = cms.createResource(siteRoot, type);
sitePath = cms.getSitePath(siteRootResource);
}
// add template property
if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(getTemplate())) {
CmsProperty prop = new CmsProperty(
CmsPropertyDefinition.PROPERTY_TEMPLATE,
getTemplate(),
getTemplate());
cms.writePropertyObject(siteRoot, prop);
}
// create OU
if (m_createou) {
OpenCms.getOrgUnitManager().createOrganizationalUnit(
cms,
"/" + siteRootResource.getName(),
m_ouDescription.replace("%(site)", m_site.getTitle() + " [" + m_site.getSiteRoot() + "]"),
0,
siteRootResource.getRootPath());
}
// create sitemap configuration
String contentFolder = CmsStringUtil.joinPaths(sitePath, CmsADEManager.CONTENT_FOLDER_NAME + "/");
String sitemapConfig = CmsStringUtil.joinPaths(contentFolder, CmsADEManager.CONFIG_FILE_NAME);
if (!cms.existsResource(sitemapConfig)) {
CmsResource config = createSitemapContentFolder(cms, siteRootResource);
if (config != null) {
try {
CmsResource newFolder = cms.createResource(
contentFolder + NEW,
OpenCms.getResourceManager().getResourceType(CmsResourceTypeFolder.RESOURCE_TYPE_NAME));
I_CmsResourceType containerType = OpenCms.getResourceManager().getResourceType(
org.opencms.file.types.CmsResourceTypeXmlContainerPage.RESOURCE_TYPE_NAME);
CmsResource modelPage = cms.createResource(newFolder.getRootPath() + BLANK_HTML, containerType);
String defTitle = Messages.get().getBundle(getCms().getRequestContext().getLocale()).key(
Messages.GUI_DEFAULT_MODEL_TITLE_1,
m_site.getTitle());
String defDes = Messages.get().getBundle(getCms().getRequestContext().getLocale()).key(
Messages.GUI_DEFAULT_MODEL_DESCRIPTION_1,
m_site.getTitle());
CmsProperty prop = new CmsProperty(CmsPropertyDefinition.PROPERTY_TITLE, defTitle, defTitle);
cms.writePropertyObject(modelPage.getRootPath(), prop);
prop = new CmsProperty(CmsPropertyDefinition.PROPERTY_DESCRIPTION, defDes, defDes);
cms.writePropertyObject(modelPage.getRootPath(), prop);
CmsFile file = cms.readFile(config);
CmsXmlContent con = CmsXmlContentFactory.unmarshal(cms, file);
con.addValue(cms, MODEL_PAGE, Locale.ENGLISH, 0);
I_CmsXmlContentValue val = con.getValue(MODEL_PAGE_PAGE, Locale.ENGLISH);
val.setStringValue(cms, modelPage.getRootPath());
file.setContents(con.marshal());
cms.writeFile(file);
} catch (CmsException e) {
LOG.error(e.getLocalizedMessage(), e);
}
}
}
// update the site manager state
CmsSite newSite = m_site.toCmsSite();
OpenCms.getSiteManager().updateSite(getCms(), m_site.getOriginalSite(), newSite);
// update the workplace server if the changed site was the workplace server
if ((m_site.getOriginalSite() != null)
&& m_site.getOriginalSite().getUrl().equals(OpenCms.getSiteManager().getWorkplaceServer())) {
OpenCms.getSiteManager().updateGeneralSettings(
getCms(),
OpenCms.getSiteManager().getDefaultUri(),
newSite.getUrl(),
OpenCms.getSiteManager().getSharedFolder());
}
// write the system configuration
OpenCms.writeConfiguration(CmsSystemConfiguration.class);
// refresh the list of sites
Map, ?> objects = (Map, ?>)getSettings().getListObject();
if (objects != null) {
objects.remove(CmsSitesOverviewList.class.getName());
}
} catch (Exception e) {
addCommitError(e);
}
}
/**
* @see org.opencms.workplace.CmsDialog#getCancelAction()
*/
@Override
public String getCancelAction() {
// set the default action
setParamPage(getPages().get(0));
return DIALOG_SET;
}
/**
* Returns the paramEditAction.
*
* @return the paramEditAction
*/
public String getParamEditaction() {
return m_paramEditaction;
}
/**
* Returns the paramSites.
*
* @return the paramSites
*/
public String getParamSites() {
return m_paramSites;
}
/**
* Returns the paramSitename.
*
* @return the paramSitename
*/
public String getSitename() {
return m_sitename;
}
/**
* Returns the template property.
*
* @return the template property to set
*/
public String getTemplate() {
return m_template;
}
/**
* Returns the paramCreateou.
*
* @return the paramCreateou
*/
public boolean isCreateou() {
return m_createou;
}
/**
* Sets the paramCreateou.
*
* @param createou the paramCreateou to set
*/
public void setCreateou(boolean createou) {
m_createou = createou;
}
/**
* Sets the paramEditAction.
*
* @param paramEditaction the paramEditAction to set
*/
public void setParamEditaction(String paramEditaction) {
m_paramEditaction = paramEditaction;
}
/**
* Sets the paramSites.
*
* @param paramSites the paramSites to set
*/
public void setParamSites(String paramSites) {
m_paramSites = paramSites;
}
/**
* Sets the site name.
*
* @param sitename the site name to set
*/
public void setSitename(String sitename) {
m_sitename = sitename;
}
/**
* Sets the the template property.
*
* @param template the template property to set
*/
public void setTemplate(String template) {
m_template = template;
}
/**
* @see org.opencms.workplace.CmsWidgetDialog#createDialogHtml(java.lang.String)
*/
@Override
protected String createDialogHtml(String dialog) {
StringBuffer result = new StringBuffer(1024);
result.append(createWidgetTableStart());
// show error header once if there were validation errors
result.append(createWidgetErrorHeader());
String title = m_site.getTitle() != null
? m_site.getTitle()
: Messages.get().getBundle(getCms().getRequestContext().getLocale()).key(Messages.GUI_SITES_NEW_SITE_TITLE_0);
// only show the position if editing a site or creating a new site
int count = getParamEditaction() == null ? 4 : 5;
// +1 if favicon present
count = m_site.getFavicon() != null ? ++count : count;
// site info
result.append(
dialogBlockStart(
Messages.get().getBundle(getCms().getRequestContext().getLocale()).key(
Messages.GUI_SITES_DETAIL_INFO_1,
title)));
result.append(createWidgetTableStart());
result.append(createDialogRowsHtml(0, count));
// site parameters
if (DIALOG_EDIT.equals(getParamEditaction()) || DIALOG_NEW.equals(getParamEditaction())) {
result.append(createDialogRowsHtml(++count, count));
} else if (!m_site.getParameters().isEmpty()) {
result.append(createDialogRowsHtml(++count, (count + m_site.getParameters().size()) - 1));
count += m_site.getParameters().size() - 1;
}
// +2 for OU check box and template property when creating a new site
if (DIALOG_NEW.equals(getParamEditaction())) {
result.append(createDialogRowsHtml(++count, count + 1));
count += 1;
}
result.append(createWidgetTableEnd());
result.append(dialogBlockEnd());
if ((getParamEditaction() != null) || CmsStringUtil.isNotEmptyOrWhitespaceOnly(m_site.getSecureUrl())) {
// secure site
result.append(
dialogBlockStart(
Messages.get().getBundle(getCms().getRequestContext().getLocale()).key(
Messages.GUI_SITES_DETAIL_SECURE_1,
title)));
result.append(createWidgetTableStart());
result.append(createDialogRowsHtml(++count, count + 2));
result.append(createWidgetTableEnd());
result.append(dialogBlockEnd());
count += 2;
}
// site aliases
if ((DIALOG_EDIT.equals(getParamEditaction()) || DIALOG_NEW.equals(getParamEditaction()))
|| !m_site.getAliases().isEmpty()) {
result.append(
dialogBlockStart(
Messages.get().getBundle(getCms().getRequestContext().getLocale()).key(
Messages.GUI_SITES_DETAIL_ALIASES_1,
title)));
result.append(createWidgetTableStart());
if (DIALOG_EDIT.equals(getParamEditaction()) || DIALOG_NEW.equals(getParamEditaction())) {
result.append(createDialogRowsHtml(++count, count));
} else if (!m_site.getAliases().isEmpty()) {
result.append(createDialogRowsHtml(++count, (count + m_site.getAliases().size()) - 1));
}
result.append(createWidgetTableEnd());
result.append(dialogBlockEnd());
}
// close the beginning table
result.append(createWidgetTableEnd());
return result.toString();
}
/**
* @see org.opencms.workplace.CmsWidgetDialog#defineWidgets()
*/
@Override
protected void defineWidgets() {
initSite();
setKeyPrefix(CmsSitesOverviewList.KEY_PREFIX_SITES);
if (DIALOG_NEW.equals(getParamEditaction()) || DIALOG_EDIT.equals(getParamEditaction())) {
// edit or new
// site info
addWidget(new CmsWidgetDialogParameter(m_site, "title", PAGES[0], new CmsInputWidget()));
addWidget(new CmsWidgetDialogParameter(this, "sitename", PAGES[0], new CmsInputWidget()));
addWidget(new CmsWidgetDialogParameter(m_site, "server", PAGES[0], new CmsInputWidget()));
addWidget(
new CmsWidgetDialogParameter(
m_site,
"errorPage",
PAGES[0],
new CmsVfsFileWidget(true, "", true, false)));
addWidget(
new CmsWidgetDialogParameter(m_site, "position", PAGES[0], new CmsSelectWidget(createNavOpts(m_site))));
addWidget(new CmsWidgetDialogParameter(m_site, "webserver", PAGES[0], new CmsCheckboxWidget()));
addWidget(new CmsWidgetDialogParameter(m_site, "parameters", PAGES[0], new CmsInputWidget()));
if (DIALOG_NEW.equals(getParamEditaction())) {
addWidget(new CmsWidgetDialogParameter(this, "createou", PAGES[0], new CmsCheckboxWidget()));
addWidget(new CmsWidgetDialogParameter(this, "template", PAGES[0], createTemplateSelect()));
}
if (m_site.getFavicon() != null) {
try {
CmsObject clone = OpenCms.initCmsObject(getCms());
clone.getRequestContext().setSiteRoot("");
CmsDisplayWidget dis = new CmsDisplayWidget(
"");
addWidget(new CmsWidgetDialogParameter(m_site, "favicon", PAGES[0], dis));
} catch (Exception e) {
// noop
}
}
// secure site
addWidget(new CmsWidgetDialogParameter(m_site, "secureUrl", PAGES[0], new CmsInputWidget()));
addWidget(new CmsWidgetDialogParameter(m_site, "exclusiveUrl", PAGES[0], new CmsCheckboxWidget()));
addWidget(new CmsWidgetDialogParameter(m_site, "exclusiveError", PAGES[0], new CmsCheckboxWidget()));
// site aliases
addWidget(new CmsWidgetDialogParameter(m_site, "aliases", PAGES[0], new CmsInputWidget()));
} else {
// display site
addWidget(new CmsWidgetDialogParameter(m_site, "title", PAGES[0], new CmsDisplayWidget()));
addWidget(new CmsWidgetDialogParameter(m_site, "siteRoot", PAGES[0], new CmsDisplayWidget()));
addWidget(new CmsWidgetDialogParameter(m_site, "server", PAGES[0], new CmsDisplayWidget()));
CmsWidgetDialogParameter errorPage;
if (CmsStringUtil.isEmptyOrWhitespaceOnly(m_site.getErrorPage())) {
errorPage = new CmsWidgetDialogParameter(
m_site,
"errorPage",
PAGES[0],
new CmsDisplayWidget(
Messages.get().getBundle(getCms().getRequestContext().getLocale()).key(
Messages.GUI_SITES_ERROR_PAGE_NOT_AVAILABLE_0)));
} else {
errorPage = new CmsWidgetDialogParameter(m_site, "errorPage", PAGES[0], new CmsDisplayWidget());
}
addWidget(errorPage);
addWidget(new CmsWidgetDialogParameter(m_site, "webserver", PAGES[0], new CmsDisplayWidget()));
int count = 5;
for (String parameter : m_site.getParameters().keySet()) {
String output = parameter + "=" + m_site.getParameters().get(parameter);
CmsWidgetDialogParameter widget = new CmsWidgetDialogParameter(
output,
output,
Messages.get().getBundle(getCms().getRequestContext().getLocale()).key(
Messages.GUI_SITES_DETAIL_PARAMETERS_0) + " [" + (count - 4) + "]",
new CmsDisplayWidget(),
PAGES[0],
1,
1,
count);
addWidget(widget);
count++;
}
if (m_site.getFavicon() != null) {
try {
CmsObject clone = OpenCms.initCmsObject(getCms());
clone.getRequestContext().setSiteRoot("");
CmsDisplayWidget dis = new CmsDisplayWidget(
"");
addWidget(new CmsWidgetDialogParameter(m_site, "favicon", PAGES[0], dis));
} catch (Exception e) {
// noop
}
}
if (m_site.hasSecureServer()) {
addWidget(new CmsWidgetDialogParameter(m_site, "secureUrl", PAGES[0], new CmsDisplayWidget()));
addWidget(new CmsWidgetDialogParameter(m_site, "exclusiveUrl", PAGES[0], new CmsDisplayWidget()));
addWidget(new CmsWidgetDialogParameter(m_site, "exclusiveError", PAGES[0], new CmsDisplayWidget()));
}
count = 0;
for (String aliasUrl : m_site.getAliases()) {
CmsWidgetDialogParameter alias = new CmsWidgetDialogParameter(
aliasUrl,
aliasUrl,
Messages.get().getBundle(getCms().getRequestContext().getLocale()).key(
Messages.GUI_SITES_DETAIL_LABEL_ALIAS_0) + " [" + (count + 1) + "]",
new CmsDisplayWidget(),
PAGES[0],
1,
1,
count);
addWidget(alias);
count++;
}
}
}
/**
* @see org.opencms.workplace.CmsWidgetDialog#getPageArray()
*/
@Override
protected String[] getPageArray() {
return PAGES;
}
/**
* @see org.opencms.workplace.CmsWorkplace#initWorkplaceRequestValues(org.opencms.workplace.CmsWorkplaceSettings, javax.servlet.http.HttpServletRequest)
*/
@Override
protected void initWorkplaceRequestValues(CmsWorkplaceSettings settings, HttpServletRequest request) {
super.initWorkplaceRequestValues(settings, request);
// save the current state of the site (may be changed because of the widget values)
setDialogObject(m_site);
}
/**
* Build select options for the position.
*
* @param currSite the current selected site
*
* @return the select options
*/
private List createNavOpts(CmsSiteBean currSite) {
List sites = new ArrayList();
for (CmsSite site : OpenCms.getSiteManager().getAvailableSites(getCms(), true)) {
if (site.getSiteMatcher() != null) {
sites.add(site);
}
}
float maxValue = 0;
float nextPos = 0;
// calculate value for the first navigation position
float firstValue = 1;
if (sites.size() > 0) {
try {
maxValue = sites.get(0).getPosition();
} catch (Exception e) {
// should usually never happen
}
}
if (maxValue != 0) {
firstValue = maxValue / 2;
}
List options = new ArrayList(sites.size() + 1);
List values = new ArrayList(sites.size() + 1);
// add the first entry: before first element
options.add(getMessages().key(org.opencms.workplace.commons.Messages.GUI_CHNAV_POS_FIRST_0));
values.add(firstValue + "");
// show all present navigation elements in box
for (int i = 0; i < sites.size(); i++) {
String navText = sites.get(i).getTitle();
float navPos = sites.get(i).getPosition();
String siteRoot = sites.get(i).getSiteRoot();
// get position of next nav element
nextPos = navPos + 2;
if ((i + 1) < sites.size()) {
nextPos = sites.get(i + 1).getPosition();
}
// calculate new position of current nav element
float newPos;
if ((nextPos - navPos) > 1) {
newPos = navPos + 1;
} else {
newPos = (navPos + nextPos) / 2;
}
// check new maxValue of positions and increase it
if (navPos > maxValue) {
maxValue = navPos;
}
// if the element is the current file, mark it in select box
if ((currSite != null) && (currSite.getSiteRoot() != null) && currSite.getSiteRoot().equals(siteRoot)) {
options.add(
CmsEncoder.escapeHtml(
getMessages().key(
org.opencms.workplace.commons.Messages.GUI_CHNAV_POS_CURRENT_1,
new Object[] {sites.get(i).getSiteRoot()})));
values.add("-1");
} else {
options.add(CmsEncoder.escapeHtml(navText + " [" + sites.get(i).getSiteRoot() + "/]"));
values.add(newPos + "");
}
}
// add the entry: at the last position
options.add(getMessages().key(org.opencms.workplace.commons.Messages.GUI_CHNAV_POS_LAST_0));
values.add((maxValue + 1) + "");
// add the entry: no change
options.add(getMessages().key(org.opencms.workplace.commons.Messages.GUI_CHNAV_NO_CHANGE_0));
if ((currSite != null) && (currSite.getPosition() == Float.MAX_VALUE)) {
// current resource has no valid position, use "last position"
values.add((maxValue + 1) + "");
} else {
// current resource has valid position, use "-1" for no change
values.add("-1");
}
List result = new ArrayList();
for (int i = 0; i < values.size(); i++) {
String val = values.get(i);
String opt = options.get(i);
result.add(new CmsSelectWidgetOption(val, false, opt));
}
return result;
}
/**
* Helper method for creating the .content folder of a sub-sitemap.
*
* @param cms the current CMS context
* @param subSitemapFolder the sub-sitemap folder in which the .content folder should be created
*
* @return the created folder
*
* @throws CmsException if something goes wrong
* @throws CmsLoaderException if something goes wrong
*/
private CmsResource createSitemapContentFolder(CmsObject cms, CmsResource subSitemapFolder)
throws CmsException, CmsLoaderException {
CmsResource configFile = null;
String sitePath = cms.getSitePath(subSitemapFolder);
String folderName = CmsStringUtil.joinPaths(sitePath, CmsADEManager.CONTENT_FOLDER_NAME + "/");
String sitemapConfigName = CmsStringUtil.joinPaths(folderName, CmsADEManager.CONFIG_FILE_NAME);
if (!cms.existsResource(folderName)) {
cms.createResource(
folderName,
OpenCms.getResourceManager().getResourceType(CmsADEManager.CONFIG_FOLDER_TYPE));
}
I_CmsResourceType configType = OpenCms.getResourceManager().getResourceType(CmsADEManager.CONFIG_TYPE);
if (cms.existsResource(sitemapConfigName)) {
configFile = cms.readResource(sitemapConfigName);
if (!OpenCms.getResourceManager().getResourceType(configFile).getTypeName().equals(
configType.getTypeName())) {
throw new CmsException(
Messages.get().container(
Messages.ERR_CREATING_SUB_SITEMAP_WRONG_CONFIG_FILE_TYPE_2,
sitemapConfigName,
CmsADEManager.CONFIG_TYPE));
}
} else {
configFile = cms.createResource(
sitemapConfigName,
OpenCms.getResourceManager().getResourceType(CmsADEManager.CONFIG_TYPE));
}
return configFile;
}
/**
* Creates a template select combo widget.
*
* @return the widget
*/
private CmsComboWidget createTemplateSelect() {
List options = new ArrayList();
try {
I_CmsResourceType templateType = OpenCms.getResourceManager().getResourceType(
CmsResourceTypeJsp.getContainerPageTemplateTypeName());
List templates = getCms().readResources(
"/system/",
CmsResourceFilter.DEFAULT.addRequireType(templateType));
for (CmsResource res : templates) {
options.add(new CmsSelectWidgetOption(res.getRootPath()));
}
} catch (CmsException e) {
LOG.error(e.getMessage(), e);
}
return new CmsComboWidget(options);
}
/**
* Checks if there are at least one character in the folder name,
* also ensures that it starts and ends with a '/'.
*
* @param resourcename folder name to check (complete path)
*
* @return the validated folder name
*
* @throws CmsIllegalArgumentException if the folder name is empty or null
*/
private String ensureFoldername(String resourcename) throws CmsIllegalArgumentException {
if (CmsStringUtil.isEmpty(resourcename)) {
throw new CmsIllegalArgumentException(
org.opencms.db.Messages.get().container(org.opencms.db.Messages.ERR_BAD_RESOURCENAME_1, resourcename));
}
if (!CmsResource.isFolder(resourcename)) {
resourcename = resourcename.concat("/");
}
if (resourcename.charAt(0) != '/') {
resourcename = "/".concat(resourcename);
}
return resourcename;
}
/**
* Initializes the dialog site object.
*/
private void initSite() {
Object o = null;
if (CmsStringUtil.isEmpty(getParamAction()) || CmsDialog.DIALOG_INITIAL.equals(getParamAction())) {
// this is the initial dialog call
if (CmsStringUtil.isNotEmpty(m_paramSites)) {
// edit an existing site, get it from manager
o = OpenCms.getSiteManager().getSiteForSiteRoot(m_paramSites);
}
} else {
// this is not the initial call, get site from session
o = getDialogObject();
}
if (o instanceof CmsSite) {
// reuse site stored in session
m_site = new CmsSiteBean((CmsSite)o);
} else if (o instanceof CmsSiteBean) {
// create a new site
m_site = (CmsSiteBean)o;
} else if (DIALOG_NEW.equals(getParamEditaction())) {
m_site = new CmsSiteBean();
} else {
try {
getToolManager().jspForwardTool(this, "/sites", new HashMap());
} catch (Exception e) {
// noop
}
}
if (!m_site.hasSecureServer()) {
m_site.setSecureUrl("");
}
try {
CmsObject clone = OpenCms.initCmsObject(getCms());
clone.getRequestContext().setSiteRoot("");
String iconPath = m_site.getSiteRoot() + "/" + CmsSiteFaviconDialog.ICON_NAME;
if (clone.existsResource(iconPath)) {
m_site.setFavicon(iconPath);
}
} catch (Throwable t) {
// noop
}
if (m_site.getSiteRoot() != null) {
setSitename(CmsResource.getName(m_site.getSiteRoot()));
}
CmsModule module = OpenCms.getModuleManager().getModule(MODULE_NAME);
m_createou = Boolean.valueOf(module.getParameter(PARAM_CREATE_OU, Boolean.FALSE.toString())).booleanValue();
m_ouDescription = module.getParameter(PARAM_OU_DESCRIPTION, "OU for: %(site)");
setDialogObject(m_site);
}
/**
* Validates the dialog before the commit action is performed.
*
* @throws Exception if sth. goes wrong
*/
private void validateDialog() throws Exception {
CmsResource.checkResourceName(m_sitename);
m_sitename = ensureFoldername(m_sitename);
if (CmsStringUtil.isEmptyOrWhitespaceOnly(m_site.getServer())) {
// the server's URL must not be empty or null
throw new CmsException(Messages.get().container(Messages.ERR_SERVER_URL_NOT_EMPTY_0));
}
}
}