com.ibm.as400.util.html.HTMLHead Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jt400 Show documentation
Show all versions of jt400 Show documentation
The Open Source version of the IBM Toolbox for Java
///////////////////////////////////////////////////////////////////////////////
//
// JTOpen (IBM Toolbox for Java - OSS version)
//
// Filename: HTMLHead.java
//
// The source code contained herein is licensed under the IBM Public License
// Version 1.0, which has been approved by the Open Source Initiative.
// Copyright (C) 1997-2001 International Business Machines Corporation and
// others. All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////
package com.ibm.as400.util.html;
import com.ibm.as400.access.Trace;
import com.ibm.as400.access.ExtendedIllegalStateException;
import com.ibm.as400.access.ExtendedIllegalArgumentException;
import java.util.Vector;
import java.beans.PropertyChangeSupport;
import java.beans.PropertyChangeListener;
/**
* The HTMLHead class represents an HTML head tag, which contains information about the HTML document.
*
* This example creates an HTMLHead tag:
*
* // Create an HTMLHead with a title.
* HTMLHead head = new HTMLHead("My HTML Document");
*
* // Create an HTMLMeta.
* HTMLMeta meta = new HTMLMeta("expires", "Mon, 01 Jun 2000 12:00:00 CST");
* HTMLMeta meta2 = new HTMLMeta("refresh", "5", "http://www.sample.com/next.html");
*
* // Add the meta information to the HTMLHead
* head.addMetaInformation(meta);
* head.addMetaInformation(meta2);
*
*
* Here is the output of the HTMLHead tag:
*
* <head>
* <meta http-equiv="expired" content="Mon, 06 Jun 2000 12:00:00 CST" />
* <meta http-equiv="refresh" content="5; URL=http://www.sample.com/next.html" />
* <title>My HTML Document</title>
* </head>
*
*
* Using XSL Formatting Objects, the head tag represents a page header.
*
* Calling getFOTag() would produce the following.
*
* <fo:static-content flow-name='xsl-region-before'>
* <fo:block-container>
* My HTML Document</fo:block-container>
* </fo:static-content>
*
*
*
* HTMLHead objects generate the following events:
*
* - ElementEvent - The events fired are:
*
* - elementAdded
*
- elementRemoved
*
* - PropertyChangeEvent
*
**/
public class HTMLHead extends HTMLTagAttributes implements java.io.Serializable // @Z1C
{
private static final String copyright = "Copyright (C) 1997-2001 International Business Machines Corporation and others.";
static final long serialVersionUID = 5006426803056962528L;
private String title_; // The title to use for HTML document.
private String lang_; // The primary language used to display the tags contents.
private String dir_; // The direction of the text interpretation.
private boolean useFO_ = false; // Indicates if XSL-FO tags are outputted. //@C1A
private Vector list_ = new Vector();
transient private Vector elementListeners; // The list of element listeners @CRS
/**
* Constructs a default HTMLHead object.
**/
public HTMLHead()
{
super();
}
/**
* Constructs an HTMLHead object with the specified title.
*
* @param title The title of the HTML document.
**/
public HTMLHead(String title)
{
super();
setTitle(title);
}
/**
* Constructs an HTMLHead object with the specified title and meta information.
*
* @param title The title of the HTML document.
* @param meta The HTML meta information.
**/
public HTMLHead(String title, HTMLMeta meta)
{
super();
addMetaInformation(meta);
setTitle(title);
}
/**
* Adds HTMLMeta information to the HTMLHead.
* The <head> tag contains a list of <meta> tags.
*
* @param meta The meta information to add.
**/
public void addMetaInformation(HTMLMeta meta)
{
//@B1D
if (meta == null)
throw new NullPointerException("meta");
list_.addElement(meta);
fireElementEvent(ElementEvent.ELEMENT_ADDED);
}
/**
* Adds an ElementListener.
*
* @param listener The ElementListener.
**/
public void addMetaInformationElementListener(ElementListener listener)
{
if (listener == null)
throw new NullPointerException("listener");
if (elementListeners == null) elementListeners = new Vector(); //@CRS
elementListeners.addElement(listener);
}
/**
* Fires the element event.
**/
private void fireElementEvent(int evt)
{
if (elementListeners == null) return; //@CRS
Vector targets;
targets = (Vector) elementListeners.clone();
ElementEvent elementEvt = new ElementEvent(this, evt);
for (int i = 0; i < targets.size(); i++)
{
ElementListener target = (ElementListener)targets.elementAt(i);
if (evt == ElementEvent.ELEMENT_ADDED)
target.elementAdded(elementEvt);
else if (evt == ElementEvent.ELEMENT_REMOVED)
target.elementRemoved(elementEvt);
}
}
/**
* Returns the direction of the text interpretation.
* @return The direction of the text.
**/
public String getDirection()
{
return dir_;
}
/**
* Returns the direction attribute tag.
* @return The direction tag.
**/
String getDirectionAttributeTag()
{
if(useFO_) //@C1A
{ //@C1A
if((dir_!=null) && (dir_.length()>0)) //@C1A
{ //@C1A
if(dir_.equals(HTMLConstants.RTL)) //@C1A
return " writing-mode='rl'"; //@C1A
else //@C1A
return " writing-mode='lr'"; //@C1A
} //@C1A
else //@C1A
return ""; //@C1A
} //@C1A
else //@C1A
{ //@C1A
//@B1D
if ((dir_ != null) && (dir_.length() > 0))
return " dir=\"" + dir_ + "\"";
else
return "";
} //@C1A
}
/**
* Returns the language of the head element.
* @return The language of the head element.
**/
public String getLanguage()
{
return lang_;
}
/**
* Returns the language attribute tag.
* @return The language tag.
**/
String getLanguageAttributeTag()
{
//@B1D
if ((lang_ != null) && (lang_.length() > 0))
return " lang=\"" + lang_ + "\"";
else
return "";
}
/**
* Returns the tag for the HTML alignment.
* @return The tag.
**/
public String getTag()
{
//@B1D
if(useFO_) //@C1A
return getFOTag(); //@C1A
if (title_ == null && list_.isEmpty())
{
Trace.log(Trace.ERROR, "Attempting to get tag before setting the title or adding meta information to the head.");
throw new ExtendedIllegalStateException(
"title/meta", ExtendedIllegalStateException.PROPERTY_NOT_SET );
}
StringBuffer s = new StringBuffer("");
s.append("\n");
for (int i=0; i < list_.size(); i++)
{
HTMLTagElement data = (HTMLTagElement)list_.elementAt(i);
s.append(data.getTag());
}
if (title_ != null)
{
s.append("");
s.append(title_);
s.append(" \n");
}
s.append("\n");
return s.toString();
}
/**
* Returns the tag for the XSL-FO header.
* The language attribute and Meta tags are not supported in XSL-FO.
* @return The tag.
**/
public String getFOTag() //@C1A
{
//Save current state of useFO_
boolean useFO = useFO_;
//Indicate that Formatting Object tag is outputted
setUseFO(true);
if (title_ == null && list_.isEmpty())
{
Trace.log(Trace.ERROR, "Attempting to get XSL-FO tag before setting the title for the head.");
throw new ExtendedIllegalStateException("title", ExtendedIllegalStateException.PROPERTY_NOT_SET );
}
StringBuffer s = new StringBuffer("\n");
s.append("\n");
//Add the title
if(title_ != null)
{
s.append(title_);
}
s.append(" \n");
s.append(" \n");
//Set useFO_ to previous state.
setUseFO(useFO);
return s.toString();
}
/**
* Returns the title of the HTMLHead object.
* @return The title.
**/
public String getTitle()
{
return title_;
}
/**
* Returns if Formatting Object tags are outputted.
* The default value is false.
* @return true if the output generated is an XSL formatting object, false if the output generated is HTML.
**/
public boolean isUseFO() //@C1A
{
return useFO_;
}
/**
* Removes this ElementListener.
*
* @param listener The ElementListener.
**/
public void removeMetaInformationElementListener(ElementListener listener)
{
if (listener == null)
throw new NullPointerException("listener");
if (elementListeners != null) elementListeners.removeElement(listener); //@CRS
}
/**
* Deserializes and initializes transient data.
**/
private void readObject(java.io.ObjectInputStream in)
throws java.io.IOException, ClassNotFoundException
{
in.defaultReadObject();
//@CRS changes_ = new PropertyChangeSupport(this);
//@CRS elementListeners = new Vector();
}
/**
* Removes an HTMLMeta from the HTMLHead.
*
* @param meta The meta information to remove.
**/
public void removeMetaInformation(HTMLMeta meta)
{
//@B1D
if (meta == null)
throw new NullPointerException("meta");
if (list_.removeElement(meta))
fireElementEvent(ElementEvent.ELEMENT_REMOVED);
}
/**
* Sets the direction of the text interpretation. Setting the direction
* will add the dir attribute to both the head tag and the
* title tag if one is being used.
*
* @param dir The direction. One of the following constants
* defined in HTMLConstants: LTR or RTL.
*
* @see com.ibm.as400.util.html.HTMLConstants
*
**/
public void setDirection(String dir)
{
if (dir == null)
throw new NullPointerException("dir");
// If direction is not one of the valid HTMLConstants, throw an exception.
if ( !(dir.equals(HTMLConstants.LTR)) && !(dir.equals(HTMLConstants.RTL)) )
{
throw new ExtendedIllegalArgumentException("dir", ExtendedIllegalArgumentException.PARAMETER_VALUE_NOT_VALID);
}
String old = dir_;
dir_ = dir;
if (changes_ != null) changes_.firePropertyChange("dir", old, dir ); //@CRS
}
/**
* Sets the language of the HTMLHead tag. Setting the language
* will add the lang attribute to both the head tag and the
* title tag if one is being used.
*
* @param lang The language. Example language tags include:
* en and en-US.
*
**/
public void setLanguage(String lang)
{
if (lang == null)
throw new NullPointerException("lang");
String old = lang_;
lang_ = lang;
if (changes_ != null) changes_.firePropertyChange("lang", old, lang ); //@CRS
}
/**
* Sets the title of the HTML document.
*
* @param title The title of the HTML document.
**/
public void setTitle(String title)
{
if (title == null)
throw new NullPointerException("title");
if (title.length() == 0)
throw new ExtendedIllegalArgumentException("title", ExtendedIllegalArgumentException.PARAMETER_VALUE_NOT_VALID);
if (Trace.isTraceOn())
Trace.log(Trace.INFORMATION, " Setting title for .");
String old = title_;
title_ = title;
if (changes_ != null) changes_.firePropertyChange("title", old, title ); //@CRS
}
/**
* Sets if Formatting Object tags should be used.
* The default value is false.
* @param useFO - true if output generated is an XSL formatting object, false if the output generated is HTML.
**/
public void setUseFO(boolean useFO) //@C1A
{
boolean old = useFO_;
useFO_ = useFO;
if (changes_ != null) changes_.firePropertyChange("useFO", old, useFO );
}
/**
* Returns a String representation for the HTMLHead tag.
* @return The tag.
**/
public String toString()
{
return getTag();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy