Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoritrimble2009-02-27 23:31:19 +0000
committeritrimble2009-02-27 23:31:19 +0000
commit978baa6f0cb1d3f556c4a47910a87e7c76e957d2 (patch)
treef38d08fd1b4ce3fda5928612256444ab20539b10
parent2581c58362c08285bcff8323e710526dedfbe43a (diff)
downloadwebtools.jsf-978baa6f0cb1d3f556c4a47910a87e7c76e957d2.tar.gz
webtools.jsf-978baa6f0cb1d3f556c4a47910a87e7c76e957d2.tar.xz
webtools.jsf-978baa6f0cb1d3f556c4a47910a87e7c76e957d2.zip
DT Skinning Support - initial check-in.
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/META-INF/MANIFEST.MF1
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/build.properties3
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/metadata/trinidad_dti.xml5
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/plugin.xml8
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/close.gifbin0 -> 844 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/list-bullet.gifbin0 -> 286 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/logo-dark.gifbin0 -> 1559 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-bot-deselected.gifbin0 -> 115 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-bot-end-selected.gifbin0 -> 112 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-bot-mid-selected.gifbin0 -> 49 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-bot-start-selected.gifbin0 -> 170 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-end-deselected.gifbin0 -> 238 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-end-join-deselected-to-deselected.gifbin0 -> 195 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-end-join-selected-to-deselected.gifbin0 -> 480 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-end-selected.gifbin0 -> 528 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-mid-deselected.gifbin0 -> 85 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-mid-selected.gifbin0 -> 432 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-deselected.gifbin0 -> 427 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-join-deselected-to-deselected.gifbin0 -> 156 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-join-selected-to-deselected.gifbin0 -> 156 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-join-selected.gifbin0 -> 1050 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-selected.gifbin0 -> 998 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/minimal.css241
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/simple.css224
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/Messages.java5
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/TrinidadTagSupportActivator.java17
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/AbstractLabelAndHelpOperation.java66
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/CreateClassAttributeOperation.java50
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/InputFileOperation.java8
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/InputTextOperation.java7
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/InputTextWithIconOperation.java8
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/SelectBooleanOperation.java8
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/SelectListboxChoiceOperation.java9
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/SelectManyCheckboxOneRadioOperation.java8
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/dtresourceprovider/TrinidadDTResourceProvider.java60
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/messages.properties3
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/META-INF/MANIFEST.MF1
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/schema/pageDesignerExtension.exsd28
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/IJMTConstants.java5
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/JMTResources.properties9
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/CSSTempUtil.java15
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSFigure.java9
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BackgroundImageMeta.java182
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CSSMetaRegistry.java31
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ICSSPropertyID.java5
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/AbstractDTResourceProvider.java54
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/AbstractDTSkin.java88
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/DTResourceProviderFactory.java172
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/DTSkinManager.java185
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/DefaultDTResourceProvider.java78
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/DefaultDTSkin.java135
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/IDTResourceProvider.java41
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/IDTSkin.java66
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/ProviderClassMap.java113
54 files changed, 1886 insertions, 62 deletions
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/META-INF/MANIFEST.MF b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/META-INF/MANIFEST.MF
index e80b2b660..c36c73ee5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/META-INF/MANIFEST.MF
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/META-INF/MANIFEST.MF
@@ -21,6 +21,7 @@ Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-ActivationPolicy: lazy
Export-Package: org.eclipse.jst.jsf.apache.trinidad.tagsupport;x-internal:=true,
org.eclipse.jst.jsf.apache.trinidad.tagsupport.converter.operations;x-internal:=true,
+ org.eclipse.jst.jsf.apache.trinidad.tagsupport.dtresourceprovider;x-internal:=true,
org.eclipse.jst.jsf.apache.trinidad.tagsupport.el;x-internal:=true,
org.eclipse.jst.jsf.apache.trinidad.tagsupport.elementedit;x-internal:=true,
org.eclipse.jst.jsf.apache.trinidad.tagsupport.model;x-internal:=true
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/build.properties b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/build.properties
index aa99bac66..a7ed8163a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/build.properties
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/build.properties
@@ -16,6 +16,7 @@ bin.includes = META-INF/,\
metadata/,\
plugin.properties,\
about.html,\
- icons/
+ icons/,\
+ skinning/
javacSource=1.5
javacTarget=1.5
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/metadata/trinidad_dti.xml b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/metadata/trinidad_dti.xml
index 1fa8aea6d..a05ff2839 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/metadata/trinidad_dti.xml
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/metadata/trinidad_dti.xml
@@ -352,9 +352,10 @@
<parameter value=""/>
</operation>
</operation>
- <operation id="org.eclipse.jst.jsf.apache.trinidad.tagsupport.CreateStyleAttributeOperation">
- <parameter value="font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;background-color:#e9e8e8;padding:0px;margin:1px;"/>
+ <operation id="org.eclipse.jst.jsf.apache.trinidad.tagsupport.CreateClassAttributeOperation">
+ <parameter value="x77"/>
</operation>
+ <operation id="org.eclipse.jst.jsf.apache.trinidad.tagsupport.CreateStyleAttributeOperation"/>
<operation id="org.eclipse.jst.pagedesigner.IfOperation">
<parameter value="@textAndAccessKey"/>
<operation id="org.eclipse.jst.pagedesigner.ConvertAttributeToTextOperation">
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/plugin.xml b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/plugin.xml
index 53c935305..6d5e12fb3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/plugin.xml
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/plugin.xml
@@ -42,6 +42,10 @@
class="org.eclipse.jst.jsf.apache.trinidad.tagsupport.elementedit.TrinidadCoreElementEditFactory">
</elementEditFactory>
<tagTransformOperation
+ class="org.eclipse.jst.jsf.apache.trinidad.tagsupport.converter.operations.CreateClassAttributeOperation"
+ id="CreateClassAttributeOperation">
+ </tagTransformOperation>
+ <tagTransformOperation
class="org.eclipse.jst.jsf.apache.trinidad.tagsupport.converter.operations.CreateStyleAttributeOperation"
id="CreateStyleAttributeOperation">
</tagTransformOperation>
@@ -97,6 +101,10 @@
class="org.eclipse.jst.jsf.apache.trinidad.tagsupport.converter.operations.ShowDetailItemOperation"
id="ShowDetailItemOperation">
</tagTransformOperation>
+ <dtResourceProvider
+ class="org.eclipse.jst.jsf.apache.trinidad.tagsupport.dtresourceprovider.TrinidadDTResourceProvider"
+ id="http://myfaces.apache.org/trinidad">
+ </dtResourceProvider>
</extension>
<extension
point="org.eclipse.jst.jsf.core.variableresolver">
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/close.gif b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/close.gif
new file mode 100644
index 000000000..e792e2871
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/close.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/list-bullet.gif b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/list-bullet.gif
new file mode 100644
index 000000000..8c0cf4fef
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/list-bullet.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/logo-dark.gif b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/logo-dark.gif
new file mode 100644
index 000000000..8f450e1d0
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/logo-dark.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-bot-deselected.gif b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-bot-deselected.gif
new file mode 100644
index 000000000..e0ec834ef
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-bot-deselected.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-bot-end-selected.gif b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-bot-end-selected.gif
new file mode 100644
index 000000000..adc9eeaef
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-bot-end-selected.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-bot-mid-selected.gif b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-bot-mid-selected.gif
new file mode 100644
index 000000000..0db0c96ad
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-bot-mid-selected.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-bot-start-selected.gif b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-bot-start-selected.gif
new file mode 100644
index 000000000..72463ce37
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-bot-start-selected.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-end-deselected.gif b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-end-deselected.gif
new file mode 100644
index 000000000..d7417e164
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-end-deselected.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-end-join-deselected-to-deselected.gif b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-end-join-deselected-to-deselected.gif
new file mode 100644
index 000000000..54162993c
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-end-join-deselected-to-deselected.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-end-join-selected-to-deselected.gif b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-end-join-selected-to-deselected.gif
new file mode 100644
index 000000000..29f33e0a4
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-end-join-selected-to-deselected.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-end-selected.gif b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-end-selected.gif
new file mode 100644
index 000000000..d36b395e2
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-end-selected.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-mid-deselected.gif b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-mid-deselected.gif
new file mode 100644
index 000000000..263955841
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-mid-deselected.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-mid-selected.gif b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-mid-selected.gif
new file mode 100644
index 000000000..248de98e1
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-mid-selected.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-deselected.gif b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-deselected.gif
new file mode 100644
index 000000000..2c904c3d8
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-deselected.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-join-deselected-to-deselected.gif b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-join-deselected-to-deselected.gif
new file mode 100644
index 000000000..1ec2d3f80
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-join-deselected-to-deselected.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-join-selected-to-deselected.gif b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-join-selected-to-deselected.gif
new file mode 100644
index 000000000..1ec2d3f80
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-join-selected-to-deselected.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-join-selected.gif b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-join-selected.gif
new file mode 100644
index 000000000..f8ebc728a
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-join-selected.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-selected.gif b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-selected.gif
new file mode 100644
index 000000000..f4a260b0c
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/images/tab3-start-selected.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/minimal.css b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/minimal.css
new file mode 100644
index 000000000..cf2ac39ee
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/minimal.css
@@ -0,0 +1,241 @@
+.AFInstructionText,.x0,.AFFieldText,.x6,.xk,.xl,.xm,.x23,.x24,.x25,.x26,.x2a,.x2b,.x2c,.x2d,.x2e,.x2f,.x2g,.x2h,.x1u.x2n .x25,.x1u.p_AFDisabled.x2n .x25,.x1u.x2p .x25,.x1u.x2q .x25,.x1u.x2r .x25,.x1u.x2s .x25,.x22.x2n .x24,.x22.p_AFDisabled.x2n .x24,.x22.x2p .x24,.x22.x2q .x24,.x22.x2r .x24,.x22.x2s .x24,.x1t.x2n .x26,.x1t.p_AFDisabled.x2n .x26,.x1t.x2p .x26,.AFFieldTextLTR,.x94,.AFPhoneFieldText,.x96,.AFPostalCodeFieldText,.x98,.AFAddressFieldText,.x9a,.PortletText1,.xc0,.PortletText2,.xc1,.PortletText3,.xc2,.PortletText4,.xc3,.portlet-form-input-field,.xcn,.portlet-form-field,.xcs {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000}
+.AFInstructionTextDisabled,.x1,.AFFieldTextDisabled,.x7,.x1u.p_AFDisabled.x2p .x25,.x1u.p_AFDisabled.x2q .x25,.x1u.p_AFDisabled.x2r .x25,.x1u.p_AFDisabled.x2s .x25,.x22.p_AFDisabled.x2p .x24,.x22.p_AFDisabled.x2q .x24,.x22.p_AFDisabled.x2r .x24,.x22.p_AFDisabled.x2s .x24,.x1t.p_AFDisabled.x2p .x26,.p_InContextBrandingText,.x8r,.AFFieldTextLTRDisabled,.x95,.AFPhoneFieldTextDisabled,.x97,.AFPostalCodeFieldTextDisabled,.x99,.AFAddressFieldTextDisabled,.x9b,.OraHGridNavRowInactiveLink,.xa5,.OraNavBarInactiveLink,.xac,.portlet-font-dim,.xc5 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#999999}
+.AFDataText,.x2 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;color:#000000}
+.AFDataTextDisabled,.x3 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;color:#999999}
+.AFDataNumber,.x4 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;color:#000000;text-align:right}
+.AFDataNumberDisabled,.x5 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;color:#999999;text-align:right}
+.AFFieldNumber,.x8,.x1u.x2o .x25,.x22.x2o .x24,.x1t.x2o .x26 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;text-align:right;color:#000000}
+.AFFieldNumberDisabled,.x9,.x1u.p_AFDisabled.x2o .x25,.x22.p_AFDisabled.x2o .x24,.x1t.p_AFDisabled.x2o .x26 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;text-align:right;color:#999999}
+.AFLabelText,.xa,.xq,.xr,.xs,.xt,.xu,.xv,.xw,.xx,.xy,.xz,.x10,.x11,.x12,.x13,.x14,.x15,.x4z,.portlet-form-label,.xcm,.portlet-icon-label,.xcp,.portlet-dlg-icon-label,.xcq,.portlet-form-field-label,.xcr {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;text-align:right;color:#000000;padding:0px 8px 0px 0px;font-weight:normal}
+.AFLabelCell,.xb {padding:0px 8px 0px 0px}
+.AFErrorIconStyle,.xc {color:#cc0000;font-family:monospace;font-weight:bold}
+.AFInfoIconStyle,.xd,.AFWarningIconStyle,.xe,.AFQuickSelectIconStyle,.xg {color:#669966;font-family:monospace;font-weight:bold}
+.AFRequiredIconStyle,.xf {color:#669966;font-family:Courier,sans-serif}
+.AFQuickSelectDisabledIconStyle,.xh {color:#999999;font-family:monospace;font-weight:bold}
+.OraLink:link,.xi:link,.x3k,.x3n,.x3q A,.x5r,.OraLinkText,.x91,.OraHGridNavRowActiveLink,.xa4,.OraNavBarActiveLink,.xab {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#003333}
+.OraLink:active,.xi:active,.OraALinkText,.x93 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#006666}
+.OraLink:visited,.xi:visited,.OraVLinkText,.x92 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#336666}
+.OraLinkDisabled,.xj,.x2t,.x2u,.x2v,.x2w,.x2x,.x2y,.x2z,.x30,.x31,.x32,.x33,.x34,.x35,.x36,.x37,.x38,.x39,.x3a,.x3b,.x3c,.x3d,.x3e,.x3f,.x3g,.x3i,.x45,.x46,.x47,.x4v,.x5i,.x5j,.x6t,.x76,.x77,.x78,.p_OraDisabled,.x9e,.OraNav3,.xan,.p_OraTreeRow,.xbi,.portlet-form-button,.xco {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal}
+.xn,.AFHeaderLevelOne,.x6g,H1.x6j,H1.x6k,.PortletHeaderText,.xbs,.PortletHeading1,.xbt,.PortletSubHeaderText,.xbz,.portlet-section-header,.xc8,.portlet-section-subheader,.xcc,.portlet-table-header,.xcf,.portlet-table-subheader,.xcj {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:13pt;color:#669966;font-weight:bold;padding:0px;margin:0px}
+.xo {text-align:justify;padding:0px;margin:0px}
+.xp {text-align:center;padding:0px;margin:0px}
+.x16,.OraPageStampText,.x8s,.xaa,.OraNavBarViewOnly,.xad {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#669966}
+.x17 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold}
+.x1i,.p_OraContentFooterChildren,.x9y {float:right}
+.x1k,.x5t {border-color:#336633;border:1px solid;background-color:white}
+.x1l,.x5u {background-color:#CCCCCC;border-color:#336633;border-bottom:1px solid;padding:2px 2px 2px 2px}
+.x1m,.x5v {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:11pt;font-weight:normal;white-space:nowrap;overflow:hidden}
+.x1n {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:11pt;font-weight:normal;margin-left:5px;background-image:url(images/close.gif);background-position:center;background-repeat:no-repeat;height:13px;width:13px}
+.x1o,.x5x {background-color:#e9e8e8;border:0px}
+.x22.p_AFDisabled .xr,.x1t.p_AFDisabled .xt,.x1u.p_AFDisabled .xu,.x1v.p_AFDisabled .xv,.x1w.p_AFDisabled .xw,.x1p.p_AFDisabled .xx,.x1q.p_AFDisabled .xy,.x1s.p_AFDisabled .xz,.x1x.p_AFDisabled .x10,.x1y.p_AFDisabled .x11,.x1z.p_AFDisabled .x12,.x20.p_AFDisabled .x13,.x21.p_AFDisabled .x14,.x3w .x3x,.x3u .x3x a,.x3w .x3x a,.x4g .x4l A {color:#000000}
+.x27,.x28 {background-color:#e9e8e8;border-color:#999999;border-width:1px;border-style:solid;width:11px;height:8px}
+.x29 {padding-left:1px}
+.x3h,.OraNav3Selected,.xam {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;background-color:#ccffcc}
+.x3j,.portlet-font,.xc4 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:8pt;font-weight:normal}
+BODY,.portlet-section-body,.xc9,.portlet-table-body,.xcg {background-color:#ffffff;font-family:Arial,Helvetica,Geneva,sans-serif}
+.x3l,.x3o,.x3p {color:#003333;font-size:9pt}
+.x3m {font-size:9pt;color:#000000}
+.x3q UL {margin-top:4px;margin-bottom:4px}
+button {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;background-color:#e9e8e8;padding:0px;margin:1px}
+.x3r {position:relative;left:-7px;top:5px}
+.x3s {background-color:#EFEFEF;padding-left:6px;padding-right:6px}
+.x3t,.x3v,.x3z,.x41,.x48,.x4a {cursor:default}
+.x3u,.x3w,.x40,.x42,.x49,.x4b,.x4f,.x4g {cursor:pointer}
+.x3u .x3x {color:#000000;font-weight:bold}
+.x3u .x3x a:hover,.x3w .x3x a:hover,.x40 .x43 a:hover,.x42 .x43 a:hover,.x49 .x4c a:hover,.x4b .x4c a:hover,.AFAccessKeyStyle,.x9c {text-decoration:underline}
+.x3t .x3x,.x3z .x43,.x48 .x4c {color:gray;font-weight:bold}
+.x3v .x3x,.x3t .x3x a,.x3v .x3x a,.x41 .x43,.x3z .x43 a,.x41 .x43 a,.x4a .x4c,.x48 .x4c a,.x4a .x4c a,.x4f.p_AFDisabled .x4l,.x4g.p_AFDisabled .x4l {color:gray}
+.x3x,.x43,.x4c {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;padding-top:3px;padding-bottom:3px}
+.x3x a,.x43 a,.x4c a {text-decoration:none}
+.x3y {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;padding-left:6px;padding-right:6px;color:gray}
+.x40 .x43,.x49 .x4c,.x4f .x4l A,.AFLinkAccessKeyStyle,.x9d,.x9n,.x9s {font-weight:bold}
+.x44 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;padding-left:6px;padding-right:6px}
+.x4d {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;vertical-align:middle;width:17px;background-image:url(images/list-bullet.gif);background-position:center;background-repeat:no-repeat}
+.x4e {height:26px;overflow:hidden}
+.x4f.p_AFDisabled,.x4g.p_AFDisabled {cursor:default;color:gray}
+.x4h,.x4i {height:22px;width:26px;background-position:top right}
+.x4j,.x4k {height:22px;width:14px;background-repeat:no-repeat}
+.x4l {height:22px;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;padding-left:3px;white-space:nowrap}
+.x4m {height:22px;width:12px;background-repeat:no-repeat}
+.x4n {height:22px;width:15px}
+.x4o,.x4q,.x4s {height:4px;background-repeat:repeat-x}
+.x4p {height:4px;width:17px;background-repeat:no-repeat}
+.x4r {height:4px}
+.x4t {height:4px;width:100%;background-repeat:no-repeat}
+.x4l A {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;text-decoration:none}
+.x4u {background-repeat:repeat-x}
+.x4f .x4h {background-image:url(images/tab3-start-selected.gif)}
+.x4f .x4i {background-image:url(images/tab3-start-join-selected.gif)}
+.x4f .x4o,.x4f .x4q,.x4f .x4s {background-image:url(images/tab3-bot-mid-selected.gif)}
+.x4f .x4p {background-image:url(images/tab3-bot-start-selected.gif)}
+.x4f .x4l {background-image:url(images/tab3-mid-selected.gif);font-weight:bold}
+.x4f .x4m {background-image:url(images/tab3-end-join-selected-to-deselected.gif)}
+.x4f .x4n {background-image:url(images/tab3-end-selected.gif)}
+.x4f .x4u,.x4g .x4o,.x4g .x4q,.x4g .x4s,.x4g .x4u {background-image:url(images/tab3-bot-deselected.gif)}
+.x4f .x4t {background-image:url(images/tab3-bot-end-selected.gif)}
+.x4g .x4h {background-image:url(images/tab3-start-deselected.gif)}
+.x4g .x4p,.x4g .x4t {background-image:none}
+.x4g .x4j {background-image:url(images/tab3-start-join-selected-to-deselected.gif)}
+.x4g .x4k {background-image:url(images/tab3-start-join-deselected-to-deselected.gif)}
+.x4g .x4l {color:#000000;background-image:url(images/tab3-mid-deselected.gif)}
+.x4g .x4m {background-image:url(images/tab3-end-join-deselected-to-deselected.gif)}
+.x4g .x4n {background-image:url(images/tab3-end-deselected.gif)}
+.x4w,.p_OraTreeIcon,.xbg {vertical-align:top}
+.x4x {background-color:gray;height:1px;font-size:1px;margin-top:3px;margin-bottom:3px}
+.x4y,.x51,.x52 {padding:1px 0px}
+.x50 {padding:1px 0px;text-align:left}
+.x53,.x54,.x55 {border-color:#99cc99;border-style:solid;border-width:1px;margin:2px}
+.x56 {border-style:solid;border-width:1px;margin:2px;border-color:#669966}
+.x53 img,.x54 img,.x55 img,.x56 img,.x5i img,.x5j img,.x62 img,.x6o img,.x6t img {vertical-align:bottom}
+.x5f {padding:5px;height:20px}
+.x54 .x5f,.x5i .x5k,.x5j .x5l,.x6r,.OraBGAccentLight,.x8q,.PortletBodyColor,.xbo,.PortletSubHeaderColor,.xbx,.xcw {background-color:#e9e8e8}
+.x55 .x5f,.OraBGAccentMedium,.x8p {background-color:#ffffcc}
+.x56 .x5f,.OraBGAccentDark,.x8o {background-color:#CCCCCC}
+.x5g,.PortletHeaderColor,.xbp {width:100%;background-repeat:repeat-x;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:11pt;padding:0px 3px;font-weight:bold}
+.x54 .x5g {background-color:#99cc99;color:#ffffff}
+.x5m,.x5n,.x5o {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:8pt;font-weight:normal;color:#000000;white-space:nowrap;padding:5px}
+.x5m A,.x5n A,.x5o A,.x8b,.xar A,.p_OraTreeRow A:link,.xbi A:link,.p_OraTreeRow A:active,.xbi A:active,.p_OraTreeRow A:visited,.xbi A:visited {color:#003333}
+.x5p {border-color:#e9e8e8}
+.x5q,.OraPageStampLabel,.x8t,.OraTableControlBarText,.xba,.p_OraTreeRowSelected,.xbj {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;color:#669966}
+.x5s {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#003333;text-decoration:none;white-space:nowrap}
+.x5w {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:11pt;font-weight:normal;text-align:right;padding-left:5px}
+.x5y {color:#003333;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;padding:0px 2px 2px 2px}
+.x60 {color:#669966;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;padding:0px 2px 2px 2px}
+.x61 {color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;padding:0px 2px 2px 2px}
+.x62 {background-color:#669966;color:#ffffff;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;min-height:4px;padding:0px}
+.x63,.x64 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;padding:0px 0px 0px 5px;white-space:nowrap}
+.x63 A,.x64 A,.PortletHeaderLink,.xbq,.PortletSubHeaderLink,.xby {color:#ffffff;text-decoration:none}
+.x65 {color:#ffffff;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal}
+.x66 {color:#669966;position:absolute;top:0px;left:-18px;text-decoration:none}
+.x67 {font-size:10pt;font-weight:normal;color:#669966;font-family:monospace;text-decoration:none}
+.x68 {font-size:10pt;font-weight:normal;color:#999999;font-family:monospace}
+.x69 {border-color:#999999;border-width:0px 1px 1px 1px;border-style:solid}
+.x6a {border-color:#999999;height:21px;text-decoration:none;white-space:nowrap;padding-right:5px;border-width:1px 0px 0px 0px;border-style:solid;cursor:pointer;padding-left:5px}
+.x6b {border-color:#999999;height:21px;text-decoration:none;white-space:nowrap;padding-right:5px;border-style:solid;border-width:1px 0px 1px 0px;padding-left:2px}
+.x6c {border-color:#999999;height:21px;text-decoration:none;white-space:nowrap;padding-right:5px;border-style:solid;border-width:1px 0px 0px 0px;padding-left:18px}
+.x6d {vertical-align:top;margin:5px}
+.x6e {background:transparent;color:#669966;display:block;padding-top:2px;text-decoration:none;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold}
+.x6f {color:#999999;display:block;padding-top:2px;text-decoration:none;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold}
+.AFHeaderLevelTwo,.x6h,H2.x6j,H2.x6k,.PortletHeading2,.xbu {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:11pt;color:#669966;font-weight:bold;padding:0px;margin:0px}
+.AFHeaderLevelThreePlus,.x6i,H3.x6j,H4.x6j,H5.x6j,H6.x6j,H3.x6k,H4.x6k,H5.x6k,H6.x6k,.PortletHeading3,.xbv,.PortletHeading4,.xbw {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;color:#669966;font-weight:bold;padding:0px;margin:0px}
+.x6l,.x6m,.portlet-msg-error,.xc7 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:13pt;font-weight:bold;padding:0px;margin:0px;color:#cc0000}
+.x6n {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:13pt;color:#669966;font-weight:bold;margin:0px;border-color:#CCCCCC;border-width:0px 0px 1px 0px;border-style:solid;vertical-align:bottom;margin-bottom:3px;padding:0px 3px}
+.x6o {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#336633;width:100%;border-color:#999999;background-color:#ffffcc;border-style:solid;border-width:1px;padding:0px;margin:5px 0px 0px}
+.x6p,.xa7,.portlet-msg-info,.xc6 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#669966;margin:0px 0px 0px 0px;padding:5px 30px 5px 30px}
+.x6q {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#336633;border-color:#999999;border-width:0px 1px 1px;border-style:solid;padding:0px;margin:0px 5px 0px 0px}
+.AFSortableHeaderSortIcon,.x6s {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:9pt;font-weight:normal;color:#669966;padding-left:4px;text-decoration:none}
+.x6u {background-color:#e9e8e8;white-space:nowrap;border-color:#999999;border-style:solid;border-width:1px 1px 0px 1px;padding:2px 6px}
+.x6v {background-color:#669966;white-space:nowrap;border-color:#999999;border-style:solid;border-width:1px 1px 0px 1px;padding:2px 6px}
+.x6w {background-color:#e9e8e8;color:#999999;white-space:nowrap;border-color:#999999;border-style:solid;border-width:1px 1px 0px 1px;padding:2px 6px}
+.x6u A {text-decoration:none;color:#336633}
+.x6v A {text-decoration:none;color:#ccffcc;font-weight:bold}
+.x6x {width:0px}
+.x6y,.x6z {border-collapse:collapse;border-color:#999999;border-style:solid;border-width:1px}
+.x70,.x72 {background-color:#e9e8e8;border-color:#999999;border-style:solid;border-width:1px 1px 0px;padding:1px 2px}
+.x71,.x73 {background-color:#e9e8e8;border-color:#999999;border-style:solid;border-width:0px 1px 1px;padding:1px 2px}
+.x74,.x75 {border-color:#999999;border-style:solid;border-width:1px 1px 0px;padding:1px 2px}
+.x79,.portlet-section-selected,.xcb,.portlet-table-selected,.xci {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;vertical-align:baseline;background-color:#e9e8e8;border-color:#999999}
+.x7a,.portlet-section-alternate,.xca,.portlet-table-alternate,.xch {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;vertical-align:baseline;background-color:#ffffff;border-color:#999999}
+.x7b {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;vertical-align:baseline;background-color:#e9e8e8;border-color:#999999;text-align:right;padding-right:2px}
+.x7c {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;vertical-align:baseline;background-color:#ffffff;border-color:#999999;text-align:right;padding-right:2px}
+.x7d,.x7e,.x7f,.OraTableCellSelect,.xbd,.portlet-section-text,.xce,.portlet-table-text,.xcl {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;vertical-align:baseline;background-color:#e9e8e8;border-color:#999999;text-align:center}
+.x7g,.x7h,.x7i,.OraTableCellSelectBand,.xbe {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;vertical-align:baseline;background-color:#ffffff;border-color:#999999;text-align:center}
+.x7j {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;text-align:left;background-color:#CCCCCC;color:#669966;vertical-align:bottom}
+.x7k {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;background-color:#CCCCCC;color:#669966;vertical-align:bottom;text-align:right}
+.x7l {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;background-color:#CCCCCC;color:#669966;vertical-align:bottom;text-align:center}
+.x7m {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;text-align:right;background-color:#CCCCCC;color:#669966}
+.x7n {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;border-color:#999999;background-color:#ffffff}
+.x7o,.portlet-section-footer,.xcd,.portlet-table-footer,.xck {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;text-align:left;background-color:#CCCCCC;color:#669966}
+.OraTableTotal,.x7p {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;text-align:right;background-color:#CCCCCC;color:#669966}
+.x7q {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;text-align:right;background-color:#CCCCCC;color:#000000;vertical-align:baseline}
+.x7r {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;text-align:left;background-color:#CCCCCC;color:#000000;vertical-align:baseline}
+.x7s {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;text-align:left;background-color:#CCCCCC;color:#669966;vertical-align:bottom;cursor:pointer;border-width:2px;border-style:outset}
+.x7t {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;background-color:#CCCCCC;color:#669966;vertical-align:bottom;cursor:pointer;border-width:2px;border-style:outset;text-align:right}
+.x7u {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;background-color:#CCCCCC;color:#669966;vertical-align:bottom;cursor:pointer;border-width:2px;border-style:outset;text-align:center}
+.x7y,.x81,.x84,.x87,.x8a {border-top-style:solid;border-top-width:2px;}
+.x7w.p_AFSelected {color:#669966;font-weight:bold;border-color:#669966}
+.x7w:visited,.x7w:visited .x8b {color:#666666}
+.x7w.p_AFDisabled {color:#999999;border-color:#cccccc}
+.x7w.p_AFUnvisited {color:#669966;border-color:#669966}
+.x7w.p_AFDisabled .x8b {color:#669999}
+.OraBGColorVeryDark,.x8f {background-color:#336633}
+.OraBGColorDark,.x8g,.xct,.xcu,.xcv {background-color:#669966}
+.OraBGColorMedium,.x8h {background-color:#99cc99}
+.OraBGColorLight,.x8i {background-color:#ccffcc}
+.OraBGGrayVeryDark,.x8j {background-color:#333333}
+.OraBGGrayDark,.x8k {background-color:#666666}
+.OraBGGrayMedium,.x8l,.OraBGAccentVeryDark,.x8n,.OraTable,.xbc {background-color:#999999}
+.OraBGGrayLight,.x8m {background-color:#cccccc}
+.OraInlineInfoText,.x8u {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:8pt;font-weight:normal;color:#669966}
+.OraTextInline,.x8v {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:8pt;font-weight:normal;color:#99cc99}
+.OraMessageBoxErrorText,.x8w,.AFErrorText,.x8x {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#cc0000}
+.OraErrorNameText,.x8y {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;color:#cc0000}
+.OraInlineErrorText,.x8z {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:8pt;font-weight:normal;color:#cc0000}
+.OraGlobalPageTitle,.x90 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:13pt;color:#ffffff;font-weight:bold}
+.p_OraSelected,.x9f {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;background-color:#ccffcc;text-decoration:none}
+.p_OraHiddenLabel,.x9g {position:absolute;top:-999px;left:0px;font-size:0px}
+.p_OraColorFieldSwatch,.x9h {border-color:#000000;border-style:solid;border-width:1px}
+.p_OraColorPalette,.x9i {background-color:#000000}
+.p_OraColorPaletteEmptyCell,.x9j {background-color:#ffffff}
+.x9k A,.x9o A {color:#003333;text-decoration:none}
+.x9l,.x9p {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:13pt;font-weight:normal;text-align:center;background-color:#ffffff;color:#669966;padding:2px}
+.x9m,.x9q {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;text-align:center;color:#669966;padding:2px}
+.x2b A,.x9r A {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;text-align:center;color:#003333}
+.x9r {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;text-align:center;color:#999999;text-decoration:none;border-width:1px;border-style:solid;padding:2px}
+.p_OraContentFooterRule,.x9w {color:#669966}
+.p_OraContentFooterStart,.x9x {float:left}
+.p_OraContentFooterBottom,.x9z {clear:both;margin-bottom:5px}
+.p_OraFooter,.xa0 {text-align:center}
+.p_OraFooterBottom,.xa1 {padding-top:5px}
+.p_OraHeaderNest,.xa2 {margin:5px 0px 0px 12px}
+.OraHGridLocatorHeader,.xa3 {border-color:#999999;background-color:#e9e8e8}
+.p_OraHideShowDisclosedSymbol,.xa6,.xas A,.p_OraTreeDisclosedSymbol A:link,.xbf A:link,.p_OraTreeDisclosedSymbol A:active,.xbf A:active,.p_OraTreeDisclosedSymbol A:visited,.xbf A:visited,.p_OraTreeRowSelected A:link,.xbj A:link,.p_OraTreeRowSelected A:active,.xbj A:active,.p_OraTreeRowSelected A:visited,.xbj A:visited {color:#669966;text-decoration:none}
+.xa8 {list-style-type:none}
+.p_OraQuickSearchBox,.xae {background-color:#e9e8e8;border-color:#CCCCCC;border-style:solid;padding:0pt 5pt 5pt 5pt;border-width:0px 0px 1px 1px}
+.p_OraGlobalQuick,.xaf {border-color:#CCCCCC;border-style:solid;border-width:0px 0px 0px 1px}
+.p_OraProcessingStatus,.xag {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;color:#669966;border-color:#99cc99;border-style:solid;border-width:1px}
+.p_OraProductBrandingText,.xah {color:#669966;position:relative;font-family:Garamond, Times, Times New Roman, Serif;font-weight:normal;font-size:24pt;line-height:28.8pt;top:-4.8pt}
+.p_OraProductBrandingCompactText,.xai {color:#669966;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:13pt;margin-bottom:0px;margin-top:0px;font-weight:bold}
+.OraShuttleHeader,.xaj {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:9pt;color:#669966;font-weight:bold;padding:0px 0px 0px 18px}
+.OraShuttleLinkText,.xak {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:9pt;font-weight:normal;color:#003333}
+.p_OraSideBarMinWidth,.xal {width:140px}
+.OraStyledList,.xao {list-style-position:inside;padding:0px;margin:0px}
+.OraStyledList .OraStyledList,.xao .xao {padding:0pt 0pt 0pt 10pt}
+.xap {background-color:#e9e8e8;border-color:#99cc99;text-align:center;border-style:solid;padding:2px 0px;margin:4px 0px;border-width:1px 0px 0px}
+.xaq {background-color:#e9e8e8;border-color:#99cc99;text-align:center;border-style:solid;padding:2px 0px;margin:4px 0px;border-width:0px 0px 1px}
+.xar {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;padding:0px 8px}
+.xar .x9e {color:#999999}
+.xas {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;padding:0px 8px}
+.xat {width:0%}
+.xau {width:100%}
+.OraTableBorder0001,.xav {border-style:solid;border-width:0px 0px 0px 1px}
+.OraTableBorder0010,.xaw {border-style:solid;border-width:0px 0px 1px}
+.OraTableBorder0011,.xax {border-style:solid;border-width:0px 0px 1px 1px}
+.OraTableBorder0100,.xay {border-style:solid;border-width:0px 1px 0px 0px}
+.OraTableBorder0101,.xaz {border-style:solid;border-width:0px 1px}
+.OraTableBorder0110,.xb0 {border-style:solid;border-width:0px 1px 1px 0px}
+.OraTableBorder0111,.xb1 {border-style:solid;border-width:0px 1px 1px}
+.OraTableBorder1000,.xb2 {border-style:solid;border-width:1px 0px 0px}
+.OraTableBorder1001,.xb3 {border-style:solid;border-width:1px 0px 0px 1px}
+.OraTableBorder1010,.xb4 {border-style:solid;border-width:1px 0px}
+.OraTableBorder1011,.xb5 {border-style:solid;border-width:1px 0px 1px 1px}
+.OraTableBorder1100,.xb6 {border-style:solid;border-width:1px 1px 0px 0px}
+.OraTableBorder1101,.xb7 {border-style:solid;border-width:1px 1px 0px}
+.OraTableBorder1110,.xb8 {border-style:solid;border-width:1px 1px 1px 0px}
+.OraTableBorder1111,.xb9 {border-style:solid;border-width:1px}
+.OraTableTitle,.xbb {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:13pt;font-weight:normal;background-color:#ffffff;color:#669966}
+.p_OraTreeDisclosedSymbol,.xbf {color:#669966;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;text-align:right}
+.p_OraTreeNodeAdjust,.xbh {padding-bottom:2px}
+.xbk {width:400px;height:300px;background-color:white}
+.p_OraOnePixelLine,.xbl {background-color:#CCCCCC;font-size:0pt;overflow:hidden;height:1px;width:100%}
+.p_OraDisplayBlock,.xbm {display:block}
+.p_OraHideSkipNaviText,.xbn {font-size:0pt;margin-top:0px;margin-left:-999px}
+.AFLogo,.xcx {width:103px;height:13px;background-repeat:no-repeat;background-position:center;vertical-align:middle;background-image:url(images/logo-dark.gif)}
+.xcy {border-color:#669966}
+.x7w.p_AFVisited {border-color:#999999}
+.x6j,.x6k {border-color:#CCCCCC;border-width:0px 0px 1px 0px;border-style:solid;vertical-align:bottom;margin-bottom:3px;padding:0px 3px}
+.xcz {margin-right:3px}
+.xd0 {border-color:#669966;border-style:dashed none none;border-width:1px 0px 0px;height:1px;margin:-3px 0px -3px 0px;padding:0px}
+body {margin-top:8px}
+.p_OraNav2,.xd1 {border-color:#99cc99}
+.xd2 {height:25px}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/simple.css b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/simple.css
new file mode 100644
index 000000000..c7ddf6732
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/skinning/simple.css
@@ -0,0 +1,224 @@
+.AFInstructionText,.x0,.AFFieldText,.x6,.xk,.xl,.xm,.x23,.x24,.x25,.x26,.x2a,.x2b,.x2c,.x2d,.x2e,.x2f,.x2g,.x2h,.x1u.x2n .x25,.x1u.p_AFDisabled.x2n .x25,.x1u.x2p .x25,.x1u.x2q .x25,.x1u.x2r .x25,.x1u.x2s .x25,.x22.x2n .x24,.x22.p_AFDisabled.x2n .x24,.x22.x2p .x24,.x22.x2q .x24,.x22.x2r .x24,.x22.x2s .x24,.x1t.x2n .x26,.x1t.p_AFDisabled.x2n .x26,.x1t.x2p .x26,.AFFieldTextLTR,.x94,.AFPhoneFieldText,.x96,.AFPostalCodeFieldText,.x98,.AFAddressFieldText,.x9a,.PortletText1,.xc0,.PortletText2,.xc1,.PortletText3,.xc2,.PortletText4,.xc3,.portlet-form-input-field,.xcn,.portlet-form-field,.xcs {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000}
+.AFInstructionTextDisabled,.x1,.AFFieldTextDisabled,.x7,.x1u.p_AFDisabled.x2p .x25,.x1u.p_AFDisabled.x2q .x25,.x1u.p_AFDisabled.x2r .x25,.x1u.p_AFDisabled.x2s .x25,.x22.p_AFDisabled.x2p .x24,.x22.p_AFDisabled.x2q .x24,.x22.p_AFDisabled.x2r .x24,.x22.p_AFDisabled.x2s .x24,.x1t.p_AFDisabled.x2p .x26,.x61,.p_InContextBrandingText,.x8r,.AFFieldTextLTRDisabled,.x95,.AFPhoneFieldTextDisabled,.x97,.AFPostalCodeFieldTextDisabled,.x99,.AFAddressFieldTextDisabled,.x9b,.OraHGridNavRowInactiveLink,.xa5,.OraNavBarInactiveLink,.xac,.portlet-font-dim,.xc5 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#999999}
+.AFDataText,.x2 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;color:#000000}
+.AFDataTextDisabled,.x3 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;color:#999999}
+.AFDataNumber,.x4 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;color:#000000;text-align:right}
+.AFDataNumberDisabled,.x5 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;color:#999999;text-align:right}
+.AFFieldNumber,.x8,.x1u.x2o .x25,.x22.x2o .x24,.x1t.x2o .x26 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;text-align:right;color:#000000}
+.AFFieldNumberDisabled,.x9,.x1u.p_AFDisabled.x2o .x25,.x22.p_AFDisabled.x2o .x24,.x1t.p_AFDisabled.x2o .x26 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;text-align:right;color:#999999}
+.AFLabelText,.xa,.xq,.xr,.xs,.xt,.xu,.xv,.xw,.xx,.xy,.xz,.x10,.x11,.x12,.x13,.x14,.x15,.x4z,.portlet-form-label,.xcm,.portlet-icon-label,.xcp,.portlet-dlg-icon-label,.xcq,.portlet-form-field-label,.xcr {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;text-align:right;color:#000000;padding:0px 8px 0px 0px;font-weight:normal}
+.AFLabelCell,.xb {padding:0px 8px 0px 0px}
+.AFErrorIconStyle,.xc {color:#cc0000;font-family:monospace;font-weight:bold}
+.AFInfoIconStyle,.xd,.AFWarningIconStyle,.xe,.AFQuickSelectIconStyle,.xg {color:#669966;font-family:monospace;font-weight:bold}
+.AFRequiredIconStyle,.xf {color:#669966;font-family:Courier,sans-serif}
+.AFQuickSelectDisabledIconStyle,.xh {color:#999999;font-family:monospace;font-weight:bold}
+.OraLink:link,.xi:link,.x3k,.x3n,.x3q A,.x5r,.x5y,.OraLinkText,.x91,.OraHGridNavRowActiveLink,.xa4,.OraNavBarActiveLink,.xab {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#003333}
+.OraLink:active,.xi:active,.OraALinkText,.x93 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#006666}
+.OraLink:visited,.xi:visited,.OraVLinkText,.x92 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#336666}
+.OraLinkDisabled,.xj,.x2t,.x2u,.x2v,.x2w,.x2x,.x2y,.x2z,.x30,.x31,.x32,.x33,.x34,.x35,.x36,.x37,.x38,.x39,.x3a,.x3b,.x3c,.x3d,.x3e,.x3f,.x3g,.x3i,button,.x45,.x46,.x47,.x4v,.x5i,.x5j,.x6t,.x76,.x77,.x78,.p_OraDisabled,.x9e,.OraNav3,.xan,.p_OraTreeRow,.xbi,.portlet-form-button,.xco {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal}
+.xn {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:13pt;font-weight:normal;color:#669966;padding:0px;margin:0px}
+.xo {text-align:justify;padding:0px;margin:0px}
+.xp {text-align:center;padding:0px;margin:0px}
+.x16,.x60,.AFHeaderLevelThreePlus,.x6i,H3.x6j,H4.x6j,H5.x6j,H6.x6j,H3.x6k,H4.x6k,H5.x6k,H6.x6k,.OraPageStampText,.x8s,.xaa,.OraNavBarViewOnly,.xad,.PortletHeading3,.xbv,.PortletHeading4,.xbw {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#669966}
+.x17 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold}
+.x1i,.p_OraContentFooterChildren,.x9y {float:right}
+.x1k,.x5t {border-color:#336633;border:1px solid;background-color:white}
+.x1l,.x5u {background-color:#CCCCCC;border-color:#336633;border-bottom:1px solid;padding:2px 2px 2px 2px}
+.x1m,.x5v {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:11pt;font-weight:normal;white-space:nowrap;overflow:hidden}
+.x1n {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:11pt;font-weight:normal;margin-left:5px;background-image:url(images/close.gif);background-position:center;background-repeat:no-repeat;height:13px;width:13px}
+.x1o,.x5x {background-color:#e9e8e8;border:0px}
+.x22.p_AFDisabled .xr,.x1t.p_AFDisabled .xt,.x1u.p_AFDisabled .xu,.x1v.p_AFDisabled .xv,.x1w.p_AFDisabled .xw,.x1p.p_AFDisabled .xx,.x1q.p_AFDisabled .xy,.x1s.p_AFDisabled .xz,.x1x.p_AFDisabled .x10,.x1y.p_AFDisabled .x11,.x1z.p_AFDisabled .x12,.x20.p_AFDisabled .x13,.x21.p_AFDisabled .x14,.x3w .x3x,.x3u .x3x a,.x3w .x3x a,.x4g .x4l A {color:#000000}
+.x27,.x28 {background-color:#e9e8e8;border-color:#999999;border-width:1px;border-style:solid;width:11px;height:8px}
+.x29 {padding-left:1px}
+.x3h,.OraNav3Selected,.xam {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;background-color:#ccffcc}
+.x3j,.portlet-font,.xc4 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:8pt;font-weight:normal}
+BODY,.portlet-section-body,.xc9,.portlet-table-body,.xcg {background-color:#ffffff;font-family:Arial,Helvetica,Geneva,sans-serif}
+.x3l,.x3o,.x3p {color:#003333;font-size:9pt}
+.x3m {font-size:9pt;color:#000000}
+.x3q UL {margin-top:4px;margin-bottom:4px}
+.x3r {position:relative;left:-7px;top:5px}
+.x3s {background-color:#EFEFEF;padding-left:6px;padding-right:6px}
+.x3t,.x3v,.x3z,.x41,.x48,.x4a {cursor:default}
+.x3u,.x3w,.x40,.x42,.x49,.x4b,.x4f,.x4g {cursor:pointer}
+.x3u .x3x {color:#000000;font-weight:bold}
+.x3u .x3x a:hover,.x3w .x3x a:hover,.x40 .x43 a:hover,.x42 .x43 a:hover,.x49 .x4c a:hover,.x4b .x4c a:hover,.AFAccessKeyStyle,.x9c {text-decoration:underline}
+.x3t .x3x,.x3z .x43,.x48 .x4c {color:gray;font-weight:bold}
+.x3v .x3x,.x3t .x3x a,.x3v .x3x a,.x41 .x43,.x3z .x43 a,.x41 .x43 a,.x4a .x4c,.x48 .x4c a,.x4a .x4c a,.x4f.p_AFDisabled .x4l,.x4g.p_AFDisabled .x4l {color:gray}
+.x3x,.x43,.x4c {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;padding-top:3px;padding-bottom:3px}
+.x3x a,.x43 a,.x4c a {text-decoration:none}
+.x3y {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;padding-left:6px;padding-right:6px;color:gray}
+.x40 .x43,.x49 .x4c,.x4f .x4l A,.AFLinkAccessKeyStyle,.x9d,.x9n,.x9s {font-weight:bold}
+.x44 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;padding-left:6px;padding-right:6px}
+.x4d {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;vertical-align:middle;width:17px;background-image:url(images/list-bullet.gif);background-position:center;background-repeat:no-repeat}
+.x4e {height:26px;overflow:hidden}
+.x4f.p_AFDisabled,.x4g.p_AFDisabled {cursor:default;color:gray}
+.x4h,.x4i {height:22px;width:26px;background-position:top right}
+.x4j,.x4k {height:22px;width:14px;background-repeat:no-repeat}
+.x4l {height:22px;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;padding-left:3px;white-space:nowrap}
+.x4m {height:22px;width:12px;background-repeat:no-repeat}
+.x4n {height:22px;width:15px}
+.x4o,.x4q,.x4s {height:4px;background-repeat:repeat-x}
+.x4p {height:4px;width:17px;background-repeat:no-repeat}
+.x4r {height:4px}
+.x4t {height:4px;width:100%;background-repeat:no-repeat}
+.x4l A {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;text-decoration:none}
+.x4u {background-repeat:repeat-x}
+.x4f .x4h {background-image:url(images/tab3-start-selected.gif)}
+.x4f .x4i {background-image:url(images/tab3-start-join-selected.gif)}
+.x4f .x4o,.x4f .x4q,.x4f .x4s {background-image:url(images/tab3-bot-mid-selected.gif)}
+.x4f .x4p {background-image:url(images/tab3-bot-start-selected.gif)}
+.x4f .x4l {background-image:url(images/tab3-mid-selected.gif);font-weight:bold}
+.x4f .x4m {background-image:url(images/tab3-end-join-selected-to-deselected.gif)}
+.x4f .x4n {background-image:url(images/tab3-end-selected.gif)}
+.x4f .x4u,.x4g .x4o,.x4g .x4q,.x4g .x4s,.x4g .x4u {background-image:url(images/tab3-bot-deselected.gif)}
+.x4f .x4t {background-image:url(images/tab3-bot-end-selected.gif)}
+.x4g .x4h {background-image:url(images/tab3-start-deselected.gif)}
+.x4g .x4p,.x4g .x4t {background-image:none}
+.x4g .x4j {background-image:url(images/tab3-start-join-selected-to-deselected.gif)}
+.x4g .x4k {background-image:url(images/tab3-start-join-deselected-to-deselected.gif)}
+.x4g .x4l {color:#000000;background-image:url(images/tab3-mid-deselected.gif)}
+.x4g .x4m {background-image:url(images/tab3-end-join-deselected-to-deselected.gif)}
+.x4g .x4n {background-image:url(images/tab3-end-deselected.gif)}
+.x4w,.p_OraTreeIcon,.xbg {vertical-align:top}
+.x4x {background-color:gray;height:1px;font-size:1px;margin-top:3px;margin-bottom:3px}
+.x4y,.x51,.x52 {padding:0px}
+.x50 {padding:0px;text-align:left}
+.x53 img,.x54 img,.x55 img,.x56 img,.x5i img,.x5j img,.x62 img,.x6o img,.x6t img {vertical-align:bottom}
+.x54 .x5f,.x5i .x5k,.x5j .x5l,.x6r,.OraBGAccentLight,.x8q,.PortletBodyColor,.xbo,.PortletSubHeaderColor,.xbx,.xcw {background-color:#e9e8e8}
+.x55 .x5f,.OraBGAccentMedium,.x8p {background-color:#ffffcc}
+.x56 .x5f,.OraBGAccentDark,.x8o {background-color:#CCCCCC}
+.x5g,.PortletHeaderColor,.xbp {width:100%;background-repeat:repeat-x}
+.x54 .x5g {background-color:#99cc99;color:#ffffff}
+.x5m,.x5n,.x5o {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:8pt;font-weight:normal;color:#000000;white-space:nowrap}
+.x5m A,.x5n A,.x5o A,.x8b,.xar A,.p_OraTreeRow A:link,.xbi A:link,.p_OraTreeRow A:active,.xbi A:active,.p_OraTreeRow A:visited,.xbi A:visited {color:#003333}
+.x5p {border-color:#e9e8e8}
+.x5q,.OraPageStampLabel,.x8t,.OraTableControlBarText,.xba,.p_OraTreeRowSelected,.xbj {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;color:#669966}
+.x5s {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#003333;text-decoration:none;white-space:nowrap}
+.x5w {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:11pt;font-weight:normal;text-align:right;padding-left:5px}
+.x62 {background-color:#669966;color:#ffffff;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;min-height:4px}
+.x63,.x64 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;white-space:nowrap}
+.x63 A,.x64 A {color:#ffffff}
+.x65 {color:#ffffff;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal}
+.x66 {color:#669966;position:absolute;top:0px;left:-18px}
+.x67 {font-size:10pt;font-weight:normal;color:#669966;font-family:monospace}
+.x68 {font-size:10pt;font-weight:normal;color:#999999;font-family:monospace}
+.x69 {border-color:#999999;border-width:0px 1px 1px 1px;border-style:solid}
+.x6a {border-color:#999999;height:21px;text-decoration:none;white-space:nowrap;padding-right:5px;border-width:1px 0px 0px 0px;border-style:solid;cursor:pointer;padding-left:5px}
+.x6b {border-color:#999999;height:21px;text-decoration:none;white-space:nowrap;padding-right:5px;border-style:solid;border-width:1px 0px 1px 0px;padding-left:2px}
+.x6c {border-color:#999999;height:21px;text-decoration:none;white-space:nowrap;padding-right:5px;border-style:solid;border-width:1px 0px 0px 0px;padding-left:18px}
+.x6d {vertical-align:top;margin:5px}
+.x6e {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;background:transparent;color:#669966;display:block;padding-top:2px;text-decoration:none}
+.x6f {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#999999;display:block;padding-top:2px;text-decoration:none}
+.AFHeaderLevelOne,.x6g,H1.x6j,H1.x6k,.x6n,.PortletHeaderText,.xbs,.PortletHeading1,.xbt,.PortletSubHeaderText,.xbz,.portlet-section-header,.xc8,.portlet-section-subheader,.xcc,.portlet-table-header,.xcf,.portlet-table-subheader,.xcj {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:13pt;font-weight:normal;color:#669966}
+.AFHeaderLevelTwo,.x6h,H2.x6j,H2.x6k,.PortletHeading2,.xbu {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:11pt;font-weight:normal;color:#669966}
+.x6l,.x6m,.portlet-msg-error,.xc7 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:13pt;font-weight:normal;color:#cc0000}
+.x6o {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#336633;width:100%}
+.x6p,.xa7,.portlet-msg-info,.xc6 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#669966;margin:0px 0px 0px 0px;padding:5px 30px 5px 30px}
+.x6q {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#336633;border-color:#999999}
+.AFSortableHeaderSortIcon,.x6s {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:9pt;font-weight:normal;color:#669966}
+.x6u {background-color:#e9e8e8;white-space:nowrap}
+.x6v {background-color:#669966;white-space:nowrap}
+.x6w {background-color:#e9e8e8;color:#999999;white-space:nowrap}
+.x6u A {color:#336633}
+.x6v A {color:#ccffcc}
+.x6x {width:0px}
+.x6y,.x6z {border-collapse:collapse;border-color:#999999;border-style:solid;border-width:1px}
+.x70,.x72 {background-color:#e9e8e8;border-color:#999999;border-style:solid;border-width:1px 1px 0px;padding:1px 2px}
+.x71,.x73 {background-color:#e9e8e8;border-color:#999999;border-style:solid;border-width:0px 1px 1px;padding:1px 2px}
+.x74,.x75 {border-color:#999999;border-style:solid;border-width:1px 1px 0px;padding:1px 2px}
+.x79,.portlet-section-selected,.xcb,.portlet-table-selected,.xci {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;vertical-align:baseline;background-color:#e9e8e8;border-color:#999999}
+.x7a,.portlet-section-alternate,.xca,.portlet-table-alternate,.xch {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;vertical-align:baseline;background-color:#ffffff;border-color:#999999}
+.x7b {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;vertical-align:baseline;background-color:#e9e8e8;border-color:#999999;text-align:right;padding-right:2px}
+.x7c {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;vertical-align:baseline;background-color:#ffffff;border-color:#999999;text-align:right;padding-right:2px}
+.x7d,.x7e,.x7f,.OraTableCellSelect,.xbd,.portlet-section-text,.xce,.portlet-table-text,.xcl {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;vertical-align:baseline;background-color:#e9e8e8;border-color:#999999;text-align:center}
+.x7g,.x7h,.x7i,.OraTableCellSelectBand,.xbe {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;vertical-align:baseline;background-color:#ffffff;border-color:#999999;text-align:center}
+.x7j {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;text-align:left;background-color:#CCCCCC;color:#669966;vertical-align:bottom}
+.x7k {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;background-color:#CCCCCC;color:#669966;vertical-align:bottom;text-align:right}
+.x7l {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;background-color:#CCCCCC;color:#669966;vertical-align:bottom;text-align:center}
+.x7m {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;text-align:right;background-color:#CCCCCC;color:#669966}
+.x7n {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;border-color:#999999;background-color:#ffffff}
+.x7o,.portlet-section-footer,.xcd,.portlet-table-footer,.xck {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;text-align:left;background-color:#CCCCCC;color:#669966}
+.OraTableTotal,.x7p {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;text-align:right;background-color:#CCCCCC;color:#669966}
+.x7q {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;text-align:right;background-color:#CCCCCC;color:#000000;vertical-align:baseline}
+.x7r {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;text-align:left;background-color:#CCCCCC;color:#000000;vertical-align:baseline}
+.x7s {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;text-align:left;background-color:#CCCCCC;color:#669966;vertical-align:bottom;cursor:pointer;border-width:2px;border-style:outset}
+.x7t {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;background-color:#CCCCCC;color:#669966;vertical-align:bottom;cursor:pointer;border-width:2px;border-style:outset;text-align:right}
+.x7u {border-color:#999999;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;background-color:#CCCCCC;color:#669966;vertical-align:bottom;cursor:pointer;border-width:2px;border-style:outset;text-align:center}
+.x7w.p_AFSelected {color:#669966;font-weight:bold}
+.x7w:visited,.x7w:visited .x8b {color:#666666}
+.x7w.p_AFDisabled,.xar .x9e {color:#999999}
+.x7w.p_AFUnvisited,.p_OraContentFooterRule,.x9w {color:#669966}
+.x7w.p_AFDisabled .x8b {color:#669999}
+.OraBGColorVeryDark,.x8f {background-color:#336633}
+.OraBGColorDark,.x8g,.xct,.xcu,.xcv {background-color:#669966}
+.OraBGColorMedium,.x8h {background-color:#99cc99}
+.OraBGColorLight,.x8i {background-color:#ccffcc}
+.OraBGGrayVeryDark,.x8j {background-color:#333333}
+.OraBGGrayDark,.x8k {background-color:#666666}
+.OraBGGrayMedium,.x8l,.OraBGAccentVeryDark,.x8n,.OraTable,.xbc {background-color:#999999}
+.OraBGGrayLight,.x8m {background-color:#cccccc}
+.OraInlineInfoText,.x8u {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:8pt;font-weight:normal;color:#669966}
+.OraTextInline,.x8v {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:8pt;font-weight:normal;color:#99cc99}
+.OraMessageBoxErrorText,.x8w,.AFErrorText,.x8x {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#cc0000}
+.OraErrorNameText,.x8y {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;color:#cc0000}
+.OraInlineErrorText,.x8z {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:8pt;font-weight:normal;color:#cc0000}
+.OraGlobalPageTitle,.x90 {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:13pt;color:#ffffff;font-weight:bold}
+.p_OraSelected,.x9f {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;background-color:#ccffcc;text-decoration:none}
+.p_OraHiddenLabel,.x9g {position:absolute;top:-999px;left:0px;font-size:0px}
+.p_OraColorFieldSwatch,.x9h {border-color:#000000;border-style:solid;border-width:1px}
+.p_OraColorPalette,.x9i {background-color:#000000}
+.p_OraColorPaletteEmptyCell,.x9j {background-color:#ffffff}
+.x9k A,.x9o A {color:#003333;text-decoration:none}
+.x9l,.x9p {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:13pt;font-weight:normal;text-align:center;background-color:#ffffff;color:#669966;padding:2px}
+.x9m,.x9q {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;text-align:center;color:#669966;padding:2px}
+.x2b A,.x9r A {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;text-align:center;color:#003333}
+.x9r {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;text-align:center;color:#999999;text-decoration:none;border-width:1px;border-style:solid;padding:2px}
+.p_OraContentFooterStart,.x9x {float:left}
+.p_OraContentFooterBottom,.x9z {clear:both;margin-bottom:5px}
+.p_OraFooter,.xa0 {text-align:center}
+.p_OraFooterBottom,.xa1 {padding-top:5px}
+.p_OraHeaderNest,.xa2 {margin:5px 0px 0px 12px}
+.OraHGridLocatorHeader,.xa3 {border-color:#999999;background-color:#e9e8e8}
+.p_OraHideShowDisclosedSymbol,.xa6,.xas A,.p_OraTreeDisclosedSymbol A:link,.xbf A:link,.p_OraTreeDisclosedSymbol A:active,.xbf A:active,.p_OraTreeDisclosedSymbol A:visited,.xbf A:visited,.p_OraTreeRowSelected A:link,.xbj A:link,.p_OraTreeRowSelected A:active,.xbj A:active,.p_OraTreeRowSelected A:visited,.xbj A:visited {color:#669966;text-decoration:none}
+.xa8 {list-style-type:none}
+.p_OraQuickSearchBox,.xae {background-color:#e9e8e8;border-color:#CCCCCC;border-style:solid;padding:0pt 5pt 5pt 5pt;border-width:0px 0px 1px 1px}
+.p_OraGlobalQuick,.xaf {border-color:#CCCCCC;border-style:solid;border-width:0px 0px 0px 1px}
+.p_OraProcessingStatus,.xag {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;color:#669966;border-color:#99cc99;border-style:solid;border-width:1px}
+.p_OraProductBrandingText,.xah {color:#669966;position:relative;font-family:Garamond, Times, Times New Roman, Serif;font-weight:normal;font-size:24pt;line-height:28.8pt;top:-4.8pt}
+.p_OraProductBrandingCompactText,.xai {color:#669966;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:13pt;margin-bottom:0px;margin-top:0px;font-weight:bold}
+.OraShuttleHeader,.xaj {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:9pt;color:#669966;font-weight:bold;padding:0px 0px 0px 18px}
+.OraShuttleLinkText,.xak {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:9pt;font-weight:normal;color:#003333}
+.p_OraSideBarMinWidth,.xal {width:140px}
+.OraStyledList,.xao {list-style-position:inside;padding:0px;margin:0px}
+.OraStyledList .OraStyledList,.xao .xao {padding:0pt 0pt 0pt 10pt}
+.xar {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;padding:0px 8px}
+.xas {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:bold;padding:0px 8px}
+.xat {width:0%}
+.xau {width:100%}
+.OraTableBorder0001,.xav {border-style:solid;border-width:0px 0px 0px 1px}
+.OraTableBorder0010,.xaw {border-style:solid;border-width:0px 0px 1px}
+.OraTableBorder0011,.xax {border-style:solid;border-width:0px 0px 1px 1px}
+.OraTableBorder0100,.xay {border-style:solid;border-width:0px 1px 0px 0px}
+.OraTableBorder0101,.xaz {border-style:solid;border-width:0px 1px}
+.OraTableBorder0110,.xb0 {border-style:solid;border-width:0px 1px 1px 0px}
+.OraTableBorder0111,.xb1 {border-style:solid;border-width:0px 1px 1px}
+.OraTableBorder1000,.xb2 {border-style:solid;border-width:1px 0px 0px}
+.OraTableBorder1001,.xb3 {border-style:solid;border-width:1px 0px 0px 1px}
+.OraTableBorder1010,.xb4 {border-style:solid;border-width:1px 0px}
+.OraTableBorder1011,.xb5 {border-style:solid;border-width:1px 0px 1px 1px}
+.OraTableBorder1100,.xb6 {border-style:solid;border-width:1px 1px 0px 0px}
+.OraTableBorder1101,.xb7 {border-style:solid;border-width:1px 1px 0px}
+.OraTableBorder1110,.xb8 {border-style:solid;border-width:1px 1px 1px 0px}
+.OraTableBorder1111,.xb9 {border-style:solid;border-width:1px}
+.OraTableTitle,.xbb {font-family:Arial,Helvetica,Geneva,sans-serif;font-size:13pt;font-weight:normal;background-color:#ffffff;color:#669966}
+.p_OraTreeDisclosedSymbol,.xbf {color:#669966;font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;text-align:right}
+.p_OraTreeNodeAdjust,.xbh {padding-bottom:2px}
+.xbk {width:400px;height:300px;background-color:white}
+.p_OraOnePixelLine,.xbl {background-color:#CCCCCC;font-size:0pt;overflow:hidden;height:1px;width:100%}
+.p_OraDisplayBlock,.xbm {display:block}
+.p_OraHideSkipNaviText,.xbn {font-size:0pt;margin-top:0px;margin-left:-999px}
+.PortletHeaderLink,.xbq,.PortletSubHeaderLink,.xby {color:#ffffff;text-decoration:none}
+.AFLogo,.xcx {width:103px;height:13px;background-repeat:no-repeat;background-position:center;vertical-align:middle;background-image:url(images/logo-dark.gif)}
+body {margin-top:8px}
+.p_OraNav2,.xcy {border-color:#99cc99}
+.xcz {height:25px}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/Messages.java b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/Messages.java
index 02407b16b..65372c1a0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/Messages.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/Messages.java
@@ -111,4 +111,9 @@ public class Messages extends NLS {
*/
public static String SelectShuttleOperation_LinkBottom;
+ /**
+ * See messages.properties.
+ */
+ public static String TrinidadDTResourceProvider_StyleSheetNotLocated;
+
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/TrinidadTagSupportActivator.java b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/TrinidadTagSupportActivator.java
index a276157f8..3f42bb639 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/TrinidadTagSupportActivator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/TrinidadTagSupportActivator.java
@@ -73,4 +73,21 @@ public class TrinidadTagSupportActivator extends AbstractUIPlugin {
log.log(new Status(IStatus.INFO, PLUGIN_ID, message));
}
+ /**
+ * Writes an error message to this plug-in's log.
+ *
+ * @param message Error message to be written.
+ * @param ex Throwable instance.
+ */
+ public static void logError(String message, Throwable ex) {
+ ILog log = getDefault().getLog();
+ IStatus status;
+ if (ex != null) {
+ status = new Status(IStatus.ERROR, PLUGIN_ID, message, ex);
+ } else {
+ status = new Status(IStatus.ERROR, PLUGIN_ID, message);
+ }
+ log.log(status);
+ }
+
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/AbstractLabelAndHelpOperation.java b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/AbstractLabelAndHelpOperation.java
index 4232cc356..6aed3eb03 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/AbstractLabelAndHelpOperation.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/AbstractLabelAndHelpOperation.java
@@ -19,8 +19,6 @@ import org.eclipse.jst.jsf.common.dom.TagIdentifier;
import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
import org.eclipse.jst.jsf.core.internal.tld.TagIdentifierFactory;
import org.eclipse.jst.pagedesigner.converter.ConvertPosition;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.ITransformOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.TransformOperationFactory;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.Text;
@@ -37,12 +35,14 @@ import org.w3c.dom.Text;
*/
public abstract class AbstractLabelAndHelpOperation extends AbstractTrinidadTransformOperation {
- private static final String STYLE_OUTERELEMENT = "font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;"; //$NON-NLS-1$
- private static final String STYLE_LABELTD = "font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;text-align:right;color:#000000;padding:0px 8px 0px 0px;font-weight:normal;"; //$NON-NLS-1$
- private static final String STYLE_REQUIREDSPAN = "color:#669966;font-family:Courier,sans-serif;"; //$NON-NLS-1$
- protected static final String STYLE_CONTROLELEMENT = "font-family:Arial,Helvetica,Geneva,sans-serif;font-size:10pt;font-weight:normal;color:#000000;"; //$NON-NLS-1$
- private static final String STYLE_HELPSPAN = "font-family:Arial,Helvetica,Geneva,sans-serif;font-size:8pt;font-weight:normal;color:#669966;"; //$NON-NLS-1$
-
+ private static final String STYLECLASS_OUTERELEMENT = "x1u p_AFRequired"; //$NON-NLS-1$
+ private static final String STYLECLASS_LABELTD = "xu"; //$NON-NLS-1$
+ private static final String STYLECLASS_REQUIREDSPAN = "xf"; //$NON-NLS-1$
+ private static final String STYLECLASS_CONTROLTD = "AFContentCell"; //$NON-NLS-1$
+ protected static final String STYLECLASS_CONTROLELEMENT = "x25"; //$NON-NLS-1$
+ private static final String STYLECLASS_HELPTD = "AFComponentMessageCell"; //$NON-NLS-1$
+ private static final String STYLECLASS_HELPSPAN = "x8u"; //$NON-NLS-1$
+
/**
* Subclasses must implement this method to append the desired DOM structure
* that represents the HTML control(s) to parentElement.
@@ -72,13 +72,12 @@ public abstract class AbstractLabelAndHelpOperation extends AbstractTrinidadTran
}
//append common attributes
- ITransformOperation operation =
- TransformOperationFactory.getInstance().getTransformOperation(
- TransformOperationFactory.OP_CopyAttributeWithRenameOperation,
- new String[]{"styleClass", "class"}); //$NON-NLS-1$ //$NON-NLS-2$
- operation.transform(srcElement, outerElement);
- appendAttribute(outerElement, "style", //$NON-NLS-1$
- calculateStyle(STYLE_OUTERELEMENT, srcElement, "inlineStyle")); //$NON-NLS-1$
+ appendAttribute(outerElement, "class", //$NON-NLS-1$
+ calculateStyleClass(STYLECLASS_OUTERELEMENT, srcElement, "styleClass")); //$NON-NLS-1$
+ String inlineStyle = calculateStyle(null, srcElement, "inlineStyle"); //$NON-NLS-1$
+ if (inlineStyle != null) {
+ appendAttribute(outerElement, "style", inlineStyle); //$NON-NLS-1$
+ }
if (Boolean.valueOf(simple)) {
//continue building simple variant
@@ -90,14 +89,14 @@ public abstract class AbstractLabelAndHelpOperation extends AbstractTrinidadTran
if (isRequired(srcElement) || getLabel(srcElement) != null) {
//if either required or has label, build top-left table cell
Element tdElement = appendChildElement("td", trElement); //$NON-NLS-1$
- appendAttribute(tdElement, "style", STYLE_LABELTD); //$NON-NLS-1$
+ appendAttribute(tdElement, "class", STYLECLASS_LABELTD); //$NON-NLS-1$
appendAttribute(tdElement, "valign", "top"); //$NON-NLS-1$ //$NON-NLS-2$
appendAttribute(tdElement, "nowrap", ""); //$NON-NLS-1$ //$NON-NLS-2$
if (isRequired(srcElement)) {
Element spanElement = appendChildElement("span", tdElement); //$NON-NLS-1$
appendAttribute(spanElement, "title", "Required"); //$NON-NLS-1$ //$NON-NLS-2$
- appendAttribute(spanElement, "style", STYLE_REQUIREDSPAN); //$NON-NLS-1$
+ appendAttribute(spanElement, "class", STYLECLASS_REQUIREDSPAN); //$NON-NLS-1$
appendChildText("* ", spanElement); //$NON-NLS-1$
}
@@ -109,6 +108,7 @@ public abstract class AbstractLabelAndHelpOperation extends AbstractTrinidadTran
//build content table cell
Element tdElement = appendChildElement("td", trElement); //$NON-NLS-1$
+ appendAttribute(tdElement, "class", STYLECLASS_CONTROLTD); //$NON-NLS-1$
appendAttribute(tdElement, "valign", "top"); //$NON-NLS-1$ //$NON-NLS-2$
appendAttribute(tdElement, "nowrap", ""); //$NON-NLS-1$ //$NON-NLS-2$
appendControl(srcElement, tdElement);
@@ -121,14 +121,13 @@ public abstract class AbstractLabelAndHelpOperation extends AbstractTrinidadTran
tdElement = appendChildElement("td", trElement); //$NON-NLS-1$
}
tdElement = appendChildElement("td", trElement); //$NON-NLS-1$
+ appendAttribute(tdElement, "class", STYLECLASS_HELPTD); //$NON-NLS-1$
Element spanElement = appendChildElement("span", tdElement); //$NON-NLS-1$
- operation =
- TransformOperationFactory.getInstance().getTransformOperation(
- TransformOperationFactory.OP_CopyAttributeWithRenameOperation,
- new String[]{"styleClass", "class"}); //$NON-NLS-1$ //$NON-NLS-2$
- operation.transform(srcElement, spanElement);
- appendAttribute(spanElement, "style", //$NON-NLS-1$
- calculateStyle(STYLE_HELPSPAN, srcElement, "inlineStyle")); //$NON-NLS-1$
+ appendAttribute(spanElement, "class", //$NON-NLS-1$
+ calculateStyle(STYLECLASS_HELPSPAN, srcElement, "styleClass")); //$NON-NLS-1$
+ if (inlineStyle != null) {
+ appendAttribute(spanElement, "style", inlineStyle); //$NON-NLS-1$
+ }
Iterator<Node> itHelpFacetChildNodes = helpFacetChildNodes.iterator();
int curPos = 0;
while (itHelpFacetChildNodes.hasNext()) {
@@ -171,6 +170,25 @@ public abstract class AbstractLabelAndHelpOperation extends AbstractTrinidadTran
return style;
}
+ protected String calculateStyleClass(
+ String baseStyleClass, Element srcElement, String styleClassAttributeName) {
+ String styleClass = baseStyleClass;
+ if (srcElement != null && styleClassAttributeName != null) {
+ String srcElementStyleClass = srcElement.getAttribute(styleClassAttributeName);
+ if (srcElementStyleClass != null && srcElementStyleClass.length() > 0) {
+ if (styleClass != null) {
+ if (!styleClass.endsWith(",")) { //$NON-NLS-1$
+ styleClass += ","; //$NON-NLS-1$
+ }
+ styleClass += srcElementStyleClass;
+ } else {
+ styleClass = srcElementStyleClass;
+ }
+ }
+ }
+ return styleClass;
+ }
+
protected boolean isRequired(Element srcElement) {
boolean required = false;
if (!isChildOfPanelFormLayout(srcElement)) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/CreateClassAttributeOperation.java b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/CreateClassAttributeOperation.java
new file mode 100644
index 000000000..aff243b78
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/CreateClassAttributeOperation.java
@@ -0,0 +1,50 @@
+/**
+ * Copyright (c) 2009 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Oracle Corporation - initial API and implementation
+ */
+package org.eclipse.jst.jsf.apache.trinidad.tagsupport.converter.operations;
+
+import org.w3c.dom.Element;
+
+/**
+ * ITransformOperation implementation to handle merging of an Element's optional
+ * default style class with a specified "styleClass" as the current Element's
+ * "class" attribute.
+ *
+ * @author Ian Trimble - Oracle
+ */
+public class CreateClassAttributeOperation extends AbstractTrinidadTransformOperation {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
+ */
+ @Override
+ public Element transform(Element srcElement, Element curElement) {
+ String classValue = null;
+ if (getParameters().length > 0) {
+ classValue = getParameters()[0];
+ }
+ String styleClass = srcElement.getAttribute("styleClass"); //$NON-NLS-1$
+ if (styleClass != null && styleClass.length() > 0) {
+ if (classValue == null) {
+ classValue = styleClass;
+ } else {
+ if (classValue.length() > 0 && !classValue.endsWith(",")) { //$NON-NLS-1$
+ classValue += ","; //$NON-NLS-1$
+ }
+ classValue += styleClass;
+ }
+ }
+ if (classValue != null && curElement != null) {
+ curElement.setAttribute("class", classValue); //$NON-NLS-1$
+ }
+ return curElement;
+ }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/InputFileOperation.java b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/InputFileOperation.java
index a3ce1d328..f3e2e97e7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/InputFileOperation.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/InputFileOperation.java
@@ -37,8 +37,12 @@ public class InputFileOperation extends AbstractLabelAndHelpOperation {
if (value != null) {
appendAttribute(controlElement, "value", value); //$NON-NLS-1$
}
- appendAttribute(controlElement, "style", //$NON-NLS-1$
- calculateStyle(STYLE_CONTROLELEMENT, srcElement, "contentStyle")); //$NON-NLS-1$
+ //append common attributes
+ appendAttribute(controlElement, "class", STYLECLASS_CONTROLELEMENT); //$NON-NLS-1$
+ String contentStyle = calculateStyle(null, srcElement, "contentStyle"); //$NON-NLS-1$
+ if (contentStyle != null) {
+ appendAttribute(controlElement, "style", contentStyle); //$NON-NLS-1$
+ }
}
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/InputTextOperation.java b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/InputTextOperation.java
index 585fda34d..47f7ab46f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/InputTextOperation.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/InputTextOperation.java
@@ -54,8 +54,11 @@ public class InputTextOperation extends AbstractLabelAndHelpOperation {
}
}
//append common attributes
- appendAttribute(controlElement, "style", //$NON-NLS-1$
- calculateStyle(STYLE_CONTROLELEMENT, srcElement, "contentStyle")); //$NON-NLS-1$
+ appendAttribute(controlElement, "class", STYLECLASS_CONTROLELEMENT); //$NON-NLS-1$
+ String contentStyle = calculateStyle(null, srcElement, "contentStyle"); //$NON-NLS-1$
+ if (contentStyle != null) {
+ appendAttribute(controlElement, "style", contentStyle); //$NON-NLS-1$
+ }
}
private int getRows(Element srcElement) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/InputTextWithIconOperation.java b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/InputTextWithIconOperation.java
index f412a7dae..d425db04e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/InputTextWithIconOperation.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/InputTextWithIconOperation.java
@@ -54,8 +54,12 @@ public class InputTextWithIconOperation extends AbstractLabelAndHelpOperation {
if (value != null) {
appendAttribute(inputElement, "value", value); //$NON-NLS-1$
}
- appendAttribute(inputElement, "style", //$NON-NLS-1$
- calculateStyle(STYLE_CONTROLELEMENT, srcElement, "contentStyle")); //$NON-NLS-1$
+ //append common attributes
+ appendAttribute(inputElement, "class", STYLECLASS_CONTROLELEMENT); //$NON-NLS-1$
+ String contentStyle = calculateStyle(null, srcElement, "contentStyle"); //$NON-NLS-1$
+ if (contentStyle != null) {
+ appendAttribute(inputElement, "style", contentStyle); //$NON-NLS-1$
+ }
//append anchor with child image
Element aElement = appendChildElement("a", parentElement); //$NON-NLS-1$
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/SelectBooleanOperation.java b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/SelectBooleanOperation.java
index 15c31d7aa..55ee08ee8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/SelectBooleanOperation.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/SelectBooleanOperation.java
@@ -58,8 +58,12 @@ public class SelectBooleanOperation extends AbstractLabelAndHelpOperation {
appendChildText(text, labelElement);
}
}
- appendAttribute(spanElement, "style", //$NON-NLS-1$
- calculateStyle(STYLE_CONTROLELEMENT, srcElement, "contentStyle")); //$NON-NLS-1$
+ //append common attributes
+ appendAttribute(inputElement, "class", STYLECLASS_CONTROLELEMENT); //$NON-NLS-1$
+ String contentStyle = calculateStyle(null, srcElement, "contentStyle"); //$NON-NLS-1$
+ if (contentStyle != null) {
+ appendAttribute(inputElement, "style", contentStyle); //$NON-NLS-1$
+ }
}
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/SelectListboxChoiceOperation.java b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/SelectListboxChoiceOperation.java
index b69db5fd9..1e507698a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/SelectListboxChoiceOperation.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/SelectListboxChoiceOperation.java
@@ -83,9 +83,12 @@ public class SelectListboxChoiceOperation extends AbstractLabelAndHelpOperation
}
appendChildText(selectItem.getLabel(), optionElement);
}
- //TODO: append option elements
- appendAttribute(selectElement, "style", //$NON-NLS-1$
- calculateStyle(STYLE_CONTROLELEMENT, srcElement, "contentStyle")); //$NON-NLS-1$
+ //append common attributes
+ appendAttribute(selectElement, "class", STYLECLASS_CONTROLELEMENT); //$NON-NLS-1$
+ String contentStyle = calculateStyle(null, srcElement, "contentStyle"); //$NON-NLS-1$
+ if (contentStyle != null) {
+ appendAttribute(selectElement, "style", contentStyle); //$NON-NLS-1$
+ }
}
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/SelectManyCheckboxOneRadioOperation.java b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/SelectManyCheckboxOneRadioOperation.java
index d28008c15..a06a48cb8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/SelectManyCheckboxOneRadioOperation.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/SelectManyCheckboxOneRadioOperation.java
@@ -66,8 +66,12 @@ public class SelectManyCheckboxOneRadioOperation extends AbstractLabelAndHelpOpe
}
}
}
- appendAttribute(spanElement, "style", //$NON-NLS-1$
- calculateStyle(STYLE_CONTROLELEMENT, srcElement, "contentStyle")); //$NON-NLS-1$
+ //append common attributes
+ appendAttribute(spanElement, "class", STYLECLASS_CONTROLELEMENT); //$NON-NLS-1$
+ String contentStyle = calculateStyle(null, srcElement, "contentStyle"); //$NON-NLS-1$
+ if (contentStyle != null) {
+ appendAttribute(spanElement, "style", contentStyle); //$NON-NLS-1$
+ }
}
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/dtresourceprovider/TrinidadDTResourceProvider.java b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/dtresourceprovider/TrinidadDTResourceProvider.java
new file mode 100644
index 000000000..2e414c0ea
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/dtresourceprovider/TrinidadDTResourceProvider.java
@@ -0,0 +1,60 @@
+/**
+ * Copyright (c) 2009 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Ian Trimble - initial API and implementation
+ */
+package org.eclipse.jst.jsf.apache.trinidad.tagsupport.dtresourceprovider;
+
+import java.io.IOException;
+import java.net.URL;
+import java.text.MessageFormat;
+import java.util.Collections;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.jst.jsf.apache.trinidad.tagsupport.Messages;
+import org.eclipse.jst.jsf.apache.trinidad.tagsupport.TrinidadTagSupportActivator;
+import org.eclipse.jst.pagedesigner.dtresourceprovider.DefaultDTResourceProvider;
+import org.eclipse.jst.pagedesigner.dtresourceprovider.DefaultDTSkin;
+
+public class TrinidadDTResourceProvider extends DefaultDTResourceProvider {
+
+ private static final String ID = "http://myfaces.apache.org/trinidad"; //$NON-NLS-1$
+
+ private static final String SKIN_MINIMAL = "minimal"; //$NON-NLS-1$
+ private static final String SKIN_SIMPLE = "simple"; //$NON-NLS-1$
+
+ private static final String STYLESHEET_MINIMAL = "/skinning/minimal.css"; //$NON-NLS-1$
+ private static final String STYLESHEET_SIMPLE = "/skinning/simple.css"; //$NON-NLS-1$
+
+ /**
+ * Constructs an instance.
+ */
+ public TrinidadDTResourceProvider() {
+ super(ID);
+ addSkin(createSkin(SKIN_MINIMAL, STYLESHEET_MINIMAL, true));
+ addSkin(createSkin(SKIN_SIMPLE, STYLESHEET_SIMPLE, false));
+ }
+
+ private DefaultDTSkin createSkin(String name, String relativePath, boolean isDefault) {
+ DefaultDTSkin skin = null;
+ URL url = this.getClass().getResource(relativePath);
+ try {
+ url = FileLocator.toFileURL(url);
+ skin = new DefaultDTSkin(name, Collections.singletonList(url));
+ skin.setDefault(isDefault);
+ } catch(IOException ioe) {
+ TrinidadTagSupportActivator.logError(
+ MessageFormat.format(
+ Messages.TrinidadDTResourceProvider_StyleSheetNotLocated,
+ relativePath),
+ ioe);
+ }
+ return skin;
+ }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/messages.properties b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/messages.properties
index 41e07169f..f54e567e1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/messages.properties
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/messages.properties
@@ -25,4 +25,5 @@ SelectShuttleOperation_LinkRemoveAll=Remove All
SelectShuttleOperation_LinkTop=Top
SelectShuttleOperation_LinkUp=Up
SelectShuttleOperation_LinkDown=Down
-SelectShuttleOperation_LinkBottom=Bottom \ No newline at end of file
+SelectShuttleOperation_LinkBottom=Bottom
+TrinidadDTResourceProvider_StyleSheetNotLocated=StyleSheet at relative path "{0}" could not be located \ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/META-INF/MANIFEST.MF b/jsf/plugins/org.eclipse.jst.pagedesigner/META-INF/MANIFEST.MF
index 01abaf0f5..99098bcfc 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/META-INF/MANIFEST.MF
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/META-INF/MANIFEST.MF
@@ -80,6 +80,7 @@ Export-Package: org.eclipse.jst.pagedesigner;x-internal:=true,
org.eclipse.jst.pagedesigner.dtmanager.dtinfo,
org.eclipse.jst.pagedesigner.dtmanager.dtinfo.internal.impl;x-internal:=true,
org.eclipse.jst.pagedesigner.dtmanager.dtinfo.internal.util;x-internal:=true,
+ org.eclipse.jst.pagedesigner.dtresourceprovider,
org.eclipse.jst.pagedesigner.editors;x-internal:=true,
org.eclipse.jst.pagedesigner.editors.actions;x-internal:=true,
org.eclipse.jst.pagedesigner.editors.pagedesigner;x-internal:=true,
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/schema/pageDesignerExtension.exsd b/jsf/plugins/org.eclipse.jst.pagedesigner/schema/pageDesignerExtension.exsd
index 7096161f0..a3ddcd40a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/schema/pageDesignerExtension.exsd
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/schema/pageDesignerExtension.exsd
@@ -25,6 +25,7 @@
<element ref="linkCreator" minOccurs="0" maxOccurs="unbounded"/>
<element ref="tagAttributeCellEditorFactory" minOccurs="0" maxOccurs="unbounded"/>
<element ref="tagTransformOperation" minOccurs="0" maxOccurs="unbounded"/>
+ <element ref="dtResourceProvider" minOccurs="0" maxOccurs="unbounded"/>
<element ref="propertyPageFactory" minOccurs="0" maxOccurs="unbounded"/>
<element ref="paletteFactory" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
@@ -191,6 +192,33 @@ The exception to this rule is that if the reference is not plugin-qualified, the
</complexType>
</element>
+ <element name="dtResourceProvider">
+ <annotation>
+ <documentation>
+ Defines a Design-Time Resource Provider class for a specific ID.
+ </documentation>
+ </annotation>
+ <complexType>
+ <attribute name="id" type="string" use="required">
+ <annotation>
+ <documentation>
+ The ID of the Design-Time Resource Provider class. This is used to map usage of each DT Resource Provider class to a specific page neing edited, and so is typically the NS URI of the tag library for which the class provides resources.
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+ Class extending &lt;code&gt;org.eclipse.jst.pagedesigner.dtresourceprovider.AbstractDTResourceProvider&lt;/code&gt;.
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn="org.eclipse.jst.pagedesigner.dtresourceprovider.AbstractDTResourceProvider:"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
<element name="propertyPageFactory">
<complexType>
<attribute name="class" type="string" use="required">
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/IJMTConstants.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/IJMTConstants.java
index 6b6acb6ed..7dbd5b84c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/IJMTConstants.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/IJMTConstants.java
@@ -59,6 +59,11 @@ public interface IJMTConstants {
public static final String EXTENSION_POINT_CMREGISTRY = "cmRegistry"; //$NON-NLS-1$
/**
+ * local name of DT resource provider extension
+ */
+ public static final String DT_RESOURCE_PROVIDER = "dtResourceProvider"; //$NON-NLS-1$
+
+ /**
* local name of local drop handler extension
*/
public static final String LOCAL_DROP_HANDLER = "localDropHandler"; //$NON-NLS-1$
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/JMTResources.properties b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/JMTResources.properties
index 33b4fef7b..b8262cb8c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/JMTResources.properties
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/JMTResources.properties
@@ -237,6 +237,15 @@ Warning.TransformOperationFactory.UnknownOperationID=Unknown operation ID specif
Warning.TransformOperationFactory.TooFewParameters=Too few parameters specified in metadata for operation ("{0}")
Warning.TransformOperationFactory.RegistryError=Unable to read "{0}" extension registry
+Warning.DTResourceProviderFactory.RegistryError=Unable to read "{0}" extension registry
+Warning.DTResourceProviderFactory.ClassNotFound=DT resource provider class "{0}" specified for id "{1}" could not be found
+
+Warning.ProviderClassMap.IllegalAccess=DT resource provider class "{0}" specified for id "{1}" could not be legally accessed
+Warning.ProviderClassMap.Instantiation=DT resource provider class "{0}" specified for id "{1}" could not be instantiated
+Warning.ProviderClassMap.NotIDTResourceProvider=DT resource provider class "{0}" is not correct type (must be IDTResourceProvider)
+
+Warning.DefaultDTSkin.FailureLoadingStyleSheet=DefaultDTSkin "{0}" failed to load a StyleSheet for the URL "{1}"
+
#Errors relating to ITagCreator et al.
Error.TagCreatorMustBeOfType=ITagCreator instances must be of type {0}.
Error.ProblemLoadingExtensionPoint=Problem loading ITagCreatorFactory extension Point
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/CSSTempUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/CSSTempUtil.java
index 09fee0efc..34ef43248 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/CSSTempUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/CSSTempUtil.java
@@ -15,12 +15,15 @@ import java.util.ArrayList;
import java.util.List;
import org.eclipse.jst.pagedesigner.IHTMLConstants;
+import org.eclipse.jst.pagedesigner.dtresourceprovider.DTSkinManager;
+import org.eclipse.jst.pagedesigner.dtresourceprovider.IDTSkin;
import org.eclipse.wst.css.core.internal.provisional.adapters.IStyleSheetAdapter;
import org.eclipse.wst.css.core.internal.provisional.adapters.IStyleSheetListAdapter;
import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter;
import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.stylesheets.StyleSheet;
@@ -72,6 +75,18 @@ public final class CSSTempUtil {
parent = parent.getParentNode();
}
addStyleSheet(rootEle, styleSheets);
+
+ //add stylesheets from any active IDTSkin instances
+ if (element instanceof IDOMNode) {
+ List<IDTSkin> dtSkins =
+ DTSkinManager.getInstance((IDOMNode)element).getCurrentSkins();
+ for (IDTSkin dtSkin: dtSkins) {
+ if (dtSkin != null) {
+ styleSheets.addAll(dtSkin.getStyleSheets());
+ }
+ }
+ }
+
return styleSheets;
}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSFigure.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSFigure.java
index a6c5289e0..580b34726 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSFigure.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSFigure.java
@@ -28,6 +28,7 @@ import org.eclipse.jst.pagedesigner.css2.style.DefaultStyle;
import org.eclipse.jst.pagedesigner.css2.style.ITagEditInfo;
import org.eclipse.jst.pagedesigner.css2.widget.BorderUtil;
import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.RGB;
/**
@@ -332,6 +333,14 @@ public class CSSFigure extends FlowFigure implements ICSSFigure {
}
g.restoreState();
+ //handle background-image
+ Object bgImage = getCSSStyle().getStyleProperty(ICSSPropertyID.ATTR_BACKGROUND_IMAGE);
+ if (bgImage instanceof Image) {
+ g.setClip(bounds);
+ g.drawImage((Image)bgImage, bounds.x, bounds.y);
+ g.restoreState();
+ }
+
LayoutManager layout = getLayoutManager();
if (layout instanceof ICSSPainter) {
if (useLocalCoordinates()) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BackgroundImageMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BackgroundImageMeta.java
new file mode 100644
index 000000000..7c205c24e
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BackgroundImageMeta.java
@@ -0,0 +1,182 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Ian Trimble - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.css2.property;
+
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.jst.pagedesigner.IHTMLConstants;
+import org.eclipse.jst.pagedesigner.PDPlugin;
+import org.eclipse.jst.pagedesigner.css2.ICSSStyle;
+import org.eclipse.jst.pagedesigner.utils.DOMUtil;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
+import org.w3c.dom.Element;
+import org.w3c.dom.css.CSSValue;
+
+/**
+ * Provides metadata for the "background-image" CSS property.
+ *
+ * @author Ian Trimble - Oracle
+ */
+public class BackgroundImageMeta extends CSSPropertyMeta {
+
+ private static final String[] _keywords = {ICSSPropertyID.VAL_NONE};
+
+ /**
+ * Construct an instance.
+ */
+ public BackgroundImageMeta() {
+ super(false, ICSSPropertyID.VAL_NONE);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jst.pagedesigner.css2.property.CSSPropertyMeta#calculateCSSValueResult(org.w3c.dom.css.CSSValue, java.lang.String, org.eclipse.jst.pagedesigner.css2.ICSSStyle)
+ */
+ @Override
+ public Object calculateCSSValueResult(CSSValue value, String propertyName,
+ ICSSStyle style) {
+ Object ret = null;
+ String valueText = value.getCssText();
+ if (valueText != null && valueText.length() > 0) {
+ valueText = stripURLSyntax(valueText);
+ ret = getImage(valueText, null);
+ }
+ if (ret == null) {
+ ret = getInitialValue(propertyName, style);
+ }
+ return ret;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jst.pagedesigner.css2.property.CSSPropertyMeta#calculateHTMLAttributeOverride(org.w3c.dom.Element, java.lang.String, java.lang.String, org.eclipse.jst.pagedesigner.css2.ICSSStyle)
+ */
+ @Override
+ public Object calculateHTMLAttributeOverride(Element element,
+ String htmltag, String propertyName, ICSSStyle style) {
+ Image image = null;
+ if (
+ element != null &&
+ element.getNodeName() != null &&
+ element.getNodeName().equalsIgnoreCase(IHTMLConstants.TAG_BODY)) {
+ if (ICSSPropertyID.ATTR_BACKGROUND_IMAGE.equalsIgnoreCase(propertyName)) {
+ String attrValue = DOMUtil.getAttributeIgnoreCase(element, IHTMLConstants.ATTR_BACKGROUND);
+ if (attrValue != null && attrValue.trim().length() > 0) {
+ image = getImage(attrValue.trim(), element);
+ }
+ }
+ }
+ return image;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jst.pagedesigner.css2.property.CSSPropertyMeta#getKeywordValues()
+ */
+ @Override
+ protected String[] getKeywordValues() {
+ return _keywords;
+ }
+
+ private String stripURLSyntax(String input) {
+ String output = null;
+ if (input != null) {
+ //strip "url(...)"
+ int startPos = input.indexOf("url(") + 4; //$NON-NLS-1
+ if (startPos > -1 && startPos < input.length() - 1) {
+ int endPos = input.indexOf(')', startPos);
+ if (endPos > startPos) {
+ String insideURL = input.substring(startPos, endPos).trim();
+ //strip double-quotes
+ if (insideURL.startsWith("\"") && insideURL.endsWith("\"")) { //$NON-NLS-1 //$NON-NLS-2
+ output = insideURL.substring(1, insideURL.length() - 1);
+ //strip single-quotes
+ } else if (insideURL.startsWith("'") && insideURL.endsWith("'")) { //$NON-NLS-1 //$NON-NLS-2
+ output = insideURL.substring(1, insideURL.length() - 1);
+ } else {
+ output = insideURL;
+ }
+ }
+ }
+ }
+ return output != null ? output : input;
+ }
+
+ /* Image instances returned from this method should not be disposed because
+ * they are cached in the plug-in's ImageRegistry and will be disposed of
+ * by the registry.
+ */
+ private Image getImage(String imagePath, Element element) {
+ Image image = null;
+ if (imagePath != null && imagePath.length() > 0) {
+ ImageRegistry registry = PDPlugin.getDefault().getImageRegistry();
+ image = registry.get(imagePath);
+ if (image == null) {
+ try {
+ URL imageURL = new URL(imagePath);
+ ImageDescriptor imageDescriptor = ImageDescriptor.createFromURL(imageURL);
+ image = imageDescriptor.createImage();
+ if (image != null) {
+ registry.put(imagePath, image);
+ }
+ } catch(MalformedURLException mue) {
+ //attempt to resolve as relative to document
+ if (element instanceof IDOMNode) {
+ IDOMModel model = ((IDOMNode)element).getModel();
+ if (model != null) {
+ String baseLocation = model.getBaseLocation();
+ if (baseLocation != null && baseLocation.length() > 0) {
+ IWorkspaceRoot wsRoot = ResourcesPlugin.getWorkspace().getRoot();
+ if (wsRoot != null) {
+ IResource jspRes = wsRoot.findMember(baseLocation);
+ if (jspRes != null) {
+ IContainer jspFolder = jspRes.getParent();
+ if (jspFolder != null) {
+ IResource imageRes = jspFolder.findMember(imagePath);
+ if (imageRes != null) {
+ URI imageURI = imageRes.getLocationURI();
+ if (imageURI != null) {
+ try {
+ URL imageURL = imageURI.toURL();
+ ImageDescriptor imageDescriptor = ImageDescriptor.createFromURL(imageURL);
+ image = imageDescriptor.createImage();
+ if (image != null) {
+ registry.put(imagePath, image);
+ }
+ } catch(MalformedURLException mue2) {
+ //ignore - what else can be done?
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ } else if (image.isDisposed()) {
+ //shouldn't be able to get here from there, but...just in case
+ registry.remove(imagePath);
+ image = getImage(imagePath, element);
+ }
+ }
+ return image;
+ }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CSSMetaRegistry.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CSSMetaRegistry.java
index 670f3ddc2..e6582bf1f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CSSMetaRegistry.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CSSMetaRegistry.java
@@ -27,13 +27,12 @@ public class CSSMetaRegistry {
}
/**
- * class initiallizer
+ * class initializer
*/
private void initialize() {
_map.put(ICSSPropertyID.ATTR_DISPLAY, new DisplayMeta());
_map.put(ICSSPropertyID.ATTR_TEXTALIGN, new TextAlignMeta());
- _map.put(ICSSPropertyID.ATTR_HORIZONTAL_ALIGN,
- new HorizontalAlignMeta());
+ _map.put(ICSSPropertyID.ATTR_HORIZONTAL_ALIGN, new HorizontalAlignMeta());
_map.put(ICSSPropertyID.ATTR_TEXTDECORATION, new TextDecorationMeta());
_map.put(ICSSPropertyID.ATTR_WHITESPACE, new WhiteSpaceMeta());
_map.put(ICSSPropertyID.ATTR_WIDTH, new WidthMeta());
@@ -43,23 +42,17 @@ public class CSSMetaRegistry {
_map.put(ICSSPropertyID.ATTR_BORDER_LEFT_WIDTH, new BorderWidthMeta());
_map.put(ICSSPropertyID.ATTR_BORDER_RIGHT_WIDTH, new BorderWidthMeta());
- _map
- .put(ICSSPropertyID.ATTR_BORDER_BOTTOM_WIDTH,
- new BorderWidthMeta());
+ _map.put(ICSSPropertyID.ATTR_BORDER_BOTTOM_WIDTH, new BorderWidthMeta());
_map.put(ICSSPropertyID.ATTR_BORDER_TOP_WIDTH, new BorderWidthMeta());
_map.put(ICSSPropertyID.ATTR_BORDER_LEFT_STYLE, new BorderStyleMeta());
_map.put(ICSSPropertyID.ATTR_BORDER_RIGHT_STYLE, new BorderStyleMeta());
- _map
- .put(ICSSPropertyID.ATTR_BORDER_BOTTOM_STYLE,
- new BorderStyleMeta());
+ _map.put(ICSSPropertyID.ATTR_BORDER_BOTTOM_STYLE, new BorderStyleMeta());
_map.put(ICSSPropertyID.ATTR_BORDER_TOP_STYLE, new BorderStyleMeta());
_map.put(ICSSPropertyID.ATTR_BORDER_LEFT_COLOR, new BorderColorMeta());
_map.put(ICSSPropertyID.ATTR_BORDER_RIGHT_COLOR, new BorderColorMeta());
- _map
- .put(ICSSPropertyID.ATTR_BORDER_BOTTOM_COLOR,
- new BorderColorMeta());
+ _map.put(ICSSPropertyID.ATTR_BORDER_BOTTOM_COLOR, new BorderColorMeta());
_map.put(ICSSPropertyID.ATTR_BORDER_TOP_COLOR, new BorderColorMeta());
_map.put(ICSSPropertyID.ATTR_PADDING_LEFT, new PaddingWidthMeta());
@@ -77,8 +70,8 @@ public class CSSMetaRegistry {
_map.put(ICSSPropertyID.ATTR_FONT_STYLE, new FontStyleMeta());
_map.put(ICSSPropertyID.ATTR_FONT_WEIGHT, new FontWeightMeta());
- _map.put(ICSSPropertyID.ATTR_BACKGROUND_COLOR,
- new BackgroundColorMeta());
+ _map.put(ICSSPropertyID.ATTR_BACKGROUND_COLOR, new BackgroundColorMeta());
+ _map.put(ICSSPropertyID.ATTR_BACKGROUND_IMAGE, new BackgroundImageMeta());
_map.put(ICSSPropertyID.ATTR_COLOR, new ColorPropertyMeta());
_map.put(ICSSPropertyID.ATTR_TEXTCOLOR, new ColorPropertyMeta());
@@ -86,14 +79,10 @@ public class CSSMetaRegistry {
_map.put(ICSSPropertyID.ATTR_BORDER_SPACING, new BorderSpacingMeta());
_map.put(ICSSPropertyID.ATTR_LIST_STYLE_TYPE, new ListStyleTypeMeta());
- _map
- .put(ICSSPropertyID.ATTR_LIST_STYLE_IMAGE,
- new ListStyleImageMeta());
- _map.put(ICSSPropertyID.ATTR_LIST_STYLE_POSITION,
- new ListStylePositionMeta());
+ _map.put(ICSSPropertyID.ATTR_LIST_STYLE_IMAGE, new ListStyleImageMeta());
+ _map.put(ICSSPropertyID.ATTR_LIST_STYLE_POSITION, new ListStylePositionMeta());
_map.put(ICSSPropertyID.ATTR_COUNTER_RESET, new CounterResetMeta());
- _map.put(ICSSPropertyID.ATTR_COUNTER_INCREMENT,
- new CounterIncrementMeta());
+ _map.put(ICSSPropertyID.ATTR_COUNTER_INCREMENT, new CounterIncrementMeta());
_map.put(ICSSPropertyID.ATTR_TOP, new PositionOffsetMeta());
_map.put(ICSSPropertyID.ATTR_RIGHT, new PositionOffsetMeta());
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ICSSPropertyID.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ICSSPropertyID.java
index f12d5b595..4930fabf1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ICSSPropertyID.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ICSSPropertyID.java
@@ -183,6 +183,11 @@ public interface ICSSPropertyID {
/**
* css style attribute
*/
+ public static final String ATTR_BACKGROUND_IMAGE = "background-image"; //$NON-NLS-1$
+
+ /**
+ * css style attribute
+ */
public static final String ATTR_COLOR = "color"; //$NON-NLS-1$
/**
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/AbstractDTResourceProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/AbstractDTResourceProvider.java
new file mode 100644
index 000000000..125b07787
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/AbstractDTResourceProvider.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Ian Trimble - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.dtresourceprovider;
+
+/**
+ * Abstract implementation of IDTResourceProvider that is intended for client
+ * extension.
+ * <br>
+ * <p><b>Provisional API - subject to change</b></p>
+ *
+ * @author Ian Trimble - Oracle
+ */
+public abstract class AbstractDTResourceProvider implements IDTResourceProvider {
+
+ /**
+ * The ID of this provider.
+ */
+ protected String id;
+
+ /**
+ * Constructs an instance.
+ *
+ * @param id The ID of this provider.
+ */
+ public AbstractDTResourceProvider(String id) {
+ setId(id);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jst.pagedesigner.dtresourceprovider.IDTResourceProvider#getId()
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ * Sets the ID of this provider.
+ *
+ * @param id The ID of this provider.
+ */
+ public void setId(String id) {
+ this.id = id;
+ }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/AbstractDTSkin.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/AbstractDTSkin.java
new file mode 100644
index 000000000..ef53c157c
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/AbstractDTSkin.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Ian Trimble - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.dtresourceprovider;
+
+/**
+ * Abstract implementation of IDTSkin that is intended for client extension.
+ * <br>
+ * <p><b>Provisional API - subject to change</b></p>
+ *
+ * @author Ian Trimble - Oracle
+ */
+public abstract class AbstractDTSkin implements IDTSkin {
+
+ /**
+ * The human-readable name of the skin.
+ */
+ protected String name;
+
+ /**
+ * true if this instance is considered the default for its provider.
+ */
+ protected boolean isDefault;
+
+ /**
+ * Constructs an instance.
+ *
+ * @param name The human-readable name of the skin.
+ */
+ public AbstractDTSkin(String name) {
+ this(name, false);
+ }
+
+ /**
+ * Constructs an instance.
+ *
+ * @param name The human-readable name of the skin.
+ * @param isDefault true if this instance is considered the default for its
+ * provider.
+ */
+ public AbstractDTSkin(String name, boolean isDefault) {
+ setName(name);
+ setDefault(isDefault);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jst.pagedesigner.dtresourceprovider.IDTSkin#getName()
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Sets the human-readable name of the skin.
+ *
+ * @param name The human-readable name of the skin.
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jst.pagedesigner.dtresourceprovider.IDTSkin#isDefault()
+ */
+ public boolean isDefault() {
+ return isDefault;
+ }
+
+ /**
+ * Sets if this instance is considered the default for its provider.
+ *
+ * @param isDefault true if this instance is considered the default for its
+ * provider.
+ */
+ public void setDefault(boolean isDefault) {
+ this.isDefault = isDefault;
+ }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/DTResourceProviderFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/DTResourceProviderFactory.java
new file mode 100644
index 000000000..6dccfd102
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/DTResourceProviderFactory.java
@@ -0,0 +1,172 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Ian Trimble - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.dtresourceprovider;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.InvalidRegistryObjectException;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
+import org.eclipse.jst.jsp.core.taglib.ITaglibDescriptor;
+import org.eclipse.jst.jsp.core.taglib.ITaglibRecord;
+import org.eclipse.jst.jsp.core.taglib.TaglibIndex;
+import org.eclipse.jst.pagedesigner.IJMTConstants;
+import org.eclipse.jst.pagedesigner.PDPlugin;
+import org.eclipse.jst.pagedesigner.utils.StructuredModelUtil;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
+import org.osgi.framework.Bundle;
+
+/**
+ * Factory responsible for producing {@link IDTResourceProvider} instances from
+ * <code>org.eclipse.jst.pagedesigner.pageDesignerExtension.dtResourceProvider</code>
+ * extensions.
+ * <br>
+ * <p><b>Provisional API - subject to change</b></p>
+ *
+ * @author Ian Trimble - Oracle
+ */
+public class DTResourceProviderFactory {
+
+ private static DTResourceProviderFactory instance;
+ private ProviderClassMap providerClassMap;
+ private Map<IProject, List<IDTResourceProvider>> providerMap;
+ private Logger log = PDPlugin.getLogger(DTResourceProviderFactory.class);
+
+ private DTResourceProviderFactory() {
+ //singleton - no external instantiation
+ providerClassMap = new ProviderClassMap();
+ loadExtensions();
+ providerMap = new HashMap<IProject, List<IDTResourceProvider>>();
+ }
+
+ /**
+ * Gets the singleton instance.
+ *
+ * @return The singleton instance.
+ */
+ public static synchronized DTResourceProviderFactory getInstance() {
+ if (instance == null) {
+ instance = new DTResourceProviderFactory();
+ }
+ return instance;
+ }
+
+ /**
+ * Returns a List of IDTResourceProvider instances that are active for the
+ * specified IProject instance.
+ *
+ * @param project IProject instance for which to get the active
+ * IDTResourceProvider instances.
+ * @return A List of IDTResourceProvider instances that are active for the
+ * specified IProject instance. List may be empty, but will not be null.
+ */
+ public List<IDTResourceProvider> getActiveDTResourceProviders(IProject project) {
+ List<IDTResourceProvider> activeProviders = new ArrayList<IDTResourceProvider>();
+ if (project != null) {
+ ITaglibRecord[] taglibRecords = TaglibIndex.getAvailableTaglibRecords(project.getFullPath());
+ if (taglibRecords != null && taglibRecords.length > 0) {
+ for (ITaglibRecord taglibRecord: taglibRecords) {
+ ITaglibDescriptor taglibDescriptor = taglibRecord.getDescriptor();
+ if (taglibDescriptor != null) {
+ String taglibURI = taglibDescriptor.getURI();
+ if (taglibURI != null) {
+ activeProviders.addAll(getDTResourceProviders(project, taglibURI));
+ }
+ }
+ }
+ }
+ }
+ return Collections.unmodifiableList(activeProviders);
+ }
+
+ /**
+ * Convenience method to determine IProject instance from the specified
+ * IDOMNode instance and then call {@link #getActiveDTResourceProviders(IProject)}.
+ *
+ * @param domNode IDOMNode instance from which to determine IProject
+ * instance.
+ * @return A List of IDTResourceProvider instances that are active for the
+ * specified IDOMNode instance's IProject instance. List may be empty, but
+ * will not be null.
+ */
+ public List<IDTResourceProvider> getActiveDTResourceProviders(IDOMNode domNode) {
+ IDOMModel domModel = domNode.getModel();
+ IProject project = null;
+ if (domModel != null) {
+ project = StructuredModelUtil.getProjectFor(domModel);
+ }
+ return getActiveDTResourceProviders(project);
+ }
+
+ /**
+ * Returns a List of IDTResourceProvider instances for the specified
+ * IProject instance and id.
+ *
+ * @param project IProject instance for which a List of IDTResourceProviders
+ * is being requested.
+ * @param id Identifier for which a List of IDTResourceProvider instances is
+ * being requested.
+ * @return A List of IDTResourceProvider instances for the specified
+ * IProject instance and id. List may be empty, but will not be null.
+ */
+ public synchronized List<IDTResourceProvider> getDTResourceProviders(IProject project, String id) {
+ List<IDTResourceProvider> providers = new ArrayList<IDTResourceProvider>();
+ List<IDTResourceProvider> projectProviders = providerMap.get(project);
+ if (projectProviders == null) {
+ projectProviders = providerClassMap.createInstances();
+ providerMap.put(project, projectProviders);
+ }
+ for (IDTResourceProvider curProvider: projectProviders) {
+ if (curProvider.getId().equals(id)) {
+ providers.add(curProvider);
+ }
+ }
+ return providers;
+ }
+
+ private void loadExtensions() {
+ try {
+ final IExtensionPoint extPoint = Platform.getExtensionRegistry().getExtensionPoint(PDPlugin.getPluginId(), IJMTConstants.EXTENSION_POINT_PAGEDESIGNER);
+ final IExtension[] extensions = extPoint.getExtensions();
+ for (int i = 0; i < extensions.length; i++) {
+ final IExtension extension = extensions[i];
+ final IConfigurationElement[] confElements = extension.getConfigurationElements();
+ for (int j = 0; j < confElements.length; j++) {
+ final IConfigurationElement confElement = confElements[j];
+ if (confElement.getName().equals(IJMTConstants.DT_RESOURCE_PROVIDER)) {
+ final String id = confElement.getAttribute("id"); //$NON-NLS-1$
+ final String providerClassName = confElement.getAttribute("class"); //$NON-NLS-1$
+ final Bundle bundle = Platform.getBundle(confElement.getContributor().getName());
+ if (bundle != null) {
+ try {
+ providerClassMap.add(id, bundle.loadClass(providerClassName));
+ } catch(ClassNotFoundException cnfe) {
+ log.error("Warning.DTResourceProviderFactory.ClassNotFound", providerClassName, id, cnfe); //$NON-NLS-1$
+ }
+ }
+ }
+ }
+ }
+ } catch(InvalidRegistryObjectException iroe) {
+ log.error("Warning.DTResourceProviderFactory.RegistryError", PDPlugin.getPluginId() + IJMTConstants.EXTENSION_POINT_PAGEDESIGNER + "." + IJMTConstants.DT_RESOURCE_PROVIDER, iroe); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/DTSkinManager.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/DTSkinManager.java
new file mode 100644
index 000000000..77131cac4
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/DTSkinManager.java
@@ -0,0 +1,185 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Ian Trimble - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.dtresourceprovider;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jst.pagedesigner.utils.StructuredModelUtil;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
+
+/**
+ * Manages IDTSkin instances and provides skin-related services.
+ * <br>
+ * <p><b>Provisional API - subject to change</b></p>
+ *
+ * @author Ian Trimble - Oracle
+ */
+public class DTSkinManager {
+
+ private static Map<IProject, DTSkinManager> dtSkinManagerMap =
+ new HashMap<IProject, DTSkinManager>();
+
+ private Map<String, IDTSkin> currentDTSkinMap;
+
+ private IProject project;
+
+ /**
+ * Constructs an instance (no public instantiation).
+ *
+ * @param project IProject instance for which this instance applies.
+ */
+ private DTSkinManager(IProject project) {
+ this.project = project;
+ currentDTSkinMap = new HashMap<String, IDTSkin>();
+ }
+
+ /**
+ * Gets a DTSkinManager instance for the specified project instance.
+ *
+ * @param aProject IProject instance for which a DTSkinManager is being
+ * requested.
+ * @return A DTSkinManager instance for the specified project instance.
+ */
+ public static synchronized DTSkinManager getInstance(IProject aProject) {
+ DTSkinManager dtSkinManager = dtSkinManagerMap.get(aProject);
+ if (dtSkinManager == null) {
+ dtSkinManager = new DTSkinManager(aProject);
+ dtSkinManagerMap.put(aProject, dtSkinManager);
+ }
+ return dtSkinManager;
+ }
+
+ /**
+ * Gets a DTSkinManager instance for the IProject instance associated with
+ * the specified IDOMNode instance.
+ *
+ * @param domNode IDOMNode instance for which a DTSkinManager is being
+ * requested.
+ * @return A DTSkinManager instance for the IProject instance associated
+ * with the specified IDOMNode instance.
+ */
+ public static DTSkinManager getInstance(IDOMNode domNode) {
+ IDOMModel domModel = domNode.getModel();
+ IProject aProject = null;
+ if (domModel != null) {
+ aProject = StructuredModelUtil.getProjectFor(domModel);
+ }
+ return getInstance(aProject);
+ }
+
+ /**
+ * Returns a List of available IDTSkin instances.
+ *
+ * @param id ID for which to get skins.
+ * @return A List of available IDTSkin instances. List may be empty, but
+ * will not be null.
+ */
+ public List<IDTSkin> getSkins(String id) {
+ List<IDTSkin> dtSkins = new ArrayList<IDTSkin>();
+ List<IDTResourceProvider> dtResourceProviders =
+ DTResourceProviderFactory.getInstance().getActiveDTResourceProviders(project);
+ for (IDTResourceProvider dtResourceProvider: dtResourceProviders) {
+ if (dtResourceProvider.getId().equals(id)) {
+ dtSkins.addAll(dtResourceProvider.getSkins());
+ }
+ }
+ return dtSkins;
+ }
+
+ /**
+ * Returns the current IDTSkin instance for the specified ID.
+ *
+ * @param id The ID (typically nsURI) for which the current IDTSkin instance
+ * is being requested.
+ * @return The current IDTSkin instance for the specified ID. May return
+ * null if there is no current IDTSkin instance for the specified ID.
+ */
+ public IDTSkin getCurrentSkin(String id) {
+ IDTSkin dtSkin = currentDTSkinMap.get(id);
+ if (dtSkin == null) {
+ dtSkin = getDefaultSkin(id);
+ setCurrentSkin(id, dtSkin);
+ }
+ return dtSkin;
+ }
+
+ /**
+ * Sets the current IDTSkin instance for the specified ID.
+ *
+ * @param id The ID (typically nsURI) for which the current IDTSkin instance
+ * is being set.
+ * @param dtSkin The current IDTSkin instance to be set for the specified ID.
+ */
+ public void setCurrentSkin(String id, IDTSkin dtSkin) {
+ if (id != null) {
+ IDTSkin existingDTSkin = currentDTSkinMap.get(id);
+ if (existingDTSkin != null) {
+ existingDTSkin.releaseResources();
+ }
+ if (dtSkin != null) {
+ currentDTSkinMap.put(id, dtSkin);
+ } else {
+ currentDTSkinMap.remove(id);
+ }
+ }
+ }
+
+ /**
+ * Returns a List of all current DTSkin instances (one per id).
+ *
+ * @return A List of all current DTSkin instances (one per id).
+ */
+ public List<IDTSkin> getCurrentSkins() {
+ List<IDTSkin> currentDTSkins = new ArrayList<IDTSkin>();
+ List <IDTResourceProvider> dtResourceProviders =
+ DTResourceProviderFactory.getInstance().getActiveDTResourceProviders(project);
+ for (IDTResourceProvider dtResourceProvider: dtResourceProviders) {
+ IDTSkin dtSkin = getCurrentSkin(dtResourceProvider.getId());
+ if (dtSkin != null && !currentDTSkins.contains(dtSkin)) {
+ currentDTSkins.add(dtSkin);
+ }
+ }
+ return Collections.unmodifiableList(currentDTSkins);
+ }
+
+ /**
+ * Returns the default IDTSkin instance for the specified ID.
+ *
+ * @param id The ID (typically nsURI) for which the default IDTSkin instance
+ * is being requested.
+ * @return The default IDTSkin instance for the specified ID. May return
+ * null if there is no default IDTSkin instance for the specified ID.
+ */
+ public IDTSkin getDefaultSkin(String id) {
+ IDTSkin firstDTSkin = null;
+ IDTSkin defaultDTSkin = null;
+ for (IDTSkin dtSkin: getSkins(id)) {
+ if (firstDTSkin == null) {
+ firstDTSkin = dtSkin;
+ }
+ if (dtSkin.isDefault()) {
+ defaultDTSkin = dtSkin;
+ break;
+ }
+ }
+ if (defaultDTSkin == null) {
+ defaultDTSkin = firstDTSkin;
+ }
+ return defaultDTSkin;
+ }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/DefaultDTResourceProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/DefaultDTResourceProvider.java
new file mode 100644
index 000000000..8d0a54bd3
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/DefaultDTResourceProvider.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Ian Trimble - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.dtresourceprovider;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Concrete implementation of IDTResourceProvider.
+ * <br>
+ * <p><b>Provisional API - subject to change</b></p>
+ *
+ * @author Ian Trimble - Oracle
+ */
+public class DefaultDTResourceProvider extends AbstractDTResourceProvider {
+
+ /**
+ * List of IDTSkin instances.
+ */
+ protected List<IDTSkin> skins;
+
+ /**
+ * Constructs an instance.
+ *
+ * @param id The ID of this provider.
+ */
+ public DefaultDTResourceProvider(String id) {
+ super(id);
+ skins = new ArrayList<IDTSkin>();
+ }
+
+ /**
+ * Constructs an instance.
+ *
+ * @param id The ID of this provider.
+ * @param skins The List of IDTSkin instances.
+ */
+ public DefaultDTResourceProvider(String id, List<IDTSkin> skins) {
+ super(id);
+ if (skins != null) {
+ this.skins = skins;
+ } else {
+ this.skins = new ArrayList<IDTSkin>();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jst.pagedesigner.dtresourceprovider.IDTResourceProvider#getSkins()
+ */
+ public List<IDTSkin> getSkins() {
+ return Collections.unmodifiableList(skins);
+ }
+
+ /**
+ * Adds the specified IDTSkin instance to the List of IDTSkin instances.
+ *
+ * @param skin IDTSkin instance to be added.
+ * @return true (as per the general contract of the Collection.add method).
+ */
+ public boolean addSkin(IDTSkin skin) {
+ boolean ret = false;
+ if (skin != null) {
+ ret = skins.add(skin);
+ }
+ return ret;
+ }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/DefaultDTSkin.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/DefaultDTSkin.java
new file mode 100644
index 000000000..e6baa46e8
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/DefaultDTSkin.java
@@ -0,0 +1,135 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Ian Trimble - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.dtresourceprovider;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
+import org.eclipse.jst.jsf.common.ui.internal.utils.ResourceUtils;
+import org.eclipse.jst.pagedesigner.PDPlugin;
+import org.eclipse.wst.css.core.internal.provisional.document.ICSSModel;
+import org.eclipse.wst.sse.core.StructuredModelManager;
+import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
+import org.w3c.dom.stylesheets.StyleSheet;
+
+/**
+ * Concrete implementation of AbstractDTSkin.
+ *
+ * @author Ian Trimble - Oracle
+ */
+public class DefaultDTSkin extends AbstractDTSkin {
+
+ private List<URL> styleSheetURLs;
+ private List<StyleSheet> styleSheets;
+ private List<IStructuredModel> models;
+ private Logger log = PDPlugin.getLogger(DefaultDTSkin.class);
+
+ /**
+ * Constructs an instance.
+ *
+ * @param name The human-readable name of the skin.
+ */
+ public DefaultDTSkin(String name) {
+ super(name);
+ }
+
+ /**
+ * Constructs an instance.
+ *
+ * @param name The human-readable name of the skin.
+ * @param isDefault true if this instance is considered the default for its
+ * provider.
+ */
+ public DefaultDTSkin(String name, boolean isDefault) {
+ super(name, isDefault);
+ }
+
+ /**
+ * Constructs an instance.
+ *
+ * @param name The human-readable name of the skin.
+ * @param styleSheetURLs The List of URL instances that provide an absolute
+ * reference to the stylesheets.
+ */
+ public DefaultDTSkin(String name, List<URL> styleSheetURLs) {
+ this(name);
+ this.styleSheetURLs = styleSheetURLs;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jst.pagedesigner.dtresourceprovider.IDTSkin#getStyleSheets()
+ */
+ public List<StyleSheet> getStyleSheets() {
+ if (styleSheets == null) {
+ styleSheets = new ArrayList<StyleSheet>();
+ if (styleSheetURLs != null) {
+ for (URL currentURL: styleSheetURLs) {
+ InputStream in = null;
+ try {
+ in = currentURL.openStream();
+ if (in != null) {
+ IStructuredModel model = StructuredModelManager.getModelManager().getModelForRead(currentURL.toExternalForm(), in, null);
+ if (model instanceof ICSSModel) {
+ styleSheets.add((StyleSheet)((ICSSModel)model).getDocument());
+ if (models == null) {
+ models = new ArrayList<IStructuredModel>();
+ }
+ models.add(model);
+ } else {
+ model.releaseFromRead();
+ }
+ }
+ } catch(IOException ioe) {
+ log.error("Warning.DefaultDTSkin.FailureLoadingStyleSheet", name, currentURL.toExternalForm(), ioe); //$NON-NLS-1$
+ } finally {
+ ResourceUtils.ensureClosed(in);
+ }
+ }
+ }
+ }
+ return Collections.unmodifiableList(styleSheets);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jst.pagedesigner.dtresourceprovider.IDTSkin#getStyleSheetLocations()
+ */
+ public List<String> getStyleSheetLocations() {
+ List<String> locations = new ArrayList<String>();
+ if (styleSheetURLs != null) {
+ for (URL currentURL: styleSheetURLs) {
+ locations.add(currentURL.toExternalForm());
+ }
+ }
+ return Collections.unmodifiableList(locations);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jst.pagedesigner.dtresourceprovider.IDTSkin#releaseResources()
+ */
+ public void releaseResources() {
+ if (models != null) {
+ for (IStructuredModel model: models) {
+ model.releaseFromRead();
+ }
+ models = null;
+ }
+ styleSheets = null;
+ }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/IDTResourceProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/IDTResourceProvider.java
new file mode 100644
index 000000000..6a5033fbf
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/IDTResourceProvider.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Ian Trimble - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.dtresourceprovider;
+
+import java.util.List;
+
+/**
+ * Defines the interface for a Design-Time (DT) "Resource Provider", which
+ * offers such services as might be expected to be provided at runtime by, for
+ * example, a resource servlet.
+ * <br>
+ * <p><b>Provisional API - subject to change</b></p>
+ *
+ * @author Ian Trimble - Oracle
+ */
+public interface IDTResourceProvider {
+
+ /**
+ * Returns this instance's ID.
+ *
+ * @return This instance's ID.
+ */
+ public String getId();
+
+ /**
+ * Returns a List of IDTSkin instances.
+ *
+ * @return A List of IDTSkin instances. May return an empty List, but should
+ * not return null.
+ */
+ public List<IDTSkin> getSkins();
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/IDTSkin.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/IDTSkin.java
new file mode 100644
index 000000000..04623da84
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/IDTSkin.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Ian Trimble - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.dtresourceprovider;
+
+import java.util.List;
+
+import org.w3c.dom.stylesheets.StyleSheet;
+
+/**
+ * Interface that a design-time (DT) "skin" must implement.
+ * <br>
+ * <p><b>Provisional API - subject to change</b></p>
+ *
+ * @author Ian Trimble - Oracle
+ */
+public interface IDTSkin {
+
+ /**
+ * Returns the human-readable name of the skin.
+ *
+ * @return The human-readable name of the skin.
+ */
+ public String getName();
+
+ /**
+ * Returns a List of StyleSheet instances.
+ *
+ * @return A List of StyleSheet instances. May return an empty List, but
+ * should not return null.
+ */
+ public List<StyleSheet> getStyleSheets();
+
+ /**
+ * Returns a List of Strings representing locations (typically URIs) of
+ * stylesheets.
+ *
+ * @return List of Strings representing locations (typically URIs) of
+ * stylesheets. May return an empty List, but should not return null.
+ */
+ public List<String> getStyleSheetLocations();
+
+ /**
+ * This will be called before an instance goes out of scope, allowing it to
+ * clean up any necessary resources. The instance should still be usable,
+ * recreating any released resources as necessary on subsequent calls to its
+ * methods.
+ */
+ public void releaseResources();
+
+ /**
+ * Returns true if this skin is considered the default for its provider.
+ *
+ * @return true if this skin is considered the default for its provider,
+ * else false.
+ */
+ public boolean isDefault();
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/ProviderClassMap.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/ProviderClassMap.java
new file mode 100644
index 000000000..f0ba4d6df
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtresourceprovider/ProviderClassMap.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Ian Trimble - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.dtresourceprovider;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
+import org.eclipse.jst.pagedesigner.PDPlugin;
+
+/**
+ * Used to Map a String ID to a List of Classes and provide convenient access.
+ * <br>
+ * <p><b>Provisional API - subject to change</b></p>
+ *
+ * @author Ian Trimble - Oracle
+ */
+public class ProviderClassMap {
+
+ private Map<String, List<Class>> idToClassListMap;
+ private Logger log = PDPlugin.getLogger(ProviderClassMap.class);
+
+ /**
+ * Creates an instance.
+ */
+ public ProviderClassMap() {
+ idToClassListMap = new HashMap<String, List<Class>>();
+ }
+
+ /**
+ * Gets the List of Classes associated with the specified ID.
+ *
+ * @param id ID for which to get the List.
+ * @return The List of Classes associated with the specified ID. List may be
+ * empty but will not be null.
+ */
+ public List<Class> get(String id) {
+ List<Class> classList = idToClassListMap.get(id);
+ if (classList == null) {
+ classList = new ArrayList<Class>();
+ idToClassListMap.put(id, classList);
+ }
+ return classList;
+ }
+
+ /**
+ * Adds the specified Class to the List associated with the specified ID.
+ *
+ * @param id ID for which to associate the specified Class.
+ * @param clazz Class to add to the List associated with the specified ID.
+ * @return true (as per the general contract of the Collection.add method).
+ */
+ public boolean add(String id, Class clazz) {
+ List<Class> classList = get(id);
+ return classList.add(clazz);
+ }
+
+ /**
+ * Instantiates all classes associated with the specified ID and returns a
+ * List of IDTResourceProvider instances.
+ *
+ * @param id ID for which to instantiate all Classes.
+ * @return a List of IDTResourceProvider instances associated with the
+ * specified ID. List may be empty but will not be null.
+ */
+ public List<IDTResourceProvider> createInstances(String id) {
+ List<IDTResourceProvider> providers = new ArrayList<IDTResourceProvider>();
+ List<Class> classList = get(id);
+ for (Class providerClass: classList) {
+ try {
+ Object objProvider = providerClass.newInstance();
+ if (objProvider instanceof IDTResourceProvider) {
+ providers.add((IDTResourceProvider)objProvider);
+ } else {
+ log.error("Warning.ProviderClassMap.NotIDTResourceProvider", providerClass.getName()); //$NON-NLS-1$
+ }
+ } catch(IllegalAccessException iae) {
+ log.error("Warning.ProviderClassMap.IllegalAccess", providerClass.getName(), id, iae); //$NON-NLS-1$
+ } catch(InstantiationException ie) {
+ log.error("Warning.ProviderClassMap.Instantiation", providerClass.getName(), id, ie); //$NON-NLS-1$
+ }
+ }
+ return providers;
+ }
+
+ /**
+ * Instantiates all registered IDTResourceProviders and returns as a List.
+ *
+ * @return List of all registered IDTResourceProviders. List may be empty
+ * but will not be null.
+ */
+ public List<IDTResourceProvider> createInstances() {
+ List<IDTResourceProvider> providers = new ArrayList<IDTResourceProvider>();
+ Set<String> idSet = idToClassListMap.keySet();
+ for (String curId: idSet) {
+ List<IDTResourceProvider> providersForCurId = createInstances(curId);
+ providers.addAll(providersForCurId);
+ }
+ return providers;
+ }
+
+}

Back to the top