// idega 2000 - Tryggvi Larusson
/*
* Copyright 2000 idega.is All Rights Reserved.
*/
package com.idega.presentation.text;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import javax.faces.context.FacesContext;
import com.idega.core.localisation.business.ICLocaleBusiness;
import com.idega.idegaweb.IWConstants;
import com.idega.presentation.IWContext;
import com.idega.presentation.PresentationObject;
import com.idega.util.text.StyleConstants;
/**
* A wrapper class for presenting plain (formatted) text in idegaWeb
* Presentaiton Objects.
*
* @author <a href="mailto:tryggvi@idega.is">Tryggvi Larusson </a>
* @version 1.2
*/
public class Text extends PresentationObject {
//Static variables:
private static Text emptyText;
private static Text HTMLbreak;
private static Text HTMLnbsp;
public static String FONT_FACE_ARIAL = "Arial, Helvetica, Sans-serif";
public static String FONT_FACE_TIMES = "Times New Roman, Times, serif";
public static String FONT_FACE_COURIER = "Courier New, Courier, mono";
public static String FONT_FACE_GEORGIA = "Georgia, Times New Roman, Times, serif";
public static String FONT_FACE_VERDANA = "Verdana, Arial, Helvetica, sans-serif";
public static String FONT_FACE_GENEVA = "Geneva, Arial, Helvetica, san-serif";
public static String FONT_FACE_STYLE_NORMAL = "normal";
public static String FONT_FACE_STYLE_BOLD = "bold";
public static String FONT_FACE_STYLE_ITALIC = "italic";
public static String FONT_SIZE_7_HTML_1 = "1";
public static String FONT_SIZE_7_STYLE_TAG = "7pt";
public static String FONT_SIZE_10_HTML_2 = "2";
public static String FONT_SIZE_10_STYLE_TAG = "10pt";
public static String FONT_SIZE_12_HTML_3 = "3";
public static String FONT_SIZE_12_STYLE_TAG = "12pt";
public static String FONT_SIZE_14_HTML_4 = "4";
public static String FONT_SIZE_14_STYLE_TAG = "14pt";
public static String FONT_SIZE_16_STYLE_TAG = "16pt";
public static String FONT_SIZE_18_HTML_5 = "5";
public static String FONT_SIZE_18_STYLE_TAG = "18pt";
public static String FONT_SIZE_24_HTML_6 = "6";
public static String FONT_SIZE_24_STYLE_TAG = "24pt";
public static String FONT_SIZE_34_HTML_7 = "7";
public static String FONT_SIZE_34_STYLE_TAG = "34pt";
public static String NON_BREAKING_SPACE = " ";
public static String BREAK = "<br/>";
public static final String EMPTY_TEXT_STRING = "No text";
//instance variables:
protected String text;
protected Map localizationMap;
protected boolean attributeSet;
protected boolean teletype;
private boolean addHTMLFontTag = true;
/**
* *Constructor that creates the object with an empty string
*/
public Text() {
this(EMPTY_TEXT_STRING);
}
public Text(String text) {
super();
setTransient(false);
setText(text);
this.attributeSet = false;
this.teletype = false;
}
public Text(String text, boolean bold, boolean italic, boolean underline) {
this(text);
if (bold) {
this.setBold();
}
if (italic) {
this.setItalic();
}
if (underline) {
this.setUnderline();
}
}
public void setMarkupAttribute(String name, String value) {
this.attributeSet = true;
super.setMarkupAttribute(name, value);
}
/* (non-Javadoc)
* @see com.idega.presentation.PresentationObject#setStyleAttribute(java.lang.String, java.lang.String)
*/
public void setStyleAttribute(String attribute, String value) {
this.attributeSet = true;
super.setStyleAttribute(attribute, value);
}
protected boolean isEnclosedByParagraph() {
boolean returnBool = false;
PresentationObject obj = getParentObject();
while (obj != null) {
//if (obj.getClassName().equals("com.idega.presentation.text.Paragraph")) {
if(obj instanceof Paragraph){
returnBool = true;
}
//obj = obj.getParentObject();
try{
obj=(PresentationObject)obj.getParent();
}
catch(ClassCastException cse){
obj=null;
}
}
return returnBool;
}
public void setFontSize(String size) {
this.setStyleAttribute("font-size", getFontSize(size));
}
public void setFontSize(int size) {
setFontSize(Integer.toString(size));
}
public void setFontFace(String fontFace) {
setStyleAttribute("font-family", fontFace);
}
public void setFontColor(String color) {
setStyleAttribute("color", color);
}
public void setFontStyle(String style) {
setStyleAttribute(style);
}
public void setFontClass(String styleClass) {
this.attributeSet = true;
setStyle(styleClass);
}
public void setStyle(String style) {
this.attributeSet = true;
setStyleClass(style);
}
public void addToText(String text) {
if (this.text == EMPTY_TEXT_STRING) {
this.text = text;
}
else {
this.text = this.text + text;
}
}
/**
*
* @uml.property name="text"
*/
public void setText(String text) {
this.text = text;
}
public void setLocalizedText(String localeString, String text) {
setLocalizedText(ICLocaleBusiness.getLocaleFromLocaleString(localeString), text);
}
public void setLocalizedText(int icLocaleID, String text) {
setLocalizedText(ICLocaleBusiness.getLocale(icLocaleID), text);
}
public void setLocalizedText(Locale locale, String text) {
getLocalizationMap().put(locale, text);
}
/**
*
* @uml.property name="localizationMap"
*/
private Map getLocalizationMap() {
if (this.localizationMap == null) {
this.localizationMap = new HashMap();
}
return this.localizationMap;
}
public void addBreak() {
addToText(BREAK);
}
public void setTeleType() {
this.teletype = true;
}
public void setBold() {
setBold(true);
}
public void setBold(boolean bold) {
if (bold) {
setStyleAttribute(StyleConstants.ATTRIBUTE_FONT_WEIGHT, StyleConstants.FONT_WEIGHT_BOLD);
}
else {
setStyleAttribute(StyleConstants.ATTRIBUTE_FONT_WEIGHT, StyleConstants.FONT_WEIGHT_NORMAL);
}
}
public void setItalic() {
setItalic(true);
}
public void setItalic(boolean italic) {
if (italic) {
setStyleAttribute(StyleConstants.ATTRIBUTE_FONT_STYLE, StyleConstants.FONT_STYLE_ITALIC);
}
else {
setStyleAttribute(StyleConstants.ATTRIBUTE_FONT_STYLE, StyleConstants.FONT_STYLE_NORMAL);
}
}
public void setUnderline() {
setUnderline(true);
}
public void setUnderline(boolean underline) {
if (underline) {
setStyleAttribute(StyleConstants.ATTRIBUTE_TEXT_DECORATION, StyleConstants.TEXT_DECORATION_UNDERLINE);
}
else {
setStyleAttribute(StyleConstants.ATTRIBUTE_TEXT_DECORATION, StyleConstants.TEXT_DECORATION_NONE);
}
}
/**
*
* @uml.property name="text"
*/
public String getText() {
return this.text;
}
public String toString() {
return this.text;
}
public void setCSSClass(String cStyleSheetReferanceClass) {
setMarkupAttribute("class", cStyleSheetReferanceClass);
}
/**
* returns empty string with fontsize = 1
*/
public static Text emptyString() {
if (emptyText == null) {
emptyText = new Text("");
emptyText.setFontSize("1");
}
return (Text)emptyText.clone();
}
public static Text getBreak() {
if (HTMLbreak == null) {
HTMLbreak = new Text(BREAK);
HTMLbreak.addHTMLFontTag(false);
HTMLbreak.setUseBuilderObjectControl(false);
// HTMLbreak.setFontSize("1");
}
return (Text)HTMLbreak.clone();
}
public static Text getNonBrakingSpace() {
if (HTMLnbsp == null) {
HTMLnbsp = new Text(NON_BREAKING_SPACE);
HTMLnbsp.addHTMLFontTag(false);
//HTMLnbsp.setFontSize(1);
}
return (Text)HTMLnbsp.clone();
}
public static Text getNonBrakingSpace(int fontSize) {
Text nbsp = getNonBrakingSpace();
nbsp.setFontSize(fontSize);
//return HTMLnbsp;
return nbsp;
}
public void addHTMLFontTag(boolean addHTMLFontTag) {
this.addHTMLFontTag = addHTMLFontTag;
}
public Object clone() {
Text obj = null;
try {
obj = (Text) super.clone();
obj.text = this.text;
obj.attributeSet = this.attributeSet;
obj.addHTMLFontTag = this.addHTMLFontTag;
if (this.localizationMap != null) {
obj.localizationMap = (Map) ((HashMap) this.localizationMap).clone();
}
}
catch (Exception ex) {
ex.printStackTrace(System.err);
}
return obj;
}
/**
*
* <p>
* Gets the String localized if set or the default string if it is not set as a regular String (unencoded for xhtml)
* </p>
* @param iwc
* @return
*/
private String getLocalizedTextAsUnencodedString(IWContext iwc) {
if (this.localizationMap != null) {
Locale currLocale = iwc.getCurrentLocale();
String localizedString = (String) this.getLocalizationMap().get(currLocale);
if (localizedString != null) {
return localizedString;
}
else {
String defLocalizedString = (String) this.getLocalizationMap().get(iwc.getIWMainApplication().getSettings().getDefaultLocale());
if (defLocalizedString != null) {
return defLocalizedString;
}
}
}
return getText();
}
public String getLocalizedText(IWContext iwc){
//return xhtmlEncode(getLocalizedTextAsUnencodedString(iwc));
return getLocalizedTextAsUnencodedString(iwc);
}
public void print(IWContext iwc) throws Exception {
if (getMarkupLanguage().equals(IWConstants.MARKUP_LANGUAGE_HTML)) {
if (this.attributeSet || showTag()) {
print("<" + getTag() + " " + getMarkupAttributesString() + " >");
print(getLocalizedText(iwc));
print("</" + getTag() + ">");
}
else {
print(getLocalizedText(iwc));
}
}
else if (getMarkupLanguage().equals(IWConstants.MARKUP_LANGUAGE_PDF_XML)) {
String attributes = getMarkupAttributesString();
print("<paragraph " + attributes + ">");
print(getLocalizedText(iwc));
print("</paragraph>");
}
else if (getMarkupLanguage().equals(IWConstants.MARKUP_LANGUAGE_WML)) {
String text = getLocalizedText(iwc);
print(text);
}
}
private String getFontSize(String size) {
if (size.equals(FONT_SIZE_7_HTML_1)) {
return FONT_SIZE_7_STYLE_TAG;
}
else if (size.equals(FONT_SIZE_10_HTML_2)) {
return FONT_SIZE_10_STYLE_TAG;
}
else if (size.equals(FONT_SIZE_12_HTML_3)) {
return FONT_SIZE_12_STYLE_TAG;
}
else if (size.equals(FONT_SIZE_14_HTML_4)) {
return FONT_SIZE_14_STYLE_TAG;
}
else if (size.equals(FONT_SIZE_18_HTML_5)) {
return FONT_SIZE_18_STYLE_TAG;
}
else if (size.equals(FONT_SIZE_24_HTML_6)) {
return FONT_SIZE_24_STYLE_TAG;
}
else if (size.equals(FONT_SIZE_34_HTML_7)) {
return FONT_SIZE_34_STYLE_TAG;
}
return size + "px";
}
protected String getTag() {
return "span";
}
protected boolean showTag() {
return false;
}
public void restoreState(FacesContext context, Object state) {
Object values[] = (Object[])state;
super.restoreState(context, values[0]);
this.text = (String) values[1];
this.localizationMap = (Map) values[2];
this.attributeSet = ((Boolean)values[3]).booleanValue();
this.teletype = ((Boolean)values[4]).booleanValue();
this.addHTMLFontTag = ((Boolean)values[5]).booleanValue();
}
/* (non-Javadoc)
* @see javax.faces.component.StateHolder#saveState(javax.faces.context.FacesContext)
*/
public Object saveState(FacesContext context) {
Object values[] = new Object[6];
values[0] = super.saveState(context);
values[1] = this.text;
values[2] = this.localizationMap;
values[3] = Boolean.valueOf(this.attributeSet);
values[4] = Boolean.valueOf(this.teletype);
values[5] = Boolean.valueOf(this.addHTMLFontTag);
return values;
}
}