summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WebContent/VAADIN/themes/base/layout/layout.scss19
-rw-r--r--WebContent/VAADIN/themes/reindeer/layouts/layouts.scss19
-rw-r--r--WebContent/VAADIN/themes/reindeer/select/select.scss1
-rw-r--r--WebContent/WEB-INF/portlet.xml4
-rw-r--r--WebContent/release-notes.html6
-rw-r--r--all/README.TXT8
-rw-r--r--all/ivy.xml2
-rwxr-xr-xbuild/ide.xml6
-rwxr-xr-xbuild/ivy-ide.xml23
-rw-r--r--client-compiled/build.xml2
-rw-r--r--client-compiler/build.xml9
-rw-r--r--client-compiler/ivy.xml3
-rw-r--r--client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java17
-rw-r--r--client/build.xml22
-rw-r--r--client/ivy.xml15
-rw-r--r--client/src/com/vaadin/client/ComponentLocator.java13
-rw-r--r--client/src/com/vaadin/client/DateTimeService.java14
-rw-r--r--client/src/com/vaadin/client/LayoutManagerIE8.java12
-rw-r--r--client/src/com/vaadin/client/MouseEventDetailsBuilder.java9
-rw-r--r--client/src/com/vaadin/client/communication/JSONSerializer.java28
-rw-r--r--client/src/com/vaadin/client/metadata/TypeDataStore.java8
-rw-r--r--client/src/com/vaadin/client/ui/AbstractComponentConnector.java4
-rw-r--r--client/src/com/vaadin/client/ui/LegacyConnector.java (renamed from client/src/com/vaadin/client/ui/Vaadin6Connector.java)2
-rw-r--r--client/src/com/vaadin/client/ui/browserframe/BrowserFrameConnector.java (renamed from client/src/com/vaadin/client/ui/embeddedbrowser/EmbeddedBrowserConnector.java)16
-rw-r--r--client/src/com/vaadin/client/ui/browserframe/VBrowserFrame.java (renamed from client/src/com/vaadin/client/ui/embeddedbrowser/VEmbeddedBrowser.java)8
-rw-r--r--client/src/com/vaadin/client/ui/combobox/ComboBoxConnector.java4
-rw-r--r--client/src/com/vaadin/client/ui/combobox/VFilterSelect.java14
-rw-r--r--client/src/com/vaadin/client/ui/datefield/AbstractDateFieldConnector.java35
-rw-r--r--client/src/com/vaadin/client/ui/datefield/InlineDateFieldConnector.java7
-rw-r--r--client/src/com/vaadin/client/ui/datefield/PopupDateFieldConnector.java7
-rw-r--r--client/src/com/vaadin/client/ui/datefield/TextualDateConnector.java3
-rw-r--r--client/src/com/vaadin/client/ui/datefield/VCalendarPanel.java51
-rw-r--r--client/src/com/vaadin/client/ui/datefield/VDateField.java35
-rw-r--r--client/src/com/vaadin/client/ui/datefield/VDateFieldCalendar.java19
-rw-r--r--client/src/com/vaadin/client/ui/datefield/VPopupCalendar.java16
-rw-r--r--client/src/com/vaadin/client/ui/datefield/VTextualDate.java80
-rw-r--r--client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java45
-rw-r--r--client/src/com/vaadin/client/ui/splitpanel/VAbstractSplitPanel.java43
-rw-r--r--client/src/com/vaadin/client/ui/splitpanel/VSplitPanelHorizontal.java4
-rw-r--r--client/src/com/vaadin/client/ui/splitpanel/VSplitPanelVertical.java4
-rw-r--r--client/src/com/vaadin/client/ui/tree/TreeConnector.java7
-rw-r--r--client/src/com/vaadin/client/ui/tree/VTree.java22
-rw-r--r--common.xml2
-rw-r--r--gwt-files.xml9
-rw-r--r--ivysettings.xml2
-rw-r--r--pom-template.xml155
-rw-r--r--server/ivy.xml6
-rw-r--r--server/src/com/vaadin/LegacyApplication.java12
-rw-r--r--server/src/com/vaadin/data/validator/DateRangeValidator.java2
-rw-r--r--server/src/com/vaadin/event/MouseEvents.java30
-rw-r--r--server/src/com/vaadin/external/json/JSONArray.java963
-rw-r--r--server/src/com/vaadin/external/json/JSONException.java32
-rw-r--r--server/src/com/vaadin/external/json/JSONObject.java1693
-rw-r--r--server/src/com/vaadin/external/json/JSONString.java21
-rw-r--r--server/src/com/vaadin/external/json/JSONStringer.java84
-rw-r--r--server/src/com/vaadin/external/json/JSONTokener.java451
-rw-r--r--server/src/com/vaadin/external/json/JSONWriter.java355
-rw-r--r--server/src/com/vaadin/external/json/README68
-rw-r--r--server/src/com/vaadin/navigator/Navigator.java141
-rw-r--r--server/src/com/vaadin/navigator/ViewChangeListener.java23
-rw-r--r--server/src/com/vaadin/server/AbstractClientConnector.java5
-rw-r--r--server/src/com/vaadin/server/AbstractCommunicationManager.java7
-rw-r--r--server/src/com/vaadin/server/AbstractUIProvider.java12
-rw-r--r--server/src/com/vaadin/server/AddonContext.java2
-rw-r--r--server/src/com/vaadin/server/AddonContextListener.java2
-rw-r--r--server/src/com/vaadin/server/BootstrapHandler.java10
-rw-r--r--server/src/com/vaadin/server/ClientConnector.java7
-rw-r--r--server/src/com/vaadin/server/CombinedRequest.java6
-rw-r--r--server/src/com/vaadin/server/DefaultErrorListener.java15
-rw-r--r--server/src/com/vaadin/server/DragAndDropService.java5
-rw-r--r--server/src/com/vaadin/server/JavaScriptCallbackHelper.java5
-rw-r--r--server/src/com/vaadin/server/JsonCodec.java11
-rw-r--r--server/src/com/vaadin/server/Page.java10
-rw-r--r--server/src/com/vaadin/server/PortletCommunicationManager.java5
-rw-r--r--server/src/com/vaadin/server/UIProvider.java14
-rw-r--r--server/src/com/vaadin/server/VaadinPortlet.java6
-rw-r--r--server/src/com/vaadin/server/VaadinServlet.java144
-rw-r--r--server/src/com/vaadin/server/VaadinSession.java20
-rw-r--r--server/src/com/vaadin/ui/AbstractEmbedded.java2
-rw-r--r--server/src/com/vaadin/ui/AbstractSelect.java45
-rw-r--r--server/src/com/vaadin/ui/BrowserFrame.java51
-rw-r--r--server/src/com/vaadin/ui/ComboBox.java26
-rw-r--r--server/src/com/vaadin/ui/CssLayout.java5
-rw-r--r--server/src/com/vaadin/ui/DateField.java72
-rw-r--r--server/src/com/vaadin/ui/Embedded.java13
-rw-r--r--server/src/com/vaadin/ui/EmbeddedBrowser.java19
-rw-r--r--server/src/com/vaadin/ui/Flash.java36
-rw-r--r--server/src/com/vaadin/ui/Image.java2
-rw-r--r--server/src/com/vaadin/ui/JavaScript.java5
-rw-r--r--server/src/com/vaadin/ui/JavaScriptFunction.java5
-rw-r--r--server/src/com/vaadin/ui/Link.java12
-rw-r--r--server/src/com/vaadin/ui/Table.java1
-rw-r--r--server/src/com/vaadin/ui/Tree.java3
-rw-r--r--server/src/com/vaadin/ui/UI.java26
-rw-r--r--server/tests/src/com/vaadin/tests/server/component/datefield/ResolutionTest.java2
-rw-r--r--server/tests/src/com/vaadin/tests/server/component/table/TestMultipleSelection.java2
-rw-r--r--server/tests/src/com/vaadin/tests/server/component/window/AddRemoveSubWindow.java2
-rw-r--r--server/tests/src/com/vaadin/tests/server/navigator/NavigatorTest.java12
-rw-r--r--shared/ivy.xml2
-rw-r--r--shared/src/com/vaadin/shared/MouseEventDetails.java72
-rwxr-xr-xshared/src/com/vaadin/shared/ui/BorderStyle.java24
-rw-r--r--shared/src/com/vaadin/shared/ui/ComponentStateUtil.java8
-rw-r--r--shared/src/com/vaadin/shared/ui/MultiSelectMode.java16
-rw-r--r--shared/src/com/vaadin/shared/ui/Orientation.java5
-rw-r--r--shared/src/com/vaadin/shared/ui/browserframe/BrowserFrameState.java7
-rw-r--r--shared/src/com/vaadin/shared/ui/combobox/FilteringMode.java5
-rw-r--r--shared/src/com/vaadin/shared/ui/datefield/Resolution.java69
-rw-r--r--shared/src/com/vaadin/shared/ui/embeddedbrowser/EmbeddedBrowserState.java7
-rw-r--r--theme-compiler/build.xml8
-rw-r--r--theme-compiler/ivy.xml32
-rw-r--r--theme-compiler/src/com/vaadin/buildhelpers/CompileTheme.java40
-rw-r--r--theme-compiler/src/com/vaadin/sass/ScssStylesheet.java18
-rw-r--r--theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandler.java11
-rw-r--r--theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandlerImpl.java72
-rw-r--r--theme-compiler/src/com/vaadin/sass/parser/LexicalUnitImpl.java22
-rw-r--r--theme-compiler/src/com/vaadin/sass/parser/Parser.java1275
-rw-r--r--theme-compiler/src/com/vaadin/sass/parser/Parser.jj73
-rw-r--r--theme-compiler/src/com/vaadin/sass/parser/ParserConstants.java178
-rw-r--r--theme-compiler/src/com/vaadin/sass/parser/ParserTokenManager.java1310
-rw-r--r--theme-compiler/src/com/vaadin/sass/selector/SelectorUtil.java25
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/BlockNode.java36
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/ExtendNode.java36
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/FunctionNode.java13
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/IVariableNode.java9
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/MediaNode.java1
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/MixinDefNode.java18
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/MixinNode.java17
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/NestPropertiesNode.java12
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/Node.java10
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/RuleNode.java34
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/SimpleNode.java16
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/VariableNode.java46
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/controldirective/ControlChildNode.java6
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/controldirective/ControlDefNode.java6
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/controldirective/ControlNode.java5
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/controldirective/EachDefNode.java2
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/controldirective/ElseNode.java12
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/controldirective/IfElseDefNode.java17
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/controldirective/IfElseNode.java7
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/controldirective/IfNode.java55
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/EachVisitor.java (renamed from theme-compiler/src/com/vaadin/sass/visitor/ControlVisitor.java)15
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/IfElseVisitor.java112
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/MixinVisitor.java36
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/VariableVisitor.java96
-rw-r--r--theme-compiler/tests/resources/css/control-directives.css16
-rw-r--r--theme-compiler/tests/resources/scss/control-directives.scss19
-rw-r--r--theme-compiler/tests/resources/scss/mixins.scss4
-rw-r--r--theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Comments.java8
-rw-r--r--theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ControlDirectives.java29
-rw-r--r--theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Mixins.java79
-rw-r--r--theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Variables.java19
-rw-r--r--theme-compiler/tests/src/com/vaadin/sass/testcases/visitor/MixinVisitorTest.java27
-rw-r--r--themes/build.xml (renamed from themes-compiled/build.xml)2
-rw-r--r--themes/ivy.xml (renamed from themes-compiled/ivy.xml)2
-rw-r--r--uitest/build.xml7
-rw-r--r--uitest/ivy.xml6
-rw-r--r--uitest/src/META-INF/services/com.vaadin.server.AddonContextListener (renamed from uitest/src/META-INF/services/com.vaadin.terminal.gwt.server.AddonContextListener)0
-rw-r--r--uitest/src/com/vaadin/tests/Components.java5
-rw-r--r--uitest/src/com/vaadin/tests/TestSizeableIncomponents.java3
-rw-r--r--uitest/src/com/vaadin/tests/components/browserframe/BrowserFrameIsVisible.html (renamed from uitest/src/com/vaadin/tests/components/embeddedbrowser/EmbeddedBrowserIsVisible.html)14
-rw-r--r--uitest/src/com/vaadin/tests/components/browserframe/BrowserFrameIsVisible.java (renamed from uitest/src/com/vaadin/tests/components/embeddedbrowser/EmbeddedBrowserIsVisible.java)16
-rw-r--r--uitest/src/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.java4
-rw-r--r--uitest/src/com/vaadin/tests/components/combobox/ComboBoxNavigation.java3
-rw-r--r--uitest/src/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.java4
-rw-r--r--uitest/src/com/vaadin/tests/components/combobox/ComboBoxValueInput.java3
-rw-r--r--uitest/src/com/vaadin/tests/components/combobox/ComboBoxes2.java13
-rw-r--r--uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.java2
-rw-r--r--uitest/src/com/vaadin/tests/components/datefield/DateFieldRangeValidation.java2
-rw-r--r--uitest/src/com/vaadin/tests/components/datefield/DateFieldTest.java14
-rw-r--r--uitest/src/com/vaadin/tests/components/datefield/DateFieldTimezone.java5
-rw-r--r--uitest/src/com/vaadin/tests/components/datefield/InlineDateFields.java17
-rw-r--r--uitest/src/com/vaadin/tests/components/datefield/PopupDateFields.java17
-rw-r--r--uitest/src/com/vaadin/tests/components/image/ImageClicks.java7
-rw-r--r--uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.html5
-rw-r--r--uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.java5
-rw-r--r--uitest/src/com/vaadin/tests/components/label/LabelTooltip.java2
-rw-r--r--uitest/src/com/vaadin/tests/components/link/LinkTargetSize.java3
-rwxr-xr-xuitest/src/com/vaadin/tests/components/notification/SemiTransparentNotification.java11
-rw-r--r--uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalRelativeChildren.html27
-rw-r--r--uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalRelativeChildren.java56
-rw-r--r--uitest/src/com/vaadin/tests/components/table/TableMultiSelectSimple.java2
-rw-r--r--uitest/src/com/vaadin/tests/components/table/Tables.java2
-rw-r--r--uitest/src/com/vaadin/tests/components/tree/TreeItemClickListening.java6
-rw-r--r--uitest/src/com/vaadin/tests/components/tree/Trees.java2
-rw-r--r--uitest/src/com/vaadin/tests/components/ui/LazyInitUIs.java4
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/TestSampler.java200
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/ThemeTestUI.java65
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/components/AccordionsCssTest.java55
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/components/ButtonsCssTest.java108
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/components/DatesCssTest.java64
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/components/EmbeddedCssTest.java31
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/components/FormsCssTest.java44
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/components/LabelsCssTest.java84
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/components/LayoutsCssTest.java155
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/components/NotificationsCssTest.java98
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/components/SelectsCssTest.java97
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/components/SlidersCssTest.java21
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/components/TabSheetsCssTest.java72
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/components/TablesCssTest.java100
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/components/TextFieldsCssTest.java80
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/components/TreeCssTest.java72
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/components/TreeTableCssTest.java49
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/components/UploadCssTest.java20
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/components/WindowsCssTest.java116
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/reindeer_theme_test.html466
-rw-r--r--uitest/src/com/vaadin/tests/containers/sqlcontainer/ComboBoxUpdateProblem.java4
-rw-r--r--uitest/src/com/vaadin/tests/extensions/JavascriptManagerTest.java7
-rw-r--r--uitest/src/com/vaadin/tests/extensions/SimpleJavaScriptExtensionTest.java5
-rw-r--r--uitest/src/com/vaadin/tests/layouts/TestLayoutClickListeners.java9
-rw-r--r--uitest/src/com/vaadin/tests/minitutorials/v7a1/DifferentFeaturesForDifferentClients.java4
-rw-r--r--uitest/src/com/vaadin/tests/minitutorials/v7a3/CapsLockWarning.java26
-rw-r--r--uitest/src/com/vaadin/tests/minitutorials/v7a3/CapsLockWarningUI.java47
-rw-r--r--uitest/src/com/vaadin/tests/minitutorials/v7a3/Flot.java5
-rw-r--r--uitest/src/com/vaadin/tests/minitutorials/v7b1/Addition.java68
-rw-r--r--uitest/src/com/vaadin/tests/minitutorials/v7b1/CapsLockWarningWithRpc.java38
-rw-r--r--uitest/src/com/vaadin/tests/minitutorials/v7b1/ReducingRoundTrips.java48
-rw-r--r--uitest/src/com/vaadin/tests/navigator/NavigatorTest.java4
-rw-r--r--uitest/src/com/vaadin/tests/resources/ConnectorResourceTest.java5
-rw-r--r--uitest/src/com/vaadin/tests/serialization/DelegateWithoutStateClass.html26
-rw-r--r--uitest/src/com/vaadin/tests/serialization/DelegateWithoutStateClassTest.java45
-rw-r--r--uitest/src/com/vaadin/tests/tickets/Ticket1506_Panel.java3
-rw-r--r--uitest/src/com/vaadin/tests/tickets/Ticket2009.java4
-rw-r--r--uitest/src/com/vaadin/tests/tickets/Ticket2043.java3
-rw-r--r--uitest/src/com/vaadin/tests/vaadincontext/TestAddonContextListener.java2
-rw-r--r--uitest/src/com/vaadin/tests/widgetset/client/DelegateWithoutStateClassConnector.java35
-rw-r--r--uitest/src/com/vaadin/tests/widgetset/client/VExtendedTextArea.java23
-rw-r--r--uitest/src/com/vaadin/tests/widgetset/client/minitutorials/v7a3/CapsLockWarningConnector.java39
-rw-r--r--uitest/src/com/vaadin/tests/widgetset/client/minitutorials/v7b1/CapsLockWarningRpc.java25
-rw-r--r--uitest/src/com/vaadin/tests/widgetset/client/minitutorials/v7b1/CapsLockWarningWithRpcConnector.java47
-rw-r--r--uitest/src/com/vaadin/tests/widgetset/server/DelegateWithoutStateClassComponent.java (renamed from theme-compiler/src/com/vaadin/sass/tree/IfNode.java)7
230 files changed, 6296 insertions, 5940 deletions
diff --git a/WebContent/VAADIN/themes/base/layout/layout.scss b/WebContent/VAADIN/themes/base/layout/layout.scss
index 439510c863..04df35872e 100644
--- a/WebContent/VAADIN/themes/base/layout/layout.scss
+++ b/WebContent/VAADIN/themes/base/layout/layout.scss
@@ -28,6 +28,25 @@ TODO
padding-left: 12px;
}
+/* Different for historical reasons: previously was inherited directly from Base theme */
+/* TODO unify these values in version 7 */
+.v-gridlayout.v-layout-margin-top {
+ padding-top: 24px;
+}
+.v-gridlayout.v-layout-margin-bottom {
+ padding-bottom: 24px;
+}
+.v-gridlayout.v-layout-margin-left {
+ padding-left: 24px;
+}
+.v-gridlayout.v-layout-margin-right {
+ padding-right: 24px;
+}
+.v-gridlayout .v-layout-spacing-on {
+ padding-left: 12px;
+ padding-top: 12px;
+}
+
.v-spacing {
width: 6px;
height: 6px;
diff --git a/WebContent/VAADIN/themes/reindeer/layouts/layouts.scss b/WebContent/VAADIN/themes/reindeer/layouts/layouts.scss
index c0204ec041..fb47c100f8 100644
--- a/WebContent/VAADIN/themes/reindeer/layouts/layouts.scss
+++ b/WebContent/VAADIN/themes/reindeer/layouts/layouts.scss
@@ -34,24 +34,7 @@
height: 7px;
width: 6px;
}
-/* Different for historical reasons: previously was inherited directly from Base theme */
-/* TODO unify these values in version 7 */
-.v-gridlayout-margin-top {
- padding-top: 24px;
-}
-.v-gridlayout-margin-bottom {
- padding-bottom: 24px;
-}
-.v-gridlayout-margin-left {
- padding-left: 24px;
-}
-.v-gridlayout-margin-right {
- padding-right: 24px;
-}
-.v-gridlayout-spacing-on {
- padding-left: 12px;
- padding-top: 12px;
-}
+
/* Blue background */
.v-verticallayout-blue,
.v-horizontallayout-blue,
diff --git a/WebContent/VAADIN/themes/reindeer/select/select.scss b/WebContent/VAADIN/themes/reindeer/select/select.scss
index 4a8d07fd91..240f88aebb 100644
--- a/WebContent/VAADIN/themes/reindeer/select/select.scss
+++ b/WebContent/VAADIN/themes/reindeer/select/select.scss
@@ -40,6 +40,7 @@
overflow: hidden;
width: 25px;
height: 24px;
+ background-position: 0 0;
background-image: url(img/right.png); /** sprite-ref: verticals ; sprite-margin-bottom: 1px */
cursor: default;
margin-right: -25px;
diff --git a/WebContent/WEB-INF/portlet.xml b/WebContent/WEB-INF/portlet.xml
index 2f7135fea9..195269eb61 100644
--- a/WebContent/WEB-INF/portlet.xml
+++ b/WebContent/WEB-INF/portlet.xml
@@ -6,7 +6,7 @@
<portlet>
<portlet-name>JSR286TestPortlet</portlet-name>
<display-name>Vaadin Portlet 2.0 Test</display-name>
- <portlet-class>com.vaadin.server.VaadinPortlet</portlet-class>
+ <portlet-class>com.vaadin.server.LegacyVaadinPortlet</portlet-class>
<init-param>
<name>application</name>
<value>com.vaadin.tests.integration.JSR286PortletApplication</value>
@@ -44,7 +44,7 @@
<portlet-name>Vaadin Liferay Theme Portlet</portlet-name>
<display-name>Vaadin Liferay Theme</display-name>
- <portlet-class>com.vaadin.server.VaadinPortlet</portlet-class>
+ <portlet-class>com.vaadin.server.LegacyVaadinPortlet</portlet-class>
<init-param>
<name>application</name>
<value>com.vaadin.tests.integration.LiferayThemeDemo</value>
diff --git a/WebContent/release-notes.html b/WebContent/release-notes.html
index 8a9a1ab501..63449514d9 100644
--- a/WebContent/release-notes.html
+++ b/WebContent/release-notes.html
@@ -81,7 +81,7 @@
<li>Separate server-side (<tt>vaadin-server</tt>) and client-side (<tt>vaadin-client</tt>, <tt>vaadin-client-compiler</tt>) development libraries</li>
<li>Precompiled widget set (<tt>vaadin-client-compiled</tt>) for server-side development</li>
<li>Shared library (<tt>vaadin-shared</tt>) for both server- and client-side libraries</li>
- <li>Built-in themes (<tt>vaadin-themes-compiled</tt>) and the theme compiler (<tt>vaadin-theme-compiler</tt>)
+ <li>Built-in themes (<tt>vaadin-themes</tt>) and the theme compiler (<tt>vaadin-theme-compiler</tt>)
<li>Dependency libraries provided under the <tt>lib/</tt> folder</li>
</ul>
@@ -95,7 +95,7 @@
<p>
For server-side development, copy the <tt>vaadin-server</tt>,
<tt>vaadin-client-compiled</tt>, <tt>vaadin-shared</tt>,
- <tt>vaadin-theme-compiler</tt>, and <tt>vaadin-themes-compiled</tt> from the main
+ <tt>vaadin-theme-compiler</tt>, and <tt>vaadin-themes</tt> from the main
folder and the dependencies from the <tt>lib</tt> folder to the
<tt>WEB-INF/lib</tt> folder of your Vaadin project. (The
<tt>vaadin-client-compiled</tt> is necessary if you do not wish to compile the
@@ -322,7 +322,7 @@
<b>Liferay and other portal</b> users must install the Vaadin libraries in
<t>ROOT/WEB-INF/lib/</b> in the portal (and remove a possibly obsolete older
<tt>vaadin.jar</tt>). Additionally, the contents of the
- <tt>vaadin-client-compiled</tt> and <tt>vaadin-themes-compiled</tt> must be
+ <tt>vaadin-client-compiled</tt> and <tt>vaadin-themes</tt> must be
extracted to the <tt>ROOT/html/VAADIN</tt> directory in the Liferay
installation. If your portal uses custom widgets, install the latest version of <a
href="http://vaadin.com/directory#addon/vaadin-control-panel-for-liferay">Vaadin
diff --git a/all/README.TXT b/all/README.TXT
index 55685ac8b0..24d8afb44c 100644
--- a/all/README.TXT
+++ b/all/README.TXT
@@ -2,11 +2,11 @@ This Vaadin zip contains all the jars of the Vaadin Framework. Additionally all
To use in a web project:
1. Copy all vaadin-* files except vaadin-client and vaadin-client-compiler to WEB-INF/lib in your project
-2. Copy vaadin-client and vaadin-client-compiler to a lib folder which is on your classpath but will not be deployed. These files are only needed when compiling a module (widget set) to Javascript.
+2. Copy lib/*.jar to WEB-INF/lib in your project
+3. Copy vaadin-client and vaadin-client-compiler to a lib folder which is on your classpath but will not be deployed. These files are only needed when compiling a module (widget set) to Javascript.
-If you are using Eclipse and a standard WTP (Dynamic Web Project or Vaadin Project) you can do:
-1. As above
-2. Create a /lib folder, copy the files there and right click the lib folder and select "Build Path" -> "Add to Build Path".
+If you are using Eclipse and a standard WTP (Dynamic Web Project or Vaadin Project), step 3 can be:
+Create a /lib folder, copy the files there and right click the lib folder and select "Build Path" -> "Add to Build Path".
Once this is done, the "Compile widgetset" button provided by the Vaadin Plug-in for Eclipse will work correctly.
diff --git a/all/ivy.xml b/all/ivy.xml
index 4450eb168f..aebba5ba35 100644
--- a/all/ivy.xml
+++ b/all/ivy.xml
@@ -27,7 +27,7 @@
rev="${vaadin.version}"/>
<dependency org="com.vaadin" name="vaadin-theme-compiler"
rev="${vaadin.version}"/>
- <dependency org="com.vaadin" name="vaadin-themes-compiled"
+ <dependency org="com.vaadin" name="vaadin-themes"
rev="${vaadin.version}"/>
<dependency org="com.vaadin" name="vaadin-client-compiled"
rev="${vaadin.version}"/>
diff --git a/build/ide.xml b/build/ide.xml
index f2b3214227..3390bb8e4a 100755
--- a/build/ide.xml
+++ b/build/ide.xml
@@ -10,18 +10,18 @@
<property name="theme-version" location="9.9.9.INTERNAL-DEBUG-BUILD" />
<echo>Using gwt-dev.jar from ${gwt.dev.jar}</echo>
- <ivy:cachepath pathid="ivy.deps" inline="true" organisation="javax.validation" module="validation-api" revision="1.0.0.GA" conf="default,sources" />
- <ivy:cachepath pathid="ivy.deps2" inline="true" organisation="commons-cli" module="commons-cli" revision="1.2" conf="default" />
+ <ivy:resolve file="build/ivy-ide.xml" />
+ <ivy:cachepath pathid="ivy.deps" conf="default" />
<path id="classpath">
<pathelement location="${gwt.user.jar}" />
<pathelement location="${gwt.dev.jar}" />
<path refid="ivy.deps" />
- <path refid="ivy.deps2" />
<path location="bin" />
<path location="build/classes" />
<path location="server/src" />
<path location="shared/src" />
+ <path location="uitest/src" />
<path location="client/src" />
</path>
diff --git a/build/ivy-ide.xml b/build/ivy-ide.xml
new file mode 100755
index 0000000000..aac387e3d2
--- /dev/null
+++ b/build/ivy-ide.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ivy-module version="2.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
+
+ <info organisation="com.vaadin" module="vaadin-client"
+ revision="${vaadin.version}" />
+
+ <configurations>
+ <conf name="default" />
+ </configurations>
+ <publications>
+ </publications>
+ <dependencies defaultconf="default" defaultconfmapping="default->default">
+ <dependency org="javax.validation" name="validation-api"
+ rev="1.0.0.GA" conf="default -> default,sources" />
+ <dependency org="commons-cli" name="commons-cli" rev="1.2" />
+ <dependency org="org.apache.commons" name="commons-jexl"
+ rev="2.1.1" />
+
+ </dependencies>
+
+</ivy-module>
diff --git a/client-compiled/build.xml b/client-compiled/build.xml
index 9327e6da5f..be32dea853 100644
--- a/client-compiled/build.xml
+++ b/client-compiled/build.xml
@@ -106,8 +106,6 @@
<jar file="${compiled.jar}" compress="true">
<manifest>
- <attribute name="Vaadin-Package-Version" value="1" />
- <attribute name="Vaadin-Widgetsets" value="com.vaadin.DefaultWidgetSet" />
<attribute name="Implementation-Vendor" value="Vaadin Ltd" />
<attribute name="Implementation-URL" value="http://vaadin.com" />
<attribute name="Implementation-Version" value="${vaadin.version}" />
diff --git a/client-compiler/build.xml b/client-compiler/build.xml
index 97645ea51c..733ee73e32 100644
--- a/client-compiler/build.xml
+++ b/client-compiler/build.xml
@@ -25,10 +25,10 @@
<target name="jar">
<!-- Get Git revision -->
<exec executable="git" outputproperty="git.revision" failifexecutionfails="false" errorproperty="">
- <arg value="describe"/>
- <arg value="--tags"/>
- <arg value="--always"/>
- <arg value="HEAD"/>
+ <arg value="describe" />
+ <arg value="--tags" />
+ <arg value="--always" />
+ <arg value="HEAD" />
</exec>
<echo file="${result.dir}/com/google/gwt/dev/About.properties">gwt.version=${vaadin.version}
@@ -37,6 +37,7 @@ gwt.svnrev=${git.revision}</echo>
<antcall target="common.jar">
<reference refid="compiler.includes" torefid="extra.jar.includes" />
</antcall>
+
</target>
<target name="publish-local" depends="jar">
diff --git a/client-compiler/ivy.xml b/client-compiler/ivy.xml
index d57c3f700c..777236ee53 100644
--- a/client-compiler/ivy.xml
+++ b/client-compiler/ivy.xml
@@ -29,9 +29,6 @@
rev="3.1" conf="build,ide -> default" />
<dependency org="ant" name="ant" rev="1.6.5"
conf="build,ide -> default" />
- <dependency org="javax.validation" name="validation-api"
- rev="1.0.0.GA" conf="build->default,sources" />
-
</dependencies>
</ivy-module>
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java b/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java
index fbbabe084d..fe0c579d73 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java
+++ b/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java
@@ -22,24 +22,18 @@ public class WidgetInitVisitor extends TypeVisitor {
if (ConnectorBundle.isConnectedComponentConnector(type)) {
JClassType createWidgetClass = findInheritedMethod(type,
"createWidget").getEnclosingType();
- boolean createWidgetOverridden = !createWidgetClass
+ boolean needsCreateWidgetSupport = createWidgetClass
.getQualifiedSourceName()
.equals(AbstractComponentConnector.class.getCanonicalName());
- if (createWidgetOverridden) {
- // Don't generate if createWidget is already overridden
- return;
- }
JMethod getWidget = findInheritedMethod(type, "getWidget");
- bundle.setNeedsReturnType(type, getWidget);
-
JClassType widgetType = getWidget.getReturnType().isClass();
- bundle.setNeedsGwtConstructor(widgetType);
JMethod getState = findInheritedMethod(type, "getState");
JClassType stateType = getState.getReturnType().isClass();
Collection<Property> properties = bundle.getProperties(stateType);
+ boolean hasDelegateToWidget = false;
for (Property property : properties) {
DelegateToWidget delegateToWidget = property
.getAnnotation(DelegateToWidget.class);
@@ -66,8 +60,15 @@ public class WidgetInitVisitor extends TypeVisitor {
throw new UnableToCompleteException();
}
bundle.setNeedsInvoker(widgetType, delegatedSetter);
+ hasDelegateToWidget = true;
}
}
+
+ if (hasDelegateToWidget || needsCreateWidgetSupport) {
+ bundle.setNeedsReturnType(type, getWidget);
+ bundle.setNeedsGwtConstructor(widgetType);
+ }
+
}
}
}
diff --git a/client/build.xml b/client/build.xml
index f0ee0892f9..03c9c91401 100644
--- a/client/build.xml
+++ b/client/build.xml
@@ -22,9 +22,31 @@
<path id="classpath.tests.custom" />
<target name="jar">
+ <property name="jar.file" location="${result.dir}/lib/${module.name}-${vaadin.version}.jar" />
<antcall target="common.jar">
<reference refid="client.gwt.includes" torefid="extra.jar.includes" />
</antcall>
+ <jar destfile="${jar.file}" update="true">
+ <manifest>
+ <attribute name="Vaadin-Package-Version" value="1" />
+ <attribute name="Vaadin-Widgetsets" value="com.vaadin.DefaultWidgetSet" />
+ </manifest>
+ </jar>
+ <!-- Hack to add validation dependency with source classifier -->
+ <property name="pom.xml" location="${result.dir}/lib/${module.name}-${vaadin.version}.pom" />
+ <copy file="${pom.xml}" tofile="${temp.pom}">
+ <filterchain>
+ <replacestring from=" &lt;/dependencies&gt;" to=" &lt;dependency&gt;
+ &lt;groupId&gt;javax.validation&lt;/groupId&gt;
+ &lt;artifactId&gt;validation-api&lt;/artifactId&gt;
+ &lt;version&gt;1.0.0.GA&lt;/version&gt;
+ &lt;scope&gt;compile&lt;/scope&gt;
+ &lt;classifier&gt;sources&lt;/classifier&gt;
+ &lt;/dependency&gt;
+ &lt;/dependencies&gt;" />
+ </filterchain>
+ </copy>
+ <move file="${temp.pom}" tofile="${pom.xml}" />
</target>
<target name="publish-local" depends="jar">
diff --git a/client/ivy.xml b/client/ivy.xml
index 39ed494d86..4b56338c24 100644
--- a/client/ivy.xml
+++ b/client/ivy.xml
@@ -10,14 +10,14 @@
<configurations>
<conf name="build" />
<conf name="build-provided" />
- <conf name="ide" visibility="private"/>
+ <conf name="ide" visibility="private" />
<conf name="tests" />
</configurations>
<publications>
- <artifact type="jar" ext="jar"/>
-<artifact type="source" ext="jar" m:classifier="sources" />
-<artifact type="javadoc" ext="jar" m:classifier="javadoc" />
- <artifact type="pom" ext="pom"/>
+ <artifact type="jar" ext="jar" />
+ <artifact type="source" ext="jar" m:classifier="sources" />
+ <artifact type="javadoc" ext="jar" m:classifier="javadoc" />
+ <artifact type="pom" ext="pom" />
</publications>
<dependencies defaultconf="build" defaultconfmapping="build,ide->default">
<!-- API DEPENDENCIES -->
@@ -34,6 +34,11 @@
<dependency org="junit" name="junit" rev="4.5"
conf="tests->default" />
+
+ <dependency org="javax.validation" name="validation-api"
+ rev="1.0.0.GA" conf="build->default,sources" />
+
+
</dependencies>
</ivy-module>
diff --git a/client/src/com/vaadin/client/ComponentLocator.java b/client/src/com/vaadin/client/ComponentLocator.java
index 68c97badfb..1852b67260 100644
--- a/client/src/com/vaadin/client/ComponentLocator.java
+++ b/client/src/com/vaadin/client/ComponentLocator.java
@@ -197,7 +197,12 @@ public class ComponentLocator {
* If everything else fails we use the DOM path to identify the target
* element
*/
- return path + getDOMPathForElement(targetElement, w.getElement());
+ String domPath = getDOMPathForElement(targetElement, w.getElement());
+ if (domPath == null) {
+ return path;
+ } else {
+ return path + domPath;
+ }
}
/**
@@ -498,9 +503,9 @@ public class ComponentLocator {
// VVerticalLayout and 0
String[] split = part.split("\\[", 2);
String widgetClassName = split[0];
- String indexString = split[1];
- int widgetPosition = Integer.parseInt(indexString.substring(0,
- indexString.length() - 1));
+ String indexString = split[1].substring(0,
+ split[1].length() - 1);
+ int widgetPosition = Integer.parseInt(indexString);
// AbsolutePanel in GridLayout has been removed -> skip it
if (w instanceof VGridLayout
diff --git a/client/src/com/vaadin/client/DateTimeService.java b/client/src/com/vaadin/client/DateTimeService.java
index f33c69576a..caadd5412c 100644
--- a/client/src/com/vaadin/client/DateTimeService.java
+++ b/client/src/com/vaadin/client/DateTimeService.java
@@ -20,7 +20,7 @@ import java.util.Date;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.LocaleInfo;
-import com.vaadin.client.ui.datefield.VDateField;
+import com.vaadin.shared.ui.datefield.Resolution;
/**
* This class provides date/time parsing services to all components on the
@@ -201,7 +201,7 @@ public class DateTimeService {
}
public static boolean isInRange(Date date, Date rangeStart, Date rangeEnd,
- int resolution) {
+ Resolution resolution) {
Date s;
Date e;
if (rangeStart.after(rangeEnd)) {
@@ -215,31 +215,31 @@ public class DateTimeService {
long end = e.getYear() * 10000000000l;
long target = date.getYear() * 10000000000l;
- if (resolution == VDateField.RESOLUTION_YEAR) {
+ if (resolution == Resolution.YEAR) {
return (start <= target && end >= target);
}
start += s.getMonth() * 100000000l;
end += e.getMonth() * 100000000l;
target += date.getMonth() * 100000000l;
- if (resolution == VDateField.RESOLUTION_MONTH) {
+ if (resolution == Resolution.MONTH) {
return (start <= target && end >= target);
}
start += s.getDate() * 1000000l;
end += e.getDate() * 1000000l;
target += date.getDate() * 1000000l;
- if (resolution == VDateField.RESOLUTION_DAY) {
+ if (resolution == Resolution.DAY) {
return (start <= target && end >= target);
}
start += s.getHours() * 10000l;
end += e.getHours() * 10000l;
target += date.getHours() * 10000l;
- if (resolution == VDateField.RESOLUTION_HOUR) {
+ if (resolution == Resolution.HOUR) {
return (start <= target && end >= target);
}
start += s.getMinutes() * 100l;
end += e.getMinutes() * 100l;
target += date.getMinutes() * 100l;
- if (resolution == VDateField.RESOLUTION_MIN) {
+ if (resolution == Resolution.MINUTE) {
return (start <= target && end >= target);
}
start += s.getSeconds();
diff --git a/client/src/com/vaadin/client/LayoutManagerIE8.java b/client/src/com/vaadin/client/LayoutManagerIE8.java
index 4cc06baf4c..a086a529c7 100644
--- a/client/src/com/vaadin/client/LayoutManagerIE8.java
+++ b/client/src/com/vaadin/client/LayoutManagerIE8.java
@@ -23,6 +23,18 @@ import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.ui.RootPanel;
+/**
+ * Alternative MeasuredSize storage for IE8. Storing any information in a DOM
+ * element in IE8 seems to make the browser think the element has changed in a
+ * way that requires a reflow. To work around that, the MeasureData is instead
+ * stored in Map for IE8.
+ *
+ * This implementation is injected for IE8 by a replace-with definition in the
+ * GWT module.
+ *
+ * @author Vaadin Ltd
+ * @since 7.0.0
+ */
public class LayoutManagerIE8 extends LayoutManager {
private Map<Element, MeasuredSize> measuredSizes = new HashMap<Element, MeasuredSize>();
diff --git a/client/src/com/vaadin/client/MouseEventDetailsBuilder.java b/client/src/com/vaadin/client/MouseEventDetailsBuilder.java
index 2e8d669844..cda2eec07f 100644
--- a/client/src/com/vaadin/client/MouseEventDetailsBuilder.java
+++ b/client/src/com/vaadin/client/MouseEventDetailsBuilder.java
@@ -19,6 +19,7 @@ import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.user.client.Event;
import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.MouseEventDetails.MouseButton;
/**
* Helper class for constructing a MouseEventDetails object from a
@@ -58,7 +59,13 @@ public class MouseEventDetailsBuilder {
mouseEventDetails.setType(Event.getTypeInt(evt.getType()));
mouseEventDetails.setClientX(Util.getTouchOrMouseClientX(evt));
mouseEventDetails.setClientY(Util.getTouchOrMouseClientY(evt));
- mouseEventDetails.setButton(evt.getButton());
+ if (evt.getButton() == NativeEvent.BUTTON_LEFT) {
+ mouseEventDetails.setButton(MouseButton.LEFT);
+ } else if (evt.getButton() == NativeEvent.BUTTON_RIGHT) {
+ mouseEventDetails.setButton(MouseButton.RIGHT);
+ } else if (evt.getButton() == NativeEvent.BUTTON_MIDDLE) {
+ mouseEventDetails.setButton(MouseButton.MIDDLE);
+ }
mouseEventDetails.setAltKey(evt.getAltKey());
mouseEventDetails.setCtrlKey(evt.getCtrlKey());
mouseEventDetails.setMetaKey(evt.getMetaKey());
diff --git a/client/src/com/vaadin/client/communication/JSONSerializer.java b/client/src/com/vaadin/client/communication/JSONSerializer.java
index dd3594acac..c57058ee9c 100644
--- a/client/src/com/vaadin/client/communication/JSONSerializer.java
+++ b/client/src/com/vaadin/client/communication/JSONSerializer.java
@@ -16,22 +16,21 @@
package com.vaadin.client.communication;
-import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONValue;
import com.vaadin.client.ApplicationConnection;
-import com.vaadin.client.ConnectorMap;
import com.vaadin.client.metadata.Type;
/**
* Implementors of this interface knows how to serialize an Object of a given
* type to JSON and how to deserialize the JSON back into an object.
*
- * The {@link #serialize(Object, ConnectorMap)} and
- * {@link #deserialize(JSONObject, ConnectorMap)} methods must be symmetric so
- * they can be chained and produce the original result (or an equal result).
+ * The {@link #serialize(Object, ApplicationConnection)} and
+ * {@link #deserialize(Type, JSONValue, ApplicationConnection)} methods must be
+ * symmetric so they can be chained and produce the original result (or an equal
+ * result).
*
* Each {@link JSONSerializer} implementation can handle an object of a single
- * type - see {@link SerializerMap}.
+ * type - see {@link Type#findSerializer()}.
*
* @since 7.0
*/
@@ -39,12 +38,16 @@ public interface JSONSerializer<T> {
/**
* Creates and deserializes an object received from the server. Must be
- * compatible with {@link #serialize(Object, ConnectorMap)} and also with
- * the server side JsonCodec.encode(Object,
- * com.vaadin.server.PaintableIdMapper) .
+ * compatible with {@link #serialize(Object, ApplicationConnection)} and
+ * also with the server side JsonCodec.encode method.
*
+ * @param type
+ * the type to deserialize
* @param jsonValue
* JSON map from property name to property value
+ * @param connection
+ * the application connection providing the context
+ *
* @return A deserialized object
*/
T deserialize(Type type, JSONValue jsonValue,
@@ -52,12 +55,13 @@ public interface JSONSerializer<T> {
/**
* Serialize the given object into JSON. Must be compatible with
- * {@link #deserialize(JSONObject, ConnectorMap)} and also with the server
- * side JsonCodec.decode(com.vaadin.external.json.JSONArray,
- * com.vaadin.server.PaintableIdMapper)
+ * {@link #deserialize(Type, JSONValue, ApplicationConnection)} and also
+ * with the server side JsonCodec.decodeCustomType method.
*
* @param value
* The object to serialize
+ * @param connection
+ * the application connection providing the context
* @return A JSON serialized version of the object
*/
JSONValue serialize(T value, ApplicationConnection connection);
diff --git a/client/src/com/vaadin/client/metadata/TypeDataStore.java b/client/src/com/vaadin/client/metadata/TypeDataStore.java
index 16047baadc..27054c5aeb 100644
--- a/client/src/com/vaadin/client/metadata/TypeDataStore.java
+++ b/client/src/com/vaadin/client/metadata/TypeDataStore.java
@@ -58,7 +58,7 @@ public class TypeDataStore {
public static Type getReturnType(Method method) throws NoDataException {
Type type = get().returnTypes.get(method);
if (type == null) {
- throw new NoDataException("There is return type for "
+ throw new NoDataException("There is no return type for "
+ method.getSignature());
}
return type;
@@ -67,7 +67,7 @@ public class TypeDataStore {
public static Invoker getInvoker(Method method) throws NoDataException {
Invoker invoker = get().invokers.get(method);
if (invoker == null) {
- throw new NoDataException("There is invoker for "
+ throw new NoDataException("There is no invoker for "
+ method.getSignature());
}
return invoker;
@@ -77,7 +77,7 @@ public class TypeDataStore {
Invoker invoker = get().invokers
.get(new Method(type, CONSTRUCTOR_NAME));
if (invoker == null) {
- throw new NoDataException("There is constructor for "
+ throw new NoDataException("There is no constructor for "
+ type.getSignature());
}
return invoker;
@@ -86,7 +86,7 @@ public class TypeDataStore {
public static Invoker getGetter(Property property) throws NoDataException {
Invoker getter = get().getters.get(property);
if (getter == null) {
- throw new NoDataException("There is getter for "
+ throw new NoDataException("There is no getter for "
+ property.getSignature());
}
diff --git a/client/src/com/vaadin/client/ui/AbstractComponentConnector.java b/client/src/com/vaadin/client/ui/AbstractComponentConnector.java
index c40dc27581..b1d31370b3 100644
--- a/client/src/com/vaadin/client/ui/AbstractComponentConnector.java
+++ b/client/src/com/vaadin/client/ui/AbstractComponentConnector.java
@@ -230,12 +230,12 @@ public abstract class AbstractComponentConnector extends AbstractConnector
@Override
public boolean isRelativeHeight() {
- return getState().height != null && getState().height.endsWith("%");
+ return ComponentStateUtil.isRelativeHeight(getState());
}
@Override
public boolean isRelativeWidth() {
- return getState().width != null && getState().width.endsWith("%");
+ return ComponentStateUtil.isRelativeWidth(getState());
}
@Override
diff --git a/client/src/com/vaadin/client/ui/Vaadin6Connector.java b/client/src/com/vaadin/client/ui/LegacyConnector.java
index 72c7ad6ba8..c5a1325a69 100644
--- a/client/src/com/vaadin/client/ui/Vaadin6Connector.java
+++ b/client/src/com/vaadin/client/ui/LegacyConnector.java
@@ -19,7 +19,7 @@ import com.vaadin.client.ApplicationConnection;
import com.vaadin.client.Paintable;
import com.vaadin.client.UIDL;
-public abstract class Vaadin6Connector extends AbstractComponentConnector
+public abstract class LegacyConnector extends AbstractComponentConnector
implements Paintable {
@Override
diff --git a/client/src/com/vaadin/client/ui/embeddedbrowser/EmbeddedBrowserConnector.java b/client/src/com/vaadin/client/ui/browserframe/BrowserFrameConnector.java
index 10445dbff5..c22d92235b 100644
--- a/client/src/com/vaadin/client/ui/embeddedbrowser/EmbeddedBrowserConnector.java
+++ b/client/src/com/vaadin/client/ui/browserframe/BrowserFrameConnector.java
@@ -1,13 +1,13 @@
-package com.vaadin.client.ui.embeddedbrowser;
+package com.vaadin.client.ui.browserframe;
import com.vaadin.client.communication.StateChangeEvent;
import com.vaadin.client.ui.AbstractComponentConnector;
import com.vaadin.shared.ui.AbstractEmbeddedState;
import com.vaadin.shared.ui.Connect;
-import com.vaadin.shared.ui.embeddedbrowser.EmbeddedBrowserState;
+import com.vaadin.shared.ui.browserframe.BrowserFrameState;
-@Connect(com.vaadin.ui.EmbeddedBrowser.class)
-public class EmbeddedBrowserConnector extends AbstractComponentConnector {
+@Connect(com.vaadin.ui.BrowserFrame.class)
+public class BrowserFrameConnector extends AbstractComponentConnector {
@Override
protected void init() {
@@ -15,13 +15,13 @@ public class EmbeddedBrowserConnector extends AbstractComponentConnector {
}
@Override
- public VEmbeddedBrowser getWidget() {
- return (VEmbeddedBrowser) super.getWidget();
+ public VBrowserFrame getWidget() {
+ return (VBrowserFrame) super.getWidget();
}
@Override
- public EmbeddedBrowserState getState() {
- return (EmbeddedBrowserState) super.getState();
+ public BrowserFrameState getState() {
+ return (BrowserFrameState) super.getState();
}
@Override
diff --git a/client/src/com/vaadin/client/ui/embeddedbrowser/VEmbeddedBrowser.java b/client/src/com/vaadin/client/ui/browserframe/VBrowserFrame.java
index 3fe1c44bc3..da2c981a8d 100644
--- a/client/src/com/vaadin/client/ui/embeddedbrowser/VEmbeddedBrowser.java
+++ b/client/src/com/vaadin/client/ui/browserframe/VBrowserFrame.java
@@ -1,21 +1,21 @@
-package com.vaadin.client.ui.embeddedbrowser;
+package com.vaadin.client.ui.browserframe;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.IFrameElement;
import com.google.gwt.user.client.ui.Widget;
-public class VEmbeddedBrowser extends Widget {
+public class VBrowserFrame extends Widget {
protected IFrameElement iframe;
protected Element altElement;
protected String altText;
- public VEmbeddedBrowser() {
+ public VBrowserFrame() {
Element root = Document.get().createDivElement();
setElement(root);
- setStylePrimaryName("v-embeddedbrowser");
+ setStylePrimaryName("v-browserframe");
createAltTextElement();
}
diff --git a/client/src/com/vaadin/client/ui/combobox/ComboBoxConnector.java b/client/src/com/vaadin/client/ui/combobox/ComboBoxConnector.java
index d89836d6e2..bcab8e71fc 100644
--- a/client/src/com/vaadin/client/ui/combobox/ComboBoxConnector.java
+++ b/client/src/com/vaadin/client/ui/combobox/ComboBoxConnector.java
@@ -27,6 +27,7 @@ import com.vaadin.client.ui.combobox.VFilterSelect.FilterSelectSuggestion;
import com.vaadin.client.ui.menubar.MenuItem;
import com.vaadin.shared.ui.Connect;
import com.vaadin.shared.ui.combobox.ComboBoxConstants;
+import com.vaadin.shared.ui.combobox.FilteringMode;
import com.vaadin.ui.ComboBox;
@Connect(ComboBox.class)
@@ -68,7 +69,8 @@ public class ComboBoxConnector extends AbstractFieldConnector implements
}
if (uidl.hasAttribute("filteringmode")) {
- getWidget().filteringmode = uidl.getIntAttribute("filteringmode");
+ getWidget().filteringmode = FilteringMode.valueOf(uidl
+ .getStringAttribute("filteringmode"));
}
getWidget().immediate = getState().immediate;
diff --git a/client/src/com/vaadin/client/ui/combobox/VFilterSelect.java b/client/src/com/vaadin/client/ui/combobox/VFilterSelect.java
index 8692622892..203f982180 100644
--- a/client/src/com/vaadin/client/ui/combobox/VFilterSelect.java
+++ b/client/src/com/vaadin/client/ui/combobox/VFilterSelect.java
@@ -73,6 +73,7 @@ import com.vaadin.client.ui.menubar.MenuItem;
import com.vaadin.shared.ComponentState;
import com.vaadin.shared.EventId;
import com.vaadin.shared.ui.ComponentStateUtil;
+import com.vaadin.shared.ui.combobox.FilteringMode;
/**
* Client side implementation of the Select component.
@@ -741,7 +742,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
}
} else if (item != null
&& !"".equals(lastFilter)
- && (filteringmode == FILTERINGMODE_CONTAINS ? item
+ && (filteringmode == FilteringMode.CONTAINS ? item
.getText().toLowerCase()
.contains(lastFilter.toLowerCase()) : item
.getText().toLowerCase()
@@ -827,9 +828,12 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
}
}
- public static final int FILTERINGMODE_OFF = 0;
- public static final int FILTERINGMODE_STARTSWITH = 1;
- public static final int FILTERINGMODE_CONTAINS = 2;
+ @Deprecated
+ public static final FilteringMode FILTERINGMODE_OFF = FilteringMode.OFF;
+ @Deprecated
+ public static final FilteringMode FILTERINGMODE_STARTSWITH = FilteringMode.STARTSWITH;
+ @Deprecated
+ public static final FilteringMode FILTERINGMODE_CONTAINS = FilteringMode.CONTAINS;
private static final String CLASSNAME = "v-filterselect";
private static final String STYLE_NO_INPUT = "no-input";
@@ -928,7 +932,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
protected boolean enabled;
protected boolean readonly;
- protected int filteringmode = FILTERINGMODE_OFF;
+ protected FilteringMode filteringmode = FilteringMode.OFF;
// shown in unfocused empty field, disappears on focus (e.g "Search here")
private static final String CLASSNAME_PROMPT = "prompt";
diff --git a/client/src/com/vaadin/client/ui/datefield/AbstractDateFieldConnector.java b/client/src/com/vaadin/client/ui/datefield/AbstractDateFieldConnector.java
index cc98767e00..994a9e1d66 100644
--- a/client/src/com/vaadin/client/ui/datefield/AbstractDateFieldConnector.java
+++ b/client/src/com/vaadin/client/ui/datefield/AbstractDateFieldConnector.java
@@ -24,6 +24,7 @@ import com.vaadin.client.UIDL;
import com.vaadin.client.VConsole;
import com.vaadin.client.ui.AbstractFieldConnector;
import com.vaadin.shared.ui.datefield.DateFieldConstants;
+import com.vaadin.shared.ui.datefield.Resolution;
public class AbstractDateFieldConnector extends AbstractFieldConnector
implements Paintable {
@@ -62,19 +63,19 @@ public class AbstractDateFieldConnector extends AbstractFieldConnector
.getBooleanAttribute(DateFieldConstants.ATTR_WEEK_NUMBERS)
&& getWidget().dts.getFirstDayOfWeek() == 1;
- int newResolution;
+ Resolution newResolution;
if (uidl.hasVariable("sec")) {
- newResolution = VDateField.RESOLUTION_SEC;
+ newResolution = Resolution.SECOND;
} else if (uidl.hasVariable("min")) {
- newResolution = VDateField.RESOLUTION_MIN;
+ newResolution = Resolution.MINUTE;
} else if (uidl.hasVariable("hour")) {
- newResolution = VDateField.RESOLUTION_HOUR;
+ newResolution = Resolution.HOUR;
} else if (uidl.hasVariable("day")) {
- newResolution = VDateField.RESOLUTION_DAY;
+ newResolution = Resolution.DAY;
} else if (uidl.hasVariable("month")) {
- newResolution = VDateField.RESOLUTION_MONTH;
+ newResolution = Resolution.MONTH;
} else {
- newResolution = VDateField.RESOLUTION_YEAR;
+ newResolution = Resolution.YEAR;
}
// Remove old stylename that indicates current resolution
@@ -96,16 +97,16 @@ public class AbstractDateFieldConnector extends AbstractFieldConnector
true);
final int year = uidl.getIntVariable("year");
- final int month = (getWidget().currentResolution >= VDateField.RESOLUTION_MONTH) ? uidl
- .getIntVariable("month") : -1;
- final int day = (getWidget().currentResolution >= VDateField.RESOLUTION_DAY) ? uidl
- .getIntVariable("day") : -1;
- final int hour = (getWidget().currentResolution >= VDateField.RESOLUTION_HOUR) ? uidl
- .getIntVariable("hour") : 0;
- final int min = (getWidget().currentResolution >= VDateField.RESOLUTION_MIN) ? uidl
- .getIntVariable("min") : 0;
- final int sec = (getWidget().currentResolution >= VDateField.RESOLUTION_SEC) ? uidl
- .getIntVariable("sec") : 0;
+ final int month = (getWidget().currentResolution.getCalendarField() >= Resolution.MONTH
+ .getCalendarField()) ? uidl.getIntVariable("month") : -1;
+ final int day = (getWidget().currentResolution.getCalendarField() >= Resolution.DAY
+ .getCalendarField()) ? uidl.getIntVariable("day") : -1;
+ final int hour = (getWidget().currentResolution.getCalendarField() >= Resolution.HOUR
+ .getCalendarField()) ? uidl.getIntVariable("hour") : 0;
+ final int min = (getWidget().currentResolution.getCalendarField() >= Resolution.MINUTE
+ .getCalendarField()) ? uidl.getIntVariable("min") : 0;
+ final int sec = (getWidget().currentResolution.getCalendarField() >= Resolution.SECOND
+ .getCalendarField()) ? uidl.getIntVariable("sec") : 0;
// Construct new date for this datefield (only if not null)
if (year > -1) {
diff --git a/client/src/com/vaadin/client/ui/datefield/InlineDateFieldConnector.java b/client/src/com/vaadin/client/ui/datefield/InlineDateFieldConnector.java
index 0bcb828b19..2f2dd380d6 100644
--- a/client/src/com/vaadin/client/ui/datefield/InlineDateFieldConnector.java
+++ b/client/src/com/vaadin/client/ui/datefield/InlineDateFieldConnector.java
@@ -23,6 +23,7 @@ import com.vaadin.client.UIDL;
import com.vaadin.client.ui.datefield.VCalendarPanel.FocusChangeListener;
import com.vaadin.client.ui.datefield.VCalendarPanel.TimeChangeListener;
import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.datefield.Resolution;
import com.vaadin.ui.InlineDateField;
@Connect(InlineDateField.class)
@@ -49,7 +50,8 @@ public class InlineDateFieldConnector extends AbstractDateFieldConnector {
getWidget().calendarPanel.setDate(null);
}
- if (getWidget().currentResolution > VDateField.RESOLUTION_DAY) {
+ if (getWidget().currentResolution.getCalendarField() > Resolution.DAY
+ .getCalendarField()) {
getWidget().calendarPanel
.setTimeChangeListener(new TimeChangeListener() {
@Override
@@ -74,7 +76,8 @@ public class InlineDateFieldConnector extends AbstractDateFieldConnector {
});
}
- if (getWidget().currentResolution <= VDateField.RESOLUTION_MONTH) {
+ if (getWidget().currentResolution.getCalendarField() <= Resolution.MONTH
+ .getCalendarField()) {
getWidget().calendarPanel
.setFocusChangeListener(new FocusChangeListener() {
@Override
diff --git a/client/src/com/vaadin/client/ui/datefield/PopupDateFieldConnector.java b/client/src/com/vaadin/client/ui/datefield/PopupDateFieldConnector.java
index d09f3a4db6..f5be276575 100644
--- a/client/src/com/vaadin/client/ui/datefield/PopupDateFieldConnector.java
+++ b/client/src/com/vaadin/client/ui/datefield/PopupDateFieldConnector.java
@@ -24,6 +24,7 @@ import com.vaadin.client.UIDL;
import com.vaadin.client.ui.datefield.VCalendarPanel.FocusChangeListener;
import com.vaadin.client.ui.datefield.VCalendarPanel.TimeChangeListener;
import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.datefield.Resolution;
import com.vaadin.ui.DateField;
@Connect(DateField.class)
@@ -60,7 +61,8 @@ public class PopupDateFieldConnector extends TextualDateConnector {
}
getWidget().calendarToggle.setEnabled(getWidget().enabled);
- if (getWidget().currentResolution <= VPopupCalendar.RESOLUTION_MONTH) {
+ if (getWidget().currentResolution.getCalendarField() <= Resolution.MONTH
+ .getCalendarField()) {
getWidget().calendar
.setFocusChangeListener(new FocusChangeListener() {
@Override
@@ -76,7 +78,8 @@ public class PopupDateFieldConnector extends TextualDateConnector {
getWidget().calendar.setFocusChangeListener(null);
}
- if (getWidget().currentResolution > VPopupCalendar.RESOLUTION_DAY) {
+ if (getWidget().currentResolution.getCalendarField() > Resolution.DAY
+ .getCalendarField()) {
getWidget().calendar
.setTimeChangeListener(new TimeChangeListener() {
@Override
diff --git a/client/src/com/vaadin/client/ui/datefield/TextualDateConnector.java b/client/src/com/vaadin/client/ui/datefield/TextualDateConnector.java
index f0a99192fa..ef4b53f9f4 100644
--- a/client/src/com/vaadin/client/ui/datefield/TextualDateConnector.java
+++ b/client/src/com/vaadin/client/ui/datefield/TextualDateConnector.java
@@ -18,12 +18,13 @@ package com.vaadin.client.ui.datefield;
import com.vaadin.client.ApplicationConnection;
import com.vaadin.client.UIDL;
+import com.vaadin.shared.ui.datefield.Resolution;
public class TextualDateConnector extends AbstractDateFieldConnector {
@Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
- int origRes = getWidget().currentResolution;
+ Resolution origRes = getWidget().currentResolution;
String oldLocale = getWidget().currentLocale;
super.updateFromUIDL(uidl, client);
if (origRes != getWidget().currentResolution
diff --git a/client/src/com/vaadin/client/ui/datefield/VCalendarPanel.java b/client/src/com/vaadin/client/ui/datefield/VCalendarPanel.java
index 9d519e3179..0d21638417 100644
--- a/client/src/com/vaadin/client/ui/datefield/VCalendarPanel.java
+++ b/client/src/com/vaadin/client/ui/datefield/VCalendarPanel.java
@@ -56,6 +56,7 @@ import com.vaadin.client.ui.FocusableFlexTable;
import com.vaadin.client.ui.SubPartAware;
import com.vaadin.client.ui.label.VLabel;
import com.vaadin.client.ui.nativeselect.VNativeSelect;
+import com.vaadin.shared.ui.datefield.Resolution;
@SuppressWarnings("deprecation")
public class VCalendarPanel extends FocusableFlexTable implements
@@ -162,7 +163,7 @@ public class VCalendarPanel extends FocusableFlexTable implements
private FlexTable days = new FlexTable();
- private int resolution = VDateField.RESOLUTION_YEAR;
+ private Resolution resolution = Resolution.YEAR;
private int focusedRow;
@@ -225,7 +226,7 @@ public class VCalendarPanel extends FocusableFlexTable implements
*/
private void focusDay(Date date) {
// Only used when calender body is present
- if (resolution > VDateField.RESOLUTION_MONTH) {
+ if (resolution.getCalendarField() > Resolution.MONTH.getCalendarField()) {
if (focusedDay != null) {
focusedDay.removeStyleDependentName(CN_FOCUSED);
}
@@ -321,11 +322,11 @@ public class VCalendarPanel extends FocusableFlexTable implements
return false;
}
- public int getResolution() {
+ public Resolution getResolution() {
return resolution;
}
- public void setResolution(int resolution) {
+ public void setResolution(Resolution resolution) {
this.resolution = resolution;
if (time != null) {
time.removeFromParent();
@@ -492,7 +493,8 @@ public class VCalendarPanel extends FocusableFlexTable implements
if (day > 6) {
day = 0;
}
- if (getResolution() > VDateField.RESOLUTION_MONTH) {
+ if (getResolution().getCalendarField() > Resolution.MONTH
+ .getCalendarField()) {
days.setHTML(headerRow, firstWeekdayColumn + i, "<strong>"
+ getDateTimeService().getShortDay(day) + "</strong>");
} else {
@@ -568,7 +570,8 @@ public class VCalendarPanel extends FocusableFlexTable implements
* @return True if it is required
*/
private boolean isTimeSelectorNeeded() {
- return getResolution() > VDateField.RESOLUTION_DAY;
+ return getResolution().getCalendarField() > Resolution.DAY
+ .getCalendarField();
}
/**
@@ -582,13 +585,15 @@ public class VCalendarPanel extends FocusableFlexTable implements
displayedMonth = new Date(now.getYear(), now.getMonth(), 1);
}
- if (getResolution() <= VDateField.RESOLUTION_MONTH
- && focusChangeListener != null) {
+ if (getResolution().getCalendarField() <= Resolution.MONTH
+ .getCalendarField() && focusChangeListener != null) {
focusChangeListener.focusChanged(new Date(focusedDate.getTime()));
}
- final boolean needsMonth = getResolution() > VDateField.RESOLUTION_YEAR;
- boolean needsBody = getResolution() >= VDateField.RESOLUTION_DAY;
+ final boolean needsMonth = getResolution().getCalendarField() > Resolution.YEAR
+ .getCalendarField();
+ boolean needsBody = getResolution().getCalendarField() >= Resolution.DAY
+ .getCalendarField();
buildCalendarHeader(needsMonth);
clearCalendarBody(!needsBody);
if (needsBody) {
@@ -1048,15 +1053,15 @@ public class VCalendarPanel extends FocusableFlexTable implements
return false;
}
- else if (resolution == VDateField.RESOLUTION_YEAR) {
+ else if (resolution == Resolution.YEAR) {
return handleNavigationYearMode(keycode, ctrl, shift);
}
- else if (resolution == VDateField.RESOLUTION_MONTH) {
+ else if (resolution == Resolution.MONTH) {
return handleNavigationMonthMode(keycode, ctrl, shift);
}
- else if (resolution == VDateField.RESOLUTION_DAY) {
+ else if (resolution == Resolution.DAY) {
return handleNavigationDayMode(keycode, ctrl, shift);
}
@@ -1311,14 +1316,16 @@ public class VCalendarPanel extends FocusableFlexTable implements
ampm.addChangeHandler(this);
}
- if (getResolution() >= VDateField.RESOLUTION_MIN) {
+ if (getResolution().getCalendarField() >= Resolution.MINUTE
+ .getCalendarField()) {
mins = createListBox();
for (int i = 0; i < 60; i++) {
mins.addItem((i < 10) ? "0" + i : "" + i);
}
mins.addChangeHandler(this);
}
- if (getResolution() >= VDateField.RESOLUTION_SEC) {
+ if (getResolution().getCalendarField() >= Resolution.SECOND
+ .getCalendarField()) {
sec = createListBox();
for (int i = 0; i < 60; i++) {
sec.addItem((i < 10) ? "0" + i : "" + i);
@@ -1340,7 +1347,8 @@ public class VCalendarPanel extends FocusableFlexTable implements
add(hours);
}
- if (getResolution() >= VDateField.RESOLUTION_MIN) {
+ if (getResolution().getCalendarField() >= Resolution.MINUTE
+ .getCalendarField()) {
add(new VLabel(delimiter));
if (isReadonly()) {
final int m = mins.getSelectedIndex();
@@ -1349,7 +1357,8 @@ public class VCalendarPanel extends FocusableFlexTable implements
add(mins);
}
}
- if (getResolution() >= VDateField.RESOLUTION_SEC) {
+ if (getResolution().getCalendarField() >= Resolution.SECOND
+ .getCalendarField()) {
add(new VLabel(delimiter));
if (isReadonly()) {
final int s = sec.getSelectedIndex();
@@ -1358,7 +1367,7 @@ public class VCalendarPanel extends FocusableFlexTable implements
add(sec);
}
}
- if (getResolution() == VDateField.RESOLUTION_HOUR) {
+ if (getResolution() == Resolution.HOUR) {
add(new VLabel(delimiter + "00")); // o'clock
}
if (getDateTimeService().isTwelveHourClock()) {
@@ -1428,10 +1437,12 @@ public class VCalendarPanel extends FocusableFlexTable implements
} else {
hours.setSelectedIndex(value.getHours());
}
- if (getResolution() >= VDateField.RESOLUTION_MIN) {
+ if (getResolution().getCalendarField() >= Resolution.MINUTE
+ .getCalendarField()) {
mins.setSelectedIndex(value.getMinutes());
}
- if (getResolution() >= VDateField.RESOLUTION_SEC) {
+ if (getResolution().getCalendarField() >= Resolution.SECOND
+ .getCalendarField()) {
sec.setSelectedIndex(value.getSeconds());
}
if (getDateTimeService().isTwelveHourClock()) {
diff --git a/client/src/com/vaadin/client/ui/datefield/VDateField.java b/client/src/com/vaadin/client/ui/datefield/VDateField.java
index 788433027b..915ac4c54d 100644
--- a/client/src/com/vaadin/client/ui/datefield/VDateField.java
+++ b/client/src/com/vaadin/client/ui/datefield/VDateField.java
@@ -22,6 +22,7 @@ import com.google.gwt.user.client.ui.FlowPanel;
import com.vaadin.client.ApplicationConnection;
import com.vaadin.client.DateTimeService;
import com.vaadin.client.ui.Field;
+import com.vaadin.shared.ui.datefield.Resolution;
public class VDateField extends FlowPanel implements Field {
@@ -33,27 +34,33 @@ public class VDateField extends FlowPanel implements Field {
protected boolean immediate;
- public static final int RESOLUTION_YEAR = 1;
- public static final int RESOLUTION_MONTH = 2;
- public static final int RESOLUTION_DAY = 4;
- public static final int RESOLUTION_HOUR = 8;
- public static final int RESOLUTION_MIN = 16;
- public static final int RESOLUTION_SEC = 32;
-
- static String resolutionToString(int res) {
- if (res > RESOLUTION_DAY) {
+ @Deprecated
+ public static final Resolution RESOLUTION_YEAR = Resolution.YEAR;
+ @Deprecated
+ public static final Resolution RESOLUTION_MONTH = Resolution.MONTH;
+ @Deprecated
+ public static final Resolution RESOLUTION_DAY = Resolution.DAY;
+ @Deprecated
+ public static final Resolution RESOLUTION_HOUR = Resolution.HOUR;
+ @Deprecated
+ public static final Resolution RESOLUTION_MIN = Resolution.MINUTE;
+ @Deprecated
+ public static final Resolution RESOLUTION_SEC = Resolution.SECOND;
+
+ static String resolutionToString(Resolution res) {
+ if (res.getCalendarField() > Resolution.DAY.getCalendarField()) {
return "full";
}
- if (res == RESOLUTION_DAY) {
+ if (res == Resolution.DAY) {
return "day";
}
- if (res == RESOLUTION_MONTH) {
+ if (res == Resolution.MONTH) {
return "month";
}
return "year";
}
- protected int currentResolution = RESOLUTION_YEAR;
+ protected Resolution currentResolution = Resolution.YEAR;
protected String currentLocale;
@@ -108,11 +115,11 @@ public class VDateField extends FlowPanel implements Field {
DateTimeService.setMilliseconds(date, ms);
}
- public int getCurrentResolution() {
+ public Resolution getCurrentResolution() {
return currentResolution;
}
- public void setCurrentResolution(int currentResolution) {
+ public void setCurrentResolution(Resolution currentResolution) {
this.currentResolution = currentResolution;
}
diff --git a/client/src/com/vaadin/client/ui/datefield/VDateFieldCalendar.java b/client/src/com/vaadin/client/ui/datefield/VDateFieldCalendar.java
index cf998421fd..41b7aedae6 100644
--- a/client/src/com/vaadin/client/ui/datefield/VDateFieldCalendar.java
+++ b/client/src/com/vaadin/client/ui/datefield/VDateFieldCalendar.java
@@ -22,6 +22,7 @@ import com.google.gwt.event.dom.client.DomEvent;
import com.vaadin.client.DateTimeService;
import com.vaadin.client.ui.datefield.VCalendarPanel.FocusOutListener;
import com.vaadin.client.ui.datefield.VCalendarPanel.SubmitListener;
+import com.vaadin.shared.ui.datefield.Resolution;
/**
* A client side implementation for InlineDateField
@@ -73,22 +74,28 @@ public class VDateFieldCalendar extends VDateField {
setCurrentDate((Date) date2.clone());
getClient().updateVariable(getId(), "year", date2.getYear() + 1900,
false);
- if (getCurrentResolution() > VDateField.RESOLUTION_YEAR) {
+ if (getCurrentResolution().getCalendarField() > Resolution.YEAR
+ .getCalendarField()) {
getClient().updateVariable(getId(), "month",
date2.getMonth() + 1, false);
- if (getCurrentResolution() > RESOLUTION_MONTH) {
+ if (getCurrentResolution().getCalendarField() > Resolution.MONTH
+ .getCalendarField()) {
getClient().updateVariable(getId(), "day", date2.getDate(),
false);
- if (getCurrentResolution() > RESOLUTION_DAY) {
+ if (getCurrentResolution().getCalendarField() > Resolution.DAY
+ .getCalendarField()) {
getClient().updateVariable(getId(), "hour",
date2.getHours(), false);
- if (getCurrentResolution() > RESOLUTION_HOUR) {
+ if (getCurrentResolution().getCalendarField() > Resolution.HOUR
+ .getCalendarField()) {
getClient().updateVariable(getId(), "min",
date2.getMinutes(), false);
- if (getCurrentResolution() > RESOLUTION_MIN) {
+ if (getCurrentResolution().getCalendarField() > Resolution.MINUTE
+ .getCalendarField()) {
getClient().updateVariable(getId(), "sec",
date2.getSeconds(), false);
- if (getCurrentResolution() > RESOLUTION_SEC) {
+ if (getCurrentResolution().getCalendarField() > Resolution.SECOND
+ .getCalendarField()) {
getClient().updateVariable(
getId(),
"msec",
diff --git a/client/src/com/vaadin/client/ui/datefield/VPopupCalendar.java b/client/src/com/vaadin/client/ui/datefield/VPopupCalendar.java
index e5aeb2efe8..79ede5b013 100644
--- a/client/src/com/vaadin/client/ui/datefield/VPopupCalendar.java
+++ b/client/src/com/vaadin/client/ui/datefield/VPopupCalendar.java
@@ -40,6 +40,7 @@ import com.vaadin.client.ui.SubPartAware;
import com.vaadin.client.ui.VOverlay;
import com.vaadin.client.ui.datefield.VCalendarPanel.FocusOutListener;
import com.vaadin.client.ui.datefield.VCalendarPanel.SubmitListener;
+import com.vaadin.shared.ui.datefield.Resolution;
/**
* Represents a date selection component with a text field and a popup date
@@ -123,19 +124,24 @@ public class VPopupCalendar extends VTextualDate implements Field,
setCurrentDate((Date) newDate.clone());
getClient().updateVariable(getId(), "year",
newDate.getYear() + 1900, false);
- if (getCurrentResolution() > VDateField.RESOLUTION_YEAR) {
+ if (getCurrentResolution().getCalendarField() > Resolution.YEAR
+ .getCalendarField()) {
getClient().updateVariable(getId(), "month",
newDate.getMonth() + 1, false);
- if (getCurrentResolution() > RESOLUTION_MONTH) {
+ if (getCurrentResolution().getCalendarField() > Resolution.MONTH
+ .getCalendarField()) {
getClient().updateVariable(getId(), "day",
newDate.getDate(), false);
- if (getCurrentResolution() > RESOLUTION_DAY) {
+ if (getCurrentResolution().getCalendarField() > Resolution.DAY
+ .getCalendarField()) {
getClient().updateVariable(getId(), "hour",
newDate.getHours(), false);
- if (getCurrentResolution() > RESOLUTION_HOUR) {
+ if (getCurrentResolution().getCalendarField() > Resolution.HOUR
+ .getCalendarField()) {
getClient().updateVariable(getId(), "min",
newDate.getMinutes(), false);
- if (getCurrentResolution() > RESOLUTION_MIN) {
+ if (getCurrentResolution().getCalendarField() > Resolution.MINUTE
+ .getCalendarField()) {
getClient().updateVariable(getId(), "sec",
newDate.getSeconds(), false);
}
diff --git a/client/src/com/vaadin/client/ui/datefield/VTextualDate.java b/client/src/com/vaadin/client/ui/datefield/VTextualDate.java
index 5d19cf5db2..e2d9962979 100644
--- a/client/src/com/vaadin/client/ui/datefield/VTextualDate.java
+++ b/client/src/com/vaadin/client/ui/datefield/VTextualDate.java
@@ -34,6 +34,7 @@ import com.vaadin.client.ui.Field;
import com.vaadin.client.ui.SubPartAware;
import com.vaadin.client.ui.textfield.VTextField;
import com.vaadin.shared.EventId;
+import com.vaadin.shared.ui.datefield.Resolution;
public class VTextualDate extends VDateField implements Field, ChangeHandler,
Focusable, SubPartAware {
@@ -101,7 +102,7 @@ public class VTextualDate extends VDateField implements Field, ChangeHandler,
protected String getFormatString() {
if (formatStr == null) {
- if (currentResolution == RESOLUTION_YEAR) {
+ if (currentResolution == Resolution.YEAR) {
formatStr = "yyyy"; // force full year
} else {
@@ -111,16 +112,18 @@ public class VTextualDate extends VDateField implements Field, ChangeHandler,
frmString = cleanFormat(frmString);
// String delim = LocaleService
// .getClockDelimiter(currentLocale);
-
- if (currentResolution >= RESOLUTION_HOUR) {
+ if (currentResolution.getCalendarField() >= Resolution.HOUR
+ .getCalendarField()) {
if (dts.isTwelveHourClock()) {
frmString += " hh";
} else {
frmString += " HH";
}
- if (currentResolution >= RESOLUTION_MIN) {
+ if (currentResolution.getCalendarField() >= Resolution.MINUTE
+ .getCalendarField()) {
frmString += ":mm";
- if (currentResolution >= RESOLUTION_SEC) {
+ if (currentResolution.getCalendarField() >= Resolution.SECOND
+ .getCalendarField()) {
frmString += ":ss";
}
}
@@ -228,59 +231,48 @@ public class VTextualDate extends VDateField implements Field, ChangeHandler,
Date currentDate = getDate();
getClient().updateVariable(getId(), "year",
currentDate != null ? currentDate.getYear() + 1900 : -1,
- currentResolution == VDateField.RESOLUTION_YEAR && immediate);
- if (currentResolution >= VDateField.RESOLUTION_MONTH) {
- getClient().updateVariable(
- getId(),
- "month",
+ currentResolution == Resolution.YEAR && immediate);
+ if (currentResolution.getCalendarField() >= Resolution.MONTH
+ .getCalendarField()) {
+ getClient().updateVariable(getId(), "month",
currentDate != null ? currentDate.getMonth() + 1 : -1,
- currentResolution == VDateField.RESOLUTION_MONTH
- && immediate);
+ currentResolution == Resolution.MONTH && immediate);
}
- if (currentResolution >= VDateField.RESOLUTION_DAY) {
- getClient()
- .updateVariable(
- getId(),
- "day",
- currentDate != null ? currentDate.getDate() : -1,
- currentResolution == VDateField.RESOLUTION_DAY
- && immediate);
+ if (currentResolution.getCalendarField() >= Resolution.DAY
+ .getCalendarField()) {
+ getClient().updateVariable(getId(), "day",
+ currentDate != null ? currentDate.getDate() : -1,
+ currentResolution == Resolution.DAY && immediate);
}
- if (currentResolution >= VDateField.RESOLUTION_HOUR) {
- getClient().updateVariable(
- getId(),
- "hour",
+ if (currentResolution.getCalendarField() >= Resolution.HOUR
+ .getCalendarField()) {
+ getClient().updateVariable(getId(), "hour",
currentDate != null ? currentDate.getHours() : -1,
- currentResolution == VDateField.RESOLUTION_HOUR
- && immediate);
+ currentResolution == Resolution.HOUR && immediate);
}
- if (currentResolution >= VDateField.RESOLUTION_MIN) {
- getClient()
- .updateVariable(
- getId(),
- "min",
- currentDate != null ? currentDate.getMinutes() : -1,
- currentResolution == VDateField.RESOLUTION_MIN
- && immediate);
+ if (currentResolution.getCalendarField() >= Resolution.MINUTE
+ .getCalendarField()) {
+ getClient().updateVariable(getId(), "min",
+ currentDate != null ? currentDate.getMinutes() : -1,
+ currentResolution == Resolution.MINUTE && immediate);
}
- if (currentResolution >= VDateField.RESOLUTION_SEC) {
- getClient()
- .updateVariable(
- getId(),
- "sec",
- currentDate != null ? currentDate.getSeconds() : -1,
- currentResolution == VDateField.RESOLUTION_SEC
- && immediate);
+ if (currentResolution.getCalendarField() >= Resolution.SECOND
+ .getCalendarField()) {
+ getClient().updateVariable(getId(), "sec",
+ currentDate != null ? currentDate.getSeconds() : -1,
+ currentResolution == Resolution.SECOND && immediate);
}
}
private String cleanFormat(String format) {
// Remove unnecessary d & M if resolution is too low
- if (currentResolution < VDateField.RESOLUTION_DAY) {
+ if (currentResolution.getCalendarField() < Resolution.DAY
+ .getCalendarField()) {
format = format.replaceAll("d", "");
}
- if (currentResolution < VDateField.RESOLUTION_MONTH) {
+ if (currentResolution.getCalendarField() < Resolution.MONTH
+ .getCalendarField()) {
format = format.replaceAll("M", "");
}
diff --git a/client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java b/client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
index d7b0520784..d65a2aeb9b 100644
--- a/client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
+++ b/client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
@@ -236,7 +236,7 @@ public abstract class AbstractOrderedLayoutConnector extends
String caption = child.getState().caption;
URLReference iconUrl = child.getState().resources
.get(ComponentConstants.ICON_RESOURCE);
- String iconUrlString = iconUrl != null ? iconUrl.toString() : null;
+ String iconUrlString = iconUrl != null ? iconUrl.getURL() : null;
List<String> styles = child.getState().styles;
String error = child.getState().errorMessage;
boolean showError = error != null;
@@ -404,14 +404,34 @@ public abstract class AbstractOrderedLayoutConnector extends
* Does the layout need a fixed height?
*/
private boolean needsFixedHeight() {
- if (!getWidget().vertical
- && isUndefinedHeight()
- && (hasRelativeHeight.size() > 0 || (hasVerticalAlignment
- .size() > 0 && hasVerticalAlignment.size() < getChildren()
- .size()))) {
- return true;
+ boolean isVertical = getWidget().vertical;
+ boolean hasChildrenWithVerticalAlignmentCenterOrBottom = !hasVerticalAlignment
+ .isEmpty();
+ boolean allChildrenHasVerticalAlignmentCenterOrBottom = hasVerticalAlignment
+ .size() == getChildren().size();
+ boolean hasChildrenWithRelativeHeight = !hasRelativeHeight.isEmpty();
+
+ if(isVertical){
+ return false;
}
- return false;
+
+ else if(!isUndefinedHeight()){
+ return false;
+ }
+
+ else if (!hasChildrenWithRelativeHeight) {
+ return false;
+ }
+
+ else if (!hasChildrenWithVerticalAlignmentCenterOrBottom) {
+ return false;
+ }
+
+ else if (allChildrenHasVerticalAlignmentCenterOrBottom) {
+ return false;
+ }
+
+ return true;
}
/**
@@ -493,6 +513,7 @@ public abstract class AbstractOrderedLayoutConnector extends
private void updateLayoutHeight() {
if (needsFixedHeight()) {
int h = getMaxHeight();
+ assert(h >= 0);
h += getLayoutManager().getBorderHeight(getWidget().getElement())
+ getLayoutManager().getPaddingHeight(
getWidget().getElement());
@@ -516,8 +537,13 @@ public abstract class AbstractOrderedLayoutConnector extends
Element el = child.getWidget().getElement();
CaptionPosition pos = getWidget().getCaptionPositionFromElement(
(Element) el.getParentElement().cast());
+ int h = getLayoutManager().getOuterHeight(el);
+ if (h == -1) {
+ // Height has not yet been measured so using a more
+ // conventional method instead.
+ h = Util.getRequiredHeight(el);
+ }
if (needsMeasure.contains(el)) {
- int h = getLayoutManager().getOuterHeight(el);
String sHeight = el.getStyle().getHeight();
// Only add the caption size to the height of the slot if
// coption position is top or bottom
@@ -530,7 +556,6 @@ public abstract class AbstractOrderedLayoutConnector extends
highestNonRelative = h;
}
} else {
- int h = getLayoutManager().getOuterHeight(el);
if (childCaptionElementHeight.containsKey(el)
&& (pos == CaptionPosition.TOP || pos == CaptionPosition.BOTTOM)) {
h += childCaptionElementHeight.get(el);
diff --git a/client/src/com/vaadin/client/ui/splitpanel/VAbstractSplitPanel.java b/client/src/com/vaadin/client/ui/splitpanel/VAbstractSplitPanel.java
index 088e743d7a..bcb8809e90 100644
--- a/client/src/com/vaadin/client/ui/splitpanel/VAbstractSplitPanel.java
+++ b/client/src/com/vaadin/client/ui/splitpanel/VAbstractSplitPanel.java
@@ -48,6 +48,7 @@ import com.vaadin.client.ui.TouchScrollDelegate;
import com.vaadin.client.ui.TouchScrollDelegate.TouchScrollHandler;
import com.vaadin.client.ui.VOverlay;
import com.vaadin.client.ui.splitpanel.VAbstractSplitPanel.SplitterMoveHandler.SplitterMoveEvent;
+import com.vaadin.shared.ui.Orientation;
public class VAbstractSplitPanel extends ComplexPanel {
@@ -55,13 +56,9 @@ public class VAbstractSplitPanel extends ComplexPanel {
public static final String CLASSNAME = "v-splitpanel";
- public static final int ORIENTATION_HORIZONTAL = 0;
-
- public static final int ORIENTATION_VERTICAL = 1;
-
private static final int MIN_SIZE = 30;
- private int orientation = ORIENTATION_HORIZONTAL;
+ private Orientation orientation = Orientation.HORIZONTAL;
Widget firstChild;
@@ -113,17 +110,17 @@ public class VAbstractSplitPanel extends ComplexPanel {
protected int origScrollTop;
public VAbstractSplitPanel() {
- this(ORIENTATION_HORIZONTAL);
+ this(Orientation.HORIZONTAL);
}
- public VAbstractSplitPanel(int orientation) {
+ public VAbstractSplitPanel(Orientation orientation) {
setElement(DOM.createDiv());
setStyleName(StyleConstants.UI_LAYOUT);
switch (orientation) {
- case ORIENTATION_HORIZONTAL:
+ case HORIZONTAL:
addStyleName(CLASSNAME + "-horizontal");
break;
- case ORIENTATION_VERTICAL:
+ case VERTICAL:
default:
addStyleName(CLASSNAME + "-vertical");
break;
@@ -190,9 +187,9 @@ public class VAbstractSplitPanel extends ComplexPanel {
setStylenames();
}
- private void setOrientation(int orientation) {
+ private void setOrientation(Orientation orientation) {
this.orientation = orientation;
- if (orientation == ORIENTATION_HORIZONTAL) {
+ if (orientation == Orientation.HORIZONTAL) {
DOM.setStyleAttribute(splitter, "height", "100%");
DOM.setStyleAttribute(splitter, "top", "0");
DOM.setStyleAttribute(firstContainer, "height", "100%");
@@ -228,10 +225,10 @@ public class VAbstractSplitPanel extends ComplexPanel {
void setPositionReversed(boolean reversed) {
if (positionReversed != reversed) {
- if (orientation == ORIENTATION_HORIZONTAL) {
+ if (orientation == Orientation.HORIZONTAL) {
DOM.setStyleAttribute(splitter, "right", "");
DOM.setStyleAttribute(splitter, "left", "");
- } else if (orientation == ORIENTATION_VERTICAL) {
+ } else if (orientation == Orientation.VERTICAL) {
DOM.setStyleAttribute(splitter, "top", "");
DOM.setStyleAttribute(splitter, "bottom", "");
}
@@ -253,7 +250,7 @@ public class VAbstractSplitPanel extends ComplexPanel {
posAsFloat = Math.round(Float.parseFloat(pos.substring(0,
pos.length() - 1))
/ 100
- * (orientation == ORIENTATION_HORIZONTAL ? getOffsetWidth()
+ * (orientation == Orientation.HORIZONTAL ? getOffsetWidth()
: getOffsetHeight()));
} else {
posAsFloat = Float.parseFloat(pos.substring(0, pos.length() - 2));
@@ -272,7 +269,7 @@ public class VAbstractSplitPanel extends ComplexPanel {
if (pos.endsWith("px")) {
float pixelPosition = Float.parseFloat(pos.substring(0,
pos.length() - 2));
- int offsetLength = orientation == ORIENTATION_HORIZONTAL ? getOffsetWidth()
+ int offsetLength = orientation == Orientation.HORIZONTAL ? getOffsetWidth()
: getOffsetHeight();
// Take splitter size into account at the edge
@@ -344,7 +341,7 @@ public class VAbstractSplitPanel extends ComplexPanel {
// Convert percentage values to pixels
if (pos.indexOf("%") > 0) {
- int size = orientation == ORIENTATION_HORIZONTAL ? getOffsetWidth()
+ int size = orientation == Orientation.HORIZONTAL ? getOffsetWidth()
: getOffsetHeight();
float percentage = Float.parseFloat(pos.substring(0,
pos.length() - 1));
@@ -352,7 +349,7 @@ public class VAbstractSplitPanel extends ComplexPanel {
}
String attributeName;
- if (orientation == ORIENTATION_HORIZONTAL) {
+ if (orientation == Orientation.HORIZONTAL) {
if (positionReversed) {
attributeName = "right";
} else {
@@ -382,7 +379,7 @@ public class VAbstractSplitPanel extends ComplexPanel {
int pixelPosition;
switch (orientation) {
- case ORIENTATION_HORIZONTAL:
+ case HORIZONTAL:
wholeSize = DOM.getElementPropertyInt(wrapper, "clientWidth");
pixelPosition = DOM.getElementPropertyInt(splitter, "offsetLeft");
@@ -430,7 +427,7 @@ public class VAbstractSplitPanel extends ComplexPanel {
}
}
break;
- case ORIENTATION_VERTICAL:
+ case VERTICAL:
wholeSize = DOM.getElementPropertyInt(wrapper, "clientHeight");
pixelPosition = DOM.getElementPropertyInt(splitter, "offsetTop");
@@ -562,11 +559,11 @@ public class VAbstractSplitPanel extends ComplexPanel {
public void onMouseMove(Event event) {
switch (orientation) {
- case ORIENTATION_HORIZONTAL:
+ case HORIZONTAL:
final int x = Util.getTouchOrMouseClientX(event);
onHorizontalMouseMove(x);
break;
- case ORIENTATION_VERTICAL:
+ case VERTICAL:
default:
final int y = Util.getTouchOrMouseClientY(event);
onVerticalMouseMove(y);
@@ -729,7 +726,7 @@ public class VAbstractSplitPanel extends ComplexPanel {
if (splitterSize < 0) {
if (isAttached()) {
switch (orientation) {
- case ORIENTATION_HORIZONTAL:
+ case HORIZONTAL:
splitterSize = DOM.getElementPropertyInt(splitter,
"offsetWidth");
break;
@@ -746,7 +743,7 @@ public class VAbstractSplitPanel extends ComplexPanel {
void setStylenames() {
final String splitterClass = CLASSNAME
- + (orientation == ORIENTATION_HORIZONTAL ? "-hsplitter"
+ + (orientation == Orientation.HORIZONTAL ? "-hsplitter"
: "-vsplitter");
final String firstContainerClass = CLASSNAME + "-first-container";
final String secondContainerClass = CLASSNAME + "-second-container";
diff --git a/client/src/com/vaadin/client/ui/splitpanel/VSplitPanelHorizontal.java b/client/src/com/vaadin/client/ui/splitpanel/VSplitPanelHorizontal.java
index f347a8521c..c277d594b9 100644
--- a/client/src/com/vaadin/client/ui/splitpanel/VSplitPanelHorizontal.java
+++ b/client/src/com/vaadin/client/ui/splitpanel/VSplitPanelHorizontal.java
@@ -16,9 +16,11 @@
package com.vaadin.client.ui.splitpanel;
+import com.vaadin.shared.ui.Orientation;
+
public class VSplitPanelHorizontal extends VAbstractSplitPanel {
public VSplitPanelHorizontal() {
- super(VAbstractSplitPanel.ORIENTATION_HORIZONTAL);
+ super(Orientation.HORIZONTAL);
}
}
diff --git a/client/src/com/vaadin/client/ui/splitpanel/VSplitPanelVertical.java b/client/src/com/vaadin/client/ui/splitpanel/VSplitPanelVertical.java
index 3f9826833b..4f96d7f746 100644
--- a/client/src/com/vaadin/client/ui/splitpanel/VSplitPanelVertical.java
+++ b/client/src/com/vaadin/client/ui/splitpanel/VSplitPanelVertical.java
@@ -16,9 +16,11 @@
package com.vaadin.client.ui.splitpanel;
+import com.vaadin.shared.ui.Orientation;
+
public class VSplitPanelVertical extends VAbstractSplitPanel {
public VSplitPanelVertical() {
- super(VAbstractSplitPanel.ORIENTATION_VERTICAL);
+ super(Orientation.VERTICAL);
}
}
diff --git a/client/src/com/vaadin/client/ui/tree/TreeConnector.java b/client/src/com/vaadin/client/ui/tree/TreeConnector.java
index 7fd3b105b6..10a3c0fb95 100644
--- a/client/src/com/vaadin/client/ui/tree/TreeConnector.java
+++ b/client/src/com/vaadin/client/ui/tree/TreeConnector.java
@@ -30,6 +30,7 @@ import com.vaadin.client.ui.AbstractComponentConnector;
import com.vaadin.client.ui.tree.VTree.TreeNode;
import com.vaadin.shared.AbstractFieldState;
import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.MultiSelectMode;
import com.vaadin.shared.ui.tree.TreeConstants;
import com.vaadin.ui.Tree;
@@ -108,10 +109,10 @@ public class TreeConnector extends AbstractComponentConnector implements
if (BrowserInfo.get().isTouchDevice()) {
// Always use the simple mode for touch devices that do not have
// shift/ctrl keys (#8595)
- getWidget().multiSelectMode = VTree.MULTISELECT_MODE_SIMPLE;
+ getWidget().multiSelectMode = MultiSelectMode.SIMPLE;
} else {
- getWidget().multiSelectMode = uidl
- .getIntAttribute("multiselectmode");
+ getWidget().multiSelectMode = MultiSelectMode.valueOf(uidl
+ .getStringAttribute("multiselectmode"));
}
}
diff --git a/client/src/com/vaadin/client/ui/tree/VTree.java b/client/src/com/vaadin/client/ui/tree/VTree.java
index 2be3d7b33b..ca021b6dfc 100644
--- a/client/src/com/vaadin/client/ui/tree/VTree.java
+++ b/client/src/com/vaadin/client/ui/tree/VTree.java
@@ -72,6 +72,8 @@ import com.vaadin.client.ui.dd.VDropHandler;
import com.vaadin.client.ui.dd.VHasDropHandler;
import com.vaadin.client.ui.dd.VTransferable;
import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.MouseEventDetails.MouseButton;
+import com.vaadin.shared.ui.MultiSelectMode;
import com.vaadin.shared.ui.dd.VerticalDropLocation;
import com.vaadin.shared.ui.tree.TreeConstants;
@@ -85,14 +87,16 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
public static final String CLASSNAME = "v-tree";
/**
- * Click selects the current node, ctrl/shift toggles multi selection
+ * @deprecated from 7.0, use {@link MultiSelectMode#DEFAULT} instead.
*/
- public static final int MULTISELECT_MODE_DEFAULT = 0;
+ @Deprecated
+ public static final MultiSelectMode MULTISELECT_MODE_DEFAULT = MultiSelectMode.DEFAULT;
/**
- * Click/touch on node toggles its selected status
+ * @deprecated from 7.0, use {@link MultiSelectMode#SIMPLE} instead.
*/
- public static final int MULTISELECT_MODE_SIMPLE = 1;
+ @Deprecated
+ public static final MultiSelectMode MULTISELECT_MODE_SIMPLE = MultiSelectMode.SIMPLE;
private static final int CHARCODE_SPACE = 32;
@@ -106,7 +110,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
private String currentMouseOverKey;
TreeNode lastSelection;
TreeNode focusedNode;
- int multiSelectMode = MULTISELECT_MODE_DEFAULT;
+ MultiSelectMode multiSelectMode = MultiSelectMode.DEFAULT;
private final HashMap<String, TreeNode> keyToNode = new HashMap<String, TreeNode>();
@@ -606,11 +610,11 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
@Override
public void execute() {
- if (multiSelectMode == MULTISELECT_MODE_SIMPLE
+ if (multiSelectMode == MultiSelectMode.SIMPLE
|| !isMultiselect) {
toggleSelection();
lastSelection = TreeNode.this;
- } else if (multiSelectMode == MULTISELECT_MODE_DEFAULT) {
+ } else if (multiSelectMode == MultiSelectMode.DEFAULT) {
// Handle ctrl+click
if (isMultiselect && ctrl && !shift) {
toggleSelection();
@@ -795,8 +799,8 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
// we want to send it immediately.
boolean sendClickEventNow = true;
- if (details.getButton() == NativeEvent.BUTTON_LEFT
- && immediate && selectable) {
+ if (details.getButton() == MouseButton.LEFT && immediate
+ && selectable) {
// Probably a selection that will cause a value change
// event to be sent
sendClickEventNow = false;
diff --git a/common.xml b/common.xml
index 2d64fb88e5..a854ef4358 100644
--- a/common.xml
+++ b/common.xml
@@ -8,7 +8,7 @@
<dirname property="vaadin.basedir" file="${ant.file.common}" />
<property file="${vaadin.basedir}/build.properties" />
- <property name="modules.to.publish.to.maven" value="shared,server,client,client-compiler,client-compiled,theme-compiler,themes-compiled" />
+ <property name="modules.to.publish.to.maven" value="shared,server,client,client-compiler,client-compiled,theme-compiler,themes" />
<property name="modules.to.publish.to.download" value="${modules.to.publish.to.maven},all" />
<ivy:settings file="${vaadin.basedir}/ivysettings.xml" />
diff --git a/gwt-files.xml b/gwt-files.xml
index 87bf6485d0..3ca6349dc9 100644
--- a/gwt-files.xml
+++ b/gwt-files.xml
@@ -63,8 +63,6 @@
<!-- GWT SuperDevMode -->
<fileset dir="${gwt.codeserver.jar.files}">
<exclude name="META-INF/**" />
- <include name="**/*.java" />
- <include name="**/*.classes" />
</fileset>
</union>
@@ -82,6 +80,13 @@
</fileset>
</union>
+ <union id="theme-compiler.gwt.includes">
+ <!-- This is only temporary. Flute must be packaged separately as it is not in Maven and this version is also modified by the GWT team -->
+ <fileset dir="${gwt.user.jar.files}">
+ <include name="org/w3c/flute/**" />
+ </fileset>
+ </union>
+
<union id="client.gwt.includes">
<fileset dir="${gwt.user.jar.files}">
<exclude name="META-INF/**" />
diff --git a/ivysettings.xml b/ivysettings.xml
index 487fc921df..e1e2e45b3d 100644
--- a/ivysettings.xml
+++ b/ivysettings.xml
@@ -49,7 +49,7 @@
resolver="build-temp" />
<module organisation="com.vaadin" name="vaadin-theme-compiler"
resolver="build-temp" />
- <module organisation="com.vaadin" name="vaadin-themes-compiled"
+ <module organisation="com.vaadin" name="vaadin-themes"
resolver="build-temp" />
</modules>
diff --git a/pom-template.xml b/pom-template.xml
index 563a5a8e97..33e6be623e 100644
--- a/pom-template.xml
+++ b/pom-template.xml
@@ -1,62 +1,99 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.vaadin</groupId>
- <artifactId>${module.name}</artifactId>
- <version>${vaadin.maven.version}</version>
- <name>Vaadin</name>
- <organization>
- <name>Vaadin Ltd</name>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>com.vaadin</groupId>
+ <artifactId>${module.name}</artifactId>
+ <version>${vaadin.maven.version}</version>
+ <name>Vaadin</name>
+ <organization>
+ <name>Vaadin Ltd</name>
+ <url>http://vaadin.com</url>
+ </organization>
<url>http://vaadin.com</url>
- </organization>
- <url>http://vaadin.com</url>
- <description>
- Vaadin is a web application framework for Rich Internet Applications (RIA).
+ <description>
+ Vaadin is a web application framework for Rich Internet Applications (RIA).
- Vaadin enables easy development and maintenance of fast and secure rich web
- applications with a stunning look and feel and a wide browser support.
- It features a server-side architecture with the majority of the logic running
- on the server. Ajax technology is used at the browser-side to ensure a rich
- and interactive user experience.
- </description>
- <licenses>
- <license>
- <name>Apache License Version 2.0</name>
- <distribution>repo</distribution>
- <url>http://www.apache.org/licenses/LICENSE-2.0</url>
- </license>
- </licenses>
- <distributionManagement>
- <repository>
- <id>vaadin-releases</id>
- <name>Vaadin release repository</name>
- <url>http://oss.sonatype.org/content/repositories/vaadin-releases/</url>
- </repository>
- <snapshotRepository>
- <id>vaadin-snapshots</id>
- <name>Vaadin snapshot repository</name>
- <url>http://oss.sonatype.org/content/repositories/vaadin-snapshots/</url>
- </snapshotRepository>
- </distributionManagement>
- <repositories>
- <repository>
- <id>vaadin-snapshots</id>
- <url>http://oss.sonatype.org/content/repositories/vaadin-snapshots/</url>
- <releases>
- <enabled>false</enabled>
- </releases>
- <snapshots>
- <enabled>true</enabled>
- </snapshots>
- </repository>
- <repository>
- <id>vaadin-releases</id>
- <url>http://oss.sonatype.org/content/repositories/vaadin-releases/</url>
- <releases>
- <enabled>true</enabled>
- </releases>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </repository>
- </repositories>
+ Vaadin enables easy development and maintenance of fast and
+ secure rich web
+ applications with a stunning look and feel and a wide browser support.
+ It features a server-side architecture with the majority of the logic
+ running
+ on the server. Ajax technology is used at the browser-side to ensure a
+ rich
+ and interactive user experience.
+ </description>
+ <licenses>
+ <license>
+ <name>Apache License Version 2.0</name>
+ <distribution>repo</distribution>
+ <url>http://www.apache.org/licenses/LICENSE-2.0</url>
+ </license>
+ </licenses>
+ <scm>
+ <connection>scm:http:http://dev.vaadin.com/git/vaadin.git</connection>
+ <developerConnection>scm:ssh:git@dev.vaadin.com/vaadin</developerConnection>
+ <url>http://dev.vaadin.com/git/?p=vaadin.git</url>
+ </scm>
+ <developers>
+ <developer>
+ <id>artur</id>
+ <name>Artur Signell</name>
+ <email>artur.signell@vaadin.com</email>
+ <url>http://vaadin.com/web/artur</url>
+ <organization>Vaadin Ltd</organization>
+ <organizationUrl>http://vaadin.com/</organizationUrl>
+ <roles>
+ <role>architect</role>
+ <role>developer</role>
+ <role>team manager</role>
+ </roles>
+ <timezone>2</timezone>
+ </developer>
+ <developer>
+ <id>magi</id>
+ <name>Marko Gronroos</name>
+ <email>magi@vaadin.com</email>
+ <url>http://vaadin.com/web/magi</url>
+ <organization>Vaadin Ltd</organization>
+ <organizationUrl>http://vaadin.com/</organizationUrl>
+ <roles>
+ <role>build manager</role>
+ </roles>
+ <timezone>2</timezone>
+ </developer>
+ </developers>
+ <distributionManagement>
+ <repository>
+ <id>vaadin-releases</id>
+ <name>Vaadin release repository</name>
+ <url>http://oss.sonatype.org/content/repositories/vaadin-releases/</url>
+ </repository>
+ <snapshotRepository>
+ <id>vaadin-snapshots</id>
+ <name>Vaadin snapshot repository</name>
+ <url>http://oss.sonatype.org/content/repositories/vaadin-snapshots/</url>
+ </snapshotRepository>
+ </distributionManagement>
+ <repositories>
+ <repository>
+ <id>vaadin-snapshots</id>
+ <url>http://oss.sonatype.org/content/repositories/vaadin-snapshots/</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>vaadin-releases</id>
+ <url>http://oss.sonatype.org/content/repositories/vaadin-releases/</url>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
</project> \ No newline at end of file
diff --git a/server/ivy.xml b/server/ivy.xml
index acc384ea30..5ef49db80a 100644
--- a/server/ivy.xml
+++ b/server/ivy.xml
@@ -25,9 +25,9 @@
<!-- Liferay Portal Service -->
<dependency org="com.liferay.portal" name="portal-service"
rev="6.0.2" conf="build-provided,ide -> default" />
- <!--Servlet API version 2.5 -->
+ <!--Servlet API version 2.4 -->
<dependency org="javax.servlet" name="servlet-api"
- rev="2.5" conf="build-provided,ide,tests -> default" />
+ rev="2.4" conf="build-provided,ide,tests -> default" />
<!--Portlet API version 2.0 (JSR-286) -->
<dependency org="javax.portlet" name="portlet-api"
@@ -43,6 +43,8 @@
<!-- Project modules -->
<dependency org="com.vaadin" name="vaadin-shared"
rev="${vaadin.version}" conf="build,tests" />
+ <dependency org="com.vaadin" name="vaadin-theme-compiler"
+ rev="${vaadin.version}" conf="build,tests" />
<!-- Jsoup for BootstrapHandler -->
<dependency org="org.jsoup" name="jsoup" rev="1.6.3"
diff --git a/server/src/com/vaadin/LegacyApplication.java b/server/src/com/vaadin/LegacyApplication.java
index a1aeb037fd..3a6ffaa39c 100644
--- a/server/src/com/vaadin/LegacyApplication.java
+++ b/server/src/com/vaadin/LegacyApplication.java
@@ -26,6 +26,7 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.vaadin.server.AbstractUIProvider;
+import com.vaadin.server.DefaultErrorListener;
import com.vaadin.server.Terminal.ErrorEvent;
import com.vaadin.server.Terminal.ErrorListener;
import com.vaadin.server.VaadinSession;
@@ -100,24 +101,23 @@ public abstract class LegacyApplication extends AbstractUIProvider implements
}
@Override
- public UI createInstance(Class<? extends UI> type, WrappedRequest request) {
+ public UI createInstance(WrappedRequest request, Class<? extends UI> type) {
return getUIInstance(request);
}
@Override
- public String getThemeForUI(WrappedRequest request,
- Class<? extends UI> uiClass) {
+ public String getTheme(WrappedRequest request, Class<? extends UI> uiClass) {
return theme;
}
@Override
- public String getPageTitleForUI(WrappedRequest request,
+ public String getPageTitle(WrappedRequest request,
Class<? extends UI> uiClass) {
UI uiInstance = getUIInstance(request);
if (uiInstance != null) {
return uiInstance.getCaption();
} else {
- return super.getPageTitleForUI(request, uiClass);
+ return super.getPageTitle(request, uiClass);
}
}
@@ -282,7 +282,7 @@ public abstract class LegacyApplication extends AbstractUIProvider implements
@Override
public void terminalError(ErrorEvent event) {
- VaadinSession.getCurrent().getErrorHandler().terminalError(event);
+ DefaultErrorListener.doDefault(event);
}
public VaadinSession getContext() {
diff --git a/server/src/com/vaadin/data/validator/DateRangeValidator.java b/server/src/com/vaadin/data/validator/DateRangeValidator.java
index 44c0d1e929..51eaa2e59b 100644
--- a/server/src/com/vaadin/data/validator/DateRangeValidator.java
+++ b/server/src/com/vaadin/data/validator/DateRangeValidator.java
@@ -17,7 +17,7 @@ package com.vaadin.data.validator;
import java.util.Date;
-import com.vaadin.ui.DateField.Resolution;
+import com.vaadin.shared.ui.datefield.Resolution;
/**
* Validator for validating that a Date is inside a given range.
diff --git a/server/src/com/vaadin/event/MouseEvents.java b/server/src/com/vaadin/event/MouseEvents.java
index e287055c2b..37c6d665b5 100644
--- a/server/src/com/vaadin/event/MouseEvents.java
+++ b/server/src/com/vaadin/event/MouseEvents.java
@@ -19,6 +19,7 @@ package com.vaadin.event;
import java.lang.reflect.Method;
import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.MouseEventDetails.MouseButton;
import com.vaadin.ui.Component;
import com.vaadin.util.ReflectTools;
@@ -44,10 +45,21 @@ public interface MouseEvents {
* @since 6.2
*/
public static class ClickEvent extends Component.Event {
- public static final int BUTTON_LEFT = MouseEventDetails.BUTTON_LEFT;
- public static final int BUTTON_MIDDLE = MouseEventDetails.BUTTON_MIDDLE;
- public static final int BUTTON_RIGHT = MouseEventDetails.BUTTON_RIGHT;
-
+ /**
+ * @deprecated use {@link Button#LEFT} instead.
+ */
+ @Deprecated
+ public static final MouseButton BUTTON_LEFT = MouseButton.LEFT;
+ /**
+ * @deprecated use {@link Button#MIDDLE} instead.
+ */
+ @Deprecated
+ public static final MouseButton BUTTON_MIDDLE = MouseButton.MIDDLE;
+ /**
+ * @deprecated use {@link Button#RIGHT} instead.
+ */
+ @Deprecated
+ public static final MouseButton BUTTON_RIGHT = MouseButton.RIGHT;
private MouseEventDetails details;
public ClickEvent(Component source, MouseEventDetails mouseEventDetails) {
@@ -57,13 +69,13 @@ public interface MouseEvents {
/**
* Returns an identifier describing which mouse button the user pushed.
- * Compare with {@link #BUTTON_LEFT},{@link #BUTTON_MIDDLE},
- * {@link #BUTTON_RIGHT} to find out which butten it is.
+ * Compare with {@link MouseButton#LEFT},{@link MouseButton#MIDDLE},
+ * {@link Button#RIGHT} to find out which button it is.
*
- * @return one of {@link #BUTTON_LEFT}, {@link #BUTTON_MIDDLE},
- * {@link #BUTTON_RIGHT}.
+ * @return one of {@link MouseButton#LEFT}, {@link MouseButton#MIDDLE},
+ * {@link MouseButton#RIGHT}.
*/
- public int getButton() {
+ public MouseButton getButton() {
return details.getButton();
}
diff --git a/server/src/com/vaadin/external/json/JSONArray.java b/server/src/com/vaadin/external/json/JSONArray.java
deleted file mode 100644
index 2307749ffc..0000000000
--- a/server/src/com/vaadin/external/json/JSONArray.java
+++ /dev/null
@@ -1,963 +0,0 @@
-package com.vaadin.external.json;
-
-/*
- Copyright (c) 2002 JSON.org
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- The Software shall be used for Good, not Evil.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
- */
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.io.Writer;
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * A JSONArray is an ordered sequence of values. Its external text form is a
- * string wrapped in square brackets with commas separating the values. The
- * internal form is an object having <code>get</code> and <code>opt</code>
- * methods for accessing the values by index, and <code>put</code> methods for
- * adding or replacing values. The values can be any of these types:
- * <code>Boolean</code>, <code>JSONArray</code>, <code>JSONObject</code>,
- * <code>Number</code>, <code>String</code>, or the
- * <code>JSONObject.NULL object</code>.
- * <p>
- * The constructor can convert a JSON text into a Java object. The
- * <code>toString</code> method converts to JSON text.
- * <p>
- * A <code>get</code> method returns a value if one can be found, and throws an
- * exception if one cannot be found. An <code>opt</code> method returns a
- * default value instead of throwing an exception, and so is useful for
- * obtaining optional values.
- * <p>
- * The generic <code>get()</code> and <code>opt()</code> methods return an
- * object which you can cast or query for type. There are also typed
- * <code>get</code> and <code>opt</code> methods that do type checking and type
- * coercion for you.
- * <p>
- * The texts produced by the <code>toString</code> methods strictly conform to
- * JSON syntax rules. The constructors are more forgiving in the texts they will
- * accept:
- * <ul>
- * <li>An extra <code>,</code>&nbsp;<small>(comma)</small> may appear just
- * before the closing bracket.</li>
- * <li>The <code>null</code> value will be inserted when there is <code>,</code>
- * &nbsp;<small>(comma)</small> elision.</li>
- * <li>Strings may be quoted with <code>'</code>&nbsp;<small>(single
- * quote)</small>.</li>
- * <li>Strings do not need to be quoted at all if they do not begin with a quote
- * or single quote, and if they do not contain leading or trailing spaces, and
- * if they do not contain any of these characters:
- * <code>{ } [ ] / \ : , = ; #</code> and if they do not look like numbers and
- * if they are not the reserved words <code>true</code>, <code>false</code>, or
- * <code>null</code>.</li>
- * <li>Values can be separated by <code>;</code> <small>(semicolon)</small> as
- * well as by <code>,</code> <small>(comma)</small>.</li>
- * <li>Numbers may have the <code>0x-</code> <small>(hex)</small> prefix.</li>
- * </ul>
- *
- * @author JSON.org
- * @version 2011-08-25
- */
-public class JSONArray implements Serializable {
-
- /**
- * The arrayList where the JSONArray's properties are kept.
- */
- private ArrayList myArrayList;
-
- /**
- * Construct an empty JSONArray.
- */
- public JSONArray() {
- myArrayList = new ArrayList();
- }
-
- /**
- * Construct a JSONArray from a JSONTokener.
- *
- * @param x
- * A JSONTokener
- * @throws JSONException
- * If there is a syntax error.
- */
- public JSONArray(JSONTokener x) throws JSONException {
- this();
- if (x.nextClean() != '[') {
- throw x.syntaxError("A JSONArray text must start with '['");
- }
- if (x.nextClean() != ']') {
- x.back();
- for (;;) {
- if (x.nextClean() == ',') {
- x.back();
- myArrayList.add(JSONObject.NULL);
- } else {
- x.back();
- myArrayList.add(x.nextValue());
- }
- switch (x.nextClean()) {
- case ';':
- case ',':
- if (x.nextClean() == ']') {
- return;
- }
- x.back();
- break;
- case ']':
- return;
- default:
- throw x.syntaxError("Expected a ',' or ']'");
- }
- }
- }
- }
-
- /**
- * Construct a JSONArray from a source JSON text.
- *
- * @param source
- * A string that begins with <code>[</code>&nbsp;<small>(left
- * bracket)</small> and ends with <code>]</code>
- * &nbsp;<small>(right bracket)</small>.
- * @throws JSONException
- * If there is a syntax error.
- */
- public JSONArray(String source) throws JSONException {
- this(new JSONTokener(source));
- }
-
- /**
- * Construct a JSONArray from a Collection.
- *
- * @param collection
- * A Collection.
- */
- public JSONArray(Collection collection) {
- myArrayList = new ArrayList();
- if (collection != null) {
- Iterator iter = collection.iterator();
- while (iter.hasNext()) {
- myArrayList.add(JSONObject.wrap(iter.next()));
- }
- }
- }
-
- /**
- * Construct a JSONArray from an array
- *
- * @throws JSONException
- * If not an array.
- */
- public JSONArray(Object array) throws JSONException {
- this();
- if (array.getClass().isArray()) {
- int length = Array.getLength(array);
- for (int i = 0; i < length; i += 1) {
- this.put(JSONObject.wrap(Array.get(array, i)));
- }
- } else {
- throw new JSONException(
- "JSONArray initial value should be a string or collection or array.");
- }
- }
-
- /**
- * Get the object value associated with an index.
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @return An object value.
- * @throws JSONException
- * If there is no value for the index.
- */
- public Object get(int index) throws JSONException {
- Object object = opt(index);
- if (object == null) {
- throw new JSONException("JSONArray[" + index + "] not found.");
- }
- return object;
- }
-
- /**
- * Get the boolean value associated with an index. The string values "true"
- * and "false" are converted to boolean.
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @return The truth.
- * @throws JSONException
- * If there is no value for the index or if the value is not
- * convertible to boolean.
- */
- public boolean getBoolean(int index) throws JSONException {
- Object object = get(index);
- if (object.equals(Boolean.FALSE)
- || (object instanceof String && ((String) object)
- .equalsIgnoreCase("false"))) {
- return false;
- } else if (object.equals(Boolean.TRUE)
- || (object instanceof String && ((String) object)
- .equalsIgnoreCase("true"))) {
- return true;
- }
- throw new JSONException("JSONArray[" + index + "] is not a boolean.");
- }
-
- /**
- * Get the double value associated with an index.
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @return The value.
- * @throws JSONException
- * If the key is not found or if the value cannot be converted
- * to a number.
- */
- public double getDouble(int index) throws JSONException {
- Object object = get(index);
- try {
- return object instanceof Number ? ((Number) object).doubleValue()
- : Double.parseDouble((String) object);
- } catch (Exception e) {
- throw new JSONException("JSONArray[" + index + "] is not a number.");
- }
- }
-
- /**
- * Get the int value associated with an index.
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @return The value.
- * @throws JSONException
- * If the key is not found or if the value is not a number.
- */
- public int getInt(int index) throws JSONException {
- Object object = get(index);
- try {
- return object instanceof Number ? ((Number) object).intValue()
- : Integer.parseInt((String) object);
- } catch (Exception e) {
- throw new JSONException("JSONArray[" + index + "] is not a number.");
- }
- }
-
- /**
- * Get the JSONArray associated with an index.
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @return A JSONArray value.
- * @throws JSONException
- * If there is no value for the index. or if the value is not a
- * JSONArray
- */
- public JSONArray getJSONArray(int index) throws JSONException {
- Object object = get(index);
- if (object instanceof JSONArray) {
- return (JSONArray) object;
- }
- throw new JSONException("JSONArray[" + index + "] is not a JSONArray.");
- }
-
- /**
- * Get the JSONObject associated with an index.
- *
- * @param index
- * subscript
- * @return A JSONObject value.
- * @throws JSONException
- * If there is no value for the index or if the value is not a
- * JSONObject
- */
- public JSONObject getJSONObject(int index) throws JSONException {
- Object object = get(index);
- if (object instanceof JSONObject) {
- return (JSONObject) object;
- }
- throw new JSONException("JSONArray[" + index + "] is not a JSONObject.");
- }
-
- /**
- * Get the long value associated with an index.
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @return The value.
- * @throws JSONException
- * If the key is not found or if the value cannot be converted
- * to a number.
- */
- public long getLong(int index) throws JSONException {
- Object object = get(index);
- try {
- return object instanceof Number ? ((Number) object).longValue()
- : Long.parseLong((String) object);
- } catch (Exception e) {
- throw new JSONException("JSONArray[" + index + "] is not a number.");
- }
- }
-
- /**
- * Get the string associated with an index.
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @return A string value.
- * @throws JSONException
- * If there is no string value for the index.
- */
- public String getString(int index) throws JSONException {
- Object object = get(index);
- if (object instanceof String) {
- return (String) object;
- }
- throw new JSONException("JSONArray[" + index + "] not a string.");
- }
-
- /**
- * Determine if the value is null.
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @return true if the value at the index is null, or if there is no value.
- */
- public boolean isNull(int index) {
- return JSONObject.NULL.equals(opt(index));
- }
-
- /**
- * Make a string from the contents of this JSONArray. The
- * <code>separator</code> string is inserted between each element. Warning:
- * This method assumes that the data structure is acyclical.
- *
- * @param separator
- * A string that will be inserted between the elements.
- * @return a string.
- * @throws JSONException
- * If the array contains an invalid number.
- */
- public String join(String separator) throws JSONException {
- int len = length();
- StringBuffer sb = new StringBuffer();
-
- for (int i = 0; i < len; i += 1) {
- if (i > 0) {
- sb.append(separator);
- }
- sb.append(JSONObject.valueToString(myArrayList.get(i)));
- }
- return sb.toString();
- }
-
- /**
- * Get the number of elements in the JSONArray, included nulls.
- *
- * @return The length (or size).
- */
- public int length() {
- return myArrayList.size();
- }
-
- /**
- * Get the optional object value associated with an index.
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @return An object value, or null if there is no object at that index.
- */
- public Object opt(int index) {
- return (index < 0 || index >= length()) ? null : myArrayList.get(index);
- }
-
- /**
- * Get the optional boolean value associated with an index. It returns false
- * if there is no value at that index, or if the value is not Boolean.TRUE
- * or the String "true".
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @return The truth.
- */
- public boolean optBoolean(int index) {
- return optBoolean(index, false);
- }
-
- /**
- * Get the optional boolean value associated with an index. It returns the
- * defaultValue if there is no value at that index or if it is not a Boolean
- * or the String "true" or "false" (case insensitive).
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @param defaultValue
- * A boolean default.
- * @return The truth.
- */
- public boolean optBoolean(int index, boolean defaultValue) {
- try {
- return getBoolean(index);
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
- /**
- * Get the optional double value associated with an index. NaN is returned
- * if there is no value for the index, or if the value is not a number and
- * cannot be converted to a number.
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @return The value.
- */
- public double optDouble(int index) {
- return optDouble(index, Double.NaN);
- }
-
- /**
- * Get the optional double value associated with an index. The defaultValue
- * is returned if there is no value for the index, or if the value is not a
- * number and cannot be converted to a number.
- *
- * @param index
- * subscript
- * @param defaultValue
- * The default value.
- * @return The value.
- */
- public double optDouble(int index, double defaultValue) {
- try {
- return getDouble(index);
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
- /**
- * Get the optional int value associated with an index. Zero is returned if
- * there is no value for the index, or if the value is not a number and
- * cannot be converted to a number.
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @return The value.
- */
- public int optInt(int index) {
- return optInt(index, 0);
- }
-
- /**
- * Get the optional int value associated with an index. The defaultValue is
- * returned if there is no value for the index, or if the value is not a
- * number and cannot be converted to a number.
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @param defaultValue
- * The default value.
- * @return The value.
- */
- public int optInt(int index, int defaultValue) {
- try {
- return getInt(index);
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
- /**
- * Get the optional JSONArray associated with an index.
- *
- * @param index
- * subscript
- * @return A JSONArray value, or null if the index has no value, or if the
- * value is not a JSONArray.
- */
- public JSONArray optJSONArray(int index) {
- Object o = opt(index);
- return o instanceof JSONArray ? (JSONArray) o : null;
- }
-
- /**
- * Get the optional JSONObject associated with an index. Null is returned if
- * the key is not found, or null if the index has no value, or if the value
- * is not a JSONObject.
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @return A JSONObject value.
- */
- public JSONObject optJSONObject(int index) {
- Object o = opt(index);
- return o instanceof JSONObject ? (JSONObject) o : null;
- }
-
- /**
- * Get the optional long value associated with an index. Zero is returned if
- * there is no value for the index, or if the value is not a number and
- * cannot be converted to a number.
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @return The value.
- */
- public long optLong(int index) {
- return optLong(index, 0);
- }
-
- /**
- * Get the optional long value associated with an index. The defaultValue is
- * returned if there is no value for the index, or if the value is not a
- * number and cannot be converted to a number.
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @param defaultValue
- * The default value.
- * @return The value.
- */
- public long optLong(int index, long defaultValue) {
- try {
- return getLong(index);
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
- /**
- * Get the optional string value associated with an index. It returns an
- * empty string if there is no value at that index. If the value is not a
- * string and is not null, then it is coverted to a string.
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @return A String value.
- */
- public String optString(int index) {
- return optString(index, "");
- }
-
- /**
- * Get the optional string associated with an index. The defaultValue is
- * returned if the key is not found.
- *
- * @param index
- * The index must be between 0 and length() - 1.
- * @param defaultValue
- * The default value.
- * @return A String value.
- */
- public String optString(int index, String defaultValue) {
- Object object = opt(index);
- return JSONObject.NULL.equals(object) ? object.toString()
- : defaultValue;
- }
-
- /**
- * Append a boolean value. This increases the array's length by one.
- *
- * @param value
- * A boolean value.
- * @return this.
- */
- public JSONArray put(boolean value) {
- put(value ? Boolean.TRUE : Boolean.FALSE);
- return this;
- }
-
- /**
- * Put a value in the JSONArray, where the value will be a JSONArray which
- * is produced from a Collection.
- *
- * @param value
- * A Collection value.
- * @return this.
- */
- public JSONArray put(Collection value) {
- put(new JSONArray(value));
- return this;
- }
-
- /**
- * Append a double value. This increases the array's length by one.
- *
- * @param value
- * A double value.
- * @throws JSONException
- * if the value is not finite.
- * @return this.
- */
- public JSONArray put(double value) throws JSONException {
- Double d = new Double(value);
- JSONObject.testValidity(d);
- put(d);
- return this;
- }
-
- /**
- * Append an int value. This increases the array's length by one.
- *
- * @param value
- * An int value.
- * @return this.
- */
- public JSONArray put(int value) {
- put(new Integer(value));
- return this;
- }
-
- /**
- * Append an long value. This increases the array's length by one.
- *
- * @param value
- * A long value.
- * @return this.
- */
- public JSONArray put(long value) {
- put(new Long(value));
- return this;
- }
-
- /**
- * Put a value in the JSONArray, where the value will be a JSONObject which
- * is produced from a Map.
- *
- * @param value
- * A Map value.
- * @return this.
- */
- public JSONArray put(Map value) {
- put(new JSONObject(value));
- return this;
- }
-
- /**
- * Append an object value. This increases the array's length by one.
- *
- * @param value
- * An object value. The value should be a Boolean, Double,
- * Integer, JSONArray, JSONObject, Long, or String, or the
- * JSONObject.NULL object.
- * @return this.
- */
- public JSONArray put(Object value) {
- myArrayList.add(value);
- return this;
- }
-
- /**
- * Put or replace a boolean value in the JSONArray. If the index is greater
- * than the length of the JSONArray, then null elements will be added as
- * necessary to pad it out.
- *
- * @param index
- * The subscript.
- * @param value
- * A boolean value.
- * @return this.
- * @throws JSONException
- * If the index is negative.
- */
- public JSONArray put(int index, boolean value) throws JSONException {
- put(index, value ? Boolean.TRUE : Boolean.FALSE);
- return this;
- }
-
- /**
- * Put a value in the JSONArray, where the value will be a JSONArray which
- * is produced from a Collection.
- *
- * @param index
- * The subscript.
- * @param value
- * A Collection value.
- * @return this.
- * @throws JSONException
- * If the index is negative or if the value is not finite.
- */
- public JSONArray put(int index, Collection value) throws JSONException {
- put(index, new JSONArray(value));
- return this;
- }
-
- /**
- * Put or replace a double value. If the index is greater than the length of
- * the JSONArray, then null elements will be added as necessary to pad it
- * out.
- *
- * @param index
- * The subscript.
- * @param value
- * A double value.
- * @return this.
- * @throws JSONException
- * If the index is negative or if the value is not finite.
- */
- public JSONArray put(int index, double value) throws JSONException {
- put(index, new Double(value));
- return this;
- }
-
- /**
- * Put or replace an int value. If the index is greater than the length of
- * the JSONArray, then null elements will be added as necessary to pad it
- * out.
- *
- * @param index
- * The subscript.
- * @param value
- * An int value.
- * @return this.
- * @throws JSONException
- * If the index is negative.
- */
- public JSONArray put(int index, int value) throws JSONException {
- put(index, new Integer(value));
- return this;
- }
-
- /**
- * Put or replace a long value. If the index is greater than the length of
- * the JSONArray, then null elements will be added as necessary to pad it
- * out.
- *
- * @param index
- * The subscript.
- * @param value
- * A long value.
- * @return this.
- * @throws JSONException
- * If the index is negative.
- */
- public JSONArray put(int index, long value) throws JSONException {
- put(index, new Long(value));
- return this;
- }
-
- /**
- * Put a value in the JSONArray, where the value will be a JSONObject that
- * is produced from a Map.
- *
- * @param index
- * The subscript.
- * @param value
- * The Map value.
- * @return this.
- * @throws JSONException
- * If the index is negative or if the the value is an invalid
- * number.
- */
- public JSONArray put(int index, Map value) throws JSONException {
- put(index, new JSONObject(value));
- return this;
- }
-
- /**
- * Put or replace an object value in the JSONArray. If the index is greater
- * than the length of the JSONArray, then null elements will be added as
- * necessary to pad it out.
- *
- * @param index
- * The subscript.
- * @param value
- * The value to put into the array. The value should be a
- * Boolean, Double, Integer, JSONArray, JSONObject, Long, or
- * String, or the JSONObject.NULL object.
- * @return this.
- * @throws JSONException
- * If the index is negative or if the the value is an invalid
- * number.
- */
- public JSONArray put(int index, Object value) throws JSONException {
- JSONObject.testValidity(value);
- if (index < 0) {
- throw new JSONException("JSONArray[" + index + "] not found.");
- }
- if (index < length()) {
- myArrayList.set(index, value);
- } else {
- while (index != length()) {
- put(JSONObject.NULL);
- }
- put(value);
- }
- return this;
- }
-
- /**
- * Remove an index and close the hole.
- *
- * @param index
- * The index of the element to be removed.
- * @return The value that was associated with the index, or null if there
- * was no value.
- */
- public Object remove(int index) {
- Object o = opt(index);
- myArrayList.remove(index);
- return o;
- }
-
- /**
- * Produce a JSONObject by combining a JSONArray of names with the values of
- * this JSONArray.
- *
- * @param names
- * A JSONArray containing a list of key strings. These will be
- * paired with the values.
- * @return A JSONObject, or null if there are no names or if this JSONArray
- * has no values.
- * @throws JSONException
- * If any of the names are null.
- */
- public JSONObject toJSONObject(JSONArray names) throws JSONException {
- if (names == null || names.length() == 0 || length() == 0) {
- return null;
- }
- JSONObject jo = new JSONObject();
- for (int i = 0; i < names.length(); i += 1) {
- jo.put(names.getString(i), opt(i));
- }
- return jo;
- }
-
- /**
- * Make a JSON text of this JSONArray. For compactness, no unnecessary
- * whitespace is added. If it is not possible to produce a syntactically
- * correct JSON text then null will be returned instead. This could occur if
- * the array contains an invalid number.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- *
- * @return a printable, displayable, transmittable representation of the
- * array.
- */
- @Override
- public String toString() {
- try {
- return '[' + join(",") + ']';
- } catch (Exception e) {
- return null;
- }
- }
-
- /**
- * Make a prettyprinted JSON text of this JSONArray. Warning: This method
- * assumes that the data structure is acyclical.
- *
- * @param indentFactor
- * The number of spaces to add to each level of indentation.
- * @return a printable, displayable, transmittable representation of the
- * object, beginning with <code>[</code>&nbsp;<small>(left
- * bracket)</small> and ending with <code>]</code>
- * &nbsp;<small>(right bracket)</small>.
- * @throws JSONException
- */
- public String toString(int indentFactor) throws JSONException {
- return toString(indentFactor, 0);
- }
-
- /**
- * Make a prettyprinted JSON text of this JSONArray. Warning: This method
- * assumes that the data structure is acyclical.
- *
- * @param indentFactor
- * The number of spaces to add to each level of indentation.
- * @param indent
- * The indention of the top level.
- * @return a printable, displayable, transmittable representation of the
- * array.
- * @throws JSONException
- */
- String toString(int indentFactor, int indent) throws JSONException {
- int len = length();
- if (len == 0) {
- return "[]";
- }
- int i;
- StringBuffer sb = new StringBuffer("[");
- if (len == 1) {
- sb.append(JSONObject.valueToString(myArrayList.get(0),
- indentFactor, indent));
- } else {
- int newindent = indent + indentFactor;
- sb.append('\n');
- for (i = 0; i < len; i += 1) {
- if (i > 0) {
- sb.append(",\n");
- }
- for (int j = 0; j < newindent; j += 1) {
- sb.append(' ');
- }
- sb.append(JSONObject.valueToString(myArrayList.get(i),
- indentFactor, newindent));
- }
- sb.append('\n');
- for (i = 0; i < indent; i += 1) {
- sb.append(' ');
- }
- }
- sb.append(']');
- return sb.toString();
- }
-
- /**
- * Write the contents of the JSONArray as JSON text to a writer. For
- * compactness, no whitespace is added.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- *
- * @return The writer.
- * @throws JSONException
- */
- public Writer write(Writer writer) throws JSONException {
- try {
- boolean b = false;
- int len = length();
-
- writer.write('[');
-
- for (int i = 0; i < len; i += 1) {
- if (b) {
- writer.write(',');
- }
- Object v = myArrayList.get(i);
- if (v instanceof JSONObject) {
- ((JSONObject) v).write(writer);
- } else if (v instanceof JSONArray) {
- ((JSONArray) v).write(writer);
- } else {
- writer.write(JSONObject.valueToString(v));
- }
- b = true;
- }
- writer.write(']');
- return writer;
- } catch (IOException e) {
- throw new JSONException(e);
- }
- }
-} \ No newline at end of file
diff --git a/server/src/com/vaadin/external/json/JSONException.java b/server/src/com/vaadin/external/json/JSONException.java
deleted file mode 100644
index 21663c1e37..0000000000
--- a/server/src/com/vaadin/external/json/JSONException.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.vaadin.external.json;
-
-/**
- * The JSONException is thrown by the JSON.org classes when things are amiss.
- *
- * @author JSON.org
- * @version 2010-12-24
- */
-public class JSONException extends Exception {
- private static final long serialVersionUID = 0;
- private Throwable cause;
-
- /**
- * Constructs a JSONException with an explanatory message.
- *
- * @param message
- * Detail about the reason for the exception.
- */
- public JSONException(String message) {
- super(message);
- }
-
- public JSONException(Throwable cause) {
- super(cause.getMessage());
- this.cause = cause;
- }
-
- @Override
- public Throwable getCause() {
- return cause;
- }
-}
diff --git a/server/src/com/vaadin/external/json/JSONObject.java b/server/src/com/vaadin/external/json/JSONObject.java
deleted file mode 100644
index ba772933be..0000000000
--- a/server/src/com/vaadin/external/json/JSONObject.java
+++ /dev/null
@@ -1,1693 +0,0 @@
-package com.vaadin.external.json;
-
-/*
- Copyright (c) 2002 JSON.org
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- The Software shall be used for Good, not Evil.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
- */
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.io.Writer;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-
-/**
- * A JSONObject is an unordered collection of name/value pairs. Its external
- * form is a string wrapped in curly braces with colons between the names and
- * values, and commas between the values and names. The internal form is an
- * object having <code>get</code> and <code>opt</code> methods for accessing the
- * values by name, and <code>put</code> methods for adding or replacing values
- * by name. The values can be any of these types: <code>Boolean</code>,
- * <code>JSONArray</code>, <code>JSONObject</code>, <code>Number</code>,
- * <code>String</code>, or the <code>JSONObject.NULL</code> object. A JSONObject
- * constructor can be used to convert an external form JSON text into an
- * internal form whose values can be retrieved with the <code>get</code> and
- * <code>opt</code> methods, or to convert values into a JSON text using the
- * <code>put</code> and <code>toString</code> methods. A <code>get</code> method
- * returns a value if one can be found, and throws an exception if one cannot be
- * found. An <code>opt</code> method returns a default value instead of throwing
- * an exception, and so is useful for obtaining optional values.
- * <p>
- * The generic <code>get()</code> and <code>opt()</code> methods return an
- * object, which you can cast or query for type. There are also typed
- * <code>get</code> and <code>opt</code> methods that do type checking and type
- * coercion for you. The opt methods differ from the get methods in that they do
- * not throw. Instead, they return a specified value, such as null.
- * <p>
- * The <code>put</code> methods add or replace values in an object. For example,
- *
- * <pre>
- * myString = new JSONObject().put(&quot;JSON&quot;, &quot;Hello, World!&quot;).toString();
- * </pre>
- *
- * produces the string <code>{"JSON": "Hello, World"}</code>.
- * <p>
- * The texts produced by the <code>toString</code> methods strictly conform to
- * the JSON syntax rules. The constructors are more forgiving in the texts they
- * will accept:
- * <ul>
- * <li>An extra <code>,</code>&nbsp;<small>(comma)</small> may appear just
- * before the closing brace.</li>
- * <li>Strings may be quoted with <code>'</code>&nbsp;<small>(single
- * quote)</small>.</li>
- * <li>Strings do not need to be quoted at all if they do not begin with a quote
- * or single quote, and if they do not contain leading or trailing spaces, and
- * if they do not contain any of these characters:
- * <code>{ } [ ] / \ : , = ; #</code> and if they do not look like numbers and
- * if they are not the reserved words <code>true</code>, <code>false</code>, or
- * <code>null</code>.</li>
- * <li>Keys can be followed by <code>=</code> or <code>=></code> as well as by
- * <code>:</code>.</li>
- * <li>Values can be followed by <code>;</code> <small>(semicolon)</small> as
- * well as by <code>,</code> <small>(comma)</small>.</li>
- * <li>Numbers may have the <code>0x-</code> <small>(hex)</small> prefix.</li>
- * </ul>
- *
- * @author JSON.org
- * @version 2011-10-16
- */
-public class JSONObject implements Serializable {
-
- /**
- * JSONObject.NULL is equivalent to the value that JavaScript calls null,
- * whilst Java's null is equivalent to the value that JavaScript calls
- * undefined.
- */
- private static final class Null implements Serializable {
-
- /**
- * There is only intended to be a single instance of the NULL object, so
- * the clone method returns itself.
- *
- * @return NULL.
- */
- @Override
- protected final Object clone() {
- return this;
- }
-
- /**
- * A Null object is equal to the null value and to itself.
- *
- * @param object
- * An object to test for nullness.
- * @return true if the object parameter is the JSONObject.NULL object or
- * null.
- */
- @Override
- public boolean equals(Object object) {
- return object == null || object == this;
- }
-
- /**
- * Get the "null" string value.
- *
- * @return The string "null".
- */
- @Override
- public String toString() {
- return "null";
- }
- }
-
- /**
- * The map where the JSONObject's properties are kept.
- */
- private Map map;
-
- /**
- * It is sometimes more convenient and less ambiguous to have a
- * <code>NULL</code> object than to use Java's <code>null</code> value.
- * <code>JSONObject.NULL.equals(null)</code> returns <code>true</code>.
- * <code>JSONObject.NULL.toString()</code> returns <code>"null"</code>.
- */
- public static final Object NULL = new Null();
-
- /**
- * Construct an empty JSONObject.
- */
- public JSONObject() {
- map = new HashMap();
- }
-
- /**
- * Construct a JSONObject from a subset of another JSONObject. An array of
- * strings is used to identify the keys that should be copied. Missing keys
- * are ignored.
- *
- * @param jo
- * A JSONObject.
- * @param names
- * An array of strings.
- * @throws JSONException
- * @exception JSONException
- * If a value is a non-finite number or if a name is
- * duplicated.
- */
- public JSONObject(JSONObject jo, String[] names) {
- this();
- for (int i = 0; i < names.length; i += 1) {
- try {
- putOnce(names[i], jo.opt(names[i]));
- } catch (Exception ignore) {
- }
- }
- }
-
- /**
- * Construct a JSONObject from a JSONTokener.
- *
- * @param x
- * A JSONTokener object containing the source string.
- * @throws JSONException
- * If there is a syntax error in the source string or a
- * duplicated key.
- */
- public JSONObject(JSONTokener x) throws JSONException {
- this();
- char c;
- String key;
-
- if (x.nextClean() != '{') {
- throw x.syntaxError("A JSONObject text must begin with '{'");
- }
- for (;;) {
- c = x.nextClean();
- switch (c) {
- case 0:
- throw x.syntaxError("A JSONObject text must end with '}'");
- case '}':
- return;
- default:
- x.back();
- key = x.nextValue().toString();
- }
-
- // The key is followed by ':'. We will also tolerate '=' or '=>'.
-
- c = x.nextClean();
- if (c == '=') {
- if (x.next() != '>') {
- x.back();
- }
- } else if (c != ':') {
- throw x.syntaxError("Expected a ':' after a key");
- }
- putOnce(key, x.nextValue());
-
- // Pairs are separated by ','. We will also tolerate ';'.
-
- switch (x.nextClean()) {
- case ';':
- case ',':
- if (x.nextClean() == '}') {
- return;
- }
- x.back();
- break;
- case '}':
- return;
- default:
- throw x.syntaxError("Expected a ',' or '}'");
- }
- }
- }
-
- /**
- * Construct a JSONObject from a Map.
- *
- * @param map
- * A map object that can be used to initialize the contents of
- * the JSONObject.
- * @throws JSONException
- */
- public JSONObject(Map map) {
- this.map = new HashMap();
- if (map != null) {
- Iterator i = map.entrySet().iterator();
- while (i.hasNext()) {
- Map.Entry e = (Map.Entry) i.next();
- Object value = e.getValue();
- if (value != null) {
- this.map.put(e.getKey(), wrap(value));
- }
- }
- }
- }
-
- /**
- * Construct a JSONObject from an Object using bean getters. It reflects on
- * all of the public methods of the object. For each of the methods with no
- * parameters and a name starting with <code>"get"</code> or
- * <code>"is"</code> followed by an uppercase letter, the method is invoked,
- * and a key and the value returned from the getter method are put into the
- * new JSONObject.
- *
- * The key is formed by removing the <code>"get"</code> or <code>"is"</code>
- * prefix. If the second remaining character is not upper case, then the
- * first character is converted to lower case.
- *
- * For example, if an object has a method named <code>"getName"</code>, and
- * if the result of calling <code>object.getName()</code> is
- * <code>"Larry Fine"</code>, then the JSONObject will contain
- * <code>"name": "Larry Fine"</code>.
- *
- * @param bean
- * An object that has getter methods that should be used to make
- * a JSONObject.
- */
- public JSONObject(Object bean) {
- this();
- populateMap(bean);
- }
-
- /**
- * Construct a JSONObject from an Object, using reflection to find the
- * public members. The resulting JSONObject's keys will be the strings from
- * the names array, and the values will be the field values associated with
- * those keys in the object. If a key is not found or not visible, then it
- * will not be copied into the new JSONObject.
- *
- * @param object
- * An object that has fields that should be used to make a
- * JSONObject.
- * @param names
- * An array of strings, the names of the fields to be obtained
- * from the object.
- */
- public JSONObject(Object object, String names[]) {
- this();
- Class c = object.getClass();
- for (int i = 0; i < names.length; i += 1) {
- String name = names[i];
- try {
- putOpt(name, c.getField(name).get(object));
- } catch (Exception ignore) {
- }
- }
- }
-
- /**
- * Construct a JSONObject from a source JSON text string. This is the most
- * commonly used JSONObject constructor.
- *
- * @param source
- * A string beginning with <code>{</code>&nbsp;<small>(left
- * brace)</small> and ending with <code>}</code>
- * &nbsp;<small>(right brace)</small>.
- * @exception JSONException
- * If there is a syntax error in the source string or a
- * duplicated key.
- */
- public JSONObject(String source) throws JSONException {
- this(new JSONTokener(source));
- }
-
- /**
- * Construct a JSONObject from a ResourceBundle.
- *
- * @param baseName
- * The ResourceBundle base name.
- * @param locale
- * The Locale to load the ResourceBundle for.
- * @throws JSONException
- * If any JSONExceptions are detected.
- */
- public JSONObject(String baseName, Locale locale) throws JSONException {
- this();
- ResourceBundle bundle = ResourceBundle.getBundle(baseName, locale,
- Thread.currentThread().getContextClassLoader());
-
- // Iterate through the keys in the bundle.
-
- Enumeration keys = bundle.getKeys();
- while (keys.hasMoreElements()) {
- Object key = keys.nextElement();
- if (key instanceof String) {
-
- // Go through the path, ensuring that there is a nested
- // JSONObject for each
- // segment except the last. Add the value using the last
- // segment's name into
- // the deepest nested JSONObject.
-
- String[] path = ((String) key).split("\\.");
- int last = path.length - 1;
- JSONObject target = this;
- for (int i = 0; i < last; i += 1) {
- String segment = path[i];
- JSONObject nextTarget = target.optJSONObject(segment);
- if (nextTarget == null) {
- nextTarget = new JSONObject();
- target.put(segment, nextTarget);
- }
- target = nextTarget;
- }
- target.put(path[last], bundle.getString((String) key));
- }
- }
- }
-
- /**
- * Accumulate values under a key. It is similar to the put method except
- * that if there is already an object stored under the key then a JSONArray
- * is stored under the key to hold all of the accumulated values. If there
- * is already a JSONArray, then the new value is appended to it. In
- * contrast, the put method replaces the previous value.
- *
- * If only one value is accumulated that is not a JSONArray, then the result
- * will be the same as using put. But if multiple values are accumulated,
- * then the result will be like append.
- *
- * @param key
- * A key string.
- * @param value
- * An object to be accumulated under the key.
- * @return this.
- * @throws JSONException
- * If the value is an invalid number or if the key is null.
- */
- public JSONObject accumulate(String key, Object value) throws JSONException {
- testValidity(value);
- Object object = opt(key);
- if (object == null) {
- put(key, value instanceof JSONArray ? new JSONArray().put(value)
- : value);
- } else if (object instanceof JSONArray) {
- ((JSONArray) object).put(value);
- } else {
- put(key, new JSONArray().put(object).put(value));
- }
- return this;
- }
-
- /**
- * Append values to the array under a key. If the key does not exist in the
- * JSONObject, then the key is put in the JSONObject with its value being a
- * JSONArray containing the value parameter. If the key was already
- * associated with a JSONArray, then the value parameter is appended to it.
- *
- * @param key
- * A key string.
- * @param value
- * An object to be accumulated under the key.
- * @return this.
- * @throws JSONException
- * If the key is null or if the current value associated with
- * the key is not a JSONArray.
- */
- public JSONObject append(String key, Object value) throws JSONException {
- testValidity(value);
- Object object = opt(key);
- if (object == null) {
- put(key, new JSONArray().put(value));
- } else if (object instanceof JSONArray) {
- put(key, ((JSONArray) object).put(value));
- } else {
- throw new JSONException("JSONObject[" + key
- + "] is not a JSONArray.");
- }
- return this;
- }
-
- /**
- * Produce a string from a double. The string "null" will be returned if the
- * number is not finite.
- *
- * @param d
- * A double.
- * @return A String.
- */
- public static String doubleToString(double d) {
- if (Double.isInfinite(d) || Double.isNaN(d)) {
- return "null";
- }
-
- // Shave off trailing zeros and decimal point, if possible.
-
- String string = Double.toString(d);
- if (string.indexOf('.') > 0 && string.indexOf('e') < 0
- && string.indexOf('E') < 0) {
- while (string.endsWith("0")) {
- string = string.substring(0, string.length() - 1);
- }
- if (string.endsWith(".")) {
- string = string.substring(0, string.length() - 1);
- }
- }
- return string;
- }
-
- /**
- * Get the value object associated with a key.
- *
- * @param key
- * A key string.
- * @return The object associated with the key.
- * @throws JSONException
- * if the key is not found.
- */
- public Object get(String key) throws JSONException {
- if (key == null) {
- throw new JSONException("Null key.");
- }
- Object object = opt(key);
- if (object == null) {
- throw new JSONException("JSONObject[" + quote(key) + "] not found.");
- }
- return object;
- }
-
- /**
- * Get the boolean value associated with a key.
- *
- * @param key
- * A key string.
- * @return The truth.
- * @throws JSONException
- * if the value is not a Boolean or the String "true" or
- * "false".
- */
- public boolean getBoolean(String key) throws JSONException {
- Object object = get(key);
- if (object.equals(Boolean.FALSE)
- || (object instanceof String && ((String) object)
- .equalsIgnoreCase("false"))) {
- return false;
- } else if (object.equals(Boolean.TRUE)
- || (object instanceof String && ((String) object)
- .equalsIgnoreCase("true"))) {
- return true;
- }
- throw new JSONException("JSONObject[" + quote(key)
- + "] is not a Boolean.");
- }
-
- /**
- * Get the double value associated with a key.
- *
- * @param key
- * A key string.
- * @return The numeric value.
- * @throws JSONException
- * if the key is not found or if the value is not a Number
- * object and cannot be converted to a number.
- */
- public double getDouble(String key) throws JSONException {
- Object object = get(key);
- try {
- return object instanceof Number ? ((Number) object).doubleValue()
- : Double.parseDouble((String) object);
- } catch (Exception e) {
- throw new JSONException("JSONObject[" + quote(key)
- + "] is not a number.");
- }
- }
-
- /**
- * Get the int value associated with a key.
- *
- * @param key
- * A key string.
- * @return The integer value.
- * @throws JSONException
- * if the key is not found or if the value cannot be converted
- * to an integer.
- */
- public int getInt(String key) throws JSONException {
- Object object = get(key);
- try {
- return object instanceof Number ? ((Number) object).intValue()
- : Integer.parseInt((String) object);
- } catch (Exception e) {
- throw new JSONException("JSONObject[" + quote(key)
- + "] is not an int.");
- }
- }
-
- /**
- * Get the JSONArray value associated with a key.
- *
- * @param key
- * A key string.
- * @return A JSONArray which is the value.
- * @throws JSONException
- * if the key is not found or if the value is not a JSONArray.
- */
- public JSONArray getJSONArray(String key) throws JSONException {
- Object object = get(key);
- if (object instanceof JSONArray) {
- return (JSONArray) object;
- }
- throw new JSONException("JSONObject[" + quote(key)
- + "] is not a JSONArray.");
- }
-
- /**
- * Get the JSONObject value associated with a key.
- *
- * @param key
- * A key string.
- * @return A JSONObject which is the value.
- * @throws JSONException
- * if the key is not found or if the value is not a JSONObject.
- */
- public JSONObject getJSONObject(String key) throws JSONException {
- Object object = get(key);
- if (object instanceof JSONObject) {
- return (JSONObject) object;
- }
- throw new JSONException("JSONObject[" + quote(key)
- + "] is not a JSONObject.");
- }
-
- /**
- * Get the long value associated with a key.
- *
- * @param key
- * A key string.
- * @return The long value.
- * @throws JSONException
- * if the key is not found or if the value cannot be converted
- * to a long.
- */
- public long getLong(String key) throws JSONException {
- Object object = get(key);
- try {
- return object instanceof Number ? ((Number) object).longValue()
- : Long.parseLong((String) object);
- } catch (Exception e) {
- throw new JSONException("JSONObject[" + quote(key)
- + "] is not a long.");
- }
- }
-
- /**
- * Get an array of field names from a JSONObject.
- *
- * @return An array of field names, or null if there are no names.
- */
- public static String[] getNames(JSONObject jo) {
- int length = jo.length();
- if (length == 0) {
- return null;
- }
- Iterator iterator = jo.keys();
- String[] names = new String[length];
- int i = 0;
- while (iterator.hasNext()) {
- names[i] = (String) iterator.next();
- i += 1;
- }
- return names;
- }
-
- /**
- * Get an array of field names from an Object.
- *
- * @return An array of field names, or null if there are no names.
- */
- public static String[] getNames(Object object) {
- if (object == null) {
- return null;
- }
- Class klass = object.getClass();
- Field[] fields = klass.getFields();
- int length = fields.length;
- if (length == 0) {
- return null;
- }
- String[] names = new String[length];
- for (int i = 0; i < length; i += 1) {
- names[i] = fields[i].getName();
- }
- return names;
- }
-
- /**
- * Get the string associated with a key.
- *
- * @param key
- * A key string.
- * @return A string which is the value.
- * @throws JSONException
- * if there is no string value for the key.
- */
- public String getString(String key) throws JSONException {
- Object object = get(key);
- if (object instanceof String) {
- return (String) object;
- }
- throw new JSONException("JSONObject[" + quote(key) + "] not a string.");
- }
-
- /**
- * Determine if the JSONObject contains a specific key.
- *
- * @param key
- * A key string.
- * @return true if the key exists in the JSONObject.
- */
- public boolean has(String key) {
- return map.containsKey(key);
- }
-
- /**
- * Increment a property of a JSONObject. If there is no such property,
- * create one with a value of 1. If there is such a property, and if it is
- * an Integer, Long, Double, or Float, then add one to it.
- *
- * @param key
- * A key string.
- * @return this.
- * @throws JSONException
- * If there is already a property with this name that is not an
- * Integer, Long, Double, or Float.
- */
- public JSONObject increment(String key) throws JSONException {
- Object value = opt(key);
- if (value == null) {
- put(key, 1);
- } else if (value instanceof Integer) {
- put(key, ((Integer) value).intValue() + 1);
- } else if (value instanceof Long) {
- put(key, ((Long) value).longValue() + 1);
- } else if (value instanceof Double) {
- put(key, ((Double) value).doubleValue() + 1);
- } else if (value instanceof Float) {
- put(key, ((Float) value).floatValue() + 1);
- } else {
- throw new JSONException("Unable to increment [" + quote(key) + "].");
- }
- return this;
- }
-
- /**
- * Determine if the value associated with the key is null or if there is no
- * value.
- *
- * @param key
- * A key string.
- * @return true if there is no value associated with the key or if the value
- * is the JSONObject.NULL object.
- */
- public boolean isNull(String key) {
- return JSONObject.NULL.equals(opt(key));
- }
-
- /**
- * Get an enumeration of the keys of the JSONObject.
- *
- * @return An iterator of the keys.
- */
- public Iterator keys() {
- return map.keySet().iterator();
- }
-
- /**
- * Get the number of keys stored in the JSONObject.
- *
- * @return The number of keys in the JSONObject.
- */
- public int length() {
- return map.size();
- }
-
- /**
- * Produce a JSONArray containing the names of the elements of this
- * JSONObject.
- *
- * @return A JSONArray containing the key strings, or null if the JSONObject
- * is empty.
- */
- public JSONArray names() {
- JSONArray ja = new JSONArray();
- Iterator keys = keys();
- while (keys.hasNext()) {
- ja.put(keys.next());
- }
- return ja.length() == 0 ? null : ja;
- }
-
- /**
- * Produce a string from a Number.
- *
- * @param number
- * A Number
- * @return A String.
- * @throws JSONException
- * If n is a non-finite number.
- */
- public static String numberToString(Number number) throws JSONException {
- if (number == null) {
- throw new JSONException("Null pointer");
- }
- testValidity(number);
-
- // Shave off trailing zeros and decimal point, if possible.
-
- String string = number.toString();
- if (string.indexOf('.') > 0 && string.indexOf('e') < 0
- && string.indexOf('E') < 0) {
- while (string.endsWith("0")) {
- string = string.substring(0, string.length() - 1);
- }
- if (string.endsWith(".")) {
- string = string.substring(0, string.length() - 1);
- }
- }
- return string;
- }
-
- /**
- * Get an optional value associated with a key.
- *
- * @param key
- * A key string.
- * @return An object which is the value, or null if there is no value.
- */
- public Object opt(String key) {
- return key == null ? null : map.get(key);
- }
-
- /**
- * Get an optional boolean associated with a key. It returns false if there
- * is no such key, or if the value is not Boolean.TRUE or the String "true".
- *
- * @param key
- * A key string.
- * @return The truth.
- */
- public boolean optBoolean(String key) {
- return optBoolean(key, false);
- }
-
- /**
- * Get an optional boolean associated with a key. It returns the
- * defaultValue if there is no such key, or if it is not a Boolean or the
- * String "true" or "false" (case insensitive).
- *
- * @param key
- * A key string.
- * @param defaultValue
- * The default.
- * @return The truth.
- */
- public boolean optBoolean(String key, boolean defaultValue) {
- try {
- return getBoolean(key);
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
- /**
- * Get an optional double associated with a key, or NaN if there is no such
- * key or if its value is not a number. If the value is a string, an attempt
- * will be made to evaluate it as a number.
- *
- * @param key
- * A string which is the key.
- * @return An object which is the value.
- */
- public double optDouble(String key) {
- return optDouble(key, Double.NaN);
- }
-
- /**
- * Get an optional double associated with a key, or the defaultValue if
- * there is no such key or if its value is not a number. If the value is a
- * string, an attempt will be made to evaluate it as a number.
- *
- * @param key
- * A key string.
- * @param defaultValue
- * The default.
- * @return An object which is the value.
- */
- public double optDouble(String key, double defaultValue) {
- try {
- return getDouble(key);
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
- /**
- * Get an optional int value associated with a key, or zero if there is no
- * such key or if the value is not a number. If the value is a string, an
- * attempt will be made to evaluate it as a number.
- *
- * @param key
- * A key string.
- * @return An object which is the value.
- */
- public int optInt(String key) {
- return optInt(key, 0);
- }
-
- /**
- * Get an optional int value associated with a key, or the default if there
- * is no such key or if the value is not a number. If the value is a string,
- * an attempt will be made to evaluate it as a number.
- *
- * @param key
- * A key string.
- * @param defaultValue
- * The default.
- * @return An object which is the value.
- */
- public int optInt(String key, int defaultValue) {
- try {
- return getInt(key);
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
- /**
- * Get an optional JSONArray associated with a key. It returns null if there
- * is no such key, or if its value is not a JSONArray.
- *
- * @param key
- * A key string.
- * @return A JSONArray which is the value.
- */
- public JSONArray optJSONArray(String key) {
- Object o = opt(key);
- return o instanceof JSONArray ? (JSONArray) o : null;
- }
-
- /**
- * Get an optional JSONObject associated with a key. It returns null if
- * there is no such key, or if its value is not a JSONObject.
- *
- * @param key
- * A key string.
- * @return A JSONObject which is the value.
- */
- public JSONObject optJSONObject(String key) {
- Object object = opt(key);
- return object instanceof JSONObject ? (JSONObject) object : null;
- }
-
- /**
- * Get an optional long value associated with a key, or zero if there is no
- * such key or if the value is not a number. If the value is a string, an
- * attempt will be made to evaluate it as a number.
- *
- * @param key
- * A key string.
- * @return An object which is the value.
- */
- public long optLong(String key) {
- return optLong(key, 0);
- }
-
- /**
- * Get an optional long value associated with a key, or the default if there
- * is no such key or if the value is not a number. If the value is a string,
- * an attempt will be made to evaluate it as a number.
- *
- * @param key
- * A key string.
- * @param defaultValue
- * The default.
- * @return An object which is the value.
- */
- public long optLong(String key, long defaultValue) {
- try {
- return getLong(key);
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
- /**
- * Get an optional string associated with a key. It returns an empty string
- * if there is no such key. If the value is not a string and is not null,
- * then it is converted to a string.
- *
- * @param key
- * A key string.
- * @return A string which is the value.
- */
- public String optString(String key) {
- return optString(key, "");
- }
-
- /**
- * Get an optional string associated with a key. It returns the defaultValue
- * if there is no such key.
- *
- * @param key
- * A key string.
- * @param defaultValue
- * The default.
- * @return A string which is the value.
- */
- public String optString(String key, String defaultValue) {
- Object object = opt(key);
- return NULL.equals(object) ? defaultValue : object.toString();
- }
-
- private void populateMap(Object bean) {
- Class klass = bean.getClass();
-
- // If klass is a System class then set includeSuperClass to false.
-
- boolean includeSuperClass = klass.getClassLoader() != null;
-
- Method[] methods = (includeSuperClass) ? klass.getMethods() : klass
- .getDeclaredMethods();
- for (int i = 0; i < methods.length; i += 1) {
- try {
- Method method = methods[i];
- if (Modifier.isPublic(method.getModifiers())) {
- String name = method.getName();
- String key = "";
- if (name.startsWith("get")) {
- if (name.equals("getClass")
- || name.equals("getDeclaringClass")) {
- key = "";
- } else {
- key = name.substring(3);
- }
- } else if (name.startsWith("is")) {
- key = name.substring(2);
- }
- if (key.length() > 0
- && Character.isUpperCase(key.charAt(0))
- && method.getParameterTypes().length == 0) {
- if (key.length() == 1) {
- key = key.toLowerCase();
- } else if (!Character.isUpperCase(key.charAt(1))) {
- key = key.substring(0, 1).toLowerCase()
- + key.substring(1);
- }
-
- Object result = method.invoke(bean, (Object[]) null);
- if (result != null) {
- map.put(key, wrap(result));
- }
- }
- }
- } catch (Exception ignore) {
- }
- }
- }
-
- /**
- * Put a key/boolean pair in the JSONObject.
- *
- * @param key
- * A key string.
- * @param value
- * A boolean which is the value.
- * @return this.
- * @throws JSONException
- * If the key is null.
- */
- public JSONObject put(String key, boolean value) throws JSONException {
- put(key, value ? Boolean.TRUE : Boolean.FALSE);
- return this;
- }
-
- /**
- * Put a key/value pair in the JSONObject, where the value will be a
- * JSONArray which is produced from a Collection.
- *
- * @param key
- * A key string.
- * @param value
- * A Collection value.
- * @return this.
- * @throws JSONException
- */
- public JSONObject put(String key, Collection value) throws JSONException {
- put(key, new JSONArray(value));
- return this;
- }
-
- /**
- * Put a key/double pair in the JSONObject.
- *
- * @param key
- * A key string.
- * @param value
- * A double which is the value.
- * @return this.
- * @throws JSONException
- * If the key is null or if the number is invalid.
- */
- public JSONObject put(String key, double value) throws JSONException {
- put(key, new Double(value));
- return this;
- }
-
- /**
- * Put a key/int pair in the JSONObject.
- *
- * @param key
- * A key string.
- * @param value
- * An int which is the value.
- * @return this.
- * @throws JSONException
- * If the key is null.
- */
- public JSONObject put(String key, int value) throws JSONException {
- put(key, new Integer(value));
- return this;
- }
-
- /**
- * Put a key/long pair in the JSONObject.
- *
- * @param key
- * A key string.
- * @param value
- * A long which is the value.
- * @return this.
- * @throws JSONException
- * If the key is null.
- */
- public JSONObject put(String key, long value) throws JSONException {
- put(key, new Long(value));
- return this;
- }
-
- /**
- * Put a key/value pair in the JSONObject, where the value will be a
- * JSONObject which is produced from a Map.
- *
- * @param key
- * A key string.
- * @param value
- * A Map value.
- * @return this.
- * @throws JSONException
- */
- public JSONObject put(String key, Map value) throws JSONException {
- put(key, new JSONObject(value));
- return this;
- }
-
- /**
- * Put a key/value pair in the JSONObject. If the value is null, then the
- * key will be removed from the JSONObject if it is present.
- *
- * @param key
- * A key string.
- * @param value
- * An object which is the value. It should be of one of these
- * types: Boolean, Double, Integer, JSONArray, JSONObject, Long,
- * String, or the JSONObject.NULL object.
- * @return this.
- * @throws JSONException
- * If the value is non-finite number or if the key is null.
- */
- public JSONObject put(String key, Object value) throws JSONException {
- if (key == null) {
- throw new JSONException("Null key.");
- }
- if (value != null) {
- testValidity(value);
- map.put(key, value);
- } else {
- remove(key);
- }
- return this;
- }
-
- /**
- * Put a key/value pair in the JSONObject, but only if the key and the value
- * are both non-null, and only if there is not already a member with that
- * name.
- *
- * @param key
- * @param value
- * @return his.
- * @throws JSONException
- * if the key is a duplicate
- */
- public JSONObject putOnce(String key, Object value) throws JSONException {
- if (key != null && value != null) {
- if (opt(key) != null) {
- throw new JSONException("Duplicate key \"" + key + "\"");
- }
- put(key, value);
- }
- return this;
- }
-
- /**
- * Put a key/value pair in the JSONObject, but only if the key and the value
- * are both non-null.
- *
- * @param key
- * A key string.
- * @param value
- * An object which is the value. It should be of one of these
- * types: Boolean, Double, Integer, JSONArray, JSONObject, Long,
- * String, or the JSONObject.NULL object.
- * @return this.
- * @throws JSONException
- * If the value is a non-finite number.
- */
- public JSONObject putOpt(String key, Object value) throws JSONException {
- if (key != null && value != null) {
- put(key, value);
- }
- return this;
- }
-
- /**
- * Produce a string in double quotes with backslash sequences in all the
- * right places. A backslash will be inserted within </, producing <\/,
- * allowing JSON text to be delivered in HTML. In JSON text, a string cannot
- * contain a control character or an unescaped quote or backslash.
- *
- * @param string
- * A String
- * @return A String correctly formatted for insertion in a JSON text.
- */
- public static String quote(String string) {
- if (string == null || string.length() == 0) {
- return "\"\"";
- }
-
- char b;
- char c = 0;
- String hhhh;
- int i;
- int len = string.length();
- StringBuffer sb = new StringBuffer(len + 4);
-
- sb.append('"');
- for (i = 0; i < len; i += 1) {
- b = c;
- c = string.charAt(i);
- switch (c) {
- case '\\':
- case '"':
- sb.append('\\');
- sb.append(c);
- break;
- case '/':
- if (b == '<') {
- sb.append('\\');
- }
- sb.append(c);
- break;
- case '\b':
- sb.append("\\b");
- break;
- case '\t':
- sb.append("\\t");
- break;
- case '\n':
- sb.append("\\n");
- break;
- case '\f':
- sb.append("\\f");
- break;
- case '\r':
- sb.append("\\r");
- break;
- default:
- if (c < ' ' || (c >= '\u0080' && c < '\u00a0')
- || (c >= '\u2000' && c < '\u2100')) {
- hhhh = "000" + Integer.toHexString(c);
- sb.append("\\u" + hhhh.substring(hhhh.length() - 4));
- } else {
- sb.append(c);
- }
- }
- }
- sb.append('"');
- return sb.toString();
- }
-
- /**
- * Remove a name and its value, if present.
- *
- * @param key
- * The name to be removed.
- * @return The value that was associated with the name, or null if there was
- * no value.
- */
- public Object remove(String key) {
- return map.remove(key);
- }
-
- /**
- * Try to convert a string into a number, boolean, or null. If the string
- * can't be converted, return the string.
- *
- * @param string
- * A String.
- * @return A simple JSON value.
- */
- public static Object stringToValue(String string) {
- Double d;
- if (string.equals("")) {
- return string;
- }
- if (string.equalsIgnoreCase("true")) {
- return Boolean.TRUE;
- }
- if (string.equalsIgnoreCase("false")) {
- return Boolean.FALSE;
- }
- if (string.equalsIgnoreCase("null")) {
- return JSONObject.NULL;
- }
-
- /*
- * If it might be a number, try converting it. We support the
- * non-standard 0x- convention. If a number cannot be produced, then the
- * value will just be a string. Note that the 0x-, plus, and implied
- * string conventions are non-standard. A JSON parser may accept
- * non-JSON forms as long as it accepts all correct JSON forms.
- */
-
- char b = string.charAt(0);
- if ((b >= '0' && b <= '9') || b == '.' || b == '-' || b == '+') {
- if (b == '0' && string.length() > 2
- && (string.charAt(1) == 'x' || string.charAt(1) == 'X')) {
- try {
- return new Integer(
- Integer.parseInt(string.substring(2), 16));
- } catch (Exception ignore) {
- }
- }
- try {
- if (string.indexOf('.') > -1 || string.indexOf('e') > -1
- || string.indexOf('E') > -1) {
- d = Double.valueOf(string);
- if (!d.isInfinite() && !d.isNaN()) {
- return d;
- }
- } else {
- Long myLong = new Long(string);
- if (myLong.longValue() == myLong.intValue()) {
- return new Integer(myLong.intValue());
- } else {
- return myLong;
- }
- }
- } catch (Exception ignore) {
- }
- }
- return string;
- }
-
- /**
- * Throw an exception if the object is a NaN or infinite number.
- *
- * @param o
- * The object to test.
- * @throws JSONException
- * If o is a non-finite number.
- */
- public static void testValidity(Object o) throws JSONException {
- if (o != null) {
- if (o instanceof Double) {
- if (((Double) o).isInfinite() || ((Double) o).isNaN()) {
- throw new JSONException(
- "JSON does not allow non-finite numbers.");
- }
- } else if (o instanceof Float) {
- if (((Float) o).isInfinite() || ((Float) o).isNaN()) {
- throw new JSONException(
- "JSON does not allow non-finite numbers.");
- }
- }
- }
- }
-
- /**
- * Produce a JSONArray containing the values of the members of this
- * JSONObject.
- *
- * @param names
- * A JSONArray containing a list of key strings. This determines
- * the sequence of the values in the result.
- * @return A JSONArray of values.
- * @throws JSONException
- * If any of the values are non-finite numbers.
- */
- public JSONArray toJSONArray(JSONArray names) throws JSONException {
- if (names == null || names.length() == 0) {
- return null;
- }
- JSONArray ja = new JSONArray();
- for (int i = 0; i < names.length(); i += 1) {
- ja.put(opt(names.getString(i)));
- }
- return ja;
- }
-
- /**
- * Make a JSON text of this JSONObject. For compactness, no whitespace is
- * added. If this would not result in a syntactically correct JSON text,
- * then null will be returned instead.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- *
- * @return a printable, displayable, portable, transmittable representation
- * of the object, beginning with <code>{</code>&nbsp;<small>(left
- * brace)</small> and ending with <code>}</code>&nbsp;<small>(right
- * brace)</small>.
- */
- @Override
- public String toString() {
- try {
- Iterator keys = keys();
- StringBuffer sb = new StringBuffer("{");
-
- while (keys.hasNext()) {
- if (sb.length() > 1) {
- sb.append(',');
- }
- Object o = keys.next();
- sb.append(quote(o.toString()));
- sb.append(':');
- sb.append(valueToString(map.get(o)));
- }
- sb.append('}');
- return sb.toString();
- } catch (Exception e) {
- return null;
- }
- }
-
- /**
- * Make a prettyprinted JSON text of this JSONObject.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- *
- * @param indentFactor
- * The number of spaces to add to each level of indentation.
- * @return a printable, displayable, portable, transmittable representation
- * of the object, beginning with <code>{</code>&nbsp;<small>(left
- * brace)</small> and ending with <code>}</code>&nbsp;<small>(right
- * brace)</small>.
- * @throws JSONException
- * If the object contains an invalid number.
- */
- public String toString(int indentFactor) throws JSONException {
- return toString(indentFactor, 0);
- }
-
- /**
- * Make a prettyprinted JSON text of this JSONObject.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- *
- * @param indentFactor
- * The number of spaces to add to each level of indentation.
- * @param indent
- * The indentation of the top level.
- * @return a printable, displayable, transmittable representation of the
- * object, beginning with <code>{</code>&nbsp;<small>(left
- * brace)</small> and ending with <code>}</code>&nbsp;<small>(right
- * brace)</small>.
- * @throws JSONException
- * If the object contains an invalid number.
- */
- String toString(int indentFactor, int indent) throws JSONException {
- int i;
- int length = length();
- if (length == 0) {
- return "{}";
- }
- Iterator keys = keys();
- int newindent = indent + indentFactor;
- Object object;
- StringBuffer sb = new StringBuffer("{");
- if (length == 1) {
- object = keys.next();
- sb.append(quote(object.toString()));
- sb.append(": ");
- sb.append(valueToString(map.get(object), indentFactor, indent));
- } else {
- while (keys.hasNext()) {
- object = keys.next();
- if (sb.length() > 1) {
- sb.append(",\n");
- } else {
- sb.append('\n');
- }
- for (i = 0; i < newindent; i += 1) {
- sb.append(' ');
- }
- sb.append(quote(object.toString()));
- sb.append(": ");
- sb.append(valueToString(map.get(object), indentFactor,
- newindent));
- }
- if (sb.length() > 1) {
- sb.append('\n');
- for (i = 0; i < indent; i += 1) {
- sb.append(' ');
- }
- }
- }
- sb.append('}');
- return sb.toString();
- }
-
- /**
- * Make a JSON text of an Object value. If the object has an
- * value.toJSONString() method, then that method will be used to produce the
- * JSON text. The method is required to produce a strictly conforming text.
- * If the object does not contain a toJSONString method (which is the most
- * common case), then a text will be produced by other means. If the value
- * is an array or Collection, then a JSONArray will be made from it and its
- * toJSONString method will be called. If the value is a MAP, then a
- * JSONObject will be made from it and its toJSONString method will be
- * called. Otherwise, the value's toString method will be called, and the
- * result will be quoted.
- *
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- *
- * @param value
- * The value to be serialized.
- * @return a printable, displayable, transmittable representation of the
- * object, beginning with <code>{</code>&nbsp;<small>(left
- * brace)</small> and ending with <code>}</code>&nbsp;<small>(right
- * brace)</small>.
- * @throws JSONException
- * If the value is or contains an invalid number.
- */
- public static String valueToString(Object value) throws JSONException {
- if (value == null || value.equals(null)) {
- return "null";
- }
- if (value instanceof JSONString) {
- Object object;
- try {
- object = ((JSONString) value).toJSONString();
- } catch (Exception e) {
- throw new JSONException(e);
- }
- if (object instanceof String) {
- return (String) object;
- }
- throw new JSONException("Bad value from toJSONString: " + object);
- }
- if (value instanceof Number) {
- return numberToString((Number) value);
- }
- if (value instanceof Boolean || value instanceof JSONObject
- || value instanceof JSONArray) {
- return value.toString();
- }
- if (value instanceof Map) {
- return new JSONObject((Map) value).toString();
- }
- if (value instanceof Collection) {
- return new JSONArray((Collection) value).toString();
- }
- if (value.getClass().isArray()) {
- return new JSONArray(value).toString();
- }
- return quote(value.toString());
- }
-
- /**
- * Make a prettyprinted JSON text of an object value.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- *
- * @param value
- * The value to be serialized.
- * @param indentFactor
- * The number of spaces to add to each level of indentation.
- * @param indent
- * The indentation of the top level.
- * @return a printable, displayable, transmittable representation of the
- * object, beginning with <code>{</code>&nbsp;<small>(left
- * brace)</small> and ending with <code>}</code>&nbsp;<small>(right
- * brace)</small>.
- * @throws JSONException
- * If the object contains an invalid number.
- */
- static String valueToString(Object value, int indentFactor, int indent)
- throws JSONException {
- if (value == null || value.equals(null)) {
- return "null";
- }
- try {
- if (value instanceof JSONString) {
- Object o = ((JSONString) value).toJSONString();
- if (o instanceof String) {
- return (String) o;
- }
- }
- } catch (Exception ignore) {
- }
- if (value instanceof Number) {
- return numberToString((Number) value);
- }
- if (value instanceof Boolean) {
- return value.toString();
- }
- if (value instanceof JSONObject) {
- return ((JSONObject) value).toString(indentFactor, indent);
- }
- if (value instanceof JSONArray) {
- return ((JSONArray) value).toString(indentFactor, indent);
- }
- if (value instanceof Map) {
- return new JSONObject((Map) value).toString(indentFactor, indent);
- }
- if (value instanceof Collection) {
- return new JSONArray((Collection) value).toString(indentFactor,
- indent);
- }
- if (value.getClass().isArray()) {
- return new JSONArray(value).toString(indentFactor, indent);
- }
- return quote(value.toString());
- }
-
- /**
- * Wrap an object, if necessary. If the object is null, return the NULL
- * object. If it is an array or collection, wrap it in a JSONArray. If it is
- * a map, wrap it in a JSONObject. If it is a standard property (Double,
- * String, et al) then it is already wrapped. Otherwise, if it comes from
- * one of the java packages, turn it into a string. And if it doesn't, try
- * to wrap it in a JSONObject. If the wrapping fails, then null is returned.
- *
- * @param object
- * The object to wrap
- * @return The wrapped value
- */
- public static Object wrap(Object object) {
- try {
- if (object == null) {
- return NULL;
- }
- if (object instanceof JSONObject || object instanceof JSONArray
- || NULL.equals(object) || object instanceof JSONString
- || object instanceof Byte || object instanceof Character
- || object instanceof Short || object instanceof Integer
- || object instanceof Long || object instanceof Boolean
- || object instanceof Float || object instanceof Double
- || object instanceof String) {
- return object;
- }
-
- if (object instanceof Collection) {
- return new JSONArray((Collection) object);
- }
- if (object.getClass().isArray()) {
- return new JSONArray(object);
- }
- if (object instanceof Map) {
- return new JSONObject((Map) object);
- }
- Package objectPackage = object.getClass().getPackage();
- String objectPackageName = objectPackage != null ? objectPackage
- .getName() : "";
- if (objectPackageName.startsWith("java.")
- || objectPackageName.startsWith("javax.")
- || object.getClass().getClassLoader() == null) {
- return object.toString();
- }
- return new JSONObject(object);
- } catch (Exception exception) {
- return null;
- }
- }
-
- /**
- * Write the contents of the JSONObject as JSON text to a writer. For
- * compactness, no whitespace is added.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- *
- * @return The writer.
- * @throws JSONException
- */
- public Writer write(Writer writer) throws JSONException {
- try {
- boolean commanate = false;
- Iterator keys = keys();
- writer.write('{');
-
- while (keys.hasNext()) {
- if (commanate) {
- writer.write(',');
- }
- Object key = keys.next();
- writer.write(quote(key.toString()));
- writer.write(':');
- Object value = map.get(key);
- if (value instanceof JSONObject) {
- ((JSONObject) value).write(writer);
- } else if (value instanceof JSONArray) {
- ((JSONArray) value).write(writer);
- } else {
- writer.write(valueToString(value));
- }
- commanate = true;
- }
- writer.write('}');
- return writer;
- } catch (IOException exception) {
- throw new JSONException(exception);
- }
- }
-} \ No newline at end of file
diff --git a/server/src/com/vaadin/external/json/JSONString.java b/server/src/com/vaadin/external/json/JSONString.java
deleted file mode 100644
index cc7e4d8c07..0000000000
--- a/server/src/com/vaadin/external/json/JSONString.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.vaadin.external.json;
-
-import java.io.Serializable;
-
-/**
- * The <code>JSONString</code> interface allows a <code>toJSONString()</code>
- * method so that a class can change the behavior of
- * <code>JSONObject.toString()</code>, <code>JSONArray.toString()</code>, and
- * <code>JSONWriter.value(</code>Object<code>)</code>. The
- * <code>toJSONString</code> method will be used instead of the default behavior
- * of using the Object's <code>toString()</code> method and quoting the result.
- */
-public interface JSONString extends Serializable {
- /**
- * The <code>toJSONString</code> method allows a class to produce its own
- * JSON serialization.
- *
- * @return A strictly syntactically correct JSON text.
- */
- public String toJSONString();
-}
diff --git a/server/src/com/vaadin/external/json/JSONStringer.java b/server/src/com/vaadin/external/json/JSONStringer.java
deleted file mode 100644
index b5917222b1..0000000000
--- a/server/src/com/vaadin/external/json/JSONStringer.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.vaadin.external.json;
-
-/*
- Copyright (c) 2006 JSON.org
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- The Software shall be used for Good, not Evil.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
- */
-
-import java.io.StringWriter;
-
-/**
- * JSONStringer provides a quick and convenient way of producing JSON text. The
- * texts produced strictly conform to JSON syntax rules. No whitespace is added,
- * so the results are ready for transmission or storage. Each instance of
- * JSONStringer can produce one JSON text.
- * <p>
- * A JSONStringer instance provides a <code>value</code> method for appending
- * values to the text, and a <code>key</code> method for adding keys before
- * values in objects. There are <code>array</code> and <code>endArray</code>
- * methods that make and bound array values, and <code>object</code> and
- * <code>endObject</code> methods which make and bound object values. All of
- * these methods return the JSONWriter instance, permitting cascade style. For
- * example,
- *
- * <pre>
- * myString = new JSONStringer().object().key(&quot;JSON&quot;).value(&quot;Hello, World!&quot;)
- * .endObject().toString();
- * </pre>
- *
- * which produces the string
- *
- * <pre>
- * {"JSON":"Hello, World!"}
- * </pre>
- * <p>
- * The first method called must be <code>array</code> or <code>object</code>.
- * There are no methods for adding commas or colons. JSONStringer adds them for
- * you. Objects and arrays can be nested up to 20 levels deep.
- * <p>
- * This can sometimes be easier than using a JSONObject to build a string.
- *
- * @author JSON.org
- * @version 2008-09-18
- */
-public class JSONStringer extends JSONWriter {
- /**
- * Make a fresh JSONStringer. It can be used to build one JSON text.
- */
- public JSONStringer() {
- super(new StringWriter());
- }
-
- /**
- * Return the JSON text. This method is used to obtain the product of the
- * JSONStringer instance. It will return <code>null</code> if there was a
- * problem in the construction of the JSON text (such as the calls to
- * <code>array</code> were not properly balanced with calls to
- * <code>endArray</code>).
- *
- * @return The JSON text.
- */
- @Override
- public String toString() {
- return mode == 'd' ? writer.toString() : null;
- }
-}
diff --git a/server/src/com/vaadin/external/json/JSONTokener.java b/server/src/com/vaadin/external/json/JSONTokener.java
deleted file mode 100644
index c3531cae1d..0000000000
--- a/server/src/com/vaadin/external/json/JSONTokener.java
+++ /dev/null
@@ -1,451 +0,0 @@
-package com.vaadin.external.json;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.Serializable;
-import java.io.StringReader;
-
-/*
- Copyright (c) 2002 JSON.org
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- The Software shall be used for Good, not Evil.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
- */
-
-/**
- * A JSONTokener takes a source string and extracts characters and tokens from
- * it. It is used by the JSONObject and JSONArray constructors to parse JSON
- * source strings.
- *
- * @author JSON.org
- * @version 2010-12-24
- */
-public class JSONTokener implements Serializable {
-
- private int character;
- private boolean eof;
- private int index;
- private int line;
- private char previous;
- private Reader reader;
- private boolean usePrevious;
-
- /**
- * Construct a JSONTokener from a Reader.
- *
- * @param reader
- * A reader.
- */
- public JSONTokener(Reader reader) {
- this.reader = reader.markSupported() ? reader : new BufferedReader(
- reader);
- eof = false;
- usePrevious = false;
- previous = 0;
- index = 0;
- character = 1;
- line = 1;
- }
-
- /**
- * Construct a JSONTokener from an InputStream.
- */
- public JSONTokener(InputStream inputStream) throws JSONException {
- this(new InputStreamReader(inputStream));
- }
-
- /**
- * Construct a JSONTokener from a string.
- *
- * @param s
- * A source string.
- */
- public JSONTokener(String s) {
- this(new StringReader(s));
- }
-
- /**
- * Back up one character. This provides a sort of lookahead capability, so
- * that you can test for a digit or letter before attempting to parse the
- * next number or identifier.
- */
- public void back() throws JSONException {
- if (usePrevious || index <= 0) {
- throw new JSONException("Stepping back two steps is not supported");
- }
- index -= 1;
- character -= 1;
- usePrevious = true;
- eof = false;
- }
-
- /**
- * Get the hex value of a character (base16).
- *
- * @param c
- * A character between '0' and '9' or between 'A' and 'F' or
- * between 'a' and 'f'.
- * @return An int between 0 and 15, or -1 if c was not a hex digit.
- */
- public static int dehexchar(char c) {
- if (c >= '0' && c <= '9') {
- return c - '0';
- }
- if (c >= 'A' && c <= 'F') {
- return c - ('A' - 10);
- }
- if (c >= 'a' && c <= 'f') {
- return c - ('a' - 10);
- }
- return -1;
- }
-
- public boolean end() {
- return eof && !usePrevious;
- }
-
- /**
- * Determine if the source string still contains characters that next() can
- * consume.
- *
- * @return true if not yet at the end of the source.
- */
- public boolean more() throws JSONException {
- next();
- if (end()) {
- return false;
- }
- back();
- return true;
- }
-
- /**
- * Get the next character in the source string.
- *
- * @return The next character, or 0 if past the end of the source string.
- */
- public char next() throws JSONException {
- int c;
- if (usePrevious) {
- usePrevious = false;
- c = previous;
- } else {
- try {
- c = reader.read();
- } catch (IOException exception) {
- throw new JSONException(exception);
- }
-
- if (c <= 0) { // End of stream
- eof = true;
- c = 0;
- }
- }
- index += 1;
- if (previous == '\r') {
- line += 1;
- character = c == '\n' ? 0 : 1;
- } else if (c == '\n') {
- line += 1;
- character = 0;
- } else {
- character += 1;
- }
- previous = (char) c;
- return previous;
- }
-
- /**
- * Consume the next character, and check that it matches a specified
- * character.
- *
- * @param c
- * The character to match.
- * @return The character.
- * @throws JSONException
- * if the character does not match.
- */
- public char next(char c) throws JSONException {
- char n = next();
- if (n != c) {
- throw syntaxError("Expected '" + c + "' and instead saw '" + n
- + "'");
- }
- return n;
- }
-
- /**
- * Get the next n characters.
- *
- * @param n
- * The number of characters to take.
- * @return A string of n characters.
- * @throws JSONException
- * Substring bounds error if there are not n characters
- * remaining in the source string.
- */
- public String next(int n) throws JSONException {
- if (n == 0) {
- return "";
- }
-
- char[] chars = new char[n];
- int pos = 0;
-
- while (pos < n) {
- chars[pos] = next();
- if (end()) {
- throw syntaxError("Substring bounds error");
- }
- pos += 1;
- }
- return new String(chars);
- }
-
- /**
- * Get the next char in the string, skipping whitespace.
- *
- * @throws JSONException
- * @return A character, or 0 if there are no more characters.
- */
- public char nextClean() throws JSONException {
- for (;;) {
- char c = next();
- if (c == 0 || c > ' ') {
- return c;
- }
- }
- }
-
- /**
- * Return the characters up to the next close quote character. Backslash
- * processing is done. The formal JSON format does not allow strings in
- * single quotes, but an implementation is allowed to accept them.
- *
- * @param quote
- * The quoting character, either <code>"</code>
- * &nbsp;<small>(double quote)</small> or <code>'</code>
- * &nbsp;<small>(single quote)</small>.
- * @return A String.
- * @throws JSONException
- * Unterminated string.
- */
- public String nextString(char quote) throws JSONException {
- char c;
- StringBuffer sb = new StringBuffer();
- for (;;) {
- c = next();
- switch (c) {
- case 0:
- case '\n':
- case '\r':
- throw syntaxError("Unterminated string");
- case '\\':
- c = next();
- switch (c) {
- case 'b':
- sb.append('\b');
- break;
- case 't':
- sb.append('\t');
- break;
- case 'n':
- sb.append('\n');
- break;
- case 'f':
- sb.append('\f');
- break;
- case 'r':
- sb.append('\r');
- break;
- case 'u':
- sb.append((char) Integer.parseInt(next(4), 16));
- break;
- case '"':
- case '\'':
- case '\\':
- case '/':
- sb.append(c);
- break;
- default:
- throw syntaxError("Illegal escape.");
- }
- break;
- default:
- if (c == quote) {
- return sb.toString();
- }
- sb.append(c);
- }
- }
- }
-
- /**
- * Get the text up but not including the specified character or the end of
- * line, whichever comes first.
- *
- * @param delimiter
- * A delimiter character.
- * @return A string.
- */
- public String nextTo(char delimiter) throws JSONException {
- StringBuffer sb = new StringBuffer();
- for (;;) {
- char c = next();
- if (c == delimiter || c == 0 || c == '\n' || c == '\r') {
- if (c != 0) {
- back();
- }
- return sb.toString().trim();
- }
- sb.append(c);
- }
- }
-
- /**
- * Get the text up but not including one of the specified delimiter
- * characters or the end of line, whichever comes first.
- *
- * @param delimiters
- * A set of delimiter characters.
- * @return A string, trimmed.
- */
- public String nextTo(String delimiters) throws JSONException {
- char c;
- StringBuffer sb = new StringBuffer();
- for (;;) {
- c = next();
- if (delimiters.indexOf(c) >= 0 || c == 0 || c == '\n' || c == '\r') {
- if (c != 0) {
- back();
- }
- return sb.toString().trim();
- }
- sb.append(c);
- }
- }
-
- /**
- * Get the next value. The value can be a Boolean, Double, Integer,
- * JSONArray, JSONObject, Long, or String, or the JSONObject.NULL object.
- *
- * @throws JSONException
- * If syntax error.
- *
- * @return An object.
- */
- public Object nextValue() throws JSONException {
- char c = nextClean();
- String string;
-
- switch (c) {
- case '"':
- case '\'':
- return nextString(c);
- case '{':
- back();
- return new JSONObject(this);
- case '[':
- back();
- return new JSONArray(this);
- }
-
- /*
- * Handle unquoted text. This could be the values true, false, or null,
- * or it can be a number. An implementation (such as this one) is
- * allowed to also accept non-standard forms.
- *
- * Accumulate characters until we reach the end of the text or a
- * formatting character.
- */
-
- StringBuffer sb = new StringBuffer();
- while (c >= ' ' && ",:]}/\\\"[{;=#".indexOf(c) < 0) {
- sb.append(c);
- c = next();
- }
- back();
-
- string = sb.toString().trim();
- if (string.equals("")) {
- throw syntaxError("Missing value");
- }
- return JSONObject.stringToValue(string);
- }
-
- /**
- * Skip characters until the next character is the requested character. If
- * the requested character is not found, no characters are skipped.
- *
- * @param to
- * A character to skip to.
- * @return The requested character, or zero if the requested character is
- * not found.
- */
- public char skipTo(char to) throws JSONException {
- char c;
- try {
- int startIndex = index;
- int startCharacter = character;
- int startLine = line;
- reader.mark(Integer.MAX_VALUE);
- do {
- c = next();
- if (c == 0) {
- reader.reset();
- index = startIndex;
- character = startCharacter;
- line = startLine;
- return c;
- }
- } while (c != to);
- } catch (IOException exc) {
- throw new JSONException(exc);
- }
-
- back();
- return c;
- }
-
- /**
- * Make a JSONException to signal a syntax error.
- *
- * @param message
- * The error message.
- * @return A JSONException object, suitable for throwing
- */
- public JSONException syntaxError(String message) {
- return new JSONException(message + toString());
- }
-
- /**
- * Make a printable string of this JSONTokener.
- *
- * @return " at {index} [character {character} line {line}]"
- */
- @Override
- public String toString() {
- return " at " + index + " [character " + character + " line " + line
- + "]";
- }
-} \ No newline at end of file
diff --git a/server/src/com/vaadin/external/json/JSONWriter.java b/server/src/com/vaadin/external/json/JSONWriter.java
deleted file mode 100644
index 5f9ddeeae2..0000000000
--- a/server/src/com/vaadin/external/json/JSONWriter.java
+++ /dev/null
@@ -1,355 +0,0 @@
-package com.vaadin.external.json;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.io.Writer;
-
-/*
- Copyright (c) 2006 JSON.org
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- The Software shall be used for Good, not Evil.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
- */
-
-/**
- * JSONWriter provides a quick and convenient way of producing JSON text. The
- * texts produced strictly conform to JSON syntax rules. No whitespace is added,
- * so the results are ready for transmission or storage. Each instance of
- * JSONWriter can produce one JSON text.
- * <p>
- * A JSONWriter instance provides a <code>value</code> method for appending
- * values to the text, and a <code>key</code> method for adding keys before
- * values in objects. There are <code>array</code> and <code>endArray</code>
- * methods that make and bound array values, and <code>object</code> and
- * <code>endObject</code> methods which make and bound object values. All of
- * these methods return the JSONWriter instance, permitting a cascade style. For
- * example,
- *
- * <pre>
- * new JSONWriter(myWriter).object().key(&quot;JSON&quot;).value(&quot;Hello, World!&quot;)
- * .endObject();
- * </pre>
- *
- * which writes
- *
- * <pre>
- * {"JSON":"Hello, World!"}
- * </pre>
- * <p>
- * The first method called must be <code>array</code> or <code>object</code>.
- * There are no methods for adding commas or colons. JSONWriter adds them for
- * you. Objects and arrays can be nested up to 20 levels deep.
- * <p>
- * This can sometimes be easier than using a JSONObject to build a string.
- *
- * @author JSON.org
- * @version 2011-11-14
- */
-public class JSONWriter implements Serializable {
- private static final int maxdepth = 200;
-
- /**
- * The comma flag determines if a comma should be output before the next
- * value.
- */
- private boolean comma;
-
- /**
- * The current mode. Values: 'a' (array), 'd' (done), 'i' (initial), 'k'
- * (key), 'o' (object).
- */
- protected char mode;
-
- /**
- * The object/array stack.
- */
- private final JSONObject stack[];
-
- /**
- * The stack top index. A value of 0 indicates that the stack is empty.
- */
- private int top;
-
- /**
- * The writer that will receive the output.
- */
- protected Writer writer;
-
- /**
- * Make a fresh JSONWriter. It can be used to build one JSON text.
- */
- public JSONWriter(Writer w) {
- comma = false;
- mode = 'i';
- stack = new JSONObject[maxdepth];
- top = 0;
- writer = w;
- }
-
- /**
- * Append a value.
- *
- * @param string
- * A string value.
- * @return this
- * @throws JSONException
- * If the value is out of sequence.
- */
- private JSONWriter append(String string) throws JSONException {
- if (string == null) {
- throw new JSONException("Null pointer");
- }
- if (mode == 'o' || mode == 'a') {
- try {
- if (comma && mode == 'a') {
- writer.write(',');
- }
- writer.write(string);
- } catch (IOException e) {
- throw new JSONException(e);
- }
- if (mode == 'o') {
- mode = 'k';
- }
- comma = true;
- return this;
- }
- throw new JSONException("Value out of sequence.");
- }
-
- /**
- * Begin appending a new array. All values until the balancing
- * <code>endArray</code> will be appended to this array. The
- * <code>endArray</code> method must be called to mark the array's end.
- *
- * @return this
- * @throws JSONException
- * If the nesting is too deep, or if the object is started in
- * the wrong place (for example as a key or after the end of the
- * outermost array or object).
- */
- public JSONWriter array() throws JSONException {
- if (mode == 'i' || mode == 'o' || mode == 'a') {
- push(null);
- append("[");
- comma = false;
- return this;
- }
- throw new JSONException("Misplaced array.");
- }
-
- /**
- * End something.
- *
- * @param mode
- * Mode
- * @param c
- * Closing character
- * @return this
- * @throws JSONException
- * If unbalanced.
- */
- private JSONWriter end(char mode, char c) throws JSONException {
- if (this.mode != mode) {
- throw new JSONException(mode == 'a' ? "Misplaced endArray."
- : "Misplaced endObject.");
- }
- pop(mode);
- try {
- writer.write(c);
- } catch (IOException e) {
- throw new JSONException(e);
- }
- comma = true;
- return this;
- }
-
- /**
- * End an array. This method most be called to balance calls to
- * <code>array</code>.
- *
- * @return this
- * @throws JSONException
- * If incorrectly nested.
- */
- public JSONWriter endArray() throws JSONException {
- return end('a', ']');
- }
-
- /**
- * End an object. This method most be called to balance calls to
- * <code>object</code>.
- *
- * @return this
- * @throws JSONException
- * If incorrectly nested.
- */
- public JSONWriter endObject() throws JSONException {
- return end('k', '}');
- }
-
- /**
- * Append a key. The key will be associated with the next value. In an
- * object, every value must be preceded by a key.
- *
- * @param string
- * A key string.
- * @return this
- * @throws JSONException
- * If the key is out of place. For example, keys do not belong
- * in arrays or if the key is null.
- */
- public JSONWriter key(String string) throws JSONException {
- if (string == null) {
- throw new JSONException("Null key.");
- }
- if (mode == 'k') {
- try {
- stack[top - 1].putOnce(string, Boolean.TRUE);
- if (comma) {
- writer.write(',');
- }
- writer.write(JSONObject.quote(string));
- writer.write(':');
- comma = false;
- mode = 'o';
- return this;
- } catch (IOException e) {
- throw new JSONException(e);
- }
- }
- throw new JSONException("Misplaced key.");
- }
-
- /**
- * Begin appending a new object. All keys and values until the balancing
- * <code>endObject</code> will be appended to this object. The
- * <code>endObject</code> method must be called to mark the object's end.
- *
- * @return this
- * @throws JSONException
- * If the nesting is too deep, or if the object is started in
- * the wrong place (for example as a key or after the end of the
- * outermost array or object).
- */
- public JSONWriter object() throws JSONException {
- if (mode == 'i') {
- mode = 'o';
- }
- if (mode == 'o' || mode == 'a') {
- append("{");
- push(new JSONObject());
- comma = false;
- return this;
- }
- throw new JSONException("Misplaced object.");
-
- }
-
- /**
- * Pop an array or object scope.
- *
- * @param c
- * The scope to close.
- * @throws JSONException
- * If nesting is wrong.
- */
- private void pop(char c) throws JSONException {
- if (top <= 0) {
- throw new JSONException("Nesting error.");
- }
- char m = stack[top - 1] == null ? 'a' : 'k';
- if (m != c) {
- throw new JSONException("Nesting error.");
- }
- top -= 1;
- mode = top == 0 ? 'd' : stack[top - 1] == null ? 'a' : 'k';
- }
-
- /**
- * Push an array or object scope.
- *
- * @param c
- * The scope to open.
- * @throws JSONException
- * If nesting is too deep.
- */
- private void push(JSONObject jo) throws JSONException {
- if (top >= maxdepth) {
- throw new JSONException("Nesting too deep.");
- }
- stack[top] = jo;
- mode = jo == null ? 'a' : 'k';
- top += 1;
- }
-
- /**
- * Append either the value <code>true</code> or the value <code>false</code>
- * .
- *
- * @param b
- * A boolean.
- * @return this
- * @throws JSONException
- */
- public JSONWriter value(boolean b) throws JSONException {
- return append(b ? "true" : "false");
- }
-
- /**
- * Append a double value.
- *
- * @param d
- * A double.
- * @return this
- * @throws JSONException
- * If the number is not finite.
- */
- public JSONWriter value(double d) throws JSONException {
- return this.value(new Double(d));
- }
-
- /**
- * Append a long value.
- *
- * @param l
- * A long.
- * @return this
- * @throws JSONException
- */
- public JSONWriter value(long l) throws JSONException {
- return append(Long.toString(l));
- }
-
- /**
- * Append an object value.
- *
- * @param object
- * The object to append. It can be null, or a Boolean, Number,
- * String, JSONObject, or JSONArray, or an object that implements
- * JSONString.
- * @return this
- * @throws JSONException
- * If the value is out of sequence.
- */
- public JSONWriter value(Object object) throws JSONException {
- return append(JSONObject.valueToString(object));
- }
-}
diff --git a/server/src/com/vaadin/external/json/README b/server/src/com/vaadin/external/json/README
deleted file mode 100644
index ca6dc11764..0000000000
--- a/server/src/com/vaadin/external/json/README
+++ /dev/null
@@ -1,68 +0,0 @@
-JSON in Java [package org.json]
-
-Douglas Crockford
-douglas@crockford.com
-
-2011-02-02
-
-
-JSON is a light-weight, language independent, data interchange format.
-See http://www.JSON.org/
-
-The files in this package implement JSON encoders/decoders in Java.
-It also includes the capability to convert between JSON and XML, HTTP
-headers, Cookies, and CDL.
-
-This is a reference implementation. There is a large number of JSON packages
-in Java. Perhaps someday the Java community will standardize on one. Until
-then, choose carefully.
-
-The license includes this restriction: "The software shall be used for good,
-not evil." If your conscience cannot live with that, then choose a different
-package.
-
-The package compiles on Java 1.2 thru Java 1.4.
-
-
-JSONObject.java: The JSONObject can parse text from a String or a JSONTokener
-to produce a map-like object. The object provides methods for manipulating its
-contents, and for producing a JSON compliant object serialization.
-
-JSONArray.java: The JSONObject can parse text from a String or a JSONTokener
-to produce a vector-like object. The object provides methods for manipulating
-its contents, and for producing a JSON compliant array serialization.
-
-JSONTokener.java: The JSONTokener breaks a text into a sequence of individual
-tokens. It can be constructed from a String, Reader, or InputStream.
-
-JSONException.java: The JSONException is the standard exception type thrown
-by this package.
-
-
-JSONString.java: The JSONString interface requires a toJSONString method,
-allowing an object to provide its own serialization.
-
-JSONStringer.java: The JSONStringer provides a convenient facility for
-building JSON strings.
-
-JSONWriter.java: The JSONWriter provides a convenient facility for building
-JSON text through a writer.
-
-
-CDL.java: CDL provides support for converting between JSON and comma
-delimited lists.
-
-Cookie.java: Cookie provides support for converting between JSON and cookies.
-
-CookieList.java: CookieList provides support for converting between JSON and
-cookie lists.
-
-HTTP.java: HTTP provides support for converting between JSON and HTTP headers.
-
-HTTPTokener.java: HTTPTokener extends JSONTokener for parsing HTTP headers.
-
-XML.java: XML provides support for converting between JSON and XML.
-
-JSONML.java: JSONML provides support for converting between JSONML and XML.
-
-XMLTokener.java: XMLTokener extends JSONTokener for parsing XML text. \ No newline at end of file
diff --git a/server/src/com/vaadin/navigator/Navigator.java b/server/src/com/vaadin/navigator/Navigator.java
index f05d3678a5..d3098903c5 100644
--- a/server/src/com/vaadin/navigator/Navigator.java
+++ b/server/src/com/vaadin/navigator/Navigator.java
@@ -31,16 +31,17 @@ import com.vaadin.ui.CssLayout;
import com.vaadin.ui.CustomComponent;
/**
- * Navigator utility that allows switching of views in a part of an application.
- *
+ * A navigator utility that allows switching of views in a part of an
+ * application.
+ * <p>
* The view switching can be based e.g. on URI fragments containing the view
* name and parameters to the view. There are two types of parameters for views:
* an optional parameter string that is included in the fragment (may be
* bookmarkable).
- *
+ * <p>
* Views can be explicitly registered or dynamically generated and listening to
* view changes is possible.
- *
+ * <p>
* Note that {@link Navigator} is not a component itself but comes with
* {@link SimpleViewDisplay} which is a component that displays the selected
* view as its contents.
@@ -90,7 +91,7 @@ public class Navigator implements Serializable {
private final Navigator navigator;
/**
- * Create a new URIFragmentManager and attach it to listen to URI
+ * Creates a new URIFragmentManager and attach it to listen to URI
* fragment changes of a {@link Page}.
*
* @param page
@@ -128,13 +129,13 @@ public class Navigator implements Serializable {
}
/**
- * View display that is a component itself and replaces its contents with
+ * A ViewDisplay that is a component itself and replaces its contents with
* the view.
- *
+ * <p>
* This display only supports views that are {@link Component}s themselves.
* Attempting to display a view that is not a component causes an exception
* to be thrown.
- *
+ * <p>
* By default, the view display has full size.
*/
public static class SimpleViewDisplay extends CustomComponent implements
@@ -160,12 +161,12 @@ public class Navigator implements Serializable {
}
/**
- * View display that replaces the contents of a {@link ComponentContainer}
+ * A ViewDisplay that replaces the contents of a {@link ComponentContainer}
* with the active {@link View}.
- *
+ * <p>
* All components of the container are removed before adding the new view to
* it.
- *
+ * <p>
* This display only supports views that are {@link Component}s themselves.
* Attempting to display a view that is not a component causes an exception
* to be thrown.
@@ -195,7 +196,7 @@ public class Navigator implements Serializable {
}
/**
- * View provider which supports mapping a single view name to a single
+ * A ViewProvider which supports mapping a single view name to a single
* pre-initialized view instance.
*
* For most cases, ClassBasedViewProvider should be used instead of this.
@@ -205,7 +206,8 @@ public class Navigator implements Serializable {
private final View view;
/**
- * Create a new view provider which returns a pre-created view instance.
+ * Creates a new view provider which returns a pre-created view
+ * instance.
*
* @param viewName
* name of the view (not null)
@@ -249,12 +251,12 @@ public class Navigator implements Serializable {
}
/**
- * View provider which maps a single view name to a class to instantiate for
- * the view.
- *
+ * A ViewProvider which maps a single view name to a class to instantiate
+ * for the view.
+ * <p>
* Note that the view class must be accessible by the class loader used by
* the provider. This may require its visibility to be public.
- *
+ * <p>
* This class is primarily for internal use by {@link Navigator}.
*/
public static class ClassBasedViewProvider implements ViewProvider {
@@ -336,26 +338,21 @@ public class Navigator implements Serializable {
private List<ViewProvider> providers = new LinkedList<ViewProvider>();
/**
- * Create a navigator that is tracking the active view using URI fragments
+ * Creates a navigator that is tracking the active view using URI fragments
* of the current {@link Page} and replacing the contents of a
* {@link ComponentContainer} with the active view.
- *
+ * <p>
* In case the container is not on the current page, use another
* {@link Navigator#Navigator(Page, ViewDisplay)} with an explicitly created
* {@link ComponentContainerViewDisplay}.
- *
+ * <p>
* All components of the container are removed each time before adding the
* active {@link View}. Views must implement {@link Component} when using
* this constructor.
- *
* <p>
* After all {@link View}s and {@link ViewProvider}s have been registered,
* the application should trigger navigation to the current fragment using
- * e.g.
- *
- * <pre>
- * navigator.navigateTo(Page.getCurrent().getFragment());
- * </pre>
+ * {@link #navigate()}.
*
* @param container
* ComponentContainer whose contents should be replaced with the
@@ -367,16 +364,11 @@ public class Navigator implements Serializable {
}
/**
- * Create a navigator that is tracking the active view using URI fragments.
- *
+ * Creates a navigator that is tracking the active view using URI fragments.
* <p>
* After all {@link View}s and {@link ViewProvider}s have been registered,
* the application should trigger navigation to the current fragment using
- * e.g.
- *
- * <pre>
- * navigator.navigateTo(Page.getCurrent().getFragment());
- * </pre>
+ * {@link #navigate()}.
*
* @param page
* whose URI fragments are used
@@ -389,14 +381,15 @@ public class Navigator implements Serializable {
}
/**
- * Create a navigator.
- *
+ * Creates a navigator.
+ * <p>
* When a custom navigation state manager is not needed, use the constructor
* {@link #Navigator(Page, ViewDisplay)} which uses a URI fragment based
* state manager.
- *
- * Note that navigation to the initial view must be performed explicitly by
- * the application after creating a Navigator using this constructor.
+ * <p>
+ * After all {@link View}s and {@link ViewProvider}s have been registered,
+ * the application should trigger navigation to the current fragment using
+ * {@link #navigate()}.
*
* @param stateManager
* {@link NavigationStateManager} keeping track of the active
@@ -411,20 +404,29 @@ public class Navigator implements Serializable {
}
/**
- * Navigate to a view and initialize the view with given parameters.
- *
+ * Navigates to the current navigation state. This method should be called
+ * when all required {@link View}s, {@link ViewProvider}s, and
+ * {@link ViewChangeListener}s have been added to the navigator.
+ */
+ public void navigate() {
+ navigateTo(getStateManager().getState());
+ }
+
+ /**
+ * Navigates to a view and initialize the view with given parameters.
+ * <p>
* The view string consists of a view name optionally followed by a slash
* and a parameters part that is passed as-is to the view. ViewProviders are
* used to find and create the correct type of view.
- *
+ * <p>
* If multiple providers return a matching view, the view with the longest
* name is selected. This way, e.g. hierarchies of subviews can be
* registered like "admin/", "admin/users", "admin/settings" and the longest
* match is used.
- *
+ * <p>
* If the view being deactivated indicates it wants a confirmation for the
* navigation operation, the user is asked for the confirmation.
- *
+ * <p>
* Registered {@link ViewChangeListener}s are called upon successful view
* change.
*
@@ -460,7 +462,7 @@ public class Navigator implements Serializable {
/**
* Internal method activating a view, setting its parameters and calling
* listeners.
- *
+ * <p>
* This method also verifies that the user is allowed to perform the
* navigation operation.
*
@@ -475,7 +477,7 @@ public class Navigator implements Serializable {
protected void navigateTo(View view, String viewName, String parameters) {
ViewChangeEvent event = new ViewChangeEvent(this, currentView, view,
viewName, parameters);
- if (!isViewChangeAllowed(event)) {
+ if (!fireBeforeViewChange(event)) {
return;
}
@@ -496,15 +498,16 @@ public class Navigator implements Serializable {
display.showView(view);
}
- fireViewChange(event);
+ fireAfterViewChange(event);
}
/**
- * Check whether view change is allowed.
- *
- * All related listeners are called. The view change is blocked if any of
- * them wants to block the navigation operation.
- *
+ * Fires an event before an imminent view change.
+ * <p>
+ * Listeners are called in registration order. If any listener returns
+ * <code>false</code>, the rest of the listeners are not called and the view
+ * change is blocked.
+ * <p>
* The view change listeners may also e.g. open a warning or question dialog
* and save the parameters to re-initiate the navigation operation upon user
* action.
@@ -514,9 +517,9 @@ public class Navigator implements Serializable {
* @return true if the view change should be allowed, false to silently
* block the navigation operation
*/
- protected boolean isViewChangeAllowed(ViewChangeEvent event) {
+ protected boolean fireBeforeViewChange(ViewChangeEvent event) {
for (ViewChangeListener l : listeners) {
- if (!l.isViewChangeAllowed(event)) {
+ if (!l.beforeViewChange(event)) {
return false;
}
}
@@ -545,20 +548,22 @@ public class Navigator implements Serializable {
}
/**
- * Fire an event when the current view has changed.
+ * Fires an event after the current view has changed.
+ * <p>
+ * Listeners are called in registration order.
*
* @param event
* view change event (not null)
*/
- protected void fireViewChange(ViewChangeEvent event) {
+ protected void fireAfterViewChange(ViewChangeEvent event) {
for (ViewChangeListener l : listeners) {
- l.navigatorViewChanged(event);
+ l.afterViewChange(event);
}
}
/**
- * Register a static, pre-initialized view instance for a view name.
- *
+ * Registers a static, pre-initialized view instance for a view name.
+ * <p>
* Registering another view with a name that is already registered
* overwrites the old registration of the same type.
*
@@ -580,8 +585,8 @@ public class Navigator implements Serializable {
}
/**
- * Register for a view name a view class.
- *
+ * Register a view class for a view name.
+ * <p>
* Registering another view with a name that is already registered
* overwrites the old registration of the same type.
*
@@ -606,8 +611,8 @@ public class Navigator implements Serializable {
}
/**
- * Remove view from navigator.
- *
+ * Removes a view from navigator.
+ * <p>
* This method only applies to views registered using
* {@link #addView(String, View)} or {@link #addView(String, Class)}.
*
@@ -633,8 +638,8 @@ public class Navigator implements Serializable {
}
/**
- * Register a view provider (factory).
- *
+ * Registers a view provider (factory).
+ * <p>
* Providers are called in order of registration until one that can handle
* the requested view name is found.
*
@@ -656,19 +661,19 @@ public class Navigator implements Serializable {
}
/**
- * Listen to changes of the active view.
- *
+ * Adds a listener for listening to changes of the active view.
+ * <p>
* The listener will get notified after the view has changed.
*
* @param listener
- * Listener to invoke after view changes.
+ * Listener to invoke during a view change.
*/
public void addViewChangeListener(ViewChangeListener listener) {
listeners.add(listener);
}
/**
- * Remove a view change listener.
+ * Removes a view change listener.
*
* @param listener
* Listener to remove.
diff --git a/server/src/com/vaadin/navigator/ViewChangeListener.java b/server/src/com/vaadin/navigator/ViewChangeListener.java
index aa09f64ad8..f3671821a5 100644
--- a/server/src/com/vaadin/navigator/ViewChangeListener.java
+++ b/server/src/com/vaadin/navigator/ViewChangeListener.java
@@ -102,29 +102,32 @@ public interface ViewChangeListener extends Serializable {
}
/**
- * Check whether changing the view is permissible.
- *
- * This method may also e.g. open a "save" dialog or question about the
- * change, which may re-initiate the navigation operation after user action.
- *
+ * Invoked before the view is changed.
+ * <p>
+ * This method may e.g. open a "save" dialog or question about the change,
+ * which may re-initiate the navigation operation after user action.
+ * <p>
* If this listener does not want to block the view change (e.g. does not
* know the view in question), it should return true. If any listener
- * returns false, the view change is not allowed.
+ * returns false, the view change is not allowed and
+ * <code>afterViewChange()</code> methods are not called.
*
* @param event
* view change event
* @return true if the view change should be allowed or this listener does
* not care about the view change, false to block the change
*/
- public boolean isViewChangeAllowed(ViewChangeEvent event);
+ public boolean beforeViewChange(ViewChangeEvent event);
/**
- * Invoked after the view has changed. Be careful for deadlocks if you
- * decide to change the view again in the listener.
+ * Invoked after the view is changed. If a <code>beforeViewChange</code>
+ * method blocked the view change, this method is not called. Be careful of
+ * unbounded recursion if you decide to change the view again in the
+ * listener.
*
* @param event
* view change event
*/
- public void navigatorViewChanged(ViewChangeEvent event);
+ public void afterViewChange(ViewChangeEvent event);
} \ No newline at end of file
diff --git a/server/src/com/vaadin/server/AbstractClientConnector.java b/server/src/com/vaadin/server/AbstractClientConnector.java
index 4c22a96782..0f42c0a28f 100644
--- a/server/src/com/vaadin/server/AbstractClientConnector.java
+++ b/server/src/com/vaadin/server/AbstractClientConnector.java
@@ -31,8 +31,9 @@ import java.util.Map;
import java.util.NoSuchElementException;
import java.util.logging.Logger;
-import com.vaadin.external.json.JSONException;
-import com.vaadin.external.json.JSONObject;
+import org.json.JSONException;
+import org.json.JSONObject;
+
import com.vaadin.shared.communication.ClientRpc;
import com.vaadin.shared.communication.ServerRpc;
import com.vaadin.shared.communication.SharedState;
diff --git a/server/src/com/vaadin/server/AbstractCommunicationManager.java b/server/src/com/vaadin/server/AbstractCommunicationManager.java
index c2a5377e12..32800506a3 100644
--- a/server/src/com/vaadin/server/AbstractCommunicationManager.java
+++ b/server/src/com/vaadin/server/AbstractCommunicationManager.java
@@ -56,11 +56,12 @@ import java.util.logging.Logger;
import javax.servlet.http.HttpServletResponse;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
import com.vaadin.annotations.JavaScript;
import com.vaadin.annotations.StyleSheet;
-import com.vaadin.external.json.JSONArray;
-import com.vaadin.external.json.JSONException;
-import com.vaadin.external.json.JSONObject;
import com.vaadin.server.ComponentSizeValidator.InvalidLayout;
import com.vaadin.server.RpcManager.RpcInvocationException;
import com.vaadin.server.StreamVariable.StreamingEndEvent;
diff --git a/server/src/com/vaadin/server/AbstractUIProvider.java b/server/src/com/vaadin/server/AbstractUIProvider.java
index 321ca75f65..5208997a65 100644
--- a/server/src/com/vaadin/server/AbstractUIProvider.java
+++ b/server/src/com/vaadin/server/AbstractUIProvider.java
@@ -27,8 +27,8 @@ import com.vaadin.ui.UI;
public abstract class AbstractUIProvider implements UIProvider {
@Override
- public UI createInstance(Class<? extends UI> type,
- WrappedRequest request) {
+ public UI createInstance(WrappedRequest request,
+ Class<? extends UI> type) {
try {
return type.newInstance();
} catch (InstantiationException e) {
@@ -75,7 +75,7 @@ public abstract class AbstractUIProvider implements UIProvider {
}
@Override
- public String getThemeForUI(WrappedRequest request,
+ public String getTheme(WrappedRequest request,
Class<? extends UI> uiClass) {
Theme uiTheme = getAnnotationFor(uiClass, Theme.class);
if (uiTheme != null) {
@@ -86,7 +86,7 @@ public abstract class AbstractUIProvider implements UIProvider {
}
@Override
- public String getWidgetsetForUI(WrappedRequest request,
+ public String getWidgetset(WrappedRequest request,
Class<? extends UI> uiClass) {
Widgetset uiWidgetset = getAnnotationFor(uiClass, Widgetset.class);
if (uiWidgetset != null) {
@@ -97,7 +97,7 @@ public abstract class AbstractUIProvider implements UIProvider {
}
@Override
- public boolean isUiPreserved(WrappedRequest request,
+ public boolean isPreservedOnRefresh(WrappedRequest request,
Class<? extends UI> uiClass) {
PreserveOnRefresh preserveOnRefresh = getAnnotationFor(uiClass,
PreserveOnRefresh.class);
@@ -105,7 +105,7 @@ public abstract class AbstractUIProvider implements UIProvider {
}
@Override
- public String getPageTitleForUI(WrappedRequest request,
+ public String getPageTitle(WrappedRequest request,
Class<? extends UI> uiClass) {
Title titleAnnotation = getAnnotationFor(uiClass, Title.class);
if (titleAnnotation == null) {
diff --git a/server/src/com/vaadin/server/AddonContext.java b/server/src/com/vaadin/server/AddonContext.java
index ddb8394468..edddf1fe1f 100644
--- a/server/src/com/vaadin/server/AddonContext.java
+++ b/server/src/com/vaadin/server/AddonContext.java
@@ -104,7 +104,7 @@ public class AddonContext implements Serializable {
public void destroy() {
AddonContextEvent event = new AddonContextEvent(this);
for (AddonContextListener listener : initedListeners) {
- listener.contextDestoryed(event);
+ listener.contextDestroyed(event);
}
}
diff --git a/server/src/com/vaadin/server/AddonContextListener.java b/server/src/com/vaadin/server/AddonContextListener.java
index a5d9e8c5c9..504062c039 100644
--- a/server/src/com/vaadin/server/AddonContextListener.java
+++ b/server/src/com/vaadin/server/AddonContextListener.java
@@ -48,5 +48,5 @@ public interface AddonContextListener extends EventListener {
* @param event
* the add-on context event
*/
- public void contextDestoryed(AddonContextEvent event);
+ public void contextDestroyed(AddonContextEvent event);
}
diff --git a/server/src/com/vaadin/server/BootstrapHandler.java b/server/src/com/vaadin/server/BootstrapHandler.java
index 7103ca86ae..44e22925f9 100644
--- a/server/src/com/vaadin/server/BootstrapHandler.java
+++ b/server/src/com/vaadin/server/BootstrapHandler.java
@@ -29,6 +29,8 @@ import java.util.Set;
import javax.servlet.http.HttpServletResponse;
+import org.json.JSONException;
+import org.json.JSONObject;
import org.jsoup.nodes.DataNode;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.DocumentType;
@@ -36,8 +38,6 @@ import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.parser.Tag;
-import com.vaadin.external.json.JSONException;
-import com.vaadin.external.json.JSONObject;
import com.vaadin.shared.ApplicationConstants;
import com.vaadin.shared.Version;
import com.vaadin.ui.UI;
@@ -222,7 +222,7 @@ public abstract class BootstrapHandler implements RequestHandler {
String title = context.getVaadinSession()
.getUiProvider(context.getRequest(), context.getUIClass())
- .getPageTitleForUI(context.getRequest(), context.getUIClass());
+ .getPageTitle(context.getRequest(), context.getUIClass());
if (title != null) {
head.appendElement("title").appendText(title);
}
@@ -275,7 +275,7 @@ public abstract class BootstrapHandler implements RequestHandler {
String widgetset = context.getVaadinSession()
.getUiProvider(context.getRequest(), context.getUIClass())
- .getWidgetsetForUI(context.getRequest(), context.getUIClass());
+ .getWidgetset(context.getRequest(), context.getUIClass());
if (widgetset == null) {
widgetset = request.getVaadinService().getConfiguredWidgetset(
request);
@@ -499,7 +499,7 @@ public abstract class BootstrapHandler implements RequestHandler {
public String getThemeName(BootstrapContext context) {
return context.getVaadinSession()
.getUiProvider(context.getRequest(), context.getUIClass())
- .getThemeForUI(context.getRequest(), context.getUIClass());
+ .getTheme(context.getRequest(), context.getUIClass());
}
/**
diff --git a/server/src/com/vaadin/server/ClientConnector.java b/server/src/com/vaadin/server/ClientConnector.java
index 3a340c2d7d..65c0ca366a 100644
--- a/server/src/com/vaadin/server/ClientConnector.java
+++ b/server/src/com/vaadin/server/ClientConnector.java
@@ -19,8 +19,9 @@ import java.io.IOException;
import java.util.Collection;
import java.util.List;
-import com.vaadin.external.json.JSONException;
-import com.vaadin.external.json.JSONObject;
+import org.json.JSONException;
+import org.json.JSONObject;
+
import com.vaadin.shared.Connector;
import com.vaadin.shared.communication.SharedState;
import com.vaadin.ui.Component;
@@ -188,7 +189,7 @@ public interface ClientConnector extends Connector, RpcTarget {
* features.
* <p>
* This method must not alter the component hierarchy in any way. Calling
- * requestRepaint() from this method will have no effect.
+ * {@link #markAsDirty()} from this method will have no effect.
* </p>
*
* @param initial
diff --git a/server/src/com/vaadin/server/CombinedRequest.java b/server/src/com/vaadin/server/CombinedRequest.java
index 3de5067a20..2364527a65 100644
--- a/server/src/com/vaadin/server/CombinedRequest.java
+++ b/server/src/com/vaadin/server/CombinedRequest.java
@@ -24,9 +24,9 @@ import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
-import com.vaadin.external.json.JSONArray;
-import com.vaadin.external.json.JSONException;
-import com.vaadin.external.json.JSONObject;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
/**
* A {@link WrappedRequest} with path and parameters from one request and
diff --git a/server/src/com/vaadin/server/DefaultErrorListener.java b/server/src/com/vaadin/server/DefaultErrorListener.java
index 46f96272fd..f007bdad63 100644
--- a/server/src/com/vaadin/server/DefaultErrorListener.java
+++ b/server/src/com/vaadin/server/DefaultErrorListener.java
@@ -26,11 +26,15 @@ import com.vaadin.ui.AbstractComponent;
public class DefaultErrorListener implements Terminal.ErrorListener {
@Override
public void terminalError(ErrorEvent event) {
+ doDefault(event);
+ }
+
+ public static void doDefault(ErrorEvent event) {
final Throwable t = event.getThrowable();
if (t instanceof SocketException) {
// Most likely client browser closed socket
- getLogger()
- .info("SocketException in CommunicationManager."
+ getLogger().info(
+ "SocketException in CommunicationManager."
+ " Most likely client (browser) closed socket.");
return;
}
@@ -45,16 +49,15 @@ public class DefaultErrorListener implements Terminal.ErrorListener {
// Shows the error in AbstractComponent
if (owner instanceof AbstractComponent) {
- ((AbstractComponent) owner)
- .setComponentError(AbstractErrorMessage
- .getErrorMessageForException(t));
+ ((AbstractComponent) owner).setComponentError(AbstractErrorMessage
+ .getErrorMessageForException(t));
}
// also print the error on console
getLogger().log(Level.SEVERE, "Terminal error:", t);
}
- private Logger getLogger() {
+ private static Logger getLogger() {
return Logger.getLogger(DefaultErrorListener.class.getName());
}
} \ No newline at end of file
diff --git a/server/src/com/vaadin/server/DragAndDropService.java b/server/src/com/vaadin/server/DragAndDropService.java
index 3e7de5c9a2..2d0a9e73e9 100644
--- a/server/src/com/vaadin/server/DragAndDropService.java
+++ b/server/src/com/vaadin/server/DragAndDropService.java
@@ -23,6 +23,9 @@ import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
+import org.json.JSONException;
+import org.json.JSONObject;
+
import com.vaadin.event.Transferable;
import com.vaadin.event.TransferableImpl;
import com.vaadin.event.dd.DragAndDropEvent;
@@ -32,8 +35,6 @@ import com.vaadin.event.dd.DropTarget;
import com.vaadin.event.dd.TargetDetails;
import com.vaadin.event.dd.TargetDetailsImpl;
import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.external.json.JSONException;
-import com.vaadin.external.json.JSONObject;
import com.vaadin.shared.ApplicationConstants;
import com.vaadin.shared.communication.SharedState;
import com.vaadin.shared.ui.dd.DragEventType;
diff --git a/server/src/com/vaadin/server/JavaScriptCallbackHelper.java b/server/src/com/vaadin/server/JavaScriptCallbackHelper.java
index d17ae71114..35fe4bd26c 100644
--- a/server/src/com/vaadin/server/JavaScriptCallbackHelper.java
+++ b/server/src/com/vaadin/server/JavaScriptCallbackHelper.java
@@ -24,8 +24,9 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
-import com.vaadin.external.json.JSONArray;
-import com.vaadin.external.json.JSONException;
+import org.json.JSONArray;
+import org.json.JSONException;
+
import com.vaadin.shared.JavaScriptConnectorState;
import com.vaadin.ui.AbstractJavaScriptComponent;
import com.vaadin.ui.JavaScript.JavaScriptCallbackRpc;
diff --git a/server/src/com/vaadin/server/JsonCodec.java b/server/src/com/vaadin/server/JsonCodec.java
index 689ffe034e..72bd1e78f8 100644
--- a/server/src/com/vaadin/server/JsonCodec.java
+++ b/server/src/com/vaadin/server/JsonCodec.java
@@ -39,9 +39,10 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
-import com.vaadin.external.json.JSONArray;
-import com.vaadin.external.json.JSONException;
-import com.vaadin.external.json.JSONObject;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
import com.vaadin.shared.Connector;
import com.vaadin.shared.JsonConstants;
import com.vaadin.shared.communication.UidlValue;
@@ -700,9 +701,9 @@ public class JsonCodec implements Serializable {
throw new RuntimeException(
"Can't encode "
+ value.getClass().getName()
- + " as it has multiple fields with the name "
+ + " as it has multiple properties with the name "
+ fieldName.toLowerCase()
- + ". This can happen if only casing distinguishes one property name from another.");
+ + ". This can happen if there are getters and setters for a public field (the framework can't know which to ignore) or if there are properties with only casing distinguishing between the names (e.g. getFoo() and getFOO())");
}
Object fieldReference;
diff --git a/server/src/com/vaadin/server/Page.java b/server/src/com/vaadin/server/Page.java
index ccc400341e..bfbfe53429 100644
--- a/server/src/com/vaadin/server/Page.java
+++ b/server/src/com/vaadin/server/Page.java
@@ -211,21 +211,21 @@ public class Page implements Serializable {
"browserWindowResized", BrowserWindowResizeEvent.class);
/**
- * A border style used for opening resources in a window without a border.
+ * @deprecated from 7.0, use {@link BorderStyle#NONE} instead.
*/
@Deprecated
public static final BorderStyle BORDER_NONE = BorderStyle.NONE;
/**
- * A border style used for opening resources in a window with a minimal
- * border.
+ * @deprecated from 7.0, use {@link BorderStyle#MINIMAL} instead.
*/
+ @Deprecated
public static final BorderStyle BORDER_MINIMAL = BorderStyle.MINIMAL;
/**
- * A border style that indicates that the default border style should be
- * used when opening resources.
+ * @deprecated from 7.0, use {@link BorderStyle#DEFAULT} instead.
*/
+ @Deprecated
public static final BorderStyle BORDER_DEFAULT = BorderStyle.DEFAULT;
/**
diff --git a/server/src/com/vaadin/server/PortletCommunicationManager.java b/server/src/com/vaadin/server/PortletCommunicationManager.java
index 15f0d4e4f1..c307c50348 100644
--- a/server/src/com/vaadin/server/PortletCommunicationManager.java
+++ b/server/src/com/vaadin/server/PortletCommunicationManager.java
@@ -26,8 +26,9 @@ import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.ResourceURL;
-import com.vaadin.external.json.JSONException;
-import com.vaadin.external.json.JSONObject;
+import org.json.JSONException;
+import org.json.JSONObject;
+
import com.vaadin.shared.ApplicationConstants;
import com.vaadin.ui.UI;
diff --git a/server/src/com/vaadin/server/UIProvider.java b/server/src/com/vaadin/server/UIProvider.java
index 752da3aafc..a15a50a42a 100644
--- a/server/src/com/vaadin/server/UIProvider.java
+++ b/server/src/com/vaadin/server/UIProvider.java
@@ -22,10 +22,10 @@ import com.vaadin.ui.UI;
public interface UIProvider {
public Class<? extends UI> getUIClass(WrappedRequest request);
- public UI createInstance(Class<? extends UI> type,
- WrappedRequest request);
+ public UI createInstance(WrappedRequest request,
+ Class<? extends UI> type);
- public String getPageTitleForUI(WrappedRequest request,
+ public String getPageTitle(WrappedRequest request,
Class<? extends UI> uiClass);
/**
@@ -40,7 +40,7 @@ public interface UIProvider {
* @return <code>true</code>if the same UI instance should be reused e.g.
* when the browser window is refreshed.
*/
- public boolean isUiPreserved(WrappedRequest request,
+ public boolean isPreservedOnRefresh(WrappedRequest request,
Class<? extends UI> uiClass);
/**
@@ -58,7 +58,7 @@ public interface UIProvider {
* widgetset should be used
*
*/
- public String getWidgetsetForUI(WrappedRequest request,
+ public String getWidgetset(WrappedRequest request,
Class<? extends UI> uiClass);
/**
@@ -73,7 +73,7 @@ public interface UIProvider {
* should be used
*
*/
- public String getThemeForUI(WrappedRequest request,
+ public String getTheme(WrappedRequest request,
Class<? extends UI> uiClass);
/**
@@ -85,7 +85,7 @@ public interface UIProvider {
* <p>
* If no UI provider returns an existing UI, the framework does also check
* the window.name for an existing instance with
- * {@link #isUiPreserved(WrappedRequest, Class)} before falling back to
+ * {@link #isPreservedOnRefresh(WrappedRequest, Class)} before falling back to
* bootstrapping and creating a new UI instance.
*
* @param request
diff --git a/server/src/com/vaadin/server/VaadinPortlet.java b/server/src/com/vaadin/server/VaadinPortlet.java
index 026873a04d..940a4925c8 100644
--- a/server/src/com/vaadin/server/VaadinPortlet.java
+++ b/server/src/com/vaadin/server/VaadinPortlet.java
@@ -862,12 +862,6 @@ public class VaadinPortlet extends GenericPortlet implements Constants {
WrappedPortletRequest request) throws PortletException {
VaadinPortletSession newApplication = createApplication();
- try {
- ServletPortletHelper.checkUiProviders(newApplication);
- } catch (ApplicationClassException e) {
- throw new PortletException(e);
- }
-
newApplication.storeInSession(new WrappedPortletSession(request
.getPortletRequest().getPortletSession()));
diff --git a/server/src/com/vaadin/server/VaadinServlet.java b/server/src/com/vaadin/server/VaadinServlet.java
index a0f6a28ea6..9372a08e10 100644
--- a/server/src/com/vaadin/server/VaadinServlet.java
+++ b/server/src/com/vaadin/server/VaadinServlet.java
@@ -45,6 +45,7 @@ import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.vaadin.DefaultDeploymentConfiguration;
+import com.vaadin.sass.ScssStylesheet;
import com.vaadin.server.AbstractCommunicationManager.Callback;
import com.vaadin.server.ServletPortletHelper.ApplicationClassException;
import com.vaadin.server.VaadinSession.SessionStartEvent;
@@ -824,11 +825,8 @@ public class VaadinServlet extends HttpServlet implements Constants {
try {
SystemMessages ci = getVaadinService().getSystemMessages();
- if (getRequestType(request) != RequestType.UIDL) {
- // 'plain' http req - e.g. browser reload;
- // just go ahead redirect the browser
- response.sendRedirect(ci.getSessionExpiredURL());
- } else {
+ RequestType requestType = getRequestType(request);
+ if (requestType == RequestType.UIDL) {
/*
* Invalidate session (weird to have session if we're saying
* that it's expired, and worse: portal integration will fail
@@ -845,6 +843,13 @@ public class VaadinServlet extends HttpServlet implements Constants {
ci.getSessionExpiredMessage(), null,
ci.getSessionExpiredURL());
+ } else if (requestType == RequestType.HEARTBEAT) {
+ response.sendError(HttpServletResponse.SC_GONE,
+ "Session expired");
+ } else {
+ // 'plain' http req - e.g. browser reload;
+ // just go ahead redirect the browser
+ response.sendRedirect(ci.getSessionExpiredURL());
}
} catch (SystemMessageException ee) {
throw new ServletException(ee);
@@ -866,11 +871,8 @@ public class VaadinServlet extends HttpServlet implements Constants {
try {
SystemMessages ci = getVaadinService().getSystemMessages();
- if (getRequestType(request) != RequestType.UIDL) {
- // 'plain' http req - e.g. browser reload;
- // just go ahead redirect the browser
- response.sendRedirect(ci.getCommunicationErrorURL());
- } else {
+ RequestType requestType = getRequestType(request);
+ if (requestType == RequestType.UIDL) {
// send uidl redirect
criticalNotification(request, response,
ci.getCommunicationErrorCaption(),
@@ -881,6 +883,14 @@ public class VaadinServlet extends HttpServlet implements Constants {
* since the session is not created by the portal.
*/
request.getSession().invalidate();
+
+ } else if (requestType == RequestType.HEARTBEAT) {
+ response.sendError(HttpServletResponse.SC_FORBIDDEN,
+ "Forbidden");
+ } else {
+ // 'plain' http req - e.g. browser reload;
+ // just go ahead redirect the browser
+ response.sendRedirect(ci.getCommunicationErrorURL());
}
} catch (SystemMessageException ee) {
throw new ServletException(ee);
@@ -941,16 +951,14 @@ public class VaadinServlet extends HttpServlet implements Constants {
throws IOException, ServletException {
final ServletContext sc = getServletContext();
- URL resourceUrl = sc.getResource(filename);
- if (resourceUrl == null) {
- // try if requested file is found from classloader
-
- // strip leading "/" otherwise stream from JAR wont work
- filename = filename.substring(1);
- resourceUrl = getVaadinService().getClassLoader().getResource(
- filename);
+ URL resourceUrl = findResourceURL(filename, sc);
- if (resourceUrl == null) {
+ if (resourceUrl == null) {
+ // File not found, if this was a css request we still look for a
+ // scss file with the same name
+ if (serveOnTheFlyCompiledScss(filename, request, response, sc)) {
+ return;
+ } else {
// cannot serve requested file
getLogger()
.info("Requested resource ["
@@ -958,19 +966,19 @@ public class VaadinServlet extends HttpServlet implements Constants {
+ "] not found from filesystem or through class loader."
+ " Add widgetset and/or theme JAR to your classpath or add files to WebContent/VAADIN folder.");
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
- return;
}
+ return;
+ }
- // security check: do not permit navigation out of the VAADIN
- // directory
- if (!isAllowedVAADINResourceUrl(request, resourceUrl)) {
- getLogger()
- .info("Requested resource ["
- + filename
- + "] not accessible in the VAADIN directory or access to it is forbidden.");
- response.setStatus(HttpServletResponse.SC_FORBIDDEN);
- return;
- }
+ // security check: do not permit navigation out of the VAADIN
+ // directory
+ if (!isAllowedVAADINResourceUrl(request, resourceUrl)) {
+ getLogger()
+ .info("Requested resource ["
+ + filename
+ + "] not accessible in the VAADIN directory or access to it is forbidden.");
+ response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+ return;
}
// Find the modification timestamp
@@ -1046,6 +1054,82 @@ public class VaadinServlet extends HttpServlet implements Constants {
is.close();
}
+ private URL findResourceURL(String filename, ServletContext sc)
+ throws MalformedURLException {
+ URL resourceUrl = sc.getResource(filename);
+ if (resourceUrl == null) {
+ // try if requested file is found from classloader
+
+ // strip leading "/" otherwise stream from JAR wont work
+ if (filename.startsWith("/")) {
+ filename = filename.substring(1);
+ }
+
+ resourceUrl = getVaadinService().getClassLoader().getResource(
+ filename);
+ }
+ return resourceUrl;
+ }
+
+ private boolean serveOnTheFlyCompiledScss(String filename,
+ HttpServletRequest request, HttpServletResponse response,
+ ServletContext sc) throws IOException {
+ if (getVaadinService().getDeploymentConfiguration().isProductionMode()) {
+ // This is not meant for production mode.
+ return false;
+ }
+
+ if (!filename.endsWith(".css")) {
+ return false;
+ }
+
+ String scssFilename = filename.substring(0, filename.length() - 4)
+ + ".scss";
+ URL scssUrl = findResourceURL(scssFilename, sc);
+ if (scssUrl == null) {
+ // Is a css request but no scss file was found
+ return false;
+ }
+ // security check: do not permit navigation out of the VAADIN
+ // directory
+ if (!isAllowedVAADINResourceUrl(request, scssUrl)) {
+ getLogger()
+ .info("Requested resource ["
+ + filename
+ + "] not accessible in the VAADIN directory or access to it is forbidden.");
+ response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+ // Handled, return true so no further processing is done
+ return true;
+ }
+ String realFilename = sc.getRealPath(scssFilename);
+ ScssStylesheet scss = ScssStylesheet.get(realFilename);
+ if (scss == null) {
+ getLogger()
+ .warning(
+ "Scss file "
+ + scssFilename
+ + " exists but ScssStylesheet was not able to find it");
+ return false;
+ }
+ try {
+ getLogger()
+ .fine("Compiling " + realFilename + " for request to "
+ + filename);
+ scss.compile();
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+
+ // This is for development mode only so instruct the browser to never
+ // cache it
+ response.setHeader("Cache-Control", "no-cache");
+ final String mimetype = getVaadinService().getMimeType(filename);
+ writeResponse(response, mimetype, scss.toString());
+
+ return true;
+ }
+
/**
* Check whether a URL obtained from a classloader refers to a valid static
* resource in the directory VAADIN.
diff --git a/server/src/com/vaadin/server/VaadinSession.java b/server/src/com/vaadin/server/VaadinSession.java
index a91c011ddf..35a53fc6db 100644
--- a/server/src/com/vaadin/server/VaadinSession.java
+++ b/server/src/com/vaadin/server/VaadinSession.java
@@ -716,7 +716,7 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable {
protected <T extends UI> T createUIInstance(WrappedRequest request,
Class<T> uiClass) {
UIProvider uiProvider = getUiProvider(request, uiClass);
- return uiClass.cast(uiProvider.createInstance(uiClass, request));
+ return uiClass.cast(uiProvider.createInstance(request, uiClass));
}
/**
@@ -1027,7 +1027,8 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable {
ui.doInit(request, uiId.intValue());
- if (getUiProvider(request, uiClass).isUiPreserved(request, uiClass)) {
+ if (getUiProvider(request, uiClass).isPreservedOnRefresh(request,
+ uiClass)) {
// Remember this UI
String windowName = request.getBrowserDetails().getWindowName();
if (windowName == null) {
@@ -1067,15 +1068,10 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable {
/**
* Gets all the UIs of this session. This includes UIs that have been
- * requested but not yet initialized. Please note, that UIs are not
- * automatically removed e.g. if the browser window is closed and that there
- * is no way to manually remove a UI. Inactive UIs will thus not be released
- * for GC until the entire application is released when the session has
- * timed out (unless there are dangling references). Improved support for
- * releasing unused uIs is planned for an upcoming alpha release of Vaadin
- * 7.
+ * requested but not yet initialized. UIs that receive no heartbeat requests
+ * from the client are eventually removed from the session.
*
- * @return a collection of uIs belonging to this application
+ * @return a collection of UIs belonging to this application
*
* @since 7.0
*/
@@ -1190,7 +1186,7 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable {
i.remove();
retainOnRefreshUIs.values().remove(ui.getUIId());
ui.fireCloseEvent();
- getLogger().info(
+ getLogger().fine(
"Closed UI #" + ui.getUIId() + " due to inactivity");
}
}
@@ -1248,6 +1244,8 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable {
*
* @since 7.0.0
*
+ * @deprecated Might be refactored or removed before 7.0.0
+ *
* @param ui
* The UI whose status to check
* @return true if the UI is alive, false if it could be removed.
diff --git a/server/src/com/vaadin/ui/AbstractEmbedded.java b/server/src/com/vaadin/ui/AbstractEmbedded.java
index 5c72141ef9..7dcf7ca091 100644
--- a/server/src/com/vaadin/ui/AbstractEmbedded.java
+++ b/server/src/com/vaadin/ui/AbstractEmbedded.java
@@ -19,7 +19,7 @@ import com.vaadin.shared.ui.AbstractEmbeddedState;
public abstract class AbstractEmbedded extends AbstractComponent {
@Override
- public AbstractEmbeddedState getState() {
+ protected AbstractEmbeddedState getState() {
return (AbstractEmbeddedState) super.getState();
}
diff --git a/server/src/com/vaadin/ui/AbstractSelect.java b/server/src/com/vaadin/ui/AbstractSelect.java
index 4de3f90d15..45df42a9be 100644
--- a/server/src/com/vaadin/ui/AbstractSelect.java
+++ b/server/src/com/vaadin/ui/AbstractSelect.java
@@ -45,6 +45,7 @@ import com.vaadin.server.LegacyComponent;
import com.vaadin.server.PaintException;
import com.vaadin.server.PaintTarget;
import com.vaadin.server.Resource;
+import com.vaadin.shared.ui.combobox.FilteringMode;
import com.vaadin.shared.ui.dd.VerticalDropLocation;
/**
@@ -154,15 +155,28 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
/**
* Interface for option filtering, used to filter options based on user
* entered value. The value is matched to the item caption.
- * <code>FILTERINGMODE_OFF</code> (0) turns the filtering off.
- * <code>FILTERINGMODE_STARTSWITH</code> (1) matches from the start of the
- * caption. <code>FILTERINGMODE_CONTAINS</code> (1) matches anywhere in the
+ * <code>FilteringMode.OFF</code> (0) turns the filtering off.
+ * <code>FilteringMode.STARTSWITH</code> (1) matches from the start of the
+ * caption. <code>FilteringMode.CONTAINS</code> (1) matches anywhere in the
* caption.
*/
public interface Filtering extends Serializable {
- public static final int FILTERINGMODE_OFF = 0;
- public static final int FILTERINGMODE_STARTSWITH = 1;
- public static final int FILTERINGMODE_CONTAINS = 2;
+
+ /**
+ * @deprecated from 7.0, use {@link FilteringMode#OFF} instead
+ */
+ @Deprecated
+ public static final FilteringMode FILTERINGMODE_OFF = FilteringMode.OFF;
+ /**
+ * @deprecated from 7.0, use {@link FilteringMode#STARTSWITH} instead
+ */
+ @Deprecated
+ public static final FilteringMode FILTERINGMODE_STARTSWITH = FilteringMode.STARTSWITH;
+ /**
+ * @deprecated from 7.0, use {@link FilteringMode#CONTAINS} instead
+ */
+ @Deprecated
+ public static final FilteringMode FILTERINGMODE_CONTAINS = FilteringMode.CONTAINS;
/**
* Sets the option filtering mode.
@@ -170,30 +184,15 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
* @param filteringMode
* the filtering mode to use
*/
- public void setFilteringMode(int filteringMode);
+ public void setFilteringMode(FilteringMode filteringMode);
/**
* Gets the current filtering mode.
*
* @return the filtering mode in use
*/
- public int getFilteringMode();
-
- }
-
- /**
- * Multi select modes that controls how multi select behaves.
- */
- public enum MultiSelectMode {
- /**
- * The default behavior of the multi select mode
- */
- DEFAULT,
+ public FilteringMode getFilteringMode();
- /**
- * The previous more simple behavior of the multselect
- */
- SIMPLE
}
/**
diff --git a/server/src/com/vaadin/ui/BrowserFrame.java b/server/src/com/vaadin/ui/BrowserFrame.java
new file mode 100644
index 0000000000..e79e03c2dd
--- /dev/null
+++ b/server/src/com/vaadin/ui/BrowserFrame.java
@@ -0,0 +1,51 @@
+package com.vaadin.ui;
+
+import com.vaadin.server.Resource;
+import com.vaadin.shared.ui.browserframe.BrowserFrameState;
+
+/**
+ * A component displaying an embedded web page. Implemented as a HTML
+ * <code>iframe</code> element.
+ *
+ * @author Vaadin Ltd.
+ * @version
+ * @VERSION@
+ * @since 7.0
+ */
+public class BrowserFrame extends AbstractEmbedded {
+
+ /**
+ * Creates a new empty browser frame.
+ */
+ public BrowserFrame() {
+
+ }
+
+ /**
+ * Creates a new empty browser frame with the given caption.
+ *
+ * @param caption
+ * The caption for the component
+ */
+ public BrowserFrame(String caption) {
+ setCaption(caption);
+ }
+
+ /**
+ * Creates a new browser frame with the given caption and content.
+ *
+ * @param caption
+ * The caption for the component.
+ * @param source
+ * A Resource representing the Web page that should be displayed.
+ */
+ public BrowserFrame(String caption, Resource source) {
+ this(caption);
+ setSource(source);
+ }
+
+ @Override
+ protected BrowserFrameState getState() {
+ return (BrowserFrameState) super.getState();
+ }
+}
diff --git a/server/src/com/vaadin/ui/ComboBox.java b/server/src/com/vaadin/ui/ComboBox.java
index 4f852c2b7b..4987d69fdd 100644
--- a/server/src/com/vaadin/ui/ComboBox.java
+++ b/server/src/com/vaadin/ui/ComboBox.java
@@ -34,6 +34,7 @@ import com.vaadin.server.PaintException;
import com.vaadin.server.PaintTarget;
import com.vaadin.server.Resource;
import com.vaadin.shared.ui.combobox.ComboBoxConstants;
+import com.vaadin.shared.ui.combobox.FilteringMode;
/**
* A filtering dropdown single-select. Suitable for newItemsAllowed, but it's
@@ -60,7 +61,7 @@ public class ComboBox extends AbstractSelect implements
// Current page when the user is 'paging' trough options
private int currentPage = -1;
- private int filteringMode = Filtering.FILTERINGMODE_STARTSWITH;
+ private FilteringMode filteringMode = FilteringMode.STARTSWITH;
private String filterstring;
private String prevfilterstring;
@@ -186,7 +187,7 @@ public class ComboBox extends AbstractSelect implements
target.addAttribute("pagelength", pageLength);
- target.addAttribute("filteringmode", getFilteringMode());
+ target.addAttribute("filteringmode", getFilteringMode().toString());
// Paints the options and create array of selected id keys
int keyIndex = 0;
@@ -201,7 +202,7 @@ public class ComboBox extends AbstractSelect implements
boolean nullFilteredOut = filterstring != null
&& !"".equals(filterstring)
- && filteringMode != Filtering.FILTERINGMODE_OFF;
+ && filteringMode != FilteringMode.OFF;
// null option is needed and not filtered out, even if not on current
// page
boolean nullOptionVisible = needNullSelectOption && !nullFilteredOut;
@@ -411,18 +412,19 @@ public class ComboBox extends AbstractSelect implements
* @param filteringMode
* @return
*/
- protected Filter buildFilter(String filterString, int filteringMode) {
+ protected Filter buildFilter(String filterString,
+ FilteringMode filteringMode) {
Filter filter = null;
if (null != filterString && !"".equals(filterString)) {
switch (filteringMode) {
- case Filtering.FILTERINGMODE_OFF:
+ case OFF:
break;
- case Filtering.FILTERINGMODE_STARTSWITH:
+ case STARTSWITH:
filter = new SimpleStringFilter(getItemCaptionPropertyId(),
filterString, true, true);
break;
- case Filtering.FILTERINGMODE_CONTAINS:
+ case CONTAINS:
filter = new SimpleStringFilter(getItemCaptionPropertyId(),
filterString, true, false);
break;
@@ -576,7 +578,7 @@ public class ComboBox extends AbstractSelect implements
*/
protected List<?> getFilteredOptions() {
if (null == filterstring || "".equals(filterstring)
- || Filtering.FILTERINGMODE_OFF == filteringMode) {
+ || FilteringMode.OFF == filteringMode) {
prevfilterstring = null;
filteredOptions = new LinkedList<Object>(getItemIds());
return filteredOptions;
@@ -605,12 +607,12 @@ public class ComboBox extends AbstractSelect implements
caption = caption.toLowerCase();
}
switch (filteringMode) {
- case Filtering.FILTERINGMODE_CONTAINS:
+ case CONTAINS:
if (caption.indexOf(filterstring) > -1) {
filteredOptions.add(itemId);
}
break;
- case Filtering.FILTERINGMODE_STARTSWITH:
+ case STARTSWITH:
default:
if (caption.startsWith(filterstring)) {
filteredOptions.add(itemId);
@@ -686,12 +688,12 @@ public class ComboBox extends AbstractSelect implements
}
@Override
- public void setFilteringMode(int filteringMode) {
+ public void setFilteringMode(FilteringMode filteringMode) {
this.filteringMode = filteringMode;
}
@Override
- public int getFilteringMode() {
+ public FilteringMode getFilteringMode() {
return filteringMode;
}
diff --git a/server/src/com/vaadin/ui/CssLayout.java b/server/src/com/vaadin/ui/CssLayout.java
index 401eafe6e9..172258a5fe 100644
--- a/server/src/com/vaadin/ui/CssLayout.java
+++ b/server/src/com/vaadin/ui/CssLayout.java
@@ -228,6 +228,11 @@ public class CssLayout extends AbstractLayout implements LayoutClickNotifier {
@Override
public void beforeClientResponse(boolean initial) {
super.beforeClientResponse(initial);
+
+ // This is an obsolete hack that was required before Map<Conenctor, ?>
+ // was supported. The workaround is to instead use a Map<String, ?> with
+ // the connector id as the key, but that can only be used once the
+ // connector has been attached.
getState().childCss.clear();
for (Iterator<Component> ci = getComponentIterator(); ci.hasNext();) {
Component child = ci.next();
diff --git a/server/src/com/vaadin/ui/DateField.java b/server/src/com/vaadin/ui/DateField.java
index f54959fb0a..39230bf662 100644
--- a/server/src/com/vaadin/ui/DateField.java
+++ b/server/src/com/vaadin/ui/DateField.java
@@ -17,12 +17,10 @@
package com.vaadin.ui;
import java.text.SimpleDateFormat;
-import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
-import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
@@ -40,6 +38,7 @@ import com.vaadin.server.LegacyComponent;
import com.vaadin.server.PaintException;
import com.vaadin.server.PaintTarget;
import com.vaadin.shared.ui.datefield.DateFieldConstants;
+import com.vaadin.shared.ui.datefield.Resolution;
/**
* <p>
@@ -64,71 +63,6 @@ public class DateField extends AbstractField<Date> implements
FieldEvents.BlurNotifier, FieldEvents.FocusNotifier, LegacyComponent {
/**
- * Resolutions for DateFields
- *
- * @author Vaadin Ltd.
- * @since 7.0
- */
- public enum Resolution {
- SECOND(Calendar.SECOND), MINUTE(Calendar.MINUTE), HOUR(
- Calendar.HOUR_OF_DAY), DAY(Calendar.DAY_OF_MONTH), MONTH(
- Calendar.MONTH), YEAR(Calendar.YEAR);
-
- private int calendarField;
-
- private Resolution(int calendarField) {
- this.calendarField = calendarField;
- }
-
- /**
- * Returns the field in {@link Calendar} that corresponds to this
- * resolution.
- *
- * @return one of the field numbers used by Calendar
- */
- public int getCalendarField() {
- return calendarField;
- }
-
- /**
- * Returns the resolutions that are higher or equal to the given
- * resolution, starting from the given resolution. In other words
- * passing DAY to this methods returns DAY,MONTH,YEAR
- *
- * @param r
- * The resolution to start from
- * @return An iterable for the resolutions higher or equal to r
- */
- public static Iterable<Resolution> getResolutionsHigherOrEqualTo(
- Resolution r) {
- List<Resolution> resolutions = new ArrayList<DateField.Resolution>();
- Resolution[] values = Resolution.values();
- for (int i = r.ordinal(); i < values.length; i++) {
- resolutions.add(values[i]);
- }
- return resolutions;
- }
-
- /**
- * Returns the resolutions that are lower than the given resolution,
- * starting from the given resolution. In other words passing DAY to
- * this methods returns HOUR,MINUTE,SECOND.
- *
- * @param r
- * The resolution to start from
- * @return An iterable for the resolutions lower than r
- */
- public static List<Resolution> getResolutionsLowerThan(Resolution r) {
- List<Resolution> resolutions = new ArrayList<DateField.Resolution>();
- Resolution[] values = Resolution.values();
- for (int i = r.ordinal() - 1; i >= 0; i--) {
- resolutions.add(values[i]);
- }
- return resolutions;
- }
- };
-
- /**
* Resolution identifier: seconds.
*
* @deprecated As of 7.0, use {@link Resolution#SECOND}
@@ -212,7 +146,7 @@ public class DateField extends AbstractField<Date> implements
private TimeZone timeZone = null;
- private static Map<Resolution, String> variableNameForResolution = new HashMap<DateField.Resolution, String>();
+ private static Map<Resolution, String> variableNameForResolution = new HashMap<Resolution, String>();
{
variableNameForResolution.put(Resolution.SECOND, "sec");
variableNameForResolution.put(Resolution.MINUTE, "min");
@@ -372,7 +306,7 @@ public class DateField extends AbstractField<Date> implements
// Gets the new date in parts
boolean hasChanges = false;
- Map<Resolution, Integer> calendarFieldChanges = new HashMap<DateField.Resolution, Integer>();
+ Map<Resolution, Integer> calendarFieldChanges = new HashMap<Resolution, Integer>();
for (Resolution r : Resolution
.getResolutionsHigherOrEqualTo(resolution)) {
diff --git a/server/src/com/vaadin/ui/Embedded.java b/server/src/com/vaadin/ui/Embedded.java
index 3bcd7a26a0..d61fd44292 100644
--- a/server/src/com/vaadin/ui/Embedded.java
+++ b/server/src/com/vaadin/ui/Embedded.java
@@ -34,9 +34,14 @@ import com.vaadin.shared.ui.embedded.EmbeddedServerRpc;
/**
* Component for embedding external objects.
* <p>
- * As of Vaadin 7.0, the {@link Image}, {@link Flash}, and
- * {@link EmbeddedBrowser} components should be used instead of
- * <code>Embedded</code> whenever appropriate.
+ * As of Vaadin 7.0, the {@link Image}, {@link Flash}, and {@link BrowserFrame}
+ * components should be used instead of <code>Embedded</code> for displaying
+ * images, Adobe Flash objects, and embedded web pages, respectively.
+ * <code>Embedded</code> is still useful for displaying other multimedia content
+ * such as applets and PDF documents.
+ *
+ * @see Video
+ * @see Audio
*
* @author Vaadin Ltd.
* @since 3.0
@@ -60,7 +65,7 @@ public class Embedded extends AbstractComponent implements LegacyComponent {
/**
* Browser ("iframe") type.
*
- * @deprecated As of 7.0, use the {@link EmbeddedBrowser} component instead.
+ * @deprecated As of 7.0, use the {@link BrowserFrame} component instead.
*/
@Deprecated
public static final int TYPE_BROWSER = 2;
diff --git a/server/src/com/vaadin/ui/EmbeddedBrowser.java b/server/src/com/vaadin/ui/EmbeddedBrowser.java
deleted file mode 100644
index 4e2ae18de8..0000000000
--- a/server/src/com/vaadin/ui/EmbeddedBrowser.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.vaadin.ui;
-
-import com.vaadin.shared.ui.embeddedbrowser.EmbeddedBrowserState;
-
-/**
- * Component for embedding browser "iframe".
- *
- * @author Vaadin Ltd.
- * @version
- * @VERSION@
- * @since 7.0
- */
-public class EmbeddedBrowser extends AbstractEmbedded {
-
- @Override
- public EmbeddedBrowserState getState() {
- return (EmbeddedBrowserState) super.getState();
- }
-}
diff --git a/server/src/com/vaadin/ui/Flash.java b/server/src/com/vaadin/ui/Flash.java
index 430018289a..726b6c21c4 100644
--- a/server/src/com/vaadin/ui/Flash.java
+++ b/server/src/com/vaadin/ui/Flash.java
@@ -6,10 +6,11 @@ package com.vaadin.ui;
import java.util.HashMap;
+import com.vaadin.server.Resource;
import com.vaadin.shared.ui.flash.FlashState;
/**
- * Component for embedding flash objects.
+ * A component for displaying Adobe® Flash® content.
*
* @author Vaadin Ltd.
* @version
@@ -19,8 +20,39 @@ import com.vaadin.shared.ui.flash.FlashState;
@SuppressWarnings("serial")
public class Flash extends AbstractEmbedded {
+ /**
+ * Creates a new empty Flash component.
+ */
+ public Flash() {
+
+ }
+
+ /**
+ * Creates a new empty Flash component with the given caption
+ *
+ * @param caption
+ * The caption for the component
+ */
+ public Flash(String caption) {
+ setCaption(caption);
+ }
+
+ /**
+ * Creates a new Flash component with the given caption and content.
+ *
+ * @param caption
+ * The caption for the component
+ * @param source
+ * A Resource representing the Flash content that should be
+ * displayed
+ */
+ public Flash(String caption, Resource source) {
+ this(caption);
+ setSource(source);
+ }
+
@Override
- public FlashState getState() {
+ protected FlashState getState() {
return (FlashState) super.getState();
}
diff --git a/server/src/com/vaadin/ui/Image.java b/server/src/com/vaadin/ui/Image.java
index 178e557cf3..c1b27704d4 100644
--- a/server/src/com/vaadin/ui/Image.java
+++ b/server/src/com/vaadin/ui/Image.java
@@ -61,7 +61,7 @@ public class Image extends AbstractEmbedded {
}
@Override
- public ImageState getState() {
+ protected ImageState getState() {
return (ImageState) super.getState();
}
diff --git a/server/src/com/vaadin/ui/JavaScript.java b/server/src/com/vaadin/ui/JavaScript.java
index f9324ba321..3782ead85a 100644
--- a/server/src/com/vaadin/ui/JavaScript.java
+++ b/server/src/com/vaadin/ui/JavaScript.java
@@ -19,8 +19,9 @@ package com.vaadin.ui;
import java.util.HashMap;
import java.util.Map;
-import com.vaadin.external.json.JSONArray;
-import com.vaadin.external.json.JSONException;
+import org.json.JSONArray;
+import org.json.JSONException;
+
import com.vaadin.server.AbstractExtension;
import com.vaadin.server.Page;
import com.vaadin.shared.communication.ServerRpc;
diff --git a/server/src/com/vaadin/ui/JavaScriptFunction.java b/server/src/com/vaadin/ui/JavaScriptFunction.java
index ebb5e2c073..b0963ff0f4 100644
--- a/server/src/com/vaadin/ui/JavaScriptFunction.java
+++ b/server/src/com/vaadin/ui/JavaScriptFunction.java
@@ -18,8 +18,9 @@ package com.vaadin.ui;
import java.io.Serializable;
-import com.vaadin.external.json.JSONArray;
-import com.vaadin.external.json.JSONException;
+import org.json.JSONArray;
+import org.json.JSONException;
+
import com.vaadin.server.AbstractJavaScriptExtension;
/**
diff --git a/server/src/com/vaadin/ui/Link.java b/server/src/com/vaadin/ui/Link.java
index a2737e4483..6e286174a5 100644
--- a/server/src/com/vaadin/ui/Link.java
+++ b/server/src/com/vaadin/ui/Link.java
@@ -34,15 +34,21 @@ import com.vaadin.shared.ui.link.LinkConstants;
@SuppressWarnings("serial")
public class Link extends AbstractComponent implements LegacyComponent {
- /* Target window border type constant: No window border */
+ /**
+ * @deprecated from 7.0, use {@link BorderStyle#NONE} instead
+ */
@Deprecated
public static final BorderStyle TARGET_BORDER_NONE = BorderStyle.NONE;
- /* Target window border type constant: Minimal window border */
+ /**
+ * @deprecated from 7.0, use {@link BorderStyle#MINIMAL} instead
+ */
@Deprecated
public static final BorderStyle TARGET_BORDER_MINIMAL = BorderStyle.MINIMAL;
- /* Target window border type constant: Default window border */
+ /**
+ * @deprecated from 7.0, use {@link BorderStyle#DEFAULT} instead
+ */
@Deprecated
public static final BorderStyle TARGET_BORDER_DEFAULT = BorderStyle.DEFAULT;
diff --git a/server/src/com/vaadin/ui/Table.java b/server/src/com/vaadin/ui/Table.java
index 87962d5d15..d9e1403a03 100644
--- a/server/src/com/vaadin/ui/Table.java
+++ b/server/src/com/vaadin/ui/Table.java
@@ -59,6 +59,7 @@ import com.vaadin.server.PaintException;
import com.vaadin.server.PaintTarget;
import com.vaadin.server.Resource;
import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.MultiSelectMode;
import com.vaadin.shared.ui.table.TableConstants;
/**
diff --git a/server/src/com/vaadin/ui/Tree.java b/server/src/com/vaadin/ui/Tree.java
index 44a1208cf8..1ba011dd00 100644
--- a/server/src/com/vaadin/ui/Tree.java
+++ b/server/src/com/vaadin/ui/Tree.java
@@ -54,6 +54,7 @@ import com.vaadin.server.PaintException;
import com.vaadin.server.PaintTarget;
import com.vaadin.server.Resource;
import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.MultiSelectMode;
import com.vaadin.shared.ui.dd.VerticalDropLocation;
import com.vaadin.shared.ui.tree.TreeConstants;
import com.vaadin.util.ReflectTools;
@@ -519,7 +520,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
: "single"));
if (isMultiSelect()) {
target.addAttribute("multiselectmode",
- multiSelectMode.ordinal());
+ multiSelectMode.toString());
}
} else {
target.addAttribute("selectmode", "none");
diff --git a/server/src/com/vaadin/ui/UI.java b/server/src/com/vaadin/ui/UI.java
index adb2a63c2e..7f0710c813 100644
--- a/server/src/com/vaadin/ui/UI.java
+++ b/server/src/com/vaadin/ui/UI.java
@@ -981,7 +981,7 @@ public abstract class UI extends AbstractComponentContainer implements
throw new IllegalStateException("UI id has already been defined");
}
this.uiId = uiId;
- theme = getSession().getUiProvider(request, getClass()).getThemeForUI(
+ theme = getSession().getUiProvider(request, getClass()).getTheme(
request, getClass());
getPage().init(request);
@@ -1120,6 +1120,18 @@ public abstract class UI extends AbstractComponentContainer implements
}
/**
+ * Adds a close listener to the UI. Close listeners are invoked when the UI
+ * is removed from the session due to UI or session expiration.
+ *
+ * @param listener
+ * The CloseListener that should be added.
+ */
+ public void addCloseListener(CloseListener listener) {
+ addListener(CloseEvent.CLOSE_EVENT_IDENTIFIER, CloseEvent.class,
+ listener, CloseListener.closeMethod);
+ }
+
+ /**
* @deprecated Since 7.0, replaced by
* {@link #addClickListener(ClickListener)}
**/
@@ -1141,6 +1153,18 @@ public abstract class UI extends AbstractComponentContainer implements
}
/**
+ * Removes a close listener from the UI, if previously added with
+ * {@link #addCloseListener(CloseListener)}.
+ *
+ * @param listener
+ * The CloseListener that should be removed
+ */
+ public void removeCloseListener(CloseListener listener) {
+ removeListener(CloseEvent.CLOSE_EVENT_IDENTIFIER, CloseEvent.class,
+ listener);
+ }
+
+ /**
* @deprecated Since 7.0, replaced by
* {@link #removeClickListener(ClickListener)}
**/
diff --git a/server/tests/src/com/vaadin/tests/server/component/datefield/ResolutionTest.java b/server/tests/src/com/vaadin/tests/server/component/datefield/ResolutionTest.java
index 00b5c60dad..ae72f9c743 100644
--- a/server/tests/src/com/vaadin/tests/server/component/datefield/ResolutionTest.java
+++ b/server/tests/src/com/vaadin/tests/server/component/datefield/ResolutionTest.java
@@ -4,8 +4,8 @@ import java.util.ArrayList;
import junit.framework.TestCase;
+import com.vaadin.shared.ui.datefield.Resolution;
import com.vaadin.tests.util.TestUtil;
-import com.vaadin.ui.DateField.Resolution;
public class ResolutionTest extends TestCase {
diff --git a/server/tests/src/com/vaadin/tests/server/component/table/TestMultipleSelection.java b/server/tests/src/com/vaadin/tests/server/component/table/TestMultipleSelection.java
index 767b651b68..ff80cdb3c3 100644
--- a/server/tests/src/com/vaadin/tests/server/component/table/TestMultipleSelection.java
+++ b/server/tests/src/com/vaadin/tests/server/component/table/TestMultipleSelection.java
@@ -7,7 +7,7 @@ import junit.framework.TestCase;
import com.vaadin.data.Container;
import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.ui.AbstractSelect.MultiSelectMode;
+import com.vaadin.shared.ui.MultiSelectMode;
import com.vaadin.ui.Table;
public class TestMultipleSelection extends TestCase {
diff --git a/server/tests/src/com/vaadin/tests/server/component/window/AddRemoveSubWindow.java b/server/tests/src/com/vaadin/tests/server/component/window/AddRemoveSubWindow.java
index 9ee4ffe6e7..679c288586 100644
--- a/server/tests/src/com/vaadin/tests/server/component/window/AddRemoveSubWindow.java
+++ b/server/tests/src/com/vaadin/tests/server/component/window/AddRemoveSubWindow.java
@@ -7,6 +7,7 @@ import static org.junit.Assert.assertTrue;
import org.junit.Test;
import com.vaadin.LegacyApplication;
+import com.vaadin.server.VaadinSession;
import com.vaadin.ui.UI;
import com.vaadin.ui.UI.LegacyWindow;
import com.vaadin.ui.Window;
@@ -24,6 +25,7 @@ public class AddRemoveSubWindow {
@Test
public void addSubWindow() {
+ VaadinSession.setCurrent(new VaadinSession());
TestApp app = new TestApp();
app.init();
Window subWindow = new Window("Sub window");
diff --git a/server/tests/src/com/vaadin/tests/server/navigator/NavigatorTest.java b/server/tests/src/com/vaadin/tests/server/navigator/NavigatorTest.java
index bcc4c83b1e..a78c76cb70 100644
--- a/server/tests/src/com/vaadin/tests/server/navigator/NavigatorTest.java
+++ b/server/tests/src/com/vaadin/tests/server/navigator/NavigatorTest.java
@@ -135,14 +135,14 @@ public class NavigatorTest extends TestCase {
}
@Override
- public boolean isViewChangeAllowed(ViewChangeEvent event) {
+ public boolean beforeViewChange(ViewChangeEvent event) {
if (referenceEvents.isEmpty()) {
- fail("Unexpected call to isViewChangeAllowed()");
+ fail("Unexpected call to beforeViewChange()");
}
ViewChangeEvent reference = referenceEvents.remove();
Boolean isCheck = referenceIsCheck.remove();
if (!isCheck) {
- fail("Expected navigatorViewChanged(), received isViewChangeAllowed()");
+ fail("Expected afterViewChange(), received beforeViewChange()");
}
// here to make sure exactly the correct values are removed from
// each queue
@@ -154,14 +154,14 @@ public class NavigatorTest extends TestCase {
}
@Override
- public void navigatorViewChanged(ViewChangeEvent event) {
+ public void afterViewChange(ViewChangeEvent event) {
if (referenceEvents.isEmpty()) {
- fail("Unexpected call to navigatorViewChanged()");
+ fail("Unexpected call to afterViewChange()");
}
ViewChangeEvent reference = referenceEvents.remove();
Boolean isCheck = referenceIsCheck.remove();
if (isCheck) {
- fail("Expected isViewChangeAllowed(), received navigatorViewChanged()");
+ fail("Expected beforeViewChange(), received afterViewChange()");
}
if (!equalsReferenceEvent(event, reference)) {
fail("View change event does not match reference event");
diff --git a/shared/ivy.xml b/shared/ivy.xml
index 2bed3e886c..2c4b65a389 100644
--- a/shared/ivy.xml
+++ b/shared/ivy.xml
@@ -21,7 +21,7 @@
</publications>
<dependencies>
<dependency org="org.json" name="json" rev="20080701"
- conf="build,ide->default" />
+ conf="build,ide,tests->default" />
</dependencies>
</ivy-module>
diff --git a/shared/src/com/vaadin/shared/MouseEventDetails.java b/shared/src/com/vaadin/shared/MouseEventDetails.java
index ccfaac3a00..733d4c08e7 100644
--- a/shared/src/com/vaadin/shared/MouseEventDetails.java
+++ b/shared/src/com/vaadin/shared/MouseEventDetails.java
@@ -21,16 +21,55 @@ import java.io.Serializable;
* Helper class to store and transfer mouse event details.
*/
public class MouseEventDetails implements Serializable {
- // From com.google.gwt.dom.client.NativeEvent
- public static final int BUTTON_LEFT = 1;
- public static final int BUTTON_MIDDLE = 4;
- public static final int BUTTON_RIGHT = 2;
+ /**
+ * @deprecated use {@link MouseButton#LEFT} instead.
+ */
+ @Deprecated
+ public static final MouseButton BUTTON_LEFT = MouseButton.LEFT;
+ /**
+ * @deprecated use {@link MouseButton#MIDDLE} instead.
+ */
+ @Deprecated
+ public static final MouseButton BUTTON_MIDDLE = MouseButton.MIDDLE;
+ /**
+ * @deprecated use {@link MouseButton#RIGHT} instead.
+ */
+ @Deprecated
+ public static final MouseButton BUTTON_RIGHT = MouseButton.RIGHT;
+
+ /**
+ * Constants for mouse buttons.
+ *
+ * @author Vaadin Ltd
+ * @version @VERSION@
+ * @since 7.0
+ *
+ */
+ public enum MouseButton {
+ LEFT("left"), RIGHT("right"), MIDDLE("middle");
+
+ private String name;
+
+ private MouseButton(String name) {
+ this.name = name;
+ }
+
+ /**
+ * Returns a human readable text representing the button
+ *
+ * @return
+ */
+ public String getName() {
+ return name;
+ }
+
+ }
private static final char DELIM = ',';
// From com.google.gwt.user.client.Event
private static final int ONDBLCLICK = 0x00002;
- private int button;
+ private MouseButton button;
private int clientX;
private int clientY;
private boolean altKey;
@@ -41,7 +80,7 @@ public class MouseEventDetails implements Serializable {
private int relativeX = -1;
private int relativeY = -1;
- public int getButton() {
+ public MouseButton getButton() {
return button;
}
@@ -77,7 +116,7 @@ public class MouseEventDetails implements Serializable {
return relativeY;
}
- public void setButton(int button) {
+ public void setButton(MouseButton button) {
this.button = button;
}
@@ -126,16 +165,15 @@ public class MouseEventDetails implements Serializable {
}
public String serialize() {
- return "" + button + DELIM + clientX + DELIM + clientY + DELIM + altKey
- + DELIM + ctrlKey + DELIM + metaKey + DELIM + shiftKey + DELIM
- + type + DELIM + relativeX + DELIM + relativeY;
+ return button.toString() + DELIM + clientX + DELIM + clientY + DELIM
+ + altKey + DELIM + ctrlKey + DELIM + metaKey + DELIM + shiftKey
+ + DELIM + type + DELIM + relativeX + DELIM + relativeY;
}
public static MouseEventDetails deSerialize(String serializedString) {
MouseEventDetails instance = new MouseEventDetails();
String[] fields = serializedString.split(",");
-
- instance.button = Integer.parseInt(fields[0]);
+ instance.button = MouseButton.valueOf(fields[0]);
instance.clientX = Integer.parseInt(fields[1]);
instance.clientY = Integer.parseInt(fields[2]);
instance.altKey = Boolean.valueOf(fields[3]).booleanValue();
@@ -149,15 +187,7 @@ public class MouseEventDetails implements Serializable {
}
public String getButtonName() {
- if (button == BUTTON_LEFT) {
- return "left";
- } else if (button == BUTTON_RIGHT) {
- return "right";
- } else if (button == BUTTON_MIDDLE) {
- return "middle";
- }
-
- return "";
+ return button == null ? "" : button.getName();
}
public int getType() {
diff --git a/shared/src/com/vaadin/shared/ui/BorderStyle.java b/shared/src/com/vaadin/shared/ui/BorderStyle.java
index 786d340f1c..8a48253a22 100755
--- a/shared/src/com/vaadin/shared/ui/BorderStyle.java
+++ b/shared/src/com/vaadin/shared/ui/BorderStyle.java
@@ -15,6 +15,28 @@
*/
package com.vaadin.shared.ui;
+/**
+ * Constants for border styles used on HTML elements.
+ *
+ * @author Vaadin Ltd
+ * @version @VERSION@
+ * @since 7.0
+ *
+ */
public enum BorderStyle {
- NONE, MINIMAL, DEFAULT;
+ /**
+ * A border style used for using no border.
+ */
+ NONE,
+
+ /**
+ * A border style used for a minimal border.
+ */
+ MINIMAL,
+
+ /**
+ * A border style that indicates that the default border style should be
+ * used.
+ */
+ DEFAULT;
}
diff --git a/shared/src/com/vaadin/shared/ui/ComponentStateUtil.java b/shared/src/com/vaadin/shared/ui/ComponentStateUtil.java
index a7b3d5a281..5e6700b425 100644
--- a/shared/src/com/vaadin/shared/ui/ComponentStateUtil.java
+++ b/shared/src/com/vaadin/shared/ui/ComponentStateUtil.java
@@ -26,6 +26,14 @@ public final class ComponentStateUtil {
return state.styles != null && !state.styles.isEmpty();
}
+ public static final boolean isRelativeWidth(ComponentState state) {
+ return state.width != null && state.width.endsWith("%");
+ }
+
+ public static final boolean isRelativeHeight(ComponentState state) {
+ return state.height != null && state.height.endsWith("%");
+ }
+
/**
* Removes an event listener id.
*
diff --git a/shared/src/com/vaadin/shared/ui/MultiSelectMode.java b/shared/src/com/vaadin/shared/ui/MultiSelectMode.java
new file mode 100644
index 0000000000..13eef452cd
--- /dev/null
+++ b/shared/src/com/vaadin/shared/ui/MultiSelectMode.java
@@ -0,0 +1,16 @@
+package com.vaadin.shared.ui;
+
+/**
+ * Multi select modes that controls how multi select behaves.
+ */
+public enum MultiSelectMode {
+ /**
+ * The default behavior of the multi select mode
+ */
+ DEFAULT,
+
+ /**
+ * The previous more simple behavior of the multi select
+ */
+ SIMPLE
+}
diff --git a/shared/src/com/vaadin/shared/ui/Orientation.java b/shared/src/com/vaadin/shared/ui/Orientation.java
new file mode 100644
index 0000000000..b055f078ae
--- /dev/null
+++ b/shared/src/com/vaadin/shared/ui/Orientation.java
@@ -0,0 +1,5 @@
+package com.vaadin.shared.ui;
+
+public enum Orientation {
+ HORIZONTAL, VERTICAL;
+}
diff --git a/shared/src/com/vaadin/shared/ui/browserframe/BrowserFrameState.java b/shared/src/com/vaadin/shared/ui/browserframe/BrowserFrameState.java
new file mode 100644
index 0000000000..1c36420372
--- /dev/null
+++ b/shared/src/com/vaadin/shared/ui/browserframe/BrowserFrameState.java
@@ -0,0 +1,7 @@
+package com.vaadin.shared.ui.browserframe;
+
+import com.vaadin.shared.ui.AbstractEmbeddedState;
+
+public class BrowserFrameState extends AbstractEmbeddedState {
+
+}
diff --git a/shared/src/com/vaadin/shared/ui/combobox/FilteringMode.java b/shared/src/com/vaadin/shared/ui/combobox/FilteringMode.java
new file mode 100644
index 0000000000..eaae85c156
--- /dev/null
+++ b/shared/src/com/vaadin/shared/ui/combobox/FilteringMode.java
@@ -0,0 +1,5 @@
+package com.vaadin.shared.ui.combobox;
+
+public enum FilteringMode {
+ OFF, STARTSWITH, CONTAINS;
+}
diff --git a/shared/src/com/vaadin/shared/ui/datefield/Resolution.java b/shared/src/com/vaadin/shared/ui/datefield/Resolution.java
new file mode 100644
index 0000000000..a457c99de9
--- /dev/null
+++ b/shared/src/com/vaadin/shared/ui/datefield/Resolution.java
@@ -0,0 +1,69 @@
+package com.vaadin.shared.ui.datefield;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+
+/**
+ * Resolutions for DateFields
+ *
+ * @author Vaadin Ltd.
+ * @since 7.0
+ */
+public enum Resolution {
+ SECOND(Calendar.SECOND), MINUTE(Calendar.MINUTE), HOUR(Calendar.HOUR_OF_DAY), DAY(
+ Calendar.DAY_OF_MONTH), MONTH(Calendar.MONTH), YEAR(Calendar.YEAR);
+
+ private int calendarField;
+
+ private Resolution(int calendarField) {
+ this.calendarField = calendarField;
+ }
+
+ /**
+ * Returns the field in {@link Calendar} that corresponds to this
+ * resolution.
+ *
+ * @return one of the field numbers used by Calendar
+ */
+ public int getCalendarField() {
+ return calendarField;
+ }
+
+ /**
+ * Returns the resolutions that are higher or equal to the given resolution,
+ * starting from the given resolution. In other words passing DAY to this
+ * methods returns DAY,MONTH,YEAR
+ *
+ * @param r
+ * The resolution to start from
+ * @return An iterable for the resolutions higher or equal to r
+ */
+ public static Iterable<Resolution> getResolutionsHigherOrEqualTo(
+ Resolution r) {
+ List<Resolution> resolutions = new ArrayList<Resolution>();
+ Resolution[] values = Resolution.values();
+ for (int i = r.ordinal(); i < values.length; i++) {
+ resolutions.add(values[i]);
+ }
+ return resolutions;
+ }
+
+ /**
+ * Returns the resolutions that are lower than the given resolution,
+ * starting from the given resolution. In other words passing DAY to this
+ * methods returns HOUR,MINUTE,SECOND.
+ *
+ * @param r
+ * The resolution to start from
+ * @return An iterable for the resolutions lower than r
+ */
+ public static List<Resolution> getResolutionsLowerThan(Resolution r) {
+ List<Resolution> resolutions = new ArrayList<Resolution>();
+ Resolution[] values = Resolution.values();
+ for (int i = r.ordinal() - 1; i >= 0; i--) {
+ resolutions.add(values[i]);
+ }
+ return resolutions;
+ }
+};
diff --git a/shared/src/com/vaadin/shared/ui/embeddedbrowser/EmbeddedBrowserState.java b/shared/src/com/vaadin/shared/ui/embeddedbrowser/EmbeddedBrowserState.java
deleted file mode 100644
index cca47176a3..0000000000
--- a/shared/src/com/vaadin/shared/ui/embeddedbrowser/EmbeddedBrowserState.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.vaadin.shared.ui.embeddedbrowser;
-
-import com.vaadin.shared.ui.AbstractEmbeddedState;
-
-public class EmbeddedBrowserState extends AbstractEmbeddedState {
-
-}
diff --git a/theme-compiler/build.xml b/theme-compiler/build.xml
index 300f2718aa..33612bef1b 100644
--- a/theme-compiler/build.xml
+++ b/theme-compiler/build.xml
@@ -6,18 +6,22 @@
</description>
<include file="../common.xml" as="common" />
<include file="../build.xml" as="vaadin" />
+ <include file="../gwt-files.xml" as="gwtfiles" />
<!-- global properties -->
<property name="module.name" value="vaadin-theme-compiler" />
<property name="result.dir" value="result" />
- <path id="classpath.compile.custom" />
+ <path id="classpath.compile.custom">
+ <!-- This is only temporary until there is a packaged modified flute jar -->
+ <pathelement path="${gwt.user.jar.files}" />
+ </path>
<path id="classpath.tests.custom" />
<!--<property name="classes.exclude" value="com/vaadin/buildhelpers/**" />-->
<target name="jar">
<antcall target="common.jar">
- <reference torefid="extra.jar.includes" refid="empty.reference" />
+ <reference torefid="extra.jar.includes" refid="theme-compiler.gwt.includes" />
</antcall>
</target>
<target name="publish-local" depends="jar">
diff --git a/theme-compiler/ivy.xml b/theme-compiler/ivy.xml
index 7e5a639398..76061a9f2b 100644
--- a/theme-compiler/ivy.xml
+++ b/theme-compiler/ivy.xml
@@ -25,19 +25,33 @@
<dependency org="com.vaadin" name="vaadin-shared"
rev="${vaadin.version}" conf="build,tests" />
+ <!-- Required build libs -->
+ <dependency org="org.apache.commons" name="commons-jexl"
+ rev="2.1.1" conf="build,ide,tests->default" />
+ <dependency org="org.w3c.css" name="sac" rev="1.3"
+ conf="build,ide,tests->default" />
+ <dependency org="net.sourceforge.cssparser" name="cssparser"
+ rev="0.9.5" conf="build,ide,tests->default" />
+ <dependency org="commons-cli" name="commons-cli" rev="1.2"
+ conf="build,ide,tests->default" />
+
+ <!-- FIXME: This should use a repackaged version of flute with included
+ GWT modifications. Only here to make IDE compilation work atm -->
+ <dependency org="milyn" name="flute" rev="1.3"
+ conf="ide->default" />
- <dependency org="org.w3c.css" name="sac" rev="1.3" />
- <dependency org="milyn" name="flute" rev="1.3" conf="*->default" />
+ <!-- Provided build libs -->
<dependency org="javax.servlet" name="servlet-api"
- rev="2.5" />
- <dependency org="com.carrotsearch" name="smartsprites"
- rev="0.2.3-itmill" />
+ rev="2.4" conf="build-provided->default" />
+
+ <!-- Testing libs -->
<dependency org="junit" name="junit" rev="4.5"
conf="tests -> default" />
- <dependency org="net.sourceforge.cssparser" name="cssparser"
- rev="0.9.5" conf="tests,ide->default" />
- <dependency org="commons-cli" name="commons-cli" rev="1.2"
- conf="build,ide -> default" />
+
+ <!-- Internally used, for now -->
+ <dependency org="com.carrotsearch" name="smartsprites"
+ rev="0.2.3-itmill" />
+
</dependencies>
</ivy-module>
diff --git a/theme-compiler/src/com/vaadin/buildhelpers/CompileTheme.java b/theme-compiler/src/com/vaadin/buildhelpers/CompileTheme.java
index d2c64602ab..90e3faf10e 100644
--- a/theme-compiler/src/com/vaadin/buildhelpers/CompileTheme.java
+++ b/theme-compiler/src/com/vaadin/buildhelpers/CompileTheme.java
@@ -33,7 +33,6 @@ public class CompileTheme {
"the version to add to the compiled theme");
options.addOption("f", "theme-folder", true,
"the folder containing the theme");
- options.addOption("s", "sprites", true, "use smartsprites");
CommandLineParser parser = new PosixParser();
CommandLine params = parser.parse(options, args);
if (!params.hasOption("theme") || !params.hasOption("theme-folder")) {
@@ -45,10 +44,9 @@ public class CompileTheme {
String themeName = params.getOptionValue("theme");
String themeFolder = params.getOptionValue("theme-folder");
String themeVersion = params.getOptionValue("theme-version");
- boolean useSprites = params.hasOption("sprites");
try {
- processSassTheme(themeFolder, themeName, useSprites, themeVersion);
+ processSassTheme(themeFolder, themeName, themeVersion);
System.out.println("Compiling theme " + themeName + " successful");
} catch (Exception e) {
System.err.println("Compiling theme " + themeName + " failed");
@@ -57,7 +55,7 @@ public class CompileTheme {
}
private static void processSassTheme(String themeFolder, String themeName,
- boolean useSmartSprites, String version) throws Exception {
+ String version) throws Exception {
StringBuffer cssHeader = new StringBuffer();
@@ -87,16 +85,18 @@ public class CompileTheme {
System.out.println("Compiled CSS to " + stylesCssName + " ("
+ scss.toString().length() + " bytes)");
- if (useSmartSprites) {
- createSprites(themeFolder, themeName);
- System.out.println("Used SmartSprites to create sprites");
- File oldCss = new File(stylesCssName);
+ createSprites(themeFolder, themeName);
+ File oldCss = new File(stylesCssName);
+ File newCss = new File(stylesCssDir + "styles-sprite.css");
+
+ if (newCss.exists()) {
+ // Theme contained sprites. Renamed "styles-sprite.css" ->
+ // "styles.css"
oldCss.delete();
- File newCss = new File(stylesCssDir + "styles-sprite.css");
boolean ok = newCss.renameTo(oldCss);
if (!ok) {
- System.out.println("Rename " + newCss + " -> " + oldCss
+ throw new RuntimeException("Rename " + newCss + " -> " + oldCss
+ " failed");
}
}
@@ -104,12 +104,20 @@ public class CompileTheme {
private static void createSprites(String themeFolder, String themeName)
throws FileNotFoundException, IOException {
- String[] parameters = new String[] { "--sprite-png-depth", "AUTO",
- "--css-file-suffix", "-sprite", "--css-file-encoding", "UTF-8",
- "--root-dir-path", themeFolder + File.separator + themeName,
- "--log-level", "WARN" };
-
- org.carrot2.labs.smartsprites.SmartSprites.main(parameters);
+ try {
+ String[] parameters = new String[] { "--sprite-png-depth", "AUTO",
+ "--css-file-suffix", "-sprite", "--css-file-encoding",
+ "UTF-8", "--root-dir-path",
+ themeFolder + File.separator + themeName, "--log-level",
+ "WARN" };
+
+ org.carrot2.labs.smartsprites.SmartSprites.main(parameters);
+ System.out.println("Generated sprites");
+
+ } catch (NoClassDefFoundError e) {
+ System.err
+ .println("Could not find smartsprites. No sprites were generated. The theme should still work.");
+ }
}
}
diff --git a/theme-compiler/src/com/vaadin/sass/ScssStylesheet.java b/theme-compiler/src/com/vaadin/sass/ScssStylesheet.java
index b38cab82a0..e2ffe060bc 100644
--- a/theme-compiler/src/com/vaadin/sass/ScssStylesheet.java
+++ b/theme-compiler/src/com/vaadin/sass/ScssStylesheet.java
@@ -31,9 +31,11 @@ import com.vaadin.sass.parser.Parser;
import com.vaadin.sass.resolver.ScssStylesheetResolver;
import com.vaadin.sass.resolver.VaadinResolver;
import com.vaadin.sass.tree.Node;
+import com.vaadin.sass.tree.VariableNode;
import com.vaadin.sass.visitor.BlockVisitor;
-import com.vaadin.sass.visitor.ControlVisitor;
+import com.vaadin.sass.visitor.EachVisitor;
import com.vaadin.sass.visitor.ExtendVisitor;
+import com.vaadin.sass.visitor.IfElseVisitor;
import com.vaadin.sass.visitor.ImportVisitor;
import com.vaadin.sass.visitor.MixinVisitor;
import com.vaadin.sass.visitor.NestPropertiesVisitor;
@@ -116,16 +118,17 @@ public class ScssStylesheet extends Node {
* @throws Exception
*/
public void compile() throws Exception {
+ ScssStylesheet scssStylesheet = this;
List<Visitor> visitors = new ArrayList<Visitor>();
visitors.add(new ImportVisitor());
- visitors.add(new MixinVisitor());
visitors.add(new VariableVisitor());
+ visitors.add(new MixinVisitor());
+ visitors.add(new IfElseVisitor());
visitors.add(new ParentSelectorVisitor());
visitors.add(new BlockVisitor());
visitors.add(new NestPropertiesVisitor());
visitors.add(new ExtendVisitor());
- visitors.add(new ControlVisitor());
- ArrayList<Node> children2 = children;
+ visitors.add(new EachVisitor());
for (Visitor visitor : visitors) {
visitor.traverse(this);
}
@@ -156,4 +159,11 @@ public class ScssStylesheet extends Node {
String output = string.toString();
return output;
}
+
+ public void addChild(int index, VariableNode node) {
+ if (node != null) {
+ children.add(index, node);
+ }
+ }
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandler.java b/theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandler.java
index c489a6a4a7..8696cf7ccf 100644
--- a/theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandler.java
+++ b/theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandler.java
@@ -26,7 +26,6 @@ import org.w3c.css.sac.SelectorList;
import com.vaadin.sass.ScssStylesheet;
import com.vaadin.sass.tree.ForNode;
-import com.vaadin.sass.tree.IfNode;
import com.vaadin.sass.tree.MixinDefNode;
import com.vaadin.sass.tree.VariableNode;
import com.vaadin.sass.tree.WhileNode;
@@ -50,8 +49,6 @@ public interface SCSSDocumentHandler extends DocumentHandler {
WhileNode whileDirective(String condition, String body);
- IfNode ifDirective();
-
void extendDirective(SelectorList list);
void startNestedProperties(String name);
@@ -69,4 +66,12 @@ public interface SCSSDocumentHandler extends DocumentHandler {
void endEachDirective();
+ void startIfElseDirective();
+
+ void endIfElseDirective();
+
+ void ifDirective(String evaluator);
+
+ void elseDirective();
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandlerImpl.java b/theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandlerImpl.java
index 0ed8b8d0f2..283546ff35 100644
--- a/theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandlerImpl.java
+++ b/theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandlerImpl.java
@@ -18,8 +18,6 @@ package com.vaadin.sass.handler;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
import java.util.Stack;
import org.w3c.css.sac.CSSException;
@@ -33,7 +31,6 @@ import com.vaadin.sass.tree.BlockNode;
import com.vaadin.sass.tree.CommentNode;
import com.vaadin.sass.tree.ExtendNode;
import com.vaadin.sass.tree.ForNode;
-import com.vaadin.sass.tree.IfNode;
import com.vaadin.sass.tree.ImportNode;
import com.vaadin.sass.tree.MediaNode;
import com.vaadin.sass.tree.MixinDefNode;
@@ -44,16 +41,17 @@ import com.vaadin.sass.tree.RuleNode;
import com.vaadin.sass.tree.VariableNode;
import com.vaadin.sass.tree.WhileNode;
import com.vaadin.sass.tree.controldirective.EachDefNode;
+import com.vaadin.sass.tree.controldirective.ElseNode;
+import com.vaadin.sass.tree.controldirective.IfElseDefNode;
+import com.vaadin.sass.tree.controldirective.IfNode;
public class SCSSDocumentHandlerImpl implements SCSSDocumentHandler {
private final ScssStylesheet styleSheet;
Stack<Node> nodeStack = new Stack<Node>();
- private Map<String, Stack<LexicalUnit>> variableMap;
public SCSSDocumentHandlerImpl() {
this(new ScssStylesheet());
- variableMap = new HashMap<String, Stack<LexicalUnit>>();
}
public SCSSDocumentHandlerImpl(ScssStylesheet styleSheet) {
@@ -61,29 +59,6 @@ public class SCSSDocumentHandlerImpl implements SCSSDocumentHandler {
nodeStack.push(styleSheet);
}
- public void addVariable(String varName, LexicalUnit value) {
- if (variableMap.get(varName) == null) {
- variableMap.put(varName, new Stack<LexicalUnit>());
- }
- Stack<LexicalUnit> valueStack = variableMap.get(varName);
- valueStack.push(value);
- }
-
- public void removeVaraible(String varName) {
- Stack<LexicalUnit> valueStack = variableMap.get(varName);
- if (valueStack != null && !valueStack.isEmpty()) {
- valueStack.pop();
- }
- }
-
- public LexicalUnit getVariable(String varName) {
- Stack<LexicalUnit> valueStack = variableMap.get(varName);
- if (valueStack != null && !valueStack.isEmpty()) {
- return valueStack.peek();
- }
- return null;
- }
-
@Override
public ScssStylesheet getStyleSheet() {
return styleSheet;
@@ -141,11 +116,6 @@ public class SCSSDocumentHandlerImpl implements SCSSDocumentHandler {
}
@Override
- public IfNode ifDirective() {
- return new IfNode();
- }
-
- @Override
public void comment(String text) throws CSSException {
CommentNode node = new CommentNode(text);
nodeStack.peek().appendChild(node);
@@ -273,4 +243,40 @@ public class SCSSDocumentHandlerImpl implements SCSSDocumentHandler {
ImportNode node = new ImportNode(uri, media, isURL);
nodeStack.peek().appendChild(node);
}
+
+ @Override
+ public void startIfElseDirective() {
+ final IfElseDefNode node = new IfElseDefNode();
+ nodeStack.peek().appendChild(node);
+ nodeStack.push(node);
+ }
+
+ @Override
+ public void ifDirective(String evaluator) {
+ if (nodeStack.peek() instanceof IfNode) {
+ nodeStack.pop();
+ }
+ IfNode node = new IfNode(evaluator);
+ nodeStack.peek().appendChild(node);
+ nodeStack.push(node);
+ }
+
+ @Override
+ public void elseDirective() {
+ if (nodeStack.peek() instanceof IfNode) {
+ nodeStack.pop();
+ }
+ ElseNode node = new ElseNode();
+ nodeStack.peek().appendChild(node);
+ nodeStack.push(node);
+ }
+
+ @Override
+ public void endIfElseDirective() {
+ if ((nodeStack.peek() instanceof ElseNode)
+ || (nodeStack.peek() instanceof IfNode)) {
+ nodeStack.pop();
+ }
+ nodeStack.pop();
+ }
}
diff --git a/theme-compiler/src/com/vaadin/sass/parser/LexicalUnitImpl.java b/theme-compiler/src/com/vaadin/sass/parser/LexicalUnitImpl.java
index a6b03a864c..64a9d4a6b8 100644
--- a/theme-compiler/src/com/vaadin/sass/parser/LexicalUnitImpl.java
+++ b/theme-compiler/src/com/vaadin/sass/parser/LexicalUnitImpl.java
@@ -350,22 +350,32 @@ public class LexicalUnitImpl implements LexicalUnit, SCSSLexicalUnit,
return this;
}
- public void replaceValue(LexicalUnitImpl another) {
+ public void replaceValue(LexicalUnit another) {
type = another.getLexicalUnitType();
i = another.getIntegerValue();
f = another.getFloatValue();
- dimension = another.getDimension();
- sdimension = another.getSdimension();
s = another.getStringValue();
fname = another.getFunctionName();
- params = another.getParameters();
prev = another.getPreviousLexicalUnit();
+ if (another instanceof LexicalUnitImpl) {
+ dimension = ((LexicalUnitImpl) another).getDimension();
+ sdimension = ((LexicalUnitImpl) another).getSdimension();
+ params = ((LexicalUnitImpl) another).getParameters();
+ }
+
LexicalUnit finalNextInAnother = another;
while (finalNextInAnother.getNextLexicalUnit() != null) {
finalNextInAnother = finalNextInAnother.getNextLexicalUnit();
}
- ((LexicalUnitImpl) finalNextInAnother).setNextLexicalUnit(next);
- next = another.next;
+
+ if (another instanceof LexicalUnitImpl) {
+ ((LexicalUnitImpl) finalNextInAnother).setNextLexicalUnit(next);
+ next = ((LexicalUnitImpl) another).next;
+ }
+ }
+
+ public void setParameters(LexicalUnitImpl params) {
+ this.params = params;
}
public short getDimension() {
diff --git a/theme-compiler/src/com/vaadin/sass/parser/Parser.java b/theme-compiler/src/com/vaadin/sass/parser/Parser.java
index 68e0aa7231..41ea251943 100644
--- a/theme-compiler/src/com/vaadin/sass/parser/Parser.java
+++ b/theme-compiler/src/com/vaadin/sass/parser/Parser.java
@@ -1475,6 +1475,7 @@ char connector = ' ';
case EACH_VAR:
case INCLUDE_SYM:
case EACH_SYM:
+ case IF_SYM:
case EXTEND_SYM:
case IDENT:
case VARIABLE:
@@ -1487,6 +1488,9 @@ char connector = ' ';
break label_39;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case IF_SYM:
+ ifDirective();
+ break;
case INCLUDE_SYM:
includeDirective();
break;
@@ -2289,23 +2293,40 @@ boolean isPseudoElement = false;
}
}
- final public void eachDirective() throws ParseException {
- Token var;
- ArrayList<String> list;
- jj_consume_token(EACH_SYM);
+ final public void ifDirective() throws ParseException {
+ Token n = null;
+ String evaluator = "";
+ jj_consume_token(IF_SYM);
label_61:
while (true) {
+ n = booleanExpressionToken();
+ evaluator += n.image;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
+ case EQ:
+ case PLUS:
+ case MINUS:
+ case PRECEDES:
+ case SUCCEEDS:
+ case DIV:
+ case ANY:
+ case LPARAN:
+ case RPARAN:
+ case COMPARE:
+ case OR:
+ case AND:
+ case NOT_EQ:
+ case IDENT:
+ case NUMBER:
+ case VARIABLE:
;
break;
default:
jj_la1[92] = jj_gen;
break label_61;
}
- jj_consume_token(S);
}
- var = jj_consume_token(VARIABLE);
+ jj_consume_token(LBRACE);
label_62:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2318,35 +2339,356 @@ boolean isPseudoElement = false;
}
jj_consume_token(S);
}
- jj_consume_token(EACH_IN);
+ documentHandler.startIfElseDirective();
+ documentHandler.ifDirective(evaluator);
label_63:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case S:
+ case LBRACKET:
+ case ANY:
+ case PARENT:
+ case DOT:
+ case COLON:
+ case EACH_VAR:
+ case INCLUDE_SYM:
+ case EXTEND_SYM:
+ case IDENT:
+ case VARIABLE:
+ case HASH:
+ case MEDIA_SYM:
;
break;
default:
jj_la1[94] = jj_gen;
break label_63;
}
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case INCLUDE_SYM:
+ includeDirective();
+ break;
+ case MEDIA_SYM:
+ media();
+ break;
+ case EXTEND_SYM:
+ extendDirective();
+ break;
+ case VARIABLE:
+ variable();
+ break;
+ default:
+ jj_la1[95] = jj_gen;
+ if (jj_2_3(3)) {
+ declarationOrNestedProperties();
+ } else {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case LBRACKET:
+ case ANY:
+ case PARENT:
+ case DOT:
+ case COLON:
+ case EACH_VAR:
+ case IDENT:
+ case HASH:
+ styleRule();
+ break;
+ default:
+ jj_la1[96] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+ }
+ }
+ }
+ jj_consume_token(RBRACE);
+ label_64:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[97] = jj_gen;
+ break label_64;
+ }
+ jj_consume_token(S);
+ }
+ label_65:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case ELSE_SYM:
+ ;
+ break;
+ default:
+ jj_la1[98] = jj_gen;
+ break label_65;
+ }
+ elseDirective();
+ }
+ documentHandler.endIfElseDirective();
+ }
+
+ final public void elseDirective() throws ParseException {
+ String evaluator = "";
+ Token n = null;
+ jj_consume_token(ELSE_SYM);
+ label_66:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[99] = jj_gen;
+ break label_66;
+ }
+ jj_consume_token(S);
+ }
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case IF:
+ jj_consume_token(IF);
+ label_67:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case S:
+ case EQ:
+ case PLUS:
+ case MINUS:
+ case PRECEDES:
+ case SUCCEEDS:
+ case DIV:
+ case ANY:
+ case LPARAN:
+ case RPARAN:
+ case COMPARE:
+ case OR:
+ case AND:
+ case NOT_EQ:
+ case IDENT:
+ case NUMBER:
+ case VARIABLE:
+ ;
+ break;
+ default:
+ jj_la1[100] = jj_gen;
+ break label_67;
+ }
+ n = booleanExpressionToken();
+ if(n != null) evaluator += n.image;
+ }
+ break;
+ default:
+ jj_la1[101] = jj_gen;
+ ;
+ }
+ jj_consume_token(LBRACE);
+ label_68:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[102] = jj_gen;
+ break label_68;
+ }
+ jj_consume_token(S);
+ }
+ if(!evaluator.trim().equals("")){ documentHandler.ifDirective(evaluator); }
+ else{ documentHandler.elseDirective(); }
+ label_69:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case LBRACKET:
+ case ANY:
+ case PARENT:
+ case DOT:
+ case COLON:
+ case EACH_VAR:
+ case INCLUDE_SYM:
+ case EXTEND_SYM:
+ case IDENT:
+ case VARIABLE:
+ case HASH:
+ case MEDIA_SYM:
+ ;
+ break;
+ default:
+ jj_la1[103] = jj_gen;
+ break label_69;
+ }
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case INCLUDE_SYM:
+ includeDirective();
+ break;
+ case MEDIA_SYM:
+ media();
+ break;
+ case EXTEND_SYM:
+ extendDirective();
+ break;
+ case VARIABLE:
+ variable();
+ break;
+ default:
+ jj_la1[104] = jj_gen;
+ if (jj_2_4(3)) {
+ declarationOrNestedProperties();
+ } else {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case LBRACKET:
+ case ANY:
+ case PARENT:
+ case DOT:
+ case COLON:
+ case EACH_VAR:
+ case IDENT:
+ case HASH:
+ styleRule();
+ break;
+ default:
+ jj_la1[105] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+ }
+ }
+ }
+ jj_consume_token(RBRACE);
+ label_70:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[106] = jj_gen;
+ break label_70;
+ }
+ jj_consume_token(S);
+ }
+ }
+
+ final public Token booleanExpressionToken() throws ParseException {
+ Token n = null;
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case VARIABLE:
+ n = jj_consume_token(VARIABLE);
+ break;
+ case IDENT:
+ n = jj_consume_token(IDENT);
+ break;
+ case NUMBER:
+ n = jj_consume_token(NUMBER);
+ break;
+ case LPARAN:
+ n = jj_consume_token(LPARAN);
+ break;
+ case RPARAN:
+ n = jj_consume_token(RPARAN);
+ break;
+ case PLUS:
+ n = jj_consume_token(PLUS);
+ break;
+ case MINUS:
+ n = jj_consume_token(MINUS);
+ break;
+ case DIV:
+ n = jj_consume_token(DIV);
+ break;
+ case ANY:
+ n = jj_consume_token(ANY);
+ break;
+ case COMPARE:
+ n = jj_consume_token(COMPARE);
+ break;
+ case EQ:
+ n = jj_consume_token(EQ);
+ break;
+ case PRECEDES:
+ n = jj_consume_token(PRECEDES);
+ break;
+ case SUCCEEDS:
+ n = jj_consume_token(SUCCEEDS);
+ break;
+ case OR:
+ n = jj_consume_token(OR);
+ break;
+ case AND:
+ n = jj_consume_token(AND);
+ break;
+ case S:
+ n = jj_consume_token(S);
+ break;
+ case NOT_EQ:
+ n = jj_consume_token(NOT_EQ);
+ break;
+ default:
+ jj_la1[107] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+ {if (true) return n;}
+ throw new Error("Missing return statement in function");
+ }
+
+ final public void eachDirective() throws ParseException {
+ Token var;
+ ArrayList<String> list;
+ jj_consume_token(EACH_SYM);
+ label_71:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[108] = jj_gen;
+ break label_71;
+ }
+ jj_consume_token(S);
+ }
+ var = jj_consume_token(VARIABLE);
+ label_72:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[109] = jj_gen;
+ break label_72;
+ }
+ jj_consume_token(S);
+ }
+ jj_consume_token(EACH_IN);
+ label_73:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[110] = jj_gen;
+ break label_73;
+ }
jj_consume_token(S);
}
list = stringList();
jj_consume_token(LBRACE);
- label_64:
+ label_74:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[95] = jj_gen;
- break label_64;
+ jj_la1[111] = jj_gen;
+ break label_74;
}
jj_consume_token(S);
}
documentHandler.startEachDirective(var.image, list);
- label_65:
+ label_75:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case LBRACKET:
@@ -2364,8 +2706,8 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[96] = jj_gen;
- break label_65;
+ jj_la1[112] = jj_gen;
+ break label_75;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case INCLUDE_SYM:
@@ -2381,8 +2723,8 @@ boolean isPseudoElement = false;
variable();
break;
default:
- jj_la1[97] = jj_gen;
- if (jj_2_3(3)) {
+ jj_la1[113] = jj_gen;
+ if (jj_2_5(3)) {
declarationOrNestedProperties();
} else {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2397,7 +2739,7 @@ boolean isPseudoElement = false;
styleRule();
break;
default:
- jj_la1[98] = jj_gen;
+ jj_la1[114] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2405,15 +2747,15 @@ boolean isPseudoElement = false;
}
}
jj_consume_token(RBRACE);
- label_66:
+ label_76:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[99] = jj_gen;
- break label_66;
+ jj_la1[115] = jj_gen;
+ break label_76;
}
jj_consume_token(S);
}
@@ -2424,53 +2766,53 @@ boolean isPseudoElement = false;
ArrayList<String > strings = new ArrayList<String >();
Token input;
input = jj_consume_token(IDENT);
- label_67:
+ label_77:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[100] = jj_gen;
- break label_67;
+ jj_la1[116] = jj_gen;
+ break label_77;
}
jj_consume_token(S);
}
strings.add(input.image);
- label_68:
+ label_78:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case COMMA:
;
break;
default:
- jj_la1[101] = jj_gen;
- break label_68;
+ jj_la1[117] = jj_gen;
+ break label_78;
}
jj_consume_token(COMMA);
- label_69:
+ label_79:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[102] = jj_gen;
- break label_69;
+ jj_la1[118] = jj_gen;
+ break label_79;
}
jj_consume_token(S);
}
input = jj_consume_token(IDENT);
strings.add(input.image);
- label_70:
+ label_80:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[103] = jj_gen;
- break label_70;
+ jj_la1[119] = jj_gen;
+ break label_80;
}
jj_consume_token(S);
}
@@ -2484,15 +2826,15 @@ boolean isPseudoElement = false;
ArrayList<VariableNode> args = null;
String body;
jj_consume_token(MIXIN_SYM);
- label_71:
+ label_81:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[104] = jj_gen;
- break label_71;
+ jj_la1[120] = jj_gen;
+ break label_81;
}
jj_consume_token(S);
}
@@ -2504,39 +2846,39 @@ boolean isPseudoElement = false;
name = functionName();
args = arglist();
jj_consume_token(RPARAN);
- label_72:
+ label_82:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[105] = jj_gen;
- break label_72;
+ jj_la1[121] = jj_gen;
+ break label_82;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[106] = jj_gen;
+ jj_la1[122] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
jj_consume_token(LBRACE);
- label_73:
+ label_83:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[107] = jj_gen;
- break label_73;
+ jj_la1[123] = jj_gen;
+ break label_83;
}
jj_consume_token(S);
}
documentHandler.startMixinDirective(name, args);
- label_74:
+ label_84:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case LBRACKET:
@@ -2554,8 +2896,8 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[108] = jj_gen;
- break label_74;
+ jj_la1[124] = jj_gen;
+ break label_84;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case INCLUDE_SYM:
@@ -2571,8 +2913,8 @@ boolean isPseudoElement = false;
variable();
break;
default:
- jj_la1[109] = jj_gen;
- if (jj_2_4(3)) {
+ jj_la1[125] = jj_gen;
+ if (jj_2_6(3)) {
declarationOrNestedProperties();
} else {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2587,7 +2929,7 @@ boolean isPseudoElement = false;
styleRule();
break;
default:
- jj_la1[110] = jj_gen;
+ jj_la1[126] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2595,15 +2937,15 @@ boolean isPseudoElement = false;
}
}
jj_consume_token(RBRACE);
- label_75:
+ label_85:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[111] = jj_gen;
- break label_75;
+ jj_la1[127] = jj_gen;
+ break label_85;
}
jj_consume_token(S);
}
@@ -2614,26 +2956,26 @@ boolean isPseudoElement = false;
ArrayList<VariableNode> args = new ArrayList<VariableNode>();
VariableNode arg;
arg = mixinArg();
- label_76:
+ label_86:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case COMMA:
;
break;
default:
- jj_la1[112] = jj_gen;
- break label_76;
+ jj_la1[128] = jj_gen;
+ break label_86;
}
jj_consume_token(COMMA);
- label_77:
+ label_87:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[113] = jj_gen;
- break label_77;
+ jj_la1[129] = jj_gen;
+ break label_87;
}
jj_consume_token(S);
}
@@ -2652,22 +2994,22 @@ boolean isPseudoElement = false;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case COLON:
jj_consume_token(COLON);
- label_78:
+ label_88:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[114] = jj_gen;
- break label_78;
+ jj_la1[130] = jj_gen;
+ break label_88;
}
jj_consume_token(S);
}
value = term(null);
break;
default:
- jj_la1[115] = jj_gen;
+ jj_la1[131] = jj_gen;
;
}
VariableNode arg = new VariableNode(name, value, false);
@@ -2680,26 +3022,26 @@ boolean isPseudoElement = false;
LexicalUnit argValue;
argValue = term(null);
args.add(argValue);
- label_79:
+ label_89:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case COMMA:
;
break;
default:
- jj_la1[116] = jj_gen;
- break label_79;
+ jj_la1[132] = jj_gen;
+ break label_89;
}
jj_consume_token(COMMA);
- label_80:
+ label_90:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[117] = jj_gen;
- break label_80;
+ jj_la1[133] = jj_gen;
+ break label_90;
}
jj_consume_token(S);
}
@@ -2714,15 +3056,15 @@ boolean isPseudoElement = false;
String name;
ArrayList<LexicalUnit> args=null;
jj_consume_token(INCLUDE_SYM);
- label_81:
+ label_91:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[118] = jj_gen;
- break label_81;
+ jj_la1[134] = jj_gen;
+ break label_91;
}
jj_consume_token(S);
}
@@ -2736,22 +3078,22 @@ boolean isPseudoElement = false;
jj_consume_token(RPARAN);
break;
default:
- jj_la1[119] = jj_gen;
+ jj_la1[135] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
- label_82:
+ label_92:
while (true) {
jj_consume_token(SEMICOLON);
- label_83:
+ label_93:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[120] = jj_gen;
- break label_83;
+ jj_la1[136] = jj_gen;
+ break label_93;
}
jj_consume_token(S);
}
@@ -2760,8 +3102,8 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[121] = jj_gen;
- break label_82;
+ jj_la1[137] = jj_gen;
+ break label_92;
}
}
documentHandler.includeDirective(name, args);
@@ -2775,15 +3117,15 @@ boolean isPseudoElement = false;
name = functionName();
args = skipStatementUntilRightParan();
jj_consume_token(RPARAN);
- label_84:
+ label_94:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[122] = jj_gen;
- break label_84;
+ jj_la1[138] = jj_gen;
+ break label_94;
}
jj_consume_token(S);
}
@@ -2825,20 +3167,20 @@ boolean isPseudoElement = false;
exclusive = false;
break;
default:
- jj_la1[123] = jj_gen;
+ jj_la1[139] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
to = skipStatementUntilLeftBrace();
- label_85:
+ label_95:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[124] = jj_gen;
- break label_85;
+ jj_la1[140] = jj_gen;
+ break label_95;
}
jj_consume_token(S);
}
@@ -2856,41 +3198,34 @@ boolean isPseudoElement = false;
throw new Error("Missing return statement in function");
}
- Node ifDirective() throws ParseException {
- return documentHandler.ifDirective();
- }
-
- void elseDirective() throws ParseException {
- }
-
final public void extendDirective() throws ParseException {
SelectorList list;
jj_consume_token(EXTEND_SYM);
- label_86:
+ label_96:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[125] = jj_gen;
- break label_86;
+ jj_la1[141] = jj_gen;
+ break label_96;
}
jj_consume_token(S);
}
list = selectorList();
- label_87:
+ label_97:
while (true) {
jj_consume_token(SEMICOLON);
- label_88:
+ label_98:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[126] = jj_gen;
- break label_88;
+ jj_la1[142] = jj_gen;
+ break label_98;
}
jj_consume_token(S);
}
@@ -2899,8 +3234,8 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[127] = jj_gen;
- break label_87;
+ jj_la1[143] = jj_gen;
+ break label_97;
}
}
documentHandler.extendDirective(list);
@@ -2927,28 +3262,28 @@ boolean isPseudoElement = false;
LexicalUnit exp;
name = property();
jj_consume_token(COLON);
- label_89:
+ label_99:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[128] = jj_gen;
- break label_89;
+ jj_la1[144] = jj_gen;
+ break label_99;
}
jj_consume_token(S);
}
jj_consume_token(LBRACE);
- label_90:
+ label_100:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[129] = jj_gen;
- break label_90;
+ jj_la1[145] = jj_gen;
+ break label_100;
}
jj_consume_token(S);
}
@@ -2958,29 +3293,29 @@ LexicalUnit exp;
declaration();
break;
default:
- jj_la1[130] = jj_gen;
+ jj_la1[146] = jj_gen;
;
}
- label_91:
+ label_101:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case SEMICOLON:
;
break;
default:
- jj_la1[131] = jj_gen;
- break label_91;
+ jj_la1[147] = jj_gen;
+ break label_101;
}
jj_consume_token(SEMICOLON);
- label_92:
+ label_102:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[132] = jj_gen;
- break label_92;
+ jj_la1[148] = jj_gen;
+ break label_102;
}
jj_consume_token(S);
}
@@ -2989,21 +3324,21 @@ LexicalUnit exp;
declaration();
break;
default:
- jj_la1[133] = jj_gen;
+ jj_la1[149] = jj_gen;
;
}
}
jj_consume_token(RBRACE);
documentHandler.endNestedProperties(name);
- label_93:
+ label_103:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[134] = jj_gen;
- break label_93;
+ jj_la1[150] = jj_gen;
+ break label_103;
}
jj_consume_token(S);
}
@@ -3022,15 +3357,15 @@ LexicalUnit exp;
name = property();
save = token;
jj_consume_token(COLON);
- label_94:
+ label_104:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[135] = jj_gen;
- break label_94;
+ jj_la1[151] = jj_gen;
+ break label_104;
}
jj_consume_token(S);
}
@@ -3068,7 +3403,7 @@ LexicalUnit exp;
important = prio();
break;
default:
- jj_la1[136] = jj_gen;
+ jj_la1[152] = jj_gen;
;
}
Token next = getToken(1);
@@ -3086,15 +3421,15 @@ LexicalUnit exp;
break;
case LBRACE:
jj_consume_token(LBRACE);
- label_95:
+ label_105:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[137] = jj_gen;
- break label_95;
+ jj_la1[153] = jj_gen;
+ break label_105;
}
jj_consume_token(S);
}
@@ -3104,29 +3439,29 @@ LexicalUnit exp;
declaration();
break;
default:
- jj_la1[138] = jj_gen;
+ jj_la1[154] = jj_gen;
;
}
- label_96:
+ label_106:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case SEMICOLON:
;
break;
default:
- jj_la1[139] = jj_gen;
- break label_96;
+ jj_la1[155] = jj_gen;
+ break label_106;
}
jj_consume_token(SEMICOLON);
- label_97:
+ label_107:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[140] = jj_gen;
- break label_97;
+ jj_la1[156] = jj_gen;
+ break label_107;
}
jj_consume_token(S);
}
@@ -3135,27 +3470,27 @@ LexicalUnit exp;
declaration();
break;
default:
- jj_la1[141] = jj_gen;
+ jj_la1[157] = jj_gen;
;
}
}
jj_consume_token(RBRACE);
- label_98:
+ label_108:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[142] = jj_gen;
- break label_98;
+ jj_la1[158] = jj_gen;
+ break label_108;
}
jj_consume_token(S);
}
documentHandler.endNestedProperties(name);
break;
default:
- jj_la1[143] = jj_gen;
+ jj_la1[159] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -3205,15 +3540,15 @@ LexicalUnit exp;
name = property();
save = token;
jj_consume_token(COLON);
- label_99:
+ label_109:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[144] = jj_gen;
- break label_99;
+ jj_la1[160] = jj_gen;
+ break label_109;
}
jj_consume_token(S);
}
@@ -3223,7 +3558,7 @@ LexicalUnit exp;
important = prio();
break;
default:
- jj_la1[145] = jj_gen;
+ jj_la1[161] = jj_gen;
;
}
documentHandler.property(name, exp, important);
@@ -3266,15 +3601,15 @@ LexicalUnit exp;
*/
final public boolean prio() throws ParseException {
jj_consume_token(IMPORTANT_SYM);
- label_100:
+ label_110:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[146] = jj_gen;
- break label_100;
+ jj_la1[162] = jj_gen;
+ break label_110;
}
jj_consume_token(S);
}
@@ -3284,15 +3619,15 @@ LexicalUnit exp;
final public boolean guarded() throws ParseException {
jj_consume_token(GUARDED_SYM);
- label_101:
+ label_111:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[147] = jj_gen;
- break label_101;
+ jj_la1[163] = jj_gen;
+ break label_111;
}
jj_consume_token(S);
}
@@ -3308,15 +3643,15 @@ LexicalUnit exp;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case DIV:
n = jj_consume_token(DIV);
- label_102:
+ label_112:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[148] = jj_gen;
- break label_102;
+ jj_la1[164] = jj_gen;
+ break label_112;
}
jj_consume_token(S);
}
@@ -3326,15 +3661,15 @@ LexicalUnit exp;
break;
case COMMA:
n = jj_consume_token(COMMA);
- label_103:
+ label_113:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[149] = jj_gen;
- break label_103;
+ jj_la1[165] = jj_gen;
+ break label_113;
}
jj_consume_token(S);
}
@@ -3343,7 +3678,7 @@ LexicalUnit exp;
prev);}
break;
default:
- jj_la1[150] = jj_gen;
+ jj_la1[166] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -3358,12 +3693,12 @@ LexicalUnit exp;
char op;
first = term(null);
res = first;
- label_104:
+ label_114:
while (true) {
- if (jj_2_5(2)) {
+ if (jj_2_7(2)) {
;
} else {
- break label_104;
+ break label_114;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case COMMA:
@@ -3371,7 +3706,7 @@ LexicalUnit exp;
res = operator(res);
break;
default:
- jj_la1[151] = jj_gen;
+ jj_la1[167] = jj_gen;
;
}
res = term(res);
@@ -3394,7 +3729,7 @@ LexicalUnit exp;
{if (true) return '+';}
break;
default:
- jj_la1[152] = jj_gen;
+ jj_la1[168] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -3464,7 +3799,7 @@ LexicalUnit exp;
op = unaryOperator();
break;
default:
- jj_la1[153] = jj_gen;
+ jj_la1[169] = jj_gen;
;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -3569,7 +3904,7 @@ LexicalUnit exp;
result = function(op, prev);
break;
default:
- jj_la1[154] = jj_gen;
+ jj_la1[170] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -3632,25 +3967,25 @@ LexicalUnit exp;
result = unicode(prev);
break;
default:
- jj_la1[155] = jj_gen;
+ jj_la1[171] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
break;
default:
- jj_la1[156] = jj_gen;
+ jj_la1[172] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
- label_105:
+ label_115:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[157] = jj_gen;
- break label_105;
+ jj_la1[173] = jj_gen;
+ break label_115;
}
jj_consume_token(S);
}
@@ -3661,7 +3996,7 @@ LexicalUnit exp;
prev, varName);
break;
default:
- jj_la1[158] = jj_gen;
+ jj_la1[174] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -3677,15 +4012,15 @@ LexicalUnit exp;
Token n;
LexicalUnit params = null;
n = jj_consume_token(FUNCTION);
- label_106:
+ label_116:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[159] = jj_gen;
- break label_106;
+ jj_la1[175] = jj_gen;
+ break label_116;
}
jj_consume_token(S);
}
@@ -3726,7 +4061,7 @@ LexicalUnit exp;
params = expr();
break;
default:
- jj_la1[160] = jj_gen;
+ jj_la1[176] = jj_gen;
;
}
jj_consume_token(RPARAN);
@@ -4201,15 +4536,15 @@ LexicalUnit exp;
*/
final public void _parseRule() throws ParseException {
String ret = null;
- label_107:
+ label_117:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[161] = jj_gen;
- break label_107;
+ jj_la1[177] = jj_gen;
+ break label_117;
}
jj_consume_token(S);
}
@@ -4237,7 +4572,7 @@ LexicalUnit exp;
fontFace();
break;
default:
- jj_la1[162] = jj_gen;
+ jj_la1[178] = jj_gen;
ret = skipStatement();
if ((ret == null) || (ret.length() == 0)) {
{if (true) return;}
@@ -4252,15 +4587,15 @@ LexicalUnit exp;
}
final public void _parseImportRule() throws ParseException {
- label_108:
+ label_118:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[163] = jj_gen;
- break label_108;
+ jj_la1[179] = jj_gen;
+ break label_118;
}
jj_consume_token(S);
}
@@ -4268,15 +4603,15 @@ LexicalUnit exp;
}
final public void _parseMediaRule() throws ParseException {
- label_109:
+ label_119:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[164] = jj_gen;
- break label_109;
+ jj_la1[180] = jj_gen;
+ break label_119;
}
jj_consume_token(S);
}
@@ -4284,15 +4619,15 @@ LexicalUnit exp;
}
final public void _parseDeclarationBlock() throws ParseException {
- label_110:
+ label_120:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[165] = jj_gen;
- break label_110;
+ jj_la1[181] = jj_gen;
+ break label_120;
}
jj_consume_token(S);
}
@@ -4301,29 +4636,29 @@ LexicalUnit exp;
declaration();
break;
default:
- jj_la1[166] = jj_gen;
+ jj_la1[182] = jj_gen;
;
}
- label_111:
+ label_121:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case SEMICOLON:
;
break;
default:
- jj_la1[167] = jj_gen;
- break label_111;
+ jj_la1[183] = jj_gen;
+ break label_121;
}
jj_consume_token(SEMICOLON);
- label_112:
+ label_122:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[168] = jj_gen;
- break label_112;
+ jj_la1[184] = jj_gen;
+ break label_122;
}
jj_consume_token(S);
}
@@ -4332,7 +4667,7 @@ LexicalUnit exp;
declaration();
break;
default:
- jj_la1[169] = jj_gen;
+ jj_la1[185] = jj_gen;
;
}
}
@@ -4341,15 +4676,15 @@ LexicalUnit exp;
final public SelectorList _parseSelectors() throws ParseException {
SelectorList p = null;
try {
- label_113:
+ label_123:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
;
break;
default:
- jj_la1[170] = jj_gen;
- break label_113;
+ jj_la1[186] = jj_gen;
+ break label_123;
}
jj_consume_token(S);
}
@@ -4396,135 +4731,121 @@ LexicalUnit exp;
finally { jj_save(4, xla); }
}
- private boolean jj_3R_180() {
- if (jj_scan_token(UNICODERANGE)) return true;
- return false;
- }
-
- private boolean jj_3R_185() {
- if (jj_3R_133()) return true;
- return false;
- }
-
- private boolean jj_3R_177() {
- if (jj_scan_token(FUNCTION)) return true;
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
- }
- xsp = jj_scanpos;
- if (jj_3R_185()) jj_scanpos = xsp;
- if (jj_scan_token(RPARAN)) return true;
- return false;
+ private boolean jj_2_6(int xla) {
+ jj_la = xla; jj_lastpos = jj_scanpos = token;
+ try { return !jj_3_6(); }
+ catch(LookaheadSuccess ls) { return true; }
+ finally { jj_save(5, xla); }
}
- private boolean jj_3R_132() {
- if (jj_3R_144()) return true;
- return false;
+ private boolean jj_2_7(int xla) {
+ jj_la = xla; jj_lastpos = jj_scanpos = token;
+ try { return !jj_3_7(); }
+ catch(LookaheadSuccess ls) { return true; }
+ finally { jj_save(6, xla); }
}
- private boolean jj_3R_129() {
- if (jj_3R_139()) return true;
+ private boolean jj_3R_181() {
+ if (jj_scan_token(IDENT)) return true;
return false;
}
- private boolean jj_3R_174() {
- if (jj_3R_180()) return true;
+ private boolean jj_3R_180() {
+ if (jj_scan_token(STRING)) return true;
return false;
}
- private boolean jj_3R_128() {
- if (jj_3R_138()) return true;
+ private boolean jj_3R_179() {
+ if (jj_3R_187()) return true;
return false;
}
- private boolean jj_3R_173() {
- if (jj_3R_179()) return true;
+ private boolean jj_3R_153() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_180()) {
+ jj_scanpos = xsp;
+ if (jj_3R_181()) {
+ jj_scanpos = xsp;
+ if (jj_3R_182()) {
+ jj_scanpos = xsp;
+ if (jj_3R_183()) {
+ jj_scanpos = xsp;
+ if (jj_3R_184()) return true;
+ }
+ }
+ }
+ }
return false;
}
- private boolean jj_3R_172() {
- if (jj_3R_178()) return true;
+ private boolean jj_3_1() {
+ if (jj_3R_124()) return true;
return false;
}
- private boolean jj_3R_127() {
- if (jj_3R_137()) return true;
+ private boolean jj_3R_139() {
+ if (jj_3R_149()) return true;
return false;
}
- private boolean jj_3R_126() {
- if (jj_3R_136()) return true;
+ private boolean jj_3R_138() {
+ if (jj_3R_148()) return true;
return false;
}
- private boolean jj_3R_125() {
- if (jj_3R_135()) return true;
+ private boolean jj_3R_137() {
+ if (jj_3R_147()) return true;
return false;
}
private boolean jj_3R_136() {
- if (jj_scan_token(HASH)) return true;
+ if (jj_3R_146()) return true;
return false;
}
- private boolean jj_3R_116() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_125()) {
- jj_scanpos = xsp;
- if (jj_3R_126()) {
- jj_scanpos = xsp;
- if (jj_3R_127()) {
- jj_scanpos = xsp;
- if (jj_3R_128()) {
- jj_scanpos = xsp;
- if (jj_3R_129()) return true;
- }
- }
- }
- }
+ private boolean jj_3R_178() {
+ if (jj_scan_token(DIMEN)) return true;
return false;
}
- private boolean jj_3_1() {
- if (jj_3R_114()) return true;
+ private boolean jj_3_5() {
+ if (jj_3R_124()) return true;
return false;
}
- private boolean jj_3R_171() {
- if (jj_scan_token(IDENT)) return true;
+ private boolean jj_3R_177() {
+ if (jj_scan_token(KHZ)) return true;
return false;
}
- private boolean jj_3_4() {
- if (jj_3R_114()) return true;
+ private boolean jj_3R_135() {
+ if (jj_3R_145()) return true;
return false;
}
- private boolean jj_3R_170() {
- if (jj_scan_token(STRING)) return true;
+ private boolean jj_3R_146() {
+ if (jj_scan_token(HASH)) return true;
return false;
}
- private boolean jj_3R_169() {
- if (jj_3R_177()) return true;
+ private boolean jj_3R_176() {
+ if (jj_scan_token(HZ)) return true;
return false;
}
- private boolean jj_3R_143() {
+ private boolean jj_3R_126() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_170()) {
+ if (jj_3R_135()) {
jj_scanpos = xsp;
- if (jj_3R_171()) {
+ if (jj_3R_136()) {
jj_scanpos = xsp;
- if (jj_3R_172()) {
+ if (jj_3R_137()) {
jj_scanpos = xsp;
- if (jj_3R_173()) {
+ if (jj_3R_138()) {
jj_scanpos = xsp;
- if (jj_3R_174()) return true;
+ if (jj_3R_139()) return true;
}
}
}
@@ -4532,114 +4853,84 @@ LexicalUnit exp;
return false;
}
- private boolean jj_3_2() {
- if (jj_3R_115()) return true;
- if (jj_3R_116()) return true;
- return false;
- }
-
- private boolean jj_3R_138() {
- if (jj_scan_token(COLON)) return true;
- return false;
- }
-
- private boolean jj_3R_168() {
- if (jj_scan_token(DIMEN)) return true;
- return false;
- }
-
- private boolean jj_3R_167() {
- if (jj_scan_token(KHZ)) return true;
- return false;
- }
-
- private boolean jj_3R_166() {
- if (jj_scan_token(HZ)) return true;
- return false;
- }
-
- private boolean jj_3R_165() {
+ private boolean jj_3R_175() {
if (jj_scan_token(MS)) return true;
return false;
}
- private boolean jj_3R_164() {
+ private boolean jj_3R_174() {
if (jj_scan_token(SECOND)) return true;
return false;
}
- private boolean jj_3_3() {
- if (jj_3R_114()) return true;
- return false;
- }
-
- private boolean jj_3R_163() {
+ private boolean jj_3R_173() {
if (jj_scan_token(GRAD)) return true;
return false;
}
- private boolean jj_3R_162() {
+ private boolean jj_3R_172() {
if (jj_scan_token(RAD)) return true;
return false;
}
- private boolean jj_3R_121() {
+ private boolean jj_3R_131() {
if (jj_scan_token(LBRACE)) return true;
return false;
}
- private boolean jj_3R_161() {
+ private boolean jj_3R_171() {
if (jj_scan_token(DEG)) return true;
return false;
}
- private boolean jj_3R_160() {
+ private boolean jj_3R_170() {
if (jj_scan_token(EXS)) return true;
return false;
}
- private boolean jj_3R_159() {
+ private boolean jj_3R_169() {
if (jj_scan_token(EMS)) return true;
return false;
}
- private boolean jj_3R_158() {
+ private boolean jj_3R_168() {
if (jj_scan_token(PX)) return true;
return false;
}
- private boolean jj_3R_157() {
+ private boolean jj_3R_167() {
if (jj_scan_token(IN)) return true;
return false;
}
- private boolean jj_3R_120() {
- if (jj_3R_133()) return true;
+ private boolean jj_3R_130() {
+ if (jj_3R_143()) return true;
return false;
}
- private boolean jj_3R_156() {
+ private boolean jj_3R_166() {
if (jj_scan_token(PC)) return true;
return false;
}
- private boolean jj_3R_155() {
+ private boolean jj_3R_165() {
if (jj_scan_token(MM)) return true;
return false;
}
- private boolean jj_3R_182() {
- if (jj_scan_token(EACH_VAR)) return true;
+ private boolean jj_3_2() {
+ if (jj_3R_125()) return true;
+ if (jj_3R_126()) return true;
return false;
}
- private boolean jj_3R_154() {
+ private boolean jj_3R_164() {
if (jj_scan_token(CM)) return true;
return false;
}
- private boolean jj_3R_114() {
- if (jj_3R_119()) return true;
+ private boolean jj_3R_124() {
+ if (jj_3R_129()) return true;
if (jj_scan_token(COLON)) return true;
Token xsp;
while (true) {
@@ -4647,80 +4938,85 @@ LexicalUnit exp;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
xsp = jj_scanpos;
- if (jj_3R_120()) {
+ if (jj_3R_130()) {
jj_scanpos = xsp;
- if (jj_3R_121()) return true;
+ if (jj_3R_131()) return true;
}
return false;
}
- private boolean jj_3R_153() {
+ private boolean jj_3R_163() {
if (jj_scan_token(PT)) return true;
return false;
}
- private boolean jj_3R_152() {
+ private boolean jj_3_4() {
+ if (jj_3R_124()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_162() {
if (jj_scan_token(PERCENTAGE)) return true;
return false;
}
- private boolean jj_3R_150() {
- if (jj_3R_176()) return true;
+ private boolean jj_3R_148() {
+ if (jj_scan_token(COLON)) return true;
return false;
}
- private boolean jj_3R_139() {
- if (jj_scan_token(LBRACKET)) return true;
+ private boolean jj_3R_160() {
+ if (jj_3R_186()) return true;
return false;
}
- private boolean jj_3R_151() {
+ private boolean jj_3R_161() {
if (jj_scan_token(NUMBER)) return true;
return false;
}
- private boolean jj_3R_142() {
+ private boolean jj_3R_152() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_150()) jj_scanpos = xsp;
+ if (jj_3R_160()) jj_scanpos = xsp;
xsp = jj_scanpos;
- if (jj_3R_151()) {
+ if (jj_3R_161()) {
jj_scanpos = xsp;
- if (jj_3R_152()) {
+ if (jj_3R_162()) {
jj_scanpos = xsp;
- if (jj_3R_153()) {
+ if (jj_3R_163()) {
jj_scanpos = xsp;
- if (jj_3R_154()) {
+ if (jj_3R_164()) {
jj_scanpos = xsp;
- if (jj_3R_155()) {
+ if (jj_3R_165()) {
jj_scanpos = xsp;
- if (jj_3R_156()) {
+ if (jj_3R_166()) {
jj_scanpos = xsp;
- if (jj_3R_157()) {
+ if (jj_3R_167()) {
jj_scanpos = xsp;
- if (jj_3R_158()) {
+ if (jj_3R_168()) {
jj_scanpos = xsp;
- if (jj_3R_159()) {
+ if (jj_3R_169()) {
jj_scanpos = xsp;
- if (jj_3R_160()) {
+ if (jj_3R_170()) {
jj_scanpos = xsp;
- if (jj_3R_161()) {
+ if (jj_3R_171()) {
jj_scanpos = xsp;
- if (jj_3R_162()) {
+ if (jj_3R_172()) {
jj_scanpos = xsp;
- if (jj_3R_163()) {
+ if (jj_3R_173()) {
jj_scanpos = xsp;
- if (jj_3R_164()) {
+ if (jj_3R_174()) {
jj_scanpos = xsp;
- if (jj_3R_165()) {
+ if (jj_3R_175()) {
jj_scanpos = xsp;
- if (jj_3R_166()) {
+ if (jj_3R_176()) {
jj_scanpos = xsp;
- if (jj_3R_167()) {
+ if (jj_3R_177()) {
jj_scanpos = xsp;
- if (jj_3R_168()) {
+ if (jj_3R_178()) {
jj_scanpos = xsp;
- if (jj_3R_169()) return true;
+ if (jj_3R_179()) return true;
}
}
}
@@ -4742,12 +5038,12 @@ LexicalUnit exp;
return false;
}
- private boolean jj_3R_131() {
+ private boolean jj_3R_141() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_142()) {
+ if (jj_3R_152()) {
jj_scanpos = xsp;
- if (jj_3R_143()) return true;
+ if (jj_3R_153()) return true;
}
while (true) {
xsp = jj_scanpos;
@@ -4756,48 +5052,76 @@ LexicalUnit exp;
return false;
}
- private boolean jj_3R_118() {
+ private boolean jj_3R_128() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_131()) {
+ if (jj_3R_141()) {
jj_scanpos = xsp;
- if (jj_3R_132()) return true;
+ if (jj_3R_142()) return true;
}
return false;
}
- private boolean jj_3R_149() {
- if (jj_scan_token(PARENT)) return true;
+ private boolean jj_3R_188() {
+ if (jj_scan_token(HASH)) return true;
return false;
}
- private boolean jj_3R_148() {
- if (jj_scan_token(ANY)) return true;
+ private boolean jj_3R_127() {
+ if (jj_3R_140()) return true;
return false;
}
- private boolean jj_3R_117() {
- if (jj_3R_130()) return true;
+ private boolean jj_3_3() {
+ if (jj_3R_124()) return true;
return false;
}
- private boolean jj_3R_178() {
- if (jj_scan_token(HASH)) return true;
+ private boolean jj_3R_194() {
+ if (jj_scan_token(PLUS)) return true;
return false;
}
- private boolean jj_3R_119() {
- if (jj_scan_token(IDENT)) return true;
+ private boolean jj_3R_193() {
+ if (jj_scan_token(MINUS)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_186() {
Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ xsp = jj_scanpos;
+ if (jj_3R_193()) {
+ jj_scanpos = xsp;
+ if (jj_3R_194()) return true;
}
return false;
}
- private boolean jj_3R_144() {
- if (jj_scan_token(VARIABLE)) return true;
+ private boolean jj_3_7() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_127()) jj_scanpos = xsp;
+ if (jj_3R_128()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_189() {
+ if (jj_scan_token(URL)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_143() {
+ if (jj_3R_128()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_192() {
+ if (jj_scan_token(EACH_VAR)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_151() {
+ if (jj_scan_token(COMMA)) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
@@ -4806,103 +5130,153 @@ LexicalUnit exp;
return false;
}
- private boolean jj_3R_181() {
- if (jj_scan_token(IDENT)) return true;
+ private boolean jj_3R_150() {
+ if (jj_scan_token(DIV)) return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
return false;
}
- private boolean jj_3R_175() {
+ private boolean jj_3R_140() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_181()) {
+ if (jj_3R_150()) {
jj_scanpos = xsp;
- if (jj_3R_182()) return true;
+ if (jj_3R_151()) return true;
}
return false;
}
- private boolean jj_3R_184() {
- if (jj_scan_token(PLUS)) return true;
+ private boolean jj_3R_149() {
+ if (jj_scan_token(LBRACKET)) return true;
return false;
}
- private boolean jj_3R_135() {
+ private boolean jj_3R_190() {
+ if (jj_scan_token(UNICODERANGE)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_195() {
+ if (jj_3R_143()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_159() {
+ if (jj_scan_token(PARENT)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_158() {
+ if (jj_scan_token(ANY)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_129() {
+ if (jj_scan_token(IDENT)) return true;
Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_147()) {
- jj_scanpos = xsp;
- if (jj_3R_148()) {
- jj_scanpos = xsp;
- if (jj_3R_149()) return true;
- }
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_147() {
+ private boolean jj_3R_154() {
+ if (jj_scan_token(VARIABLE)) return true;
Token xsp;
- if (jj_3R_175()) return true;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_175()) { jj_scanpos = xsp; break; }
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_183() {
- if (jj_scan_token(MINUS)) return true;
+ private boolean jj_3R_191() {
+ if (jj_scan_token(IDENT)) return true;
return false;
}
- private boolean jj_3R_176() {
+ private boolean jj_3R_185() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_183()) {
+ if (jj_3R_191()) {
jj_scanpos = xsp;
- if (jj_3R_184()) return true;
+ if (jj_3R_192()) return true;
}
return false;
}
- private boolean jj_3R_146() {
- if (jj_scan_token(PRECEDES)) return true;
+ private boolean jj_3R_187() {
+ if (jj_scan_token(FUNCTION)) return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
+ xsp = jj_scanpos;
+ if (jj_3R_195()) jj_scanpos = xsp;
+ if (jj_scan_token(RPARAN)) return true;
return false;
}
private boolean jj_3R_145() {
- if (jj_scan_token(PLUS)) return true;
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_157()) {
+ jj_scanpos = xsp;
+ if (jj_3R_158()) {
+ jj_scanpos = xsp;
+ if (jj_3R_159()) return true;
+ }
+ }
return false;
}
- private boolean jj_3_5() {
+ private boolean jj_3R_157() {
Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_117()) jj_scanpos = xsp;
- if (jj_3R_118()) return true;
+ if (jj_3R_185()) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_185()) { jj_scanpos = xsp; break; }
+ }
return false;
}
- private boolean jj_3R_134() {
+ private boolean jj_3R_156() {
+ if (jj_scan_token(PRECEDES)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_155() {
+ if (jj_scan_token(PLUS)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_144() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_145()) {
+ if (jj_3R_155()) {
jj_scanpos = xsp;
- if (jj_3R_146()) return true;
+ if (jj_3R_156()) return true;
}
return false;
}
- private boolean jj_3R_179() {
- if (jj_scan_token(URL)) return true;
+ private boolean jj_3R_142() {
+ if (jj_3R_154()) return true;
return false;
}
- private boolean jj_3R_133() {
- if (jj_3R_118()) return true;
+ private boolean jj_3R_184() {
+ if (jj_3R_190()) return true;
return false;
}
- private boolean jj_3R_123() {
+ private boolean jj_3R_133() {
if (jj_scan_token(PRECEDES)) return true;
Token xsp;
while (true) {
@@ -4912,44 +5286,39 @@ LexicalUnit exp;
return false;
}
- private boolean jj_3R_115() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_122()) {
- jj_scanpos = xsp;
- if (jj_3R_123()) {
- jj_scanpos = xsp;
- if (jj_3R_124()) return true;
- }
- }
+ private boolean jj_3R_183() {
+ if (jj_3R_189()) return true;
return false;
}
- private boolean jj_3R_122() {
- if (jj_scan_token(PLUS)) return true;
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
- }
+ private boolean jj_3R_182() {
+ if (jj_3R_188()) return true;
return false;
}
- private boolean jj_3R_124() {
+ private boolean jj_3R_134() {
if (jj_scan_token(S)) return true;
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_134()) jj_scanpos = xsp;
+ if (jj_3R_144()) jj_scanpos = xsp;
return false;
}
- private boolean jj_3R_137() {
- if (jj_scan_token(DOT)) return true;
+ private boolean jj_3R_125() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_132()) {
+ jj_scanpos = xsp;
+ if (jj_3R_133()) {
+ jj_scanpos = xsp;
+ if (jj_3R_134()) return true;
+ }
+ }
return false;
}
- private boolean jj_3R_141() {
- if (jj_scan_token(COMMA)) return true;
+ private boolean jj_3R_132() {
+ if (jj_scan_token(PLUS)) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
@@ -4958,23 +5327,13 @@ LexicalUnit exp;
return false;
}
- private boolean jj_3R_140() {
- if (jj_scan_token(DIV)) return true;
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
- }
+ private boolean jj_3R_147() {
+ if (jj_scan_token(DOT)) return true;
return false;
}
- private boolean jj_3R_130() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_140()) {
- jj_scanpos = xsp;
- if (jj_3R_141()) return true;
- }
+ private boolean jj_3_6() {
+ if (jj_3R_124()) return true;
return false;
}
@@ -4988,7 +5347,7 @@ LexicalUnit exp;
private Token jj_scanpos, jj_lastpos;
private int jj_la;
private int jj_gen;
- final private int[] jj_la1 = new int[171];
+ final private int[] jj_la1 = new int[187];
static private int[] jj_la1_0;
static private int[] jj_la1_1;
static private int[] jj_la1_2;
@@ -5000,18 +5359,18 @@ LexicalUnit exp;
jj_la1_init_3();
}
private static void jj_la1_init_0() {
- jj_la1_0 = new int[] {0x0,0xc02,0xc02,0x0,0xc00,0x2,0x2,0x2,0xce800000,0xc00,0x2,0xc00,0x2,0x0,0x2,0x0,0x2,0x2,0x2,0xcebed400,0xcebed400,0x2,0x80000,0x2,0x2,0x2,0x2,0x0,0x40000000,0x2,0x0,0x100000,0x2,0x0,0x2,0x2,0x2,0x2,0x0,0x100000,0x2,0x0,0x2,0x3ed400,0x2,0x2,0x220000,0x2,0x220000,0x220002,0x2,0x2,0x2,0x2,0xce800000,0x0,0xce800000,0x2,0x80000,0x2,0x2,0x48800000,0x48800000,0x48800000,0x48800000,0x48800000,0x48800000,0x48800000,0x48800000,0x48800000,0x48800000,0xce800000,0x80000000,0x80000000,0x80000000,0x80000000,0x86000000,0x2,0x2,0x1c000,0x2,0x0,0x2,0x1c000,0x40000000,0x2,0x2,0x0,0x2,0x0,0x2,0x100000,0x2,0x2,0x2,0x2,0xce800000,0x0,0xce800000,0x2,0x2,0x80000,0x2,0x2,0x2,0x2,0x0,0x2,0xce800000,0x0,0xce800000,0x2,0x80000,0x2,0x2,0x40000000,0x80000,0x2,0x2,0x0,0x2,0x100000,0x2,0x0,0x2,0x2,0x2,0x100000,0x2,0x2,0x0,0x100000,0x2,0x0,0x2,0x2,0x0,0x2,0x0,0x100000,0x2,0x0,0x2,0x61000,0x2,0x0,0x2,0x2,0x2,0x2,0x480000,0x480000,0x60000,0x60000,0x0,0x0,0x60000,0x2,0x60000,0x2,0x60000,0x2,0xce800000,0x2,0x2,0x2,0x0,0x100000,0x2,0x0,0x2,};
+ jj_la1_0 = new int[] {0x0,0xc02,0xc02,0x0,0xc00,0x2,0x2,0x2,0x1d000000,0xc00,0x2,0xc00,0x2,0x0,0x2,0x0,0x2,0x2,0x2,0x1d3ed400,0x1d3ed400,0x2,0x80000,0x2,0x2,0x2,0x2,0x0,0x0,0x2,0x0,0x100000,0x2,0x0,0x2,0x2,0x2,0x2,0x0,0x100000,0x2,0x0,0x2,0x3ed400,0x2,0x2,0x220000,0x2,0x220000,0x220002,0x2,0x2,0x2,0x2,0x1d000000,0x0,0x1d000000,0x2,0x80000,0x2,0x2,0x11000000,0x11000000,0x11000000,0x11000000,0x11000000,0x11000000,0x11000000,0x11000000,0x11000000,0x11000000,0x1d000000,0x0,0x0,0x0,0x0,0xc000000,0x2,0x2,0x1c000,0x2,0x0,0x2,0x1c000,0x0,0x2,0x2,0x0,0x2,0x0,0x2,0x100000,0xe4e70002,0x2,0x1d000000,0x0,0x1d000000,0x2,0x0,0x2,0xe4e70002,0x0,0x2,0x1d000000,0x0,0x1d000000,0x2,0xe4e70002,0x2,0x2,0x2,0x2,0x1d000000,0x0,0x1d000000,0x2,0x2,0x80000,0x2,0x2,0x2,0x2,0x0,0x2,0x1d000000,0x0,0x1d000000,0x2,0x80000,0x2,0x2,0x0,0x80000,0x2,0x2,0x0,0x2,0x100000,0x2,0x0,0x2,0x2,0x2,0x100000,0x2,0x2,0x0,0x100000,0x2,0x0,0x2,0x2,0x0,0x2,0x0,0x100000,0x2,0x0,0x2,0x61000,0x2,0x0,0x2,0x2,0x2,0x2,0x880000,0x880000,0x60000,0x60000,0x0,0x0,0x60000,0x2,0x60000,0x2,0x60000,0x2,0x1d000000,0x2,0x2,0x2,0x0,0x100000,0x2,0x0,0x2,};
}
private static void jj_la1_init_1() {
- jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10083000,0x0,0x0,0x0,0x0,0x88000000,0x0,0x10000000,0x0,0x0,0x0,0xb8000001,0xb8000001,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0x0,0x0,0x10000000,0x0,0x0,0x10000000,0x0,0x0,0x0,0x0,0x10000000,0x0,0x0,0x10000000,0x0,0xa8000001,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10882000,0x882000,0x10000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x0,0x0,0x0,0x0,0x18000000,0x0,0x0,0x0,0x0,0x0,0x10000000,0x0,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x10802000,0x802000,0x10000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0x0,0x10802000,0x802000,0x10000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0x0,0x0,0x0,0x600,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0x0,0x0,0x10000000,0x0,0x0,0x0,0x0,0x10000000,0x0,0x0,0x10000000,0x0,0xb8000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000000,0x98000000,0xb8000000,0x0,0xb8000000,0x0,0xb8000000,0x0,0x10000000,0x0,0x0,0x0,0x10000000,0x0,0x0,0x10000000,0x0,};
+ jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1060018,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x15040018,0x15040000,0x18,0x0,0x0,0x0,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x18,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x10040018,0x10040000,0x18,0x0,0x8000000,0x0,0x7,0x80000000,0x0,0x10040018,0x10040000,0x18,0x0,0x7,0x0,0x0,0x0,0x0,0x10040018,0x10040000,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10040018,0x10040000,0x18,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
}
private static void jj_la1_init_2() {
- jj_la1_2 = new int[] {0x200000,0x1000000,0x1000000,0x80000,0x1000000,0x0,0x0,0x0,0xd40001,0x1000000,0x0,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3fc0002,0x3fc0002,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f80002,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x140001,0x100001,0x40000,0x0,0x0,0x0,0x0,0x40000,0x40000,0x0,0x0,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x140001,0x100001,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x140001,0x100001,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2000000,0x0,0x0,0x0,0x0,0x0,0x0,0x7ffff,0x0,0x2000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3fffe,0x40000,0x7fffe,0x0,0x7ffff,0x0,0x7ffff,0x0,0xdc0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+ jj_la1_2 = new int[] {0x8000000,0x40000000,0x40000000,0x2000000,0x40000000,0x0,0x0,0x0,0x35000044,0x40000000,0x0,0x40000000,0x0,0x22,0x0,0x4,0x0,0x0,0x0,0xff0000ae,0xff0000ae,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x4,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x4,0x0,0xfe0000aa,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5000044,0x4000040,0x1000004,0x0,0x0,0x0,0x0,0x1000000,0x1000000,0x0,0x0,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000,0x1000004,0x4,0x4,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x1,0x0,0x0,0x4c,0x0,0x5000044,0x4000040,0x1000004,0x0,0x0,0x0,0x4c,0x0,0x0,0x5000044,0x4000040,0x1000004,0x0,0x4c,0x0,0x0,0x0,0x0,0x5000044,0x4000040,0x1000004,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x5000044,0x4000040,0x1000004,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x4,0x0,0x0,0x80000000,0x0,0x4,0x0,0x0,0x4,0x0,0x1ffffee,0x0,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffff88,0x1000026,0x1ffffae,0x0,0x1ffffee,0x0,0x1ffffee,0x0,0x37000004,0x0,0x0,0x0,0x4,0x0,0x0,0x4,0x0,};
}
private static void jj_la1_init_3() {
- jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x8,0x18,0x0,0x18,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+ jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe00,0xe00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x600,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400,0x200,0x600,0x0,0x600,0x0,0x600,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
}
- final private JJCalls[] jj_2_rtns = new JJCalls[5];
+ final private JJCalls[] jj_2_rtns = new JJCalls[7];
private boolean jj_rescan = false;
private int jj_gc = 0;
@@ -5021,7 +5380,7 @@ LexicalUnit exp;
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 171; i++) jj_la1[i] = -1;
+ for (int i = 0; i < 187; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -5031,7 +5390,7 @@ LexicalUnit exp;
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 171; i++) jj_la1[i] = -1;
+ for (int i = 0; i < 187; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -5041,7 +5400,7 @@ LexicalUnit exp;
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 171; i++) jj_la1[i] = -1;
+ for (int i = 0; i < 187; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -5051,7 +5410,7 @@ LexicalUnit exp;
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 171; i++) jj_la1[i] = -1;
+ for (int i = 0; i < 187; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -5163,12 +5522,12 @@ LexicalUnit exp;
/** Generate ParseException. */
public ParseException generateParseException() {
jj_expentries.clear();
- boolean[] la1tokens = new boolean[102];
+ boolean[] la1tokens = new boolean[108];
if (jj_kind >= 0) {
la1tokens[jj_kind] = true;
jj_kind = -1;
}
- for (int i = 0; i < 171; i++) {
+ for (int i = 0; i < 187; i++) {
if (jj_la1[i] == jj_gen) {
for (int j = 0; j < 32; j++) {
if ((jj_la1_0[i] & (1<<j)) != 0) {
@@ -5186,7 +5545,7 @@ LexicalUnit exp;
}
}
}
- for (int i = 0; i < 102; i++) {
+ for (int i = 0; i < 108; i++) {
if (la1tokens[i]) {
jj_expentry = new int[1];
jj_expentry[0] = i;
@@ -5213,7 +5572,7 @@ LexicalUnit exp;
private void jj_rescan_token() {
jj_rescan = true;
- for (int i = 0; i < 5; i++) {
+ for (int i = 0; i < 7; i++) {
try {
JJCalls p = jj_2_rtns[i];
do {
@@ -5225,6 +5584,8 @@ LexicalUnit exp;
case 2: jj_3_3(); break;
case 3: jj_3_4(); break;
case 4: jj_3_5(); break;
+ case 5: jj_3_6(); break;
+ case 6: jj_3_7(); break;
}
}
p = p.next;
diff --git a/theme-compiler/src/com/vaadin/sass/parser/Parser.jj b/theme-compiler/src/com/vaadin/sass/parser/Parser.jj
index 717094a763..f126f8e343 100644
--- a/theme-compiler/src/com/vaadin/sass/parser/Parser.jj
+++ b/theme-compiler/src/com/vaadin/sass/parser/Parser.jj
@@ -504,6 +504,7 @@ TOKEN :
| < COMMA : "," >
| < SEMICOLON : ";" >
| < PRECEDES : ">" >
+ | < SUCCEEDS : "<" >
| < DIV : "/" >
| < LBRACKET : "[" >
| < RBRACKET : "]" >
@@ -512,6 +513,10 @@ TOKEN :
| < DOT : "." >
| < LPARAN : "(" >
| < RPARAN : ")">
+ | < COMPARE : "==" >
+ | < OR : "||" >
+ | < AND : "&&" >
+ | < NOT_EQ : "!=" >
}
<DEFAULT>
@@ -545,7 +550,6 @@ TOKEN : /* basic tokens */
| < #NAME : ( <NMCHAR> )+ >
}
-
<DEFAULT>
TOKEN :
{
@@ -574,6 +578,11 @@ TOKEN :
| <SUPPORTS_SYM : "@supports">
}
+< DEFAULT >
+TOKEN:
+{
+ < IF : "if" > }
+
<DEFAULT>
TOKEN:
{
@@ -1008,7 +1017,7 @@ void styleRule() :
start = true;
documentHandler.startSelector(l);
}
- ( includeDirective() | media() | extendDirective()| eachDirective() | variable() | LOOKAHEAD(3) declarationOrNestedProperties() | styleRule())*
+ ( ifDirective() | includeDirective() | media() | extendDirective()| eachDirective() | variable() | LOOKAHEAD(3) declarationOrNestedProperties() | styleRule())*
<RBRACE> (<S>)*
} catch (ThrowedParseException e) {
if (errorHandler != null) {
@@ -1343,6 +1352,56 @@ void variable() :
}
}
+void ifDirective() :
+{
+ Token n = null;
+ String evaluator = "";
+}
+{
+ < IF_SYM >
+ ( n = booleanExpressionToken() { evaluator += n.image; } )+ < LBRACE >(< S >)* { documentHandler.startIfElseDirective();
+ documentHandler.ifDirective(evaluator);
+ }
+ ( includeDirective() | media() | extendDirective()| variable() | LOOKAHEAD(3) declarationOrNestedProperties() | styleRule())*
+ < RBRACE >(< S >)*
+ (elseDirective())*
+ { documentHandler.endIfElseDirective(); }
+}
+
+void elseDirective() : {
+ String evaluator = "";
+ Token n = null; }
+{
+ < ELSE_SYM >(< S >)*
+ ( < IF > (n = booleanExpressionToken() { if(n != null) evaluator += n.image; })*)?
+ < LBRACE >(< S >)*
+ { if(!evaluator.trim().equals("")){ documentHandler.ifDirective(evaluator); }
+ else{ documentHandler.elseDirective(); } } ( includeDirective() | media() | extendDirective()| variable() | LOOKAHEAD(3) declarationOrNestedProperties() | styleRule())* < RBRACE >(< S >)*
+}
+
+Token booleanExpressionToken() : {
+ Token n = null; }
+{ ( n = < VARIABLE >
+ |n = < IDENT >
+ |n = < NUMBER >
+ |n = < LPARAN >
+ |n = < RPARAN >
+ |n = < PLUS >
+ |n = < MINUS >
+ |n = < DIV >
+ |n = < ANY >
+ |n = < COMPARE >
+ |n = < EQ >
+ |n = < PRECEDES >
+ |n = < SUCCEEDS >
+ |n = < OR >
+ |n = < AND >
+ |n = < S >
+ |n = < NOT_EQ >
+){
+ return n; }
+}
+
void eachDirective() :
{
Token var;
@@ -1513,16 +1572,6 @@ Node whileDirective() :
{ return documentHandler.whileDirective(condition, body);}
}
-JAVACODE
-Node ifDirective(){
- return documentHandler.ifDirective();
-}
-
-JAVACODE
-void elseDirective(){
- // throw new ParseException("Invalid CSS: @else must come after @if");
-}
-
void extendDirective() :
{SelectorList list;}
{
diff --git a/theme-compiler/src/com/vaadin/sass/parser/ParserConstants.java b/theme-compiler/src/com/vaadin/sass/parser/ParserConstants.java
index 41fb8ca030..6e6c0ae204 100644
--- a/theme-compiler/src/com/vaadin/sass/parser/ParserConstants.java
+++ b/theme-compiler/src/com/vaadin/sass/parser/ParserConstants.java
@@ -41,165 +41,177 @@ public interface ParserConstants {
/** RegularExpression Id. */
int PRECEDES = 21;
/** RegularExpression Id. */
- int DIV = 22;
+ int SUCCEEDS = 22;
/** RegularExpression Id. */
- int LBRACKET = 23;
+ int DIV = 23;
/** RegularExpression Id. */
- int RBRACKET = 24;
+ int LBRACKET = 24;
/** RegularExpression Id. */
- int ANY = 25;
+ int RBRACKET = 25;
/** RegularExpression Id. */
- int PARENT = 26;
+ int ANY = 26;
/** RegularExpression Id. */
- int DOT = 27;
+ int PARENT = 27;
/** RegularExpression Id. */
- int LPARAN = 28;
+ int DOT = 28;
/** RegularExpression Id. */
- int RPARAN = 29;
+ int LPARAN = 29;
/** RegularExpression Id. */
- int COLON = 30;
+ int RPARAN = 30;
/** RegularExpression Id. */
- int EACH_VAR = 31;
+ int COMPARE = 31;
/** RegularExpression Id. */
- int NONASCII = 32;
+ int OR = 32;
/** RegularExpression Id. */
- int H = 33;
+ int AND = 33;
/** RegularExpression Id. */
- int UNICODE = 34;
+ int NOT_EQ = 34;
/** RegularExpression Id. */
- int ESCAPE = 35;
+ int COLON = 35;
/** RegularExpression Id. */
- int NMSTART = 36;
+ int EACH_VAR = 36;
/** RegularExpression Id. */
- int NMCHAR = 37;
+ int NONASCII = 37;
/** RegularExpression Id. */
- int STRINGCHAR = 38;
+ int H = 38;
/** RegularExpression Id. */
- int D = 39;
+ int UNICODE = 39;
/** RegularExpression Id. */
- int NAME = 40;
+ int ESCAPE = 40;
/** RegularExpression Id. */
- int TO = 41;
+ int NMSTART = 41;
/** RegularExpression Id. */
- int THROUGH = 42;
+ int NMCHAR = 42;
/** RegularExpression Id. */
- int EACH_IN = 43;
+ int STRINGCHAR = 43;
/** RegularExpression Id. */
- int MIXIN_SYM = 44;
+ int D = 44;
/** RegularExpression Id. */
- int INCLUDE_SYM = 45;
+ int NAME = 45;
/** RegularExpression Id. */
- int FUNCTION_SYM = 46;
+ int TO = 46;
/** RegularExpression Id. */
- int RETURN_SYM = 47;
+ int THROUGH = 47;
/** RegularExpression Id. */
- int DEBUG_SYM = 48;
+ int EACH_IN = 48;
/** RegularExpression Id. */
- int WARN_SYM = 49;
+ int MIXIN_SYM = 49;
/** RegularExpression Id. */
- int FOR_SYM = 50;
+ int INCLUDE_SYM = 50;
/** RegularExpression Id. */
- int EACH_SYM = 51;
+ int FUNCTION_SYM = 51;
/** RegularExpression Id. */
- int WHILE_SYM = 52;
+ int RETURN_SYM = 52;
/** RegularExpression Id. */
- int IF_SYM = 53;
+ int DEBUG_SYM = 53;
/** RegularExpression Id. */
- int ELSE_SYM = 54;
+ int WARN_SYM = 54;
/** RegularExpression Id. */
- int EXTEND_SYM = 55;
+ int FOR_SYM = 55;
/** RegularExpression Id. */
- int MOZ_DOCUMENT_SYM = 56;
+ int EACH_SYM = 56;
/** RegularExpression Id. */
- int SUPPORTS_SYM = 57;
+ int WHILE_SYM = 57;
/** RegularExpression Id. */
- int GUARDED_SYM = 58;
+ int IF_SYM = 58;
/** RegularExpression Id. */
- int STRING = 59;
+ int ELSE_SYM = 59;
/** RegularExpression Id. */
- int IDENT = 60;
+ int EXTEND_SYM = 60;
/** RegularExpression Id. */
- int NUMBER = 61;
+ int MOZ_DOCUMENT_SYM = 61;
/** RegularExpression Id. */
- int _URL = 62;
+ int SUPPORTS_SYM = 62;
/** RegularExpression Id. */
- int URL = 63;
+ int IF = 63;
/** RegularExpression Id. */
- int VARIABLE = 64;
+ int GUARDED_SYM = 64;
/** RegularExpression Id. */
- int PERCENTAGE = 65;
+ int STRING = 65;
/** RegularExpression Id. */
- int PT = 66;
+ int IDENT = 66;
/** RegularExpression Id. */
- int MM = 67;
+ int NUMBER = 67;
/** RegularExpression Id. */
- int CM = 68;
+ int _URL = 68;
/** RegularExpression Id. */
- int PC = 69;
+ int URL = 69;
/** RegularExpression Id. */
- int IN = 70;
+ int VARIABLE = 70;
/** RegularExpression Id. */
- int PX = 71;
+ int PERCENTAGE = 71;
/** RegularExpression Id. */
- int EMS = 72;
+ int PT = 72;
/** RegularExpression Id. */
- int EXS = 73;
+ int MM = 73;
/** RegularExpression Id. */
- int DEG = 74;
+ int CM = 74;
/** RegularExpression Id. */
- int RAD = 75;
+ int PC = 75;
/** RegularExpression Id. */
- int GRAD = 76;
+ int IN = 76;
/** RegularExpression Id. */
- int MS = 77;
+ int PX = 77;
/** RegularExpression Id. */
- int SECOND = 78;
+ int EMS = 78;
/** RegularExpression Id. */
- int HZ = 79;
+ int EXS = 79;
/** RegularExpression Id. */
- int KHZ = 80;
+ int DEG = 80;
/** RegularExpression Id. */
- int DIMEN = 81;
+ int RAD = 81;
/** RegularExpression Id. */
- int HASH = 82;
+ int GRAD = 82;
/** RegularExpression Id. */
- int IMPORT_SYM = 83;
+ int MS = 83;
/** RegularExpression Id. */
- int MEDIA_SYM = 84;
+ int SECOND = 84;
/** RegularExpression Id. */
- int CHARSET_SYM = 85;
+ int HZ = 85;
/** RegularExpression Id. */
- int PAGE_SYM = 86;
+ int KHZ = 86;
/** RegularExpression Id. */
- int FONT_FACE_SYM = 87;
+ int DIMEN = 87;
/** RegularExpression Id. */
- int ATKEYWORD = 88;
+ int HASH = 88;
/** RegularExpression Id. */
- int IMPORTANT_SYM = 89;
+ int IMPORT_SYM = 89;
/** RegularExpression Id. */
- int RANGE0 = 90;
+ int MEDIA_SYM = 90;
/** RegularExpression Id. */
- int RANGE1 = 91;
+ int CHARSET_SYM = 91;
/** RegularExpression Id. */
- int RANGE2 = 92;
+ int PAGE_SYM = 92;
/** RegularExpression Id. */
- int RANGE3 = 93;
+ int FONT_FACE_SYM = 93;
/** RegularExpression Id. */
- int RANGE4 = 94;
+ int ATKEYWORD = 94;
/** RegularExpression Id. */
- int RANGE5 = 95;
+ int IMPORTANT_SYM = 95;
/** RegularExpression Id. */
- int RANGE6 = 96;
+ int RANGE0 = 96;
/** RegularExpression Id. */
- int RANGE = 97;
+ int RANGE1 = 97;
/** RegularExpression Id. */
- int UNI = 98;
+ int RANGE2 = 98;
/** RegularExpression Id. */
- int UNICODERANGE = 99;
+ int RANGE3 = 99;
/** RegularExpression Id. */
- int FUNCTION = 100;
+ int RANGE4 = 100;
/** RegularExpression Id. */
- int UNKNOWN = 101;
+ int RANGE5 = 101;
+ /** RegularExpression Id. */
+ int RANGE6 = 102;
+ /** RegularExpression Id. */
+ int RANGE = 103;
+ /** RegularExpression Id. */
+ int UNI = 104;
+ /** RegularExpression Id. */
+ int UNICODERANGE = 105;
+ /** RegularExpression Id. */
+ int FUNCTION = 106;
+ /** RegularExpression Id. */
+ int UNKNOWN = 107;
/** Lexical state. */
int DEFAULT = 0;
@@ -234,6 +246,7 @@ public interface ParserConstants {
"\",\"",
"\";\"",
"\">\"",
+ "\"<\"",
"\"/\"",
"\"[\"",
"\"]\"",
@@ -242,6 +255,10 @@ public interface ParserConstants {
"\".\"",
"\"(\"",
"\")\"",
+ "\"==\"",
+ "\"||\"",
+ "\"&&\"",
+ "\"!=\"",
"\":\"",
"<EACH_VAR>",
"<NONASCII>",
@@ -270,6 +287,7 @@ public interface ParserConstants {
"\"@extend\"",
"\"@-moz-document\"",
"\"@supports\"",
+ "\"if\"",
"<GUARDED_SYM>",
"<STRING>",
"<IDENT>",
diff --git a/theme-compiler/src/com/vaadin/sass/parser/ParserTokenManager.java b/theme-compiler/src/com/vaadin/sass/parser/ParserTokenManager.java
index 7c176f2262..a878acadec 100644
--- a/theme-compiler/src/com/vaadin/sass/parser/ParserTokenManager.java
+++ b/theme-compiler/src/com/vaadin/sass/parser/ParserTokenManager.java
@@ -37,168 +37,170 @@ private final int jjStopStringLiteralDfa_0(int pos, long active0, long active1)
switch (pos)
{
case 0:
- if ((active0 & 0x8000000L) != 0L)
+ if ((active0 & 0x10000000L) != 0L)
return 400;
if ((active0 & 0x40800L) != 0L)
return 159;
- if ((active0 & 0x3fff00000000000L) != 0L || (active1 & 0xf80000L) != 0L)
+ if ((active0 & 0x7ffe000000000000L) != 0L || (active1 & 0x3e000000L) != 0L)
return 96;
- if ((active0 & 0x400044L) != 0L)
- return 3;
- if ((active0 & 0xe0000000000L) != 0L)
+ if ((active0 & 0x8001c00000000000L) != 0L)
{
- jjmatchedKind = 60;
+ jjmatchedKind = 66;
return 401;
}
+ if ((active0 & 0x400000000L) != 0L)
+ return 402;
+ if ((active0 & 0x800044L) != 0L)
+ return 3;
return -1;
case 1:
- if ((active0 & 0x100000000000000L) != 0L)
- return 97;
- if ((active0 & 0x40000000000L) != 0L)
+ if ((active0 & 0x800000000000L) != 0L)
{
- jjmatchedKind = 60;
+ jjmatchedKind = 66;
jjmatchedPos = 1;
return 401;
}
- if ((active0 & 0xa0000000000L) != 0L)
- return 401;
- if ((active0 & 0x40L) != 0L)
- return 1;
- if ((active0 & 0x2fff00000000000L) != 0L || (active1 & 0xf80000L) != 0L)
+ if ((active0 & 0x2000000000000000L) != 0L)
+ return 97;
+ if ((active0 & 0x5ffe000000000000L) != 0L || (active1 & 0x3e000000L) != 0L)
{
- jjmatchedKind = 88;
+ jjmatchedKind = 94;
jjmatchedPos = 1;
- return 402;
+ return 403;
}
+ if ((active0 & 0x8001400000000000L) != 0L)
+ return 401;
+ if ((active0 & 0x40L) != 0L)
+ return 1;
return -1;
case 2:
- if ((active0 & 0x20000000000000L) != 0L)
- return 402;
- if ((active0 & 0x3dff00000000000L) != 0L || (active1 & 0xf80000L) != 0L)
+ if ((active0 & 0x400000000000000L) != 0L)
+ return 403;
+ if ((active0 & 0x7bfe000000000000L) != 0L || (active1 & 0x3e000000L) != 0L)
{
- jjmatchedKind = 88;
+ jjmatchedKind = 94;
jjmatchedPos = 2;
- return 402;
+ return 403;
}
- if ((active0 & 0x40000000000L) != 0L)
+ if ((active0 & 0x800000000000L) != 0L)
{
- jjmatchedKind = 60;
+ jjmatchedKind = 66;
jjmatchedPos = 2;
return 401;
}
return -1;
case 3:
- if ((active0 & 0x4000000000000L) != 0L)
- return 402;
- if ((active0 & 0x3dbf00000000000L) != 0L || (active1 & 0xf80000L) != 0L)
+ if ((active0 & 0x80000000000000L) != 0L)
+ return 403;
+ if ((active0 & 0x800000000000L) != 0L)
{
- jjmatchedKind = 88;
+ jjmatchedKind = 66;
jjmatchedPos = 3;
- return 402;
+ return 401;
}
- if ((active0 & 0x40000000000L) != 0L)
+ if ((active0 & 0x7b7e000000000000L) != 0L || (active1 & 0x3e000000L) != 0L)
{
- jjmatchedKind = 60;
+ jjmatchedKind = 94;
jjmatchedPos = 3;
- return 401;
+ return 403;
}
return -1;
case 4:
- if ((active0 & 0x4a000000000000L) != 0L || (active1 & 0x400000L) != 0L)
- return 402;
- if ((active0 & 0x391f00000000000L) != 0L || (active1 & 0xb80000L) != 0L)
+ if ((active0 & 0x940000000000000L) != 0L || (active1 & 0x10000000L) != 0L)
+ return 403;
+ if ((active0 & 0x723e000000000000L) != 0L || (active1 & 0x2e000000L) != 0L)
{
- jjmatchedKind = 88;
+ jjmatchedKind = 94;
jjmatchedPos = 4;
- return 402;
+ return 403;
}
- if ((active0 & 0x40000000000L) != 0L)
+ if ((active0 & 0x800000000000L) != 0L)
{
- jjmatchedKind = 60;
+ jjmatchedKind = 66;
jjmatchedPos = 4;
return 401;
}
return -1;
case 5:
- if ((active0 & 0x11100000000000L) != 0L || (active1 & 0x100000L) != 0L)
- return 402;
- if ((active0 & 0x40000000000L) != 0L)
+ if ((active0 & 0x222000000000000L) != 0L || (active1 & 0x4000000L) != 0L)
+ return 403;
+ if ((active0 & 0x800000000000L) != 0L)
{
- jjmatchedKind = 60;
+ jjmatchedKind = 66;
jjmatchedPos = 5;
return 401;
}
- if ((active0 & 0x380e00000000000L) != 0L || (active1 & 0xa80000L) != 0L)
+ if ((active0 & 0x701c000000000000L) != 0L || (active1 & 0x2a000000L) != 0L)
{
- jjmatchedKind = 88;
+ jjmatchedKind = 94;
jjmatchedPos = 5;
- return 402;
+ return 403;
}
return -1;
case 6:
- if ((active0 & 0x80800000000000L) != 0L || (active1 & 0x80000L) != 0L)
- return 402;
- if ((active0 & 0x300600000000000L) != 0L || (active1 & 0xa00000L) != 0L)
+ if ((active0 & 0x1010000000000000L) != 0L || (active1 & 0x2000000L) != 0L)
+ return 403;
+ if ((active0 & 0x800000000000L) != 0L)
+ return 401;
+ if ((active0 & 0x600c000000000000L) != 0L || (active1 & 0x28000000L) != 0L)
{
- jjmatchedKind = 88;
+ jjmatchedKind = 94;
jjmatchedPos = 6;
- return 402;
+ return 403;
}
- if ((active0 & 0x40000000000L) != 0L)
- return 401;
return -1;
case 7:
- if ((active0 & 0x200000000000L) != 0L || (active1 & 0x200000L) != 0L)
- return 402;
- if ((active0 & 0x300400000000000L) != 0L || (active1 & 0x800000L) != 0L)
+ if ((active0 & 0x4000000000000L) != 0L || (active1 & 0x8000000L) != 0L)
+ return 403;
+ if ((active0 & 0x6008000000000000L) != 0L || (active1 & 0x20000000L) != 0L)
{
- jjmatchedKind = 88;
+ jjmatchedKind = 94;
jjmatchedPos = 7;
- return 402;
+ return 403;
}
return -1;
case 8:
- if ((active0 & 0x200400000000000L) != 0L)
- return 402;
- if ((active0 & 0x100000000000000L) != 0L || (active1 & 0x800000L) != 0L)
+ if ((active0 & 0x4008000000000000L) != 0L)
+ return 403;
+ if ((active0 & 0x2000000000000000L) != 0L || (active1 & 0x20000000L) != 0L)
{
- jjmatchedKind = 88;
+ jjmatchedKind = 94;
jjmatchedPos = 8;
- return 402;
+ return 403;
}
return -1;
case 9:
- if ((active1 & 0x800000L) != 0L)
- return 402;
- if ((active0 & 0x100000000000000L) != 0L)
+ if ((active1 & 0x20000000L) != 0L)
+ return 403;
+ if ((active0 & 0x2000000000000000L) != 0L)
{
- jjmatchedKind = 88;
+ jjmatchedKind = 94;
jjmatchedPos = 9;
- return 402;
+ return 403;
}
return -1;
case 10:
- if ((active0 & 0x100000000000000L) != 0L)
+ if ((active0 & 0x2000000000000000L) != 0L)
{
- jjmatchedKind = 88;
+ jjmatchedKind = 94;
jjmatchedPos = 10;
- return 402;
+ return 403;
}
return -1;
case 11:
- if ((active0 & 0x100000000000000L) != 0L)
+ if ((active0 & 0x2000000000000000L) != 0L)
{
- jjmatchedKind = 88;
+ jjmatchedKind = 94;
jjmatchedPos = 11;
- return 402;
+ return 403;
}
return -1;
case 12:
- if ((active0 & 0x100000000000000L) != 0L)
+ if ((active0 & 0x2000000000000000L) != 0L)
{
- jjmatchedKind = 88;
+ jjmatchedKind = 94;
jjmatchedPos = 12;
- return 402;
+ return 403;
}
return -1;
default :
@@ -219,14 +221,17 @@ private int jjMoveStringLiteralDfa0_0()
{
switch(curChar)
{
+ case 33:
+ return jjMoveStringLiteralDfa1_0(0x400000000L, 0x0L);
case 38:
- return jjStopAtPos(0, 26);
+ jjmatchedKind = 27;
+ return jjMoveStringLiteralDfa1_0(0x200000000L, 0x0L);
case 40:
- return jjStopAtPos(0, 28);
- case 41:
return jjStopAtPos(0, 29);
+ case 41:
+ return jjStopAtPos(0, 30);
case 42:
- return jjStopAtPos(0, 25);
+ return jjStopAtPos(0, 26);
case 43:
return jjStopAtPos(0, 17);
case 44:
@@ -235,36 +240,38 @@ private int jjMoveStringLiteralDfa0_0()
jjmatchedKind = 18;
return jjMoveStringLiteralDfa1_0(0x800L, 0x0L);
case 46:
- return jjStartNfaWithStates_0(0, 27, 400);
+ return jjStartNfaWithStates_0(0, 28, 400);
case 47:
- jjmatchedKind = 22;
+ jjmatchedKind = 23;
return jjMoveStringLiteralDfa1_0(0x44L, 0x0L);
case 58:
- return jjStopAtPos(0, 30);
+ return jjStopAtPos(0, 35);
case 59:
return jjStopAtPos(0, 20);
case 60:
+ jjmatchedKind = 22;
return jjMoveStringLiteralDfa1_0(0x400L, 0x0L);
case 61:
- return jjStopAtPos(0, 16);
+ jjmatchedKind = 16;
+ return jjMoveStringLiteralDfa1_0(0x80000000L, 0x0L);
case 62:
return jjStopAtPos(0, 21);
case 64:
- return jjMoveStringLiteralDfa1_0(0x3fff00000000000L, 0xf80000L);
+ return jjMoveStringLiteralDfa1_0(0x7ffe000000000000L, 0x3e000000L);
case 91:
- return jjStopAtPos(0, 23);
- case 93:
return jjStopAtPos(0, 24);
+ case 93:
+ return jjStopAtPos(0, 25);
case 73:
case 105:
- return jjMoveStringLiteralDfa1_0(0x80000000000L, 0x0L);
+ return jjMoveStringLiteralDfa1_0(0x8001000000000000L, 0x0L);
case 84:
case 116:
- return jjMoveStringLiteralDfa1_0(0x60000000000L, 0x0L);
+ return jjMoveStringLiteralDfa1_0(0xc00000000000L, 0x0L);
case 123:
return jjStopAtPos(0, 12);
case 124:
- return jjMoveStringLiteralDfa1_0(0x4000L, 0x0L);
+ return jjMoveStringLiteralDfa1_0(0x100004000L, 0x0L);
case 125:
return jjStopAtPos(0, 13);
case 126:
@@ -284,12 +291,16 @@ private int jjMoveStringLiteralDfa1_0(long active0, long active1)
{
case 33:
return jjMoveStringLiteralDfa2_0(active0, 0x400L, active1, 0L);
+ case 38:
+ if ((active0 & 0x200000000L) != 0L)
+ return jjStopAtPos(1, 33);
+ break;
case 42:
if ((active0 & 0x40L) != 0L)
return jjStartNfaWithStates_0(1, 6, 1);
break;
case 45:
- return jjMoveStringLiteralDfa2_0(active0, 0x100000000000800L, active1, 0L);
+ return jjMoveStringLiteralDfa2_0(active0, 0x2000000000000800L, active1, 0L);
case 47:
if ((active0 & 0x4L) != 0L)
return jjStopAtPos(1, 2);
@@ -299,50 +310,60 @@ private int jjMoveStringLiteralDfa1_0(long active0, long active1)
return jjStopAtPos(1, 14);
else if ((active0 & 0x8000L) != 0L)
return jjStopAtPos(1, 15);
+ else if ((active0 & 0x80000000L) != 0L)
+ return jjStopAtPos(1, 31);
+ else if ((active0 & 0x400000000L) != 0L)
+ return jjStopAtPos(1, 34);
break;
case 67:
case 99:
- return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x200000L);
+ return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x8000000L);
case 68:
case 100:
- return jjMoveStringLiteralDfa2_0(active0, 0x1000000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa2_0(active0, 0x20000000000000L, active1, 0L);
case 69:
case 101:
- return jjMoveStringLiteralDfa2_0(active0, 0xc8000000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa2_0(active0, 0x1900000000000000L, active1, 0L);
case 70:
case 102:
- return jjMoveStringLiteralDfa2_0(active0, 0x4400000000000L, active1, 0x800000L);
+ if ((active0 & 0x8000000000000000L) != 0L)
+ return jjStartNfaWithStates_0(1, 63, 401);
+ return jjMoveStringLiteralDfa2_0(active0, 0x88000000000000L, active1, 0x20000000L);
case 72:
case 104:
- return jjMoveStringLiteralDfa2_0(active0, 0x40000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa2_0(active0, 0x800000000000L, active1, 0L);
case 73:
case 105:
- return jjMoveStringLiteralDfa2_0(active0, 0x20200000000000L, active1, 0x80000L);
+ return jjMoveStringLiteralDfa2_0(active0, 0x404000000000000L, active1, 0x2000000L);
case 77:
case 109:
- return jjMoveStringLiteralDfa2_0(active0, 0x100000000000L, active1, 0x100000L);
+ return jjMoveStringLiteralDfa2_0(active0, 0x2000000000000L, active1, 0x4000000L);
case 78:
case 110:
- if ((active0 & 0x80000000000L) != 0L)
- return jjStartNfaWithStates_0(1, 43, 401);
+ if ((active0 & 0x1000000000000L) != 0L)
+ return jjStartNfaWithStates_0(1, 48, 401);
break;
case 79:
case 111:
- if ((active0 & 0x20000000000L) != 0L)
- return jjStartNfaWithStates_0(1, 41, 401);
+ if ((active0 & 0x400000000000L) != 0L)
+ return jjStartNfaWithStates_0(1, 46, 401);
break;
case 80:
case 112:
- return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x400000L);
+ return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x10000000L);
case 82:
case 114:
- return jjMoveStringLiteralDfa2_0(active0, 0x800000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa2_0(active0, 0x10000000000000L, active1, 0L);
case 83:
case 115:
- return jjMoveStringLiteralDfa2_0(active0, 0x200000000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa2_0(active0, 0x4000000000000000L, active1, 0L);
case 87:
case 119:
- return jjMoveStringLiteralDfa2_0(active0, 0x12000000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa2_0(active0, 0x240000000000000L, active1, 0L);
+ case 124:
+ if ((active0 & 0x100000000L) != 0L)
+ return jjStopAtPos(1, 32);
+ break;
default :
break;
}
@@ -367,42 +388,42 @@ private int jjMoveStringLiteralDfa2_0(long old0, long active0, long old1, long a
break;
case 65:
case 97:
- return jjMoveStringLiteralDfa3_0(active0, 0xa000000000000L, active1, 0x400000L);
+ return jjMoveStringLiteralDfa3_0(active0, 0x140000000000000L, active1, 0x10000000L);
case 69:
case 101:
- return jjMoveStringLiteralDfa3_0(active0, 0x1800000000000L, active1, 0x100000L);
+ return jjMoveStringLiteralDfa3_0(active0, 0x30000000000000L, active1, 0x4000000L);
case 70:
case 102:
- if ((active0 & 0x20000000000000L) != 0L)
- return jjStartNfaWithStates_0(2, 53, 402);
+ if ((active0 & 0x400000000000000L) != 0L)
+ return jjStartNfaWithStates_0(2, 58, 403);
break;
case 72:
case 104:
- return jjMoveStringLiteralDfa3_0(active0, 0x10000000000000L, active1, 0x200000L);
+ return jjMoveStringLiteralDfa3_0(active0, 0x200000000000000L, active1, 0x8000000L);
case 73:
case 105:
- return jjMoveStringLiteralDfa3_0(active0, 0x100000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa3_0(active0, 0x2000000000000L, active1, 0L);
case 76:
case 108:
- return jjMoveStringLiteralDfa3_0(active0, 0x40000000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa3_0(active0, 0x800000000000000L, active1, 0L);
case 77:
case 109:
- return jjMoveStringLiteralDfa3_0(active0, 0x100000000000000L, active1, 0x80000L);
+ return jjMoveStringLiteralDfa3_0(active0, 0x2000000000000000L, active1, 0x2000000L);
case 78:
case 110:
- return jjMoveStringLiteralDfa3_0(active0, 0x200000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa3_0(active0, 0x4000000000000L, active1, 0L);
case 79:
case 111:
- return jjMoveStringLiteralDfa3_0(active0, 0x4000000000000L, active1, 0x800000L);
+ return jjMoveStringLiteralDfa3_0(active0, 0x80000000000000L, active1, 0x20000000L);
case 82:
case 114:
- return jjMoveStringLiteralDfa3_0(active0, 0x40000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa3_0(active0, 0x800000000000L, active1, 0L);
case 85:
case 117:
- return jjMoveStringLiteralDfa3_0(active0, 0x200400000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa3_0(active0, 0x4008000000000000L, active1, 0L);
case 88:
case 120:
- return jjMoveStringLiteralDfa3_0(active0, 0x80000000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa3_0(active0, 0x1000000000000000L, active1, 0L);
default :
break;
}
@@ -425,45 +446,45 @@ private int jjMoveStringLiteralDfa3_0(long old0, long active0, long old1, long a
break;
case 65:
case 97:
- return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x200000L);
+ return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x8000000L);
case 66:
case 98:
- return jjMoveStringLiteralDfa4_0(active0, 0x1000000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa4_0(active0, 0x20000000000000L, active1, 0L);
case 67:
case 99:
- return jjMoveStringLiteralDfa4_0(active0, 0x8200000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa4_0(active0, 0x104000000000000L, active1, 0L);
case 68:
case 100:
- return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x100000L);
+ return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x4000000L);
case 71:
case 103:
- return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x400000L);
+ return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x10000000L);
case 73:
case 105:
- return jjMoveStringLiteralDfa4_0(active0, 0x10000000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa4_0(active0, 0x200000000000000L, active1, 0L);
case 78:
case 110:
- return jjMoveStringLiteralDfa4_0(active0, 0x400000000000L, active1, 0x800000L);
+ return jjMoveStringLiteralDfa4_0(active0, 0x8000000000000L, active1, 0x20000000L);
case 79:
case 111:
- return jjMoveStringLiteralDfa4_0(active0, 0x100040000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa4_0(active0, 0x2000800000000000L, active1, 0L);
case 80:
case 112:
- return jjMoveStringLiteralDfa4_0(active0, 0x200000000000000L, active1, 0x80000L);
+ return jjMoveStringLiteralDfa4_0(active0, 0x4000000000000000L, active1, 0x2000000L);
case 82:
case 114:
- if ((active0 & 0x4000000000000L) != 0L)
- return jjStartNfaWithStates_0(3, 50, 402);
- return jjMoveStringLiteralDfa4_0(active0, 0x2000000000000L, active1, 0L);
+ if ((active0 & 0x80000000000000L) != 0L)
+ return jjStartNfaWithStates_0(3, 55, 403);
+ return jjMoveStringLiteralDfa4_0(active0, 0x40000000000000L, active1, 0L);
case 83:
case 115:
- return jjMoveStringLiteralDfa4_0(active0, 0x40000000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa4_0(active0, 0x800000000000000L, active1, 0L);
case 84:
case 116:
- return jjMoveStringLiteralDfa4_0(active0, 0x80800000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa4_0(active0, 0x1010000000000000L, active1, 0L);
case 88:
case 120:
- return jjMoveStringLiteralDfa4_0(active0, 0x100000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa4_0(active0, 0x2000000000000L, active1, 0L);
default :
break;
}
@@ -482,48 +503,48 @@ private int jjMoveStringLiteralDfa4_0(long old0, long active0, long old1, long a
{
case 67:
case 99:
- return jjMoveStringLiteralDfa5_0(active0, 0x400000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa5_0(active0, 0x8000000000000L, active1, 0L);
case 69:
case 101:
- if ((active0 & 0x40000000000000L) != 0L)
- return jjStartNfaWithStates_0(4, 54, 402);
- else if ((active1 & 0x400000L) != 0L)
- return jjStartNfaWithStates_0(4, 86, 402);
- return jjMoveStringLiteralDfa5_0(active0, 0x80000000000000L, active1, 0L);
+ if ((active0 & 0x800000000000000L) != 0L)
+ return jjStartNfaWithStates_0(4, 59, 403);
+ else if ((active1 & 0x10000000L) != 0L)
+ return jjStartNfaWithStates_0(4, 92, 403);
+ return jjMoveStringLiteralDfa5_0(active0, 0x1000000000000000L, active1, 0L);
case 72:
case 104:
- if ((active0 & 0x8000000000000L) != 0L)
- return jjStartNfaWithStates_0(4, 51, 402);
+ if ((active0 & 0x100000000000000L) != 0L)
+ return jjStartNfaWithStates_0(4, 56, 403);
break;
case 73:
case 105:
- return jjMoveStringLiteralDfa5_0(active0, 0x100000000000L, active1, 0x100000L);
+ return jjMoveStringLiteralDfa5_0(active0, 0x2000000000000L, active1, 0x4000000L);
case 76:
case 108:
- return jjMoveStringLiteralDfa5_0(active0, 0x10200000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa5_0(active0, 0x204000000000000L, active1, 0L);
case 78:
case 110:
- if ((active0 & 0x2000000000000L) != 0L)
- return jjStartNfaWithStates_0(4, 49, 402);
+ if ((active0 & 0x40000000000000L) != 0L)
+ return jjStartNfaWithStates_0(4, 54, 403);
break;
case 79:
case 111:
- return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x80000L);
+ return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x2000000L);
case 80:
case 112:
- return jjMoveStringLiteralDfa5_0(active0, 0x200000000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa5_0(active0, 0x4000000000000000L, active1, 0L);
case 82:
case 114:
- return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x200000L);
+ return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8000000L);
case 84:
case 116:
- return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x800000L);
+ return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x20000000L);
case 85:
case 117:
- return jjMoveStringLiteralDfa5_0(active0, 0x1840000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa5_0(active0, 0x30800000000000L, active1, 0L);
case 90:
case 122:
- return jjMoveStringLiteralDfa5_0(active0, 0x100000000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa5_0(active0, 0x2000000000000000L, active1, 0L);
default :
break;
}
@@ -541,42 +562,42 @@ private int jjMoveStringLiteralDfa5_0(long old0, long active0, long old1, long a
switch(curChar)
{
case 45:
- return jjMoveStringLiteralDfa6_0(active0, 0x100000000000000L, active1, 0x800000L);
+ return jjMoveStringLiteralDfa6_0(active0, 0x2000000000000000L, active1, 0x20000000L);
case 65:
case 97:
- if ((active1 & 0x100000L) != 0L)
- return jjStartNfaWithStates_0(5, 84, 402);
+ if ((active1 & 0x4000000L) != 0L)
+ return jjStartNfaWithStates_0(5, 90, 403);
break;
case 69:
case 101:
- if ((active0 & 0x10000000000000L) != 0L)
- return jjStartNfaWithStates_0(5, 52, 402);
+ if ((active0 & 0x200000000000000L) != 0L)
+ return jjStartNfaWithStates_0(5, 57, 403);
break;
case 71:
case 103:
- if ((active0 & 0x1000000000000L) != 0L)
- return jjStartNfaWithStates_0(5, 48, 402);
- return jjMoveStringLiteralDfa6_0(active0, 0x40000000000L, active1, 0L);
+ if ((active0 & 0x20000000000000L) != 0L)
+ return jjStartNfaWithStates_0(5, 53, 403);
+ return jjMoveStringLiteralDfa6_0(active0, 0x800000000000L, active1, 0L);
case 78:
case 110:
- if ((active0 & 0x100000000000L) != 0L)
- return jjStartNfaWithStates_0(5, 44, 402);
- return jjMoveStringLiteralDfa6_0(active0, 0x80000000000000L, active1, 0L);
+ if ((active0 & 0x2000000000000L) != 0L)
+ return jjStartNfaWithStates_0(5, 49, 403);
+ return jjMoveStringLiteralDfa6_0(active0, 0x1000000000000000L, active1, 0L);
case 79:
case 111:
- return jjMoveStringLiteralDfa6_0(active0, 0x200000000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa6_0(active0, 0x4000000000000000L, active1, 0L);
case 82:
case 114:
- return jjMoveStringLiteralDfa6_0(active0, 0x800000000000L, active1, 0x80000L);
+ return jjMoveStringLiteralDfa6_0(active0, 0x10000000000000L, active1, 0x2000000L);
case 83:
case 115:
- return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x200000L);
+ return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x8000000L);
case 84:
case 116:
- return jjMoveStringLiteralDfa6_0(active0, 0x400000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa6_0(active0, 0x8000000000000L, active1, 0L);
case 85:
case 117:
- return jjMoveStringLiteralDfa6_0(active0, 0x200000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa6_0(active0, 0x4000000000000L, active1, 0L);
default :
break;
}
@@ -595,35 +616,35 @@ private int jjMoveStringLiteralDfa6_0(long old0, long active0, long old1, long a
{
case 68:
case 100:
- if ((active0 & 0x80000000000000L) != 0L)
- return jjStartNfaWithStates_0(6, 55, 402);
- return jjMoveStringLiteralDfa7_0(active0, 0x100200000000000L, active1, 0L);
+ if ((active0 & 0x1000000000000000L) != 0L)
+ return jjStartNfaWithStates_0(6, 60, 403);
+ return jjMoveStringLiteralDfa7_0(active0, 0x2004000000000000L, active1, 0L);
case 69:
case 101:
- return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x200000L);
+ return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x8000000L);
case 70:
case 102:
- return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x800000L);
+ return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x20000000L);
case 72:
case 104:
- if ((active0 & 0x40000000000L) != 0L)
- return jjStartNfaWithStates_0(6, 42, 401);
+ if ((active0 & 0x800000000000L) != 0L)
+ return jjStartNfaWithStates_0(6, 47, 401);
break;
case 73:
case 105:
- return jjMoveStringLiteralDfa7_0(active0, 0x400000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa7_0(active0, 0x8000000000000L, active1, 0L);
case 78:
case 110:
- if ((active0 & 0x800000000000L) != 0L)
- return jjStartNfaWithStates_0(6, 47, 402);
+ if ((active0 & 0x10000000000000L) != 0L)
+ return jjStartNfaWithStates_0(6, 52, 403);
break;
case 82:
case 114:
- return jjMoveStringLiteralDfa7_0(active0, 0x200000000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa7_0(active0, 0x4000000000000000L, active1, 0L);
case 84:
case 116:
- if ((active1 & 0x80000L) != 0L)
- return jjStartNfaWithStates_0(6, 83, 402);
+ if ((active1 & 0x2000000L) != 0L)
+ return jjStartNfaWithStates_0(6, 89, 403);
break;
default :
break;
@@ -643,20 +664,20 @@ private int jjMoveStringLiteralDfa7_0(long old0, long active0, long old1, long a
{
case 65:
case 97:
- return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x800000L);
+ return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x20000000L);
case 69:
case 101:
- if ((active0 & 0x200000000000L) != 0L)
- return jjStartNfaWithStates_0(7, 45, 402);
+ if ((active0 & 0x4000000000000L) != 0L)
+ return jjStartNfaWithStates_0(7, 50, 403);
break;
case 79:
case 111:
- return jjMoveStringLiteralDfa8_0(active0, 0x100400000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa8_0(active0, 0x2008000000000000L, active1, 0L);
case 84:
case 116:
- if ((active1 & 0x200000L) != 0L)
- return jjStartNfaWithStates_0(7, 85, 402);
- return jjMoveStringLiteralDfa8_0(active0, 0x200000000000000L, active1, 0L);
+ if ((active1 & 0x8000000L) != 0L)
+ return jjStartNfaWithStates_0(7, 91, 403);
+ return jjMoveStringLiteralDfa8_0(active0, 0x4000000000000000L, active1, 0L);
default :
break;
}
@@ -675,16 +696,16 @@ private int jjMoveStringLiteralDfa8_0(long old0, long active0, long old1, long a
{
case 67:
case 99:
- return jjMoveStringLiteralDfa9_0(active0, 0x100000000000000L, active1, 0x800000L);
+ return jjMoveStringLiteralDfa9_0(active0, 0x2000000000000000L, active1, 0x20000000L);
case 78:
case 110:
- if ((active0 & 0x400000000000L) != 0L)
- return jjStartNfaWithStates_0(8, 46, 402);
+ if ((active0 & 0x8000000000000L) != 0L)
+ return jjStartNfaWithStates_0(8, 51, 403);
break;
case 83:
case 115:
- if ((active0 & 0x200000000000000L) != 0L)
- return jjStartNfaWithStates_0(8, 57, 402);
+ if ((active0 & 0x4000000000000000L) != 0L)
+ return jjStartNfaWithStates_0(8, 62, 403);
break;
default :
break;
@@ -704,12 +725,12 @@ private int jjMoveStringLiteralDfa9_0(long old0, long active0, long old1, long a
{
case 69:
case 101:
- if ((active1 & 0x800000L) != 0L)
- return jjStartNfaWithStates_0(9, 87, 402);
+ if ((active1 & 0x20000000L) != 0L)
+ return jjStartNfaWithStates_0(9, 93, 403);
break;
case 85:
case 117:
- return jjMoveStringLiteralDfa10_0(active0, 0x100000000000000L, active1, 0L);
+ return jjMoveStringLiteralDfa10_0(active0, 0x2000000000000000L, active1, 0L);
default :
break;
}
@@ -728,7 +749,7 @@ private int jjMoveStringLiteralDfa10_0(long old0, long active0, long old1, long
{
case 77:
case 109:
- return jjMoveStringLiteralDfa11_0(active0, 0x100000000000000L);
+ return jjMoveStringLiteralDfa11_0(active0, 0x2000000000000000L);
default :
break;
}
@@ -747,7 +768,7 @@ private int jjMoveStringLiteralDfa11_0(long old0, long active0)
{
case 69:
case 101:
- return jjMoveStringLiteralDfa12_0(active0, 0x100000000000000L);
+ return jjMoveStringLiteralDfa12_0(active0, 0x2000000000000000L);
default :
break;
}
@@ -766,7 +787,7 @@ private int jjMoveStringLiteralDfa12_0(long old0, long active0)
{
case 78:
case 110:
- return jjMoveStringLiteralDfa13_0(active0, 0x100000000000000L);
+ return jjMoveStringLiteralDfa13_0(active0, 0x2000000000000000L);
default :
break;
}
@@ -785,8 +806,8 @@ private int jjMoveStringLiteralDfa13_0(long old0, long active0)
{
case 84:
case 116:
- if ((active0 & 0x100000000000000L) != 0L)
- return jjStartNfaWithStates_0(13, 56, 402);
+ if ((active0 & 0x2000000000000000L) != 0L)
+ return jjStartNfaWithStates_0(13, 61, 403);
break;
default :
break;
@@ -859,8 +880,8 @@ private int jjMoveNfa_0(int startState, int curPos)
jjCheckNAddTwoStates(164, 165);
if ((0x3ff000000000000L & l) != 0L)
{
- if (kind > 61)
- kind = 61;
+ if (kind > 67)
+ kind = 67;
jjCheckNAdd(163);
}
break;
@@ -869,11 +890,17 @@ private int jjMoveNfa_0(int startState, int curPos)
jjstateSet[jjnewStateCnt++] = 97;
break;
case 402:
+ if ((0x100003600L & l) != 0L)
+ jjCheckNAddTwoStates(148, 157);
+ if ((0x100003600L & l) != 0L)
+ jjCheckNAddTwoStates(140, 147);
+ break;
+ case 403:
case 98:
if ((0x3ff200000000000L & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddTwoStates(98, 99);
break;
case 401:
@@ -883,21 +910,21 @@ private int jjMoveNfa_0(int startState, int curPos)
jjCheckNAddTwoStates(128, 129);
else if (curChar == 40)
{
- if (kind > 100)
- kind = 100;
+ if (kind > 106)
+ kind = 106;
}
if ((0x3ff200000000000L & l) != 0L)
{
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddTwoStates(117, 118);
}
break;
case 4:
if ((0x3ff000000000000L & l) != 0L)
{
- if (kind > 61)
- kind = 61;
+ if (kind > 67)
+ kind = 67;
jjCheckNAddStates(9, 82);
}
else if ((0x100003600L & l) != 0L)
@@ -1025,8 +1052,8 @@ private int jjMoveNfa_0(int startState, int curPos)
jjCheckNAddStates(115, 118);
break;
case 31:
- if (curChar == 34 && kind > 59)
- kind = 59;
+ if (curChar == 34 && kind > 65)
+ kind = 65;
break;
case 33:
if (curChar == 12)
@@ -1085,8 +1112,8 @@ private int jjMoveNfa_0(int startState, int curPos)
jjCheckNAddStates(111, 114);
break;
case 48:
- if (curChar == 39 && kind > 59)
- kind = 59;
+ if (curChar == 39 && kind > 65)
+ kind = 65;
break;
case 50:
if (curChar == 12)
@@ -1147,106 +1174,106 @@ private int jjMoveNfa_0(int startState, int curPos)
case 66:
if ((0x3ff200000000000L & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddTwoStates(66, 67);
break;
case 68:
if ((0xffffffff00000000L & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddTwoStates(66, 67);
break;
case 69:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(278, 281);
break;
case 70:
if ((0x100003600L & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddTwoStates(66, 67);
break;
case 71:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(282, 288);
break;
case 72:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(289, 291);
break;
case 73:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(292, 295);
break;
case 74:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(296, 300);
break;
case 75:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(301, 306);
break;
case 78:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(307, 310);
break;
case 79:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(311, 317);
break;
case 80:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(318, 320);
break;
case 81:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(321, 324);
break;
case 82:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(325, 329);
break;
case 83:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(330, 335);
break;
case 84:
@@ -1256,225 +1283,225 @@ private int jjMoveNfa_0(int startState, int curPos)
case 85:
if ((0x3ff200000000000L & l) == 0L)
break;
- if (kind > 82)
- kind = 82;
+ if (kind > 88)
+ kind = 88;
jjCheckNAddTwoStates(85, 86);
break;
case 87:
if ((0xffffffff00000000L & l) == 0L)
break;
- if (kind > 82)
- kind = 82;
+ if (kind > 88)
+ kind = 88;
jjCheckNAddTwoStates(85, 86);
break;
case 88:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 82)
- kind = 82;
+ if (kind > 88)
+ kind = 88;
jjCheckNAddStates(336, 339);
break;
case 89:
if ((0x100003600L & l) == 0L)
break;
- if (kind > 82)
- kind = 82;
+ if (kind > 88)
+ kind = 88;
jjCheckNAddTwoStates(85, 86);
break;
case 90:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 82)
- kind = 82;
+ if (kind > 88)
+ kind = 88;
jjCheckNAddStates(340, 346);
break;
case 91:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 82)
- kind = 82;
+ if (kind > 88)
+ kind = 88;
jjCheckNAddStates(347, 349);
break;
case 92:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 82)
- kind = 82;
+ if (kind > 88)
+ kind = 88;
jjCheckNAddStates(350, 353);
break;
case 93:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 82)
- kind = 82;
+ if (kind > 88)
+ kind = 88;
jjCheckNAddStates(354, 358);
break;
case 94:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 82)
- kind = 82;
+ if (kind > 88)
+ kind = 88;
jjCheckNAddStates(359, 364);
break;
case 100:
if ((0xffffffff00000000L & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddTwoStates(98, 99);
break;
case 101:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(365, 368);
break;
case 102:
if ((0x100003600L & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddTwoStates(98, 99);
break;
case 103:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(369, 375);
break;
case 104:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(376, 378);
break;
case 105:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(379, 382);
break;
case 106:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(383, 387);
break;
case 107:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(388, 393);
break;
case 110:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(394, 397);
break;
case 111:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(398, 404);
break;
case 112:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(405, 407);
break;
case 113:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(408, 411);
break;
case 114:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(412, 416);
break;
case 115:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(417, 422);
break;
case 117:
if ((0x3ff200000000000L & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddTwoStates(117, 118);
break;
case 119:
if ((0xffffffff00000000L & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddTwoStates(117, 118);
break;
case 120:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(423, 426);
break;
case 121:
if ((0x100003600L & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddTwoStates(117, 118);
break;
case 122:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(427, 433);
break;
case 123:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(434, 436);
break;
case 124:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(437, 440);
break;
case 125:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(441, 445);
break;
case 126:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(446, 451);
break;
case 127:
@@ -1486,8 +1513,8 @@ private int jjMoveNfa_0(int startState, int curPos)
jjCheckNAddTwoStates(128, 129);
break;
case 129:
- if (curChar == 40 && kind > 100)
- kind = 100;
+ if (curChar == 40 && kind > 106)
+ kind = 106;
break;
case 131:
if ((0xffffffff00000000L & l) != 0L)
@@ -1545,8 +1572,8 @@ private int jjMoveNfa_0(int startState, int curPos)
case 163:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 61)
- kind = 61;
+ if (kind > 67)
+ kind = 67;
jjCheckNAdd(163);
break;
case 164:
@@ -1554,8 +1581,8 @@ private int jjMoveNfa_0(int startState, int curPos)
jjCheckNAddTwoStates(164, 165);
break;
case 165:
- if (curChar == 37 && kind > 65)
- kind = 65;
+ if (curChar == 37 && kind > 71)
+ kind = 71;
break;
case 166:
if ((0x3ff000000000000L & l) != 0L)
@@ -1628,106 +1655,106 @@ private int jjMoveNfa_0(int startState, int curPos)
case 218:
if ((0x3ff200000000000L & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddTwoStates(218, 219);
break;
case 220:
if ((0xffffffff00000000L & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddTwoStates(218, 219);
break;
case 221:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(487, 490);
break;
case 222:
if ((0x100003600L & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddTwoStates(218, 219);
break;
case 223:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(491, 497);
break;
case 224:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(498, 500);
break;
case 225:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(501, 504);
break;
case 226:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(505, 509);
break;
case 227:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(510, 515);
break;
case 230:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(516, 519);
break;
case 231:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(520, 526);
break;
case 232:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(527, 529);
break;
case 233:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(530, 533);
break;
case 234:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(534, 538);
break;
case 235:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(539, 544);
break;
case 237:
@@ -1743,8 +1770,8 @@ private int jjMoveNfa_0(int startState, int curPos)
jjCheckNAddTwoStates(239, 240);
break;
case 240:
- if (curChar == 41 && kind > 63)
- kind = 63;
+ if (curChar == 41 && kind > 69)
+ kind = 69;
break;
case 242:
if ((0xffffffff00000000L & l) != 0L)
@@ -1909,20 +1936,20 @@ private int jjMoveNfa_0(int startState, int curPos)
case 288:
if (curChar != 63)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjstateSet[jjnewStateCnt++] = 289;
break;
case 289:
if (curChar != 63)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAddStates(689, 692);
break;
case 290:
- if (curChar == 63 && kind > 99)
- kind = 99;
+ if (curChar == 63 && kind > 105)
+ kind = 105;
break;
case 291:
case 306:
@@ -1931,29 +1958,29 @@ private int jjMoveNfa_0(int startState, int curPos)
case 316:
if (curChar != 63)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAdd(290);
break;
case 292:
if (curChar != 63)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAddTwoStates(290, 291);
break;
case 293:
if (curChar != 63)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAddStates(693, 695);
break;
case 294:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjAddStates(696, 701);
break;
case 295:
@@ -1969,8 +1996,8 @@ private int jjMoveNfa_0(int startState, int curPos)
jjCheckNAdd(298);
break;
case 298:
- if ((0x3ff000000000000L & l) != 0L && kind > 99)
- kind = 99;
+ if ((0x3ff000000000000L & l) != 0L && kind > 105)
+ kind = 105;
break;
case 299:
if ((0x3ff000000000000L & l) != 0L)
@@ -1987,8 +2014,8 @@ private int jjMoveNfa_0(int startState, int curPos)
case 302:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAdd(290);
break;
case 303:
@@ -2002,8 +2029,8 @@ private int jjMoveNfa_0(int startState, int curPos)
case 305:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjstateSet[jjnewStateCnt++] = 306;
break;
case 307:
@@ -2013,57 +2040,57 @@ private int jjMoveNfa_0(int startState, int curPos)
case 308:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjstateSet[jjnewStateCnt++] = 309;
break;
case 309:
if (curChar != 63)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAddTwoStates(290, 310);
break;
case 311:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjstateSet[jjnewStateCnt++] = 312;
break;
case 312:
if (curChar != 63)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAddStates(702, 704);
break;
case 314:
if (curChar != 63)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAddTwoStates(290, 313);
break;
case 315:
if (curChar != 63)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAddStates(705, 708);
break;
case 317:
if (curChar != 63)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAddTwoStates(290, 316);
break;
case 318:
if (curChar != 63)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAddStates(709, 711);
break;
case 319:
@@ -2081,36 +2108,36 @@ private int jjMoveNfa_0(int startState, int curPos)
case 322:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjstateSet[jjnewStateCnt++] = 323;
break;
case 323:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAddStates(712, 715);
break;
case 324:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAdd(298);
break;
case 325:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAddTwoStates(298, 324);
break;
case 326:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAddStates(716, 718);
break;
case 327:
@@ -2136,43 +2163,43 @@ private int jjMoveNfa_0(int startState, int curPos)
case 333:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(731, 734);
break;
case 334:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(735, 741);
break;
case 335:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(742, 744);
break;
case 336:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(745, 748);
break;
case 337:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(749, 753);
break;
case 338:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(754, 759);
break;
case 339:
@@ -2198,15 +2225,15 @@ private int jjMoveNfa_0(int startState, int curPos)
case 345:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 61)
- kind = 61;
+ if (kind > 67)
+ kind = 67;
jjCheckNAddStates(9, 82);
break;
case 346:
if ((0x3ff000000000000L & l) == 0L)
break;
- if (kind > 61)
- kind = 61;
+ if (kind > 67)
+ kind = 67;
jjCheckNAdd(346);
break;
case 347:
@@ -2435,28 +2462,34 @@ private int jjMoveNfa_0(int startState, int curPos)
case 96:
if ((0x7fffffe07fffffeL & l) != 0L)
{
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddTwoStates(98, 99);
}
else if (curChar == 92)
jjCheckNAddTwoStates(100, 110);
break;
+ case 402:
+ if ((0x20000000200L & l) != 0L)
+ jjstateSet[jjnewStateCnt++] = 156;
+ else if ((0x1000000010L & l) != 0L)
+ jjstateSet[jjnewStateCnt++] = 146;
+ break;
case 159:
if ((0x7fffffe07fffffeL & l) != 0L)
jjCheckNAddStates(5, 8);
if ((0x7fffffe07fffffeL & l) != 0L)
{
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddTwoStates(117, 118);
}
break;
- case 402:
+ case 403:
if ((0x7fffffe87fffffeL & l) != 0L)
{
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddTwoStates(98, 99);
}
else if (curChar == 92)
@@ -2469,8 +2502,8 @@ private int jjMoveNfa_0(int startState, int curPos)
jjCheckNAddTwoStates(119, 120);
if ((0x7fffffe87fffffeL & l) != 0L)
{
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddTwoStates(117, 118);
}
else if (curChar == 92)
@@ -2479,8 +2512,8 @@ private int jjMoveNfa_0(int startState, int curPos)
case 4:
if ((0x7fffffe07fffffeL & l) != 0L)
{
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(796, 801);
}
else if (curChar == 92)
@@ -2507,8 +2540,8 @@ private int jjMoveNfa_0(int startState, int curPos)
jjCheckNAddStates(123, 125);
break;
case 10:
- if (curChar == 125 && kind > 31)
- kind = 31;
+ if (curChar == 125 && kind > 36)
+ kind = 36;
break;
case 11:
if (curChar == 92)
@@ -2647,15 +2680,15 @@ private int jjMoveNfa_0(int startState, int curPos)
case 65:
if ((0x7fffffe07fffffeL & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddTwoStates(66, 67);
break;
case 66:
if ((0x7fffffe87fffffeL & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddTwoStates(66, 67);
break;
case 67:
@@ -2665,50 +2698,50 @@ private int jjMoveNfa_0(int startState, int curPos)
case 68:
if ((0x7fffffffffffffffL & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddTwoStates(66, 67);
break;
case 69:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(278, 281);
break;
case 71:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(282, 288);
break;
case 72:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(289, 291);
break;
case 73:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(292, 295);
break;
case 74:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(296, 300);
break;
case 75:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(301, 306);
break;
case 77:
@@ -2718,50 +2751,50 @@ private int jjMoveNfa_0(int startState, int curPos)
case 78:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(307, 310);
break;
case 79:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(311, 317);
break;
case 80:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(318, 320);
break;
case 81:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(321, 324);
break;
case 82:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(325, 329);
break;
case 83:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddStates(330, 335);
break;
case 85:
if ((0x7fffffe87fffffeL & l) == 0L)
break;
- if (kind > 82)
- kind = 82;
+ if (kind > 88)
+ kind = 88;
jjCheckNAddTwoStates(85, 86);
break;
case 86:
@@ -2771,50 +2804,50 @@ private int jjMoveNfa_0(int startState, int curPos)
case 87:
if ((0x7fffffffffffffffL & l) == 0L)
break;
- if (kind > 82)
- kind = 82;
+ if (kind > 88)
+ kind = 88;
jjCheckNAddTwoStates(85, 86);
break;
case 88:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 82)
- kind = 82;
+ if (kind > 88)
+ kind = 88;
jjCheckNAddStates(336, 339);
break;
case 90:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 82)
- kind = 82;
+ if (kind > 88)
+ kind = 88;
jjCheckNAddStates(340, 346);
break;
case 91:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 82)
- kind = 82;
+ if (kind > 88)
+ kind = 88;
jjCheckNAddStates(347, 349);
break;
case 92:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 82)
- kind = 82;
+ if (kind > 88)
+ kind = 88;
jjCheckNAddStates(350, 353);
break;
case 93:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 82)
- kind = 82;
+ if (kind > 88)
+ kind = 88;
jjCheckNAddStates(354, 358);
break;
case 94:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 82)
- kind = 82;
+ if (kind > 88)
+ kind = 88;
jjCheckNAddStates(359, 364);
break;
case 95:
@@ -2824,15 +2857,15 @@ private int jjMoveNfa_0(int startState, int curPos)
case 97:
if ((0x7fffffe07fffffeL & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddTwoStates(98, 99);
break;
case 98:
if ((0x7fffffe87fffffeL & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddTwoStates(98, 99);
break;
case 99:
@@ -2842,50 +2875,50 @@ private int jjMoveNfa_0(int startState, int curPos)
case 100:
if ((0x7fffffffffffffffL & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddTwoStates(98, 99);
break;
case 101:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(365, 368);
break;
case 103:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(369, 375);
break;
case 104:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(376, 378);
break;
case 105:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(379, 382);
break;
case 106:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(383, 387);
break;
case 107:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(388, 393);
break;
case 109:
@@ -2895,50 +2928,50 @@ private int jjMoveNfa_0(int startState, int curPos)
case 110:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(394, 397);
break;
case 111:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(398, 404);
break;
case 112:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(405, 407);
break;
case 113:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(408, 411);
break;
case 114:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(412, 416);
break;
case 115:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddStates(417, 422);
break;
case 117:
if ((0x7fffffe87fffffeL & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddTwoStates(117, 118);
break;
case 118:
@@ -2948,50 +2981,50 @@ private int jjMoveNfa_0(int startState, int curPos)
case 119:
if ((0x7fffffffffffffffL & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddTwoStates(117, 118);
break;
case 120:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(423, 426);
break;
case 122:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(427, 433);
break;
case 123:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(434, 436);
break;
case 124:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(437, 440);
break;
case 125:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(441, 445);
break;
case 126:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(446, 451);
break;
case 127:
@@ -3032,8 +3065,8 @@ private int jjMoveNfa_0(int startState, int curPos)
jjCheckNAddStates(480, 486);
break;
case 141:
- if ((0x10000000100000L & l) != 0L && kind > 58)
- kind = 58;
+ if ((0x10000000100000L & l) != 0L && kind > 64)
+ kind = 64;
break;
case 142:
if ((0x100000001000L & l) != 0L)
@@ -3060,8 +3093,8 @@ private int jjMoveNfa_0(int startState, int curPos)
jjstateSet[jjnewStateCnt++] = 146;
break;
case 149:
- if ((0x10000000100000L & l) != 0L && kind > 89)
- kind = 89;
+ if ((0x10000000100000L & l) != 0L && kind > 95)
+ kind = 95;
break;
case 150:
if ((0x400000004000L & l) != 0L)
@@ -3102,77 +3135,77 @@ private int jjMoveNfa_0(int startState, int curPos)
case 161:
if ((0x7fffffe07fffffeL & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(796, 801);
break;
case 167:
- if ((0x10000000100000L & l) != 0L && kind > 66)
- kind = 66;
+ if ((0x10000000100000L & l) != 0L && kind > 72)
+ kind = 72;
break;
case 168:
if ((0x1000000010000L & l) != 0L)
jjstateSet[jjnewStateCnt++] = 167;
break;
case 170:
- if ((0x200000002000L & l) != 0L && kind > 67)
- kind = 67;
+ if ((0x200000002000L & l) != 0L && kind > 73)
+ kind = 73;
break;
case 171:
if ((0x200000002000L & l) != 0L)
jjstateSet[jjnewStateCnt++] = 170;
break;
case 173:
- if ((0x200000002000L & l) != 0L && kind > 68)
- kind = 68;
+ if ((0x200000002000L & l) != 0L && kind > 74)
+ kind = 74;
break;
case 174:
if ((0x800000008L & l) != 0L)
jjstateSet[jjnewStateCnt++] = 173;
break;
case 176:
- if ((0x800000008L & l) != 0L && kind > 69)
- kind = 69;
+ if ((0x800000008L & l) != 0L && kind > 75)
+ kind = 75;
break;
case 177:
if ((0x1000000010000L & l) != 0L)
jjstateSet[jjnewStateCnt++] = 176;
break;
case 179:
- if ((0x400000004000L & l) != 0L && kind > 70)
- kind = 70;
+ if ((0x400000004000L & l) != 0L && kind > 76)
+ kind = 76;
break;
case 180:
if ((0x20000000200L & l) != 0L)
jjstateSet[jjnewStateCnt++] = 179;
break;
case 182:
- if ((0x100000001000000L & l) != 0L && kind > 71)
- kind = 71;
+ if ((0x100000001000000L & l) != 0L && kind > 77)
+ kind = 77;
break;
case 183:
if ((0x1000000010000L & l) != 0L)
jjstateSet[jjnewStateCnt++] = 182;
break;
case 185:
- if ((0x200000002000L & l) != 0L && kind > 72)
- kind = 72;
+ if ((0x200000002000L & l) != 0L && kind > 78)
+ kind = 78;
break;
case 186:
if ((0x2000000020L & l) != 0L)
jjstateSet[jjnewStateCnt++] = 185;
break;
case 188:
- if ((0x100000001000000L & l) != 0L && kind > 73)
- kind = 73;
+ if ((0x100000001000000L & l) != 0L && kind > 79)
+ kind = 79;
break;
case 189:
if ((0x2000000020L & l) != 0L)
jjstateSet[jjnewStateCnt++] = 188;
break;
case 191:
- if ((0x8000000080L & l) != 0L && kind > 74)
- kind = 74;
+ if ((0x8000000080L & l) != 0L && kind > 80)
+ kind = 80;
break;
case 192:
if ((0x2000000020L & l) != 0L)
@@ -3183,8 +3216,8 @@ private int jjMoveNfa_0(int startState, int curPos)
jjstateSet[jjnewStateCnt++] = 192;
break;
case 195:
- if ((0x1000000010L & l) != 0L && kind > 75)
- kind = 75;
+ if ((0x1000000010L & l) != 0L && kind > 81)
+ kind = 81;
break;
case 196:
if ((0x200000002L & l) != 0L)
@@ -3195,8 +3228,8 @@ private int jjMoveNfa_0(int startState, int curPos)
jjstateSet[jjnewStateCnt++] = 196;
break;
case 199:
- if ((0x1000000010L & l) != 0L && kind > 76)
- kind = 76;
+ if ((0x1000000010L & l) != 0L && kind > 82)
+ kind = 82;
break;
case 200:
if ((0x200000002L & l) != 0L)
@@ -3211,28 +3244,28 @@ private int jjMoveNfa_0(int startState, int curPos)
jjstateSet[jjnewStateCnt++] = 201;
break;
case 204:
- if ((0x8000000080000L & l) != 0L && kind > 77)
- kind = 77;
+ if ((0x8000000080000L & l) != 0L && kind > 83)
+ kind = 83;
break;
case 205:
if ((0x200000002000L & l) != 0L)
jjstateSet[jjnewStateCnt++] = 204;
break;
case 207:
- if ((0x8000000080000L & l) != 0L && kind > 78)
- kind = 78;
+ if ((0x8000000080000L & l) != 0L && kind > 84)
+ kind = 84;
break;
case 209:
- if ((0x400000004000000L & l) != 0L && kind > 79)
- kind = 79;
+ if ((0x400000004000000L & l) != 0L && kind > 85)
+ kind = 85;
break;
case 210:
if ((0x10000000100L & l) != 0L)
jjstateSet[jjnewStateCnt++] = 209;
break;
case 212:
- if ((0x400000004000000L & l) != 0L && kind > 80)
- kind = 80;
+ if ((0x400000004000000L & l) != 0L && kind > 86)
+ kind = 86;
break;
case 213:
if ((0x10000000100L & l) != 0L)
@@ -3245,15 +3278,15 @@ private int jjMoveNfa_0(int startState, int curPos)
case 217:
if ((0x7fffffe07fffffeL & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddTwoStates(218, 219);
break;
case 218:
if ((0x7fffffe87fffffeL & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddTwoStates(218, 219);
break;
case 219:
@@ -3263,50 +3296,50 @@ private int jjMoveNfa_0(int startState, int curPos)
case 220:
if ((0x7fffffffffffffffL & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddTwoStates(218, 219);
break;
case 221:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(487, 490);
break;
case 223:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(491, 497);
break;
case 224:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(498, 500);
break;
case 225:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(501, 504);
break;
case 226:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(505, 509);
break;
case 227:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(510, 515);
break;
case 229:
@@ -3316,43 +3349,43 @@ private int jjMoveNfa_0(int startState, int curPos)
case 230:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(516, 519);
break;
case 231:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(520, 526);
break;
case 232:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(527, 529);
break;
case 233:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(530, 533);
break;
case 234:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(534, 538);
break;
case 235:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddStates(539, 544);
break;
case 236:
@@ -3477,8 +3510,8 @@ private int jjMoveNfa_0(int startState, int curPos)
case 294:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjAddStates(696, 701);
break;
case 295:
@@ -3494,8 +3527,8 @@ private int jjMoveNfa_0(int startState, int curPos)
jjCheckNAdd(298);
break;
case 298:
- if ((0x7e0000007eL & l) != 0L && kind > 99)
- kind = 99;
+ if ((0x7e0000007eL & l) != 0L && kind > 105)
+ kind = 105;
break;
case 299:
if ((0x7e0000007eL & l) != 0L)
@@ -3512,8 +3545,8 @@ private int jjMoveNfa_0(int startState, int curPos)
case 302:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjstateSet[jjnewStateCnt++] = 290;
break;
case 303:
@@ -3527,8 +3560,8 @@ private int jjMoveNfa_0(int startState, int curPos)
case 305:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjstateSet[jjnewStateCnt++] = 306;
break;
case 307:
@@ -3538,15 +3571,15 @@ private int jjMoveNfa_0(int startState, int curPos)
case 308:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjstateSet[jjnewStateCnt++] = 309;
break;
case 311:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjstateSet[jjnewStateCnt++] = 312;
break;
case 320:
@@ -3556,36 +3589,36 @@ private int jjMoveNfa_0(int startState, int curPos)
case 322:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjstateSet[jjnewStateCnt++] = 323;
break;
case 323:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAddStates(712, 715);
break;
case 324:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAdd(298);
break;
case 325:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAddTwoStates(298, 324);
break;
case 326:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 99)
- kind = 99;
+ if (kind > 105)
+ kind = 105;
jjCheckNAddStates(716, 718);
break;
case 327:
@@ -3615,43 +3648,43 @@ private int jjMoveNfa_0(int startState, int curPos)
case 333:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(731, 734);
break;
case 334:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(735, 741);
break;
case 335:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(742, 744);
break;
case 336:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(745, 748);
break;
case 337:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(749, 753);
break;
case 338:
if ((0x7e0000007eL & l) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddStates(754, 759);
break;
case 339:
@@ -3690,23 +3723,23 @@ private int jjMoveNfa_0(int startState, int curPos)
case 100:
if ((jjbitVec0[i2] & l2) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddTwoStates(98, 99);
break;
- case 402:
+ case 403:
case 98:
if ((jjbitVec0[i2] & l2) == 0L)
break;
- if (kind > 88)
- kind = 88;
+ if (kind > 94)
+ kind = 94;
jjCheckNAddTwoStates(98, 99);
break;
case 401:
if ((jjbitVec0[i2] & l2) != 0L)
{
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddTwoStates(117, 118);
}
if ((jjbitVec0[i2] & l2) != 0L)
@@ -3715,8 +3748,8 @@ private int jjMoveNfa_0(int startState, int curPos)
case 4:
if ((jjbitVec0[i2] & l2) == 0L)
break;
- if (kind > 32)
- kind = 32;
+ if (kind > 37)
+ kind = 37;
jjCheckNAddStates(796, 801);
break;
case 2:
@@ -3744,24 +3777,24 @@ private int jjMoveNfa_0(int startState, int curPos)
case 76:
if ((jjbitVec0[i2] & l2) == 0L)
break;
- if (kind > 64)
- kind = 64;
+ if (kind > 70)
+ kind = 70;
jjCheckNAddTwoStates(66, 67);
break;
case 85:
case 87:
if ((jjbitVec0[i2] & l2) == 0L)
break;
- if (kind > 82)
- kind = 82;
+ if (kind > 88)
+ kind = 88;
jjCheckNAddTwoStates(85, 86);
break;
case 117:
case 119:
if ((jjbitVec0[i2] & l2) == 0L)
break;
- if (kind > 60)
- kind = 60;
+ if (kind > 66)
+ kind = 66;
jjCheckNAddTwoStates(117, 118);
break;
case 127:
@@ -3774,8 +3807,8 @@ private int jjMoveNfa_0(int startState, int curPos)
case 228:
if ((jjbitVec0[i2] & l2) == 0L)
break;
- if (kind > 81)
- kind = 81;
+ if (kind > 87)
+ kind = 87;
jjCheckNAddTwoStates(218, 219);
break;
case 238:
@@ -4019,12 +4052,13 @@ static final int[] jjnextStates = {
public static final String[] jjstrLiteralImages = {
"", null, null, null, null, null, null, null, null, null, "\74\41\55\55",
"\55\55\76", "\173", "\175", "\174\75", "\176\75", "\75", "\53", "\55", "\54", "\73",
-"\76", "\57", "\133", "\135", "\52", "\46", "\56", "\50", "\51", "\72", null, null,
+"\76", "\74", "\57", "\133", "\135", "\52", "\46", "\56", "\50", "\51", "\75\75",
+"\174\174", "\46\46", "\41\75", "\72", null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-null, null, null, null, null, null, null, null, null, null, null, null, null, };
+null, null, null, null, null, null, null, null, };
/** Lexer state names. */
public static final String[] lexStateNames = {
@@ -4040,10 +4074,10 @@ public static final int[] jjnewLexState = {
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
};
static final long[] jjtoToken = {
- 0xbffffe01fffffc03L, 0x3803ffffffL,
+ 0xffffc03ffffffc03L, 0xe00ffffffefL,
};
static final long[] jjtoSkip = {
0x190L, 0x0L,
@@ -4169,9 +4203,9 @@ public Token getNextToken()
jjmatchedKind = 0x7fffffff;
jjmatchedPos = 0;
curPos = jjMoveStringLiteralDfa0_0();
- if (jjmatchedPos == 0 && jjmatchedKind > 101)
+ if (jjmatchedPos == 0 && jjmatchedKind > 107)
{
- jjmatchedKind = 101;
+ jjmatchedKind = 107;
}
break;
case 1:
diff --git a/theme-compiler/src/com/vaadin/sass/selector/SelectorUtil.java b/theme-compiler/src/com/vaadin/sass/selector/SelectorUtil.java
index d93f37c175..788f297cac 100644
--- a/theme-compiler/src/com/vaadin/sass/selector/SelectorUtil.java
+++ b/theme-compiler/src/com/vaadin/sass/selector/SelectorUtil.java
@@ -29,6 +29,7 @@ import org.w3c.css.sac.SiblingSelector;
import org.w3c.css.sac.SimpleSelector;
import org.w3c.flute.parser.selectors.AndConditionImpl;
import org.w3c.flute.parser.selectors.AttributeConditionImpl;
+import org.w3c.flute.parser.selectors.ChildSelectorImpl;
import org.w3c.flute.parser.selectors.ClassConditionImpl;
import org.w3c.flute.parser.selectors.ConditionFactoryImpl;
import org.w3c.flute.parser.selectors.DirectAdjacentSelectorImpl;
@@ -305,4 +306,28 @@ public class SelectorUtil {
return one == null ? another == null : toString(one).equals(
toString(another));
}
+
+ public static Selector createSelectorAndreplaceSelectorVariableWithValue(
+ Selector selector, String variable, String value) throws Exception {
+
+ SelectorFactoryImpl factory = new SelectorFactoryImpl();
+
+ ElementSelector es = factory.createElementSelector(
+ null,
+ ((ElementSelector) selector).getLocalName().replaceAll(
+ variable, value));
+
+ if (selector instanceof ConditionalSelector) {
+ return factory.createConditionalSelector(es,
+ ((ConditionalSelector) selector).getCondition());
+ } else if (selector instanceof DescendantSelector) {
+ return factory.createDescendantSelector(es,
+ ((DescendantSelector) selector).getSimpleSelector());
+ } else if (selector instanceof ChildSelectorImpl) {
+ return factory.createChildSelector(es,
+ ((DescendantSelector) selector).getSimpleSelector());
+ } else {
+ throw new Exception("Invalid selector type");
+ }
+ }
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/BlockNode.java b/theme-compiler/src/com/vaadin/sass/tree/BlockNode.java
index e255b2a3e5..cde7c9425a 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/BlockNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/BlockNode.java
@@ -16,6 +16,9 @@
package com.vaadin.sass.tree;
+import java.util.ArrayList;
+
+import org.w3c.css.sac.Selector;
import org.w3c.css.sac.SelectorList;
import com.vaadin.sass.parser.SelectorListImpl;
@@ -23,7 +26,7 @@ import com.vaadin.sass.selector.SelectorUtil;
import com.vaadin.sass.util.Clonable;
import com.vaadin.sass.util.DeepCopy;
-public class BlockNode extends Node implements Clonable {
+public class BlockNode extends Node implements Clonable, IVariableNode {
private static final long serialVersionUID = 5742962631468325048L;
@@ -81,4 +84,35 @@ public class BlockNode extends Node implements Clonable {
return clone;
}
+ @Override
+ public void replaceVariables(ArrayList<VariableNode> variables) {
+ SelectorListImpl newList = new SelectorListImpl();
+
+ if (selectorList != null) {
+ for (int i = 0; i < selectorList.getLength(); i++) {
+ Selector selector = selectorList.item(i);
+
+ for (final VariableNode node : variables) {
+
+ if (SelectorUtil.toString(selector)
+ .contains(node.getName())) {
+ try {
+ selector = SelectorUtil
+ .createSelectorAndreplaceSelectorVariableWithValue(
+ selector, node.getName(), node
+ .getExpr().toString());
+ break;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return;
+ }
+ }
+ }
+ newList.addSelector(selector);
+ }
+
+ selectorList = newList;
+ }
+ }
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/ExtendNode.java b/theme-compiler/src/com/vaadin/sass/tree/ExtendNode.java
index 65ecb254bb..b70c20bcfe 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/ExtendNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/ExtendNode.java
@@ -16,9 +16,15 @@
package com.vaadin.sass.tree;
+import java.util.ArrayList;
+
+import org.w3c.css.sac.Selector;
import org.w3c.css.sac.SelectorList;
-public class ExtendNode extends Node {
+import com.vaadin.sass.parser.SelectorListImpl;
+import com.vaadin.sass.selector.SelectorUtil;
+
+public class ExtendNode extends Node implements IVariableNode {
private static final long serialVersionUID = 3301805078983796878L;
SelectorList list;
@@ -32,4 +38,32 @@ public class ExtendNode extends Node {
return list;
}
+ @Override
+ public void replaceVariables(ArrayList<VariableNode> variables) {
+ SelectorListImpl newList = new SelectorListImpl();
+
+ for (int i = 0; i < list.getLength(); i++) {
+ Selector selector = list.item(i);
+
+ for (final VariableNode node : variables) {
+
+ if (SelectorUtil.toString(selector).contains(node.getName())) {
+ try {
+ selector = SelectorUtil
+ .createSelectorAndreplaceSelectorVariableWithValue(
+ selector, node.getName(), node
+ .getExpr().toString());
+ break;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return;
+ }
+ }
+ }
+ newList.addSelector(selector);
+ }
+
+ list = newList;
+ }
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/FunctionNode.java b/theme-compiler/src/com/vaadin/sass/tree/FunctionNode.java
index 90b5458235..6263d557b8 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/FunctionNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/FunctionNode.java
@@ -16,7 +16,9 @@
package com.vaadin.sass.tree;
-public class FunctionNode extends Node {
+import java.util.ArrayList;
+
+public class FunctionNode extends Node implements IVariableNode {
private static final long serialVersionUID = -5383104165955523923L;
private String name;
@@ -39,4 +41,13 @@ public class FunctionNode extends Node {
return "Function Node: {name: " + name + ", args: " + args + ", body: "
+ body + "}";
}
+
+ @Override
+ public void replaceVariables(ArrayList<VariableNode> variables) {
+ for (final VariableNode node : variables) {
+ if (args.contains(node.getName())) {
+ args.replaceAll(node.getName(), node.getExpr().toString());
+ }
+ }
+ }
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/IVariableNode.java b/theme-compiler/src/com/vaadin/sass/tree/IVariableNode.java
new file mode 100644
index 0000000000..2c3e1c95d2
--- /dev/null
+++ b/theme-compiler/src/com/vaadin/sass/tree/IVariableNode.java
@@ -0,0 +1,9 @@
+package com.vaadin.sass.tree;
+
+import java.util.ArrayList;
+
+public interface IVariableNode {
+
+ public void replaceVariables(ArrayList<VariableNode> variables);
+
+}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/MediaNode.java b/theme-compiler/src/com/vaadin/sass/tree/MediaNode.java
index 00a7442a24..b312d53a00 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/MediaNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/MediaNode.java
@@ -56,4 +56,5 @@ public class MediaNode extends Node {
builder.append("}");
return builder.toString();
}
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/MixinDefNode.java b/theme-compiler/src/com/vaadin/sass/tree/MixinDefNode.java
index b888d01971..a872d13654 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/MixinDefNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/MixinDefNode.java
@@ -19,7 +19,9 @@ package com.vaadin.sass.tree;
import java.util.ArrayList;
import java.util.Collection;
-public class MixinDefNode extends Node {
+import com.vaadin.sass.util.DeepCopy;
+
+public class MixinDefNode extends Node implements IVariableNode {
private static final long serialVersionUID = 5469294053247343948L;
private String name;
@@ -64,4 +66,18 @@ public class MixinDefNode extends Node {
this.arglist = arglist;
}
+ @Override
+ public void replaceVariables(ArrayList<VariableNode> variables) {
+ for (final VariableNode var : variables) {
+ for (final VariableNode arg : new ArrayList<VariableNode>(arglist)) {
+
+ if (arg.getName().equals(var.getName())) {
+ arglist.add(arglist.indexOf(arg),
+ (VariableNode) DeepCopy.copy(var));
+ arglist.remove(arg);
+ }
+ }
+ }
+ }
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/MixinNode.java b/theme-compiler/src/com/vaadin/sass/tree/MixinNode.java
index 0267b88e2d..2b9299bbd1 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/MixinNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/MixinNode.java
@@ -21,7 +21,9 @@ import java.util.Collection;
import org.w3c.css.sac.LexicalUnit;
-public class MixinNode extends Node {
+import com.vaadin.sass.parser.LexicalUnitImpl;
+
+public class MixinNode extends Node implements IVariableNode {
private static final long serialVersionUID = 4725008226813110658L;
private String name;
@@ -56,4 +58,17 @@ public class MixinNode extends Node {
public void setArglist(ArrayList<LexicalUnit> arglist) {
this.arglist = arglist;
}
+
+ @Override
+ public void replaceVariables(ArrayList<VariableNode> variables) {
+ for (final VariableNode var : variables) {
+ for (final LexicalUnit arg : new ArrayList<LexicalUnit>(arglist)) {
+ if (arg.getLexicalUnitType() == LexicalUnitImpl.SCSS_VARIABLE
+ && arg.getStringValue().equals(var.getName())) {
+ ((LexicalUnitImpl) arg).replaceValue(var.getExpr());
+ }
+ }
+ }
+ }
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/NestPropertiesNode.java b/theme-compiler/src/com/vaadin/sass/tree/NestPropertiesNode.java
index 306a73ba87..27d3f5b23f 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/NestPropertiesNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/NestPropertiesNode.java
@@ -20,7 +20,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-public class NestPropertiesNode extends Node {
+public class NestPropertiesNode extends Node implements IVariableNode {
private static final long serialVersionUID = 3671253315690598308L;
public NestPropertiesNode(String name) {
@@ -53,4 +53,14 @@ public class NestPropertiesNode extends Node {
child.getValue(), child.isImportant(), null);
return newRuleNode;
}
+
+ @Override
+ public void replaceVariables(ArrayList<VariableNode> variables) {
+ for (final VariableNode node : variables) {
+ if (name.contains(node.getName())) {
+ name = name.replaceAll(node.getName(), node.getExpr()
+ .toString());
+ }
+ }
+ }
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/Node.java b/theme-compiler/src/com/vaadin/sass/tree/Node.java
index 817327502b..6e871df286 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/Node.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/Node.java
@@ -19,7 +19,6 @@ package com.vaadin.sass.tree;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.List;
public abstract class Node implements Serializable {
private static final long serialVersionUID = 5914711715839294816L;
@@ -28,11 +27,9 @@ public abstract class Node implements Serializable {
private String fileName;
protected String rawString;
- protected List<String> variables;
public Node() {
children = new ArrayList<Node>();
- variables = new ArrayList<String>();
}
public Node(String raw) {
@@ -98,11 +95,4 @@ public abstract class Node implements Serializable {
return rawString;
}
- public void addVariable(String var) {
- variables.add(var);
- }
-
- public void removeVariable(String var) {
- variables.remove(var);
- }
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/RuleNode.java b/theme-compiler/src/com/vaadin/sass/tree/RuleNode.java
index 3b51468e1d..fe52844979 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/RuleNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/RuleNode.java
@@ -16,9 +16,13 @@
package com.vaadin.sass.tree;
+import java.util.ArrayList;
+
import org.w3c.css.sac.LexicalUnit;
-public class RuleNode extends Node {
+import com.vaadin.sass.parser.LexicalUnitImpl;
+
+public class RuleNode extends Node implements IVariableNode {
private static final long serialVersionUID = 6653493127869037022L;
String variable;
@@ -77,4 +81,32 @@ public class RuleNode extends Node {
this.comment = comment;
}
+ @Override
+ public void replaceVariables(ArrayList<VariableNode> variables) {
+ for (final VariableNode node : variables) {
+ LexicalUnit current = value;
+ if (current.getLexicalUnitType() == LexicalUnitImpl.SAC_FUNCTION) {
+ if (current.getParameters().toString().contains(node.getName())) {
+ LexicalUnit param = value.getParameters();
+ if (param != null) {
+ if (param.toString().contains(node.getName())) {
+ ((LexicalUnitImpl) param).replaceValue(node
+ .getExpr());
+ }
+ }
+ }
+ } else {
+ while (current != null) {
+ if (current.getLexicalUnitType() == LexicalUnitImpl.SCSS_VARIABLE
+ && current.toString()
+ .contains("$" + node.getName())) {
+
+ ((LexicalUnitImpl) current)
+ .replaceValue(node.getExpr());
+ }
+ current = current.getNextLexicalUnit();
+ }
+ }
+ }
+ }
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/SimpleNode.java b/theme-compiler/src/com/vaadin/sass/tree/SimpleNode.java
index 39a5d17b48..52329c1b14 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/SimpleNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/SimpleNode.java
@@ -1,5 +1,7 @@
package com.vaadin.sass.tree;
+import java.util.ArrayList;
+
/**
* A simple BlockNode where input text equals output. <b>Note : </b> ignores any
* possible children so only use it when you are sure no child nodes will be
@@ -8,9 +10,9 @@ package com.vaadin.sass.tree;
* @author Sebastian Nyholm @ Vaadin Ltd
*
*/
-public class SimpleNode extends Node {
+public class SimpleNode extends Node implements IVariableNode {
- private final String text;
+ private String text;
public SimpleNode(String text) {
this.text = text;
@@ -21,4 +23,14 @@ public class SimpleNode extends Node {
public String toString() {
return text;
}
+
+ @Override
+ public void replaceVariables(ArrayList<VariableNode> variables) {
+ for (final VariableNode node : variables) {
+ if (text.contains(node.getName())) {
+ text = text.replaceAll(node.getName(), node.getExpr()
+ .toString());
+ }
+ }
+ }
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/VariableNode.java b/theme-compiler/src/com/vaadin/sass/tree/VariableNode.java
index db014ae616..b7e9a21d51 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/VariableNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/VariableNode.java
@@ -16,9 +16,14 @@
package com.vaadin.sass.tree;
+import java.util.ArrayList;
+
import org.w3c.css.sac.LexicalUnit;
-public class VariableNode extends Node {
+import com.vaadin.sass.parser.LexicalUnitImpl;
+import com.vaadin.sass.util.DeepCopy;
+
+public class VariableNode extends Node implements IVariableNode {
private static final long serialVersionUID = 7003372557547748734L;
private String name;
@@ -64,4 +69,43 @@ public class VariableNode extends Node {
this.guarded = guarded;
}
+ @Override
+ public void replaceVariables(ArrayList<VariableNode> variables) {
+ for (final VariableNode node : variables) {
+ if (!this.equals(node)) {
+
+ if (name.equals(node.getName())) {
+ expr = (LexicalUnit) DeepCopy.copy(node.getExpr());
+ guarded = node.isGuarded();
+ continue;
+ }
+
+ LexicalUnit current = expr;
+ while (current != null) {
+ if (current.toString().contains(node.getName())) {
+ ((LexicalUnitImpl) current)
+ .replaceValue(node.getExpr());
+ }
+
+ current = current.getNextLexicalUnit();
+ }
+
+ }
+ }
+ }
+
+ public boolean replacePossibleVariables(ArrayList<VariableNode> list) {
+ list.remove(this);
+ LexicalUnit oldExpr = (LexicalUnit) DeepCopy.copy(expr);
+ replaceVariables(list);
+
+ if (!oldExpr.toString().equals(expr.toString())) {
+ for (VariableNode n : list) {
+ if (expr.toString().equals(n.getExpr().toString())) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/controldirective/ControlChildNode.java b/theme-compiler/src/com/vaadin/sass/tree/controldirective/ControlChildNode.java
deleted file mode 100644
index a6df1e744b..0000000000
--- a/theme-compiler/src/com/vaadin/sass/tree/controldirective/ControlChildNode.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.vaadin.sass.tree.controldirective;
-
-
-public interface ControlChildNode extends ControlNode {
-
-}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/controldirective/ControlDefNode.java b/theme-compiler/src/com/vaadin/sass/tree/controldirective/ControlDefNode.java
deleted file mode 100644
index 4ead42eb0a..0000000000
--- a/theme-compiler/src/com/vaadin/sass/tree/controldirective/ControlDefNode.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.vaadin.sass.tree.controldirective;
-
-
-public interface ControlDefNode extends ControlNode {
-
-}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/controldirective/ControlNode.java b/theme-compiler/src/com/vaadin/sass/tree/controldirective/ControlNode.java
deleted file mode 100644
index 453593d4d2..0000000000
--- a/theme-compiler/src/com/vaadin/sass/tree/controldirective/ControlNode.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.vaadin.sass.tree.controldirective;
-
-public interface ControlNode {
-
-}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/controldirective/EachDefNode.java b/theme-compiler/src/com/vaadin/sass/tree/controldirective/EachDefNode.java
index 1dfa5892d9..2cb9aeb1c3 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/controldirective/EachDefNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/controldirective/EachDefNode.java
@@ -21,7 +21,7 @@ import java.util.List;
import com.vaadin.sass.tree.Node;
-public class EachDefNode extends Node implements ControlDefNode {
+public class EachDefNode extends Node {
private static final long serialVersionUID = 7943948981204906221L;
private String var;
diff --git a/theme-compiler/src/com/vaadin/sass/tree/controldirective/ElseNode.java b/theme-compiler/src/com/vaadin/sass/tree/controldirective/ElseNode.java
new file mode 100644
index 0000000000..529ce4d76e
--- /dev/null
+++ b/theme-compiler/src/com/vaadin/sass/tree/controldirective/ElseNode.java
@@ -0,0 +1,12 @@
+package com.vaadin.sass.tree.controldirective;
+
+import com.vaadin.sass.tree.Node;
+
+public class ElseNode extends Node implements IfElseNode {
+
+ @Override
+ public String getExpression() {
+ return null;
+ }
+
+}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/controldirective/IfElseDefNode.java b/theme-compiler/src/com/vaadin/sass/tree/controldirective/IfElseDefNode.java
new file mode 100644
index 0000000000..5bd3ba526c
--- /dev/null
+++ b/theme-compiler/src/com/vaadin/sass/tree/controldirective/IfElseDefNode.java
@@ -0,0 +1,17 @@
+package com.vaadin.sass.tree.controldirective;
+
+import com.vaadin.sass.tree.Node;
+
+public class IfElseDefNode extends Node {
+
+ @Override
+ public String toString() {
+ StringBuilder b = new StringBuilder();
+ for (final Node child : getChildren()) {
+ b.append(child.toString());
+ b.append("\n");
+ }
+ return b.toString();
+ }
+
+}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/controldirective/IfElseNode.java b/theme-compiler/src/com/vaadin/sass/tree/controldirective/IfElseNode.java
new file mode 100644
index 0000000000..8f6c09addc
--- /dev/null
+++ b/theme-compiler/src/com/vaadin/sass/tree/controldirective/IfElseNode.java
@@ -0,0 +1,7 @@
+package com.vaadin.sass.tree.controldirective;
+
+public interface IfElseNode {
+
+ String getExpression();
+
+}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/controldirective/IfNode.java b/theme-compiler/src/com/vaadin/sass/tree/controldirective/IfNode.java
new file mode 100644
index 0000000000..2f31f36f0c
--- /dev/null
+++ b/theme-compiler/src/com/vaadin/sass/tree/controldirective/IfNode.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2011 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.sass.tree.controldirective;
+
+import java.util.ArrayList;
+
+import com.vaadin.sass.tree.IVariableNode;
+import com.vaadin.sass.tree.Node;
+import com.vaadin.sass.tree.VariableNode;
+
+public class IfNode extends Node implements IfElseNode, IVariableNode {
+ private String expression;
+
+ public IfNode(String expression) {
+ this.expression = expression;
+ }
+
+ @Override
+ public String getExpression() {
+ if (expression != null) {
+ return expression.trim();
+ } else {
+ return "false";
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "@if" + expression;
+ }
+
+ @Override
+ public void replaceVariables(ArrayList<VariableNode> variables) {
+ for (final VariableNode node : variables) {
+ if (expression.contains(node.getName())) {
+ expression = expression.replaceAll(node.getName(), node
+ .getExpr().toString());
+ }
+ }
+ }
+
+} \ No newline at end of file
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/ControlVisitor.java b/theme-compiler/src/com/vaadin/sass/visitor/EachVisitor.java
index cc736b307f..0e4fb46a23 100644
--- a/theme-compiler/src/com/vaadin/sass/visitor/ControlVisitor.java
+++ b/theme-compiler/src/com/vaadin/sass/visitor/EachVisitor.java
@@ -6,20 +6,19 @@ import java.util.regex.Pattern;
import com.vaadin.sass.tree.BlockNode;
import com.vaadin.sass.tree.Node;
import com.vaadin.sass.tree.SimpleNode;
-import com.vaadin.sass.tree.controldirective.ControlDefNode;
import com.vaadin.sass.tree.controldirective.EachDefNode;
-public class ControlVisitor implements Visitor {
+public class EachVisitor implements Visitor {
- HashSet<Node> controlDefs = new HashSet<Node>();
+ HashSet<EachDefNode> controlDefs = new HashSet<EachDefNode>();
private Node rootNode;
@Override
public void traverse(Node node) throws Exception {
this.rootNode = node;
for (Node child : node.getChildren()) {
- if (child instanceof ControlDefNode) {
- controlDefs.add(child);
+ if (child instanceof EachDefNode) {
+ controlDefs.add((EachDefNode) child);
}
}
@@ -28,10 +27,8 @@ public class ControlVisitor implements Visitor {
}
private void replaceControlNodes() {
- for (final Node defNode : controlDefs) {
- if (defNode instanceof EachDefNode) {
- replaceEachDefNode((EachDefNode) defNode);
- }
+ for (final EachDefNode defNode : controlDefs) {
+ replaceEachDefNode(defNode);
}
}
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/IfElseVisitor.java b/theme-compiler/src/com/vaadin/sass/visitor/IfElseVisitor.java
new file mode 100644
index 0000000000..cff00392fb
--- /dev/null
+++ b/theme-compiler/src/com/vaadin/sass/visitor/IfElseVisitor.java
@@ -0,0 +1,112 @@
+package com.vaadin.sass.visitor;
+
+import java.util.HashMap;
+import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.jexl2.Expression;
+import org.apache.commons.jexl2.JexlEngine;
+import org.apache.commons.jexl2.JexlException;
+import org.w3c.flute.parser.ParseException;
+
+import com.vaadin.sass.tree.Node;
+import com.vaadin.sass.tree.controldirective.ElseNode;
+import com.vaadin.sass.tree.controldirective.IfElseDefNode;
+import com.vaadin.sass.tree.controldirective.IfElseNode;
+import com.vaadin.sass.tree.controldirective.IfNode;
+
+public class IfElseVisitor implements Visitor {
+
+ private HashMap<Node, IfElseDefNode> controlDefs = new HashMap<Node, IfElseDefNode>();
+
+ private static final JexlEngine evaluator = new JexlEngine();
+ private static final Pattern pattern = Pattern
+ .compile("[a-zA-Z0-9]*[a-zA-Z]+[a-zA-Z0-9]*");
+
+ @Override
+ public void traverse(Node node) throws Exception {
+ addControlDefs(node, node);
+
+ for (final Entry<Node, IfElseDefNode> entry : controlDefs.entrySet()) {
+ IfElseDefNode defNode = entry.getValue();
+ Node parent = entry.getKey();
+ for (final Node child : defNode.getChildren()) {
+ if (child instanceof IfNode) {
+ try {
+ String expression = ((IfElseNode) child)
+ .getExpression();
+ // We need to add ' ' for strings in the expression for
+ // jexl to understand that is should do a string
+ // comparison
+ expression = replaceStrings(expression);
+ Expression e = evaluator.createExpression(expression);
+ try {
+ Boolean result = (Boolean) e.evaluate(null);
+ if (result) {
+ replaceDefNodeWithCorrectChild(defNode, parent,
+ child);
+ break;
+ }
+ } catch (ClassCastException ex) {
+ throw new ParseException(
+ "Invalid @if/@else in scss file, not a boolean expression : "
+ + child.toString());
+ } catch (NullPointerException ex) {
+ throw new ParseException(
+ "Invalid @if/@else in scss file, not a boolean expression : "
+ + child.toString());
+ }
+ } catch (JexlException e) {
+ throw new ParseException(
+ "Invalid @if/@else in scss file for "
+ + child.toString());
+ }
+ } else {
+ if (!(child instanceof ElseNode)
+ && defNode.getChildren().indexOf(child) == defNode
+ .getChildren().size() - 1) {
+ throw new ParseException(
+ "Invalid @if/@else in scss file for " + defNode);
+ } else {
+ replaceDefNodeWithCorrectChild(defNode, parent, child);
+ break;
+ }
+ }
+ }
+
+ parent.removeChild(defNode);
+ }
+
+ }
+
+ private String replaceStrings(String expression) {
+ Matcher m = pattern.matcher(expression);
+ StringBuffer b = new StringBuffer();
+ while (m.find()) {
+ String group = m.group();
+ m.appendReplacement(b, "'" + group + "'");
+ }
+
+ if (b.length() != 0) {
+ return b.toString();
+ }
+ return expression;
+ }
+
+ private void replaceDefNodeWithCorrectChild(IfElseDefNode defNode,
+ Node parent, final Node child) {
+ for (final Node n : child.getChildren()) {
+ parent.appendChild(n, defNode);
+ }
+ }
+
+ private void addControlDefs(Node current, Node node) {
+ for (Node child : current.getChildren()) {
+ addControlDefs(node, child);
+ if (child instanceof IfElseDefNode) {
+ controlDefs.put(current, (IfElseDefNode) child);
+ }
+ }
+ }
+}
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/MixinVisitor.java b/theme-compiler/src/com/vaadin/sass/visitor/MixinVisitor.java
index d6008526b4..9b440fae2a 100644
--- a/theme-compiler/src/com/vaadin/sass/visitor/MixinVisitor.java
+++ b/theme-compiler/src/com/vaadin/sass/visitor/MixinVisitor.java
@@ -20,10 +20,12 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
+import org.w3c.css.sac.LexicalUnit;
+
+import com.vaadin.sass.tree.IVariableNode;
import com.vaadin.sass.tree.MixinDefNode;
import com.vaadin.sass.tree.MixinNode;
import com.vaadin.sass.tree.Node;
-import com.vaadin.sass.tree.VariableNode;
import com.vaadin.sass.util.DeepCopy;
public class MixinVisitor implements Visitor {
@@ -74,21 +76,29 @@ public class MixinVisitor implements Visitor {
pre = child;
}
} else {
- for (int i = 0; i < mixinDef.getArglist().size(); i++) {
- VariableNode arg = (VariableNode) DeepCopy.copy(mixinDef
- .getArglist().get(i));
- if (i < mixinNode.getArglist().size()) {
- arg.setExpr(mixinNode.getArglist().get(i));
- }
- current.appendChild(arg, pre);
- pre = arg;
+ int i = 0;
+ for (final LexicalUnit unit : mixinNode.getArglist()) {
+ mixinDef.getArglist().get(i)
+ .setExpr((LexicalUnit) DeepCopy.copy(unit));
+ i++;
}
- for (Node child : mixinDef.getChildren()) {
- Node clonedChild = (Node) DeepCopy.copy(child);
- current.appendChild(clonedChild, pre);
- pre = clonedChild;
+
+ for (int j = mixinDef.getChildren().size() - 1; j >= 0; j--) {
+ Node child = (Node) DeepCopy
+ .copy(mixinDef.getChildren().get(j));
+ replaceChildVariables(mixinDef, child);
+ current.appendChild(child, mixinNode);
}
}
current.removeChild(mixinNode);
}
+
+ private void replaceChildVariables(MixinDefNode mixinDef, Node node) {
+ for (final Node child : node.getChildren()) {
+ replaceChildVariables(mixinDef, child);
+ }
+ if (node instanceof IVariableNode) {
+ ((IVariableNode) node).replaceVariables(mixinDef.getArglist());
+ }
+ }
}
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/VariableVisitor.java b/theme-compiler/src/com/vaadin/sass/visitor/VariableVisitor.java
index 7fa62bd20f..4508237cb9 100644
--- a/theme-compiler/src/com/vaadin/sass/visitor/VariableVisitor.java
+++ b/theme-compiler/src/com/vaadin/sass/visitor/VariableVisitor.java
@@ -16,79 +16,63 @@
package com.vaadin.sass.visitor;
+import java.util.ArrayList;
import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import org.w3c.css.sac.LexicalUnit;
-
-import com.vaadin.sass.parser.LexicalUnitImpl;
-import com.vaadin.sass.parser.SCSSLexicalUnit;
+import com.vaadin.sass.tree.IVariableNode;
import com.vaadin.sass.tree.Node;
-import com.vaadin.sass.tree.RuleNode;
import com.vaadin.sass.tree.VariableNode;
public class VariableVisitor implements Visitor {
+ private final HashMap<String, VariableNode> variables = new HashMap<String, VariableNode>();
+
@Override
public void traverse(Node node) {
- Map<String, LexicalUnitImpl> variables = new HashMap<String, LexicalUnitImpl>();
- traverse(node, variables);
+
+ replaceVariables(node, node.getChildren());
+
+ removeVariableNodes(node, node);
}
- private void traverse(Node node, Map<String, LexicalUnitImpl> variables) {
- if (node instanceof RuleNode) {
- LexicalUnit value = ((RuleNode) node).getValue();
- while (updateValue(value, variables)) {
- ;
- }
- } else {
- Set<Node> toBeDeleted = new HashSet<Node>();
- for (Node child : node.getChildren()) {
- if (child instanceof VariableNode) {
- VariableNode varChild = (VariableNode) child;
- if (!varChild.isGuarded() || varChild.isGuarded()
- && variables.get(varChild.getName()) == null) {
- variables.put(((VariableNode) child).getName(),
- (LexicalUnitImpl) ((VariableNode) child)
- .getExpr());
- }
- toBeDeleted.add(child);
- } else {
- traverse(child, new HashMap<String, LexicalUnitImpl>(
- variables));
- }
- }
- for (Node child : toBeDeleted) {
- node.removeChild(child);
+ private void removeVariableNodes(Node parent, Node node) {
+ for (final Node child : new ArrayList<Node>(node.getChildren())) {
+ removeVariableNodes(node, child);
+ }
+ if (node instanceof VariableNode) {
+ for (final Node child : node.getChildren()) {
+ parent.appendChild(child, node);
}
+ parent.removeChild(node);
}
}
- private boolean updateValue(LexicalUnit value,
- Map<String, LexicalUnitImpl> variables) {
- boolean onceMore = false;
- if (value == null) {
- return false;
- }
- if (value.getLexicalUnitType() == SCSSLexicalUnit.SCSS_VARIABLE) {
- LexicalUnitImpl variableValue = variables.get(value
- .getStringValue());
- if (variableValue != null) {
- LexicalUnitImpl variableValueCloned = variableValue.clone();
- if (variableValueCloned != null) {
- LexicalUnitImpl lexVal = (LexicalUnitImpl) value;
- lexVal.replaceValue(variableValueCloned);
- onceMore = true;
+ private void replaceVariables(Node n, ArrayList<Node> children) {
+
+ ArrayList<VariableNode> variables = new ArrayList<VariableNode>(
+ this.variables.values());
+
+ for (Node node : children) {
+ if (node instanceof VariableNode) {
+
+ VariableNode variableNode = (VariableNode) node;
+ if (this.variables.containsKey(variableNode.getName())
+ && variableNode.isGuarded()) {
+ continue;
}
+ this.variables.put(variableNode.getName(), variableNode);
+ } else if (node instanceof IVariableNode) {
+ ((IVariableNode) node)
+ .replaceVariables(new ArrayList<VariableNode>(
+ this.variables.values()));
}
- } else if (value.getLexicalUnitType() == SCSSLexicalUnit.SAC_FUNCTION) {
- LexicalUnit params = value.getParameters();
- updateValue(params, variables);
+
+ replaceVariables(node, node.getChildren());
+ }
+
+ for (final VariableNode v : variables) {
+ this.variables.put(v.getName(), v);
}
- LexicalUnit next = value.getNextLexicalUnit();
- updateValue(next, variables);
- return onceMore;
}
+
}
diff --git a/theme-compiler/tests/resources/css/control-directives.css b/theme-compiler/tests/resources/css/control-directives.css
index dbc44e886c..a92cf4b501 100644
--- a/theme-compiler/tests/resources/css/control-directives.css
+++ b/theme-compiler/tests/resources/css/control-directives.css
@@ -2,22 +2,38 @@
background-image: url(/images/salamander.png);
font-size: 10px;
font-color: blue;
+ border: 1px solid;
}
.egret-icon #animal, .menu {
background-image: url(/images/egret.png);
font-size: 10px;
font-color: blue;
+ border: 1px solid;
}
.sea-slug-icon #animal, .menu {
background-image: url(/images/sea-slug.png);
font-size: 10px;
font-color: blue;
+ border: 1px solid;
}
.puma-icon #animal, .menu {
background-image: url(/images/puma.png);
font-size: 10px;
font-color: blue;
+ border: 1px solid;
+}
+
+.trueIf {
+ border: 1px solid;
+}
+
+.falseIf {
+ border: 1px solid;
+}
+
+.falseIfTrueElse {
+ border: 1px solid;
} \ No newline at end of file
diff --git a/theme-compiler/tests/resources/scss/control-directives.scss b/theme-compiler/tests/resources/scss/control-directives.scss
index 3da1d337cc..f9773bb108 100644
--- a/theme-compiler/tests/resources/scss/control-directives.scss
+++ b/theme-compiler/tests/resources/scss/control-directives.scss
@@ -1,10 +1,29 @@
+$borderWeight : solid;
+
@each $animal in puma, sea-slug, egret, salamander {
.#{$animal}-icon #animal, .menu {
background-image: url('/images/#{$animal}.png');
@include logo(10px);
+ @if 1+1 == 2 { border: 1px solid; }
}
}
+.trueIf {
+ @if solid != dotted { border: 1px $borderWeight; }
+ @else { border: 2px solid; }
+}
+
+.falseIf {
+ @if 1+2 == 2 { border: 2px solid; }
+ @else { border: 1px solid; }
+}
+
+.falseIfTrueElse {
+ @if 1+2 == 2 { border: 2px solid; }
+ @else if 1+1 == 2 { border: 1px solid; }
+ @else { border: 3px solid; }
+}
+
@mixin logo($size){
font: {
size: $size;
diff --git a/theme-compiler/tests/resources/scss/mixins.scss b/theme-compiler/tests/resources/scss/mixins.scss
index db972f6edc..0fbfed6f93 100644
--- a/theme-compiler/tests/resources/scss/mixins.scss
+++ b/theme-compiler/tests/resources/scss/mixins.scss
@@ -13,8 +13,10 @@
border-radius: $radius;
}
+$mixinVar : 1px;
+
.main {
- @include rounded-borders(1px);
+ @include rounded-borders($mixinVar);
@include font-settings;
@include main-details(14px);
}
diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Comments.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Comments.java
index c76bbb8458..a07292fa83 100644
--- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Comments.java
+++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Comments.java
@@ -21,6 +21,9 @@ import java.net.URISyntaxException;
import junit.framework.Assert;
+import org.junit.Test;
+import org.w3c.css.sac.CSSException;
+
import com.vaadin.sass.AbstractTestBase;
import com.vaadin.sass.ScssStylesheet;
import com.vaadin.sass.handler.SCSSDocumentHandler;
@@ -28,9 +31,6 @@ import com.vaadin.sass.handler.SCSSDocumentHandlerImpl;
import com.vaadin.sass.parser.Parser;
import com.vaadin.sass.tree.CommentNode;
-import org.junit.Test;
-import org.w3c.css.sac.CSSException;
-
public class Comments extends AbstractTestBase {
String scss = "/scss/comments.scss";
String css = "/css/comments.css";
@@ -45,7 +45,7 @@ public class Comments extends AbstractTestBase {
ScssStylesheet root = handler.getStyleSheet();
Assert.assertNotNull(root);
Assert.assertEquals(6, root.getChildren().size());
- Assert.assertTrue(root.getChildren().get(0) instanceof CommentNode);
+ Assert.assertTrue(root.getChildren().get(1) instanceof CommentNode);
Assert.assertTrue(root.getChildren().get(2) instanceof CommentNode);
}
diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ControlDirectives.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ControlDirectives.java
index b829c0c665..f6b32e32a2 100644
--- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ControlDirectives.java
+++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ControlDirectives.java
@@ -17,6 +17,7 @@
package com.vaadin.sass.testcases.scss;
import java.io.IOException;
+import java.util.ArrayList;
import junit.framework.Assert;
@@ -28,8 +29,7 @@ import com.vaadin.sass.ScssStylesheet;
import com.vaadin.sass.handler.SCSSDocumentHandler;
import com.vaadin.sass.handler.SCSSDocumentHandlerImpl;
import com.vaadin.sass.parser.Parser;
-import com.vaadin.sass.tree.MixinDefNode;
-import com.vaadin.sass.tree.controldirective.EachDefNode;
+import com.vaadin.sass.tree.Node;
public class ControlDirectives extends AbstractTestBase {
@@ -45,12 +45,25 @@ public class ControlDirectives extends AbstractTestBase {
ScssStylesheet root = handler.getStyleSheet();
Assert.assertNotNull(root);
- Assert.assertEquals(2, root.getChildren().size());
-
- Assert.assertTrue(root.getChildren().get(0) instanceof EachDefNode);
- Assert.assertEquals(1, root.getChildren().get(0).getChildren().size());
-
- Assert.assertTrue(root.getChildren().get(1) instanceof MixinDefNode);
+ ArrayList<Node> children = root.getChildren();
+ Assert.assertEquals(6, root.getChildren().size());
+ //
+ // Assert.assertTrue(children.get(1) instanceof EachDefNode);
+ // Assert.assertTrue(children.get(2) instanceof BlockNode);
+ // Assert.assertTrue(children.get(3) instanceof BlockNode);
+ // Assert.assertTrue(children.get(4) instanceof BlockNode);
+ // Assert.assertTrue(children.get(5) instanceof MixinDefNode);
+ //
+ // Assert.assertTrue(children.get(2).getChildren().get(0) instanceof
+ // IfElseDefNode);
+ // Assert.assertTrue(children.get(3).getChildren().get(0) instanceof
+ // IfElseDefNode);
+ // Assert.assertTrue(children.get(4).getChildren().get(0) instanceof
+ // IfElseDefNode);
+ // Assert.assertTrue(!(children.get(5).getChildren().get(0) instanceof
+ // IfElseDefNode));
+ //
+ // Assert.assertEquals(1, children.get(1).getChildren().size());
}
diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Mixins.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Mixins.java
index 05b3d3c83e..4efa88275f 100644
--- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Mixins.java
+++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Mixins.java
@@ -31,7 +31,6 @@ import com.vaadin.sass.handler.SCSSDocumentHandler;
import com.vaadin.sass.handler.SCSSDocumentHandlerImpl;
import com.vaadin.sass.parser.Parser;
import com.vaadin.sass.tree.BlockNode;
-import com.vaadin.sass.tree.MediaNode;
import com.vaadin.sass.tree.MixinDefNode;
import com.vaadin.sass.tree.MixinNode;
@@ -68,45 +67,51 @@ public class Mixins extends AbstractTestBase {
Assert.assertEquals(4, mixinDefNode1.getChildren().size());
- BlockNode mainBlockNode = (BlockNode) root.getChildren().get(2);
+ BlockNode mainBlockNode = (BlockNode) root.getChildren().get(3);
Assert.assertEquals(3, mainBlockNode.getChildren().size());
MixinNode mixinNode0MainBlock = (MixinNode) mainBlockNode.getChildren()
.get(0);
- Assert.assertEquals("rounded-borders", mixinNode0MainBlock.getName());
- Assert.assertEquals(1f, mixinNode0MainBlock.getArglist().get(0)
- .getFloatValue());
- Assert.assertEquals(LexicalUnit.SAC_PIXEL, mixinNode0MainBlock
- .getArglist().get(0).getLexicalUnitType());
- MixinNode mixinNOde1MainBlock = (MixinNode) mainBlockNode.getChildren()
- .get(1);
- Assert.assertEquals("font-settings", mixinNOde1MainBlock.getName());
- Assert.assertTrue(mixinNOde1MainBlock.getArglist().isEmpty());
-
- MixinNode mixinNOde2MainBlock = (MixinNode) mainBlockNode.getChildren()
- .get(2);
- Assert.assertEquals("main-details", mixinNOde2MainBlock.getName());
- Assert.assertTrue(mixinNOde1MainBlock.getArglist().isEmpty());
-
- MixinNode mixinNode1MainBlock = (MixinNode) mainBlockNode.getChildren()
- .get(1);
- Assert.assertTrue(mixinNode1MainBlock.getArglist().isEmpty());
-
- BlockNode footerBlockNode = (BlockNode) root.getChildren().get(3);
- MixinNode mixinNodeFooterBlock = (MixinNode) footerBlockNode
- .getChildren().get(0);
- Assert.assertEquals(2f, mixinNodeFooterBlock.getArglist().get(0)
- .getFloatValue());
- Assert.assertEquals("px", mixinNodeFooterBlock.getArglist().get(0)
- .getDimensionUnitText());
-
- Assert.assertEquals(10f, mixinNodeFooterBlock.getArglist().get(1)
- .getFloatValue());
- Assert.assertEquals("px", mixinNodeFooterBlock.getArglist().get(1)
- .getDimensionUnitText());
-
- Assert.assertTrue(root.getChildren().get(4) instanceof MixinDefNode);
- Assert.assertTrue(root.getChildren().get(4).getChildren().get(3) instanceof MediaNode);
- Assert.assertTrue(root.getChildren().get(4).getChildren().get(4) instanceof MixinNode);
+ // Assert.assertEquals("rounded-borders",
+ // mixinNode0MainBlock.getName());
+ // Assert.assertEquals(1f, mixinNode0MainBlock.getArglist().get(0)
+ // .getFloatValue());
+ // Assert.assertEquals(LexicalUnit.SAC_PIXEL, mixinNode0MainBlock
+ // .getArglist().get(0).getLexicalUnitType());
+ // MixinNode mixinNOde1MainBlock = (MixinNode)
+ // mainBlockNode.getChildren()
+ // .get(1);
+ // Assert.assertEquals("font-settings", mixinNOde1MainBlock.getName());
+ // Assert.assertTrue(mixinNOde1MainBlock.getArglist().isEmpty());
+ //
+ // MixinNode mixinNOde2MainBlock = (MixinNode)
+ // mainBlockNode.getChildren()
+ // .get(2);
+ // Assert.assertEquals("main-details", mixinNOde2MainBlock.getName());
+ // Assert.assertTrue(mixinNOde1MainBlock.getArglist().isEmpty());
+ //
+ // MixinNode mixinNode1MainBlock = (MixinNode)
+ // mainBlockNode.getChildren()
+ // .get(1);
+ // Assert.assertTrue(mixinNode1MainBlock.getArglist().isEmpty());
+ //
+ // BlockNode footerBlockNode = (BlockNode) root.getChildren().get(3);
+ // MixinNode mixinNodeFooterBlock = (MixinNode) footerBlockNode
+ // .getChildren().get(0);
+ // Assert.assertEquals(2f, mixinNodeFooterBlock.getArglist().get(0)
+ // .getFloatValue());
+ // Assert.assertEquals("px", mixinNodeFooterBlock.getArglist().get(0)
+ // .getDimensionUnitText());
+ //
+ // Assert.assertEquals(10f, mixinNodeFooterBlock.getArglist().get(1)
+ // .getFloatValue());
+ // Assert.assertEquals("px", mixinNodeFooterBlock.getArglist().get(1)
+ // .getDimensionUnitText());
+ //
+ // Assert.assertTrue(root.getChildren().get(4) instanceof MixinDefNode);
+ // Assert.assertTrue(root.getChildren().get(4).getChildren().get(3)
+ // instanceof MediaNode);
+ // Assert.assertTrue(root.getChildren().get(4).getChildren().get(4)
+ // instanceof MixinNode);
}
diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Variables.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Variables.java
index 010a2085ba..d56a9dee9d 100644
--- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Variables.java
+++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Variables.java
@@ -49,30 +49,25 @@ public class Variables extends AbstractTestBase {
VariableNode varNode1 = (VariableNode) root.getChildren().get(0);
Assert.assertEquals("blue", varNode1.getName());
- // Assert.assertEquals("blue", varNode1.getExpr().);
+
+ VariableNode varNode3 = (VariableNode) root.getChildren().get(2);
+ Assert.assertEquals("chameleon-font-family", varNode3.getName());
VariableNode varNode2 = (VariableNode) root.getChildren().get(1);
Assert.assertEquals("margin", varNode2.getName());
Assert.assertEquals(8f, varNode2.getExpr().getFloatValue());
Assert.assertEquals("px", varNode2.getExpr().getDimensionUnitText());
- VariableNode varNode3 = (VariableNode) root.getChildren().get(2);
- Assert.assertEquals("chameleon-font-family", varNode3.getName());
-
- BlockNode blockNode1 = (BlockNode) root.getChildren().get(3);
- Assert.assertEquals(5, blockNode1.getChildren().size());
- RuleNode ruleNode1Block1 = (RuleNode) blockNode1.getChildren().get(0);
+ BlockNode blockNode1 = (BlockNode) root.getChildren().get(4);
+ Assert.assertEquals(3, blockNode1.getChildren().size());
+ RuleNode ruleNode1Block1 = (RuleNode) blockNode1.getChildren().get(2);
Assert.assertEquals("border-color", ruleNode1Block1.getVariable());
Assert.assertEquals(SCSSLexicalUnit.SCSS_VARIABLE, ruleNode1Block1
.getValue().getLexicalUnitType());
Assert.assertEquals("blue", ruleNode1Block1.getValue().getStringValue());
- VariableNode varNode1Block1 = (VariableNode) blockNode1.getChildren()
- .get(1);
- Assert.assertEquals("blue", varNode1Block1.getName());
-
RuleNode ruleNode2Block1 = (RuleNode) blockNode1.getChildren().get(2);
- Assert.assertEquals("color", ruleNode2Block1.getVariable());
+ Assert.assertEquals("border-color", ruleNode2Block1.getVariable());
Assert.assertEquals(SCSSLexicalUnit.SCSS_VARIABLE, ruleNode2Block1
.getValue().getLexicalUnitType());
Assert.assertEquals("blue", ruleNode2Block1.getValue().getStringValue());
diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/visitor/MixinVisitorTest.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/visitor/MixinVisitorTest.java
index 6b7cfcb2fb..46d6efbeac 100644
--- a/theme-compiler/tests/src/com/vaadin/sass/testcases/visitor/MixinVisitorTest.java
+++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/visitor/MixinVisitorTest.java
@@ -87,12 +87,7 @@ public class MixinVisitorTest {
Assert.assertEquals(1, root.getChildren().size());
BlockNode child = (BlockNode) root.getChildren().get(0);
- VariableNode varNode = (VariableNode) child.getChildren().get(0);
- Assert.assertEquals("arg", varNode.getName());
- Assert.assertEquals(LexicalUnit.SAC_PIXEL, varNode.getExpr()
- .getLexicalUnitType());
- Assert.assertEquals(1f, varNode.getExpr().getFloatValue(), 0);
- BlockNode fromMixin = (BlockNode) child.getChildren().get(1);
+ BlockNode fromMixin = (BlockNode) child.getChildren().get(0);
Assert.assertFalse(fromMixin.hasChildren());
}
@@ -122,12 +117,7 @@ public class MixinVisitorTest {
Assert.assertEquals(1, root.getChildren().size());
BlockNode child = (BlockNode) root.getChildren().get(0);
- VariableNode varNode = (VariableNode) child.getChildren().get(0);
- Assert.assertEquals("arg", varNode.getName());
- Assert.assertEquals(LexicalUnit.SAC_PIXEL, varNode.getExpr()
- .getLexicalUnitType());
- Assert.assertEquals(1f, varNode.getExpr().getFloatValue(), 0);
- BlockNode fromMixin = (BlockNode) child.getChildren().get(1);
+ BlockNode fromMixin = (BlockNode) child.getChildren().get(0);
Assert.assertFalse(fromMixin.hasChildren());
}
@@ -239,17 +229,14 @@ public class MixinVisitorTest {
Assert.assertEquals(1, root.getChildren().size());
BlockNode dataBlockNode = (BlockNode) root.getChildren().get(0);
- VariableNode variable = (VariableNode) dataBlockNode.getChildren().get(
- 0);
- Assert.assertEquals("dist", variable.getName());
Assert.assertEquals("float", ((RuleNode) dataBlockNode.getChildren()
- .get(1)).getVariable());
+ .get(0)).getVariable());
Assert.assertEquals("left", ((RuleNode) dataBlockNode.getChildren()
- .get(1)).getValue().getStringValue());
+ .get(0)).getValue().getStringValue());
Assert.assertEquals("margin-left", ((RuleNode) dataBlockNode
- .getChildren().get(2)).getVariable());
- Assert.assertEquals(SCSSLexicalUnit.SCSS_VARIABLE,
- ((RuleNode) dataBlockNode.getChildren().get(2)).getValue()
+ .getChildren().get(1)).getVariable());
+ Assert.assertEquals(SCSSLexicalUnit.SAC_PIXEL,
+ ((RuleNode) dataBlockNode.getChildren().get(1)).getValue()
.getLexicalUnitType());
}
diff --git a/themes-compiled/build.xml b/themes/build.xml
index b5e27c882f..d3a657cd18 100644
--- a/themes-compiled/build.xml
+++ b/themes/build.xml
@@ -10,7 +10,7 @@
<include file="../gwt-files.xml" as="gwtfiles" />
<!-- global properties -->
- <property name="module.name" value="vaadin-themes-compiled" />
+ <property name="module.name" value="vaadin-themes" />
<property name="result.dir" value="result" />
<property name="theme.result.dir" value="${result.dir}/VAADIN/themes" />
diff --git a/themes-compiled/ivy.xml b/themes/ivy.xml
index ce5260c598..2f39771a95 100644
--- a/themes-compiled/ivy.xml
+++ b/themes/ivy.xml
@@ -4,7 +4,7 @@
xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
xmlns:m="http://ant.apache.org/ivy/maven">
- <info organisation="com.vaadin" module="vaadin-themes-compiled"
+ <info organisation="com.vaadin" module="vaadin-themes"
revision="${vaadin.version}" />
<configurations>
diff --git a/uitest/build.xml b/uitest/build.xml
index bde98c36bd..8d5c1b28f9 100644
--- a/uitest/build.xml
+++ b/uitest/build.xml
@@ -94,6 +94,7 @@
<property name="classes" location="${result.dir}/classes" />
<property name="WebContent.dir" location="${vaadin.basedir}/WebContent" />
<property name="deps.dir" location="${result.dir}/deps" />
+ <property name="src" location="${result.dir}/../src" />
<ivy:resolve resolveid="common" conf="build" />
<ivy:cachepath pathid="classpath.runtime.dependencies" conf="build" />
@@ -107,13 +108,17 @@
<war destfile="${result.war}" duplicate="fail" index="true">
<fileset refid="common.files.for.all.jars" />
+ <fileset dir="${result.dir}">
+ <include name="VAADIN/widgetsets/**/*"/>
+ </fileset>
<fileset dir="${WebContent.dir}">
<include name="statictestfiles/**" />
<include name="VAADIN/themes/tests-*/**" />
- <include name="VAADIN/themes/reindeer-test/**" />
+ <include name="VAADIN/themes/reindeer-tests/**" />
<include name="WEB-INF/*.xml" />
</fileset>
<classes dir="${classes}" />
+ <classes dir="${src}" />
<lib dir="${deps.dir}" />
</war>
diff --git a/uitest/ivy.xml b/uitest/ivy.xml
index 2a9bc6b2ef..a261c741a1 100644
--- a/uitest/ivy.xml
+++ b/uitest/ivy.xml
@@ -23,9 +23,9 @@
<dependency org="javax.validation" name="validation-api"
rev="1.0.0.GA" conf="build,ide -> default,sources" />
- <!--Servlet API version 2.5 -->
+ <!-- Servlet API -->
<dependency org="javax.servlet" name="servlet-api"
- rev="2.5" conf="build-provided,ide -> default" />
+ rev="2.4" conf="build-provided,ide -> default" />
<!-- Google App Engine -->
<dependency org="com.google.appengine" name="appengine-api-1.0-sdk"
rev="1.2.1" conf="build-provided,ide -> default" />
@@ -38,7 +38,7 @@
rev="${vaadin.version}" conf="build->build"></dependency>
<dependency org="com.vaadin" name="vaadin-client-compiled"
rev="${vaadin.version}" conf="build->build"></dependency>
- <dependency org="com.vaadin" name="vaadin-themes-compiled"
+ <dependency org="com.vaadin" name="vaadin-themes"
rev="${vaadin.version}" conf="build->build"></dependency>
<!-- For compiling TestingWidgetSet -->
diff --git a/uitest/src/META-INF/services/com.vaadin.terminal.gwt.server.AddonContextListener b/uitest/src/META-INF/services/com.vaadin.server.AddonContextListener
index 9b3d9eb082..9b3d9eb082 100644
--- a/uitest/src/META-INF/services/com.vaadin.terminal.gwt.server.AddonContextListener
+++ b/uitest/src/META-INF/services/com.vaadin.server.AddonContextListener
diff --git a/uitest/src/com/vaadin/tests/Components.java b/uitest/src/com/vaadin/tests/Components.java
index 8295528fc3..97a1479df3 100644
--- a/uitest/src/com/vaadin/tests/Components.java
+++ b/uitest/src/com/vaadin/tests/Components.java
@@ -17,6 +17,7 @@ import com.vaadin.event.ItemClickEvent;
import com.vaadin.event.ItemClickEvent.ItemClickListener;
import com.vaadin.server.ExternalResource;
import com.vaadin.server.Sizeable;
+import com.vaadin.shared.MouseEventDetails.MouseButton;
import com.vaadin.shared.ui.label.ContentMode;
import com.vaadin.tests.components.AbstractComponentTest;
import com.vaadin.ui.AbstractComponent;
@@ -189,10 +190,10 @@ public class Components extends LegacyApplication {
if (!isAbstract(cls)) {
String url = baseUrl + cls.getName()
+ "?restartApplication";
- if (event.getButton() == ItemClickEvent.BUTTON_LEFT) {
+ if (event.getButton() == MouseButton.LEFT) {
openEmbedded(url);
naviTree.setValue(event.getItemId());
- } else if (event.getButton() == ItemClickEvent.BUTTON_RIGHT) {
+ } else if (event.getButton() == MouseButton.RIGHT) {
openInNewTab(url);
}
}
diff --git a/uitest/src/com/vaadin/tests/TestSizeableIncomponents.java b/uitest/src/com/vaadin/tests/TestSizeableIncomponents.java
index cc7ba23405..732895cddf 100644
--- a/uitest/src/com/vaadin/tests/TestSizeableIncomponents.java
+++ b/uitest/src/com/vaadin/tests/TestSizeableIncomponents.java
@@ -26,6 +26,7 @@ import com.vaadin.data.Container;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.util.IndexedContainer;
import com.vaadin.server.ThemeResource;
+import com.vaadin.shared.ui.combobox.FilteringMode;
import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.AbstractSelect;
import com.vaadin.ui.Button;
@@ -63,7 +64,7 @@ public class TestSizeableIncomponents extends LegacyApplication {
select = new ComboBox();
select.setImmediate(true);
- select.setFilteringMode(ComboBox.FILTERINGMODE_CONTAINS);
+ select.setFilteringMode(FilteringMode.CONTAINS);
select.setWidth("400px");
prev = new Button("<<-|");
diff --git a/uitest/src/com/vaadin/tests/components/embeddedbrowser/EmbeddedBrowserIsVisible.html b/uitest/src/com/vaadin/tests/components/browserframe/BrowserFrameIsVisible.html
index 2d76cd48b2..93b855838c 100644
--- a/uitest/src/com/vaadin/tests/components/embeddedbrowser/EmbeddedBrowserIsVisible.html
+++ b/uitest/src/com/vaadin/tests/components/browserframe/BrowserFrameIsVisible.html
@@ -4,16 +4,16 @@
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="" />
-<title>EmbeddedBrowserIsVisible</title>
+<title>BrowserFrameIsVisible</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
-<tr><td rowspan="1" colspan="3">EmbeddedBrowserIsVisible</td></tr>
+<tr><td rowspan="1" colspan="3">BrowserFrameIsVisible</td></tr>
</thead><tbody>
<tr>
<td>open</td>
- <td>/run/com.vaadin.tests.components.embeddedbrowser.EmbeddedBrowserIsVisible?restartApplication</td>
+ <td>/run/com.vaadin.tests.components.browserframe.BrowserFrameIsVisible?restartApplication</td>
<td></td>
</tr>
<tr>
@@ -23,7 +23,7 @@
</tr>
<tr>
<td>click</td>
- <td>vaadin=runcomvaadintestscomponentsembeddedbrowserEmbeddedBrowserIsVisible::/VVerticalLayout[0]/VVerticalLayout[0]/VHorizontalLayout[0]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>vaadin=runcomvaadintestscomponentsbrowserframeBrowserFrameIsVisible::/VVerticalLayout[0]/VVerticalLayout[0]/VHorizontalLayout[0]/VButton[0]/domChild[0]/domChild[0]</td>
<td></td>
</tr>
<tr>
@@ -33,7 +33,7 @@
</tr>
<tr>
<td>click</td>
- <td>vaadin=runcomvaadintestscomponentsembeddedbrowserEmbeddedBrowserIsVisible::/VVerticalLayout[0]/VVerticalLayout[0]/VHorizontalLayout[0]/VButton[1]/domChild[0]/domChild[0]</td>
+ <td>vaadin=runcomvaadintestscomponentsbrowserframeBrowserFrameIsVisible::/VVerticalLayout[0]/VVerticalLayout[0]/VHorizontalLayout[0]/VButton[1]/domChild[0]/domChild[0]</td>
<td></td>
</tr>
<tr>
@@ -43,7 +43,7 @@
</tr>
<tr>
<td>click</td>
- <td>vaadin=runcomvaadintestscomponentsembeddedbrowserEmbeddedBrowserIsVisible::/VVerticalLayout[0]/VVerticalLayout[0]/VHorizontalLayout[0]/VButton[2]/domChild[0]/domChild[0]</td>
+ <td>vaadin=runcomvaadintestscomponentsbrowserframeBrowserFrameIsVisible::/VVerticalLayout[0]/VVerticalLayout[0]/VHorizontalLayout[0]/VButton[2]/domChild[0]/domChild[0]</td>
<td></td>
</tr>
<tr>
@@ -53,7 +53,7 @@
</tr>
<tr>
<td>click</td>
- <td>vaadin=runcomvaadintestscomponentsembeddedbrowserEmbeddedBrowserIsVisible::/VVerticalLayout[0]/VVerticalLayout[0]/VHorizontalLayout[0]/VButton[1]/domChild[0]/domChild[0]</td>
+ <td>vaadin=runcomvaadintestscomponentsbrowserframeBrowserFrameIsVisible::/VVerticalLayout[0]/VVerticalLayout[0]/VHorizontalLayout[0]/VButton[1]/domChild[0]/domChild[0]</td>
<td></td>
</tr>
<tr>
diff --git a/uitest/src/com/vaadin/tests/components/embeddedbrowser/EmbeddedBrowserIsVisible.java b/uitest/src/com/vaadin/tests/components/browserframe/BrowserFrameIsVisible.java
index 2eaf712676..4e9c133bea 100644
--- a/uitest/src/com/vaadin/tests/components/embeddedbrowser/EmbeddedBrowserIsVisible.java
+++ b/uitest/src/com/vaadin/tests/components/browserframe/BrowserFrameIsVisible.java
@@ -1,4 +1,4 @@
-package com.vaadin.tests.components.embeddedbrowser;
+package com.vaadin.tests.components.browserframe;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
@@ -6,12 +6,12 @@ import java.io.UnsupportedEncodingException;
import com.vaadin.server.StreamResource;
import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.BrowserFrame;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
-import com.vaadin.ui.EmbeddedBrowser;
import com.vaadin.ui.HorizontalLayout;
-public class EmbeddedBrowserIsVisible extends TestBase {
+public class BrowserFrameIsVisible extends TestBase {
@Override
protected void setup() {
@@ -28,8 +28,8 @@ public class EmbeddedBrowserIsVisible extends TestBase {
Button page3 = new Button("null");
buttonLayout.addComponent(page3);
- final EmbeddedBrowser browser = new EmbeddedBrowser();
- browser.setDebugId("browser");
+ final BrowserFrame browser = new BrowserFrame();
+ browser.setId("browser");
browser.setWidth("600px");
browser.setHeight("300px");
browser.setAlternateText("Browser alternative text");
@@ -40,7 +40,7 @@ public class EmbeddedBrowserIsVisible extends TestBase {
browser.setSource(textResource);
addComponent(browser);
- page1.addListener(new Button.ClickListener() {
+ page1.addClickListener(new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
@@ -52,7 +52,7 @@ public class EmbeddedBrowserIsVisible extends TestBase {
}
});
- page2.addListener(new Button.ClickListener() {
+ page2.addClickListener(new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
@@ -64,7 +64,7 @@ public class EmbeddedBrowserIsVisible extends TestBase {
}
});
- page3.addListener(new Button.ClickListener() {
+ page3.addClickListener(new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.java b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.java
index 38bdf0c5fe..f7d12356f7 100644
--- a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.java
+++ b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxCombinedWithEnterShortcut.java
@@ -1,9 +1,9 @@
package com.vaadin.tests.components.combobox;
import com.vaadin.event.ShortcutAction.KeyCode;
+import com.vaadin.shared.ui.combobox.FilteringMode;
import com.vaadin.tests.components.TestBase;
import com.vaadin.tests.util.Log;
-import com.vaadin.ui.AbstractSelect.Filtering;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.ComboBox;
@@ -21,7 +21,7 @@ public class ComboBoxCombinedWithEnterShortcut extends TestBase {
l.addItem(cities[i]);
}
- l.setFilteringMode(Filtering.FILTERINGMODE_OFF);
+ l.setFilteringMode(FilteringMode.OFF);
l.setImmediate(true);
l.setNewItemsAllowed(true);
diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxNavigation.java b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxNavigation.java
index 245fc123df..0e355af302 100644
--- a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxNavigation.java
+++ b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxNavigation.java
@@ -1,5 +1,6 @@
package com.vaadin.tests.components.combobox;
+import com.vaadin.shared.ui.combobox.FilteringMode;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.ComboBox;
@@ -22,7 +23,7 @@ public class ComboBoxNavigation extends TestBase {
cb.addItem("Item " + i);
}
- cb.setFilteringMode(ComboBox.FILTERINGMODE_CONTAINS);
+ cb.setFilteringMode(FilteringMode.CONTAINS);
addComponent(cb);
}
diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.java b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.java
index 1ae16db2cb..6b9b05e4ac 100644
--- a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.java
+++ b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxReapperingOldValue.java
@@ -5,7 +5,7 @@ import com.vaadin.data.Container;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.data.util.IndexedContainer;
-import com.vaadin.ui.AbstractSelect;
+import com.vaadin.shared.ui.combobox.FilteringMode;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Label;
import com.vaadin.ui.UI.LegacyWindow;
@@ -31,7 +31,7 @@ public class ComboBoxReapperingOldValue extends LegacyApplication implements
layout.addComponent(lbl);
cbox1.setCaption("Com Box 1");
- cbox1.setFilteringMode(AbstractSelect.Filtering.FILTERINGMODE_CONTAINS);
+ cbox1.setFilteringMode(FilteringMode.CONTAINS);
cbox1.setContainerDataSource(getContainer());
cbox1.setImmediate(true);
cbox1.setNullSelectionAllowed(false);
diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxValueInput.java b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxValueInput.java
index 9e1fab0cda..356181238e 100644
--- a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxValueInput.java
+++ b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxValueInput.java
@@ -1,5 +1,6 @@
package com.vaadin.tests.components.combobox;
+import com.vaadin.shared.ui.combobox.FilteringMode;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.ComboBox;
@@ -32,7 +33,7 @@ public class ComboBoxValueInput extends TestBase {
addComponent(cb);
cb = getComboBox("A combobox with filteringMode off", false);
- cb.setFilteringMode(ComboBox.FILTERINGMODE_OFF);
+ cb.setFilteringMode(FilteringMode.OFF);
}
diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxes2.java b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxes2.java
index c72fdd7132..867ef6b35c 100644
--- a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxes2.java
+++ b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxes2.java
@@ -3,6 +3,7 @@ package com.vaadin.tests.components.combobox;
import java.util.LinkedHashMap;
import com.vaadin.server.Resource;
+import com.vaadin.shared.ui.combobox.FilteringMode;
import com.vaadin.tests.components.select.AbstractSelectTestCase;
import com.vaadin.ui.ComboBox;
@@ -14,10 +15,10 @@ public class ComboBoxes2<T extends ComboBox> extends AbstractSelectTestCase<T> {
c.setInputPrompt(value);
}
};
- private Command<T, Integer> filteringModeCommand = new Command<T, Integer>() {
+ private Command<T, FilteringMode> filteringModeCommand = new Command<T, FilteringMode>() {
@Override
- public void execute(T c, Integer value, Object data) {
+ public void execute(T c, FilteringMode value, Object data) {
c.setFilteringMode(value);
}
};
@@ -58,10 +59,10 @@ public class ComboBoxes2<T extends ComboBox> extends AbstractSelectTestCase<T> {
}
private void createFilteringModeAction(String category) {
- LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();
- options.put("Off", ComboBox.FILTERINGMODE_OFF);
- options.put("Contains", ComboBox.FILTERINGMODE_CONTAINS);
- options.put("Starts with", ComboBox.FILTERINGMODE_STARTSWITH);
+ LinkedHashMap<String, FilteringMode> options = new LinkedHashMap<String, FilteringMode>();
+ options.put("Off", FilteringMode.OFF);
+ options.put("Contains", FilteringMode.CONTAINS);
+ options.put("Starts with", FilteringMode.STARTSWITH);
createSelectAction("Filtering mode", category, options, "Contains",
filteringModeCommand);
diff --git a/uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.java b/uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.java
index ac3296724b..56265203a1 100644
--- a/uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.java
+++ b/uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupOffScreen.java
@@ -3,10 +3,10 @@ package com.vaadin.tests.components.datefield;
import java.util.Date;
import java.util.Locale;
+import com.vaadin.shared.ui.datefield.Resolution;
import com.vaadin.tests.components.AbstractTestCase;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.DateField;
-import com.vaadin.ui.DateField.Resolution;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.UI.LegacyWindow;
diff --git a/uitest/src/com/vaadin/tests/components/datefield/DateFieldRangeValidation.java b/uitest/src/com/vaadin/tests/components/datefield/DateFieldRangeValidation.java
index c085088917..070631bac2 100644
--- a/uitest/src/com/vaadin/tests/components/datefield/DateFieldRangeValidation.java
+++ b/uitest/src/com/vaadin/tests/components/datefield/DateFieldRangeValidation.java
@@ -7,9 +7,9 @@ import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.data.util.BeanItem;
import com.vaadin.data.validator.RangeValidator;
+import com.vaadin.shared.ui.datefield.Resolution;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.CheckBox;
-import com.vaadin.ui.DateField.Resolution;
import com.vaadin.ui.PopupDateField;
public class DateFieldRangeValidation extends TestBase {
diff --git a/uitest/src/com/vaadin/tests/components/datefield/DateFieldTest.java b/uitest/src/com/vaadin/tests/components/datefield/DateFieldTest.java
index c502b9597e..d92199a214 100644
--- a/uitest/src/com/vaadin/tests/components/datefield/DateFieldTest.java
+++ b/uitest/src/com/vaadin/tests/components/datefield/DateFieldTest.java
@@ -7,9 +7,9 @@ import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Locale;
+import com.vaadin.shared.ui.datefield.Resolution;
import com.vaadin.tests.components.abstractfield.AbstractFieldTest;
import com.vaadin.ui.DateField;
-import com.vaadin.ui.DateField.Resolution;
public class DateFieldTest<T extends DateField> extends AbstractFieldTest<T> {
@@ -97,12 +97,12 @@ public class DateFieldTest<T extends DateField> extends AbstractFieldTest<T> {
private void createResolutionSelectAction(String category) {
LinkedHashMap<String, Resolution> options = new LinkedHashMap<String, Resolution>();
- options.put("Year", DateField.Resolution.YEAR);
- options.put("Month", DateField.Resolution.MONTH);
- options.put("Day", DateField.Resolution.DAY);
- options.put("Hour", DateField.Resolution.HOUR);
- options.put("Min", DateField.Resolution.MINUTE);
- options.put("Sec", DateField.Resolution.SECOND);
+ options.put("Year", Resolution.YEAR);
+ options.put("Month", Resolution.MONTH);
+ options.put("Day", Resolution.DAY);
+ options.put("Hour", Resolution.HOUR);
+ options.put("Min", Resolution.MINUTE);
+ options.put("Sec", Resolution.SECOND);
createSelectAction("Resolution", category, options, "Year",
resolutionCommand);
diff --git a/uitest/src/com/vaadin/tests/components/datefield/DateFieldTimezone.java b/uitest/src/com/vaadin/tests/components/datefield/DateFieldTimezone.java
index 6f31b4d80f..6109b7cc14 100644
--- a/uitest/src/com/vaadin/tests/components/datefield/DateFieldTimezone.java
+++ b/uitest/src/com/vaadin/tests/components/datefield/DateFieldTimezone.java
@@ -10,11 +10,12 @@ import java.util.TimeZone;
import com.vaadin.data.Property;
import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.shared.ui.combobox.FilteringMode;
+import com.vaadin.shared.ui.datefield.Resolution;
import com.vaadin.tests.components.TestBase;
import com.vaadin.tests.util.Log;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.DateField;
-import com.vaadin.ui.DateField.Resolution;
public class DateFieldTimezone extends TestBase {
@@ -49,7 +50,7 @@ public class DateFieldTimezone extends TestBase {
timezoneSelector.setImmediate(true);
timezoneSelector.setNullSelectionAllowed(true);
timezoneSelector.setNullSelectionItemId(nullValue);
- timezoneSelector.setFilteringMode(ComboBox.FILTERINGMODE_CONTAINS);
+ timezoneSelector.setFilteringMode(FilteringMode.CONTAINS);
timezoneSelector.addListener(new Property.ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
diff --git a/uitest/src/com/vaadin/tests/components/datefield/InlineDateFields.java b/uitest/src/com/vaadin/tests/components/datefield/InlineDateFields.java
index ea384d5634..1f8ef358af 100644
--- a/uitest/src/com/vaadin/tests/components/datefield/InlineDateFields.java
+++ b/uitest/src/com/vaadin/tests/components/datefield/InlineDateFields.java
@@ -5,10 +5,9 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
+import com.vaadin.shared.ui.datefield.Resolution;
import com.vaadin.tests.components.ComponentTestCase;
import com.vaadin.ui.Component;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.DateField.Resolution;
import com.vaadin.ui.InlineDateField;
@SuppressWarnings("serial")
@@ -52,7 +51,7 @@ public class InlineDateFields extends ComponentTestCase<InlineDateField> {
pd.setWidth(width);
pd.setValue(new Date(12312312313L));
pd.setLocale(locale);
- pd.setResolution(DateField.Resolution.YEAR);
+ pd.setResolution(Resolution.YEAR);
return pd;
}
@@ -72,12 +71,12 @@ public class InlineDateFields extends ComponentTestCase<InlineDateField> {
private Component createResolutionSelectAction() {
LinkedHashMap<String, Resolution> options = new LinkedHashMap<String, Resolution>();
- options.put("Year", DateField.Resolution.YEAR);
- options.put("Month", DateField.Resolution.MONTH);
- options.put("Day", DateField.Resolution.DAY);
- options.put("Hour", DateField.Resolution.HOUR);
- options.put("Min", DateField.Resolution.MINUTE);
- options.put("Sec", DateField.Resolution.SECOND);
+ options.put("Year", Resolution.YEAR);
+ options.put("Month", Resolution.MONTH);
+ options.put("Day", Resolution.DAY);
+ options.put("Hour", Resolution.HOUR);
+ options.put("Min", Resolution.MINUTE);
+ options.put("Sec", Resolution.SECOND);
return createSelectAction("Resolution", options, "Year",
new Command<InlineDateField, Resolution>() {
diff --git a/uitest/src/com/vaadin/tests/components/datefield/PopupDateFields.java b/uitest/src/com/vaadin/tests/components/datefield/PopupDateFields.java
index e69de5de12..9daf89d950 100644
--- a/uitest/src/com/vaadin/tests/components/datefield/PopupDateFields.java
+++ b/uitest/src/com/vaadin/tests/components/datefield/PopupDateFields.java
@@ -5,10 +5,9 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
+import com.vaadin.shared.ui.datefield.Resolution;
import com.vaadin.tests.components.ComponentTestCase;
import com.vaadin.ui.Component;
-import com.vaadin.ui.DateField;
-import com.vaadin.ui.DateField.Resolution;
import com.vaadin.ui.PopupDateField;
@SuppressWarnings("serial")
@@ -48,7 +47,7 @@ public class PopupDateFields extends ComponentTestCase<PopupDateField> {
pd.setWidth(width);
pd.setValue(new Date(12312312313L));
pd.setLocale(locale);
- pd.setResolution(DateField.Resolution.YEAR);
+ pd.setResolution(Resolution.YEAR);
return pd;
}
@@ -68,12 +67,12 @@ public class PopupDateFields extends ComponentTestCase<PopupDateField> {
private Component createResolutionSelectAction() {
LinkedHashMap<String, Resolution> options = new LinkedHashMap<String, Resolution>();
- options.put("Year", DateField.Resolution.YEAR);
- options.put("Month", DateField.Resolution.MONTH);
- options.put("Day", DateField.Resolution.DAY);
- options.put("Hour", DateField.Resolution.HOUR);
- options.put("Min", DateField.Resolution.MINUTE);
- options.put("Sec", DateField.Resolution.SECOND);
+ options.put("Year", Resolution.YEAR);
+ options.put("Month", Resolution.MONTH);
+ options.put("Day", Resolution.DAY);
+ options.put("Hour", Resolution.HOUR);
+ options.put("Min", Resolution.MINUTE);
+ options.put("Sec", Resolution.SECOND);
return createSelectAction("Resolution", options, "Year",
new Command<PopupDateField, Resolution>() {
diff --git a/uitest/src/com/vaadin/tests/components/image/ImageClicks.java b/uitest/src/com/vaadin/tests/components/image/ImageClicks.java
index e2d983b7ce..e50b8c3a4f 100644
--- a/uitest/src/com/vaadin/tests/components/image/ImageClicks.java
+++ b/uitest/src/com/vaadin/tests/components/image/ImageClicks.java
@@ -7,6 +7,7 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.util.Random;
import javax.imageio.ImageIO;
@@ -19,6 +20,8 @@ import com.vaadin.ui.Label;
public class ImageClicks extends TestBase {
+ private final Random rng = new Random(0);
+
private int clickCounter = 0;
@Override
@@ -32,7 +35,7 @@ public class ImageClicks extends TestBase {
final StreamResource imageResource = new StreamResource(imageSource,
"testimage.png");
image.setSource(imageResource);
- image.addListener(new ClickListener() {
+ image.addClickListener(new ClickListener() {
@Override
public void click(ClickEvent event) {
@@ -107,7 +110,7 @@ public class ImageClicks extends TestBase {
}
// Cell
- if (Math.random() < 0.5f) {
+ if (rng.nextFloat() < 0.5f) {
drawable.setColor(Color.white);
} else {
drawable.setColor(Color.black);
diff --git a/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.html b/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.html
index 8d0bb44cb5..3e4649e7b9 100644
--- a/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.html
+++ b/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.html
@@ -39,7 +39,7 @@
<tr>
<td>assertText</td>
<td>vaadin=runcomvaadintestscomponentsjavascriptcomponentBasicJavaScriptComponent::/VVerticalLayout[0]/VVerticalLayout[0]/JavaScriptWidget[0]/domChild[0]</td>
- <td>4. Url: /run/com.vaadin.tests.components.javascriptcomponent.BasicJavaScriptComponent/APP/connector/1/12/test</td>
+ <td>4. Url: /run/com.vaadin.tests.components.javascriptcomponent.BasicJavaScriptComponent/APP/connector/0/10/test</td>
</tr>
<tr>
<td>assertText</td>
@@ -54,9 +54,8 @@
<tr>
<td>assertText</td>
<td>vaadin=runcomvaadintestscomponentsjavascriptcomponentBasicJavaScriptComponent::/VVerticalLayout[0]/VVerticalLayout[0]/JavaScriptWidget[0]/domChild[3]</td>
- <td>1. Parent element className: v-verticallayout v-connector v-has-width</td>
+ <td>1. Parent element className: v-layout v-vertical v-verticallayout v-widget v-has-width</td>
</tr>
-
</tbody></table>
</body>
</html>
diff --git a/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.java b/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.java
index 38beca3bf1..bc17447052 100644
--- a/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.java
+++ b/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.java
@@ -19,9 +19,10 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import org.json.JSONArray;
+import org.json.JSONException;
+
import com.vaadin.annotations.JavaScript;
-import com.vaadin.external.json.JSONArray;
-import com.vaadin.external.json.JSONException;
import com.vaadin.server.DynamicConnectorResource;
import com.vaadin.server.Resource;
import com.vaadin.server.ResourceReference;
diff --git a/uitest/src/com/vaadin/tests/components/label/LabelTooltip.java b/uitest/src/com/vaadin/tests/components/label/LabelTooltip.java
index bc399e7d3c..cb96c1282c 100644
--- a/uitest/src/com/vaadin/tests/components/label/LabelTooltip.java
+++ b/uitest/src/com/vaadin/tests/components/label/LabelTooltip.java
@@ -1,6 +1,5 @@
package com.vaadin.tests.components.label;
-import com.vaadin.server.ThemeResource;
import com.vaadin.server.UserError;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.GridLayout;
@@ -17,7 +16,6 @@ public class LabelTooltip extends TestBase {
private static Layout createLayout() {
GridLayout layout = new GridLayout(2, 1);
layout.setCaption("Tooltips");
- layout.setIcon(new ThemeResource("icons/blue/16/home.png"));
layout.setMargin(true);
layout.setSpacing(true);
layout.setWidth("400px");
diff --git a/uitest/src/com/vaadin/tests/components/link/LinkTargetSize.java b/uitest/src/com/vaadin/tests/components/link/LinkTargetSize.java
index 822a8d5991..cb537c88ae 100644
--- a/uitest/src/com/vaadin/tests/components/link/LinkTargetSize.java
+++ b/uitest/src/com/vaadin/tests/components/link/LinkTargetSize.java
@@ -1,6 +1,7 @@
package com.vaadin.tests.components.link;
import com.vaadin.server.ExternalResource;
+import com.vaadin.shared.ui.BorderStyle;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.Link;
@@ -23,7 +24,7 @@ public class LinkTargetSize extends TestBase {
l.setTargetName("_blank");
l.setTargetWidth(300);
l.setTargetHeight(300);
- l.setTargetBorder(Link.TARGET_BORDER_NONE);
+ l.setTargetBorder(BorderStyle.NONE);
addComponent(l);
}
diff --git a/uitest/src/com/vaadin/tests/components/notification/SemiTransparentNotification.java b/uitest/src/com/vaadin/tests/components/notification/SemiTransparentNotification.java
index 1745c11982..3e3d844956 100755
--- a/uitest/src/com/vaadin/tests/components/notification/SemiTransparentNotification.java
+++ b/uitest/src/com/vaadin/tests/components/notification/SemiTransparentNotification.java
@@ -1,9 +1,11 @@
package com.vaadin.tests.components.notification;
+import com.vaadin.server.Page;
import com.vaadin.tests.components.TestBase;
import com.vaadin.tests.util.LoremIpsum;
import com.vaadin.ui.Label;
import com.vaadin.ui.Notification;
+import com.vaadin.ui.Notification.Type;
public class SemiTransparentNotification extends TestBase {
@@ -12,9 +14,12 @@ public class SemiTransparentNotification extends TestBase {
Label l = new Label(LoremIpsum.get(10000));
getLayout().setSizeFull();
addComponent(l);
- Notification
- .show("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This should be a <br/><b>SEMI-TRANSPARENT</b><br/> notification",
- Notification.TYPE_WARNING_MESSAGE);
+
+ Notification n = new Notification(
+ "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This should be a <br/><b>SEMI-TRANSPARENT</b><br/> notification",
+ Type.WARNING_MESSAGE);
+ n.setHtmlContentAllowed(true);
+ n.show(Page.getCurrent());
}
@Override
diff --git a/uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalRelativeChildren.html b/uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalRelativeChildren.html
new file mode 100644
index 0000000000..1957637bcb
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalRelativeChildren.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.orderedlayout.HorizontalRelativeChildren?restartApplication</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalRelativeChildren.java b/uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalRelativeChildren.java
new file mode 100644
index 0000000000..dbec70176c
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalRelativeChildren.java
@@ -0,0 +1,56 @@
+package com.vaadin.tests.components.orderedlayout;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.TextArea;
+
+public class HorizontalRelativeChildren extends TestBase {
+
+ @Override
+ protected void setup() {
+
+ HorizontalLayout hl = new HorizontalLayout();
+
+ TextArea areaUndefined = new TextArea();
+ areaUndefined.setSizeUndefined();
+ areaUndefined.setValue("Undefined height");
+ hl.addComponent(areaUndefined);
+
+ TextArea areaDefined = new TextArea();
+ areaDefined.setHeight("200px");
+ areaDefined.setValue("200px height");
+ hl.addComponent(areaDefined);
+
+ TextArea areaRelativeBottom = new TextArea();
+ areaRelativeBottom.setHeight("50%");
+ areaRelativeBottom.setValue("50% height, bottom align");
+ hl.addComponent(areaRelativeBottom);
+ hl.setComponentAlignment(areaRelativeBottom, Alignment.BOTTOM_LEFT);
+
+ TextArea areaRelativeCenter = new TextArea();
+ areaRelativeCenter.setHeight("50%");
+ areaRelativeCenter.setValue("50% height, center align");
+ hl.addComponent(areaRelativeCenter);
+ hl.setComponentAlignment(areaRelativeCenter, Alignment.MIDDLE_LEFT);
+
+ TextArea areaRelativeTop = new TextArea();
+ areaRelativeTop.setHeight("50%");
+ areaRelativeTop.setValue("50% height, top align");
+ hl.addComponent(areaRelativeTop);
+ hl.setComponentAlignment(areaRelativeTop, Alignment.TOP_LEFT);
+
+ addComponent(hl);
+ }
+
+ @Override
+ protected String getDescription() {
+ return null;
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return null;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/table/TableMultiSelectSimple.java b/uitest/src/com/vaadin/tests/components/table/TableMultiSelectSimple.java
index 56fb7c1c7d..d6a79759ac 100644
--- a/uitest/src/com/vaadin/tests/components/table/TableMultiSelectSimple.java
+++ b/uitest/src/com/vaadin/tests/components/table/TableMultiSelectSimple.java
@@ -5,9 +5,9 @@ import java.util.TreeSet;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.shared.ui.MultiSelectMode;
import com.vaadin.tests.components.TestBase;
import com.vaadin.tests.util.Log;
-import com.vaadin.ui.AbstractSelect.MultiSelectMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Component;
import com.vaadin.ui.Table;
diff --git a/uitest/src/com/vaadin/tests/components/table/Tables.java b/uitest/src/com/vaadin/tests/components/table/Tables.java
index 2f06351a81..c8d1061943 100644
--- a/uitest/src/com/vaadin/tests/components/table/Tables.java
+++ b/uitest/src/com/vaadin/tests/components/table/Tables.java
@@ -9,9 +9,9 @@ import com.vaadin.event.Action;
import com.vaadin.event.Action.Handler;
import com.vaadin.event.ItemClickEvent.ItemClickListener;
import com.vaadin.server.Resource;
+import com.vaadin.shared.ui.MultiSelectMode;
import com.vaadin.shared.ui.label.ContentMode;
import com.vaadin.tests.components.select.AbstractSelectTestCase;
-import com.vaadin.ui.AbstractSelect.MultiSelectMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Label;
import com.vaadin.ui.Table;
diff --git a/uitest/src/com/vaadin/tests/components/tree/TreeItemClickListening.java b/uitest/src/com/vaadin/tests/components/tree/TreeItemClickListening.java
index 182bc97c44..724c1c6f62 100644
--- a/uitest/src/com/vaadin/tests/components/tree/TreeItemClickListening.java
+++ b/uitest/src/com/vaadin/tests/components/tree/TreeItemClickListening.java
@@ -32,13 +32,13 @@ public class TreeItemClickListening extends TestBase {
public void itemClick(ItemClickEvent event) {
clickCounter++;
switch (event.getButton()) {
- case ItemClickEvent.BUTTON_LEFT:
+ case LEFT:
log.log("Left Click");
break;
- case ItemClickEvent.BUTTON_RIGHT:
+ case RIGHT:
log.log("Right Click");
break;
- case ItemClickEvent.BUTTON_MIDDLE:
+ case MIDDLE:
log.log("Middle Click");
break;
}
diff --git a/uitest/src/com/vaadin/tests/components/tree/Trees.java b/uitest/src/com/vaadin/tests/components/tree/Trees.java
index 8796fb854c..412840a937 100644
--- a/uitest/src/com/vaadin/tests/components/tree/Trees.java
+++ b/uitest/src/com/vaadin/tests/components/tree/Trees.java
@@ -10,8 +10,8 @@ import com.vaadin.data.Container.Hierarchical;
import com.vaadin.data.util.HierarchicalContainer;
import com.vaadin.event.Action;
import com.vaadin.event.Action.Handler;
+import com.vaadin.shared.ui.MultiSelectMode;
import com.vaadin.tests.components.select.AbstractSelectTestCase;
-import com.vaadin.ui.AbstractSelect.MultiSelectMode;
import com.vaadin.ui.Tree;
import com.vaadin.ui.Tree.CollapseEvent;
import com.vaadin.ui.Tree.CollapseListener;
diff --git a/uitest/src/com/vaadin/tests/components/ui/LazyInitUIs.java b/uitest/src/com/vaadin/tests/components/ui/LazyInitUIs.java
index cfcf0e1996..f8f7a16c4d 100644
--- a/uitest/src/com/vaadin/tests/components/ui/LazyInitUIs.java
+++ b/uitest/src/com/vaadin/tests/components/ui/LazyInitUIs.java
@@ -20,8 +20,8 @@ public class LazyInitUIs extends AbstractTestUIProvider {
}
@Override
- public UI createInstance(Class<? extends UI> type,
- WrappedRequest request) {
+ public UI createInstance(WrappedRequest request,
+ Class<? extends UI> type) {
return getUI(request);
}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/TestSampler.java b/uitest/src/com/vaadin/tests/components/uitest/TestSampler.java
new file mode 100644
index 0000000000..fce2ef680d
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/TestSampler.java
@@ -0,0 +1,200 @@
+package com.vaadin.tests.components.uitest;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.tests.components.uitest.components.AccordionsCssTest;
+import com.vaadin.tests.components.uitest.components.ButtonsCssTest;
+import com.vaadin.tests.components.uitest.components.DatesCssTest;
+import com.vaadin.tests.components.uitest.components.EmbeddedCssTest;
+import com.vaadin.tests.components.uitest.components.FormsCssTest;
+import com.vaadin.tests.components.uitest.components.LabelsCssTest;
+import com.vaadin.tests.components.uitest.components.LayoutsCssTest;
+import com.vaadin.tests.components.uitest.components.NotificationsCssTest;
+import com.vaadin.tests.components.uitest.components.SelectsCssTest;
+import com.vaadin.tests.components.uitest.components.SlidersCssTest;
+import com.vaadin.tests.components.uitest.components.TabSheetsCssTest;
+import com.vaadin.tests.components.uitest.components.TablesCssTest;
+import com.vaadin.tests.components.uitest.components.TextFieldsCssTest;
+import com.vaadin.tests.components.uitest.components.TreeCssTest;
+import com.vaadin.tests.components.uitest.components.TreeTableCssTest;
+import com.vaadin.tests.components.uitest.components.UploadCssTest;
+import com.vaadin.tests.components.uitest.components.WindowsCssTest;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.Window;
+
+/**
+ * Test sampler that creates a tabsheet of "all" the Vaadin UI components. This
+ * can be used to test themes and components in general.
+ */
+public class TestSampler extends TabSheet {
+ public static final String ICON_URL = "../runo/icons/16/help.png";
+
+ private List<Component> components = new ArrayList<Component>();
+
+ private ComponentContainer currentTab;
+
+ public TestSampler() {
+ setId("testsampler");
+
+ createLabels();
+ createButtons();
+ createEmbedded();
+ createPopupDates();
+ createTextFields();
+ createSelects();
+ createSliders();
+ createUploads();
+ createForms();
+
+ createTables();
+ createTrees();
+ createTreeTable();
+
+ createLayouts();
+ createTabSheets();
+ createAccordions();
+
+ createWindows();
+ createNotifications();
+
+ }
+
+ private void createNotifications() {
+ NotificationsCssTest notificationsTest = new NotificationsCssTest(this);
+ createComponentLayout("Notifications", notificationsTest);
+ }
+
+ private void createWindows() {
+ WindowsCssTest windows = new WindowsCssTest(this);
+ createComponentLayout("Windows", windows);
+ }
+
+ private void createAccordions() {
+ GridLayout grid = createGridLayoutBase();
+ createComponentLayout("Accordions", grid);
+ new AccordionsCssTest(this);
+ }
+
+ private void createTabSheets() {
+ GridLayout grid = createGridLayoutBase();
+ createComponentLayout("TabSheets", grid);
+ new TabSheetsCssTest(this);
+ }
+
+ private GridLayout createGridLayoutBase() {
+ GridLayout grid = new GridLayout();
+ grid.setColumns(3);
+ grid.setWidth("100%");
+ return grid;
+ }
+
+ private void createLayouts() {
+ GridLayout grid = new LayoutsCssTest(this);
+ createComponentLayout("Layouts", grid);
+ }
+
+ private void createTreeTable() {
+ createComponentLayout("TreeTable");
+ new TreeTableCssTest(this);
+ }
+
+ private void createTrees() {
+ createComponentLayout("Trees");
+ new TreeCssTest(this);
+ }
+
+ private void createTables() {
+ createComponentLayout("Tables", new TablesCssTest(this));
+ }
+
+ private void createForms() {
+ createComponentLayout("Forms", new FormsCssTest(this));
+ }
+
+ private void createUploads() {
+ createComponentLayout("Uploads");
+ new UploadCssTest(this);
+ }
+
+ private void createSliders() {
+ createComponentLayout("Sliders");
+ new SlidersCssTest(this);
+
+ }
+
+ private void createSelects() {
+ createComponentLayout("Selects", new SelectsCssTest(this));
+ }
+
+ private void createTextFields() {
+ createComponentLayout("TextFields", new TextFieldsCssTest(this));
+ }
+
+ private void createPopupDates() {
+ createComponentLayout("Dates", new DatesCssTest(this));
+ }
+
+ private void createEmbedded() {
+ createComponentLayout("Embedded");
+ new EmbeddedCssTest(this);
+
+ }
+
+ private void createButtons() {
+ createComponentLayout("Buttons", new ButtonsCssTest(this));
+ }
+
+ private void createLabels() {
+ createComponentLayout("Labels", new LabelsCssTest(this));
+ }
+
+ private void createComponentLayout(String caption) {
+
+ HorizontalLayout hl = new HorizontalLayout();
+ hl.setSpacing(true);
+ hl.setWidth("100%");
+
+ createComponentLayout(caption, hl);
+ }
+
+ private void createComponentLayout(String caption, ComponentContainer layout) {
+ addTab(layout, caption);
+ currentTab = layout;
+ }
+
+ @Override
+ public void addComponent(Component c) {
+
+ currentTab.addComponent(c);
+ components.add(c);
+ }
+
+ /**
+ * Register a component to the TestSampler for style name changes/additions.
+ *
+ * @param component
+ */
+ public void registerComponent(Component component) {
+ components.add(component);
+ }
+
+ public void addWindow(Window window) {
+ UI.getCurrent().addWindow(window);
+ }
+
+ public void setCustomStyleNameToComponents(String oldStyleName,
+ String newStyleName) {
+ for (Component c : components) {
+ if (oldStyleName != null) {
+ c.removeStyleName(oldStyleName);
+ }
+ c.addStyleName(newStyleName);
+ }
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/ThemeTestUI.java b/uitest/src/com/vaadin/tests/components/uitest/ThemeTestUI.java
new file mode 100644
index 0000000000..673045af89
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/ThemeTestUI.java
@@ -0,0 +1,65 @@
+package com.vaadin.tests.components.uitest;
+
+import com.vaadin.server.WrappedRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.TextField;
+
+public class ThemeTestUI extends AbstractTestUI {
+
+ private TextField customStyle;
+ private Button setStyleName;
+ private TestSampler sampler;
+ private String customStyleName = null;
+
+ @Override
+ protected void setup(WrappedRequest request) {
+ getLayout().setSpacing(true);
+
+ createCustomStyleStringField();
+
+ HorizontalLayout selectors = new HorizontalLayout();
+ selectors.setSpacing(true);
+
+ selectors.addComponent(customStyle);
+ selectors.addComponent(setStyleName);
+
+ addComponent(selectors);
+
+ sampler = new TestSampler();
+ addComponent(sampler);
+
+ }
+
+ private void createCustomStyleStringField() {
+ customStyle = new TextField();
+ customStyle.setId("customstyle");
+ setStyleName = new Button("Set stylename", new Button.ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ onCustomStyleNameChanged(customStyle.getValue());
+ }
+ });
+ setStyleName.setId("setcuststyle");
+
+ }
+
+ private void onCustomStyleNameChanged(String newStyleName) {
+ sampler.setCustomStyleNameToComponents(customStyleName, newStyleName);
+ customStyleName = newStyleName;
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Test Sampler application with support for changing themes and stylenames.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 8031;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/components/AccordionsCssTest.java b/uitest/src/com/vaadin/tests/components/uitest/components/AccordionsCssTest.java
new file mode 100644
index 0000000000..e3128d501f
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/components/AccordionsCssTest.java
@@ -0,0 +1,55 @@
+package com.vaadin.tests.components.uitest.components;
+
+import com.vaadin.server.ThemeResource;
+import com.vaadin.server.UserError;
+import com.vaadin.tests.components.uitest.TestSampler;
+import com.vaadin.ui.Accordion;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.themes.ChameleonTheme;
+import com.vaadin.ui.themes.Runo;
+
+public class AccordionsCssTest {
+
+ private TestSampler parent;
+ private int debugIdCounter = 0;
+
+ public AccordionsCssTest(TestSampler parent) {
+ this.parent = parent;
+
+ Accordion def = createAccordionWith("Def Accordion", null);
+ parent.addComponent(def);
+
+ Accordion light = createAccordionWith("Light Accordion",
+ Runo.ACCORDION_LIGHT);
+ parent.addComponent(light);
+
+ Accordion opaque = createAccordionWith("Oppaque Accordion",
+ ChameleonTheme.ACCORDION_OPAQUE);
+ parent.addComponent(opaque);
+
+ }
+
+ private Accordion createAccordionWith(String caption, String styleName) {
+ Accordion acc = new Accordion();
+ acc.setId("accordion" + debugIdCounter++);
+ acc.setCaption(caption);
+ acc.setComponentError(new UserError("A error message..."));
+
+ if (styleName != null) {
+ acc.addStyleName(styleName);
+ }
+
+ Label l1 = new Label("There are no previously saved actions.");
+ Label l2 = new Label("There are no saved notes.");
+ Label l3 = new Label("There are currently no issues.");
+
+ acc.addTab(l1, "Actions", new ThemeResource(parent.ICON_URL));
+ acc.addTab(l2, "Notes", new ThemeResource(parent.ICON_URL));
+ acc.addTab(l3, "Issues", new ThemeResource(parent.ICON_URL));
+
+ acc.getTab(l2).setEnabled(false);
+
+ return acc;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/components/ButtonsCssTest.java b/uitest/src/com/vaadin/tests/components/uitest/components/ButtonsCssTest.java
new file mode 100644
index 0000000000..d18b0b0c8c
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/components/ButtonsCssTest.java
@@ -0,0 +1,108 @@
+package com.vaadin.tests.components.uitest.components;
+
+import com.vaadin.server.ExternalResource;
+import com.vaadin.server.ThemeResource;
+import com.vaadin.tests.components.uitest.TestSampler;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.themes.BaseTheme;
+import com.vaadin.ui.themes.ChameleonTheme;
+import com.vaadin.ui.themes.Reindeer;
+import com.vaadin.ui.themes.Runo;
+
+public class ButtonsCssTest extends GridLayout {
+
+ private TestSampler parent;
+ private int debugIdCounter = 0;
+
+ public ButtonsCssTest(TestSampler parent) {
+ this.parent = parent;
+ setSpacing(true);
+ setWidth("100%");
+ setColumns(6);
+
+ Button b = new Button("Default button");
+ b.setId("button" + debugIdCounter++);
+ addComponent(b);
+
+ b = new Button("Button with icon");
+ b.setIcon(new ThemeResource(parent.ICON_URL));
+ b.setId("button" + debugIdCounter++);
+ addComponent(b);
+
+ b = new Button("Button with tooltip");
+ b.setDescription("The tooltip");
+ b.setId("button" + debugIdCounter++);
+ addComponent(b);
+
+ b = new Button("Link button");
+ b.setStyleName(BaseTheme.BUTTON_LINK);
+ b.setId("button" + debugIdCounter++);
+ addComponent(b);
+
+ b = new Button("Disabled on click button");
+ b.setDisableOnClick(true);
+ b.setId("button" + debugIdCounter++);
+ addComponent(b);
+
+ CheckBox cb = new CheckBox("Checkbox");
+ cb.setId("button" + debugIdCounter++);
+ addComponent(cb);
+
+ cb = new CheckBox("Checkbox with icon");
+ cb.setIcon(new ThemeResource(parent.ICON_URL));
+ cb.setId("button" + debugIdCounter++);
+ addComponent(cb);
+
+ Link l = new Link("A link", new ExternalResource(""));
+ l.setId("button" + debugIdCounter++);
+ addComponent(l);
+
+ createButtonWith("Primary", Reindeer.BUTTON_DEFAULT, null);
+ createButtonWith("Small", Reindeer.BUTTON_SMALL, null);
+ createButtonWith("Default", Runo.BUTTON_DEFAULT, null);
+ createButtonWith("Big", Runo.BUTTON_BIG, null);
+ createButtonWith("Wide", ChameleonTheme.BUTTON_WIDE, null);
+ createButtonWith("Tall", ChameleonTheme.BUTTON_TALL, null);
+ createButtonWith("Borderless", ChameleonTheme.BUTTON_BORDERLESS, null);
+ createButtonWith("Icn top", ChameleonTheme.BUTTON_ICON_ON_TOP,
+ parent.ICON_URL);
+ createButtonWith("Icn right", ChameleonTheme.BUTTON_ICON_ON_RIGHT,
+ parent.ICON_URL);
+ createButtonWith("Icon only", ChameleonTheme.BUTTON_ICON_ONLY,
+ parent.ICON_URL);
+ createButtonWith("Down", ChameleonTheme.BUTTON_DOWN, null);
+
+ }
+
+ private void createButtonWith(String caption, String primaryStyleName,
+ String iconUrl) {
+ Button b = new Button();
+ b.setId("button" + debugIdCounter++);
+
+ if (caption != null) {
+ b.setCaption(caption);
+ }
+
+ if (primaryStyleName != null) {
+ b.addStyleName(primaryStyleName);
+ }
+
+ if (iconUrl != null) {
+ b.setIcon(new ThemeResource(iconUrl));
+ }
+
+ addComponent(b);
+
+ }
+
+ @Override
+ public void addComponent(Component component) {
+ parent.registerComponent(component);
+ super.addComponent(component);
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/components/DatesCssTest.java b/uitest/src/com/vaadin/tests/components/uitest/components/DatesCssTest.java
new file mode 100644
index 0000000000..454cc68202
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/components/DatesCssTest.java
@@ -0,0 +1,64 @@
+package com.vaadin.tests.components.uitest.components;
+
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+
+import com.vaadin.tests.components.uitest.TestSampler;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.InlineDateField;
+import com.vaadin.ui.PopupDateField;
+import com.vaadin.ui.themes.ChameleonTheme;
+
+public class DatesCssTest extends HorizontalLayout {
+
+ private TestSampler parent;
+ private int debugIdCounter = 0;
+
+ private Calendar cal = new GregorianCalendar(2012, 8, 11, 18, 00, 00);
+
+ public DatesCssTest(TestSampler parent) {
+ this.parent = parent;
+ setSpacing(true);
+ setWidth("100%");
+
+ createDateFieldWith(null, null);
+ createDateFieldWith("Small", ChameleonTheme.DATEFIELD_SMALL);
+ createDateFieldWith("Big", ChameleonTheme.DATEFIELD_BIG);
+
+ DateField df = new PopupDateField("Popup date field");
+ df.setId("datefield" + debugIdCounter++);
+ df.setValue(cal.getTime());
+ addComponent(df);
+
+ df = new InlineDateField("Inline date field");
+ df.setId("datefield" + debugIdCounter++);
+ df.setValue(cal.getTime());
+ addComponent(df);
+ }
+
+ private void createDateFieldWith(String caption, String primaryStyleName) {
+ DateField df = new DateField("Date field");
+ df.setId("datefield" + debugIdCounter++);
+ df.setValue(cal.getTime());
+
+ if (caption != null) {
+ df.setCaption(caption);
+ }
+
+ if (primaryStyleName != null) {
+ df.addStyleName(primaryStyleName);
+ }
+
+ addComponent(df);
+
+ }
+
+ @Override
+ public void addComponent(Component c) {
+ parent.registerComponent(c);
+ super.addComponent(c);
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/components/EmbeddedCssTest.java b/uitest/src/com/vaadin/tests/components/uitest/components/EmbeddedCssTest.java
new file mode 100644
index 0000000000..57783f6eb3
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/components/EmbeddedCssTest.java
@@ -0,0 +1,31 @@
+package com.vaadin.tests.components.uitest.components;
+
+import com.vaadin.server.ThemeResource;
+import com.vaadin.tests.components.uitest.TestSampler;
+import com.vaadin.ui.BrowserFrame;
+import com.vaadin.ui.Embedded;
+
+public class EmbeddedCssTest {
+
+ private int debugIdCounter = 0;
+
+ public EmbeddedCssTest(TestSampler parent) {
+ Embedded e = new Embedded("Embedded with a caption", new ThemeResource(
+ parent.ICON_URL));
+ e.setId("embedded" + debugIdCounter);
+ parent.addComponent(e);
+
+ e = new Embedded(null, new ThemeResource(parent.ICON_URL));
+ e.setId("embedded" + debugIdCounter);
+ parent.addComponent(e);
+
+ BrowserFrame eBrowser = new BrowserFrame();
+ eBrowser.setCaption("A embedded browser");
+ eBrowser.setSource(null);
+ eBrowser.setHeight("150px");
+ eBrowser.setWidth("300px");
+ eBrowser.setId("embedded" + debugIdCounter);
+ parent.addComponent(eBrowser);
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/components/FormsCssTest.java b/uitest/src/com/vaadin/tests/components/uitest/components/FormsCssTest.java
new file mode 100644
index 0000000000..e1e306877d
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/components/FormsCssTest.java
@@ -0,0 +1,44 @@
+package com.vaadin.tests.components.uitest.components;
+
+import com.vaadin.data.fieldgroup.BeanFieldGroup;
+import com.vaadin.data.fieldgroup.FieldGroup;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.tests.components.uitest.TestSampler;
+import com.vaadin.tests.util.Person;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.LoginForm;
+import com.vaadin.ui.VerticalLayout;
+
+public class FormsCssTest extends HorizontalLayout {
+
+ private TestSampler parent;
+ private int debugIdCounter = 0;
+
+ public FormsCssTest(TestSampler parent) {
+ this.parent = parent;
+ setSpacing(true);
+ setWidth("100%");
+
+ VerticalLayout vl = new VerticalLayout();
+ FieldGroup fg = new BeanFieldGroup<Person>(Person.class);
+ fg.setItemDataSource(new BeanItem<Person>(new Person()));
+ for (Object propId : fg.getUnboundPropertyIds()) {
+ vl.addComponent(fg.buildAndBind(propId));
+ }
+
+ addComponent(vl);
+
+ LoginForm login = new LoginForm();
+ login.setId("form" + debugIdCounter++);
+ login.setHeight("150px");
+ addComponent(login);
+
+ }
+
+ @Override
+ public void addComponent(com.vaadin.ui.Component c) {
+ parent.registerComponent(c);
+ super.addComponent(c);
+ };
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/components/LabelsCssTest.java b/uitest/src/com/vaadin/tests/components/uitest/components/LabelsCssTest.java
new file mode 100644
index 0000000000..2413dfaaf3
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/components/LabelsCssTest.java
@@ -0,0 +1,84 @@
+package com.vaadin.tests.components.uitest.components;
+
+import com.vaadin.server.ThemeResource;
+import com.vaadin.tests.components.uitest.TestSampler;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.themes.ChameleonTheme;
+import com.vaadin.ui.themes.Reindeer;
+
+public class LabelsCssTest extends GridLayout {
+
+ private TestSampler parent;
+ private int debugIdCounter = 0;
+
+ public LabelsCssTest(TestSampler parent) {
+ this.parent = parent;
+ setSpacing(true);
+ setWidth("100%");
+ setColumns(5);
+
+ createLabelWith(null, "Default empty label", null, null);
+ createLabelWith(null, "Label with icon", null, parent.ICON_URL);
+ Label l = createLabelWith("The caption", "With caption and tooltip",
+ null, null);
+ l.setDescription("The tooltip");
+
+ createLabelWith("H1", ChameleonTheme.LABEL_H1);
+ createLabelWith("H2", ChameleonTheme.LABEL_H2);
+ createLabelWith("H3", ChameleonTheme.LABEL_H3);
+ createLabelWith("H4", ChameleonTheme.LABEL_H4);
+ createLabelWith("Big", ChameleonTheme.LABEL_BIG);
+ createLabelWith("Small", ChameleonTheme.LABEL_SMALL);
+ createLabelWith("Tiny", ChameleonTheme.LABEL_TINY);
+ createLabelWith("Color", ChameleonTheme.LABEL_COLOR);
+ createLabelWith("Warning", ChameleonTheme.LABEL_WARNING);
+ createLabelWith("Error", ChameleonTheme.LABEL_ERROR);
+ // Will break test bench as the spinner spins and it's not identical in
+ // all screen shots
+ // createLabelWith("Loading", ChameleonTheme.LABEL_LOADING);
+ createLabelWith("Big", ChameleonTheme.LABEL_BIG);
+ createLabelWith("Big", ChameleonTheme.LABEL_BIG);
+
+ createLabelWith("Light", Reindeer.LABEL_SMALL);
+
+ }
+
+ private Label createLabelWith(String content, String primaryStyleName) {
+ return createLabelWith(null, content, primaryStyleName, null);
+ }
+
+ private Label createLabelWith(String caption, String content,
+ String primaryStyleName, String iconUrl) {
+
+ Label l = new Label();
+ l.setId("label" + debugIdCounter++);
+ if (caption != null) {
+ l.setCaption(caption);
+ }
+
+ if (content != null) {
+ l.setValue(content);
+ }
+
+ if (primaryStyleName != null) {
+ l.addStyleName(primaryStyleName);
+ }
+
+ if (iconUrl != null) {
+ l.setIcon(new ThemeResource(iconUrl));
+ }
+
+ addComponent(l);
+ return l;
+
+ }
+
+ @Override
+ public void addComponent(Component component) {
+ parent.registerComponent(component);
+ super.addComponent(component);
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/components/LayoutsCssTest.java b/uitest/src/com/vaadin/tests/components/uitest/components/LayoutsCssTest.java
new file mode 100644
index 0000000000..454fec7eaf
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/components/LayoutsCssTest.java
@@ -0,0 +1,155 @@
+package com.vaadin.tests.components.uitest.components;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+import com.vaadin.server.ThemeResource;
+import com.vaadin.server.UserError;
+import com.vaadin.tests.components.uitest.TestSampler;
+import com.vaadin.ui.AbsoluteLayout;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.CustomLayout;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.VerticalSplitPanel;
+import com.vaadin.ui.themes.ChameleonTheme;
+import com.vaadin.ui.themes.Reindeer;
+
+public class LayoutsCssTest extends GridLayout {
+
+ private TestSampler parent;
+ private int debugIdCounter = 0;
+
+ public LayoutsCssTest(TestSampler parent) {
+ this.parent = parent;
+ setSpacing(true);
+ setColumns(4);
+ setWidth("100%");
+
+ VerticalLayout vl = new VerticalLayout();
+ vl.setCaption("VerticalLayout");
+ vl.setMargin(true);
+ vl.setSpacing(true);
+ vl.setComponentError(new UserError("A error message..."));
+ vl.addComponent(new Label("Some content"));
+ vl.setId("layout" + debugIdCounter++);
+ addComponent(vl);
+
+ CssLayout css = new CssLayout();
+ css.setCaption("CssLayout");
+ css.addComponent(new Label("Some content"));
+ css.setId("layout" + debugIdCounter++);
+ addComponent(css);
+
+ AbsoluteLayout abs = new AbsoluteLayout();
+ abs.setCaption("Abs layout");
+ abs.addComponent(new Label("Some content"));
+ abs.setComponentError(new UserError("A error message..."));
+ abs.setId("layout" + debugIdCounter++);
+
+ addComponent(abs);
+
+ GridLayout gl = new GridLayout();
+ gl.setMargin(true);
+ gl.setSpacing(true);
+ gl.setCaption("GridLayout");
+ gl.setComponentError(new UserError("A error message..."));
+ gl.addComponent(new Label("Some content"));
+ gl.setId("layout" + debugIdCounter++);
+
+ addComponent(gl);
+
+ VerticalSplitPanel vert = new VerticalSplitPanel();
+ vert.setCaption("VertSplitPan");
+ vert.setFirstComponent(new Label("Some content 1"));
+ vert.setSecondComponent(new Label("Some content 2"));
+ vert.setComponentError(new UserError("A error message..."));
+ vert.setSplitPosition(50);
+ vert.setEnabled(false);
+ vert.setHeight("50px");
+ vert.setId("layout" + debugIdCounter++);
+
+ addComponent(vert);
+
+ HorizontalSplitPanel horiz = new HorizontalSplitPanel();
+ horiz.setSplitPosition(50);
+ horiz.setFirstComponent(new Label("Some content 1"));
+ horiz.setSecondComponent(new Label("Some content 2"));
+ horiz.setIcon(new ThemeResource(parent.ICON_URL));
+ horiz.setCaption("HorizSplitPan");
+ horiz.setId("layout" + debugIdCounter++);
+
+ addComponent(horiz);
+
+ VerticalSplitPanel smallSplitPanel = new VerticalSplitPanel();
+ smallSplitPanel.setCaption("SmallVertSplitPan");
+ smallSplitPanel.setFirstComponent(new Label("Some content 1"));
+ smallSplitPanel.setSecondComponent(new Label("Some content 2"));
+ smallSplitPanel.setComponentError(new UserError("A error message..."));
+ smallSplitPanel.setSplitPosition(50);
+ smallSplitPanel.addStyleName(Reindeer.SPLITPANEL_SMALL);
+ smallSplitPanel.setEnabled(false);
+ smallSplitPanel.setHeight("50px");
+ smallSplitPanel.setId("layout" + debugIdCounter++);
+ addComponent(smallSplitPanel);
+
+ String customLayoutSrc = "<html><div location='pos1' class='customclass'> </div></html>";
+
+ CustomLayout custom;
+ try {
+ custom = new CustomLayout(new ByteArrayInputStream(
+ customLayoutSrc.getBytes()));
+ custom.addComponent(new Label("Some content"), "pos1");
+ custom.setComponentError(new UserError("A error mesasge..."));
+ custom.setCaption("CustomLayout");
+ custom.setId("layout" + debugIdCounter++);
+
+ addComponent(custom);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ Panel defPanel = createPanelWith("A default panel", null);
+ addComponent(defPanel);
+
+ Panel light = createPanelWith("A light panel", Reindeer.PANEL_LIGHT);
+ addComponent(light);
+
+ Panel borderless = createPanelWith("A borderless panel",
+ ChameleonTheme.PANEL_BORDERLESS);
+ addComponent(borderless);
+
+ Panel bubbling = createPanelWith("A Bubbling panel",
+ ChameleonTheme.PANEL_BUBBLE);
+ addComponent(bubbling);
+ }
+
+ /**
+ * Helper to create panels for different theme variants...
+ */
+ private Panel createPanelWith(String caption, String styleName) {
+ Panel panel = new Panel(caption);
+ panel.addComponent(new Label("Some content"));
+ panel.setIcon(new ThemeResource(parent.ICON_URL));
+ panel.setComponentError(new UserError("A error message..."));
+ panel.setId("layout" + debugIdCounter++);
+
+ if (styleName != null) {
+ panel.addStyleName(styleName);
+ }
+
+ return panel;
+ }
+
+ @Override
+ public void addComponent(Component component) {
+ parent.registerComponent(component);
+ super.addComponent(component);
+
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/components/NotificationsCssTest.java b/uitest/src/com/vaadin/tests/components/uitest/components/NotificationsCssTest.java
new file mode 100644
index 0000000000..78ff89d5cb
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/components/NotificationsCssTest.java
@@ -0,0 +1,98 @@
+package com.vaadin.tests.components.uitest.components;
+
+import com.vaadin.tests.components.uitest.TestSampler;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Notification;
+import com.vaadin.ui.VerticalLayout;
+
+public class NotificationsCssTest extends VerticalLayout {
+
+ private TestSampler parent;
+ private String styleName = null;
+ private int debugIdCounter = 0;
+
+ public NotificationsCssTest(TestSampler parent) {
+ this.parent = parent;
+ parent.registerComponent(this);
+
+ Button humanized = new Button("Humanized message",
+ new Button.ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ createNotification("A message", "A description",
+ Notification.Type.HUMANIZED_MESSAGE);
+ }
+ });
+ humanized.setId("notifButt" + debugIdCounter++);
+ Button warning = new Button("Warning message",
+ new Button.ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ createNotification("A message", "A description",
+ Notification.Type.WARNING_MESSAGE);
+ }
+ });
+ warning.setId("notifButt" + debugIdCounter++);
+ Button error = new Button("Error message", new Button.ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ createNotification("A message", "A description",
+ Notification.Type.ERROR_MESSAGE);
+ }
+ });
+ error.setId("notifButt" + debugIdCounter++);
+ Button tray = new Button("Tray message", new Button.ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ createNotification("A message", "A description",
+ Notification.Type.TRAY_NOTIFICATION);
+ }
+ });
+ tray.setId("notifButt" + debugIdCounter++);
+
+ addComponent(humanized);
+ addComponent(warning);
+ addComponent(error);
+ addComponent(tray);
+ }
+
+ private void createNotification(String caption, String message,
+ Notification.Type type) {
+
+ Notification notification;
+
+ if (message == null) {
+ notification = new Notification(caption, type);
+ } else {
+ notification = new Notification(caption, message, type);
+ }
+
+ if (styleName != null) {
+ notification.setStyleName(styleName);
+ }
+
+ notification.setDelayMsec(-1);
+ notification.show(parent.getUI().getPage());
+ }
+
+ @Override
+ public void setStyleName(String style) {
+ styleName = style;
+ }
+
+ @Override
+ public void addStyleName(String style) {
+ styleName = style;
+ }
+
+ @Override
+ public void removeStyleName(String style) {
+ styleName = null;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/components/SelectsCssTest.java b/uitest/src/com/vaadin/tests/components/uitest/components/SelectsCssTest.java
new file mode 100644
index 0000000000..4da683788b
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/components/SelectsCssTest.java
@@ -0,0 +1,97 @@
+package com.vaadin.tests.components.uitest.components;
+
+import com.vaadin.tests.components.uitest.TestSampler;
+import com.vaadin.ui.AbstractSelect;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.ListSelect;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.OptionGroup;
+import com.vaadin.ui.Select;
+import com.vaadin.ui.TwinColSelect;
+import com.vaadin.ui.themes.ChameleonTheme;
+
+public class SelectsCssTest extends HorizontalLayout {
+
+ private TestSampler parent;
+ private int debugIdCounter = 0;
+
+ public SelectsCssTest(TestSampler parent) {
+ this.parent = parent;
+ setSpacing(true);
+ setWidth(null);
+
+ Select s = new Select("Basic select");
+ s.setId("select" + debugIdCounter++);
+ addComponent(s);
+
+ s = new Select("Select with items");
+ s.setId("select" + debugIdCounter++);
+ createDummyData(s);
+ addComponent(s);
+
+ TwinColSelect tws = new TwinColSelect();
+ tws.setId("select" + debugIdCounter++);
+ createDummyData(tws);
+ addComponent(tws);
+
+ OptionGroup og = new OptionGroup();
+ og.setId("select" + debugIdCounter++);
+ createDummyData(og, 4);
+ addComponent(og);
+
+ og = new OptionGroup();
+ og.setId("select" + debugIdCounter++);
+ createDummyData(og, 4);
+ og.setItemEnabled("Foo2", false);
+ og.setItemEnabled("Foo3", false);
+ addComponent(og);
+
+ NativeSelect ns = new NativeSelect();
+ ns.setId("select" + debugIdCounter++);
+ createDummyData(ns);
+ addComponent(ns);
+
+ createComboBoxWith(null, null);
+ createComboBoxWith("CB Search", ChameleonTheme.COMBOBOX_SEARCH);
+ createComboBoxWith("SelectButton",
+ ChameleonTheme.COMBOBOX_SELECT_BUTTON);
+
+ ListSelect ls = new ListSelect();
+ ls.setId("select" + debugIdCounter++);
+ createDummyData(ls);
+ addComponent(ls);
+ }
+
+ private void createComboBoxWith(String caption, String primaryStyleName) {
+ ComboBox cb = new ComboBox();
+ cb.setId("select" + debugIdCounter++);
+ if (caption != null) {
+ cb.setCaption(caption);
+ }
+
+ if (primaryStyleName != null) {
+ cb.addStyleName(primaryStyleName);
+ }
+
+ createDummyData(cb);
+ addComponent(cb);
+ }
+
+ @Override
+ public void addComponent(Component c) {
+ parent.registerComponent(c);
+ super.addComponent(c);
+ }
+
+ private void createDummyData(AbstractSelect select) {
+ createDummyData(select, 20);
+ }
+
+ private void createDummyData(AbstractSelect select, int items) {
+ for (int i = 0; i < items; i++) {
+ select.addItem("Foo" + i);
+ }
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/components/SlidersCssTest.java b/uitest/src/com/vaadin/tests/components/uitest/components/SlidersCssTest.java
new file mode 100644
index 0000000000..db6b6fc4bc
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/components/SlidersCssTest.java
@@ -0,0 +1,21 @@
+package com.vaadin.tests.components.uitest.components;
+
+import com.vaadin.shared.ui.slider.SliderOrientation;
+import com.vaadin.tests.components.uitest.TestSampler;
+import com.vaadin.ui.Slider;
+
+public class SlidersCssTest {
+
+ private int debugIdCounter = 0;
+
+ public SlidersCssTest(TestSampler parent) {
+ Slider slide = new Slider();
+ slide.setId("slider" + debugIdCounter++);
+ parent.addComponent(slide);
+
+ slide = new Slider();
+ slide.setOrientation(SliderOrientation.VERTICAL);
+ slide.setId("slider" + debugIdCounter++);
+ parent.addComponent(slide);
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/components/TabSheetsCssTest.java b/uitest/src/com/vaadin/tests/components/uitest/components/TabSheetsCssTest.java
new file mode 100644
index 0000000000..b05eb2f32a
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/components/TabSheetsCssTest.java
@@ -0,0 +1,72 @@
+package com.vaadin.tests.components.uitest.components;
+
+import com.vaadin.server.ThemeResource;
+import com.vaadin.server.UserError;
+import com.vaadin.tests.components.uitest.TestSampler;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.themes.Reindeer;
+import com.vaadin.ui.themes.Runo;
+
+public class TabSheetsCssTest {
+
+ private TestSampler parent;
+ private int debugIdCounter = 0;
+
+ public TabSheetsCssTest(TestSampler parent) {
+ this.parent = parent;
+
+ TabSheet basic = createTabSheetWith("Basic TabSheet", null);
+ parent.addComponent(basic);
+
+ TabSheet bordeless = createTabSheetWith("Borderelss TabSheet",
+ Reindeer.TABSHEET_BORDERLESS);
+ parent.addComponent(bordeless);
+
+ TabSheet bar = createTabSheetWith("A small/bar TabSheet",
+ Reindeer.TABSHEET_SMALL);
+ parent.addComponent(bar);
+
+ TabSheet minimal = createTabSheetWith("A minimal tabsheet",
+ Reindeer.TABSHEET_MINIMAL);
+ parent.addComponent(minimal);
+
+ TabSheet hoverClosable = createTabSheetWith(
+ "A hover-closable TabSheet", Reindeer.TABSHEET_HOVER_CLOSABLE);
+ parent.addComponent(hoverClosable);
+
+ TabSheet selectedClosable = createTabSheetWith(
+ "A selected-closable TabSheet",
+ Reindeer.TABSHEET_SELECTED_CLOSABLE);
+ parent.addComponent(selectedClosable);
+
+ TabSheet light = createTabSheetWith("A light TabSheet",
+ Runo.TABSHEET_SMALL);
+ parent.addComponent(light);
+
+ }
+
+ private TabSheet createTabSheetWith(String caption, String styleName) {
+ TabSheet ts = new TabSheet();
+ ts.setId("tabsheet" + debugIdCounter++);
+ ts.setCaption(caption);
+ ts.setComponentError(new UserError("A error message"));
+
+ Label content = new Label("First Component");
+ ts.addTab(content, "First");
+ Label content2 = new Label("Second Component");
+ ts.addTab(content2, "Second");
+ ts.getTab(content2).setClosable(true);
+
+ Label content3 = new Label("Third Component");
+ ts.addTab(content3, "Third", new ThemeResource(parent.ICON_URL));
+ ts.getTab(content3).setEnabled(false);
+
+ if (styleName != null) {
+ ts.addStyleName(styleName);
+ }
+
+ return ts;
+
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/components/TablesCssTest.java b/uitest/src/com/vaadin/tests/components/uitest/components/TablesCssTest.java
new file mode 100644
index 0000000000..754b359dbf
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/components/TablesCssTest.java
@@ -0,0 +1,100 @@
+package com.vaadin.tests.components.uitest.components;
+
+import java.util.HashSet;
+
+import com.vaadin.event.Action;
+import com.vaadin.server.ThemeResource;
+import com.vaadin.tests.components.uitest.TestSampler;
+import com.vaadin.tests.util.TestUtils;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.themes.ChameleonTheme;
+import com.vaadin.ui.themes.Reindeer;
+
+public class TablesCssTest extends GridLayout {
+
+ private TestSampler parent;
+ private int debugIdCounter = 0;
+
+ private final Action ACTION_MARK = new Action("Mark");
+ private final Action ACTION_UNMARK = new Action("Unmark");
+ private final Action ACTION_LOG = new Action("Save");
+ private final Action[] ACTIONS_UNMARKED = new Action[] { ACTION_MARK,
+ ACTION_LOG };
+ private final Action[] ACTIONS_MARKED = new Action[] { ACTION_UNMARK,
+ ACTION_LOG };
+
+ public TablesCssTest(TestSampler parent) {
+ super();
+ setSpacing(true);
+ setColumns(2);
+ setWidth("100%");
+
+ this.parent = parent;
+
+ createTableWith("CC & flags, default table", null);
+ createTableWith("Borderless", ChameleonTheme.TABLE_BORDERLESS);
+ createTableWith("Big", ChameleonTheme.TABLE_BIG);
+ createTableWith("Small", ChameleonTheme.TABLE_SMALL);
+ createTableWith("Striped", ChameleonTheme.TABLE_STRIPED);
+ createTableWith("Strong", Reindeer.TABLE_STRONG);
+
+ }
+
+ private void createTableWith(String caption, String primaryStyleName) {
+ final HashSet<Object> markedRows = new HashSet<Object>();
+
+ final Table t;
+ if (caption != null) {
+ t = new Table(caption);
+ } else {
+ t = new Table();
+ }
+
+ t.setId("table" + debugIdCounter++);
+
+ if (primaryStyleName != null) {
+ t.addStyleName(primaryStyleName);
+ }
+
+ t.setWidth("100%");
+ t.setHeight("100px");
+
+ t.setSelectable(true);
+ t.setMultiSelect(true);
+ t.setImmediate(true);
+ t.setContainerDataSource(TestUtils.getISO3166Container());
+ t.setColumnReorderingAllowed(true);
+ t.setColumnCollapsingAllowed(true);
+ // t.setColumnHeaders(new String[] { "Country", "Code", "Icon file" });
+ t.setColumnIcon(TestUtils.iso3166_PROPERTY_NAME, new ThemeResource(
+ parent.ICON_URL));
+
+ // Actions (a.k.a context menu)
+ t.addActionHandler(new Action.Handler() {
+ public Action[] getActions(Object target, Object sender) {
+ if (markedRows.contains(target)) {
+ return ACTIONS_MARKED;
+ } else {
+ return ACTIONS_UNMARKED;
+ }
+ }
+
+ @Override
+ public void handleAction(Action action, Object sender, Object target) {
+ // We just want the actions UI.. don't care about the logic...
+ if (ACTION_MARK == action) {
+ markedRows.add(target);
+ t.refreshRowCache();
+ } else if (ACTION_UNMARK == action) {
+ markedRows.remove(target);
+ t.refreshRowCache();
+ }
+ }
+ });
+
+ addComponent(t);
+ parent.registerComponent(t);
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/components/TextFieldsCssTest.java b/uitest/src/com/vaadin/tests/components/uitest/components/TextFieldsCssTest.java
new file mode 100644
index 0000000000..6ae220bb3a
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/components/TextFieldsCssTest.java
@@ -0,0 +1,80 @@
+package com.vaadin.tests.components.uitest.components;
+
+import com.vaadin.tests.components.uitest.TestSampler;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.PasswordField;
+import com.vaadin.ui.RichTextArea;
+import com.vaadin.ui.TextArea;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.themes.ChameleonTheme;
+import com.vaadin.ui.themes.Reindeer;
+
+public class TextFieldsCssTest extends GridLayout {
+
+ private TestSampler parent;
+ private int debugIdCounter = 0;
+
+ public TextFieldsCssTest(TestSampler parent) {
+ this.parent = parent;
+ setSpacing(true);
+ setColumns(7);
+ setRows(2);
+
+ setWidth("100%");
+
+ createTextFieldWith(null, null, null);
+ createTextFieldWith("Input prompt", null, "Input prompt");
+ createTextFieldWith("Small", Reindeer.TEXTFIELD_SMALL, null);
+ createTextFieldWith("Big", ChameleonTheme.TEXTFIELD_BIG, null);
+ createTextFieldWith("Search", ChameleonTheme.TEXTFIELD_SEARCH, null);
+
+ TextArea ta = new TextArea();
+ ta.setId("textfield" + debugIdCounter++);
+ addComponent(ta);
+
+ PasswordField pf = new PasswordField();
+ pf.setId("textfield" + debugIdCounter++);
+ addComponent(pf);
+
+ RichTextArea rta = new RichTextArea();
+ rta.setId("textfield" + debugIdCounter++);
+ addComponent(rta, 0, 1, 6, 1);
+
+ }
+
+ private void createTextFieldWith(String caption, String primaryStyleName,
+ String inputPrompt) {
+ TextField tf = new TextField();
+ tf.setId("textfield" + debugIdCounter++);
+ if (caption != null) {
+ tf.setCaption(caption);
+ }
+
+ if (primaryStyleName != null) {
+ tf.addStyleName(primaryStyleName);
+ }
+
+ if (inputPrompt != null) {
+ tf.setInputPrompt(inputPrompt);
+ }
+
+ addComponent(tf);
+
+ }
+
+ @Override
+ public void addComponent(Component c) {
+ parent.registerComponent(c);
+ super.addComponent(c);
+ }
+
+ @Override
+ public void addComponent(Component component, int column1, int row1,
+ int column2, int row2) throws OverlapsException,
+ OutOfBoundsException {
+
+ parent.registerComponent(component);
+ super.addComponent(component, column1, row1, column2, row2);
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/components/TreeCssTest.java b/uitest/src/com/vaadin/tests/components/uitest/components/TreeCssTest.java
new file mode 100644
index 0000000000..0508bfc0f9
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/components/TreeCssTest.java
@@ -0,0 +1,72 @@
+package com.vaadin.tests.components.uitest.components;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.event.Action;
+import com.vaadin.tests.components.uitest.TestSampler;
+import com.vaadin.ui.Tree;
+
+public class TreeCssTest {
+ private int debugIdCounter = 0;
+
+ public TreeCssTest(TestSampler parent) {
+ // Actions for the context menu
+ final Action ACTION_ADD = new Action("Add child item");
+ final Action ACTION_DELETE = new Action("Delete");
+ final Action[] ACTIONS = new Action[] { ACTION_ADD, ACTION_DELETE };
+
+ final Tree tree = new Tree();
+ tree.setId("tree" + debugIdCounter++);
+
+ HierarchicalContainer hc = createHierarchicalContainer();
+
+ tree.setContainerDataSource(hc);
+
+ tree.addActionHandler(new Action.Handler() {
+
+ @Override
+ public void handleAction(Action action, Object sender, Object target) {
+ // We don't care about functionality, we just want the UI for
+ // testing..
+
+ }
+
+ @Override
+ public Action[] getActions(Object target, Object sender) {
+ // TODO Auto-generated method stub
+ return ACTIONS;
+ }
+ });
+
+ // Expand whole tree
+ for (Object id : tree.rootItemIds()) {
+ tree.expandItemsRecursively(id);
+ }
+
+ parent.addComponent(tree);
+ }
+
+ private HierarchicalContainer createHierarchicalContainer() {
+ String[] itemNames = new String[] { "Foo", "Baar" };
+
+ HierarchicalContainer hc = new HierarchicalContainer();
+ hc.addContainerProperty("NAME", String.class, null);
+
+ for (String parentId : itemNames) {
+ Item parent = hc.addItem(parentId);
+ parent.getItemProperty("NAME").setValue(parentId);
+ hc.setChildrenAllowed(parent, true);
+ for (int i = 0; i < 5; i++) {
+ String childId = parentId + i;
+ Item child = hc.addItem(childId);
+ child.getItemProperty("NAME").setValue(childId);
+ if (!hc.setParent(childId, parentId)) {
+ System.out.println("Unable to set parent \"" + parentId
+ + "\" for child with id: \"" + childId + "\"");
+ }
+ }
+ }
+ return hc;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/components/TreeTableCssTest.java b/uitest/src/com/vaadin/tests/components/uitest/components/TreeTableCssTest.java
new file mode 100644
index 0000000000..ca246698f5
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/components/TreeTableCssTest.java
@@ -0,0 +1,49 @@
+package com.vaadin.tests.components.uitest.components;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.tests.components.uitest.TestSampler;
+import com.vaadin.ui.TreeTable;
+
+public class TreeTableCssTest {
+ private int debugIdCounter = 0;
+
+ public TreeTableCssTest(TestSampler parent) {
+ TreeTable treeTable = new TreeTable();
+ treeTable.setId("treetable" + debugIdCounter++);
+ treeTable.setWidth("100%");
+ parent.addComponent(treeTable);
+
+ HierarchicalContainer hc = createHierarchicalContainer();
+
+ treeTable.setContainerDataSource(hc);
+
+ for (Object itemId : treeTable.getItemIds()) {
+ treeTable.setCollapsed(itemId, false);
+ }
+ }
+
+ private HierarchicalContainer createHierarchicalContainer() {
+ String[] itemNames = new String[] { "Foo", "Baar" };
+
+ HierarchicalContainer hc = new HierarchicalContainer();
+ hc.addContainerProperty("NAME", String.class, null);
+
+ for (String parentId : itemNames) {
+ Item parent = hc.addItem(parentId);
+ parent.getItemProperty("NAME").setValue(parentId);
+ hc.setChildrenAllowed(parent, true);
+ for (int i = 0; i < 5; i++) {
+ String childId = parentId + i;
+ Item child = hc.addItem(childId);
+ child.getItemProperty("NAME").setValue(childId);
+ if (!hc.setParent(childId, parentId)) {
+ System.out.println("Unable to set parent \"" + parentId
+ + "\" for child with id: \"" + childId + "\"");
+ }
+ }
+ }
+ return hc;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/components/UploadCssTest.java b/uitest/src/com/vaadin/tests/components/uitest/components/UploadCssTest.java
new file mode 100644
index 0000000000..9aac96c88f
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/components/UploadCssTest.java
@@ -0,0 +1,20 @@
+package com.vaadin.tests.components.uitest.components;
+
+import com.vaadin.tests.components.uitest.TestSampler;
+import com.vaadin.ui.Upload;
+
+public class UploadCssTest {
+
+ private int debugIdCounter = 0;
+
+ public UploadCssTest(TestSampler parent) {
+ Upload up = new Upload();
+ up.setId("upload" + debugIdCounter++);
+ parent.addComponent(up);
+
+ up = new Upload();
+ up.setId("upload" + debugIdCounter++);
+ up.setImmediate(true);
+ parent.addComponent(up);
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/components/WindowsCssTest.java b/uitest/src/com/vaadin/tests/components/uitest/components/WindowsCssTest.java
new file mode 100644
index 0000000000..ceb5ff5c60
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/components/WindowsCssTest.java
@@ -0,0 +1,116 @@
+package com.vaadin.tests.components.uitest.components;
+
+import com.vaadin.tests.components.uitest.TestSampler;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.themes.ChameleonTheme;
+import com.vaadin.ui.themes.Reindeer;
+import com.vaadin.ui.themes.Runo;
+
+public class WindowsCssTest extends VerticalLayout {
+
+ private TestSampler parent;
+ private String styleName = null;
+ private String caption = "A caption";
+
+ private int debugIdCounter = 0;
+
+ public WindowsCssTest(TestSampler parent) {
+ this.parent = parent;
+ parent.registerComponent(this);
+
+ Button defWindow = new Button("Default window",
+ new Button.ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ createWindowWith(caption, null, styleName);
+ }
+ });
+ defWindow.setId("windButton" + debugIdCounter++);
+ Button light = new Button("Light window", new Button.ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ createWindowWith(caption, Reindeer.WINDOW_LIGHT, styleName);
+ }
+ });
+ light.setId("windButton" + debugIdCounter++);
+ Button black = new Button("Black window", new Button.ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ createWindowWith(caption, Reindeer.WINDOW_BLACK, styleName);
+ }
+ });
+ black.setId("windButton" + debugIdCounter++);
+ Button dialog = new Button("Dialog window", new Button.ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ createWindowWith(caption, Runo.WINDOW_DIALOG, styleName);
+ }
+ });
+ dialog.setId("windButton" + debugIdCounter++);
+ Button opaque = new Button("Opaque window", new Button.ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ createWindowWith(caption, ChameleonTheme.WINDOW_OPAQUE,
+ styleName);
+ }
+ });
+ opaque.setId("windButton" + debugIdCounter++);
+
+ addComponent(defWindow);
+ addComponent(light);
+ addComponent(black);
+ addComponent(dialog);
+ addComponent(opaque);
+
+ }
+
+ /**
+ *
+ * @param caption
+ * @param primaryStyleName
+ * - the style defined styleName
+ * @param styleName
+ * - the user defined styleName
+ * @return
+ */
+ private void createWindowWith(String caption, String primaryStyleName,
+ String styleName) {
+
+ Window window = new Window();
+ window.addComponent(new Label("Some content"));
+
+ if (caption != null) {
+ window.setCaption(caption);
+ }
+
+ if (primaryStyleName != null) {
+ window.addStyleName(primaryStyleName);
+ }
+
+ if (styleName != null) {
+ window.addStyleName(styleName);
+ }
+
+ parent.getUI().addWindow(window);
+
+ }
+
+ @Override
+ public void addStyleName(String style) {
+ styleName = style;
+ };
+
+ @Override
+ public void removeStyleName(String style) {
+ styleName = null;
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/reindeer_theme_test.html b/uitest/src/com/vaadin/tests/components/uitest/reindeer_theme_test.html
new file mode 100644
index 0000000000..5d25c87a5a
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/reindeer_theme_test.html
@@ -0,0 +1,466 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>reindeer_theme_test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">reindeer_theme_test</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/ThemeTestUI?restartApplication&amp;theme=reindeer</td>
+ <td></td>
+</tr>
+<tr>
+ <td>setSpeed</td>
+ <td>150</td>
+ <td>150</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[2]/div/div/div</td>
+ <td>31,8</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[3]/div/div/div</td>
+ <td>27,1</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[4]/div/div</td>
+ <td>33,24</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield0']/button</td>
+ <td>11,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[2]/div/div[3]/div/div</td>
+ <td>402,158</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield1']/button</td>
+ <td>14,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield2']/button</td>
+ <td>9,16</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield3']/button</td>
+ <td>9,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[5]/div/div/div</td>
+ <td>35,2</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[6]/div/div/div</td>
+ <td>27,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select0']/div</td>
+ <td>9,11</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select1']/div</td>
+ <td>10,13</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select6']/div</td>
+ <td>7,13</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select7']/div</td>
+ <td>7,12</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select8']/div</td>
+ <td>9,7</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[7]/div/div/div</td>
+ <td>20,3</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[8]/div/div/div</td>
+ <td>18,5</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VVerticalLayout[0]</td>
+ <td>518,136</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[2]/div/div[4]/div/div/div[1]</td>
+ <td>510,23</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[9]/div/div/div</td>
+ <td>18,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[10]/div/div</td>
+ <td>22,25</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>contextmenu</td>
+ <td>//div[@id='table0']/div[2]/div[1]/table/tbody/tr[2]/td[1]/div</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='table0']/div[1]/div[2]</td>
+ <td>12,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[11]/div/div/div</td>
+ <td>28,3</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[12]/div/div</td>
+ <td>52,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[13]/div/div</td>
+ <td>23,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[14]/div/div/div</td>
+ <td>24,1</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[15]/div/div/div</td>
+ <td>24,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[16]/div/div/div</td>
+ <td>15,0</td>
+</tr>
+<!--Window and Notification screenshots-->
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton0']/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>9,8</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton1']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>11,6</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton2']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>8,5</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton3']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>9,6</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton4']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>10,7</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[17]/div/div</td>
+ <td>46,8</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt0']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>214,15</td>
+</tr>
+<!--
+<tr>
+ <td>closeNotification</td>
+ <td>//body/div[2]</td>
+ <td>0,0</td>
+</tr>
+-->
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt1']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>172,13</td>
+</tr>
+<!--
+<tr>
+ <td>closeNotification</td>
+ <td>//body/div[2]</td>
+ <td>0,0</td>
+</tr>
+-->
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt2']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>318,11</td>
+</tr>
+<!--
+<tr>
+ <td>closeNotification</td>
+ <td>//body/div[2]</td>
+ <td>0,0</td>
+</tr>
+-->
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt3']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>66,9</td>
+</tr>
+<!--
+<tr>
+ <td>closeNotification</td>
+ <td>//body/div[2]</td>
+ <td>0,0</td>
+</tr>
+-->
+
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/containers/sqlcontainer/ComboBoxUpdateProblem.java b/uitest/src/com/vaadin/tests/containers/sqlcontainer/ComboBoxUpdateProblem.java
index edaefeb0c3..737563f975 100644
--- a/uitest/src/com/vaadin/tests/containers/sqlcontainer/ComboBoxUpdateProblem.java
+++ b/uitest/src/com/vaadin/tests/containers/sqlcontainer/ComboBoxUpdateProblem.java
@@ -1,7 +1,7 @@
package com.vaadin.tests.containers.sqlcontainer;
import com.vaadin.LegacyApplication;
-import com.vaadin.ui.AbstractSelect.Filtering;
+import com.vaadin.shared.ui.combobox.FilteringMode;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.UI;
@@ -18,7 +18,7 @@ public class ComboBoxUpdateProblem extends LegacyApplication {
ComboBox combo = new ComboBox("Names",
databaseHelper.getTestContainer());
combo.setItemCaptionPropertyId("FIELD1");
- combo.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS);
+ combo.setFilteringMode(FilteringMode.CONTAINS);
combo.setImmediate(true);
getMainWindow().addComponent(combo);
diff --git a/uitest/src/com/vaadin/tests/extensions/JavascriptManagerTest.java b/uitest/src/com/vaadin/tests/extensions/JavascriptManagerTest.java
index a4e2acb31e..9999925bb0 100644
--- a/uitest/src/com/vaadin/tests/extensions/JavascriptManagerTest.java
+++ b/uitest/src/com/vaadin/tests/extensions/JavascriptManagerTest.java
@@ -16,9 +16,10 @@
package com.vaadin.tests.extensions;
-import com.vaadin.external.json.JSONArray;
-import com.vaadin.external.json.JSONException;
-import com.vaadin.external.json.JSONObject;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
import com.vaadin.server.WrappedRequest;
import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.tests.util.Log;
diff --git a/uitest/src/com/vaadin/tests/extensions/SimpleJavaScriptExtensionTest.java b/uitest/src/com/vaadin/tests/extensions/SimpleJavaScriptExtensionTest.java
index 18054c8e0f..ee78a1a6a0 100644
--- a/uitest/src/com/vaadin/tests/extensions/SimpleJavaScriptExtensionTest.java
+++ b/uitest/src/com/vaadin/tests/extensions/SimpleJavaScriptExtensionTest.java
@@ -16,10 +16,11 @@
package com.vaadin.tests.extensions;
+import org.json.JSONArray;
+import org.json.JSONException;
+
import com.vaadin.annotations.JavaScript;
import com.vaadin.annotations.StyleSheet;
-import com.vaadin.external.json.JSONArray;
-import com.vaadin.external.json.JSONException;
import com.vaadin.server.AbstractJavaScriptExtension;
import com.vaadin.server.WrappedRequest;
import com.vaadin.shared.JavaScriptExtensionState;
diff --git a/uitest/src/com/vaadin/tests/layouts/TestLayoutClickListeners.java b/uitest/src/com/vaadin/tests/layouts/TestLayoutClickListeners.java
index d1a924e71c..359e77197f 100644
--- a/uitest/src/com/vaadin/tests/layouts/TestLayoutClickListeners.java
+++ b/uitest/src/com/vaadin/tests/layouts/TestLayoutClickListeners.java
@@ -2,7 +2,6 @@ package com.vaadin.tests.layouts;
import com.vaadin.event.LayoutEvents.LayoutClickEvent;
import com.vaadin.event.LayoutEvents.LayoutClickListener;
-import com.vaadin.event.MouseEvents.ClickEvent;
import com.vaadin.tests.components.AbstractTestCase;
import com.vaadin.tests.util.Log;
import com.vaadin.ui.AbsoluteLayout;
@@ -147,13 +146,7 @@ public class TestLayoutClickListeners extends AbstractTestCase {
target = ((Label) component).getValue().toString();
}
}
- String button = "left";
- if (event.getButton() == ClickEvent.BUTTON_RIGHT) {
- button = "right";
- } else if (event.getButton() == ClickEvent.BUTTON_MIDDLE) {
- button = "middle";
-
- }
+ String button = event.getButtonName();
String type = "click";
if (event.isDoubleClick()) {
type = "double-click";
diff --git a/uitest/src/com/vaadin/tests/minitutorials/v7a1/DifferentFeaturesForDifferentClients.java b/uitest/src/com/vaadin/tests/minitutorials/v7a1/DifferentFeaturesForDifferentClients.java
index 5a8d8a8ea1..821660e9e6 100644
--- a/uitest/src/com/vaadin/tests/minitutorials/v7a1/DifferentFeaturesForDifferentClients.java
+++ b/uitest/src/com/vaadin/tests/minitutorials/v7a1/DifferentFeaturesForDifferentClients.java
@@ -45,8 +45,8 @@ public class DifferentFeaturesForDifferentClients extends AbstractUIProvider {
// Must override as default implementation isn't allowed to
// instantiate our non-public classes
@Override
- public UI createInstance(Class<? extends UI> type,
- WrappedRequest request) {
+ public UI createInstance(WrappedRequest request,
+ Class<? extends UI> type) {
try {
return type.newInstance();
} catch (Exception e) {
diff --git a/uitest/src/com/vaadin/tests/minitutorials/v7a3/CapsLockWarning.java b/uitest/src/com/vaadin/tests/minitutorials/v7a3/CapsLockWarning.java
new file mode 100644
index 0000000000..736af9b389
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/minitutorials/v7a3/CapsLockWarning.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2011 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.vaadin.tests.minitutorials.v7a3;
+
+import com.vaadin.server.AbstractExtension;
+import com.vaadin.ui.PasswordField;
+
+public class CapsLockWarning extends AbstractExtension {
+ public void extend(PasswordField field) {
+ super.extend(field);
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/minitutorials/v7a3/CapsLockWarningUI.java b/uitest/src/com/vaadin/tests/minitutorials/v7a3/CapsLockWarningUI.java
new file mode 100644
index 0000000000..c82bc91088
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/minitutorials/v7a3/CapsLockWarningUI.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2011 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.vaadin.tests.minitutorials.v7a3;
+
+import com.vaadin.annotations.Widgetset;
+import com.vaadin.server.WrappedRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.tests.widgetset.TestingWidgetSet;
+import com.vaadin.ui.PasswordField;
+
+@Widgetset(TestingWidgetSet.NAME)
+public class CapsLockWarningUI extends AbstractTestUI {
+
+ @Override
+ protected void setup(WrappedRequest request) {
+ PasswordField field = new PasswordField("Enter your password");
+ new CapsLockWarning().extend(field);
+
+ addComponent(field);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Mini tutorial code for https://vaadin.com/wiki/-/wiki/Main/Creating%20a%20component%20extension";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/minitutorials/v7a3/Flot.java b/uitest/src/com/vaadin/tests/minitutorials/v7a3/Flot.java
index 816c60cfe5..3facad3631 100644
--- a/uitest/src/com/vaadin/tests/minitutorials/v7a3/Flot.java
+++ b/uitest/src/com/vaadin/tests/minitutorials/v7a3/Flot.java
@@ -20,9 +20,10 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import org.json.JSONArray;
+import org.json.JSONException;
+
import com.vaadin.annotations.JavaScript;
-import com.vaadin.external.json.JSONArray;
-import com.vaadin.external.json.JSONException;
import com.vaadin.ui.AbstractJavaScriptComponent;
import com.vaadin.ui.JavaScriptFunction;
import com.vaadin.ui.Notification;
diff --git a/uitest/src/com/vaadin/tests/minitutorials/v7b1/Addition.java b/uitest/src/com/vaadin/tests/minitutorials/v7b1/Addition.java
new file mode 100644
index 0000000000..a91df49508
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/minitutorials/v7b1/Addition.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2011 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.vaadin.tests.minitutorials.v7b1;
+
+import com.vaadin.shared.ComponentState;
+import com.vaadin.ui.AbstractComponent;
+
+public class Addition extends AbstractComponent {
+ private int term1;
+ private int term2;
+ private boolean needsRecalculation = false;
+
+ public void setTerm1(int value1) {
+ term1 = value1;
+ needsRecalculation = true;
+
+ // Mark the component as dirty to ensure beforeClientResponse will be
+ // invoked
+ markAsDirty();
+ }
+
+ public void setTerm2(int value2) {
+ term2 = value2;
+ needsRecalculation = true;
+
+ // Mark the component as dirty to ensure beforeClientResponse will be
+ // invoked
+ markAsDirty();
+ }
+
+ private int calculateSum() {
+ return term1 + term2;
+ }
+
+ @Override
+ public void beforeClientResponse(boolean initial) {
+ super.beforeClientResponse(initial);
+ if (needsRecalculation) {
+ needsRecalculation = false;
+ // This could be an expensive operation that we don't want to do
+ // every time setTerm1 or setTerm2 is invoked.
+ getState().sum = calculateSum();
+ }
+ }
+
+ @Override
+ protected AddResultState getState() {
+ return (AddResultState) super.getState();
+ }
+}
+
+class AddResultState extends ComponentState {
+ public int sum;
+}
diff --git a/uitest/src/com/vaadin/tests/minitutorials/v7b1/CapsLockWarningWithRpc.java b/uitest/src/com/vaadin/tests/minitutorials/v7b1/CapsLockWarningWithRpc.java
new file mode 100644
index 0000000000..422a200f62
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/minitutorials/v7b1/CapsLockWarningWithRpc.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2011 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.vaadin.tests.minitutorials.v7b1;
+
+import com.vaadin.server.AbstractExtension;
+import com.vaadin.tests.widgetset.client.minitutorials.v7b1.CapsLockWarningRpc;
+import com.vaadin.ui.Notification;
+import com.vaadin.ui.PasswordField;
+
+public class CapsLockWarningWithRpc extends AbstractExtension {
+ public CapsLockWarningWithRpc() {
+ registerRpc(new CapsLockWarningRpc() {
+ @Override
+ public void isCapsLockEnabled(boolean isCapsLockEnabled) {
+ Notification.show("Caps Lock was "
+ + (isCapsLockEnabled ? "enabled" : "disabled"));
+ }
+ });
+ }
+
+ public void extend(PasswordField field) {
+ super.extend(field);
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/minitutorials/v7b1/ReducingRoundTrips.java b/uitest/src/com/vaadin/tests/minitutorials/v7b1/ReducingRoundTrips.java
new file mode 100644
index 0000000000..4ab3bc1526
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/minitutorials/v7b1/ReducingRoundTrips.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2011 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.vaadin.tests.minitutorials.v7b1;
+
+import com.vaadin.annotations.Widgetset;
+import com.vaadin.server.WrappedRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.tests.widgetset.TestingWidgetSet;
+import com.vaadin.ui.PasswordField;
+
+@Widgetset(TestingWidgetSet.NAME)
+public class ReducingRoundTrips extends AbstractTestUI {
+ @Override
+ protected void setup(WrappedRequest request) {
+ PasswordField passwordField = new PasswordField("Enter password");
+ passwordField.setImmediate(true);
+ CapsLockWarningWithRpc capsLockWarningWithRpc = new CapsLockWarningWithRpc();
+
+ capsLockWarningWithRpc.extend(passwordField);
+
+ addComponent(passwordField);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Mini tutorial code for https://vaadin.com/wiki/-/wiki/Main/Reducing%20server%20round%20trips%20for%20components";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return null;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/navigator/NavigatorTest.java b/uitest/src/com/vaadin/tests/navigator/NavigatorTest.java
index bfb11f6b8c..ef9130a2b1 100644
--- a/uitest/src/com/vaadin/tests/navigator/NavigatorTest.java
+++ b/uitest/src/com/vaadin/tests/navigator/NavigatorTest.java
@@ -77,7 +77,7 @@ public class NavigatorTest extends UI {
class NaviListener implements ViewChangeListener {
@Override
- public boolean isViewChangeAllowed(ViewChangeEvent event) {
+ public boolean beforeViewChange(ViewChangeEvent event) {
if (event.getNewView() instanceof ForbiddenView) {
log.log("Prevent navigation to ForbiddenView");
return false;
@@ -86,7 +86,7 @@ public class NavigatorTest extends UI {
}
@Override
- public void navigatorViewChanged(ViewChangeEvent event) {
+ public void afterViewChange(ViewChangeEvent event) {
}
};
diff --git a/uitest/src/com/vaadin/tests/resources/ConnectorResourceTest.java b/uitest/src/com/vaadin/tests/resources/ConnectorResourceTest.java
index c8d711f0b2..4da3bcef2c 100644
--- a/uitest/src/com/vaadin/tests/resources/ConnectorResourceTest.java
+++ b/uitest/src/com/vaadin/tests/resources/ConnectorResourceTest.java
@@ -30,14 +30,13 @@ public class ConnectorResourceTest extends AbstractTestUI {
@Override
protected String getTestDescription() {
- // TODO Auto-generated method stub
+ // Adding description would break screenshots -> too lazy to change
return null;
}
@Override
protected Integer getTicketNumber() {
- // TODO Auto-generated method stub
- return null;
+ return Integer.valueOf("9419");
}
@Override
diff --git a/uitest/src/com/vaadin/tests/serialization/DelegateWithoutStateClass.html b/uitest/src/com/vaadin/tests/serialization/DelegateWithoutStateClass.html
new file mode 100644
index 0000000000..2ee77b2d9f
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/serialization/DelegateWithoutStateClass.html
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://192.168.2.41:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.serialization.DelegateWithoutStateClassTest?restartApplication</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsserializationDelegateWithoutStateClassTest::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VExtendedTextArea[0]@rows</td>
+ <td>10</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/serialization/DelegateWithoutStateClassTest.java b/uitest/src/com/vaadin/tests/serialization/DelegateWithoutStateClassTest.java
new file mode 100644
index 0000000000..29975dda91
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/serialization/DelegateWithoutStateClassTest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2011 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.vaadin.tests.serialization;
+
+import com.vaadin.annotations.Widgetset;
+import com.vaadin.server.WrappedRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.tests.widgetset.TestingWidgetSet;
+import com.vaadin.tests.widgetset.server.DelegateWithoutStateClassComponent;
+
+@Widgetset(TestingWidgetSet.NAME)
+public class DelegateWithoutStateClassTest extends AbstractTestUI {
+
+ @Override
+ protected void setup(WrappedRequest request) {
+ DelegateWithoutStateClassComponent c = new DelegateWithoutStateClassComponent();
+ c.setRows(10);
+ addComponent(c);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "The height of the text area should be 10 rows if @DelegateToWidget works properly for widget subclasses even if there is no state subclass.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return Integer.valueOf(9561);
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/tickets/Ticket1506_Panel.java b/uitest/src/com/vaadin/tests/tickets/Ticket1506_Panel.java
index 9835e046dc..5f36427733 100644
--- a/uitest/src/com/vaadin/tests/tickets/Ticket1506_Panel.java
+++ b/uitest/src/com/vaadin/tests/tickets/Ticket1506_Panel.java
@@ -2,6 +2,7 @@ package com.vaadin.tests.tickets;
import com.vaadin.data.Container;
import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.shared.ui.combobox.FilteringMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Component;
import com.vaadin.ui.Panel;
@@ -37,7 +38,7 @@ public class Ticket1506_Panel extends Panel {
private Component initSelect(Container containerDataSource, String caption,
ObjectProperty<?> property) {
Select select = new Select(caption);
- select.setFilteringMode(Select.FILTERINGMODE_CONTAINS);
+ select.setFilteringMode(FilteringMode.CONTAINS);
select.setImmediate(true);
select.setNullSelectionAllowed(false);
select.setItemCaptionPropertyId(Ticket1506_TestContainer.PROPERTY_2_ID);
diff --git a/uitest/src/com/vaadin/tests/tickets/Ticket2009.java b/uitest/src/com/vaadin/tests/tickets/Ticket2009.java
index 538ffb762b..64429ed75b 100644
--- a/uitest/src/com/vaadin/tests/tickets/Ticket2009.java
+++ b/uitest/src/com/vaadin/tests/tickets/Ticket2009.java
@@ -44,7 +44,7 @@ public class Ticket2009 extends com.vaadin.LegacyApplication {
public void itemClick(ItemClickEvent event) {
events.addComponent(new Label(new Label("Click:"
+ (event.isDoubleClick() ? "double" : "single")
- + " button:" + event.getButton() + " propertyId:"
+ + " button:" + event.getButtonName() + " propertyId:"
+ event.getPropertyId() + " itemID:"
+ event.getItemId() + " item:" + event.getItem())));
@@ -67,7 +67,7 @@ public class Ticket2009 extends com.vaadin.LegacyApplication {
public void itemClick(ItemClickEvent event) {
events2.addComponent(new Label("Click:"
+ (event.isDoubleClick() ? "double" : "single")
- + " button:" + event.getButton() + " propertyId:"
+ + " button:" + event.getButtonName() + " propertyId:"
+ event.getPropertyId() + " itemID:"
+ event.getItemId() + " item:" + event.getItem()));
if (event.isDoubleClick()) {
diff --git a/uitest/src/com/vaadin/tests/tickets/Ticket2043.java b/uitest/src/com/vaadin/tests/tickets/Ticket2043.java
index d3d984c8be..834301fb1c 100644
--- a/uitest/src/com/vaadin/tests/tickets/Ticket2043.java
+++ b/uitest/src/com/vaadin/tests/tickets/Ticket2043.java
@@ -2,6 +2,7 @@ package com.vaadin.tests.tickets;
import com.vaadin.LegacyApplication;
import com.vaadin.server.ExternalResource;
+import com.vaadin.shared.ui.BorderStyle;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.Link;
import com.vaadin.ui.UI.LegacyWindow;
@@ -21,7 +22,7 @@ public class Ticket2043 extends LegacyApplication {
private void createUI(GridLayout layout) {
Link l = new Link("Vaadin home (new 200x200 window, no decor, icon)",
new ExternalResource("http://www.vaadin.com"), "_blank", 200,
- 200, Link.TARGET_BORDER_NONE);
+ 200, BorderStyle.NONE);
layout.addComponent(l);
}
diff --git a/uitest/src/com/vaadin/tests/vaadincontext/TestAddonContextListener.java b/uitest/src/com/vaadin/tests/vaadincontext/TestAddonContextListener.java
index 1f50110330..87a0f5fa51 100644
--- a/uitest/src/com/vaadin/tests/vaadincontext/TestAddonContextListener.java
+++ b/uitest/src/com/vaadin/tests/vaadincontext/TestAddonContextListener.java
@@ -58,7 +58,7 @@ public class TestAddonContextListener implements AddonContextListener {
}
@Override
- public void contextDestoryed(AddonContextEvent event) {
+ public void contextDestroyed(AddonContextEvent event) {
// Nothing to do
}
diff --git a/uitest/src/com/vaadin/tests/widgetset/client/DelegateWithoutStateClassConnector.java b/uitest/src/com/vaadin/tests/widgetset/client/DelegateWithoutStateClassConnector.java
new file mode 100644
index 0000000000..647e84f059
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/widgetset/client/DelegateWithoutStateClassConnector.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2011 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.vaadin.tests.widgetset.client;
+
+import com.google.gwt.core.shared.GWT;
+import com.vaadin.client.ui.textarea.TextAreaConnector;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.tests.widgetset.server.DelegateWithoutStateClassComponent;
+
+@Connect(DelegateWithoutStateClassComponent.class)
+public class DelegateWithoutStateClassConnector extends TextAreaConnector {
+ @Override
+ public VExtendedTextArea getWidget() {
+ return (VExtendedTextArea) super.getWidget();
+ }
+
+ @Override
+ protected VExtendedTextArea createWidget() {
+ return GWT.create(VExtendedTextArea.class);
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/widgetset/client/VExtendedTextArea.java b/uitest/src/com/vaadin/tests/widgetset/client/VExtendedTextArea.java
new file mode 100644
index 0000000000..704b9cc6d9
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/widgetset/client/VExtendedTextArea.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2011 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.vaadin.tests.widgetset.client;
+
+import com.vaadin.client.ui.textarea.VTextArea;
+
+public class VExtendedTextArea extends VTextArea {
+
+}
diff --git a/uitest/src/com/vaadin/tests/widgetset/client/minitutorials/v7a3/CapsLockWarningConnector.java b/uitest/src/com/vaadin/tests/widgetset/client/minitutorials/v7a3/CapsLockWarningConnector.java
new file mode 100644
index 0000000000..7b1a56dc62
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/widgetset/client/minitutorials/v7a3/CapsLockWarningConnector.java
@@ -0,0 +1,39 @@
+package com.vaadin.tests.widgetset.client.minitutorials.v7a3;
+
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.client.ComponentConnector;
+import com.vaadin.client.ServerConnector;
+import com.vaadin.client.extensions.AbstractExtensionConnector;
+import com.vaadin.client.ui.VOverlay;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.tests.minitutorials.v7a3.CapsLockWarning;
+
+@Connect(CapsLockWarning.class)
+public class CapsLockWarningConnector extends AbstractExtensionConnector {
+
+ @Override
+ protected void extend(ServerConnector target) {
+ final Widget passwordWidget = ((ComponentConnector) target).getWidget();
+
+ final VOverlay warning = new VOverlay();
+ warning.add(new HTML("Caps Lock is enabled!"));
+
+ passwordWidget.addDomHandler(new KeyPressHandler() {
+ @Override
+ public void onKeyPress(KeyPressEvent event) {
+ if (isEnabled() && isCapsLockOn(event)) {
+ warning.showRelativeTo(passwordWidget);
+ } else {
+ warning.hide();
+ }
+ }
+ }, KeyPressEvent.getType());
+ }
+
+ private boolean isCapsLockOn(KeyPressEvent e) {
+ return e.isShiftKeyDown() ^ Character.isUpperCase(e.getCharCode());
+ }
+} \ No newline at end of file
diff --git a/uitest/src/com/vaadin/tests/widgetset/client/minitutorials/v7b1/CapsLockWarningRpc.java b/uitest/src/com/vaadin/tests/widgetset/client/minitutorials/v7b1/CapsLockWarningRpc.java
new file mode 100644
index 0000000000..3db8d712c4
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/widgetset/client/minitutorials/v7b1/CapsLockWarningRpc.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2011 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.vaadin.tests.widgetset.client.minitutorials.v7b1;
+
+import com.vaadin.shared.annotations.Delayed;
+import com.vaadin.shared.communication.ServerRpc;
+
+public interface CapsLockWarningRpc extends ServerRpc {
+ @Delayed(lastonly = true)
+ public void isCapsLockEnabled(boolean isCapsLockEnabled);
+}
diff --git a/uitest/src/com/vaadin/tests/widgetset/client/minitutorials/v7b1/CapsLockWarningWithRpcConnector.java b/uitest/src/com/vaadin/tests/widgetset/client/minitutorials/v7b1/CapsLockWarningWithRpcConnector.java
new file mode 100644
index 0000000000..fdd14d40d5
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/widgetset/client/minitutorials/v7b1/CapsLockWarningWithRpcConnector.java
@@ -0,0 +1,47 @@
+package com.vaadin.tests.widgetset.client.minitutorials.v7b1;
+
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.client.ComponentConnector;
+import com.vaadin.client.ServerConnector;
+import com.vaadin.client.communication.RpcProxy;
+import com.vaadin.client.extensions.AbstractExtensionConnector;
+import com.vaadin.client.ui.VOverlay;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.tests.minitutorials.v7b1.CapsLockWarningWithRpc;
+
+@Connect(CapsLockWarningWithRpc.class)
+public class CapsLockWarningWithRpcConnector extends AbstractExtensionConnector {
+
+ private CapsLockWarningRpc rpc = RpcProxy.create(CapsLockWarningRpc.class,
+ this);
+
+ @Override
+ protected void extend(ServerConnector target) {
+ final Widget passwordWidget = ((ComponentConnector) target).getWidget();
+
+ final VOverlay warning = new VOverlay();
+ warning.add(new HTML("Caps Lock is enabled!"));
+
+ passwordWidget.addDomHandler(new KeyPressHandler() {
+ @Override
+ public void onKeyPress(KeyPressEvent event) {
+ if (isEnabled() && isCapsLockOn(event)) {
+ warning.showRelativeTo(passwordWidget);
+ rpc.isCapsLockEnabled(true); // Added to send message to the
+ // server
+ } else {
+ warning.hide();
+ rpc.isCapsLockEnabled(false); // Added to send message to
+ // the server
+ }
+ }
+ }, KeyPressEvent.getType());
+ }
+
+ private boolean isCapsLockOn(KeyPressEvent e) {
+ return e.isShiftKeyDown() ^ Character.isUpperCase(e.getCharCode());
+ }
+} \ No newline at end of file
diff --git a/theme-compiler/src/com/vaadin/sass/tree/IfNode.java b/uitest/src/com/vaadin/tests/widgetset/server/DelegateWithoutStateClassComponent.java
index e425538104..a0609e5a31 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/IfNode.java
+++ b/uitest/src/com/vaadin/tests/widgetset/server/DelegateWithoutStateClassComponent.java
@@ -14,9 +14,10 @@
* the License.
*/
-package com.vaadin.sass.tree;
+package com.vaadin.tests.widgetset.server;
-public class IfNode extends Node {
- private static final long serialVersionUID = 1561250630856748066L;
+import com.vaadin.ui.TextArea;
+
+public class DelegateWithoutStateClassComponent extends TextArea {
}