/* * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. * * 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. * * 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 * */ // ///////////////////////////////////////////////////////////////////////////// // Migration Status // All tasks this class used to perform are migrated to cms.Loader // File is kept in trunk for reference purpose until the whole migration process // will be completed. (2010-20-18) // ///////////////////////////////////////////////////////////////////////////// package com.arsdigita.cms.installer; import com.arsdigita.categorization.Category; import com.arsdigita.cms.ContentSection; import com.arsdigita.cms.Folder; import com.arsdigita.cms.dispatcher.Resource; import com.arsdigita.cms.dispatcher.ResourceMapping; import com.arsdigita.cms.dispatcher.ResourceType; import com.arsdigita.cms.util.GlobalizationUtil; import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.kernel.PackageEventListener; import com.arsdigita.kernel.PackageInstance; import com.arsdigita.kernel.PackageType; import com.arsdigita.kernel.SiteNode; import com.arsdigita.kernel.Stylesheet; import com.arsdigita.kernel.permissions.PrivilegeDescriptor; import com.arsdigita.persistence.DataQuery; import com.arsdigita.persistence.SessionManager; /** *
Provides methods to install the Content Management System.
* *This class includes methods to:
* *Create the CMS package type.
Create the CMS package instance.
Create a default content section.
Mount a CMS package instance (and content section).
Creates the CMS package type.
* *This includes creating and registering XSL stylesheets to the CMS . * package type and registering privileges for use by CMS.
* * @return The CMS package type */ protected static PackageType createPackageType() throws DataObjectNotFoundException { PackageType type = PackageType.create (PACKAGE_KEY, "Content Management System", "Content Management Systems", "http://cms-java.arsdigita.com/"); type.setDispatcherClass(DISPATCHER_CLASS); type.addListener(LISTENER_CLASS); // Register a stylesheets to the CMS package. Stylesheet ss = Stylesheet.createStylesheet(STYLESHEET); ss.save(); type.addStylesheet(ss); type.save(); createPrivileges(); return type; } /** *Creates the CMS package type.
* *This includes creating and registering XSL stylesheets to the CMS . * package type and registering privileges for use by CMS.
* * @param name The name of the package instance * @return A new CMS package instance */ protected static PackageInstance createPackageInstance(String name) throws DataObjectNotFoundException { PackageType type = PackageType.findByKey(PACKAGE_KEY); PackageInstance instance = type.createInstance(name); instance.save(); return instance; } /** *Mounts a CMS package instance.
* *This includes creating and registering XSL stylesheets to the CMS . * package type and registering privileges for use by CMS.
* * @param instance The package instance * @param location The location of the package instance (and content section) * @return The SiteNode where the content section is mounted at */ protected static SiteNode mountPackageInstance(PackageInstance instance, String location) { SiteNode node = SiteNode.createSiteNode(location, SiteNode.getRootSiteNode()); node.mountPackage(instance); node.save(); return node; } /** * Creates and maps default resources to the content section. * * @param section The content section * * MP: create resource types. * MP: use the resources API. * MP: only create resources once. */ protected static void createDefaultResources(ContentSection section) { // XML resources ResourceType rt = ResourceType.findResourceType("xml"); Resource r = rt.createInstance("com.arsdigita.cms.ui.ContentSectionPage"); r.save(); ResourceMapping rm = r.createInstance(section, "admin"); rm.save(); rm = r.createInstance(section, "admin/index"); rm.save(); //This won't be served by the new application-oriented CMS dispatcher. //The default folder template creates this instead now. // r = rt.createInstance("com.arsdigita.cms.user.ItemIndexPage"); // r.save(); // rm = r.createInstance(section, "index"); // rm.save(); r = rt.createInstance("com.arsdigita.cms.ui.ContentItemPage"); r.save(); rm = r.createInstance(section, "admin/item"); rm.save(); } /** * Creates the CMS privileges. */ private static void createPrivileges() { final String CMS_PRIVILEGES = "com.arsdigita.cms.getPrivileges"; final String PRIVILEGE = "privilege"; DataQuery dq = SessionManager.getSession().retrieveQuery(CMS_PRIVILEGES); while ( dq.next() ) { String privilege = (String) dq.get(PRIVILEGE); if ( PrivilegeDescriptor.get(privilege) == null ) { PrivilegeDescriptor.createPrivilege(privilege); } } dq.close(); } /** * Creates the root folder for a content section. * * @param name The name of the content section * @return The root folder */ protected static Folder createRootFolder(String name) { Folder root = new Folder(); root.setName("/"); root.setLabel( (String) GlobalizationUtil.globalize("cms.installer.root_folder").localize()); root.save(); return root; } /** * Creates the root category for a content section. * * @param name The name of the content section * @return The root category */ protected static Category createRootCategory(String name) { Category root = new Category("/", "Root Category"); root.save(); return root; } ////////////////////////////////// // // PackageEventListener methods // /** * This method is called when a package instance is mounted on a * siteNode. It does nothing. * * @param siteNode The SiteNode where the instance is mounted. * @param pkg The instance being mounted. */ public void onMount(SiteNode siteNode, PackageInstance pkg) {} /** * This method is called when a package instance is unmounted from a * siteNode. It does nothing. * * @param siteNode The SiteNode where the instance is mounted. * @param pkg The instance being unmounted. */ public void onUnmount(SiteNode siteNode, PackageInstance pkg) {} /** * This method is called when a new package instance is created. * This method creates a content section and a new instance of * the CMS package. * * @param pkg aPackageInstance value
*/
public void onCreate(PackageInstance pkg) {
}
/**
* This method is called when a package instance is deleted.
* It does nothing.
*
* @param pkg a PackageInstance value
*/
public void onDelete(PackageInstance pkg) {}
}