JBoss Rich Faces SVN: r15115 - root/cdk/trunk/plugins/generator/src/main/xsd.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2009-08-05 11:46:00 -0400 (Wed, 05 Aug 2009)
New Revision: 15115
Added:
root/cdk/trunk/plugins/generator/src/main/xsd/xhtml1-transitional.xsd
Log:
XHTML 1 Transitional initial import
Added: root/cdk/trunk/plugins/generator/src/main/xsd/xhtml1-transitional.xsd
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/xsd/xhtml1-transitional.xsd (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/xsd/xhtml1-transitional.xsd 2009-08-05 15:46:00 UTC (rev 15115)
@@ -0,0 +1,2755 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema version="1.0" xml:lang="en"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.w3.org/1999/xhtml"
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:xml="http://www.w3.org/XML/1998/namespace"
+ elementFormDefault="qualified">
+
+ <xs:annotation>
+ <xs:documentation>
+ XHTML 1.0 (Second Edition) Transitional in XML Schema
+
+ This is the same as HTML 4 Transitional except for
+ changes due to the differences between XML and SGML.
+
+ Namespace = http://www.w3.org/1999/xhtml
+
+ For further information, see: http://www.w3.org/TR/xhtml1
+
+ Copyright (c) 1998-2002 W3C (MIT, INRIA, Keio),
+ All Rights Reserved.
+
+ The DTD version is identified by the PUBLIC and SYSTEM identifiers:
+
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
+
+ $Id: xhtml1-transitional.xsd,v 1.5 2002/08/28 09:53:29 mimasa Exp $
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:import namespace="http://www.w3.org/XML/1998/namespace"
+ schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================ Character mnemonic entities =========================
+
+ XHTML entity sets are identified by the PUBLIC and SYSTEM identifiers:
+
+ PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+ SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"
+
+ PUBLIC "-//W3C//ENTITIES Special for XHTML//EN"
+ SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent"
+
+ PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN"
+ SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent"
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== Imported Names ====================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:simpleType name="ContentType">
+ <xs:annotation>
+ <xs:documentation>
+ media type, as per [RFC2045]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="ContentTypes">
+ <xs:annotation>
+ <xs:documentation>
+ comma-separated list of media types, as per [RFC2045]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Charset">
+ <xs:annotation>
+ <xs:documentation>
+ a character encoding, as per [RFC2045]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Charsets">
+ <xs:annotation>
+ <xs:documentation>
+ a space separated list of character encodings, as per [RFC2045]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="LanguageCode">
+ <xs:annotation>
+ <xs:documentation>
+ a language code, as per [RFC3066]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:language"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Character">
+ <xs:annotation>
+ <xs:documentation>
+ a single character, as per section 2.2 of [XML]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:length value="1" fixed="true"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="Number">
+ <xs:annotation>
+ <xs:documentation>
+ one or more digits
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:nonNegativeInteger">
+ <xs:pattern value="[0-9]+"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="tabindexNumber">
+ <xs:annotation>
+ <xs:documentation>
+ tabindex attribute specifies the position of the current element
+ in the tabbing order for the current document. This value must be
+ a number between 0 and 32767. User agents should ignore leading zeros.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="Number">
+ <xs:minInclusive value="0"/>
+ <xs:maxInclusive value="32767"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="LinkTypes">
+ <xs:annotation>
+ <xs:documentation>
+ space-separated list of link types
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:NMTOKENS"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="MediaDesc">
+ <xs:annotation>
+ <xs:documentation>
+ single or comma-separated list of media descriptors
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[^,]+(,\s*[^,]+)*"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="URI">
+ <xs:annotation>
+ <xs:documentation>
+ a Uniform Resource Identifier, see [RFC2396]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:anyURI"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="UriList">
+ <xs:annotation>
+ <xs:documentation>
+ a space separated list of Uniform Resource Identifiers
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Datetime">
+ <xs:annotation>
+ <xs:documentation>
+ date and time information. ISO date format
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:dateTime"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Script">
+ <xs:annotation>
+ <xs:documentation>
+ script expression
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="StyleSheet">
+ <xs:annotation>
+ <xs:documentation>
+ style sheet data
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Text">
+ <xs:annotation>
+ <xs:documentation>
+ used for titles etc.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="FrameTarget">
+ <xs:annotation>
+ <xs:documentation>
+ render in this frame
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:pattern value="_(blank|self|parent|top)|[A-Za-z]\c*"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="Length">
+ <xs:annotation>
+ <xs:documentation>
+ nn for pixels or nn% for percentage length
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[-+]?(\d+|\d+(\.\d+)?%)"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="MultiLength">
+ <xs:annotation>
+ <xs:documentation>
+ pixel, percentage, or relative
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[-+]?(\d+|\d+(\.\d+)?%)|[1-9]?(\d+)?\*"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="Pixels">
+ <xs:annotation>
+ <xs:documentation>
+ integer representing length in pixels
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:nonNegativeInteger"/>
+ </xs:simpleType>
+
+ <xs:annotation>
+ <xs:documentation>
+ these are used for image maps
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:simpleType name="Shape">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="rect"/>
+ <xs:enumeration value="circle"/>
+ <xs:enumeration value="poly"/>
+ <xs:enumeration value="default"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="Coords">
+ <xs:annotation>
+ <xs:documentation>
+ comma separated list of lengths
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:pattern
+ value="[-+]?(\d+|\d+(\.\d+)?%)(,\s*[-+]?(\d+|\d+(\.\d+)?%))*"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="ImgAlign">
+ <xs:annotation>
+ <xs:documentation>
+ used for object, applet, img, input and iframe
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="top"/>
+ <xs:enumeration value="middle"/>
+ <xs:enumeration value="bottom"/>
+ <xs:enumeration value="left"/>
+ <xs:enumeration value="right"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="Color">
+ <xs:annotation>
+ <xs:documentation>
+ a color using sRGB: #RRGGBB as Hex values
+
+ There are also 16 widely known color names with their sRGB values:
+
+ Black = #000000 Green = #008000
+ Silver = #C0C0C0 Lime = #00FF00
+ Gray = #808080 Olive = #808000
+ White = #FFFFFF Yellow = #FFFF00
+ Maroon = #800000 Navy = #000080
+ Red = #FF0000 Blue = #0000FF
+ Purple = #800080 Teal = #008080
+ Fuchsia= #FF00FF Aqua = #00FFFF
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[A-Za-z]+|#[0-9A-Fa-f]{3}|#[0-9A-Fa-f]{6}"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Generic Attributes ===============================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:attributeGroup name="coreattrs">
+ <xs:annotation>
+ <xs:documentation>
+ core attributes common to most elements
+ id document-wide unique id
+ class space separated list of classes
+ style associated style info
+ title advisory title/amplification
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="class" type="xs:NMTOKENS"/>
+ <xs:attribute name="style" type="StyleSheet"/>
+ <xs:attribute name="title" type="Text"/>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="i18n">
+ <xs:annotation>
+ <xs:documentation>
+ internationalization attributes
+ lang language code (backwards compatible)
+ xml:lang language code (as per XML 1.0 spec)
+ dir direction for weak/neutral text
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="lang" type="LanguageCode"/>
+ <xs:attribute ref="xml:lang"/>
+ <xs:attribute name="dir">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="ltr"/>
+ <xs:enumeration value="rtl"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="events">
+ <xs:annotation>
+ <xs:documentation>
+ attributes for common UI events
+ onclick a pointer button was clicked
+ ondblclick a pointer button was double clicked
+ onmousedown a pointer button was pressed down
+ onmouseup a pointer button was released
+ onmousemove a pointer was moved onto the element
+ onmouseout a pointer was moved away from the element
+ onkeypress a key was pressed and released
+ onkeydown a key was pressed down
+ onkeyup a key was released
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="onclick" type="Script"/>
+ <xs:attribute name="ondblclick" type="Script"/>
+ <xs:attribute name="onmousedown" type="Script"/>
+ <xs:attribute name="onmouseup" type="Script"/>
+ <xs:attribute name="onmouseover" type="Script"/>
+ <xs:attribute name="onmousemove" type="Script"/>
+ <xs:attribute name="onmouseout" type="Script"/>
+ <xs:attribute name="onkeypress" type="Script"/>
+ <xs:attribute name="onkeydown" type="Script"/>
+ <xs:attribute name="onkeyup" type="Script"/>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="focus">
+ <xs:annotation>
+ <xs:documentation>
+ attributes for elements that can get the focus
+ accesskey accessibility key character
+ tabindex position in tabbing order
+ onfocus the element got the focus
+ onblur the element lost the focus
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="accesskey" type="Character"/>
+ <xs:attribute name="tabindex" type="tabindexNumber"/>
+ <xs:attribute name="onfocus" type="Script"/>
+ <xs:attribute name="onblur" type="Script"/>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="attrs">
+ <xs:attributeGroup ref="coreattrs"/>
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attributeGroup ref="events"/>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="TextAlign">
+ <xs:annotation>
+ <xs:documentation>
+ text alignment for p, div, h1-h6. The default is
+ align="left" for ltr headings, "right" for rtl
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="align">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="left"/>
+ <xs:enumeration value="center"/>
+ <xs:enumeration value="right"/>
+ <xs:enumeration value="justify"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:attributeGroup>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Text Elements ====================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:group name="special.extra">
+ <xs:choice>
+ <xs:element ref="object"/>
+ <xs:element ref="applet"/>
+ <xs:element ref="img"/>
+ <xs:element ref="map"/>
+ <xs:element ref="iframe"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="special.basic">
+ <xs:choice>
+ <xs:element ref="br"/>
+ <xs:element ref="span"/>
+ <xs:element ref="bdo"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="special">
+ <xs:choice>
+ <xs:group ref="special.basic"/>
+ <xs:group ref="special.extra"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="fontstyle.extra">
+ <xs:choice>
+ <xs:element ref="big"/>
+ <xs:element ref="small"/>
+ <xs:element ref="font"/>
+ <xs:element ref="basefont"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="fontstyle.basic">
+ <xs:choice>
+ <xs:element ref="tt"/>
+ <xs:element ref="i"/>
+ <xs:element ref="b"/>
+ <xs:element ref="u"/>
+ <xs:element ref="s"/>
+ <xs:element ref="strike"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="fontstyle">
+ <xs:choice>
+ <xs:group ref="fontstyle.basic"/>
+ <xs:group ref="fontstyle.extra"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="phrase.extra">
+ <xs:choice>
+ <xs:element ref="sub"/>
+ <xs:element ref="sup"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="phrase.basic">
+ <xs:choice>
+ <xs:element ref="em"/>
+ <xs:element ref="strong"/>
+ <xs:element ref="dfn"/>
+ <xs:element ref="code"/>
+ <xs:element ref="q"/>
+ <xs:element ref="samp"/>
+ <xs:element ref="kbd"/>
+ <xs:element ref="var"/>
+ <xs:element ref="cite"/>
+ <xs:element ref="abbr"/>
+ <xs:element ref="acronym"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="phrase">
+ <xs:choice>
+ <xs:group ref="phrase.basic"/>
+ <xs:group ref="phrase.extra"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="inline.forms">
+ <xs:choice>
+ <xs:element ref="input"/>
+ <xs:element ref="select"/>
+ <xs:element ref="textarea"/>
+ <xs:element ref="label"/>
+ <xs:element ref="button"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="misc.inline">
+ <xs:annotation>
+ <xs:documentation>
+ these can only occur at block level
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice>
+ <xs:element ref="ins"/>
+ <xs:element ref="del"/>
+ <xs:element ref="script"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="misc">
+ <xs:annotation>
+ <xs:documentation>
+ these can only occur at block level
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice>
+ <xs:element ref="noscript"/>
+ <xs:group ref="misc.inline"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="inline">
+ <xs:choice>
+ <xs:element ref="a"/>
+ <xs:group ref="special"/>
+ <xs:group ref="fontstyle"/>
+ <xs:group ref="phrase"/>
+ <xs:group ref="inline.forms"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="Inline" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ "Inline" covers inline or "text-level" element
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="inline"/>
+ <xs:group ref="misc.inline"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== Block level elements ==============================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:group name="heading">
+ <xs:choice>
+ <xs:element ref="h1"/>
+ <xs:element ref="h2"/>
+ <xs:element ref="h3"/>
+ <xs:element ref="h4"/>
+ <xs:element ref="h5"/>
+ <xs:element ref="h6"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="lists">
+ <xs:choice>
+ <xs:element ref="ul"/>
+ <xs:element ref="ol"/>
+ <xs:element ref="dl"/>
+ <xs:element ref="menu"/>
+ <xs:element ref="dir"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="blocktext">
+ <xs:choice>
+ <xs:element ref="pre"/>
+ <xs:element ref="hr"/>
+ <xs:element ref="blockquote"/>
+ <xs:element ref="address"/>
+ <xs:element ref="center"/>
+ <xs:element ref="noframes"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="block">
+ <xs:choice>
+ <xs:element ref="p"/>
+ <xs:group ref="heading"/>
+ <xs:element ref="div"/>
+ <xs:group ref="lists"/>
+ <xs:group ref="blocktext"/>
+ <xs:element ref="isindex"/>
+ <xs:element ref="fieldset"/>
+ <xs:element ref="table"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="Flow" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ "Flow" mixes block and inline and is used for list items etc.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="block"/>
+ <xs:element ref="form"/>
+ <xs:group ref="inline"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== Content models for exclusions =====================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:complexType name="a.content" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ a elements use "Inline" excluding a
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="special"/>
+ <xs:group ref="fontstyle"/>
+ <xs:group ref="phrase"/>
+ <xs:group ref="inline.forms"/>
+ <xs:group ref="misc.inline"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:complexType name="pre.content" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ pre uses "Inline" excluding img, object, applet, big, small,
+ font, or basefont
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="a"/>
+ <xs:group ref="special.basic"/>
+ <xs:group ref="fontstyle.basic"/>
+ <xs:group ref="phrase.basic"/>
+ <xs:group ref="inline.forms"/>
+ <xs:group ref="misc.inline"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:complexType name="form.content" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ form uses "Flow" excluding form
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="block"/>
+ <xs:group ref="inline"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:complexType name="button.content" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ button uses "Flow" but excludes a, form, form controls, iframe
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="p"/>
+ <xs:group ref="heading"/>
+ <xs:element ref="div"/>
+ <xs:group ref="lists"/>
+ <xs:group ref="blocktext"/>
+ <xs:element ref="table"/>
+ <xs:element ref="br"/>
+ <xs:element ref="span"/>
+ <xs:element ref="bdo"/>
+ <xs:element ref="object"/>
+ <xs:element ref="applet"/>
+ <xs:element ref="img"/>
+ <xs:element ref="map"/>
+ <xs:group ref="fontstyle"/>
+ <xs:group ref="phrase"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================ Document Structure ==================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="html">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="head"/>
+ <xs:element ref="body"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attribute name="id" type="xs:ID"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================ Document Head =======================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:group name="head.misc">
+ <xs:sequence>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="script"/>
+ <xs:element ref="style"/>
+ <xs:element ref="meta"/>
+ <xs:element ref="link"/>
+ <xs:element ref="object"/>
+ <xs:element ref="isindex"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:group>
+
+ <xs:element name="head">
+ <xs:annotation>
+ <xs:documentation>
+ content model is "head.misc" combined with a single
+ title and an optional base element in any order
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:group ref="head.misc"/>
+ <xs:choice>
+ <xs:sequence>
+ <xs:element ref="title"/>
+ <xs:group ref="head.misc"/>
+ <xs:sequence minOccurs="0">
+ <xs:element ref="base"/>
+ <xs:group ref="head.misc"/>
+ </xs:sequence>
+ </xs:sequence>
+ <xs:sequence>
+ <xs:element ref="base"/>
+ <xs:group ref="head.misc"/>
+ <xs:element ref="title"/>
+ <xs:group ref="head.misc"/>
+ </xs:sequence>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="profile" type="URI"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="title">
+ <xs:annotation>
+ <xs:documentation>
+ The title element is not considered part of the flow of text.
+ It should be displayed, for example as the page header or
+ window title. Exactly one title is required per document.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attribute name="id" type="xs:ID"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="base">
+ <xs:annotation>
+ <xs:documentation>
+ document base URI
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="href" type="URI"/>
+ <xs:attribute name="target" type="FrameTarget"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="meta">
+ <xs:annotation>
+ <xs:documentation>
+ generic metainformation
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="http-equiv"/>
+ <xs:attribute name="name"/>
+ <xs:attribute name="content" use="required"/>
+ <xs:attribute name="scheme"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="link">
+ <xs:annotation>
+ <xs:documentation>
+ Relationship values can be used in principle:
+
+ a) for document specific toolbars/menus when used
+ with the link element in document head e.g.
+ start, contents, previous, next, index, end, help
+ b) to link to a separate style sheet (rel="stylesheet")
+ c) to make a link to a script (rel="script")
+ d) by stylesheets to control how collections of
+ html nodes are rendered into printed documents
+ e) to make a link to a printable version of this document
+ e.g. a PostScript or PDF version (rel="alternate" media="print")
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="charset" type="Charset"/>
+ <xs:attribute name="href" type="URI"/>
+ <xs:attribute name="hreflang" type="LanguageCode"/>
+ <xs:attribute name="type" type="ContentType"/>
+ <xs:attribute name="rel" type="LinkTypes"/>
+ <xs:attribute name="rev" type="LinkTypes"/>
+ <xs:attribute name="media" type="MediaDesc"/>
+ <xs:attribute name="target" type="FrameTarget"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="style">
+ <xs:annotation>
+ <xs:documentation>
+ style info, which may include CDATA sections
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="type" use="required" type="ContentType"/>
+ <xs:attribute name="media" type="MediaDesc"/>
+ <xs:attribute name="title" type="Text"/>
+ <xs:attribute ref="xml:space" fixed="preserve"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="script">
+ <xs:annotation>
+ <xs:documentation>
+ script statements, which may include CDATA sections
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="charset" type="Charset"/>
+ <xs:attribute name="type" use="required" type="ContentType"/>
+ <xs:attribute name="language"/>
+ <xs:attribute name="src" type="URI"/>
+ <xs:attribute name="defer">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="defer"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute ref="xml:space" fixed="preserve"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="noscript">
+ <xs:annotation>
+ <xs:documentation>
+ alternate content container for non script-based rendering
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ======================= Frames =======================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="iframe">
+ <xs:annotation>
+ <xs:documentation>
+ inline subwindow
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="coreattrs"/>
+ <xs:attribute name="longdesc" type="URI"/>
+ <xs:attribute name="name" type="xs:NMTOKEN"/>
+ <xs:attribute name="src" type="URI"/>
+ <xs:attribute name="frameborder" default="1">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="1"/>
+ <xs:enumeration value="0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="marginwidth" type="Pixels"/>
+ <xs:attribute name="marginheight" type="Pixels"/>
+ <xs:attribute name="scrolling" default="auto">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="yes"/>
+ <xs:enumeration value="no"/>
+ <xs:enumeration value="auto"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="align" type="ImgAlign"/>
+ <xs:attribute name="height" type="Length"/>
+ <xs:attribute name="width" type="Length"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="noframes">
+ <xs:annotation>
+ <xs:documentation>
+ alternate content container for non frame-based rendering
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Document Body ====================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="body">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="onload" type="Script"/>
+ <xs:attribute name="onunload" type="Script"/>
+ <xs:attribute name="background" type="URI"/>
+ <xs:attribute name="bgcolor" type="Color"/>
+ <xs:attribute name="text" type="Color"/>
+ <xs:attribute name="link" type="Color"/>
+ <xs:attribute name="vlink" type="Color"/>
+ <xs:attribute name="alink" type="Color"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="div">
+ <xs:annotation>
+ <xs:documentation>
+ generic language/style container
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="TextAlign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Paragraphs =======================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="p">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="TextAlign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Headings =========================================
+
+ There are six levels of headings from h1 (the most important)
+ to h6 (the least important).
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="h1">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="TextAlign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h2">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="TextAlign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h3">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="TextAlign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h4">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="TextAlign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h5">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="TextAlign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h6">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="TextAlign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Lists ============================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:simpleType name="ULStyle">
+ <xs:annotation>
+ <xs:documentation>
+ Unordered list bullet styles
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="disc"/>
+ <xs:enumeration value="square"/>
+ <xs:enumeration value="circle"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:element name="ul">
+ <xs:annotation>
+ <xs:documentation>
+ Unordered list
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="li"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="type" type="ULStyle"/>
+ <xs:attribute name="compact">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="compact"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:simpleType name="OLStyle">
+ <xs:annotation>
+ <xs:documentation>
+ Ordered list numbering style
+
+ 1 arabic numbers 1, 2, 3, ...
+ a lower alpha a, b, c, ...
+ A upper alpha A, B, C, ...
+ i lower roman i, ii, iii, ...
+ I upper roman I, II, III, ...
+
+ The style is applied to the sequence number which by default
+ is reset to 1 for the first list item in an ordered list.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:element name="ol">
+ <xs:annotation>
+ <xs:documentation>
+ Ordered (numbered) list
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="li"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="type" type="OLStyle"/>
+ <xs:attribute name="compact">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="compact"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="start" type="Number"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="menu">
+ <xs:annotation>
+ <xs:documentation>
+ single column list (DEPRECATED)
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="li"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="compact">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="compact"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="dir">
+ <xs:annotation>
+ <xs:documentation>
+ multiple column list (DEPRECATED)
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="li"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="compact">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="compact"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:simpleType name="LIStyle">
+ <xs:annotation>
+ <xs:documentation>
+ LIStyle is constrained to: "(ULStyle|OLStyle)"
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:element name="li">
+ <xs:annotation>
+ <xs:documentation>
+ list item
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="type" type="LIStyle"/>
+ <xs:attribute name="value" type="Number"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ definition lists - dt for term, dd for its definition
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="dl">
+ <xs:complexType>
+ <xs:choice maxOccurs="unbounded">
+ <xs:element ref="dt"/>
+ <xs:element ref="dd"/>
+ </xs:choice>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="compact">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="compact"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="dt">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="dd">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Address ==========================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="address">
+ <xs:annotation>
+ <xs:documentation>
+ information on author
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="inline"/>
+ <xs:group ref="misc.inline"/>
+ <xs:element ref="p"/>
+ </xs:choice>
+ <xs:attributeGroup ref="attrs"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Horizontal Rule ==================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="hr">
+ <xs:complexType>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="align">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="left"/>
+ <xs:enumeration value="center"/>
+ <xs:enumeration value="right"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="noshade">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="noshade"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="size" type="Pixels"/>
+ <xs:attribute name="width" type="Length"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Preformatted Text ================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="pre">
+ <xs:annotation>
+ <xs:documentation>
+ content is "Inline" excluding
+ "img|object|applet|big|small|sub|sup|font|basefont"
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="pre.content">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="width" type="Number"/>
+ <xs:attribute ref="xml:space" fixed="preserve"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Block-like Quotes ================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="blockquote">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="cite" type="URI"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Text alignment ===================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="center">
+ <xs:annotation>
+ <xs:documentation>
+ center content
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Inserted/Deleted Text ============================
+
+ ins/del are allowed in block and inline content, but its
+ inappropriate to include block content within an ins element
+ occurring in inline content.
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="ins">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="cite" type="URI"/>
+ <xs:attribute name="datetime" type="Datetime"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="del">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="cite" type="URI"/>
+ <xs:attribute name="datetime" type="Datetime"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== The Anchor Element ================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="a">
+ <xs:annotation>
+ <xs:documentation>
+ content is "Inline" except that anchors shouldn't be nested
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="a.content">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="focus"/>
+ <xs:attribute name="charset" type="Charset"/>
+ <xs:attribute name="type" type="ContentType"/>
+ <xs:attribute name="name" type="xs:NMTOKEN"/>
+ <xs:attribute name="href" type="URI"/>
+ <xs:attribute name="hreflang" type="LanguageCode"/>
+ <xs:attribute name="rel" type="LinkTypes"/>
+ <xs:attribute name="rev" type="LinkTypes"/>
+ <xs:attribute name="shape" default="rect" type="Shape"/>
+ <xs:attribute name="coords" type="Coords"/>
+ <xs:attribute name="target" type="FrameTarget"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ===================== Inline Elements ================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="span">
+ <xs:annotation>
+ <xs:documentation>
+ generic language/style container
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="bdo">
+ <xs:annotation>
+ <xs:documentation>
+ I18N BiDi over-ride
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="coreattrs"/>
+ <xs:attributeGroup ref="events"/>
+ <xs:attribute name="lang" type="LanguageCode"/>
+ <xs:attribute ref="xml:lang"/>
+ <xs:attribute name="dir" use="required">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="ltr"/>
+ <xs:enumeration value="rtl"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="br">
+ <xs:annotation>
+ <xs:documentation>
+ forced line break
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attributeGroup ref="coreattrs"/>
+ <xs:attribute name="clear" default="none">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="left"/>
+ <xs:enumeration value="all"/>
+ <xs:enumeration value="right"/>
+ <xs:enumeration value="none"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="em">
+ <xs:annotation>
+ <xs:documentation>
+ emphasis
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="strong">
+ <xs:annotation>
+ <xs:documentation>
+ strong emphasis
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="dfn">
+ <xs:annotation>
+ <xs:documentation>
+ definitional
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="code">
+ <xs:annotation>
+ <xs:documentation>
+ program code
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="samp">
+ <xs:annotation>
+ <xs:documentation>
+ sample
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="kbd">
+ <xs:annotation>
+ <xs:documentation>
+ something user would type
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="var">
+ <xs:annotation>
+ <xs:documentation>
+ variable
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="cite">
+ <xs:annotation>
+ <xs:documentation>
+ citation
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="abbr">
+ <xs:annotation>
+ <xs:documentation>
+ abbreviation
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="acronym">
+ <xs:annotation>
+ <xs:documentation>
+ acronym
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="q">
+ <xs:annotation>
+ <xs:documentation>
+ inlined quote
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="cite" type="URI"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="sub">
+ <xs:annotation>
+ <xs:documentation>
+ subscript
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="sup">
+ <xs:annotation>
+ <xs:documentation>
+ superscript
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="tt">
+ <xs:annotation>
+ <xs:documentation>
+ fixed pitch font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="i">
+ <xs:annotation>
+ <xs:documentation>
+ italic font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="b">
+ <xs:annotation>
+ <xs:documentation>
+ bold font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="big">
+ <xs:annotation>
+ <xs:documentation>
+ bigger font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="small">
+ <xs:annotation>
+ <xs:documentation>
+ smaller font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="u">
+ <xs:annotation>
+ <xs:documentation>
+ underline
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="s">
+ <xs:annotation>
+ <xs:documentation>
+ strike-through
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="strike">
+ <xs:annotation>
+ <xs:documentation>
+ strike-through
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="basefont">
+ <xs:annotation>
+ <xs:documentation>
+ base font size
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="size" use="required"/>
+ <xs:attribute name="color" type="Color"/>
+ <xs:attribute name="face"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="font">
+ <xs:annotation>
+ <xs:documentation>
+ local change to font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="coreattrs"/>
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attribute name="size"/>
+ <xs:attribute name="color" type="Color"/>
+ <xs:attribute name="face"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ==================== Object ======================================
+
+ object is used to embed objects as part of HTML pages.
+ param elements should precede other content. Parameters
+ can also be expressed as attribute/value pairs on the
+ object element itself when brevity is desired.
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="object">
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="param"/>
+ <xs:group ref="block"/>
+ <xs:element ref="form"/>
+ <xs:group ref="inline"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="declare">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="declare"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="classid" type="URI"/>
+ <xs:attribute name="codebase" type="URI"/>
+ <xs:attribute name="data" type="URI"/>
+ <xs:attribute name="type" type="ContentType"/>
+ <xs:attribute name="codetype" type="ContentType"/>
+ <xs:attribute name="archive" type="UriList"/>
+ <xs:attribute name="standby" type="Text"/>
+ <xs:attribute name="height" type="Length"/>
+ <xs:attribute name="width" type="Length"/>
+ <xs:attribute name="usemap" type="URI"/>
+ <xs:attribute name="name" type="xs:NMTOKEN"/>
+ <xs:attribute name="tabindex" type="Number"/>
+ <xs:attribute name="align" type="ImgAlign"/>
+ <xs:attribute name="border" type="Pixels"/>
+ <xs:attribute name="hspace" type="Pixels"/>
+ <xs:attribute name="vspace" type="Pixels"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="param">
+ <xs:annotation>
+ <xs:documentation>
+ param is used to supply a named property value.
+ In XML it would seem natural to follow RDF and support an
+ abbreviated syntax where the param elements are replaced
+ by attribute value pairs on the object start tag.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="name" use="required"/>
+ <xs:attribute name="value"/>
+ <xs:attribute name="valuetype" default="data">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="data"/>
+ <xs:enumeration value="ref"/>
+ <xs:enumeration value="object"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="type" type="ContentType"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Java applet ==================================
+
+ One of code or object attributes must be present.
+ Place param elements before other content.
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="applet">
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="param"/>
+ <xs:group ref="block"/>
+ <xs:element ref="form"/>
+ <xs:group ref="inline"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ <xs:attributeGroup ref="coreattrs"/>
+ <xs:attribute name="codebase" type="URI"/>
+ <xs:attribute name="archive"/>
+ <xs:attribute name="code"/>
+ <xs:attribute name="object"/>
+ <xs:attribute name="alt" type="Text"/>
+ <xs:attribute name="name" type="xs:NMTOKEN"/>
+ <xs:attribute name="width" use="required" type="Length"/>
+ <xs:attribute name="height" use="required" type="Length"/>
+ <xs:attribute name="align" type="ImgAlign"/>
+ <xs:attribute name="hspace" type="Pixels"/>
+ <xs:attribute name="vspace" type="Pixels"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Images ===========================================
+
+ To avoid accessibility problems for people who aren't
+ able to see the image, you should provide a text
+ description using the alt and longdesc attributes.
+ In addition, avoid the use of server-side image maps.
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="img">
+ <xs:complexType>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="src" use="required" type="URI"/>
+ <xs:attribute name="alt" use="required" type="Text"/>
+ <xs:attribute name="name" type="xs:NMTOKEN"/>
+ <xs:attribute name="longdesc" type="URI"/>
+ <xs:attribute name="height" type="Length"/>
+ <xs:attribute name="width" type="Length"/>
+ <xs:attribute name="usemap" type="URI">
+ <xs:annotation>
+ <xs:documentation>
+ usemap points to a map element which may be in this document
+ or an external document, although the latter is not widely supported
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="ismap">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="ismap"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="align" type="ImgAlign"/>
+ <xs:attribute name="border" type="Length"/>
+ <xs:attribute name="hspace" type="Pixels"/>
+ <xs:attribute name="vspace" type="Pixels"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== Client-side image maps ============================
+
+ These can be placed in the same document or grouped in a
+ separate document although this isn't yet widely supported
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="map">
+ <xs:complexType>
+ <xs:choice>
+ <xs:choice maxOccurs="unbounded">
+ <xs:group ref="block"/>
+ <xs:element ref="form"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ <xs:element maxOccurs="unbounded" ref="area"/>
+ </xs:choice>
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attributeGroup ref="events"/>
+ <xs:attribute name="id" use="required" type="xs:ID"/>
+ <xs:attribute name="class"/>
+ <xs:attribute name="style" type="StyleSheet"/>
+ <xs:attribute name="title" type="Text"/>
+ <xs:attribute name="name"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="area">
+ <xs:complexType>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="focus"/>
+ <xs:attribute name="shape" default="rect" type="Shape"/>
+ <xs:attribute name="coords" type="Coords"/>
+ <xs:attribute name="href" type="URI"/>
+ <xs:attribute name="nohref">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="nohref"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="alt" use="required" type="Text"/>
+ <xs:attribute name="target" type="FrameTarget"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================ Forms ===============================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="form">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="form.content">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="action" use="required" type="URI"/>
+ <xs:attribute name="method" default="get">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="get"/>
+ <xs:enumeration value="post"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="enctype" type="ContentType"
+ default="application/x-www-form-urlencoded"/>
+ <xs:attribute name="onsubmit" type="Script"/>
+ <xs:attribute name="onreset" type="Script"/>
+ <xs:attribute name="accept" type="ContentTypes"/>
+ <xs:attribute name="accept-charset" type="Charsets"/>
+ <xs:attribute name="target" type="FrameTarget"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="label">
+ <xs:annotation>
+ <xs:documentation>
+ Each label must not contain more than ONE field
+ Label elements shouldn't be nested.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="for" type="xs:IDREF"/>
+ <xs:attribute name="accesskey" type="Character"/>
+ <xs:attribute name="onfocus" type="Script"/>
+ <xs:attribute name="onblur" type="Script"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:simpleType name="InputType">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="text"/>
+ <xs:enumeration value="password"/>
+ <xs:enumeration value="checkbox"/>
+ <xs:enumeration value="radio"/>
+ <xs:enumeration value="submit"/>
+ <xs:enumeration value="reset"/>
+ <xs:enumeration value="file"/>
+ <xs:enumeration value="hidden"/>
+ <xs:enumeration value="image"/>
+ <xs:enumeration value="button"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:element name="input">
+ <xs:annotation>
+ <xs:documentation>
+ form control
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="focus"/>
+ <xs:attribute name="type" default="text" type="InputType"/>
+ <xs:attribute name="name">
+ <xs:annotation>
+ <xs:documentation>
+ the name attribute is required for all but submit & reset
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="value"/>
+ <xs:attribute name="checked">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="checked"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="disabled">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="disabled"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="readonly">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="readonly"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="size"/>
+ <xs:attribute name="maxlength" type="Number"/>
+ <xs:attribute name="src" type="URI"/>
+ <xs:attribute name="alt"/>
+ <xs:attribute name="usemap" type="URI"/>
+ <xs:attribute name="onselect" type="Script"/>
+ <xs:attribute name="onchange" type="Script"/>
+ <xs:attribute name="accept" type="ContentTypes"/>
+ <xs:attribute name="align" type="ImgAlign"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="select">
+ <xs:annotation>
+ <xs:documentation>
+ option selector
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:choice maxOccurs="unbounded">
+ <xs:element ref="optgroup"/>
+ <xs:element ref="option"/>
+ </xs:choice>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="name"/>
+ <xs:attribute name="size" type="Number"/>
+ <xs:attribute name="multiple">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="multiple"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="disabled">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="disabled"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="tabindex" type="tabindexNumber"/>
+ <xs:attribute name="onfocus" type="Script"/>
+ <xs:attribute name="onblur" type="Script"/>
+ <xs:attribute name="onchange" type="Script"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="optgroup">
+ <xs:annotation>
+ <xs:documentation>
+ option group
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="option"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="disabled">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="disabled"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="label" use="required" type="Text"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="option">
+ <xs:annotation>
+ <xs:documentation>
+ selectable choice
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="selected">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="selected"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="disabled">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="disabled"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="label" type="Text"/>
+ <xs:attribute name="value"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="textarea">
+ <xs:annotation>
+ <xs:documentation>
+ multi-line text field
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="focus"/>
+ <xs:attribute name="name"/>
+ <xs:attribute name="rows" use="required" type="Number"/>
+ <xs:attribute name="cols" use="required" type="Number"/>
+ <xs:attribute name="disabled">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="disabled"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="readonly">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="readonly"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="onselect" type="Script"/>
+ <xs:attribute name="onchange" type="Script"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="fieldset">
+ <xs:annotation>
+ <xs:documentation>
+ The fieldset element is used to group form fields.
+ Only one legend element should occur in the content
+ and if present should only be preceded by whitespace.
+
+ NOTE: this content model is different from the XHTML 1.0 DTD,
+ closer to the intended content model in HTML4 DTD
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:sequence>
+ <xs:element ref="legend"/>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="block"/>
+ <xs:element ref="form"/>
+ <xs:group ref="inline"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:simpleType name="LAlign">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="top"/>
+ <xs:enumeration value="bottom"/>
+ <xs:enumeration value="left"/>
+ <xs:enumeration value="right"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:element name="legend">
+ <xs:annotation>
+ <xs:documentation>
+ fieldset label
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="accesskey" type="Character"/>
+ <xs:attribute name="align" type="LAlign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="button">
+ <xs:annotation>
+ <xs:documentation>
+ Content is "Flow" excluding a, form and form controls
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="button.content">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="focus"/>
+ <xs:attribute name="name"/>
+ <xs:attribute name="value"/>
+ <xs:attribute name="type" default="submit">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="button"/>
+ <xs:enumeration value="submit"/>
+ <xs:enumeration value="reset"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="disabled">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="disabled"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="isindex">
+ <xs:annotation>
+ <xs:documentation>
+ single-line text input control (DEPRECATED)
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attributeGroup ref="coreattrs"/>
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attribute name="prompt" type="Text"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ======================= Tables =======================================
+
+ Derived from IETF HTML table standard, see [RFC1942]
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:simpleType name="TFrame">
+ <xs:annotation>
+ <xs:documentation>
+ The border attribute sets the thickness of the frame around the
+ table. The default units are screen pixels.
+
+ The frame attribute specifies which parts of the frame around
+ the table should be rendered. The values are not the same as
+ CALS to avoid a name clash with the valign attribute.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="void"/>
+ <xs:enumeration value="above"/>
+ <xs:enumeration value="below"/>
+ <xs:enumeration value="hsides"/>
+ <xs:enumeration value="lhs"/>
+ <xs:enumeration value="rhs"/>
+ <xs:enumeration value="vsides"/>
+ <xs:enumeration value="box"/>
+ <xs:enumeration value="border"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="TRules">
+ <xs:annotation>
+ <xs:documentation>
+ The rules attribute defines which rules to draw between cells:
+
+ If rules is absent then assume:
+ "none" if border is absent or border="0" otherwise "all"
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="none"/>
+ <xs:enumeration value="groups"/>
+ <xs:enumeration value="rows"/>
+ <xs:enumeration value="cols"/>
+ <xs:enumeration value="all"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="TAlign">
+ <xs:annotation>
+ <xs:documentation>
+ horizontal placement of table relative to document
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="left"/>
+ <xs:enumeration value="center"/>
+ <xs:enumeration value="right"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:attributeGroup name="cellhalign">
+ <xs:annotation>
+ <xs:documentation>
+ horizontal alignment attributes for cell contents
+
+ char alignment char, e.g. char=':'
+ charoff offset for alignment char
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="align">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="left"/>
+ <xs:enumeration value="center"/>
+ <xs:enumeration value="right"/>
+ <xs:enumeration value="justify"/>
+ <xs:enumeration value="char"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="char" type="Character"/>
+ <xs:attribute name="charoff" type="Length"/>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="cellvalign">
+ <xs:annotation>
+ <xs:documentation>
+ vertical alignment attributes for cell contents
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="valign">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="top"/>
+ <xs:enumeration value="middle"/>
+ <xs:enumeration value="bottom"/>
+ <xs:enumeration value="baseline"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:attributeGroup>
+
+ <xs:element name="table">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" ref="caption"/>
+ <xs:choice>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="col"/>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="colgroup"/>
+ </xs:choice>
+ <xs:element minOccurs="0" ref="thead"/>
+ <xs:element minOccurs="0" ref="tfoot"/>
+ <xs:choice>
+ <xs:element maxOccurs="unbounded" ref="tbody"/>
+ <xs:element maxOccurs="unbounded" ref="tr"/>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="summary" type="Text"/>
+ <xs:attribute name="width" type="Length"/>
+ <xs:attribute name="border" type="Pixels"/>
+ <xs:attribute name="frame" type="TFrame"/>
+ <xs:attribute name="rules" type="TRules"/>
+ <xs:attribute name="cellspacing" type="Length"/>
+ <xs:attribute name="cellpadding" type="Length"/>
+ <xs:attribute name="align" type="TAlign"/>
+ <xs:attribute name="bgcolor" type="Color"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:simpleType name="CAlign">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="top"/>
+ <xs:enumeration value="bottom"/>
+ <xs:enumeration value="left"/>
+ <xs:enumeration value="right"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:element name="caption">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="align" type="CAlign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ Use thead to duplicate headers when breaking table
+ across page boundaries, or for static headers when
+ tbody sections are rendered in scrolling panel.
+
+ Use tfoot to duplicate footers when breaking table
+ across page boundaries, or for static footers when
+ tbody sections are rendered in scrolling panel.
+
+ Use multiple tbody sections when rules are needed
+ between groups of table rows.
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="thead">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="tr"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="cellhalign"/>
+ <xs:attributeGroup ref="cellvalign"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="tfoot">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="tr"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="cellhalign"/>
+ <xs:attributeGroup ref="cellvalign"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="tbody">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="tr"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="cellhalign"/>
+ <xs:attributeGroup ref="cellvalign"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="colgroup">
+ <xs:annotation>
+ <xs:documentation>
+ colgroup groups a set of col elements. It allows you to group
+ several semantically related columns together.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="col"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="span" default="1" type="Number"/>
+ <xs:attribute name="width" type="MultiLength"/>
+ <xs:attributeGroup ref="cellhalign"/>
+ <xs:attributeGroup ref="cellvalign"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="col">
+ <xs:annotation>
+ <xs:documentation>
+ col elements define the alignment properties for cells in
+ one or more columns.
+
+ The width attribute specifies the width of the columns, e.g.
+
+ width=64 width in screen pixels
+ width=0.5* relative width of 0.5
+
+ The span attribute causes the attributes of one
+ col element to apply to more than one column.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="span" default="1" type="Number"/>
+ <xs:attribute name="width" type="MultiLength"/>
+ <xs:attributeGroup ref="cellhalign"/>
+ <xs:attributeGroup ref="cellvalign"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="tr">
+ <xs:complexType>
+ <xs:choice maxOccurs="unbounded">
+ <xs:element ref="th"/>
+ <xs:element ref="td"/>
+ </xs:choice>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="cellhalign"/>
+ <xs:attributeGroup ref="cellvalign"/>
+ <xs:attribute name="bgcolor" type="Color"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:simpleType name="Scope">
+ <xs:annotation>
+ <xs:documentation>
+ Scope is simpler than headers attribute for common tables
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="row"/>
+ <xs:enumeration value="col"/>
+ <xs:enumeration value="rowgroup"/>
+ <xs:enumeration value="colgroup"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:annotation>
+ <xs:documentation>
+ th is for headers, td for data and for cells acting as both
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="th">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="abbr" type="Text"/>
+ <xs:attribute name="axis"/>
+ <xs:attribute name="headers" type="xs:IDREFS"/>
+ <xs:attribute name="scope" type="Scope"/>
+ <xs:attribute name="rowspan" default="1" type="Number"/>
+ <xs:attribute name="colspan" default="1" type="Number"/>
+ <xs:attributeGroup ref="cellhalign"/>
+ <xs:attributeGroup ref="cellvalign"/>
+ <xs:attribute name="nowrap">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="nowrap"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="bgcolor" type="Color"/>
+ <xs:attribute name="width" type="Length"/>
+ <xs:attribute name="height" type="Length"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="td">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="abbr" type="Text"/>
+ <xs:attribute name="axis"/>
+ <xs:attribute name="headers" type="xs:IDREFS"/>
+ <xs:attribute name="scope" type="Scope"/>
+ <xs:attribute name="rowspan" default="1" type="Number"/>
+ <xs:attribute name="colspan" default="1" type="Number"/>
+ <xs:attributeGroup ref="cellhalign"/>
+ <xs:attributeGroup ref="cellvalign"/>
+ <xs:attribute name="nowrap">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="nowrap"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="bgcolor" type="Color"/>
+ <xs:attribute name="width" type="Length"/>
+ <xs:attribute name="height" type="Length"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+</xs:schema>
16 years, 11 months
JBoss Rich Faces SVN: r15114 - branches/community/3.3.X/docs/userguide/en/src/main/docbook/modules.
by richfaces-svn-commits@lists.jboss.org
Author: ochikvina
Date: 2009-08-05 08:48:44 -0400 (Wed, 05 Aug 2009)
New Revision: 15114
Modified:
branches/community/3.3.X/docs/userguide/en/src/main/docbook/modules/AUGWADParams.xml
branches/community/3.3.X/docs/userguide/en/src/main/docbook/modules/RFCarchitectover.xml
Log:
https://jira.jboss.org/jira/browse/RF-7638 - In the "Standard Controls Skinning" section the columns content don't fit the cells (concerns the pdf version). Now it's fixed.
Modified: branches/community/3.3.X/docs/userguide/en/src/main/docbook/modules/AUGWADParams.xml
===================================================================
--- branches/community/3.3.X/docs/userguide/en/src/main/docbook/modules/AUGWADParams.xml 2009-08-05 12:02:29 UTC (rev 15113)
+++ branches/community/3.3.X/docs/userguide/en/src/main/docbook/modules/AUGWADParams.xml 2009-08-05 12:48:44 UTC (rev 15114)
@@ -13,6 +13,10 @@
<title>Initialization Parameters</title>
<tgroup cols="3">
+ <colspec colnum="1" colwidth="2*"/>
+ <colspec colnum="2" colwidth="1*"/>
+ <colspec colnum="3" colwidth="2*"/>
+
<thead>
<row>
<entry>Name</entry>
Modified: branches/community/3.3.X/docs/userguide/en/src/main/docbook/modules/RFCarchitectover.xml
===================================================================
--- branches/community/3.3.X/docs/userguide/en/src/main/docbook/modules/RFCarchitectover.xml 2009-08-05 12:02:29 UTC (rev 15113)
+++ branches/community/3.3.X/docs/userguide/en/src/main/docbook/modules/RFCarchitectover.xml 2009-08-05 12:48:44 UTC (rev 15114)
@@ -2263,6 +2263,8 @@
<title> Html Elements Skin Bindings for input, select, textarea, button, keygen,
isindex, legend </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2288,6 +2290,8 @@
<table>
<title> Html Elements Skin Bindings for fieldset </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2305,6 +2309,8 @@
<table>
<title>Html Elements Skin Bindings for hr</title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2322,6 +2328,8 @@
<table>
<title>Html Elements Skin Bindings for a</title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2339,6 +2347,8 @@
<table>
<title> Html Elements Skin Bindings for a:hover </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2356,6 +2366,8 @@
<table>
<title> Html Elements Skin Bindings for a:visited </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2374,6 +2386,8 @@
<title> Rich Elements Skin Bindings for .rich-input, .rich-select,
.rich-textarea, .rich-keygen, .rich-isindex, .rich-link </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2399,6 +2413,8 @@
<table>
<title> Rich Elements Skin Bindings for .rich-fieldset </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2416,6 +2432,8 @@
<table>
<title> Rich Elements Skin Bindings for .rich-hr </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2441,6 +2459,8 @@
<table>
<title> Rich Elements Skin Bindings for .rich-link </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2458,6 +2478,8 @@
<table>
<title> Rich Elements Skin Bindings for .rich-link:hover </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2475,6 +2497,8 @@
<table>
<title> Rich Elements Skin Bindings for .rich-link:visited </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2492,6 +2516,8 @@
<table>
<title> Rich Elements Skin Bindings for .rich-field </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2529,6 +2555,8 @@
<table>
<title> Rich Elements Skin Bindings for .rich-field-edit </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2558,6 +2586,8 @@
<table>
<title> Rich Elements Skin Bindings for .rich-field-error </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2600,6 +2630,8 @@
<title> Rich Elements Skin Bindings for .rich-button, .rich-button-disabled,
.rich-button-over </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2649,6 +2681,8 @@
<table>
<title> Rich Elements Skin Bindings for .rich-button-press </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2666,6 +2700,8 @@
<table>
<title> Rich Elements Skin Bindings for .rich-container fieldset, .rich-fieldset </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2699,6 +2735,8 @@
<table>
<title> Rich Elements Skin Bindings for .rich-legend </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2728,6 +2766,8 @@
<table>
<title> Rich Elements Skin Bindings for .rich-form </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS Properties</entry>
@@ -2754,6 +2794,8 @@
<title> Html Elements Skin Bindings for input, select, textarea, button, keygen,
isindex </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS properties</entry>
@@ -2779,6 +2821,8 @@
<table>
<title> Html Elements Skin Bindings for *|button </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS properties</entry>
@@ -2819,6 +2863,8 @@
button[type=submit], input[type=reset], input[type=submit],
input[type=button] </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS properties</entry>
@@ -2858,6 +2904,8 @@
<title> Html Elements Skin Bindings for *|button[disabled], .rich-container
*|button[disabled], .rich-button-disabled </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS properties</entry>
@@ -2898,6 +2946,8 @@
.rich-container input[type="button"][disabled],
.rich-input-button-disabled </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS properties</entry>
@@ -2935,6 +2985,8 @@
input[type="submit"][disabled],
input[type="button"][disabled] </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS properties</entry>
@@ -2960,6 +3012,8 @@
<table>
<title> Html Elements Skin Bindings for *|textarea </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS properties</entry>
@@ -2999,6 +3053,8 @@
<title> Html Elements Skin Bindings for textarea[type=textarea],
input[type=text], input[type=password], select </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS properties</entry>
@@ -3038,6 +3094,8 @@
<title> Html Elements Skin Bindings for *|textarea[disabled], .rich-container
*|textarea[disabled] </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS properties</entry>
@@ -3057,6 +3115,8 @@
input[type="text"][disabled],
input[type="password"][disabled] </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS properties</entry>
@@ -3076,6 +3136,8 @@
input[type="text"][disabled],
input[type="password"][disabled] </title>
<tgroup cols="2">
+ <colspec colnum="1" colwidth="1*"/>
+ <colspec colnum="2" colwidth="3*"/>
<thead>
<row>
<entry>CSS properties</entry>
@@ -3531,8 +3593,7 @@
input[type="button"]</code>. So, the CSS code should look like
this. </para>
<programlisting role="CSS"><![CDATA[
-button[type="button"], button[type="reset"], button[type="submit"], input[type="reset"], input[type="submit"], input[type="button"] {
- font-weight: bold;
+button[type="button"], button[type="reset"], button[type="submit"], input[type="reset"], input[type="submit"], input[type="button"] { font-weight: bold;
}]]></programlisting>
<para>All the changes that were planned to be preformed are done and now you can
proceed to building the new PlugnSkinDemo skin and import it into the project.
16 years, 11 months
JBoss Rich Faces SVN: r15113 - branches/community/3.3.X/docs/photo_album_app_guide/en/src/main/resources/images.
by richfaces-svn-commits@lists.jboss.org
Author: msorokin
Date: 2009-08-05 08:02:29 -0400 (Wed, 05 Aug 2009)
New Revision: 15113
Added:
branches/community/3.3.X/docs/photo_album_app_guide/en/src/main/resources/images/contentArea.png
Removed:
branches/community/3.3.X/docs/photo_album_app_guide/en/src/main/resources/images/giagram.png
Modified:
branches/community/3.3.X/docs/photo_album_app_guide/en/src/main/resources/images/erd.png
Log:
https://jira.exadel.com/browse/EFX-90
Added: branches/community/3.3.X/docs/photo_album_app_guide/en/src/main/resources/images/contentArea.png
===================================================================
(Binary files differ)
Property changes on: branches/community/3.3.X/docs/photo_album_app_guide/en/src/main/resources/images/contentArea.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: branches/community/3.3.X/docs/photo_album_app_guide/en/src/main/resources/images/erd.png
===================================================================
(Binary files differ)
Deleted: branches/community/3.3.X/docs/photo_album_app_guide/en/src/main/resources/images/giagram.png
===================================================================
(Binary files differ)
16 years, 11 months
JBoss Rich Faces SVN: r15112 - root/cdk/trunk/plugins/maven-cdk-plugin/src/main/java/org/richfaces/builder/maven.
by richfaces-svn-commits@lists.jboss.org
Author: alexsmirnov
Date: 2009-08-05 03:34:39 -0400 (Wed, 05 Aug 2009)
New Revision: 15112
Modified:
root/cdk/trunk/plugins/maven-cdk-plugin/src/main/java/org/richfaces/builder/maven/MavenCompilationContext.java
Log:
fix base class name
Modified: root/cdk/trunk/plugins/maven-cdk-plugin/src/main/java/org/richfaces/builder/maven/MavenCompilationContext.java
===================================================================
--- root/cdk/trunk/plugins/maven-cdk-plugin/src/main/java/org/richfaces/builder/maven/MavenCompilationContext.java 2009-08-05 00:26:15 UTC (rev 15111)
+++ root/cdk/trunk/plugins/maven-cdk-plugin/src/main/java/org/richfaces/builder/maven/MavenCompilationContext.java 2009-08-05 07:34:39 UTC (rev 15112)
@@ -25,14 +25,14 @@
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
-import org.richfaces.cdk.AbstractCompilationContext;
+import org.richfaces.cdk.AbstractCdkContext;
import org.richfaces.cdk.CdkException;
/**
* @author shura
*
*/
-public class MavenCompilationContext extends AbstractCompilationContext {
+public class MavenCompilationContext extends AbstractCdkContext {
private MavenLogger logger;
private VelocityEngine engine;
16 years, 11 months
JBoss Rich Faces SVN: r15111 - in root/cdk/trunk/plugins/generator: src/main and 9 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: alexsmirnov
Date: 2009-08-04 20:26:15 -0400 (Tue, 04 Aug 2009)
New Revision: 15111
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/annotations/Attribute.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/VirtualJavaClassPathObject.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/VirtualJavaFileSystemObject.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/package-info.java
root/cdk/trunk/plugins/generator/src/main/javadoc/
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/annotations/
root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/annotations/
root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/annotations/AbstractTestComponent.java
root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/apt/logging.properties
root/cdk/trunk/plugins/generator/src/test/resources/test.source.properties
Removed:
root/cdk/trunk/plugins/generator/src/test/resources/source.properties
Modified:
root/cdk/trunk/plugins/generator/pom.xml
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/annotations/Component.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkCompiler.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessor.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/VirtualFileManager.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/VirtualJavaFileObject.java
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/LibraryBuilderTest.java
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/ProcessorTest.java
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/VirtualFileManagerTest.java
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/VirtualFileTest.java
Log:
APT Processor catch annotated component class.
Modified: root/cdk/trunk/plugins/generator/pom.xml
===================================================================
--- root/cdk/trunk/plugins/generator/pom.xml 2009-08-04 16:03:51 UTC (rev 15110)
+++ root/cdk/trunk/plugins/generator/pom.xml 2009-08-05 00:26:15 UTC (rev 15111)
@@ -22,14 +22,22 @@
<target>1.6</target>
</configuration>
</plugin>
- <!--
- plugin> <groupId>org.codehaus.mojo</groupId>
- <artifactId>jaxb2-maven-plugin</artifactId> <executions> <execution>
- <goals> <goal>xjc</goal> </goals> </execution> </executions>
- <configuration> <packageName>org.richfaces.cdk.model</packageName>
- </configuration> </plugin
- -->
- </plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <useManifestOnlyJar>false</useManifestOnlyJar>
+ <useSystemClassLoader>true</useSystemClassLoader>
+ </configuration>
+ </plugin>
+ <!--
+ plugin> <groupId>org.codehaus.mojo</groupId>
+ <artifactId>jaxb2-maven-plugin</artifactId> <executions> <execution>
+ <goals> <goal>xjc</goal> </goals> </execution> </executions>
+ <configuration> <packageName>org.richfaces.cdk.model</packageName>
+ </configuration> </plugin
+ -->
+ </plugins>
</build>
<dependencies>
<dependency>
@@ -87,7 +95,7 @@
<artifactId>dtdparser</artifactId>
<version>1.21</version>
</dependency>
-
+
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java 2009-08-04 16:03:51 UTC (rev 15110)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java 2009-08-05 00:26:15 UTC (rev 15111)
@@ -27,6 +27,7 @@
import org.richfaces.cdk.apt.CdkCompiler;
import org.richfaces.cdk.apt.CdkProcessor;
+import org.richfaces.cdk.apt.ComponentProcessor;
import org.richfaces.cdk.model.ComponentLibrary;
/**
@@ -70,11 +71,19 @@
componentLibrary = createLibrary();
getContext().setLibrary(componentLibrary);
}
- compiler.process(sources, new CdkProcessor());
+ compiler.process(sources, new ComponentProcessor(getContext()));
// TODO - check and fix library consittence.
}
/**
+ * <p class="changed_added_4_0">Compile and store in the model Renderer templates.</p>
+ * @param templates
+ * @throws CdkException
+ */
+ public void compileRendererTemplates(Iterable<File> templates) throws CdkException {
+
+ }
+ /**
* <p class="changed_added_4_0">Append configuration from faces-config.xml to existing library.</p>
* @param context
* @param configs
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/annotations/Attribute.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/annotations/Attribute.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/annotations/Attribute.java 2009-08-05 00:26:15 UTC (rev 15111)
@@ -0,0 +1,47 @@
+/*
+ * $Id$
+ *
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.cdk.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * <p class="changed_added_4_0"></p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+(a)Retention(RetentionPolicy.CLASS)
+(a)Target({ElementType.FIELD,ElementType.METHOD})
+@Inherited
+public @interface Attribute {
+
+ boolean hidden() default false;
+
+ boolean readOnly() default false;
+
+ String name() default "";
+}
Property changes on: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/annotations/Attribute.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/annotations/Component.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/annotations/Component.java 2009-08-04 16:03:51 UTC (rev 15110)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/annotations/Component.java 2009-08-05 00:26:15 UTC (rev 15111)
@@ -23,22 +23,51 @@
package org.richfaces.cdk.annotations;
+import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
/**
- * <p class="changed_added_4_0"></p>
+ * <p class="changed_added_4_0">
+ * </p>
+ *
* @author asmirnov(a)exadel.com
- *
+ *
*/
@Retention(RetentionPolicy.CLASS)
+(a)Target(ElementType.TYPE)
@Inherited
public @interface Component {
+ public static final String NAME = "org.richfaces.cdk.annotations.Component";
+
+ /**
+ * <p class="changed_added_4_0">
+ * Type of the component.
+ * </p>
+ *
+ * @return
+ */
public String type();
- public String family();
+ /**
+ * <p class="changed_added_4_0">
+ * Component Family.
+ * </p>
+ *
+ * @return
+ */
+ public String family() default "";
- public String className();
+ /**
+ * <p class="changed_added_4_0">
+ * Name of the final component class. May be empty, in that case name will be
+ * inferred from naming conventions.
+ * </p>
+ *
+ * @return
+ */
+ public String className() default "";
}
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkCompiler.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkCompiler.java 2009-08-04 16:03:51 UTC (rev 15110)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkCompiler.java 2009-08-05 00:26:15 UTC (rev 15111)
@@ -24,9 +24,12 @@
package org.richfaces.cdk.apt;
import java.io.File;
+import java.net.URL;
+import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Locale;
import javax.annotation.processing.Processor;
import javax.tools.Diagnostic;
@@ -58,6 +61,8 @@
private Iterable<String> options;
private JavaCompiler javaCompiler;
+
+ private Locale locale;
/**
* <p class="changed_added_4_0">Builder method that creates and initializes compiler instance.
@@ -69,17 +74,40 @@
CdkCompiler compiler = new CdkCompiler();
JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
compiler.setJavaCompiler(javaCompiler);
+ ArrayList<String> options = new ArrayList<String>();
+ options.add("-proc:only");
+ options.add("-implicit:class");
+ options.add("-verbose");
+ ClassLoader classPathLoader = context.getLoader();
+ StringBuilder classPathOption = new StringBuilder();
+ boolean hasClassPathElement=false;
+ while (null != classPathLoader && classPathLoader instanceof URLClassLoader) {
+ URLClassLoader urlLoader = (URLClassLoader) classPathLoader;
+ for (URL cpElement : urlLoader.getURLs()) {
+ if(hasClassPathElement){
+ classPathOption.append(File.pathSeparatorChar);
+ } else {
+ options.add("-classpath");
+ hasClassPathElement = true;
+ }
+ classPathOption.append(cpElement.toExternalForm());
+ }
+ classPathLoader = classPathLoader.getParent();
+ }
+ if (hasClassPathElement) {
+ options.add(classPathOption.toString());
+ log.info("Compiler classpath:" + classPathOption);
+
+ }
+ compiler.setOptions(options);
StandardJavaFileManager stdFileManager = javaCompiler
.getStandardFileManager(null, null, null);
VirtualFileManager fileManager = new VirtualFileManager(stdFileManager,
context.getLoader());
fileManager.setJavaSourceDirectory(context.getJavaSource());
compiler.setFileManager(fileManager);
- ArrayList<String> options = new ArrayList<String>();
- options.add("-proc:only");
- options.add("-implicit:none");
- options.add("-verbose");
- compiler.setOptions(options);
+ // TODO - provide source files locale.
+ compiler.setLocale(Locale.getDefault());
return compiler;
}
@@ -90,21 +118,23 @@
* @throws AptException
*/
public void process(Iterable<File> sources, Processor...processors) throws AptException {
- DiagnosticListener<JavaFileObject> listener = new DiagnosticListener<JavaFileObject>() {
+ DiagnosticListener<JavaFileObject> listener = null /*new DiagnosticListener<JavaFileObject>() {
@Override
public void report(Diagnostic<? extends JavaFileObject> diagnostic) {
log.debug("LOG: " + diagnostic.getMessage(null));
}
- };
+ }*/;
ArrayList<VirtualJavaFileObject> sourceObjects = new ArrayList<VirtualJavaFileObject>();
for (File file : sources) {
- VirtualJavaFileObject sourceObject = new VirtualJavaFileObject(file);
+ VirtualJavaFileObject sourceObject = new VirtualJavaFileSystemObject(file);
sourceObjects.add(sourceObject);
}
CompilationTask task = getJavaCompiler().getTask(null, getFileManager(), listener, getOptions(), null, sourceObjects);
task.setProcessors(Arrays.asList(processors));
+ task.setLocale(locale);
+ task.call();
}
@@ -163,4 +193,20 @@
return javaCompiler;
}
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @return the locale
+ */
+ public Locale getLocale() {
+ return locale;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param locale the locale to set
+ */
+ public void setLocale(Locale locale) {
+ this.locale = locale;
+ }
+
}
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessor.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessor.java 2009-08-04 16:03:51 UTC (rev 15110)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessor.java 2009-08-05 00:26:15 UTC (rev 15111)
@@ -27,21 +27,39 @@
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
+import javax.annotation.processing.SupportedSourceVersion;
+import javax.lang.model.SourceVersion;
import javax.lang.model.element.TypeElement;
+import org.richfaces.cdk.CdkContext;
+
/**
* <p class="changed_added_4_0"></p>
* @author asmirnov(a)exadel.com
*
*/
-public class CdkProcessor extends AbstractProcessor {
+(a)SupportedSourceVersion(SourceVersion.RELEASE_5)
+public abstract class CdkProcessor extends AbstractProcessor {
+
+ private final CdkContext context;
- /* (non-Javadoc)
- * @see javax.annotation.processing.AbstractProcessor#process(java.util.Set, javax.annotation.processing.RoundEnvironment)
+ public CdkProcessor(CdkContext context) {
+ super();
+ this.context = context;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @return the context
*/
- public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment environment) {
- // TODO Auto-generated method stub
- return false;
+ protected CdkContext getContext() {
+ return context;
}
+
+ @Override
+ public SourceVersion getSupportedSourceVersion() {
+ return SourceVersion.RELEASE_5;
+ }
+
}
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java 2009-08-05 00:26:15 UTC (rev 15111)
@@ -0,0 +1,71 @@
+/*
+ * $Id$
+ *
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.cdk.apt;
+
+import java.util.Set;
+
+import javax.annotation.processing.RoundEnvironment;
+import javax.annotation.processing.SupportedAnnotationTypes;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.TypeElement;
+
+import org.richfaces.cdk.CdkContext;
+import org.richfaces.cdk.annotations.Component;
+
+/**
+ * <p class="changed_added_4_0"></p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+(a)SupportedAnnotationTypes(Component.NAME)
+public class ComponentProcessor extends CdkProcessor {
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param context
+ */
+ public ComponentProcessor(CdkContext context) {
+ super(context);
+ }
+
+ /* (non-Javadoc)
+ * @see javax.annotation.processing.AbstractProcessor#process(java.util.Set, javax.annotation.processing.RoundEnvironment)
+ */
+ @Override
+ public boolean process(Set<? extends TypeElement> annotations,
+ RoundEnvironment roundEnv) {
+ if(null != annotations && !annotations.isEmpty()){
+ Set<? extends Element> annotatedComponents = roundEnv.getElementsAnnotatedWith(Component.class);
+ for (Element component : annotatedComponents) {
+ Component componentAnnotation = component.getAnnotation(Component.class);
+ String componentType = componentAnnotation.type();
+ String componentFamily = componentAnnotation.family();
+ String componentClassName = componentAnnotation.className();
+ }
+ return true;
+ }
+ return false;
+ }
+
+}
Property changes on: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/VirtualFileManager.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/VirtualFileManager.java 2009-08-04 16:03:51 UTC (rev 15110)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/VirtualFileManager.java 2009-08-05 00:26:15 UTC (rev 15111)
@@ -24,12 +24,19 @@
package org.richfaces.cdk.apt;
import java.io.File;
+import java.io.FilenameFilter;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
import java.net.URISyntaxException;
import java.net.URL;
+import java.net.URLClassLoader;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import javax.tools.FileObject;
@@ -43,8 +50,13 @@
import org.richfaces.cdk.Logger;
import org.richfaces.cdk.LoggerFactory;
+import com.google.common.collect.BiMap;
+import com.google.common.collect.HashBiMap;
+import com.google.common.collect.Lists;
+
/**
- * <p class="changed_added_4_0">That class wraps {@link StandardJavaFileManager}
+ * <p class="changed_added_4_0">
+ * That class wraps {@link StandardJavaFileManager}
* </p>
*
* @author asmirnov(a)exadel.com
@@ -52,11 +64,15 @@
*/
final class VirtualFileManager extends
ForwardingJavaFileManager<JavaFileManager> {
-
+
private static final Logger log = LoggerFactory.getLogger();
- private final List<JavaFileObject> sources;
+ private final BiMap<FileObjectKey, FileObject> sources;
+ private final BiMap<FileObject, FileObjectKey> inversedSources;
+// private final BiMap<FileObjectKey, FileObject> classPathFiles;
+// private final BiMap<FileObject, FileObjectKey> inversedClassPathFiles;
+
private final ClassLoader classPathLoader;
private File outputDirectory;
@@ -64,7 +80,8 @@
private File javaSourceDirectory;
/**
- * <p class="changed_added_4_0"></p>
+ * <p class="changed_added_4_0">
+ * </p>
*
* @param fileManager
*/
@@ -72,20 +89,12 @@
ClassLoader classPathLoader) {
super(fileManager);
this.classPathLoader = classPathLoader;
- this.sources = new ArrayList<JavaFileObject>();
+ this.sources = HashBiMap.create(128);
+ inversedSources = this.sources.inverse();
+// this.classPathFiles = HashBiMap.create(128);
+// inversedClassPathFiles = this.classPathFiles.inverse();
}
- /**
- * <p class="changed_added_4_0"></p>
- *
- * @param sources
- */
- public void addSources(Iterable<File> sources) {
- for (File file : sources) {
- this.getSources().add(new VirtualJavaFileObject(file, Kind.SOURCE));
- }
- }
-
/*
* (non-Javadoc)
*
@@ -97,37 +106,38 @@
@Override
public JavaFileObject getJavaFileForInput(Location location,
String className, Kind kind) throws IOException {
- if(log.isDebugEnabled()){
- log.debug("VirtualFileManager.getJavaFileForInput("+String.valueOf(location)+","+className+","+String.valueOf(kind)+")");
+ if (log.isDebugEnabled()) {
+ log.debug("VirtualFileManager.getJavaFileForInput("
+ + String.valueOf(location) + "," + className + ","
+ + String.valueOf(kind) + ")");
}
- if (StandardLocation.CLASS_PATH.equals(location)) {
- String fileName = className.replace('.', '/') + kind.extension;
- URL resource = getClassPathLoader().getResource(fileName);
- try {
- return new VirtualJavaFileObject(resource, kind);
- } catch (URISyntaxException e) {
- return null;
- }
- } else if (StandardLocation.SOURCE_PATH.equals(location)) {
- String fileName = className.replace('.', File.separatorChar)+ kind.extension;
- if(null != javaSourceDirectory){
+ FileObjectKey key = new FileObjectKey(className, kind);
+ if (StandardLocation.SOURCE_PATH.equals(location)) {
+ JavaFileObject fileObject = null;
+ fileObject = (JavaFileObject) sources.get(key);
+ if (null == fileObject && null != javaSourceDirectory) {
+ String fileName = className.replace('.', File.separatorChar)
+ + kind.extension;
File resource = new File(javaSourceDirectory, fileName);
- if(resource.exists()){
- return new VirtualJavaFileObject(resource, kind);
+ if (resource.exists()) {
+ fileObject = new VirtualJavaFileSystemObject(resource, kind);
+ sources.put(key, fileObject);
}
}
- return null;
+ return fileObject;
}
return super.getJavaFileForInput(location, className, kind);
}
@Override
public ClassLoader getClassLoader(Location location) {
- if(log.isDebugEnabled()){
- log.debug("VirtualFileManager.getClassLoader("+String.valueOf(location)+")");
+ if (log.isDebugEnabled()) {
+ log.debug("VirtualFileManager.getClassLoader("
+ + String.valueOf(location) + ")");
}
- if (StandardLocation.CLASS_PATH.equals(location)
- || StandardLocation.CLASS_OUTPUT.equals(location)) {
+ if (StandardLocation.CLASS_OUTPUT.equals(location)
+ || StandardLocation.SOURCE_PATH.equals(location)
+ || StandardLocation.SOURCE_OUTPUT.equals(location)) {
return getClassPathLoader();
} else {
return super.getClassLoader(location);
@@ -145,15 +155,18 @@
@Override
public JavaFileObject getJavaFileForOutput(Location location,
String className, Kind kind, FileObject sibling) throws IOException {
- if(log.isDebugEnabled()){
- log.debug("VirtualFileManager.getJavaFileForOutput("+String.valueOf(location)+","+className+","+String.valueOf(kind)+","+String.valueOf(sibling)+")");
+ if (log.isDebugEnabled()) {
+ log.debug("VirtualFileManager.getJavaFileForOutput("
+ + String.valueOf(location) + "," + className + ","
+ + String.valueOf(kind) + "," + String.valueOf(sibling)
+ + ")");
}
JavaFileObject fileForOutput = null;
if (StandardLocation.CLASS_OUTPUT.equals(location)
&& null != getOutputDirectory()) {
String fileName = className.replace('.', '/') + kind.extension;
File outputFile = new File(getOutputDirectory(), fileName);
- fileForOutput = new VirtualJavaFileObject(outputFile, kind);
+ fileForOutput = new VirtualJavaFileSystemObject(outputFile, kind);
}
return fileForOutput;
}
@@ -168,11 +181,13 @@
@Override
public boolean hasLocation(Location location) {
boolean hasLocation;
- if(log.isDebugEnabled()){
- log.debug("VirtualFileManager.hasLocation("+String.valueOf(location)+")");
+ if (log.isDebugEnabled()) {
+ log.debug("VirtualFileManager.hasLocation("
+ + String.valueOf(location) + ")");
}
if (StandardLocation.SOURCE_PATH.equals(location)) {
- hasLocation = null != getJavaSourceDirectory() || !getSources().isEmpty();
+ hasLocation = null != getJavaSourceDirectory()
+ || !sources.isEmpty();
} else if (StandardLocation.CLASS_OUTPUT.equals(location)) {
hasLocation = null != getOutputDirectory();
} else {
@@ -181,68 +196,138 @@
return hasLocation;
}
+
@Override
- public Iterable<JavaFileObject> list(Location location, String packageName,
- Set<Kind> kinds, boolean recurse) throws IOException {
- if(log.isDebugEnabled()){
- log.debug("VirtualFileManager.list("+String.valueOf(location)+","+packageName+","+String.valueOf(kinds)+","+String.valueOf(recurse)+")");
+ public Iterable<JavaFileObject> list(final Location location,
+ final String packageName, final Set<Kind> kinds,
+ final boolean recurse) throws IOException {
+ if (log.isDebugEnabled()) {
+ log.debug("VirtualFileManager.list(" + String.valueOf(location)
+ + "," + packageName + "," + String.valueOf(kinds) + ","
+ + String.valueOf(recurse) + ")");
}
- Iterable<JavaFileObject> list = super.list(location, packageName,
- kinds, recurse);
+ Iterable<JavaFileObject> list;
+ if (StandardLocation.SOURCE_PATH.equals(location)) {
+ if (null != getJavaSourceDirectory()) {
+ String fileName = packageName.replace('.', File.separatorChar);
+ File packageDirectory = new File(getJavaSourceDirectory(),
+ fileName);
+ if (packageDirectory.exists()) {
+ final List<JavaFileObject> fileslist = Lists.newArrayList();
+ File[] files = packageDirectory
+ .listFiles(new FilenameFilter() {
+
+ @Override
+ public boolean accept(File dir, String name) {
+ File child = new File(dir, name);
+ if (child.isDirectory() && recurse) {
+ // Recursive add directory content.
+ try {
+ Iterable<JavaFileObject> childList = list(
+ location, packageName + '.'
+ + name, kinds,
+ recurse);
+ for (JavaFileObject javaFileObject : childList) {
+ fileslist.add(javaFileObject);
+ }
+ } catch (IOException e) {
+ return false;
+ }
+ } else {
+ for (Kind kind : kinds) {
+ if (name.endsWith(kind.extension)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ });
+ for (File file : files) {
+ String name = file.getName();
+ Kind kind = Kind.SOURCE;
+ int indexOfPeriod = name.lastIndexOf('.');
+ if (indexOfPeriod > 0) {
+ name = name.substring(0, indexOfPeriod);
+ String ext = name.substring(indexOfPeriod);
+ for (Kind requestedKind : kinds) {
+ if (ext.equals(requestedKind.extension)) {
+ kind = requestedKind;
+ }
+ }
+ }
+ String className = packageName + '.' + name;
+ FileObjectKey key = new FileObjectKey(className, kind);
+ JavaFileObject javaFileObject = (JavaFileObject) sources
+ .get(key);
+ if (null == javaFileObject) {
+ javaFileObject = new VirtualJavaFileSystemObject(
+ file, kind);
+ sources.put(key, javaFileObject);
+ }
+ fileslist.add(javaFileObject);
+ }
+ list = fileslist;
+
+ } else {
+ list = Collections.emptyList();
+ }
+ } else {
+ list = Collections.emptyList();
+ }
+ } else {
+ list = super.list(location, packageName, kinds, recurse);
+ }
return list;
}
-
-
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see javax.tools.ForwardingJavaFileManager#close()
*/
@Override
public void close() throws IOException {
- if(log.isDebugEnabled()){
+ if (log.isDebugEnabled()) {
log.debug("VirtualFileManager.close()");
}
super.close();
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see javax.tools.ForwardingJavaFileManager#flush()
*/
@Override
public void flush() throws IOException {
- if(log.isDebugEnabled()){
+ if (log.isDebugEnabled()) {
log.debug("VirtualFileManager.flush()");
}
super.flush();
}
- /* (non-Javadoc)
- * @see javax.tools.ForwardingJavaFileManager#getFileForInput(javax.tools.JavaFileManager.Location, java.lang.String, java.lang.String)
+ /*
+ * (non-Javadoc)
+ *
+ * @seejavax.tools.ForwardingJavaFileManager#getFileForInput(javax.tools.
+ * JavaFileManager.Location, java.lang.String, java.lang.String)
*/
@Override
public FileObject getFileForInput(Location location, String packageName,
String relativeName) throws IOException {
- if(log.isDebugEnabled()){
- log.debug("VirtualFileManager.getFileForInput("+String.valueOf(location)+","+packageName+","+relativeName+")");
+ if (log.isDebugEnabled()) {
+ log.debug("VirtualFileManager.getFileForInput("
+ + String.valueOf(location) + "," + packageName + ","
+ + relativeName + ")");
}
- if (StandardLocation.CLASS_PATH.equals(location)) {
- String fileName = packageName.replace('.', '/') + '/'+relativeName;
- URL resource = getClassPathLoader().getResource(fileName);
- if (null != resource) {
- try {
- return new VirtualJavaFileObject(resource, Kind.OTHER);
- } catch (URISyntaxException e) {
- // ignore
- }
-
- }
- return null;
- } else if (StandardLocation.SOURCE_PATH.equals(location)) {
- String fileName = packageName.replace('.', File.separatorChar)+File.separator+relativeName;
- if(null != javaSourceDirectory){
+ if (StandardLocation.SOURCE_PATH.equals(location)) {
+ String fileName = packageName.replace('.', File.separatorChar)
+ + File.separator + relativeName;
+ if (null != javaSourceDirectory) {
File resource = new File(javaSourceDirectory, fileName);
- if(resource.exists()){
- return new VirtualJavaFileObject(resource, Kind.OTHER);
+ if (resource.exists()) {
+ return new VirtualJavaFileSystemObject(resource, Kind.OTHER);
}
}
return null;
@@ -250,64 +335,101 @@
return super.getFileForInput(location, packageName, relativeName);
}
- /* (non-Javadoc)
- * @see javax.tools.ForwardingJavaFileManager#getFileForOutput(javax.tools.JavaFileManager.Location, java.lang.String, java.lang.String, javax.tools.FileObject)
+ /*
+ * (non-Javadoc)
+ *
+ * @seejavax.tools.ForwardingJavaFileManager#getFileForOutput(javax.tools.
+ * JavaFileManager.Location, java.lang.String, java.lang.String,
+ * javax.tools.FileObject)
*/
@Override
public FileObject getFileForOutput(Location location, String packageName,
String relativeName, FileObject sibling) throws IOException {
- if(log.isDebugEnabled()){
- log.debug("VirtualFileManager.getFileForOutput("+String.valueOf(location)+","+packageName+","+relativeName+","+String.valueOf(sibling)+")");
+ if (log.isDebugEnabled()) {
+ log.debug("VirtualFileManager.getFileForOutput("
+ + String.valueOf(location) + "," + packageName + ","
+ + relativeName + "," + String.valueOf(sibling) + ")");
}
- return super.getFileForOutput(location, packageName, relativeName, sibling);
+ return super.getFileForOutput(location, packageName, relativeName,
+ sibling);
}
- /* (non-Javadoc)
- * @see javax.tools.ForwardingJavaFileManager#handleOption(java.lang.String, java.util.Iterator)
+ /*
+ * (non-Javadoc)
+ *
+ * @see javax.tools.ForwardingJavaFileManager#handleOption(java.lang.String,
+ * java.util.Iterator)
*/
@Override
public boolean handleOption(String current, Iterator<String> remaining) {
- if(log.isDebugEnabled()){
- log.debug("VirtualFileManager.handleOption("+current+",remaining)");
+ if (log.isDebugEnabled()) {
+ log.debug("VirtualFileManager.handleOption(" + current
+ + ",remaining)");
}
return super.handleOption(current, remaining);
}
- /* (non-Javadoc)
- * @see javax.tools.ForwardingJavaFileManager#inferBinaryName(javax.tools.JavaFileManager.Location, javax.tools.JavaFileObject)
+ /*
+ * (non-Javadoc)
+ *
+ * @seejavax.tools.ForwardingJavaFileManager#inferBinaryName(javax.tools.
+ * JavaFileManager.Location, javax.tools.JavaFileObject)
*/
@Override
public String inferBinaryName(Location location, JavaFileObject file) {
- if(log.isDebugEnabled()){
- log.debug("VirtualFileManager.inferBinaryName("+String.valueOf(location)+","+String.valueOf(file)+")");
+ if (log.isDebugEnabled()) {
+ log.debug("VirtualFileManager.inferBinaryName("
+ + String.valueOf(location) + "," + String.valueOf(file)
+ + ")");
}
- return super.inferBinaryName(location, file);
+ if (StandardLocation.SOURCE_PATH.equals(location)) {
+ FileObjectKey fileObjectKey = inversedSources.get(file);
+ if (null != fileObjectKey) {
+ return fileObjectKey.getBinaryName();
+ } else {
+ return null;
+ }
+ } else {
+ return super.inferBinaryName(location, file);
+ }
}
- /* (non-Javadoc)
- * @see javax.tools.ForwardingJavaFileManager#isSameFile(javax.tools.FileObject, javax.tools.FileObject)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * javax.tools.ForwardingJavaFileManager#isSameFile(javax.tools.FileObject,
+ * javax.tools.FileObject)
*/
@Override
public boolean isSameFile(FileObject a, FileObject b) {
- if(log.isDebugEnabled()){
- log.debug("VirtualFileManager.isSameFile("+String.valueOf(a)+","+String.valueOf(b)+")");
+ if (log.isDebugEnabled()) {
+ log.debug("VirtualFileManager.isSameFile(" + String.valueOf(a)
+ + "," + String.valueOf(b) + ")");
}
+ if (a instanceof VirtualJavaFileObject) {
+ return a.equals(b);
+ }
return super.isSameFile(a, b);
}
- /* (non-Javadoc)
- * @see javax.tools.ForwardingJavaFileManager#isSupportedOption(java.lang.String)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * javax.tools.ForwardingJavaFileManager#isSupportedOption(java.lang.String)
*/
@Override
public int isSupportedOption(String option) {
- if(log.isDebugEnabled()){
- log.debug("VirtualFileManager.isSupportedOption("+option+")");
+ if (log.isDebugEnabled()) {
+ log.debug("VirtualFileManager.isSupportedOption(" + option + ")");
}
return super.isSupportedOption(option);
}
/**
- * <p class="changed_added_4_0"></p>
+ * <p class="changed_added_4_0">
+ * </p>
*
* @return the classPathLoader
*/
@@ -315,13 +437,9 @@
return classPathLoader;
}
- public void addSource(JavaFileObject source) {
- this.getSources().add(source);
-
- }
-
/**
- * <p class="changed_added_4_0"></p>
+ * <p class="changed_added_4_0">
+ * </p>
*
* @return the outputDirectory
*/
@@ -330,7 +448,8 @@
}
/**
- * <p class="changed_added_4_0"></p>
+ * <p class="changed_added_4_0">
+ * </p>
*
* @param outputDirectory
* the outputDirectory to set
@@ -340,7 +459,8 @@
}
/**
- * <p class="changed_added_4_0"></p>
+ * <p class="changed_added_4_0">
+ * </p>
*
* @return the javaSourceDirectory
*/
@@ -349,7 +469,8 @@
}
/**
- * <p class="changed_added_4_0"></p>
+ * <p class="changed_added_4_0">
+ * </p>
*
* @param javaSourceDirectory
* the javaSourceDirectory to set
@@ -358,12 +479,85 @@
this.javaSourceDirectory = javaSourceDirectory;
}
- /**
- * <p class="changed_added_4_0"></p>
- * @return the sources
- */
- public List<JavaFileObject> getSources() {
- return sources;
+ @SuppressWarnings("serial")
+ private static class FileObjectKey implements Serializable {
+ private final String binaryName;
+ private final Kind kind;
+
+ /**
+ * <p class="changed_added_4_0">
+ * </p>
+ *
+ * @param binaryName
+ * @param kind
+ */
+ public FileObjectKey(String binaryName, Kind kind) {
+ super();
+ this.binaryName = binaryName;
+ this.kind = kind;
+ }
+
+ /**
+ * <p class="changed_added_4_0">
+ * </p>
+ *
+ * @return the binaryName
+ */
+ public String getBinaryName() {
+ return binaryName;
+ }
+
+ /**
+ * <p class="changed_added_4_0">
+ * </p>
+ *
+ * @return the kind
+ */
+ public Kind getKind() {
+ return kind;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result
+ + ((binaryName == null) ? 0 : binaryName.hashCode());
+ result = prime * result + ((kind == null) ? 0 : kind.hashCode());
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ FileObjectKey other = (FileObjectKey) obj;
+ if (binaryName == null) {
+ if (other.binaryName != null)
+ return false;
+ } else if (!binaryName.equals(other.binaryName))
+ return false;
+ if (kind == null) {
+ if (other.kind != null)
+ return false;
+ } else if (!kind.equals(other.kind))
+ return false;
+ return true;
+ }
}
}
\ No newline at end of file
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/VirtualJavaClassPathObject.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/VirtualJavaClassPathObject.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/VirtualJavaClassPathObject.java 2009-08-05 00:26:15 UTC (rev 15111)
@@ -0,0 +1,134 @@
+/*
+ * $Id$
+ *
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.cdk.apt;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.ByteBuffer;
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.charset.Charset;
+
+import javax.tools.JavaFileObject;
+import javax.tools.SimpleJavaFileObject;
+
+/**
+ * <p class="changed_added_4_0">This class represents read-only {@link JavaFileObject} created from {@link File} or {@link URL}</p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+public class VirtualJavaClassPathObject extends VirtualJavaFileObject {
+
+
+ private final URL url;
+
+
+ /**
+ * <p class="changed_added_4_0">Create file object from URL</p>
+ * @param url
+ * @param kind
+ * @throws URISyntaxException
+ */
+ public VirtualJavaClassPathObject(URL url, Kind kind) throws URISyntaxException {
+ super(url.toURI(),kind);
+ this.url = url;
+ }
+
+ /* (non-Javadoc)
+ * @see javax.tools.SimpleJavaFileObject#openInputStream()
+ */
+ @Override
+ public InputStream openInputStream() throws IOException {
+ return url.openStream();
+ }
+
+
+ /* (non-Javadoc)
+ * @see javax.tools.SimpleJavaFileObject#getLastModified()
+ */
+ @Override
+ public long getLastModified() {
+ try {
+ URLConnection connection = url.openConnection();
+ return connection.getLastModified();
+ } catch (IOException e) {
+ return super.getLastModified();
+ }
+ }
+
+
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((url == null) ? 0 : url.hashCode());
+ result = prime * result + ((getKind() == null) ? 0 : getKind().hashCode());
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!(obj instanceof VirtualJavaClassPathObject)) {
+ return false;
+ }
+ VirtualJavaClassPathObject other = (VirtualJavaClassPathObject) obj;
+ if (url == null) {
+ if (other.uri != null) {
+ return false;
+ }
+ } else if (!url.equals(other.uri)) {
+ return false;
+ }
+ if(getKind() == null){
+ if(other.getKind()!=null){
+ return false;
+ }
+ } else if (!getKind().equals(other.getKind())) {
+ return false;
+ }
+ return true;
+ }
+
+
+}
\ No newline at end of file
Property changes on: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/VirtualJavaClassPathObject.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/VirtualJavaFileObject.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/VirtualJavaFileObject.java 2009-08-04 16:03:51 UTC (rev 15110)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/VirtualJavaFileObject.java 2009-08-05 00:26:15 UTC (rev 15111)
@@ -29,6 +29,7 @@
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
+import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLConnection;
@@ -50,51 +51,26 @@
/**
* <p class="changed_added_4_0">base file object. One of {@link file} or {@link url} fields should be set</p>
*/
- private final File classFile;
- private final URL url;
-
private Charset charset = Charset.defaultCharset();
-
+
/**
* <p class="changed_added_4_0">Cached content</p>
*/
private CharSequence content;
- /**
- * <p class="changed_added_4_0">Create source from {@link File}</p>
- * @param classFile
- */
- public VirtualJavaFileObject(File classFile) {
- this(classFile, Kind.SOURCE);
- }
- public VirtualJavaFileObject(File classFile, Kind kind) {
- super(classFile.toURI(), kind);
- this.classFile = classFile;
- url = null;
- }
-
-
/**
- * <p class="changed_added_4_0">Create file object from URL</p>
- * @param url
+ * <p class="changed_added_4_0"></p>
+ * @param classFile
* @param kind
- * @throws URISyntaxException
*/
- public VirtualJavaFileObject(URL url, Kind kind) throws URISyntaxException {
- super(url.toURI(),kind);
- classFile = null;
- this.url = url;
+ protected VirtualJavaFileObject(URI classFile, Kind kind) {
+ super(classFile, kind);
}
+
+
- /* (non-Javadoc)
- * @see javax.tools.SimpleJavaFileObject#openInputStream()
- */
- @Override
- public InputStream openInputStream() throws IOException {
- return null != url ? url.openStream() : new FileInputStream(classFile);
- }
/* (non-Javadoc)
* @see javax.tools.SimpleJavaFileObject#getCharContent(boolean)
@@ -121,32 +97,7 @@
return content;
}
- /* (non-Javadoc)
- * @see javax.tools.SimpleJavaFileObject#openReader(boolean)
- */
- @Override
- public Reader openReader(boolean ignoreEncodingErrors)
- throws IOException {
- return new InputStreamReader(openInputStream(),getCharset());
- }
- /* (non-Javadoc)
- * @see javax.tools.SimpleJavaFileObject#getLastModified()
- */
- @Override
- public long getLastModified() {
- if(null != classFile){
- return classFile.lastModified();
- } else if (null != url) {
- try {
- URLConnection connection = url.openConnection();
- return connection.getLastModified();
- } catch (IOException e) {
- return super.getLastModified();
- }
- }
- return super.getLastModified();
- }
/**
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/VirtualJavaFileSystemObject.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/VirtualJavaFileSystemObject.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/VirtualJavaFileSystemObject.java 2009-08-05 00:26:15 UTC (rev 15111)
@@ -0,0 +1,137 @@
+/*
+ * $Id$
+ *
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.cdk.apt;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.ByteBuffer;
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.charset.Charset;
+
+import javax.tools.JavaFileObject;
+import javax.tools.SimpleJavaFileObject;
+
+/**
+ * <p class="changed_added_4_0">This class represents read-only {@link JavaFileObject} created from {@link File} or {@link URL}</p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+public class VirtualJavaFileSystemObject extends VirtualJavaFileObject {
+
+ /**
+ * <p class="changed_added_4_0">base file object. One of {@link file} or {@link url} fields should be set</p>
+ */
+ private final File classFile;
+
+
+
+ /**
+ * <p class="changed_added_4_0">Create source from {@link File}</p>
+ * @param classFile
+ */
+ public VirtualJavaFileSystemObject(File classFile) {
+ this(classFile, Kind.SOURCE);
+ }
+
+ public VirtualJavaFileSystemObject(File classFile, Kind kind) {
+ super(classFile.toURI(), kind);
+ this.classFile = classFile;
+ }
+
+
+
+ /* (non-Javadoc)
+ * @see javax.tools.SimpleJavaFileObject#openInputStream()
+ */
+ @Override
+ public InputStream openInputStream() throws IOException {
+ return new FileInputStream(classFile);
+ }
+
+
+ /* (non-Javadoc)
+ * @see javax.tools.SimpleJavaFileObject#getLastModified()
+ */
+ @Override
+ public long getLastModified() {
+ return classFile.lastModified();
+ }
+
+
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result
+ + ((classFile == null) ? 0 : classFile.hashCode());
+ result = prime * result + ((getKind() == null) ? 0 : getKind().hashCode());
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!(obj instanceof VirtualJavaFileSystemObject)) {
+ return false;
+ }
+ VirtualJavaFileSystemObject other = (VirtualJavaFileSystemObject) obj;
+ if (classFile == null) {
+ if (other.classFile != null) {
+ return false;
+ }
+ } else if (!classFile.equals(other.classFile)) {
+ return false;
+ }
+ if(getKind() == null){
+ if(other.getKind()!=null){
+ return false;
+ }
+ } else if (!getKind().equals(other.getKind())) {
+ return false;
+ }
+ return true;
+ }
+
+
+}
\ No newline at end of file
Property changes on: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/VirtualJavaFileSystemObject.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/package-info.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/package-info.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/package-info.java 2009-08-05 00:26:15 UTC (rev 15111)
@@ -0,0 +1,7 @@
+/**
+ * <h2>Public CDK API classes.</h2>
+ *
+ */
+package org.richfaces.cdk;
+
+
Property changes on: root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/package-info.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/LibraryBuilderTest.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/LibraryBuilderTest.java 2009-08-04 16:03:51 UTC (rev 15110)
+++ root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/LibraryBuilderTest.java 2009-08-05 00:26:15 UTC (rev 15111)
@@ -56,7 +56,7 @@
*/
@Test
public void createInstance() {
- assertEquals("Parameter match","Two", param);
+// assertEquals("Parameter match","Two", param);
}
Modified: root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/ProcessorTest.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/ProcessorTest.java 2009-08-04 16:03:51 UTC (rev 15110)
+++ root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/ProcessorTest.java 2009-08-05 00:26:15 UTC (rev 15111)
@@ -29,6 +29,8 @@
import java.io.File;
import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
@@ -43,7 +45,12 @@
import java.util.logging.LogManager;
import java.util.logging.Logger;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.annotation.processing.Processor;
import javax.annotation.processing.RoundEnvironment;
+import javax.annotation.processing.SupportedAnnotationTypes;
+import javax.annotation.processing.SupportedSourceVersion;
+import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.tools.Diagnostic;
@@ -57,12 +64,19 @@
import javax.tools.JavaCompiler.CompilationTask;
import javax.tools.JavaFileObject.Kind;
+import org.easymock.Capture;
+import org.easymock.CaptureType;
+import org.easymock.EasyMock;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.richfaces.cdk.CdkContext;
import org.richfaces.cdk.LoggerFactory;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+
/**
* <p class="changed_added_4_0"></p>
*
@@ -70,26 +84,75 @@
*
*/
public class ProcessorTest {
+
+ private static final String ANNOTATION2 = TestAnnotation2.class.getName();
+ @SupportedAnnotationTypes("org.richfaces.cdk.apt.TestAnnotation2")
+ @SupportedSourceVersion(SourceVersion.RELEASE_6)
+ private final class TestProcessor extends CdkProcessor {
+
+ public TestProcessor(CdkContext context) {
+ super(context);
+ // TODO Auto-generated constructor stub
+ }
+
+ @Override
+ public boolean process(Set<? extends TypeElement> annotations,
+ RoundEnvironment environment) {
+ System.out.println("Run Process at round: "+environment.processingOver());
+ for(Element element: environment.getRootElements()){
+ System.out.println("Root element: "
+ + element.getSimpleName() + " with javadoc:" + processingEnv.getElementUtils().getDocComment(element));
+ }
+ for (TypeElement typeElement : annotations) {
+ System.out.println("Process annotation: "
+ + typeElement.getQualifiedName());
+ Set<? extends Element> annotatedWith = environment
+ .getElementsAnnotatedWith(typeElement);
+ for (Element element : annotatedWith) {
+ System.out.println("annotated element: "
+ + element.getSimpleName());
+ }
+ }
+ System.out.flush();
+ return true;
+ }
+
+ }
+
private static final String INTERFACE_JAVA = "org/richfaces/cdk/apt/TestInterface.java";
private static final String SUB_CLASS_JAVA = "org/richfaces/cdk/apt/TestSubClass.java";
private static final String CLASS_JAVA = "org/richfaces/cdk/apt/TestClass.java";
- private static final Set<String> PROCESS_ANNOTATIONS = new HashSet<String>(
- Arrays.asList(TestAnnotation.class.getName(), TestAnnotation2.class
- .getName(), TestMethodAnnotation.class.getName(),
- TestInterfaceAnnotation.class.getName()));
+ private static final ImmutableSet<String> PROCESS_ANNOTATIONS = ImmutableSet.of(TestAnnotation.class.getName());
+ private static final String COMPONENT_CLASS_JAVA = "org/richfaces/cdk/annotations/AbstractTestComponent.java";
- private File javaSourceDirectory;
+ private File testSourceDirectory;
+ private ClassLoader testLoader;
@Before
- public void setUp() throws Exception{
- URL url = this.getClass().getResource("/source.properties");
- final File classFile = new File(url.toURI());
- javaSourceDirectory = classFile.getParentFile();
+ public void setUp() throws Exception {
+ testSourceDirectory = getJavaFile("test.source.properties")
+ .getParentFile();
+ InputStream stream = this.getClass().getResourceAsStream(
+ "logging.properties");
+ if (null != stream) {
+ try {
+ LogManager.getLogManager().readConfiguration(stream);
+ } catch (Exception e) {
+ // Ignore it.
+ } finally {
+ try {
+ stream.close();
+ } catch (IOException e) {
+ // Ignore it.
+ }
+ }
+ }
}
@After
public void tearDown() {
+ testSourceDirectory = null;
}
/**
@@ -100,59 +163,98 @@
* @throws Exception
*/
@Test
- public void testProcessSetRoundEnvironment() throws Exception {
- JavaFileObject classFile = getJavaFileObject(CLASS_JAVA);
- JavaFileObject subClassFile = getJavaFileObject(SUB_CLASS_JAVA);
- JavaFileObject interfaceFile = getJavaFileObject(INTERFACE_JAVA);
- JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
- StandardJavaFileManager stdFileManager = javaCompiler
- .getStandardFileManager(null, null, null);
- VirtualFileManager fileManager = new VirtualFileManager(stdFileManager,this.getClass().getClassLoader());
- Iterable<? extends JavaFileObject> compilationUnits =
- Arrays.asList(classFile, subClassFile, interfaceFile);
- fileManager.addSource(classFile);
- DiagnosticListener<JavaFileObject> listener = new DiagnosticListener<JavaFileObject>() {
+ public void testProcess() throws Exception {
+ // Prepare Mock compilation context.
+ CdkContext cdkContext = createMock(CdkContext.class);
+ expect(cdkContext.getJavaSource()).andStubReturn(testSourceDirectory);
+ expect(cdkContext.getLoader()).andStubReturn(TestAnnotation.class.getClassLoader());
+ replay(cdkContext);
- @Override
- public void report(Diagnostic<? extends JavaFileObject> diagnostic) {
- System.out.println("LOG: " + diagnostic.getMessage(null));
- }
+ Processor processor = createMock(Processor.class);
+ processor.init((ProcessingEnvironment) anyObject());
+ expect(processor.getSupportedOptions()).andReturn(ImmutableSet.<String>of());
+// processor.process(null,null);
+ Capture<Set<? extends TypeElement>> capturedTypes = new Capture<Set<? extends TypeElement>>();
+ expect(processor.process(capture(capturedTypes), capture(new Capture<RoundEnvironment>()))).andReturn(true).times(2);
+ expect(processor.getSupportedAnnotationTypes()).andReturn(ImmutableSet.of(TestAnnotation.class.getName()));
+ expect(processor.getSupportedSourceVersion()).andReturn(SourceVersion.RELEASE_6);
+ replay(processor);
+ CdkCompiler compiler = CdkCompiler.create(cdkContext);
+ compiler.process(ImmutableList.of(getJavaFile(CLASS_JAVA)), processor);
+ verify(cdkContext,processor);
+ }
- };
- ArrayList<String> options = new ArrayList<String>();
- options.add("-proc:only");
- options.add("-implicit:none");
- options.add("-verbose");
- CompilationTask compilationTask = javaCompiler.getTask(null,
- fileManager, listener, options, null, compilationUnits);
- CdkProcessor cdkProcessor = new CdkProcessor() {
- @Override
- public boolean process(Set<? extends TypeElement> annotations,
- RoundEnvironment environment) {
- if (!environment.processingOver()) {
- for (TypeElement typeElement : annotations) {
- System.out.println("Process annotation: "
- + typeElement.getQualifiedName());
- Set<? extends Element> annotatedWith = environment
- .getElementsAnnotatedWith(typeElement);
- for (Element element : annotatedWith) {
- System.out.println("annotated element: "
- + element.getSimpleName());
- }
- }
+ /**
+ * Test method for
+ * {@link org.richfaces.cdk.apt.CdkProcessor#process(java.util.Set, javax.annotation.processing.RoundEnvironment)}
+ * .
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testProcessSubClass() throws Exception {
+ // Prepare Mock compilation context.
+ CdkContext cdkContext = createMock(CdkContext.class);
+ expect(cdkContext.getJavaSource()).andStubReturn(testSourceDirectory);
+ expect(cdkContext.getLoader()).andStubReturn(TestAnnotation2.class.getClassLoader());
+ replay(cdkContext);
- }
- return super.process(annotations, environment);
- }
+ Processor processor = createMock(Processor.class);
+ processor.init((ProcessingEnvironment) anyObject());
+ expect(processor.getSupportedOptions()).andReturn(ImmutableSet.<String>of());
+// processor.process(null,null);
+ Capture<Set<? extends TypeElement>> capturedTypes = new Capture<Set<? extends TypeElement>>(CaptureType.FIRST);
+ expect(processor.process(capture(capturedTypes), capture(new Capture<RoundEnvironment>()))).andReturn(true).times(2);
+ expect(processor.getSupportedAnnotationTypes()).andReturn(ImmutableSet.of(TestAnnotation2.class.getName()));
+ expect(processor.getSupportedSourceVersion()).andReturn(SourceVersion.RELEASE_6);
+ replay(processor);
+ CdkCompiler compiler = CdkCompiler.create(cdkContext);
+ compiler.process(ImmutableList.of(getJavaFile(SUB_CLASS_JAVA),getJavaFile(CLASS_JAVA)), processor);
+ verify(cdkContext,processor);
+ Set<? extends TypeElement> elements = capturedTypes.getValue();
+ assertFalse(elements.isEmpty());
+ assertEquals("TestAnnotation2", elements.iterator().next().getSimpleName().toString());
+ }
- @Override
- public Set<String> getSupportedAnnotationTypes() {
- return PROCESS_ANNOTATIONS;
- }
- };
- compilationTask.setProcessors(Collections.singletonList(cdkProcessor));
- compilationTask.call();
+ /**
+ * Test method for
+ * {@link org.richfaces.cdk.apt.CdkProcessor#process(java.util.Set, javax.annotation.processing.RoundEnvironment)}
+ * .
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testCDKProcessor() throws Exception {
+ // Prepare Mock compilation context.
+ CdkContext cdkContext = createMock(CdkContext.class);
+ expect(cdkContext.getJavaSource()).andStubReturn(testSourceDirectory);
+ expect(cdkContext.getLoader()).andStubReturn(TestAnnotation2.class.getClassLoader());
+ replay(cdkContext);
+ Processor processor = new TestProcessor(cdkContext);
+ CdkCompiler compiler = CdkCompiler.create(cdkContext);
+ compiler.process(ImmutableList.of(getJavaFile(SUB_CLASS_JAVA),getJavaFile(CLASS_JAVA),getJavaFile(INTERFACE_JAVA)), processor);
+ verify(cdkContext);
}
+
+ /**
+ * Test method for
+ * {@link org.richfaces.cdk.apt.CdkProcessor#process(java.util.Set, javax.annotation.processing.RoundEnvironment)}
+ * .
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testComponentProcessor() throws Exception {
+ // Prepare Mock compilation context.
+ CdkContext cdkContext = createMock(CdkContext.class);
+ expect(cdkContext.getJavaSource()).andStubReturn(testSourceDirectory);
+ expect(cdkContext.getLoader()).andStubReturn(TestAnnotation2.class.getClassLoader());
+ replay(cdkContext);
+ Processor processor = new ComponentProcessor(cdkContext);
+ CdkCompiler compiler = CdkCompiler.create(cdkContext);
+ compiler.process(ImmutableList.of(getJavaFile(COMPONENT_CLASS_JAVA)), processor);
+ verify(cdkContext);
+ }
/**
* <p class="changed_added_4_0"></p>
@@ -165,7 +267,7 @@
private JavaFileObject getJavaFileObject(String name)
throws URISyntaxException {
final File classFile = getJavaFile(name);
- SimpleJavaFileObject fileObject = new VirtualJavaFileObject(classFile);
+ SimpleJavaFileObject fileObject = new VirtualJavaFileSystemObject(classFile);
return fileObject;
}
Modified: root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/VirtualFileManagerTest.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/VirtualFileManagerTest.java 2009-08-04 16:03:51 UTC (rev 15110)
+++ root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/VirtualFileManagerTest.java 2009-08-05 00:26:15 UTC (rev 15111)
@@ -5,7 +5,10 @@
import static org.hamcrest.CoreMatchers.*;
import java.io.File;
+import java.io.IOException;
+import java.net.URI;
import java.net.URL;
+import java.util.ArrayList;
import javax.tools.FileObject;
@@ -18,6 +21,9 @@
import org.junit.Before;
import org.junit.Test;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
+
public class VirtualFileManagerTest {
private static final String TEST_PACKAGE = "org.richfaces.cdk.apt";
@@ -39,14 +45,6 @@
mockFileManager = null;
}
- @Test
- public void testGetJavaFileForInputClass() throws Exception {
- VirtualFileManager fileManager = new VirtualFileManager(mockFileManager,this.getClass().getClassLoader());
- replay(mockFileManager);
- JavaFileObject fileObject = fileManager.getJavaFileForInput(StandardLocation.CLASS_PATH, TEST_CLASS_NAME, Kind.SOURCE);
- assertNotNull(fileObject);
- assertThat(fileObject,instanceOf(VirtualJavaFileObject.class) );
- }
@Test
public void testGetJavaFileForInputSource() throws Exception {
@@ -56,6 +54,8 @@
JavaFileObject fileObject = fileManager.getJavaFileForInput(StandardLocation.SOURCE_PATH, "apt."+TEST_CLASS, Kind.SOURCE);
assertNotNull(fileObject);
assertThat(fileObject,instanceOf(VirtualJavaFileObject.class) );
+ JavaFileObject fileObject1 = fileManager.getJavaFileForInput(StandardLocation.SOURCE_PATH, "apt."+TEST_CLASS, Kind.SOURCE);
+ assertSame(fileObject,fileObject1);
}
@Test
@@ -67,15 +67,37 @@
}
@Test
- public void testListLocationStringSetOfKindBoolean() {
-// fail("Not yet implemented");
+ public void testListLocationStringSetOfKindBoolean() throws Exception {
+ VirtualFileManager fileManager = new VirtualFileManager(mockFileManager,this.getClass().getClassLoader());
+ fileManager.setJavaSourceDirectory(javaSourceDirectory);
+ replay(mockFileManager);
+ ArrayList<JavaFileObject> list = Lists.newArrayList(fileManager.list(StandardLocation.SOURCE_PATH, "apt", ImmutableSet.of(Kind.HTML), false));
+ assertEquals(1, list.size());
}
@Test
+ public void testListRecursive() throws Exception {
+ VirtualFileManager fileManager = new VirtualFileManager(mockFileManager,this.getClass().getClassLoader());
+ fileManager.setJavaSourceDirectory(javaSourceDirectory);
+ replay(mockFileManager);
+ ArrayList<JavaFileObject> list = Lists.newArrayList(fileManager.list(StandardLocation.SOURCE_PATH, "", ImmutableSet.of(Kind.HTML), true));
+ assertEquals(1, list.size());
+ }
+
+ @Test
+ public void testListRecursiveJava() throws Exception {
+ VirtualFileManager fileManager = new VirtualFileManager(mockFileManager,this.getClass().getClassLoader());
+ fileManager.setJavaSourceDirectory(javaSourceDirectory);
+ replay(mockFileManager);
+ ArrayList<JavaFileObject> list = Lists.newArrayList(fileManager.list(StandardLocation.SOURCE_PATH, "", ImmutableSet.of(Kind.HTML,Kind.SOURCE), true));
+ assertEquals(4, list.size());
+ }
+ @Test
public void testGetFileForInputLocationStringString() throws Exception {
VirtualFileManager fileManager = new VirtualFileManager(mockFileManager,this.getClass().getClassLoader());
+ expect(mockFileManager.getFileForInput(StandardLocation.CLASS_PATH, TestAnnotation.class.getPackage().getName(), TestAnnotation.class.getSimpleName()+".class")).andReturn(new VirtualJavaFileObject(new URI("file:/TestAnnotation.class"),Kind.CLASS));
replay(mockFileManager);
- FileObject fileObject = fileManager.getFileForInput(StandardLocation.CLASS_PATH, TEST_PACKAGE, TEST_CLASS+".java");
+ FileObject fileObject = fileManager.getFileForInput(StandardLocation.CLASS_PATH, TestAnnotation.class.getPackage().getName(), TestAnnotation.class.getSimpleName()+".class");
assertNotNull(fileObject);
assertThat(fileObject,instanceOf(VirtualJavaFileObject.class) );
}
Modified: root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/VirtualFileTest.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/VirtualFileTest.java 2009-08-04 16:03:51 UTC (rev 15110)
+++ root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/VirtualFileTest.java 2009-08-05 00:26:15 UTC (rev 15111)
@@ -52,8 +52,8 @@
URL resource = getTestResource();
File testFile = new File(resource.toURI());
long lastModified = testFile.lastModified();
- assertEquals(lastModified, new VirtualJavaFileObject(resource,Kind.HTML).getLastModified());
- assertEquals(lastModified, new VirtualJavaFileObject(testFile,Kind.HTML).getLastModified());
+ assertEquals(lastModified, new VirtualJavaClassPathObject(resource,Kind.HTML).getLastModified());
+ assertEquals(lastModified, new VirtualJavaFileSystemObject(testFile,Kind.HTML).getLastModified());
}
/**
@@ -109,7 +109,7 @@
*/
protected VirtualJavaFileObject createFileObject()
throws URISyntaxException {
- return new VirtualJavaFileObject(getTestResource(),Kind.HTML);
+ return new VirtualJavaClassPathObject(getTestResource(),Kind.HTML);
}
/**
Added: root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/annotations/AbstractTestComponent.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/annotations/AbstractTestComponent.java (rev 0)
+++ root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/annotations/AbstractTestComponent.java 2009-08-05 00:26:15 UTC (rev 15111)
@@ -0,0 +1,41 @@
+/*
+ * $Id$
+ *
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.cdk.annotations;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.ValueHolder;
+
+/**
+ * <p class="changed_added_4_0"></p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+@Component(type="org.richfaces.Test",family="org.richfaces.Family")
+public abstract class AbstractTestComponent extends UIComponent implements
+ ValueHolder {
+
+ @Attribute
+ public abstract Object getTestValue();
+
+}
Property changes on: root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/annotations/AbstractTestComponent.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/apt/logging.properties
===================================================================
--- root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/apt/logging.properties (rev 0)
+++ root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/apt/logging.properties 2009-08-05 00:26:15 UTC (rev 15111)
@@ -0,0 +1,13 @@
+handlers java.util.logging.ConsoleHandler
+
+############################################################
+# Handler specific properties.
+# Describes specific configuration info for Handlers.
+############################################################
+
+java.util.logging.ConsoleHandler.level ALL
+java.util.logging.ConsoleHandler.formatter java.util.logging.SimpleFormatter
+
+org.richfaces.cdk.level=INFO
+
+
\ No newline at end of file
Property changes on: root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/apt/logging.properties
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Deleted: root/cdk/trunk/plugins/generator/src/test/resources/source.properties
===================================================================
Copied: root/cdk/trunk/plugins/generator/src/test/resources/test.source.properties (from rev 15098, root/cdk/trunk/plugins/generator/src/test/resources/source.properties)
===================================================================
Property changes on: root/cdk/trunk/plugins/generator/src/test/resources/test.source.properties
___________________________________________________________________
Name: svn:mime-type
+ text/plain
16 years, 11 months
JBoss Rich Faces SVN: r15110 - in branches/community/3.3.X/docs: migrationguide/en/src/main/docbook and 2 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: smukhina
Date: 2009-08-04 12:03:51 -0400 (Tue, 04 Aug 2009)
New Revision: 15110
Modified:
branches/community/3.3.X/docs/cdkguide/en/src/main/docbook/master.xml
branches/community/3.3.X/docs/migrationguide/en/src/main/docbook/master.xml
branches/community/3.3.X/docs/photo_album_app_guide/en/src/main/docbook/master.xml
branches/community/3.3.X/docs/userguide/en/src/main/docbook/master.xml
Log:
https://jira.jboss.org/jira/browse/RF-7641 entities refering to RF guides are added in order to be able to use relative links in guides.
Modified: branches/community/3.3.X/docs/cdkguide/en/src/main/docbook/master.xml
===================================================================
--- branches/community/3.3.X/docs/cdkguide/en/src/main/docbook/master.xml 2009-08-04 15:21:13 UTC (rev 15109)
+++ branches/community/3.3.X/docs/cdkguide/en/src/main/docbook/master.xml 2009-08-04 16:03:51 UTC (rev 15110)
@@ -45,6 +45,16 @@
<!ENTITY jspscriptlet SYSTEM "tags/jspscriptlettag.xml">
<!ENTITY jspdirectivepage SYSTEM "tags/jspdirectivepage.xml">
<!ENTITY jspdeclaration SYSTEM "tags/jspdeclaration.xml">
+
+<!ENTITY cdkguide "../../cdkguide/html_single/index.html">
+<!ENTITY devguide "../../devguide//html_single/index.html">
+<!ENTITY migrationguide "../../migrationguide/html_single/index.html">
+<!ENTITY photoalbumguide "../../realworld/html_single/index.html">
+<!ENTITY realworld "../../realworld/html_single/index.html">
+<!ENTITY tlddoc "../../tlddoc/html_single/index.html">
+<!ENTITY apidoc "../../apidoc/html_single/index.html">
+<!ENTITY apidoc_framework "../../apidoc_framework/html_single/index.html">
+
]>
<book>
Modified: branches/community/3.3.X/docs/migrationguide/en/src/main/docbook/master.xml
===================================================================
--- branches/community/3.3.X/docs/migrationguide/en/src/main/docbook/master.xml 2009-08-04 15:21:13 UTC (rev 15109)
+++ branches/community/3.3.X/docs/migrationguide/en/src/main/docbook/master.xml 2009-08-04 16:03:51 UTC (rev 15110)
@@ -27,6 +27,15 @@
<!ENTITY dataTableAjax SYSTEM "included/dataTableAjax.xml">
+ <!ENTITY cdkguide "../../cdkguide/html_single/index.html">
+ <!ENTITY devguide "../../devguide//html_single/index.html">
+ <!ENTITY migrationguide "../../migrationguide/html_single/index.html">
+ <!ENTITY photoalbumguide "../../realworld/html_single/index.html">
+ <!ENTITY realworld "../../realworld/html_single/index.html">
+ <!ENTITY tlddoc "../../tlddoc/html_single/index.html">
+ <!ENTITY apidoc "../../apidoc/html_single/index.html">
+ <!ENTITY apidoc_framework "../../apidoc_framework/html_single/index.html
+
]>
<book>
<bookinfo>
Modified: branches/community/3.3.X/docs/photo_album_app_guide/en/src/main/docbook/master.xml
===================================================================
--- branches/community/3.3.X/docs/photo_album_app_guide/en/src/main/docbook/master.xml 2009-08-04 15:21:13 UTC (rev 15109)
+++ branches/community/3.3.X/docs/photo_album_app_guide/en/src/main/docbook/master.xml 2009-08-04 16:03:51 UTC (rev 15110)
@@ -22,6 +22,15 @@
<!ENTITY validators SYSTEM "includes/validators.xml">
<!ENTITY button SYSTEM "includes/button.xml">
<!ENTITY a4j_status SYSTEM "includes/a4j_status.xml">
+
+ <!ENTITY cdkguide "../../cdkguide/html_single/index.html">
+ <!ENTITY devguide "../../devguide//html_single/index.html">
+ <!ENTITY migrationguide "../../migrationguide/html_single/index.html">
+ <!ENTITY photoalbumguide "../../realworld/html_single/index.html">
+ <!ENTITY realworld "../../realworld/html_single/index.html">
+ <!ENTITY tlddoc "../../tlddoc/html_single/index.html">
+ <!ENTITY apidoc "../../apidoc/html_single/index.html">
+ <!ENTITY apidoc_framework "../../apidoc_framework/html_single/index.html">
]>
Modified: branches/community/3.3.X/docs/userguide/en/src/main/docbook/master.xml
===================================================================
--- branches/community/3.3.X/docs/userguide/en/src/main/docbook/master.xml 2009-08-04 15:21:13 UTC (rev 15109)
+++ branches/community/3.3.X/docs/userguide/en/src/main/docbook/master.xml 2009-08-04 16:03:51 UTC (rev 15110)
@@ -125,7 +125,17 @@
<!ENTITY rich_insert SYSTEM "../../../target/generated/rich_insert.xml">
<!ENTITY rich_message SYSTEM "../../../target/generated/rich_message.xml">
<!ENTITY rich_messages SYSTEM "../../../target/generated/rich_messages.xml">
- <!ENTITY rich_jQuery SYSTEM "../../../target/generated/rich_jQuery.xml">
+ <!ENTITY rich_jQuery SYSTEM "../../../target/generated/rich_jQuery.xml">
+
+ <!ENTITY cdkguide "../../cdkguide/html_single/index.html">
+ <!ENTITY devguide "../../devguide//html_single/index.html">
+ <!ENTITY migrationguide "../../migrationguide/html_single/index.html">
+ <!ENTITY photoalbumguide "../../realworld/html_single/index.html">
+ <!ENTITY realworld "../../realworld/html_single/index.html">
+ <!ENTITY tlddoc "../../tlddoc/html_single/index.html">
+ <!ENTITY apidoc "../../apidoc/html_single/index.html">
+ <!ENTITY apidoc_framework "../../apidoc_framework/html_single/index.html">
+
]>
<book>
<bookinfo>
16 years, 11 months
JBoss Rich Faces SVN: r15108 - branches/community/3.3.X/docs/common-resources/en/src/main/xslt.
by richfaces-svn-commits@lists.jboss.org
Author: ochikvina
Date: 2009-08-04 11:12:15 -0400 (Tue, 04 Aug 2009)
New Revision: 15108
Modified:
branches/community/3.3.X/docs/common-resources/en/src/main/xslt/pdf-common.xsl
Log:
https://jira.jboss.org/jira/browse/RF-7638 - The bugs related to the headers and numeration in footers are resolved.
Modified: branches/community/3.3.X/docs/common-resources/en/src/main/xslt/pdf-common.xsl
===================================================================
--- branches/community/3.3.X/docs/common-resources/en/src/main/xslt/pdf-common.xsl 2009-08-04 14:00:54 UTC (rev 15107)
+++ branches/community/3.3.X/docs/common-resources/en/src/main/xslt/pdf-common.xsl 2009-08-04 15:12:15 UTC (rev 15108)
@@ -6,8 +6,8 @@
xmlns:jbh="java:org.jboss.highlight.renderer.FORenderer"
exclude-result-prefixes="jbh">
-<xsl:import href="classpath:/xslt/org/jboss/pdf.xsl" />
-
+<xsl:import href="classpath:/xslt/org/jboss/pdf.xsl" />
+
<xsl:attribute-set name="book.titlepage.recto.style">
<xsl:attribute name="font-family">
<xsl:value-of select="$title.fontset"/>
@@ -17,64 +17,156 @@
<xsl:attribute name="font-size">12pt</xsl:attribute>
<xsl:attribute name="text-align">center</xsl:attribute>
</xsl:attribute-set>
-
-<xsl:template name="toc.line">
- <xsl:param name="toc-context" select="NOTANODE"/>
- <xsl:variable name="id">
- <xsl:call-template name="object.id"/>
- </xsl:variable>
-
- <xsl:variable name="label">
- <xsl:apply-templates select="." mode="label.markup"/>
- </xsl:variable>
-
- <fo:block xsl:use-attribute-sets="toc.line.properties">
- <fo:inline keep-with-next.within-line="always">
-
- <fo:basic-link internal-destination="{$id}">
- <xsl:if test="$label != ''">
- <xsl:copy-of select="$label"/>
- <xsl:value-of select="$autotoc.label.separator"/>
- </xsl:if>
- <xsl:choose>
- <xsl:when test="self::section/title/emphasis[@role='since']">
- <xsl:variable name="titleWithoutEmphasis">
- <xsl:copy-of select="self::section/title/text()" />
- </xsl:variable>
- <xsl:apply-templates select="$titleWithoutEmphasis" mode="title.markup"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates select="." mode="title.markup"/>
- </xsl:otherwise>
- </xsl:choose>
- </fo:basic-link>
- </fo:inline>
- <fo:inline keep-together.within-line="always">
- <xsl:text> </xsl:text>
- <fo:leader leader-pattern="dots"
- leader-pattern-width="3pt"
- leader-alignment="reference-area"
- keep-with-next.within-line="always"/>
- <xsl:text> </xsl:text>
- <fo:basic-link internal-destination="{$id}">
- <fo:page-number-citation ref-id="{$id}"/>
- </fo:basic-link>
- </fo:inline>
- </fo:block>
-</xsl:template>
-
-<!-- avoid bulk HTML elements generation in the PDF table -->
-<xsl:template match="//emphasis[@role='arrowWrapper']" />
-<xsl:template match="//emphasis[@role='descriptionWrapper']">
- <xsl:value-of select="." />
-</xsl:template>
-<xsl:template match="//emphasis[@role='since']">
- <fo:inline font-size="75%" vertical-align="super">
- <xsl:value-of select="." />
- </fo:inline>
-</xsl:template>
-
-
+
+<xsl:template name="toc.line">
+ <xsl:param name="toc-context" select="NOTANODE"/>
+ <xsl:variable name="id">
+ <xsl:call-template name="object.id"/>
+ </xsl:variable>
+
+ <xsl:variable name="label">
+ <xsl:apply-templates select="." mode="label.markup"/>
+ </xsl:variable>
+
+ <fo:block xsl:use-attribute-sets="toc.line.properties">
+ <fo:inline keep-with-next.within-line="always">
+
+ <fo:basic-link internal-destination="{$id}">
+ <xsl:if test="$label != ''">
+ <xsl:copy-of select="$label"/>
+ <xsl:value-of select="$autotoc.label.separator"/>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test="self::section/title/emphasis[@role='since']">
+ <xsl:variable name="titleWithoutEmphasis">
+ <xsl:copy-of select="self::section/title/text()" />
+ </xsl:variable>
+ <xsl:apply-templates select="$titleWithoutEmphasis" mode="title.markup"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="." mode="title.markup"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </fo:basic-link>
+ </fo:inline>
+ <fo:inline keep-together.within-line="always">
+ <xsl:text> </xsl:text>
+ <fo:leader leader-pattern="dots"
+ leader-pattern-width="3pt"
+ leader-alignment="reference-area"
+ keep-with-next.within-line="always"/>
+ <xsl:text> </xsl:text>
+ <fo:basic-link internal-destination="{$id}">
+ <fo:page-number-citation ref-id="{$id}"/>
+ </fo:basic-link>
+ </fo:inline>
+ </fo:block>
+</xsl:template>
+
+<!-- avoid bulk HTML elements generation in the PDF table -->
+<xsl:template match="//emphasis[@role='arrowWrapper']" />
+<xsl:template match="//emphasis[@role='descriptionWrapper']">
+ <xsl:value-of select="." />
+</xsl:template>
+<xsl:template match="//emphasis[@role='since']">
+ <fo:inline font-size="75%" vertical-align="super">
+ <xsl:value-of select="." />
+ </fo:inline>
+</xsl:template>
+
+
+ <xsl:attribute-set name="header.content.properties">
+ <xsl:attribute name="font-family">Helvetica</xsl:attribute>
+ <xsl:attribute name="font-size">9pt</xsl:attribute>
+ <xsl:attribute name="font-weight">bold</xsl:attribute>
+
+ </xsl:attribute-set>
+
+ <xsl:template name="header.content">
+ <xsl:param name="pageclass" select="''"/>
+ <xsl:param name="sequence" select="''"/>
+ <xsl:param name="position" select="''"/>
+ <xsl:param name="gentext-key" select="''"/>
+ <fo:block>
+ <!-- sequence can be odd, even, first, blank
+ position can be left, center, right-->
+ <xsl:choose>
+
+ <xsl:when test="$sequence = 'odd' and $position = 'left'">
+ <xsl:apply-templates select="."
+ mode="object.title.markup"/>
+ </xsl:when>
+
+ <xsl:when test="$sequence = 'odd' and $position = 'center'">
+ <xsl:call-template name="draft.text"/>
+ </xsl:when>
+
+ <xsl:when test="$sequence = 'odd' and $position = 'right'">
+
+ </xsl:when>
+
+ <xsl:when test="$sequence = 'even' and $position = 'left'">
+ <xsl:apply-templates select="."
+ mode="object.title.markup"/>
+ </xsl:when>
+
+ <xsl:when test="$sequence = 'even' and $position = 'center'">
+ <xsl:call-template name="draft.text"/>
+ </xsl:when>
+
+ <xsl:when test="$sequence = 'even' and $position = 'right'">
+
+ </xsl:when>
+
+ <xsl:when test="$sequence = 'first' and $position = 'left'">
+ <xsl:apply-templates select="."
+ mode="object.title.markup"/>
+ </xsl:when>
+
+ <xsl:when test="$sequence = 'first' and $position = 'right'">
+
+ </xsl:when>
+
+ <xsl:when test="$sequence = 'first' and $position = 'center'">
+ <xsl:value-of
+ select="ancestor-or-self::book/bookinfo/corpauthor"/>
+
+ </xsl:when>
+
+ <xsl:when test="$sequence = 'blank' and $position = 'left'">
+ <fo:page-number/>
+
+ </xsl:when>
+
+ <xsl:when test="$sequence = 'blank' and $position = 'center'">
+ <xsl:text>This page intentionally left blank</xsl:text>
+ </xsl:when>
+
+ <xsl:when test="$sequence = 'blank' and $position = 'right'">
+ </xsl:when>
+
+ </xsl:choose>
+ </fo:block>
+ </xsl:template>
+
+ <xsl:template name="footer.content">
+ <xsl:param name="pageclass" select="''"/>
+ <xsl:param name="sequence" select="''"/>
+ <xsl:param name="position" select="''"/>
+ <xsl:param name="gentext-key" select="''"/>
+
+ <fo:block>
+ <!-- pageclass can be front, body, back -->
+ <!-- sequence can be odd, even, first, blank -->
+ <!-- position can be left, center, right -->
+ <xsl:choose>
+ <xsl:when test="($sequence = 'odd'or $sequence = 'even' or $sequence = 'blank' or $sequence = 'first') and $position = 'right'">
+ <fo:page-number/>
+ </xsl:when>
+ </xsl:choose>
+ </fo:block>
+ </xsl:template>
+
<!-- avoid page sequence to generate blank pages after even page numbers -->
<xsl:template name="force.page.count">
@@ -83,6 +175,7 @@
<xsl:text>no-force</xsl:text>
</xsl:template>
+
<!-- adding corpauthor entry to the titlepage -->
<xsl:template name="book.titlepage.recto">
@@ -167,4 +260,87 @@
<xsl:apply-templates select="." mode="book.titlepage.recto.mode"/>
</fo:block>
</xsl:template>
+
+ <!--#################################remove column-width unspecified Warning########-->
+ <xsl:template name="generate.col">
+ <!-- generate the table-column for column countcol -->
+ <xsl:param name="countcol">1</xsl:param>
+ <xsl:param name="colspecs" select="./colspec"/>
+ <xsl:param name="count">1</xsl:param>
+ <xsl:param name="colnum">1</xsl:param>
+
+ <xsl:choose>
+ <xsl:when test="$count>count($colspecs)">
+ <fo:table-column column-number="{$countcol}" column-width="proportional-column-width(1)">
+ <xsl:variable name="colwidth">
+ <xsl:call-template name="calc.column.width"/>
+ </xsl:variable>
+ <xsl:if test="$colwidth != 'proportional-column-width(1)'">
+ <xsl:attribute name="column-width">
+ <xsl:value-of select="$colwidth"/>
+ </xsl:attribute>
+ </xsl:if>
+ </fo:table-column>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="colspec" select="$colspecs[$count=position()]"/>
+
+ <xsl:variable name="colspec.colnum">
+ <xsl:choose>
+ <xsl:when test="$colspec/@colnum">
+ <xsl:value-of select="$colspec/@colnum"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$colnum"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="colspec.colwidth">
+ <xsl:choose>
+ <xsl:when test="$colspec/@colwidth">
+ <xsl:value-of select="$colspec/@colwidth"/>
+ </xsl:when>
+ <xsl:otherwise>1*</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="$colspec.colnum=$countcol">
+ <fo:table-column column-number="{$countcol}" column-width="proportional-column-width(1)">
+ <xsl:variable name="colwidth">
+ <xsl:call-template name="calc.column.width">
+ <xsl:with-param name="colwidth">
+ <xsl:value-of select="$colspec.colwidth"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:if test="$colwidth != 'proportional-column-width(1)'">
+ <xsl:attribute name="column-width">
+ <xsl:value-of select="$colwidth"/>
+ </xsl:attribute>
+ </xsl:if>
+ </fo:table-column>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="generate.col">
+ <xsl:with-param name="countcol" select="$countcol"/>
+ <xsl:with-param name="colspecs" select="$colspecs"/>
+ <xsl:with-param name="count" select="$count+1"/>
+ <xsl:with-param name="colnum">
+ <xsl:choose>
+ <xsl:when test="$colspec/@colnum">
+ <xsl:value-of select="$colspec/@colnum + 1"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$colnum + 1"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
</xsl:stylesheet>
16 years, 11 months
JBoss Rich Faces SVN: r15107 - branches/community/3.3.X/docs/userguide/en/src/main/docbook/included.
by richfaces-svn-commits@lists.jboss.org
Author: atsebro
Date: 2009-08-04 10:00:54 -0400 (Tue, 04 Aug 2009)
New Revision: 15107
Modified:
branches/community/3.3.X/docs/userguide/en/src/main/docbook/included/componentControl.xml
Log:
RF-7587:rich:componentControl component description review
Modified: branches/community/3.3.X/docs/userguide/en/src/main/docbook/included/componentControl.xml
===================================================================
--- branches/community/3.3.X/docs/userguide/en/src/main/docbook/included/componentControl.xml 2009-08-04 12:32:33 UTC (rev 15106)
+++ branches/community/3.3.X/docs/userguide/en/src/main/docbook/included/componentControl.xml 2009-08-04 14:00:54 UTC (rev 15107)
@@ -58,10 +58,6 @@
<para>To create the simplest variant on a page use the following syntax:</para>
-
- <para>
- <emphasis role="bold">Example:</emphasis>
- </para>
<programlisting role="XML"><![CDATA[...
<rich:componentControl attachTo="doExpandCalendarID" for="ccCalendarID" event="onclick" operation="Expand" />
...]]></programlisting>
@@ -81,73 +77,52 @@
-
-
-
<section>
<title>Details of Usage</title>
<para>
- <emphasis role="bold"><property><rich:componentControl></property></emphasis>
- is a command component, that allows to call JavaScript API function on some defined event.
- Look at the example:
- </para>
- <programlisting role="XML"><![CDATA[...
-<rich:componentControl attachTo="doExpandCalendarID" event="onclick" for="ccCalendarID" operation="Expand"/>
+ <emphasis role="bold"><property><rich:componentControl></property></emphasis> is a command component, that allows to call JavaScript API function on some defined event.
+ Look at the example:
+ </para>
+ <programlisting role="XML"><![CDATA[...
+<rich:componentControl attachTo="doExpandCalendarID" event="onclick" operation="Expand" for="ccCalendarID" />
...
]]></programlisting>
<para>
- In other words it means "clicking on the component with ID 'doExpandCalendarID',
- expands the component with ID 'ccCalendarID'".
- It can be said, that <emphasis role="bold"><property><rich:componentControl></property></emphasis>
- connects two components with the help of JavaScript API function.
+ In other words it means "clicking on the component with ID <code>doExpandCalendarID</code> expands the component with ID <code>ccCalendarID</code>".
+ It can be said, that <emphasis role="bold"><property><rich:componentControl></property></emphasis> makes interact two components with the help of JavaScript API function.
</para>
<para>
- Component ID, to wich the event, that invokes JavaScript API function is applied,
- is defined with <emphasis><property>"attachTo"</property></emphasis> attribute
- (see the exapmle above).
- If <emphasis><property>"attachTo"</property></emphasis> attribute is not defined,
- the component will be attached to the parent component.
+ The ID of the component the event that invokes JavaScript API function is applied, is defined with <emphasis><property>"attachTo"</property></emphasis> attribute (see the exapmle above).
+ If <emphasis><property>"attachTo"</property></emphasis> attribute is not specified, the <emphasis role="bold"><property><rich:componentControl></property></emphasis> is supposed to be attached to it's parent.
</para>
+
+ <programlisting role="XML"><![CDATA[<h:commandButton value="Show Modal Panel">
+ <!--componentControl is attached to the commandButton-->
+ <rich:componentControl for="ccModalPanelID" event="onclick" operation="show"/>
+</h:commandButton>]]></programlisting>
<para>
- <emphasis role="bold">Example:</emphasis>
+ It is possible to invoke the <emphasis role="bold"><property><rich:componentControl></property></emphasis> handler operation as usual JavaScript function.
+ For this purpose it is necessary to specify the name of the JS function with the help of the <emphasis><property>"name"</property></emphasis> attribute:
</para>
- <programlisting role="XML"><![CDATA[...
-<h:commandButton value="Show Modal Panel">
- <rich:componentControl for="ccModalPanelID" event="onclick" operation="show"/> <!--attached to the commandButton-->
-</h:commandButton>
-...]]></programlisting>
- <para>
- On the result page the component is rendered to JavaScript code.
- This means, that it is possible to invoke the <emphasis role="bold"><property><rich:componentControl></property></emphasis>
- handler operation as usual JavaScript function.
- This function is called by name, specified in the component <emphasis><property>"name"</property></emphasis> attribute.
- The definition of <emphasis><property>"name"</property></emphasis> attribute is shown on the example below:
- </para>
- <programlisting role="XML"><![CDATA[...
-<rich:componentControl name="func" event="onRowClick" for="menu" operation="show" />
-...]]></programlisting>
- <para>
- The generated JavaScript function will look as shown below:
- </para>
- <programlisting role="text/javascript"><![CDATA[function func (event) {
+ <para>
+ <emphasis role="bold">Example:</emphasis>
+ </para>
+ <programlisting role="text/javascript"><![CDATA[function func (event) {
}]]></programlisting>
+ <programlisting role="XML"><![CDATA[<rich:componentControl name="func" event="onRowClick" for="menu" operation="show" />]]></programlisting>
+
<para>
- An important <emphasis role="bold"><property><rich:componentControl></property></emphasis> feature,
- is that it allows transferring parameters, with the help of special attribute <emphasis><property>"params"</property></emphasis>.
+ An important <emphasis role="bold"><property><rich:componentControl></property></emphasis> feature, is that it allows transferring parameters, with the help of special attribute <emphasis><property>"params"</property></emphasis>:
</para>
- <para>
- <emphasis role="bold">Example:</emphasis>
- </para>
+
<programlisting role="XML"><![CDATA[...
-<rich:componentControl name="func" event="onRowClick" for="menu" operation="show" params=”#{car.model}"/>
+<rich:componentControl name="func" event="onRowClick" for="menu" operation="show" params="#{car.model}"/>
...]]></programlisting>
<para>
The alternative way for parameters transferring uses <emphasis role="bold"><property><f:param></property></emphasis> attribute.
- As the code above, the following code will represent the same functionality.
+ As the code above, the following code will represent the same functionality:
</para>
- <para>
- <emphasis role="bold">Example:</emphasis>
- </para>
+
<programlisting role="XML"><![CDATA[...
<rich:componentControl event="onRowClick" for="menu" operation="show">
<f:param value="#{car.model}" name="model"/>
@@ -264,17 +239,17 @@
<itemizedlist>
<listitem>
<para>
- "immediate" - attached during execution of <emphasis role="bold"><property><rich:componentControl></property></emphasis> script
+ <code>immediate</code> — attached during execution of <emphasis role="bold"><property><rich:componentControl></property></emphasis> script
</para>
</listitem>
<listitem>
<para>
- "onavailable" - attached after the target component is initialized
+ <code>onavailable</code> — attached after the target component is initialized
</para>
</listitem>
<listitem>
<para>
- "onload" - attached after the page is loaded
+ <code>onload</code> — attached after the page is loaded
</para>
</listitem>
</itemizedlist>
@@ -298,46 +273,29 @@
</emphasis>
</para>
- <para>In order to use <emphasis role="bold">
- <property><rich:componentControl></property>
- </emphasis> with another component you should place the id of this component into <emphasis>
- <property>"for"</property>
- </emphasis> attribute field. All operations with defined component you can find in the JavaScript API section of defined component.</para>
<para>
- <emphasis role="bold">Example:</emphasis>
+ In order to use <emphasis role="bold"><property><rich:componentControl></property></emphasis> with another component you should place the id of this component into <emphasis><property>"for"</property></emphasis> attribute field.
+ All operations with defined component you can find in the JavaScript API section of defined component.
</para>
- <programlisting role="XML"><![CDATA[...
-<f:view>
- <h:form>
- <br />
- <rich:toolTip id="toolTipFor" followMouse="false" direction="top-right" mode="ajax" value="This is button"
- horizontalOffset="5" verticalOffset="5" layout="block" />
- </h:form>
- <h:commandButton id="ButtonID" value="Button">
- <rich:componentControl for="toolTipFor" attachTo="ButtonID" operation="show" event="onclick"/>
- </h:commandButton>
-</f:view>
-...]]></programlisting>
+
+ <programlisting role="XML"><![CDATA[<h:form>
+ <rich:toolTip id="toolTip" mode="ajax" value="and then just touch me." direction="top-right" />
+</h:form>
+<h:commandButton id="ButtonID" value="Push me">
+ <rich:componentControl attachTo="ButtonID" event="onmouseover" operation="show" for="toolTip" />
+</h:commandButton>]]></programlisting>
<para>This is a result:</para>
<figure>
- <title><emphasis role="bold">
- <property><rich:toolTip></property>
- </emphasis> shows with the help of <emphasis role="bold">
- <property><rich:componentControl></property>
- </emphasis>.</title>
+ <title>
+ <emphasis role="bold"><property><rich:toolTip></property></emphasis> is shown with the help of <emphasis role="bold"><property><rich:componentControl></property></emphasis>.
+ </title>
<mediaobject>
<imageobject>
<imagedata fileref="images/componentControl_init.png"/>
</imageobject>
</mediaobject>
</figure>
-
- <para>
- As it could be seen in the picture above, the <emphasis role="bold">
- <property><rich:toolTip></property>
- </emphasis> shows after you click the button.
- </para>
-
+
<!--para>One more example of <emphasis role="bold">
<property><rich:componentControl></property>
</emphasis> usage is placed below:</para>
@@ -377,13 +335,11 @@
<section>
<title>Relevant Resources Links</title>
- <para><ulink
- url="http://livedemo.exadel.com/richfaces-demo/richfaces/componentControl.jsf?..."
- >On RichFaces LiveDemo page </ulink> you can see an example of <emphasis role="bold">
- <property><rich:componentControl></property>
- </emphasis> usage and sources for the given example. </para>
<para>
- <ulink url="http://java.sun.com/javaee/javaserverfaces/1.1_01/docs/tlddocs/f/param.html">On RichFaces LiveDemo page </ulink> you can found some additional information about <emphasis role="bold"><property><f:param></property></emphasis> component.
+ Visit the <ulink url="http://livedemo.exadel.com/richfaces-demo/richfaces/componentControl.jsf?...">ComponentControl page</ulink> at RichFaces LiveDemo for examples of component usage and their sources.
+ </para>
+ <para>
+ Information on JSF <emphasis role="bold"><property><f:param></property></emphasis> component You can find at <ulink url="http://java.sun.com/javaee/javaserverfaces/1.1_01/docs/tlddocs/f/param.html"><f:param> TLD reference</ulink> in Java Server Faces technology section at Sun portal.
</para>
</section>
16 years, 11 months
JBoss Rich Faces SVN: r15106 - root/framework/trunk/impl/src/main/java/org/ajax4jsf/config.
by richfaces-svn-commits@lists.jboss.org
Author: abelevich
Date: 2009-08-04 08:32:33 -0400 (Tue, 04 Aug 2009)
New Revision: 15106
Added:
root/framework/trunk/impl/src/main/java/org/ajax4jsf/config/FrameworkConfiguration.java
Log:
initial commit
Added: root/framework/trunk/impl/src/main/java/org/ajax4jsf/config/FrameworkConfiguration.java
===================================================================
--- root/framework/trunk/impl/src/main/java/org/ajax4jsf/config/FrameworkConfiguration.java (rev 0)
+++ root/framework/trunk/impl/src/main/java/org/ajax4jsf/config/FrameworkConfiguration.java 2009-08-04 12:32:33 UTC (rev 15106)
@@ -0,0 +1,279 @@
+package org.ajax4jsf.config;
+
+import java.util.EnumMap;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.servlet.ServletContext;
+
+import org.ajax4jsf.util.ELUtils;
+import org.richfaces.util.RichfacesLogger;
+import org.slf4j.Logger;
+
+
+/**
+ * @author Anton Belevich
+ * @since 4.0
+ * framework configuration class
+ */
+
+public class FrameworkConfiguration {
+
+ private static final Logger logger = RichfacesLogger.CONFIG.getLogger();
+
+
+
+ private Map<BooleanInitParam, Boolean> booleanInitParams = new EnumMap<BooleanInitParam, Boolean>(BooleanInitParam.class);
+
+ private Map<InitParam, String> initParams = new EnumMap<InitParam, String>(InitParam.class);
+
+ private Map<NumberInitParam, Integer> numberInitParams = new EnumMap<NumberInitParam, Integer>(NumberInitParam.class);
+
+ ServletContext servletContext;
+
+ private static final Pattern ALLOWABLE_BOOLEANS = Pattern.compile("true|false");
+
+ private static final Pattern ALLOWABLE_NUMBER = Pattern.compile("[0-9]");
+
+
+ private FrameworkConfiguration(ServletContext servletContext) {
+
+ this.servletContext = servletContext;
+
+ processInitParams(servletContext);
+ processBooleanInitParams(servletContext);
+ processNumberParams(servletContext);
+ }
+
+ public static FrameworkConfiguration getInstance() {
+ FacesContext facesContext = FacesContext.getCurrentInstance();
+ return getInstance(facesContext.getExternalContext());
+
+ }
+
+ public static FrameworkConfiguration getInstance(ExternalContext extContext) {
+ //TODO create instance of FrameworkConfiguration
+ return null;
+
+ }
+
+ private boolean isBooleanValueValid(BooleanInitParam param, String value) {
+ return !ALLOWABLE_BOOLEANS.matcher(value).matches();
+ }
+
+ private boolean isNumberValueValid(NumberInitParam param, String value) {
+ return !ALLOWABLE_NUMBER.matcher(value).matches();
+ }
+
+ public String getOptionValue(InitParam param) {
+ return initParams.get(param);
+ }
+
+ public int getOptionValue(NumberInitParam param) {
+ return ((Integer)numberInitParams.get(param)).intValue();
+ }
+
+ public boolean isOptionEnabled(BooleanInitParam param) {
+ return ((Boolean)booleanInitParams.get(param)).booleanValue();
+ }
+
+
+ private void processBooleanInitParams(ServletContext servletContext){
+ for(BooleanInitParam param: BooleanInitParam.values()) {
+
+ String paramName = param.qualifiedName;
+ String paramValue = servletContext.getInitParameter(paramName);
+ Boolean value = param.getDefaultValue();
+
+ if(paramValue != null) {
+
+ if(isBooleanValueValid(param, paramValue)) {
+ value = Boolean.parseBoolean(paramValue);
+ } else if(ELUtils.isValueReference(paramValue)) {
+ value = (Boolean)resolveELParam(FacesContext.getCurrentInstance(), paramValue, java.lang.Boolean.class);
+ } else {
+ //TODO: add log about default value
+ }
+ }
+
+ booleanInitParams.put(param, value);
+ }
+ }
+
+ private void processInitParams(ServletContext context){
+ for(InitParam param: InitParam.values()) {
+
+ String paramName = param.qualifiedName;
+ String paramValue = servletContext.getInitParameter(paramName);
+ String value = param.getDefaultValue();
+
+ if(paramValue != null) {
+ if(ELUtils.isValueReference(paramValue)) {
+ value = (String)resolveELParam(FacesContext.getCurrentInstance(), value, java.lang.String.class);
+ } else {
+ value = paramValue;
+ }
+ }
+
+ initParams.put(param, value);
+ }
+ }
+
+ private void processNumberParams(ServletContext servletContext){
+ for(NumberInitParam param: NumberInitParam.values()) {
+
+ String paramName = param.qualifiedName;
+ String paramValue = servletContext.getInitParameter(paramName);
+ Integer value = Integer.valueOf(param.getDefaultValue());
+
+ if(paramValue != null) {
+ if(ELUtils.isValueReference(paramValue)) {
+ value = (Integer)resolveELParam(FacesContext.getCurrentInstance(), paramValue, java.lang.Integer.class);
+ } else if(isNumberValueValid(param, paramValue)){
+ value = Integer.parseInt(paramValue);
+ } else {
+ //TODO log
+ }
+ }
+
+ numberInitParams.put(param, value);
+ }
+ }
+
+ private Object resolveELParam(FacesContext context, String value, Class <?> expectedClass) {
+ ExpressionFactory factory = context.getApplication().getExpressionFactory();
+ ValueExpression valueExpression = factory.createValueExpression(value, expectedClass);
+ return valueExpression.getValue(context.getELContext());
+ }
+
+
+ public enum NumberInitParam {
+
+ DEFAULT_EXPIRE (
+ "org.ajax4jsf.DEFAULT_EXPIRE",
+ 86400
+ );
+
+ private String qualifiedName;
+ private int defaultValue;
+
+ NumberInitParam(String qualifiedName, int defaultValue) {
+ this.qualifiedName = qualifiedName;
+ this.defaultValue = defaultValue;
+ }
+
+ public int getDefaultValue() {
+ return defaultValue;
+ }
+
+ public String getQualifiedName() {
+ return qualifiedName;
+ }
+ }
+
+ public enum BooleanInitParam {
+
+ ENCRYPT_RESOURCE_DATA(
+ "org.ajax4jsf.ENCRYPT_RESOURCE_DATA",
+ false
+ ),
+
+ COMPRESS_SCRIPT(
+ "org.ajax4jsf.COMPRESS_SCRIPT",
+ true
+ ),
+
+ SERIALIZE_SERVER_STATE(
+ "org.ajax4jsf.SERIALIZE_SERVER_STATE",
+ false
+ );
+
+
+ private String qualifiedName;
+ private boolean defaultValue;
+
+ BooleanInitParam(String qualifiedName, boolean defaultValue) {
+ this.qualifiedName = qualifiedName;
+ this.defaultValue = defaultValue;
+ }
+
+ public boolean getDefaultValue() {
+ return defaultValue;
+ }
+
+ public String getQualifiedName() {
+ return qualifiedName;
+ }
+
+ }
+
+ public enum InitParam {
+
+ SKIN (
+ "org.richfaces.SKIN",
+ "DEFAULT"
+ ),
+
+ LoadScriptStrategy (
+ "org.richfaces.LoadScriptStrategy",
+ "DEFAULT"
+ ),
+
+ LoadStyleStrategy (
+ "org.richfaces.LoadStyleStrategy",
+ "DEFAULT"
+ ),
+
+ LOGFILE (
+ "org.ajax4jsf.LOGFILE",
+ "none"
+ ),
+
+ VIEW_HANDLERS(
+ "org.ajax4jsf.VIEW_HANDLERS",
+ "none"
+ ),
+
+ CONTROL_COMPONENTS(
+ "org.ajax4jsf.CONTROL_COMPONENTS",
+ "none"
+ ),
+
+ ENCRYPT_PASSWORD (
+ "org.ajax4jsf.ENCRYPT_PASSWORD",
+ "random"
+ ),
+
+ GLOBAL_RESOURCE_URI_PREFIX(
+ "org.ajax4jsf.GLOBAL_RESOURCE_URI_PREFIX",
+ "a4j/g"
+ ),
+
+ SESSION_RESOURCE_URI_PREFIX(
+ "org.ajax4jsf.SESSION_RESOURCE_URI_PREFIX",
+ "a4j/s"
+ );
+
+
+ private String qualifiedName;
+ private String defaultValue;
+
+ InitParam(String qualifiedName,String defaultValue) {
+ this.qualifiedName = qualifiedName;
+ this.defaultValue = defaultValue;
+ }
+
+ public String getDefaultValue() {
+ return defaultValue;
+ }
+
+ public String getQualifiedName() {
+ return qualifiedName;
+ }
+ }
+
+}
16 years, 11 months