libreccm-legacy/ccm-portalserver/src/com/arsdigita/portalserver/Theme.java

485 lines
13 KiB
Java

/*
* Copyright (C) 2003-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
*
*/
package com.arsdigita.portalserver;
import com.arsdigita.kernel.ACSObject;
// import com.arsdigita.kernel.Kernel;
// import com.arsdigita.kernel.Party;
// import com.arsdigita.kernel.permissions.PermissionService;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.OID;
import com.arsdigita.persistence.SessionManager;
import com.arsdigita.util.Assert;
import java.math.BigDecimal;
/**
* A theme.
* -
* A theme is a collection of color choices and (possibly) images
* that style a Portal. A theme is inherently tied to to the
* underlying design of the portal page; for example, a theme that
* stores and sets a color for a context bar is only useful if the
* design of the Portal that uses such a theme has, in fact, a context
* bar.
* <p>
* A particular portal design/layout is made up of components
* such as context bar, colored horizontal rules, tabbed panes...etc. which
* we refer to as a <i>skin</i>. A skin can have a theme applied to it, which
* renders components with desired colors, fonts, and background images. This
* Theme class is for enhancing the default skin that ships with Portal Server.
* <p>
* If a developer desires to create their own Portal design or skin, then
* the following files would be need to be implemented:
* <ul>
* <li> A PDL file describing the data model for the skin's thematic elements.</li>
* <li> A class like this one that implements Themes, with getter/setters for
* thematic elements</li>
* <li> A CSS sheet with class names that correspond to the class names that
* the <code>buildStyleBlock() </code>method uses (see below)</li>
* <li>Appropriate XSL sheet that utilizes the CSS class names.</li></ul>
* <p>
* This class provides setters and getters for all of the elements in the
* default Portal Server skin, plus a method that builds a block of CSS tags
* that are inserted into the output stream and used to override default
* choices for the default skin.
*
*
*
* @author Jim Parsons
*
*/
public class Theme extends ACSObject implements Themes {
/**
* The type of the {@link com.arsdigita.persistence.DataObject}
* that stands behind this {@link
* com.arsdigita.domain.DomainObject}.
*/
public static final String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.workspace.Theme";
@Override
protected String getBaseDataObjectType() {
return BASE_DATA_OBJECT_TYPE;
}
public Theme(DataObject dataObject) {
super(dataObject);
}
public Theme(String name) {
super(BASE_DATA_OBJECT_TYPE);
setName(name);
setContextBarColor("#006600");
setContextBarColor("#000000");
setActiveTabColor("#550000");
setInactiveTabColor("#000055");
setActiveTabTextColor("#000000");
setInactiveTabTextColor("#000000");
setTopRuleColor("#770033");
setBottomRuleColor("#770033");
setPortletHeaderColor("#440500");
setPortletIconColor("#440500");
setPortletBorderColor("#000048");
setPortletBorderStyle("solid");
setPortletHeaderTextColor("#000000");
setPageBGColor("#ffffff");
setPageBGImage("");
setNarrowBGColor("#ffffff");
setBodyTextColor("#000000");
}
/**
* Retrieve an existing Theme based on an ID.
*
*/
public static Theme retrieveTheme(BigDecimal themeID) {
// Assert.assertNotNull(themeID);
Assert.exists(themeID);
return Theme.retrieveTheme(new OID(BASE_DATA_OBJECT_TYPE, themeID));
}
/**
* Retrieve an existing Theme based on a data object.
*
* @param dataObject the data object of the Theme to retrieve.
* @return an existing Theme. Note that the return value may be
* null if no Theme data object for this ID exists.
* @pre dataObject != null
*/
public static Theme retrieveTheme(DataObject dataObject) {
// Assert.assertNotNull(dataObject);
Assert.exists(dataObject);
return new Theme(dataObject);
}
/**
* Retrieve an existing Theme based on an OID.
*
* @param oid the OID of the Theme to retrieve.
* @pre oid != null
*/
public static Theme retrieveTheme(OID oid) {
// Assert.assertNotNull(oid);
Assert.exists(oid);
DataObject dataObject = SessionManager.getSession().retrieve(oid);
return Theme.retrieveTheme(dataObject);
}
public static ThemeCollection retrieveAllThemes() {
DataCollection dataCollection =
SessionManager.getSession().retrieve(BASE_DATA_OBJECT_TYPE);
ThemeCollection themeCollection = new ThemeCollection
(dataCollection);
return themeCollection;
}
//
// Accessors
//
/**
* Get the title of this Theme.
*
* @return this Themes title.
*/
public String getName() {
String name = (String)get("theme_name");
// Assert.assertNotNull(name);
Assert.exists(name);
return name;
}
/**
* Set the title of this Theme.
*
*/
public void setName(String name) {
// Assert.assertNotNull(name);
Assert.exists(name);
set("theme_name", name);
}
/**
* Get the Description of this Theme.
*
*/
public String getDescription() {
String description = (String)get("theme_desc");
// Assert.assertNotNull(description);
Assert.exists(description);
return description;
}
/**
* Set the description for this Theme.
*
*/
public void setDescription(String desc) {
//Assert.assertNotNull(desc);
set("theme_desc",desc);
}
public void setContextBarColor(String color) {
set("ctx_bar_color", color);
}
public String getContextBarColor() {
String cbc = (String)get("ctx_bar_color");
return cbc;
}
public void setContextBarTextColor(String color) {
set("ctx_bar_text_color", color);
}
public String getContextBarTextColor() {
String cbtc = (String)get("ctx_bar_text_color");
return cbtc;
}
public void setActiveTabColor(String color) {
set("active_tab_color",color);
}
public String getActiveTabColor() {
String atc = (String)get("active_tab_color");
return atc;
}
public void setInactiveTabColor(String color) {
set("inactive_tab_color",color);
}
public String getInactiveTabColor() {
String itc = (String)get("inactive_tab_color");
return itc;
}
public void setActiveTabTextColor(String color) {
set("active_tab_text_color",color);
}
public String getActiveTabTextColor() {
String attc = (String)get("active_tab_text_color");
return attc;
}
public void setInactiveTabTextColor(String color) {
set("inactive_tab_text_color",color);
}
public String getInactiveTabTextColor() {
String ittc = (String)get("inactive_tab_text_color");
return ittc;
}
public void setTopRuleColor(String color) {
set("top_rule",color);
}
public String getTopRuleColor() {
String trc = (String)get("top_rule");
return trc;
}
public void setBottomRuleColor(String color) {
set("bottom_rule",color);
}
public String getBottomRuleColor() {
String brc = (String)get("bottom_rule");
return brc;
}
public void setPortletHeaderColor(String color) {
set("portlet_head",color);
}
public String getPortletHeaderColor() {
String phc = (String)get("portlet_head");
return phc;
}
public void setPortletIconColor(String color) {
set("portlet_icon",color);
}
public String getPortletIconColor() {
String pic = (String)get("portlet_icon");
return pic;
}
public void setPortletBorderColor(String color) {
set("portlet_border_color",color);
}
public String getPortletBorderColor() {
String pbc = (String)get("portlet_border_color");
return pbc;
}
public void setPortletBorderStyle(String style) {
set("portlet_border_style",style);
}
public String getPortletBorderStyle() {
String pbs = (String)get("portlet_border_style");
return pbs;
}
public void setPortletHeaderTextColor(String color) {
set("portlet_header_text_color",color);
}
public String getPortletHeaderTextColor() {
String phtc = (String)get("portlet_header_text_color");
return phtc;
}
public void setPageBGColor(String color) {
set("page_bg_color",color);
}
public String getPageBGColor() {
String pbgc = (String)get("page_bg_color");
return pbgc;
}
public void setPageBGImage(String url) {
set("page_bg_image",url);
}
public String getPageBGImage() {
String pbgi = (String)get("page_bg_image");
return pbgi;
}
public void setNarrowBGColor(String color) {
set("narrow_bg_color",color);
}
public String getNarrowBGColor() {
String nbc = (String)get("narrow_bg_color");
return nbc;
}
public void setBodyTextColor(String color) {
set("body_text_color",color);
}
public String getBodyTextColor() {
String btc = (String)get("body_text_color");
return btc;
}
@Override
protected void afterSave() {
super.afterSave();
}
public StringBuffer buildStyleBlock() {
StringBuffer buffer = new StringBuffer();
buffer.append("<STYLE type=\"text/css\"> <!--");
buffer.append(" table.globalHeader { background-color: "
+ getContextBarColor() + ";} ");
buffer.append(" table.globalHeader { color: "
+ getContextBarTextColor() + ";} ");
buffer.append(" table.tabs td.activeTab { background: "
+ getActiveTabColor() + ";} ");
buffer.append(" table.tabs td.tabBeginning { background: "
+ getActiveTabColor() + ";} ");
buffer.append(" table.tabs td.tabEnd { background: "
+ getActiveTabColor() + ";} ");
buffer.append(" table.tabs td.inactiveTab { background: "
+ getInactiveTabColor() + ";} ");
buffer.append(" table.tabs td.tabBeginningOff { background: "
+ getInactiveTabColor() + ";} ");
buffer.append(" table.tabs td.tabEndOff { background: "
+ getInactiveTabColor() + ";} ");
buffer.append(" table.tabs td.activeTab { color: "
+ getActiveTabTextColor() + ";} ");
buffer.append(" table.tabs td.inactiveTab { color: "
+ getInactiveTabTextColor() + ";} ");
buffer.append(" table.topRuleUnderTabs { background: "
+ getTopRuleColor() + ";} ");
buffer.append(" table.topRuleNoTabs { background: "
+ getTopRuleColor() + ";} ");
buffer.append(" table.bottomRule { background: "
+ getBottomRuleColor() + ";} ");
buffer.append(" table.portlet td.portletHeader { background: "
+ getPortletHeaderColor() + ";} ");
buffer.append(" table.portlet td.portletIcon { background: "
+ getPortletIconColor() + ";} ");
buffer.append(" table.portlet td.portletHeader { color: "
+ getPortletHeaderTextColor() + ";} ");
buffer.append(" body { background: " + getPageBGColor() + ";} ");
if(getPageBGImage() != null)
buffer.append(" body {background-image: url("
+ getPageBGImage() + ");} ");
buffer.append(" td.narrowColumn td.portletBody { background: "
+ getNarrowBGColor() + ";} ");
buffer.append(" td.narrowColumnLeft td.portletBody { background: "
+ getNarrowBGColor() + ";} ");
buffer.append(" td.narrowColumnRight td.portletBody { background: "
+ getNarrowBGColor() + ";} ");
buffer.append("--></STYLE>");
return (buffer);
}
}