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>
15 years, 4 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.
15 years, 4 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)
15 years, 4 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;
15 years, 4 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
15 years, 4 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>
15 years, 4 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>
15 years, 4 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>
15 years, 4 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;
+ }
+ }
+
+}
15 years, 4 months