aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WebContent/VAADIN/themes/reindeer/tabsheet/tabsheet-minimal-style.scss12
-rw-r--r--WebContent/release-notes.html348
-rw-r--r--all/build.xml2
-rw-r--r--client/src/com/vaadin/client/ApplicationConnection.java74
-rw-r--r--client/src/com/vaadin/client/ComponentDetail.java10
-rw-r--r--client/src/com/vaadin/client/ComponentDetailMap.java11
-rw-r--r--client/src/com/vaadin/client/ConnectorMap.java80
-rw-r--r--client/src/com/vaadin/client/FastStringMap.java74
-rw-r--r--client/src/com/vaadin/client/FastStringSet.java29
-rw-r--r--client/src/com/vaadin/client/JsArrayObject.java42
-rw-r--r--client/src/com/vaadin/client/LayoutManager.java183
-rw-r--r--client/src/com/vaadin/client/communication/JsonDecoder.java44
-rw-r--r--client/src/com/vaadin/client/communication/JsonEncoder.java9
-rw-r--r--client/src/com/vaadin/client/communication/StateChangeEvent.java68
-rw-r--r--client/src/com/vaadin/client/metadata/Method.java13
-rw-r--r--client/src/com/vaadin/client/metadata/Property.java13
-rw-r--r--client/src/com/vaadin/client/metadata/Type.java34
-rw-r--r--client/src/com/vaadin/client/metadata/TypeDataStore.java132
-rw-r--r--client/src/com/vaadin/client/ui/AbstractClickEventHandler.java7
-rw-r--r--client/src/com/vaadin/client/ui/AbstractComponentConnector.java39
-rw-r--r--client/src/com/vaadin/client/ui/AbstractConnector.java31
-rw-r--r--client/src/com/vaadin/client/ui/FocusableScrollPanel.java8
-rw-r--r--client/src/com/vaadin/client/ui/TouchScrollDelegate.java68
-rw-r--r--client/src/com/vaadin/client/ui/VFilterSelect.java4
-rw-r--r--client/src/com/vaadin/client/ui/VScrollTable.java22
-rw-r--r--client/src/com/vaadin/client/ui/VUpload.java50
-rw-r--r--client/src/com/vaadin/client/ui/VWindow.java5
-rw-r--r--client/src/com/vaadin/client/ui/button/ButtonConnector.java7
-rw-r--r--client/src/com/vaadin/client/ui/colorpicker/AbstractColorPickerConnector.java11
-rw-r--r--client/src/com/vaadin/client/ui/colorpicker/ColorPickerGradientConnector.java9
-rw-r--r--client/src/com/vaadin/client/ui/colorpicker/ColorPickerGridConnector.java17
-rw-r--r--client/src/com/vaadin/client/ui/csslayout/CssLayoutConnector.java23
-rw-r--r--client/src/com/vaadin/client/ui/layout/LayoutDependencyTree.java366
-rw-r--r--client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java17
-rw-r--r--client/src/com/vaadin/client/ui/tabsheet/TabsheetBaseConnector.java9
-rw-r--r--server/src/com/vaadin/data/util/sqlcontainer/SQLContainer.java13
-rw-r--r--server/src/com/vaadin/data/util/sqlcontainer/query/FreeformQuery.java160
-rw-r--r--server/src/com/vaadin/data/util/sqlcontainer/query/TableQuery.java22
-rw-r--r--server/src/com/vaadin/event/ListenerMethod.java8
-rw-r--r--server/src/com/vaadin/server/AbstractCommunicationManager.java10
-rw-r--r--server/src/com/vaadin/server/WebBrowser.java10
-rw-r--r--server/src/com/vaadin/ui/AbstractComponent.java15
-rw-r--r--server/src/com/vaadin/ui/Table.java192
-rw-r--r--server/src/com/vaadin/ui/TreeTable.java7
-rw-r--r--server/tests/src/com/vaadin/tests/server/component/table/CacheUpdateExceptionCauses.java56
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java3518
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj55
-rw-r--r--theme-compiler/tests/resources/automatic/css/selector-with-parenthesis.css5
-rw-r--r--theme-compiler/tests/resources/automatic/scss/selector-with-parenthesis.scss11
-rw-r--r--uitest/src/com/vaadin/tests/components/combobox/ComboBoxDuplicateCaption.java66
-rw-r--r--uitest/src/com/vaadin/tests/components/embedded/FlashIsVisible.html2
-rw-r--r--uitest/src/com/vaadin/tests/components/embedded/FlashIsVisible.java11
-rw-r--r--uitest/src/com/vaadin/tests/components/flash/FlashIsVisible.html2
-rw-r--r--uitest/src/com/vaadin/tests/components/flash/FlashIsVisible.java5
-rw-r--r--uitest/src/com/vaadin/tests/components/flash/simple.swfbin0 -> 437 bytes
-rw-r--r--uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalLayoutVerticalAlign.html27
-rw-r--r--uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalLayoutVerticalAlign.java44
-rw-r--r--uitest/src/com/vaadin/tests/components/richtextarea/RichTextAreaPreventsTextFieldAccess.html62
-rw-r--r--uitest/src/com/vaadin/tests/components/richtextarea/RichTextAreaPreventsTextFieldAccess.java113
-rw-r--r--uitest/src/com/vaadin/tests/components/table/ColumnReorderingWithManyColumns.html42
-rw-r--r--uitest/src/com/vaadin/tests/components/table/ColumnReorderingWithManyColumns.java48
-rw-r--r--uitest/src/com/vaadin/tests/components/table/SetDataSourceWithPropertyIds.java4
-rw-r--r--uitest/src/com/vaadin/tests/components/table/TableDragColumn.html2
-rw-r--r--uitest/src/com/vaadin/tests/components/table/TableInSubWindowMemoryLeak.java68
-rw-r--r--uitest/src/com/vaadin/tests/components/table/TableWithBrokenGeneratorAndContainer.html178
-rw-r--r--uitest/src/com/vaadin/tests/components/table/TableWithBrokenGeneratorAndContainer.java181
-rw-r--r--uitest/src/com/vaadin/tests/components/table/ValueAfterClearingContainer.html179
-rw-r--r--uitest/src/com/vaadin/tests/components/table/ValueAfterClearingContainer.java84
-rw-r--r--uitest/src/com/vaadin/tests/components/tabsheet/WrapTabSheetInTabSheet.html57
-rw-r--r--uitest/src/com/vaadin/tests/components/tabsheet/WrapTabSheetInTabSheet.java2
-rw-r--r--uitest/src/com/vaadin/tests/components/upload/TestFileUpload.java21
-rw-r--r--uitest/src/com/vaadin/tests/components/upload/TestFileUploadSize.java80
-rw-r--r--uitest/src/com/vaadin/tests/containers/sqlcontainer/TableQueryWithNonUniqueFirstPrimaryKey.html67
-rw-r--r--uitest/src/com/vaadin/tests/containers/sqlcontainer/TableQueryWithNonUniqueFirstPrimaryKey.java124
-rw-r--r--uitest/vaadin-server.xml4
75 files changed, 4879 insertions, 2547 deletions
diff --git a/WebContent/VAADIN/themes/reindeer/tabsheet/tabsheet-minimal-style.scss b/WebContent/VAADIN/themes/reindeer/tabsheet/tabsheet-minimal-style.scss
index 989e1d3f5a..fe17d90e26 100644
--- a/WebContent/VAADIN/themes/reindeer/tabsheet/tabsheet-minimal-style.scss
+++ b/WebContent/VAADIN/themes/reindeer/tabsheet/tabsheet-minimal-style.scss
@@ -105,9 +105,15 @@
-moz-border-radius: 7px;
}
-.v-ie9 & .#{$primaryStyleName}-tabs-minimal .#{$primaryStyleName}-caption-close:only-child,
-.v-ie9 & .#{$primaryStyleName}-tabs-minimal .v-captiontext:first-child + .#{$primaryStyleName}-caption-close {
- margin-top: -14px;
+.v-ie9 & .#{$primaryStyleName}-tabs-minimal .#{$primaryStyleName}-tabitem .#{$primaryStyleName}-caption-close {
+ &, &:hover, &:active {
+
+ /* IE9 suffers from rounding subpixel values errors when measuring the tabs which makes the close button wrap. */
+ margin-left: 2.5px;
+
+ /* The close button is a pixel too high in IE9, adjust for that */
+ margin-top: 1px;
+ }
}
.#{$primaryStyleName}-tabs-minimal .#{$primaryStyleName}-caption-close:hover,
diff --git a/WebContent/release-notes.html b/WebContent/release-notes.html
index eaa8404580..d5c1109068 100644
--- a/WebContent/release-notes.html
+++ b/WebContent/release-notes.html
@@ -117,103 +117,257 @@
The @version@ includes many major and minor enhancements and changes. Below is a
list of the most notable changes:
</p>
-
+
<ul>
- <li>GWT is now built into Vaadin Framework
+ <li>UI replaces Application as the main entry point
<ul>
- <li>New SuperDevMode allows debugging client-side Java code in the browser without any plugins</li>
+ <li>Heartbeat to reliably detect closed UI</li>
+ <li>Supports multiple browser tabs by default</li>
+ <li>Browser and request details available in UI init</li>
+ <li>Direct access to request and session in UI init</li>
+ <li>Access detected browser details in UI init</li>
+ <li>Default UI class chosen based on a servlet parameter</li>
+ <li>Custom UIProvider allows providing different UIs based on request parameters</li>
+ <li>UI is by default reinitialized when the page is reloaded</li>
</ul>
</li>
- <li>Applications are now written by extending the <b>UI</b> class instead of the <b>Application</b> class
- <ul>
- <li>The UI class needs to be specified in the <tt>web.xml</tt> with the <tt>ui</tt> parameter</li>
- <li>A <b>Page</b> object accessible from UI with <tt>getPage()</tt> contains API related to the browser window</li>
- <li>The <tt>executeJavaScript()</tt> method is removed and replaced with a <b>JavaScript</b> object accessible from the <b>Page</b> with <tt>getJavaScript()</tt></li>
- <li>Reloading page spawns a new instance unless <tt>@PreserveOnRefresh</tt> specified for the UI</li>
- <li>UIs use heartbeat to detect closing</li>
- <li>Embedding of Vaadin applications (now UIs) in HTML pages has changed
- <ul>
- <li>Embedded UIs can have different themes and widget sets</li>
- </ul>
- </li>
- </ul>
- </li>
- <li>The <b>Application</b> class is removed altogether
- <ul>
- <li><b>ApplicationServlet</b> is replaced with <b>VaadinServlet</b> and <b>VaadinService</b></li>
- <li>User session is now associated with a <b>VaadinSession</b></li>
- <li><b>ApplicationResource</b> is replaced with <b>ConnectorResource</b></li>
- </ul>
- </li>
- <li>The current <b>UI</b>, <b>Page</b>, <b>VaadinServlet</b>, <b>VaadinService</b>, and <b>VaadinSession</b> can be accessed globally with a static <tt>getCurrent()</tt> method. The instance is a ThreadLocal object for the currently processed request.</li>
- <li>The <b>Window</b> now only has the meaning of a floating sub-window inside browser window</li>
- <li>The <b>Panel</b> and <b>Window</b>no longer extend <b>ComponentContainer</b>,
- but <b>SingleComponentContainer</b>, which has no <tt>addComponent()</tt> method
- <ul>
- <li>The <b>UI</b>, <b>Panel</b>, and <b>Window</b> do not have have default
- content (used to be a <b>VerticalLayout</b>), but you must set the content
- component explicitly with the <tt>setContent()</tt> method or in the
- constructor</li>
-
- <li>If the content is a layout, you need to add other components to the layout
- component with <tt>addComponent()</tt> instead of the container</li>
- </ul>
- </li>
- <li>Popup windows can no longer be opened directly from code, but by using a <b>BrowserWindowOpener</b> extension which can be attached to any component</li>
- <li>Navigation API for view navigation
- <ul>
- <li>View navigation with bookmarking/linking with URI fragments and browser history support</li>
- <li>Access control for views, view change confirmation</li>
- </ul>
- </li>
- <li>Component and UI extensions are now possible</li>
- <li>Complete overhaul of the client-server communication architecture
- <ul>
- <li>All add-on components that have widgets need to be ported to Vaadin 7</li>
- <li>Integration of a GWT widget is done in a connector class</li>
- <li>Component-to-widget mapping now defined on the client-side, in the connector</li>
- <li>No more Paintable or VariableOwner</li>
- <li>Server-side components communicate their state to client-side widgets with a shared state object which is automatically synchronized</li>
- <li>Both client-side and server-side can make RPC calls to the other side
- <ul>
- <li>Communicated in the next request/response</li>
- <li>No return values</li>
- <li>Typically for communicating events</li>
- </ul>
- </li>
- <li>Support for JavaScript components - no GWT integration code or widgets required</li>
- <li>Handle JavaScript callbacks on the server-side</li>
- <li>UIDL is deprecated</li>
- <li>Compatibility layer for Vaadin 6 included for easy migration</li>
- </ul>
- </li>
- <li><b>Form</b> is deprecated and form data binding is replaced with the new <b>FieldGroup</b>
- <ul>
- <li>Conversion between property and field type now handled with <b>Converter</b>s</li>
- </ul>
- </li>
- <li>The <b>LoginForm</b> component is now deprecated because of unreliable support in browsers</li>
- <li>Themeing is now done with <a href="http://sass-lang.com/">Sass</a>
- <ul>
- <li>Sass themes in SCSS notation are compiled on-the-fly when loading the theme (in debug/development mode), or manually with the theme compiler (in production mode)</li>
- <li>Pure CSS themes are supported and largely compatible with Vaadin 6, but should include <tt>legacy-styles.css</tt>
- <li>SASS themes need to (and CSS themes can) be compiled to a single CSS stylesheet with the <tt>vaadin-theme-compiler</tt></li>
- <li>Sass compiler can also be used in client-side projects.</li>
- <li>Multiple themes can be used in a page</li>
- </ul>
- </li>
- <li>All <tt>addListener()</tt> methods have changed to listener-specific methods, such as <tt>addClickListener()</tt>, <tt>addValueChangeListener()</tt>, etc.</li>
- <li><b>UriFragmentListener</b> changed to <b>UriFragmentChangedListener</b></li>
- <li><b>UriHandler</b> and <b>ParameterHandler</b> replaced with <b>RequestHandler</b></li>
- <li>Resource loading (JS/CSS) by the framework</li>
- <li>Packaging has changed, now in a ZIP package (see <a href="package">Package Contents</a> above)
- </li>
- <li>Add-ons can modify the startup page</li>
- <li>You can get the computed style of a component from the browser</li>
- <li>Support for border, padding, and margin in core layout components</li>
- <li>The <b>ColorPicker</b> component is now included in the Vaadin core framework</li>
- </ul>
-
+ <li>Redesigned layouts
+ <ul>
+ <li>Minimal or no layout calculations to maximize layout speed</li>
+ <li>Full control of layouts with CSS including borders and margins</li>
+ <li>Redesigned lighter DOM for vertical, horizontal and css layout</li>
+ <li>Client-side ComputedStyle API available</li>
+ </ul>
+ </li>
+ <li>Split to seven jars to allow deploying only what you need</li>
+ <li>Adding multiple components with varargs in addComponents and appropriate constructors</li>
+ <li>Support for mixing multiple themes on the same page</li>
+
+ <li>RPC for communication between the server and the browser
+ <ul>
+ <li>Static typing allows compile time checking</li>
+ <li>Supports Java's primitive and boxed types, String, enums, arrays, List, Set, Map and Java beans</li>
+ <li>Supports references to external or self served resources and references to other components</li>
+ <li>Call from browser to server can be delayed to piggyback on the next XHR, optionally folding similar calls to only send the last value</li>
+ <li>Calls to disabled or invisible components are ignored for security reasons</li>
+ </ul>
+ </li>
+ <li>Server-client shared state
+ <ul>
+ <li>Java objects can be shared between client and server for easy component development</li>
+ <li>State is automatically mirrored from server to client</li>
+ <li>Support both public fields and bean properties</li>
+ <li>Supports the same types as with RPC</li>
+ <li>Only parts of the state that are modified are sent over the wire</li>
+ <li>Allow calculating state on the fly just before state is sent to client</li>
+ <li>Client-side can listen to shared state changes to simplify connectors</li>
+ <li>State class can be annotated to automatically delegate state changes to corresponding properties in widgets</li>
+ </ul>
+ </li>
+ <li>Google Web Toolkit included
+ <ul>
+ <li>A full copy of GWT is included in Vaadin Framework</li>
+ <li>Vaadin team maintains a branch of GWT to include bug fixes and new features independent of official GWT release schedules</li>
+ <li>All functionality of GWT is included to enable writing of client side UI:s, stateless applications, offline functionality and custom widgets</li>
+ <li>Included Elemental library gives direct access to all cutting edge browser features</li>
+ <li>Both browser plug-in based dev mode debugging as well as super dev mode are supported</li>
+ </ul>
+ </li>
+ <li>No more need to call requestRepaint() in components</li>
+ <li>High level view navigation
+ <ul>
+ <li>Support for URI fragment based view management</li>
+ <li>Support for registering both pre-initialized view instances as well as view classes</li>
+ <li>Programmatic navigation with navigateTo()</li>
+ <li>Supports saving bookmarks to views</li>
+ <li>Supports parameterized views</li>
+ <li>Views can block navigation</li>
+ </ul>
+ </li>
+ <li>Connectors
+ <ul>
+ <li>Connectors provide a flexible communication channel between client and server</li>
+ <li>Separating communication code from widgets promotes reusability</li>
+ <li>An explicit Connector hierarchy is maintained</li>
+ <li>Mapping between server-side and client-side defined in client-side code to avoid server-side classpath issues</li>
+ </ul>
+ </li>
+ <li>JavaScript Connectors
+ <ul>
+ <li>Implement connector logic using JavaScript instead of Java for easier integration with JavaScript libraries</li>
+ <li>Wrap around any existing JavaScript based widget to adapt it for use in Vaadin</li>
+ <li>No widgetset compilation needed</li>
+ <li>Support for shared state and RPC as well as JSON-based communication based on simple JavaScript functions</li>
+ </ul>
+ </li>
+ <li>ColorPicker component
+ <ul>
+ <li>Easy to use interface with clickable color gradients</li>
+ <li>RGB, HSV and swatches color modes</li>
+ <li>Color history</li>
+ <li>Color preview</li>
+ <li>CSS color code representation and handling</li>
+ </ul>
+ </li>
+ <li>Add listeners without method overloads
+ <ul>
+ <li>Write addClickListener() instead of generic addListener()</li>
+ <li>Supports code completion in IDE:s better</li>
+ <li>Enables using Java 8 Lambda</li>
+ </ul>
+ </li>
+ <li>Renewed Vaadin Maven Plugin including features from GWT Maven Plugin
+ <ul>
+ <li>New Maven architype eases creation of Vaadin 7 applications</li>
+ </ul>
+ </li>
+ <li>Renewed Eclipse Plugin adding Apache Ivy based dependency management</li>
+ <li>Page bootstrapping renewed
+ <ul>
+ <li>Simpler inclusion of Vaadin UIs to custom web pages</li>
+ <li>Add-ons and applications can dynamically modify bootstrap page HTML</li>
+ </ul>
+ </li>
+ <li>VaadinSession
+ <ul>
+ <li>Full control over session lifecycle</li>
+ <li>Abstract away from servlets and portlets</li>
+ </ul>
+ </li>
+ <li>VaadinService
+ <ul>
+ <li>Easily access deployment information and HTTP requests</li>
+ <li>Abstract away from servlets and portlets</li>
+ </ul>
+ </li>
+ <li>Component extension API
+ <ul>
+ <li>Allow adding functionality and customizations to any component</li>
+ <li>Modify DOM and hook event listeners</li>
+ </ul>
+ </li>
+ <li>JavaScript callbacks
+ <ul>
+ <li>Declare client-side JavaScript API from server</li>
+ <li>Eases integration with parts of the page not controlled with Vaadin</li>
+ </ul>
+ </li>
+ <li>Relative paths used for all requests
+ <ul>
+ <li>More flexible deployment</li>
+ <li>Adds support for Apache ProxyPass and other similar proxies</li>
+ </ul>
+ </li>
+ <li>HTML5
+ <ul>
+ <li>Vaadin 7 uses HTML5 doctype</li>
+ <li>Use any parts of HTML5 in your application</li>
+ </ul>
+ </li>
+ <li>Page
+ <ul>
+ <li>Abstraction for one browser window</li>
+ <li>Run JavaScript</li>
+ <li>Listen to page resizes</li>
+ <li>Control navigation</li>
+ </ul>
+ </li>
+ <li>Loading custom JavaScript
+ <ul>
+ <li>Annotate server-side classes with @JavaScript to request loading of JavaScript files</li>
+ <li>Automated control of loading order and ensuring that files are loaded only once</li>
+ </ul>
+ </li>
+ <li>API cleanup
+ <ul>
+ <li>API deprecated in Vaadin 6 or before removed</li>
+ <li>Use enums instead of integer constants</li>
+ </ul>
+ </li>
+ <li>Embedded split up to different components for different purposes
+ <ul>
+ <li>Image for showing images</li>
+ <li>BrowserFrame for embedding web pages with iframes</li>
+ <li>Flash for embedding Flash content</li>
+ <li>Embedded now only intended for embedding using &lt;object&gt;
+ </ul>
+ </li>
+ <li>Support for Firefox 17 extended support release in addition to latest stable Firefox release</li>
+ <li>Sass Compiler
+ <ul>
+ <li>Allows modularization of themes for better reuse and easier maintenance</li>
+ <li>Support the most important features of SCSS</li>
+ <li>Pure Java implementation without Ruby dependency</li>
+ <li>Supports all of CSS</li>
+ <li>On the fly conversion of SCSS to CSS during development</li>
+ <li>Built in themes are now based on Sass</li>
+ <li>Can be used in client-side projects as well</li>
+ </ul>
+ </li>
+ <li>@StyleSheet for automatic injection of css files</li>
+ <li>ConnectorResource replaces ApplicationResource to reduce memory consumption</li>
+ <li>Hierarchical error handling</li>
+ <li>Open popups and start downloads in a way not stopped by popup blockers</li>
+ <li>ThreadLocal access to VaadinService, VaadinRequest, VaadinResponse, VaadinSession and the current UI instance</li>
+ <li>Component id replaces debug ids to allow wider use possibilities for identifying corresponding widget elements in DOM</li>
+ <li>Range retrieval for indexed containers to enable optimize performance</li>
+ <li>Native support for percent sizes to let the browser do the percent to pixel calculation speeds up rendering</li>
+ <li>Custom class loader
+ <ul>
+ <li>Allow specifying custom class loaders to better support Java EE, CDI and Spring</li>
+ <li>Supports both servlets and portlets</li>
+ </ul>
+ </li>
+ <li>Updated data model
+ <ul>
+ <li>Property getValue() uses generics to return the expected type</li>
+ <li>Two phase commit support for commit/rollback</li>
+ <li>BeanItem supports nested properties to allow flattening complex datatypes</li>
+ </ul>
+ </li>
+ <li>Bean Validation - Annotate beans with JSR-303 standard annotations to automatically create validators for the fields</li>
+ <li>Field group
+ <ul>
+ <li>Allow data binding of multiple fields together to item data source</li>
+ <li>Supports buffering</li>
+ <li>Supports two phase commit</li>
+ <li>Annotation based and field name based property mapping</li>
+ </ul>
+ </li>
+ <li>Explicit data model converters
+ <ul>
+ <li>All fields support explicit conversion from presentation format to data source format</li>
+ <li>Conversions are bidirectional</li>
+ <li>Allow defining a default converter for a specific type and override for specific fields</li>
+ <li>Converters can be set per Table column to customize column formatting</li>
+ </ul>
+ </li>
+ <li>Built-in default converters
+ <ul>
+ <li>automated conversions beween String, Boolean, Long, Date, Double, Float, Integer and Number</li>
+ <li>Built in converters support internationalization</li>
+ </ul>
+ </li>
+ <li>Custom field component for building new fields as composition of existing components</li>
+ <li>Simplified validation API
+ <ul>
+ <li>No need to implement isValid() in validators any more</li>
+ </ul>
+ </li>
+ <li>Unsupported browser detection with customizable information page</li>
+ <li>Vaadin 6 compatibility layer to ease migration from Vaadin 6</li>
+ <li>Explicit layouts for Window and Panel</li>
+ <ul>
+ <li>Window and Panel components now require setting layout explicitly</li>
+ <li>Distinction between Window or Panel and it's layout</li>
+ </ul>
+ </li>
+ <li>Layout manager
+ <ul>
+ <li>Allows building custom layout calculations for widgets when browser based layouts are not powerful enough</li>
+ <li>Optimizes number of reflows by batching layout calculations from multiple widgets together</li>
+ </ul>
+ </li>
</ul>
<p>
@@ -1317,8 +1471,7 @@
<h2 id="supportedversions">Supported Technologies</h2>
<p>
- Vaadin 7 is compatible with <b>Java 6</b> and with most operating systems
- supporting the Java 6 or newer. Vaadin 7 is especially supported on the following
+ Vaadin 7 is compatible with <b>Java 6</b>. Vaadin 7 is especially supported on the following
<b>operating systems</b>:
</p>
@@ -1364,7 +1517,8 @@
</p>
<ul>
- <li>Mozilla Firefox 17 or newer</li>
+ <li>Mozilla Firefox 18</li>
+ <li>Mozilla Firefox 17 ESR</li>
<li>Internet Explorer 8-10</li>
<li>Safari 6</li>
<li>Opera 12</li>
@@ -1396,7 +1550,7 @@
<li><a href="http://vaadin.com">vaadin.com - The developer
portal containing everything you need to know about Vaadin</a>
</li>
- <li><a href="http://demo.vaadin.com">demo.vaadin.com - A
+ <li><a href="http://vaadin.com/demo">vaadin.com/demo - A
collection of demos for Vaadin</a></li>
<li><a href="http://vaadin.com/learn">vaadin.com/learn -
Getting started with Vaadin</a></li>
diff --git a/all/build.xml b/all/build.xml
index d5a484a902..ef8ac71c4d 100644
--- a/all/build.xml
+++ b/all/build.xml
@@ -39,7 +39,7 @@
<antcontrib:foreach list="${modules.to.publish.to.maven}" target="unzip.to.javadoctemp" param="module" />
<property name="javadoc.dir" location="${result.dir}/javadoc" />
- <property name="title" value="Vaadin" />
+ <property name="title" value="Vaadin ${vaadin.version} API" />
<javadoc maxmemory="1024m" destdir="${javadoc.dir}" author="true" version="true" use="true" windowtitle="${title}" encoding="utf-8">
<packageset dir="${javadoc.temp.dir}">
<!-- TODO Javadoc throws ClassCastException if this is included (#9660)-->
diff --git a/client/src/com/vaadin/client/ApplicationConnection.java b/client/src/com/vaadin/client/ApplicationConnection.java
index bc260a2bbc..0171d541ea 100644
--- a/client/src/com/vaadin/client/ApplicationConnection.java
+++ b/client/src/com/vaadin/client/ApplicationConnection.java
@@ -153,6 +153,9 @@ public class ApplicationConnection {
// will hold the UIDL security key (for XSS protection) once received
private String uidlSecurityKey = "init";
+ private static final FastStringMap<FastStringSet> allStateFieldsCache = FastStringMap
+ .create();
+
private final HashMap<String, String> resourcesMap = new HashMap<String, String>();
/**
@@ -1605,9 +1608,11 @@ public class ApplicationConnection {
Type stateType = AbstractConnector
.getStateType(component);
- Set<String> changedProperties = sce
- .getChangedProperties();
- for (String propertyName : changedProperties) {
+ FastStringSet changedProperties = sce
+ .getChangedPropertiesFastSet();
+ JsArrayString dump = changedProperties.dump();
+ for (int i = 0; i < dump.length(); i++) {
+ String propertyName = dump.get(i);
Property property = stateType
.getProperty(propertyName);
String method = property
@@ -1670,9 +1675,11 @@ public class ApplicationConnection {
private void unregisterRemovedConnectors() {
int unregistered = 0;
- List<ServerConnector> currentConnectors = new ArrayList<ServerConnector>(
- connectorMap.getConnectors());
- for (ServerConnector c : currentConnectors) {
+ JsArrayObject<ServerConnector> currentConnectors = connectorMap
+ .getConnectorsAsJsArray();
+ int size = currentConnectors.size();
+ for (int i = 0; i < size; i++) {
+ ServerConnector c = currentConnectors.get(i);
if (c.getParent() != null) {
if (!c.getParent().getChildren().contains(c)) {
VConsole.error("ERROR: Connector is connected to a parent but the parent does not contain the connector");
@@ -1856,17 +1863,17 @@ public class ApplicationConnection {
.getName(), null), stateJson, state,
ApplicationConnection.this);
- Set<String> changedProperties = new HashSet<String>();
+ FastStringSet changedProperties = FastStringSet
+ .create();
addJsonFields(stateJson, changedProperties, "");
if (newConnectors.contains(connector)) {
remainingNewConnectors.remove(connector);
// Fire events for properties using the default
// value for newly created connectors
- addAllStateFields(
- AbstractConnector
- .getStateType(connector),
- changedProperties, "");
+ FastStringSet allStateFields = getAllStateFields(AbstractConnector
+ .getStateType(connector));
+ changedProperties.addAll(allStateFields);
}
StateChangeEvent event = new StateChangeEvent(
@@ -1882,10 +1889,8 @@ public class ApplicationConnection {
// Fire events for properties using the default value for newly
// created connectors even if there were no state changes
for (ServerConnector connector : remainingNewConnectors) {
- Set<String> changedProperties = new HashSet<String>();
- addAllStateFields(
- AbstractConnector.getStateType(connector),
- changedProperties, "");
+ FastStringSet changedProperties = getAllStateFields(AbstractConnector
+ .getStateType(connector));
StateChangeEvent event = new StateChangeEvent(connector,
changedProperties);
@@ -1897,6 +1902,17 @@ public class ApplicationConnection {
return events;
}
+ private FastStringSet getAllStateFields(Type type) {
+ FastStringSet fields;
+ fields = allStateFieldsCache.get(type.getBaseTypeName());
+ if (fields == null) {
+ fields = FastStringSet.create();
+ addAllStateFields(type, fields, "");
+ allStateFieldsCache.put(type.getBaseTypeName(), fields);
+ }
+ return fields;
+ }
+
/**
* Recursively adds the names of all properties in the provided
* state type.
@@ -1909,10 +1925,13 @@ public class ApplicationConnection {
* the base name of the current object
*/
private void addAllStateFields(Type type,
- Set<String> foundProperties, String context) {
+ FastStringSet foundProperties, String context) {
try {
- Collection<Property> properties = type.getProperties();
- for (Property property : properties) {
+ JsArrayObject<Property> properties = type
+ .getPropertiesAsArray();
+ int size = properties.size();
+ for (int i = 0; i < size; i++) {
+ Property property = properties.get(i);
String propertyName = context + property.getName();
foundProperties.add(propertyName);
@@ -1942,7 +1961,7 @@ public class ApplicationConnection {
* @param context
* the base name of the current object
*/
- private void addJsonFields(JSONObject json, Set<String> fields,
+ private void addJsonFields(JSONObject json, FastStringSet fields,
String context) {
for (String key : json.keySet()) {
String fieldName = context + key;
@@ -1975,7 +1994,7 @@ public class ApplicationConnection {
return result;
}
- HashSet<ServerConnector> maybeDetached = new HashSet<ServerConnector>();
+ FastStringSet maybeDetached = FastStringSet.create();
ValueMap hierarchies = json.getValueMap("hierarchy");
JsArrayString hierarchyKeys = hierarchies.getKeyArray();
@@ -2019,7 +2038,7 @@ public class ApplicationConnection {
result.parentChanged.add(childConnector);
// Not detached even if previously removed from
// parent
- maybeDetached.remove(childConnector);
+ maybeDetached.remove(childConnectorId);
}
}
@@ -2075,7 +2094,7 @@ public class ApplicationConnection {
* cleared if it is later on added to some other
* parent.
*/
- maybeDetached.add(oldChild);
+ maybeDetached.add(oldChild.getConnectorId());
}
}
} catch (final Throwable e) {
@@ -2087,7 +2106,10 @@ public class ApplicationConnection {
* Connector is in maybeDetached at this point if it has been
* removed from its parent but not added to any other parent
*/
- for (ServerConnector removed : maybeDetached) {
+ JsArrayString maybeDetachedArray = maybeDetached.dump();
+ for (int i = 0; i < maybeDetachedArray.length(); i++) {
+ ServerConnector removed = connectorMap
+ .getConnector(maybeDetachedArray.get(i));
recursivelyDetach(removed, result.events);
}
@@ -2113,7 +2135,11 @@ public class ApplicationConnection {
SharedState state = connector.getState();
- for (Property property : stateType.getProperties()) {
+ JsArrayObject<Property> properties = stateType
+ .getPropertiesAsArray();
+ int size = properties.size();
+ for (int i = 0; i < size; i++) {
+ Property property = properties.get(i);
property.setValue(state,
property.getValue(defaultState));
}
diff --git a/client/src/com/vaadin/client/ComponentDetail.java b/client/src/com/vaadin/client/ComponentDetail.java
index 102a133a37..58b72b3d95 100644
--- a/client/src/com/vaadin/client/ComponentDetail.java
+++ b/client/src/com/vaadin/client/ComponentDetail.java
@@ -21,6 +21,8 @@ class ComponentDetail {
private TooltipInfo tooltipInfo = new TooltipInfo();
+ private ServerConnector connector;
+
public ComponentDetail() {
}
@@ -65,4 +67,12 @@ class ComponentDetail {
}
}
+ public ServerConnector getConnector() {
+ return connector;
+ }
+
+ public void setConnector(ServerConnector connector) {
+ this.connector = connector;
+ }
+
}
diff --git a/client/src/com/vaadin/client/ComponentDetailMap.java b/client/src/com/vaadin/client/ComponentDetailMap.java
index 0b6799c47f..94eba721b1 100644
--- a/client/src/com/vaadin/client/ComponentDetailMap.java
+++ b/client/src/com/vaadin/client/ComponentDetailMap.java
@@ -85,4 +85,15 @@ final class ComponentDetailMap extends JavaScriptObject {
return list;
}
+ public native JsArrayObject<ComponentDetail> valuesAsJsArray()
+ /*-{
+ var result = [];
+ for(var key in this) {
+ if (this.hasOwnProperty(key)) {
+ result.push(this[key]);
+ }
+ }
+ return result;
+ }-*/;
+
}
diff --git a/client/src/com/vaadin/client/ConnectorMap.java b/client/src/com/vaadin/client/ConnectorMap.java
index ada515f2db..50df65397f 100644
--- a/client/src/com/vaadin/client/ConnectorMap.java
+++ b/client/src/com/vaadin/client/ConnectorMap.java
@@ -17,18 +17,14 @@ package com.vaadin.client;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.ui.Widget;
public class ConnectorMap {
- private Map<String, ServerConnector> idToConnector = new HashMap<String, ServerConnector>();
-
public static ConnectorMap get(ApplicationConnection applicationConnection) {
return applicationConnection.getConnectorMap();
}
@@ -46,7 +42,12 @@ public class ConnectorMap {
* registered
*/
public ServerConnector getConnector(String connectorId) {
- return idToConnector.get(connectorId);
+ ComponentDetail componentDetail = idToComponentDetail.get(connectorId);
+ if (componentDetail == null) {
+ return null;
+ } else {
+ return componentDetail.getConnector();
+ }
}
/**
@@ -96,14 +97,13 @@ public class ConnectorMap {
* otherwise
*/
public boolean hasConnector(String connectorId) {
- return idToConnector.containsKey(connectorId);
+ return idToComponentDetail.containsKey(connectorId);
}
/**
* Removes all registered connectors
*/
public void clear() {
- idToConnector.clear();
idToComponentDetail.clear();
}
@@ -122,14 +122,14 @@ public class ConnectorMap {
public void registerConnector(String id, ServerConnector connector) {
ComponentDetail componentDetail = GWT.create(ComponentDetail.class);
idToComponentDetail.put(id, componentDetail);
- idToConnector.put(id, connector);
+ componentDetail.setConnector(connector);
if (connector instanceof ComponentConnector) {
ComponentConnector pw = (ComponentConnector) connector;
setConnectorId(pw.getWidget().getElement(), id);
}
}
- private native void setConnectorId(Element el, String id)
+ private static native void setConnectorId(Element el, String id)
/*-{
el.tkPid = id;
}-*/;
@@ -144,7 +144,7 @@ public class ConnectorMap {
* element of the connector whose id is desired
* @return the id of the element's connector, if it's a connector
*/
- native String getConnectorId(Element el)
+ native static final String getConnectorId(Element el)
/*-{
return el.tkPid;
}-*/;
@@ -184,7 +184,6 @@ public class ConnectorMap {
String connectorId = connector.getConnectorId();
idToComponentDetail.remove(connectorId);
- idToConnector.remove(connectorId);
connector.onUnregister();
for (ServerConnector child : connector.getChildren()) {
@@ -205,11 +204,19 @@ public class ConnectorMap {
* Gets all registered {@link ComponentConnector} instances
*
* @return An array of all registered {@link ComponentConnector} instances
+ *
+ * @deprecated As of 7.0.1, use {@link #getComponentConnectorsAsJsArray()}
+ * for better performance.
*/
+ @Deprecated
public ComponentConnector[] getComponentConnectors() {
ArrayList<ComponentConnector> result = new ArrayList<ComponentConnector>();
- for (ServerConnector connector : getConnectors()) {
+ JsArrayObject<ServerConnector> connectors = getConnectorsAsJsArray();
+ int size = connectors.size();
+
+ for (int i = 0; i < size; i++) {
+ ServerConnector connector = connectors.get(i);
if (connector instanceof ComponentConnector) {
result.add((ComponentConnector) connector);
}
@@ -218,6 +225,22 @@ public class ConnectorMap {
return result.toArray(new ComponentConnector[result.size()]);
}
+ public JsArrayObject<ComponentConnector> getComponentConnectorsAsJsArray() {
+ JsArrayObject<ComponentConnector> result = JavaScriptObject
+ .createArray().cast();
+
+ JsArrayObject<ServerConnector> connectors = getConnectorsAsJsArray();
+ int size = connectors.size();
+ for (int i = 0; i < size; i++) {
+ ServerConnector connector = connectors.get(i);
+ if (connector instanceof ComponentConnector) {
+ result.add((ComponentConnector) connector);
+ }
+ }
+
+ return result;
+ }
+
@Deprecated
private ComponentDetail getComponentDetail(
ComponentConnector componentConnector) {
@@ -225,11 +248,38 @@ public class ConnectorMap {
}
public int size() {
- return idToConnector.size();
+ return idToComponentDetail.size();
}
+ /**
+ * @return
+ *
+ * @deprecated As of 7.0.1, use {@link #getConnectorsAsJsArray()} for
+ * improved performance.
+ */
+ @Deprecated
public Collection<? extends ServerConnector> getConnectors() {
- return Collections.unmodifiableCollection(idToConnector.values());
+ Collection<ComponentDetail> values = idToComponentDetail.values();
+ ArrayList<ServerConnector> arrayList = new ArrayList<ServerConnector>(
+ values.size());
+ for (ComponentDetail componentDetail : values) {
+ arrayList.add(componentDetail.getConnector());
+ }
+ return arrayList;
+ }
+
+ public JsArrayObject<ServerConnector> getConnectorsAsJsArray() {
+ JsArrayObject<ComponentDetail> componentDetails = idToComponentDetail
+ .valuesAsJsArray();
+ JsArrayObject<ServerConnector> connectors = JavaScriptObject
+ .createArray().cast();
+
+ int size = componentDetails.size();
+ for (int i = 0; i < size; i++) {
+ connectors.add(componentDetails.get(i).getConnector());
+ }
+
+ return connectors;
}
/**
diff --git a/client/src/com/vaadin/client/FastStringMap.java b/client/src/com/vaadin/client/FastStringMap.java
new file mode 100644
index 0000000000..cbb61427d2
--- /dev/null
+++ b/client/src/com/vaadin/client/FastStringMap.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2012 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.client;
+
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.core.client.JsArrayString;
+
+public final class FastStringMap<T> extends JavaScriptObject {
+
+ protected FastStringMap() {
+ // JSO constructor
+ }
+
+ public native void put(String key, T value)
+ /*-{
+ this[key] = value;
+ }-*/;
+
+ public native T get(String key)
+ /*-{
+ return this[key];
+ }-*/;
+
+ public native boolean containsKey(String key)
+ /*-{
+ //Can't use this.hasOwnProperty in case that key is used
+ return Object.hasOwnProperty.call(this, key);
+ }-*/;
+
+ public native void remove(String key)
+ /*-{
+ delete this[key];
+ }-*/;
+
+ public native JsArrayString getKeys()
+ /*-{
+ var keys = [];
+ for(var key in this) {
+ if (Object.hasOwnProperty.call(this, key)) {
+ keys.push(key);
+ }
+ }
+ return keys;
+ }-*/;
+
+ public native int size()
+ /*-{
+ var size = 0;
+ for(var key in this) {
+ if (Object.hasOwnProperty.call(this, key)) {
+ size++;
+ }
+ }
+ return size;
+ }-*/;
+
+ public static <T> FastStringMap<T> create() {
+ return JavaScriptObject.createObject().cast();
+ }
+}
diff --git a/client/src/com/vaadin/client/FastStringSet.java b/client/src/com/vaadin/client/FastStringSet.java
index 8b930291d4..a36aa9bfef 100644
--- a/client/src/com/vaadin/client/FastStringSet.java
+++ b/client/src/com/vaadin/client/FastStringSet.java
@@ -15,6 +15,8 @@
*/
package com.vaadin.client;
+import java.util.Collection;
+
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArrayString;
@@ -40,6 +42,15 @@ public final class FastStringSet extends JavaScriptObject {
}
}-*/;
+ public native void addAll(FastStringSet set)
+ /*-{
+ for(var string in set) {
+ if (Object.hasOwnProperty.call(set, string)) {
+ this[string] = true;
+ }
+ }
+ }-*/;
+
public native JsArrayString dump()
/*-{
var array = [];
@@ -69,4 +80,22 @@ public final class FastStringSet extends JavaScriptObject {
public static FastStringSet create() {
return JavaScriptObject.createObject().cast();
}
+
+ public native void addAllTo(Collection<String> target)
+ /*-{
+ for(var string in this) {
+ if (Object.hasOwnProperty.call(this, string)) {
+ target.@java.util.Collection::add(Ljava/lang/Object;)(string);
+ }
+ }
+ }-*/;
+
+ public native void removeAll(FastStringSet valuesToRemove)
+ /*-{
+ for(var string in valuesToRemove) {
+ if (Object.hasOwnProperty.call(valuesToRemove, string)) {
+ delete this[string];
+ }
+ }
+ }-*/;
} \ No newline at end of file
diff --git a/client/src/com/vaadin/client/JsArrayObject.java b/client/src/com/vaadin/client/JsArrayObject.java
new file mode 100644
index 0000000000..182b68ac3f
--- /dev/null
+++ b/client/src/com/vaadin/client/JsArrayObject.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2012 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.client;
+
+import com.google.gwt.core.client.JavaScriptObject;
+
+public final class JsArrayObject<T> extends JavaScriptObject {
+
+ protected JsArrayObject() {
+ // JSO constructor
+ }
+
+ public native void add(T value)
+ /*-{
+ this.push(value);
+ }-*/;
+
+ public native int size()
+ /*-{
+ return this.length;
+ }-*/;
+
+ public native T get(int i)
+ /*-{
+ return this[i];
+ }-*/;
+
+}
diff --git a/client/src/com/vaadin/client/LayoutManager.java b/client/src/com/vaadin/client/LayoutManager.java
index d83811d8c5..d3366e86f3 100644
--- a/client/src/com/vaadin/client/LayoutManager.java
+++ b/client/src/com/vaadin/client/LayoutManager.java
@@ -15,7 +15,6 @@
*/
package com.vaadin.client;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
@@ -48,12 +47,12 @@ public class LayoutManager {
private LayoutDependencyTree currentDependencyTree;
- private final Collection<ManagedLayout> needsHorizontalLayout = new HashSet<ManagedLayout>();
- private final Collection<ManagedLayout> needsVerticalLayout = new HashSet<ManagedLayout>();
+ private FastStringSet needsHorizontalLayout = FastStringSet.create();
+ private FastStringSet needsVerticalLayout = FastStringSet.create();
- private final Collection<ComponentConnector> needsMeasure = new HashSet<ComponentConnector>();
+ private FastStringSet needsMeasure = FastStringSet.create();
- private Collection<ComponentConnector> pendingOverflowFixes = new HashSet<ComponentConnector>();
+ private FastStringSet pendingOverflowFixes = FastStringSet.create();
private final Map<Element, Collection<ElementResizeListener>> elementResizeListeners = new HashMap<Element, Collection<ElementResizeListener>>();
private final Set<Element> listenersToFire = new HashSet<Element>();
@@ -212,15 +211,15 @@ public class LayoutManager {
return currentDependencyTree != null;
}
- private void countLayout(Map<ManagedLayout, Integer> layoutCounts,
+ private void countLayout(FastStringMap<Integer> layoutCounts,
ManagedLayout layout) {
- Integer count = layoutCounts.get(layout);
+ Integer count = layoutCounts.get(layout.getConnectorId());
if (count == null) {
count = Integer.valueOf(0);
} else {
count = Integer.valueOf(count.intValue() + 1);
}
- layoutCounts.put(layout, count);
+ layoutCounts.put(layout.getConnectorId(), count);
if (count.intValue() > 2) {
VConsole.error(Util.getConnectorString(layout)
+ " has been layouted " + count.intValue() + " times");
@@ -242,7 +241,7 @@ public class LayoutManager {
layoutPending = false;
layoutTimer.cancel();
try {
- currentDependencyTree = new LayoutDependencyTree();
+ currentDependencyTree = new LayoutDependencyTree(connection);
doLayout();
} finally {
currentDependencyTree = null;
@@ -261,24 +260,36 @@ public class LayoutManager {
private void doLayout() {
VConsole.log("Starting layout phase");
- Map<ManagedLayout, Integer> layoutCounts = new HashMap<ManagedLayout, Integer>();
+ FastStringMap<Integer> layoutCounts = FastStringMap.create();
int passes = 0;
Duration totalDuration = new Duration();
- for (ManagedLayout layout : needsHorizontalLayout) {
- currentDependencyTree.setNeedsHorizontalLayout(layout, true);
- }
- for (ManagedLayout layout : needsVerticalLayout) {
- currentDependencyTree.setNeedsVerticalLayout(layout, true);
+ ConnectorMap connectorMap = ConnectorMap.get(connection);
+
+ JsArrayString dump = needsHorizontalLayout.dump();
+ int dumpLength = dump.length();
+ for (int i = 0; i < dumpLength; i++) {
+ String layoutId = dump.get(i);
+ currentDependencyTree.setNeedsHorizontalLayout(layoutId, true);
}
- needsHorizontalLayout.clear();
- needsVerticalLayout.clear();
- for (ComponentConnector connector : needsMeasure) {
- currentDependencyTree.setNeedsMeasure(connector, true);
+ dump = needsVerticalLayout.dump();
+ dumpLength = dump.length();
+ for (int i = 0; i < dumpLength; i++) {
+ String layoutId = dump.get(i);
+ currentDependencyTree.setNeedsVerticalLayout(layoutId, true);
}
- needsMeasure.clear();
+ needsHorizontalLayout = FastStringSet.create();
+ needsVerticalLayout = FastStringSet.create();
+
+ dump = needsMeasure.dump();
+ dumpLength = dump.length();
+ for (int i = 0; i < dumpLength; i++) {
+ String layoutId = dump.get(i);
+ currentDependencyTree.setNeedsMeasure(layoutId, true);
+ }
+ needsMeasure = FastStringSet.create();
measureNonConnectors();
@@ -333,8 +344,13 @@ public class LayoutManager {
while (currentDependencyTree.hasHorizontalConnectorToLayout()
|| currentDependencyTree.hasVerticaConnectorToLayout()) {
- for (ManagedLayout layout : currentDependencyTree
- .getHorizontalLayoutTargets()) {
+
+ JsArrayString layoutTargets = currentDependencyTree
+ .getHorizontalLayoutTargetsJsArray();
+ int length = layoutTargets.length();
+ for (int i = 0; i < length; i++) {
+ ManagedLayout layout = (ManagedLayout) connectorMap
+ .getConnector(layoutTargets.get(i));
if (layout instanceof DirectionalManagedLayout) {
currentDependencyTree
.markAsHorizontallyLayouted(layout);
@@ -362,8 +378,12 @@ public class LayoutManager {
}
}
- for (ManagedLayout layout : currentDependencyTree
- .getVerticalLayoutTargets()) {
+ layoutTargets = currentDependencyTree
+ .getVerticalLayoutTargetsJsArray();
+ length = layoutTargets.length();
+ for (int i = 0; i < length; i++) {
+ ManagedLayout layout = (ManagedLayout) connectorMap
+ .getConnector(layoutTargets.get(i));
if (layout instanceof DirectionalManagedLayout) {
currentDependencyTree.markAsVerticallyLayouted(layout);
DirectionalManagedLayout cl = (DirectionalManagedLayout) layout;
@@ -436,19 +456,22 @@ public class LayoutManager {
}
int postLayoutStart = totalDuration.elapsedMillis();
- for (ComponentConnector connector : connection.getConnectorMap()
- .getComponentConnectors()) {
+ JsArrayObject<ComponentConnector> componentConnectors = connectorMap
+ .getComponentConnectorsAsJsArray();
+ int size = componentConnectors.size();
+ for (int i = 0; i < size; i++) {
+ ComponentConnector connector = componentConnectors.get(i);
if (connector instanceof PostLayoutListener) {
((PostLayoutListener) connector).postLayout();
}
}
- int postLayoutDone = (totalDuration.elapsedMillis() - postLayoutStart);
- VConsole.log("Invoke post layout listeners in " + postLayoutDone
- + " ms");
+ int postLayoutDone = totalDuration.elapsedMillis();
+ VConsole.log("Invoke post layout listeners in "
+ + (postLayoutDone - postLayoutStart) + " ms");
cleanMeasuredSizes();
- int cleaningDone = (totalDuration.elapsedMillis() - postLayoutDone);
- VConsole.log("Cleaned old measured sizes in " + cleaningDone + "ms");
+ int cleaningTime = (totalDuration.elapsedMillis() - postLayoutDone);
+ VConsole.log("Cleaned old measured sizes in " + cleaningTime + "ms");
VConsole.log("Total layout phase time: "
+ totalDuration.elapsedMillis() + "ms");
@@ -462,16 +485,24 @@ public class LayoutManager {
private int measureConnectors(LayoutDependencyTree layoutDependencyTree,
boolean measureAll) {
- if (!pendingOverflowFixes.isEmpty()) {
+ JsArrayString pendingOverflowConnectorsIds = pendingOverflowFixes
+ .dump();
+ int pendingOverflowCount = pendingOverflowConnectorsIds.length();
+ ConnectorMap connectorMap = ConnectorMap.get(connection);
+ if (pendingOverflowCount > 0) {
Duration duration = new Duration();
HashMap<Element, String> originalOverflows = new HashMap<Element, String>();
- HashSet<ComponentConnector> delayedOverflowFixes = new HashSet<ComponentConnector>();
+ FastStringSet delayedOverflowFixes = FastStringSet.create();
// First set overflow to hidden (and save previous value so it can
// be restored later)
- for (ComponentConnector componentConnector : pendingOverflowFixes) {
+ for (int i = 0; i < pendingOverflowCount; i++) {
+ String connectorId = pendingOverflowConnectorsIds.get(i);
+ ComponentConnector componentConnector = (ComponentConnector) connectorMap
+ .getConnector(connectorId);
+
// Delay the overflow fix if the involved connectors might still
// change
boolean connectorChangesExpected = !currentDependencyTree
@@ -481,7 +512,7 @@ public class LayoutManager {
.noMoreChangesExpected((ComponentConnector) componentConnector
.getParent());
if (connectorChangesExpected || parentChangesExcpected) {
- delayedOverflowFixes.add(componentConnector);
+ delayedOverflowFixes.add(connectorId);
continue;
}
@@ -510,60 +541,76 @@ public class LayoutManager {
pendingOverflowFixes.removeAll(delayedOverflowFixes);
+ JsArrayString remainingOverflowFixIds = pendingOverflowFixes.dump();
+ int remainingCount = remainingOverflowFixIds.length();
+
// Then ensure all scrolling elements are reflowed by measuring
- for (ComponentConnector componentConnector : pendingOverflowFixes) {
+ for (int i = 0; i < remainingCount; i++) {
+ ComponentConnector componentConnector = (ComponentConnector) connectorMap
+ .getConnector(remainingOverflowFixIds.get(i));
componentConnector.getWidget().getElement().getParentElement()
.getOffsetHeight();
}
// Finally restore old overflow value and update bookkeeping
- for (ComponentConnector componentConnector : pendingOverflowFixes) {
+ for (int i = 0; i < remainingCount; i++) {
+ String connectorId = remainingOverflowFixIds.get(i);
+ ComponentConnector componentConnector = (ComponentConnector) connectorMap
+ .getConnector(connectorId);
Element parentElement = componentConnector.getWidget()
.getElement().getParentElement();
parentElement.getStyle().setProperty("overflow",
originalOverflows.get(parentElement));
- layoutDependencyTree.setNeedsMeasure(componentConnector, true);
+ layoutDependencyTree.setNeedsMeasure(connectorId, true);
}
if (!pendingOverflowFixes.isEmpty()) {
- VConsole.log("Did overflow fix for "
- + pendingOverflowFixes.size() + " elements in "
- + duration.elapsedMillis() + " ms");
+ VConsole.log("Did overflow fix for " + remainingCount
+ + " elements in " + duration.elapsedMillis() + " ms");
}
pendingOverflowFixes = delayedOverflowFixes;
}
int measureCount = 0;
if (measureAll) {
- ComponentConnector[] allConnectors = ConnectorMap.get(connection)
- .getComponentConnectors();
+ JsArrayObject<ComponentConnector> allConnectors = connectorMap
+ .getComponentConnectorsAsJsArray();
+ int size = allConnectors.size();
// Find connectors that should actually be measured
- ArrayList<ComponentConnector> connectors = new ArrayList<ComponentConnector>();
- for (ComponentConnector candidate : allConnectors) {
+ JsArrayObject<ComponentConnector> connectors = JsArrayObject
+ .createArray().cast();
+ for (int i = 0; i < size; i++) {
+ ComponentConnector candidate = allConnectors.get(i);
if (needsMeasure(candidate.getWidget().getElement())) {
connectors.add(candidate);
}
}
- for (ComponentConnector connector : connectors) {
- measureConnector(connector);
+ int connectorCount = connectors.size();
+ for (int i = 0; i < connectorCount; i++) {
+ measureConnector(connectors.get(i));
}
- for (ComponentConnector connector : connectors) {
- layoutDependencyTree.setNeedsMeasure(connector, false);
+ for (int i = 0; i < connectorCount; i++) {
+ layoutDependencyTree.setNeedsMeasure(connectors.get(i)
+ .getConnectorId(), false);
}
- measureCount += connectors.size();
+ measureCount += connectorCount;
}
while (layoutDependencyTree.hasConnectorsToMeasure()) {
- Collection<ComponentConnector> measureTargets = layoutDependencyTree
- .getMeasureTargets();
- for (ComponentConnector connector : measureTargets) {
+ JsArrayString measureTargets = layoutDependencyTree
+ .getMeasureTargetsJsArray();
+ int length = measureTargets.length();
+ for (int i = 0; i < length; i++) {
+ ComponentConnector connector = (ComponentConnector) connectorMap
+ .getConnector(measureTargets.get(i));
measureConnector(connector);
measureCount++;
}
- for (ComponentConnector connector : measureTargets) {
- layoutDependencyTree.setNeedsMeasure(connector, false);
+ for (int i = 0; i < length; i++) {
+ String connectorId = measureTargets.get(i);
+ layoutDependencyTree.setNeedsMeasure(connectorId, false);
}
}
return measureCount;
@@ -598,7 +645,7 @@ public class LayoutManager {
ComponentConnector scrollingBoundary = currentDependencyTree
.getScrollingBoundary(connector);
if (scrollingBoundary != null) {
- pendingOverflowFixes.add(scrollingBoundary);
+ pendingOverflowFixes.add(scrollingBoundary.getConnectorId());
}
}
}
@@ -630,16 +677,12 @@ public class LayoutManager {
JsArrayString dependents = measuredSize.getDependents();
for (int i = 0; i < dependents.length(); i++) {
String pid = dependents.get(i);
- ManagedLayout dependent = (ManagedLayout) connection
- .getConnectorMap().getConnector(pid);
- if (dependent != null) {
+ if (pid != null) {
if (heightChanged) {
- currentDependencyTree.setNeedsVerticalLayout(dependent,
- true);
+ currentDependencyTree.setNeedsVerticalLayout(pid, true);
}
if (widthChanged) {
- currentDependencyTree.setNeedsHorizontalLayout(dependent,
- true);
+ currentDependencyTree.setNeedsHorizontalLayout(pid, true);
}
}
}
@@ -654,9 +697,11 @@ public class LayoutManager {
public void forceLayout() {
ConnectorMap connectorMap = connection.getConnectorMap();
- ComponentConnector[] componentConnectors = connectorMap
- .getComponentConnectors();
- for (ComponentConnector connector : componentConnectors) {
+ JsArrayObject<ComponentConnector> componentConnectors = connectorMap
+ .getComponentConnectorsAsJsArray();
+ int size = componentConnectors.size();
+ for (int i = 0; i < size; i++) {
+ ComponentConnector connector = componentConnectors.get(i);
if (connector instanceof ManagedLayout) {
setNeedsLayout((ManagedLayout) connector);
}
@@ -689,7 +734,7 @@ public class LayoutManager {
* the managed layout that should be layouted
*/
public final void setNeedsHorizontalLayout(ManagedLayout layout) {
- needsHorizontalLayout.add(layout);
+ needsHorizontalLayout.add(layout.getConnectorId());
}
/**
@@ -704,7 +749,7 @@ public class LayoutManager {
* the managed layout that should be layouted
*/
public final void setNeedsVerticalLayout(ManagedLayout layout) {
- needsVerticalLayout.add(layout);
+ needsVerticalLayout.add(layout.getConnectorId());
}
/**
@@ -1311,7 +1356,7 @@ public class LayoutManager {
if (isLayoutRunning()) {
currentDependencyTree.setNeedsMeasure(component, true);
} else {
- needsMeasure.add(component);
+ needsMeasure.add(component.getConnectorId());
layoutLater();
}
}
diff --git a/client/src/com/vaadin/client/communication/JsonDecoder.java b/client/src/com/vaadin/client/communication/JsonDecoder.java
index 75af42fc1e..d4d71b3bc4 100644
--- a/client/src/com/vaadin/client/communication/JsonDecoder.java
+++ b/client/src/com/vaadin/client/communication/JsonDecoder.java
@@ -30,6 +30,8 @@ import com.google.gwt.json.client.JSONString;
import com.google.gwt.json.client.JSONValue;
import com.vaadin.client.ApplicationConnection;
import com.vaadin.client.ConnectorMap;
+import com.vaadin.client.FastStringSet;
+import com.vaadin.client.JsArrayObject;
import com.vaadin.client.metadata.NoDataException;
import com.vaadin.client.metadata.Property;
import com.vaadin.client.metadata.Type;
@@ -48,6 +50,24 @@ import com.vaadin.shared.Connector;
*/
public class JsonDecoder {
+ private static final FastStringSet decodedWithoutReference = FastStringSet
+ .create();
+ static {
+ decodedWithoutReference.add(String.class.getName());
+ decodedWithoutReference.add(Boolean.class.getName());
+ decodedWithoutReference.add(Byte.class.getName());
+ decodedWithoutReference.add(Character.class.getName());
+ decodedWithoutReference.add(Short.class.getName());
+ decodedWithoutReference.add(Integer.class.getName());
+ decodedWithoutReference.add(Long.class.getName());
+ decodedWithoutReference.add(Float.class.getName());
+ decodedWithoutReference.add(Double.class.getName());
+ decodedWithoutReference.add(Connector.class.getName());
+ decodedWithoutReference.add(Map.class.getName());
+ decodedWithoutReference.add(List.class.getName());
+ decodedWithoutReference.add(Set.class.getName());
+ }
+
/**
* Decode a JSON array with two elements (type and value) into a client-side
* type, recursively if necessary.
@@ -122,20 +142,32 @@ public class JsonDecoder {
}
} else {
try {
- Collection<Property> properties = type.getProperties();
+ JsArrayObject<Property> properties = type
+ .getPropertiesAsArray();
if (target == null) {
target = type.createInstance();
}
JSONObject jsonObject = jsonValue.isObject();
- for (Property property : properties) {
+ int size = properties.size();
+ for (int i = 0; i < size; i++) {
+ Property property = properties.get(i);
JSONValue encodedPropertyValue = jsonObject.get(property
.getName());
if (encodedPropertyValue == null) {
continue;
}
- Object propertyReference = property.getValue(target);
- Object decodedValue = decodeValue(property.getType(),
+
+ Type propertyType = property.getType();
+
+ Object propertyReference;
+ if (needsReferenceValue(propertyType)) {
+ propertyReference = property.getValue(target);
+ } else {
+ propertyReference = null;
+ }
+
+ Object decodedValue = decodeValue(propertyType,
encodedPropertyValue, propertyReference, connection);
property.setValue(target, decodedValue);
}
@@ -147,6 +179,10 @@ public class JsonDecoder {
}
}
+ private static boolean needsReferenceValue(Type type) {
+ return !decodedWithoutReference.contains(type.getBaseTypeName());
+ }
+
private static Map<Object, Object> decodeMap(Type type, JSONValue jsonMap,
ApplicationConnection connection) {
// Client -> server encodes empty map as an empty array because of
diff --git a/client/src/com/vaadin/client/communication/JsonEncoder.java b/client/src/com/vaadin/client/communication/JsonEncoder.java
index 17d11bb946..49cd613a2c 100644
--- a/client/src/com/vaadin/client/communication/JsonEncoder.java
+++ b/client/src/com/vaadin/client/communication/JsonEncoder.java
@@ -30,6 +30,7 @@ import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONString;
import com.google.gwt.json.client.JSONValue;
import com.vaadin.client.ApplicationConnection;
+import com.vaadin.client.JsArrayObject;
import com.vaadin.client.metadata.NoDataException;
import com.vaadin.client.metadata.Property;
import com.vaadin.client.metadata.Type;
@@ -111,10 +112,14 @@ public class JsonEncoder {
} else if (type != null) {
// And finally try using bean serialization logic
try {
- Collection<Property> properties = type.getProperties();
+ JsArrayObject<Property> properties = type
+ .getPropertiesAsArray();
JSONObject jsonObject = new JSONObject();
- for (Property property : properties) {
+
+ int size = properties.size();
+ for (int i = 0; i < size; i++) {
+ Property property = properties.get(i);
Object propertyValue = property.getValue(value);
Type propertyType = property.getType();
JSONValue encodedPropertyValue = encode(propertyValue,
diff --git a/client/src/com/vaadin/client/communication/StateChangeEvent.java b/client/src/com/vaadin/client/communication/StateChangeEvent.java
index 8e72485a0c..35187b03d4 100644
--- a/client/src/com/vaadin/client/communication/StateChangeEvent.java
+++ b/client/src/com/vaadin/client/communication/StateChangeEvent.java
@@ -16,10 +16,11 @@
package com.vaadin.client.communication;
import java.io.Serializable;
-import java.util.Collections;
+import java.util.HashSet;
import java.util.Set;
import com.google.gwt.event.shared.EventHandler;
+import com.vaadin.client.FastStringSet;
import com.vaadin.client.ServerConnector;
import com.vaadin.client.communication.StateChangeEvent.StateChangeHandler;
@@ -30,7 +31,13 @@ public class StateChangeEvent extends
*/
public static final Type<StateChangeHandler> TYPE = new Type<StateChangeHandler>();
- private Set<String> changedProperties;
+ private final FastStringSet changedProperties;
+
+ /**
+ * Used to cache a Set representation of the changedProperties if one is
+ * needed.
+ */
+ private Set<String> changedPropertiesSet;
@Override
public Type<StateChangeHandler> getAssociatedType() {
@@ -42,11 +49,33 @@ public class StateChangeEvent extends
*
* @param connector
* the event whose state has changed
+ * @param changedPropertiesSet
+ * a set of names of the changed properties
+ * @deprecated As of 7.0.1, use
+ * {@link #StateChangeEvent(ServerConnector, FastStringSet)}
+ * instead for improved performance.
+ */
+ @Deprecated
+ public StateChangeEvent(ServerConnector connector,
+ Set<String> changedPropertiesSet) {
+ setConnector(connector);
+ this.changedPropertiesSet = changedPropertiesSet;
+ changedProperties = FastStringSet.create();
+ for (String property : changedPropertiesSet) {
+ changedProperties.add(property);
+ }
+ }
+
+ /**
+ * Creates a new state change event.
+ *
+ * @param connector
+ * the event whose state has changed
* @param changedProperties
* a set of names of the changed properties
*/
public StateChangeEvent(ServerConnector connector,
- Set<String> changedProperties) {
+ FastStringSet changedProperties) {
setConnector(connector);
this.changedProperties = changedProperties;
}
@@ -78,8 +107,39 @@ public class StateChangeEvent extends
* Gets the properties that have changed.
*
* @return a set of names of the changed properties
+ *
+ * @deprecated As of 7.0.1, use {@link #getChangedPropertiesFastSet()} or
+ * {@link #hasPropertyChanged(String)} instead for improved
+ * performance.
*/
+ @Deprecated
public Set<String> getChangedProperties() {
- return Collections.unmodifiableSet(changedProperties);
+ if (changedPropertiesSet == null) {
+ changedPropertiesSet = new HashSet<String>();
+ changedProperties.addAllTo(changedPropertiesSet);
+ }
+ return changedPropertiesSet;
+ }
+
+ /**
+ * Gets the properties that have changed.
+ *
+ * @return a set of names of the changed properties
+ *
+ */
+ public FastStringSet getChangedPropertiesFastSet() {
+ return changedProperties;
+ }
+
+ /**
+ * Checks whether the give property has changed.
+ *
+ * @param property
+ * the name of the property to check
+ * @return <code>true</code> if the property has changed, else
+ * <code>false></code>
+ */
+ public boolean hasPropertyChanged(String property) {
+ return changedProperties.contains(property);
}
}
diff --git a/client/src/com/vaadin/client/metadata/Method.java b/client/src/com/vaadin/client/metadata/Method.java
index da7fcd4d8c..aea2fd7f85 100644
--- a/client/src/com/vaadin/client/metadata/Method.java
+++ b/client/src/com/vaadin/client/metadata/Method.java
@@ -19,10 +19,13 @@ public class Method {
private final Type type;
private final String name;
+ private String signature;
public Method(Type type, String name) {
this.type = type;
this.name = name;
+ // Cache derived signature value
+ signature = type.getSignature() + "." + name;
}
public Type getType() {
@@ -41,8 +44,16 @@ public class Method {
TypeDataStore.getInvoker(this).invoke(target, params);
}
+ /**
+ * The unique signature used to identify this method. The structure of the
+ * returned string may change without notice and should not be used for any
+ * other purpose than identification. The signature is currently based on
+ * the declaring type's signature and the method's name.
+ *
+ * @return the unique signature of this method
+ */
public String getSignature() {
- return type.toString() + "." + name;
+ return signature;
}
@Override
diff --git a/client/src/com/vaadin/client/metadata/Property.java b/client/src/com/vaadin/client/metadata/Property.java
index 539f27961d..c0c375c14c 100644
--- a/client/src/com/vaadin/client/metadata/Property.java
+++ b/client/src/com/vaadin/client/metadata/Property.java
@@ -20,10 +20,13 @@ import com.vaadin.shared.annotations.DelegateToWidget;
public class Property {
private final Type bean;
private final String name;
+ private final String signature;
public Property(Type bean, String name) {
this.bean = bean;
this.name = name;
+ // Cache derived signature value
+ signature = bean.getSignature() + "." + name;
}
public Object getValue(Object bean) throws NoDataException {
@@ -47,8 +50,16 @@ public class Property {
return TypeDataStore.getType(this);
}
+ /**
+ * The unique signature used to identify this property. The structure of the
+ * returned string may change without notice and should not be used for any
+ * other purpose than identification. The signature is currently based on
+ * the declaring type's signature and the property's name.
+ *
+ * @return the unique signature of this property
+ */
public String getSignature() {
- return bean.toString() + "." + name;
+ return signature;
}
@Override
diff --git a/client/src/com/vaadin/client/metadata/Type.java b/client/src/com/vaadin/client/metadata/Type.java
index a904a3d624..9c8a52d8e5 100644
--- a/client/src/com/vaadin/client/metadata/Type.java
+++ b/client/src/com/vaadin/client/metadata/Type.java
@@ -17,20 +17,23 @@ package com.vaadin.client.metadata;
import java.util.Collection;
+import com.vaadin.client.JsArrayObject;
import com.vaadin.client.communication.JSONSerializer;
public class Type {
private final String name;
private final Type[] parameterTypes;
+ private final String signature;
public Type(Class<?> clazz) {
- name = clazz.getName();
- parameterTypes = null;
+ this(clazz.getName(), null);
}
public Type(String baseTypeName, Type[] parameterTypes) {
name = baseTypeName;
this.parameterTypes = parameterTypes;
+ // Cache derived signature value
+ signature = calculateSignature(name, parameterTypes);
}
public String getBaseTypeName() {
@@ -50,15 +53,28 @@ public class Type {
return new Method(this, name);
}
+ /**
+ * @return
+ * @throws NoDataException
+ *
+ * @deprecated As of 7.0.1, use {@link #getPropertiesAsArray()} instead for
+ * improved performance
+ */
+ @Deprecated
public Collection<Property> getProperties() throws NoDataException {
return TypeDataStore.getProperties(this);
}
+ public JsArrayObject<Property> getPropertiesAsArray()
+ throws NoDataException {
+ return TypeDataStore.getPropertiesAsArray(this);
+ }
+
public Property getProperty(String propertyName) {
return new Property(this, propertyName);
}
- public String getSignature() {
+ private static String calculateSignature(String name, Type[] parameterTypes) {
String string = name;
if (parameterTypes != null && parameterTypes.length != 0) {
string += '<';
@@ -74,6 +90,18 @@ public class Type {
return string;
}
+ /**
+ * The unique signature used to identify this type. The structure of the
+ * returned string may change without notice and should not be used for any
+ * other purpose than identification. The signature is currently based on
+ * the fully qualified name of the type.
+ *
+ * @return the unique signature of this type
+ */
+ public String getSignature() {
+ return signature;
+ }
+
@Override
public String toString() {
return getSignature();
diff --git a/client/src/com/vaadin/client/metadata/TypeDataStore.java b/client/src/com/vaadin/client/metadata/TypeDataStore.java
index 2f56d6eb52..5b466146a3 100644
--- a/client/src/com/vaadin/client/metadata/TypeDataStore.java
+++ b/client/src/com/vaadin/client/metadata/TypeDataStore.java
@@ -15,35 +15,39 @@
*/
package com.vaadin.client.metadata;
+import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
+import com.google.gwt.core.client.JavaScriptObject;
+import com.vaadin.client.FastStringMap;
+import com.vaadin.client.FastStringSet;
+import com.vaadin.client.JsArrayObject;
import com.vaadin.client.communication.JSONSerializer;
public class TypeDataStore {
private static final String CONSTRUCTOR_NAME = "!new";
- private final Map<String, Class<?>> identifiers = new HashMap<String, Class<?>>();
+ private final FastStringMap<Class<?>> identifiers = FastStringMap.create();
- private final Map<Type, Invoker> serializerFactories = new HashMap<Type, Invoker>();
- private final Map<Type, ProxyHandler> proxyHandlers = new HashMap<Type, ProxyHandler>();
- private final Map<Type, Collection<Property>> properties = new HashMap<Type, Collection<Property>>();
+ private final FastStringMap<Invoker> serializerFactories = FastStringMap
+ .create();
+ private final FastStringMap<ProxyHandler> proxyHandlers = FastStringMap
+ .create();
+ private final FastStringMap<JsArrayObject<Property>> properties = FastStringMap
+ .create();
- private final Set<Method> delayedMethods = new HashSet<Method>();
- private final Set<Method> lastOnlyMethods = new HashSet<Method>();
+ private final FastStringSet delayedMethods = FastStringSet.create();
+ private final FastStringSet lastOnlyMethods = FastStringSet.create();
- private final Map<Method, Type> returnTypes = new HashMap<Method, Type>();
- private final Map<Method, Invoker> invokers = new HashMap<Method, Invoker>();
- private final Map<Method, Type[]> paramTypes = new HashMap<Method, Type[]>();
+ private final FastStringMap<Type> returnTypes = FastStringMap.create();
+ private final FastStringMap<Invoker> invokers = FastStringMap.create();
+ private final FastStringMap<Type[]> paramTypes = FastStringMap.create();
- private final Map<Property, Type> propertyTypes = new HashMap<Property, Type>();
- private final Map<Property, Invoker> setters = new HashMap<Property, Invoker>();
- private final Map<Property, Invoker> getters = new HashMap<Property, Invoker>();
- private final Map<Property, String> delegateToWidget = new HashMap<Property, String>();
+ private final FastStringMap<Type> propertyTypes = FastStringMap.create();
+ private final FastStringMap<Invoker> setters = FastStringMap.create();
+ private final FastStringMap<Invoker> getters = FastStringMap.create();
+ private final FastStringMap<String> delegateToWidget = FastStringMap
+ .create();
public static TypeDataStore get() {
return ConnectorBundleLoader.get().getTypeDataStore();
@@ -67,7 +71,7 @@ public class TypeDataStore {
}
public static Type getReturnType(Method method) throws NoDataException {
- Type type = get().returnTypes.get(method);
+ Type type = get().returnTypes.get(method.getSignature());
if (type == null) {
throw new NoDataException("There is no return type for "
+ method.getSignature());
@@ -76,7 +80,7 @@ public class TypeDataStore {
}
public static Invoker getInvoker(Method method) throws NoDataException {
- Invoker invoker = get().invokers.get(method);
+ Invoker invoker = get().invokers.get(method.getSignature());
if (invoker == null) {
throw new NoDataException("There is no invoker for "
+ method.getSignature());
@@ -85,8 +89,8 @@ public class TypeDataStore {
}
public static Invoker getConstructor(Type type) throws NoDataException {
- Invoker invoker = get().invokers
- .get(new Method(type, CONSTRUCTOR_NAME));
+ Invoker invoker = get().invokers.get(new Method(type, CONSTRUCTOR_NAME)
+ .getSignature());
if (invoker == null) {
throw new NoDataException("There is no constructor for "
+ type.getSignature());
@@ -95,7 +99,7 @@ public class TypeDataStore {
}
public static Invoker getGetter(Property property) throws NoDataException {
- Invoker getter = get().getters.get(property);
+ Invoker getter = get().getters.get(property.getSignature());
if (getter == null) {
throw new NoDataException("There is no getter for "
+ property.getSignature());
@@ -105,21 +109,24 @@ public class TypeDataStore {
}
public void setGetter(Class<?> clazz, String propertyName, Invoker invoker) {
- getters.put(new Property(getType(clazz), propertyName), invoker);
+ getters.put(new Property(getType(clazz), propertyName).getSignature(),
+ invoker);
}
public static String getDelegateToWidget(Property property) {
- return get().delegateToWidget.get(property);
+ return get().delegateToWidget.get(property.getSignature());
}
public void setDelegateToWidget(Class<?> clazz, String propertyName,
String delegateValue) {
- delegateToWidget.put(new Property(getType(clazz), propertyName),
+ delegateToWidget.put(
+ new Property(getType(clazz), propertyName).getSignature(),
delegateValue);
}
public void setReturnType(Class<?> type, String methodName, Type returnType) {
- returnTypes.put(new Method(getType(type), methodName), returnType);
+ returnTypes.put(new Method(getType(type), methodName).getSignature(),
+ returnType);
}
public void setConstructor(Class<?> type, Invoker constructor) {
@@ -127,11 +134,12 @@ public class TypeDataStore {
}
public void setInvoker(Class<?> type, String methodName, Invoker invoker) {
- invokers.put(new Method(getType(type), methodName), invoker);
+ invokers.put(new Method(getType(type), methodName).getSignature(),
+ invoker);
}
public static Type[] getParamTypes(Method method) throws NoDataException {
- Type[] types = get().paramTypes.get(method);
+ Type[] types = get().paramTypes.get(method.getSignature());
if (types == null) {
throw new NoDataException("There are no parameter type data for "
+ method.getSignature());
@@ -141,7 +149,9 @@ public class TypeDataStore {
public void setParamTypes(Class<?> type, String methodName,
Type[] paramTypes) {
- this.paramTypes.put(new Method(getType(type), methodName), paramTypes);
+ this.paramTypes.put(
+ new Method(getType(type), methodName).getSignature(),
+ paramTypes);
}
public static boolean hasIdentifier(String identifier) {
@@ -150,7 +160,8 @@ public class TypeDataStore {
public static ProxyHandler getProxyHandler(Type type)
throws NoDataException {
- ProxyHandler proxyHandler = get().proxyHandlers.get(type);
+ ProxyHandler proxyHandler = get().proxyHandlers
+ .get(type.getSignature());
if (proxyHandler == null) {
throw new NoDataException("No proxy handler for "
+ type.getSignature());
@@ -159,28 +170,51 @@ public class TypeDataStore {
}
public void setProxyHandler(Class<?> type, ProxyHandler proxyHandler) {
- proxyHandlers.put(getType(type), proxyHandler);
+ proxyHandlers.put(getType(type).getSignature(), proxyHandler);
}
public static boolean isDelayed(Method method) {
- return get().delayedMethods.contains(method);
+ return get().delayedMethods.contains(method.getSignature());
}
public void setDelayed(Class<?> type, String methodName) {
- delayedMethods.add(getType(type).getMethod(methodName));
+ delayedMethods.add(getType(type).getMethod(methodName).getSignature());
}
public static boolean isLastOnly(Method method) {
- return get().lastOnlyMethods.contains(method);
+ return get().lastOnlyMethods.contains(method.getSignature());
}
public void setLastOnly(Class<?> clazz, String methodName) {
- lastOnlyMethods.add(getType(clazz).getMethod(methodName));
+ lastOnlyMethods
+ .add(getType(clazz).getMethod(methodName).getSignature());
+ }
+
+ /**
+ * @param type
+ * @return
+ * @throws NoDataException
+ *
+ * @deprecated As of 7.0.1, use {@link #getPropertiesAsArray(Type)} instead
+ * for improved performance
+ */
+ @Deprecated
+ public static Collection<Property> getProperties(Type type)
+ throws NoDataException {
+ JsArrayObject<Property> propertiesArray = getPropertiesAsArray(type);
+ int size = propertiesArray.size();
+ ArrayList<Property> properties = new ArrayList<Property>(size);
+ for (int i = 0; i < size; i++) {
+ properties.add(propertiesArray.get(i));
+ }
+
+ return properties;
}
- public static Collection<Property> getProperties(Type type)
+ public static JsArrayObject<Property> getPropertiesAsArray(Type type)
throws NoDataException {
- Collection<Property> properties = get().properties.get(type);
+ JsArrayObject<Property> properties = get().properties.get(type
+ .getSignature());
if (properties == null) {
throw new NoDataException("No property list for "
+ type.getSignature());
@@ -189,16 +223,17 @@ public class TypeDataStore {
}
public void setProperties(Class<?> clazz, String[] propertyNames) {
- Set<Property> properties = new HashSet<Property>();
+ JsArrayObject<Property> properties = JavaScriptObject.createArray()
+ .cast();
Type type = getType(clazz);
for (String name : propertyNames) {
properties.add(new Property(type, name));
}
- this.properties.put(type, Collections.unmodifiableSet(properties));
+ this.properties.put(type.getSignature(), properties);
}
public static Type getType(Property property) throws NoDataException {
- Type type = get().propertyTypes.get(property);
+ Type type = get().propertyTypes.get(property.getSignature());
if (type == null) {
throw new NoDataException("No return type for "
+ property.getSignature());
@@ -207,11 +242,12 @@ public class TypeDataStore {
}
public void setPropertyType(Class<?> clazz, String propertName, Type type) {
- propertyTypes.put(new Property(getType(clazz), propertName), type);
+ propertyTypes.put(
+ new Property(getType(clazz), propertName).getSignature(), type);
}
public static Invoker getSetter(Property property) throws NoDataException {
- Invoker setter = get().setters.get(property);
+ Invoker setter = get().setters.get(property.getSignature());
if (setter == null) {
throw new NoDataException("No setter for "
+ property.getSignature());
@@ -220,15 +256,17 @@ public class TypeDataStore {
}
public void setSetter(Class<?> clazz, String propertyName, Invoker setter) {
- setters.put(new Property(getType(clazz), propertyName), setter);
+ setters.put(new Property(getType(clazz), propertyName).getSignature(),
+ setter);
}
public void setSerializerFactory(Class<?> clazz, Invoker factory) {
- serializerFactories.put(getType(clazz), factory);
+ serializerFactories.put(getType(clazz).getSignature(), factory);
}
public static JSONSerializer<?> findSerializer(Type type) {
- Invoker factoryCreator = get().serializerFactories.get(type);
+ Invoker factoryCreator = get().serializerFactories.get(type
+ .getSignature());
if (factoryCreator == null) {
return null;
}
@@ -236,6 +274,6 @@ public class TypeDataStore {
}
public static boolean hasProperties(Type type) {
- return get().properties.containsKey(type);
+ return get().properties.containsKey(type.getSignature());
}
}
diff --git a/client/src/com/vaadin/client/ui/AbstractClickEventHandler.java b/client/src/com/vaadin/client/ui/AbstractClickEventHandler.java
index 823618bd8f..bd2654df75 100644
--- a/client/src/com/vaadin/client/ui/AbstractClickEventHandler.java
+++ b/client/src/com/vaadin/client/ui/AbstractClickEventHandler.java
@@ -15,7 +15,6 @@
*/
package com.vaadin.client.ui;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.event.dom.client.ContextMenuEvent;
import com.google.gwt.event.dom.client.ContextMenuHandler;
@@ -49,7 +48,7 @@ public abstract class AbstractClickEventHandler implements MouseDownHandler,
/**
* The element where the last mouse down event was registered.
*/
- private JavaScriptObject lastMouseDownTarget;
+ private Element lastMouseDownTarget;
/**
* Set to true by {@link #mouseUpPreviewHandler} if it gets a mouseup at the
@@ -75,7 +74,7 @@ public abstract class AbstractClickEventHandler implements MouseDownHandler,
Element elementUnderMouse = Util.getElementUnderMouse(event
.getNativeEvent());
if (lastMouseDownTarget != null
- && elementUnderMouse.cast() == lastMouseDownTarget) {
+ && elementUnderMouse == lastMouseDownTarget) {
mouseUpPreviewMatched = true;
} else {
System.out.println("Ignoring mouseup from "
@@ -172,7 +171,7 @@ public abstract class AbstractClickEventHandler implements MouseDownHandler,
* When getting a mousedown event, we must detect where the
* corresponding mouseup event if it's on a different part of the page.
*/
- lastMouseDownTarget = event.getNativeEvent().getEventTarget();
+ lastMouseDownTarget = Util.getElementUnderMouse(event.getNativeEvent());
mouseUpPreviewMatched = false;
mouseUpEventPreviewRegistration = Event
.addNativePreviewHandler(mouseUpPreviewHandler);
diff --git a/client/src/com/vaadin/client/ui/AbstractComponentConnector.java b/client/src/com/vaadin/client/ui/AbstractComponentConnector.java
index 5890a9a5db..e35e3eafcf 100644
--- a/client/src/com/vaadin/client/ui/AbstractComponentConnector.java
+++ b/client/src/com/vaadin/client/ui/AbstractComponentConnector.java
@@ -17,15 +17,14 @@ package com.vaadin.client.ui;
import java.util.ArrayList;
import java.util.List;
-import java.util.Set;
+import com.google.gwt.core.client.JsArrayString;
import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.ui.Focusable;
import com.google.gwt.user.client.ui.HasEnabled;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.client.ApplicationConnection;
import com.vaadin.client.ComponentConnector;
-import com.vaadin.client.ConnectorMap;
import com.vaadin.client.HasComponentsConnector;
import com.vaadin.client.LayoutManager;
import com.vaadin.client.ServerConnector;
@@ -60,7 +59,7 @@ public abstract class AbstractComponentConnector extends AbstractConnector
* The style names from getState().getStyles() which are currently applied
* to the widget.
*/
- protected List<String> styleNames = new ArrayList<String>();
+ private JsArrayString styleNames = JsArrayString.createArray().cast();
/**
* Default constructor
@@ -124,10 +123,7 @@ public abstract class AbstractComponentConnector extends AbstractConnector
@Override
public void onStateChanged(StateChangeEvent stateChangeEvent) {
- ConnectorMap paintableMap = ConnectorMap.get(getConnection());
-
- Set<String> changedProperties = stateChangeEvent.getChangedProperties();
- if (changedProperties.contains("id")) {
+ if (stateChangeEvent.hasPropertyChanged("id")) {
if (getState().id != null) {
getWidget().getElement().setId(getState().id);
} else if (!initialStateEvent) {
@@ -286,33 +282,25 @@ public abstract class AbstractComponentConnector extends AbstractConnector
// add additional user defined style names as class names, prefixed with
// component default class name. remove nonexistent style names.
- if (ComponentStateUtil.hasStyles(state)) {
- // Remove all old stylenames
- for (String oldStyle : styleNames) {
- setWidgetStyleName(oldStyle, false);
- setWidgetStyleNameWithPrefix(primaryStyleName + "-", oldStyle,
- false);
- }
+ // Remove all old stylenames
+ for (int i = 0; i < styleNames.length(); i++) {
+ String oldStyle = styleNames.get(i);
+ setWidgetStyleName(oldStyle, false);
+ setWidgetStyleNameWithPrefix(primaryStyleName + "-", oldStyle,
+ false);
+ }
+ styleNames.setLength(0);
+ if (ComponentStateUtil.hasStyles(state)) {
// add new style names
for (String newStyle : state.styles) {
setWidgetStyleName(newStyle, true);
setWidgetStyleNameWithPrefix(primaryStyleName + "-", newStyle,
true);
+ styleNames.push(newStyle);
}
- styleNames.clear();
- styleNames.addAll(state.styles);
-
- } else {
- // remove all old style names
- for (String oldStyle : styleNames) {
- setWidgetStyleName(oldStyle, false);
- setWidgetStyleNameWithPrefix(primaryStyleName + "-", oldStyle,
- false);
- }
- styleNames.clear();
}
}
@@ -432,6 +420,7 @@ public abstract class AbstractComponentConnector extends AbstractConnector
*
* @see com.vaadin.client.ComponentConnector#flush()
*/
+ @Override
public void flush() {
// No generic implementation. Override if needed
}
diff --git a/client/src/com/vaadin/client/ui/AbstractConnector.java b/client/src/com/vaadin/client/ui/AbstractConnector.java
index 4c55f999b6..f9c74cc5c9 100644
--- a/client/src/com/vaadin/client/ui/AbstractConnector.java
+++ b/client/src/com/vaadin/client/ui/AbstractConnector.java
@@ -23,10 +23,12 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import com.google.gwt.core.client.JsArrayString;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerManager;
import com.google.web.bindery.event.shared.HandlerRegistration;
import com.vaadin.client.ApplicationConnection;
+import com.vaadin.client.FastStringMap;
import com.vaadin.client.ServerConnector;
import com.vaadin.client.Util;
import com.vaadin.client.VConsole;
@@ -55,8 +57,8 @@ public abstract class AbstractConnector implements ServerConnector,
private String id;
private HandlerManager handlerManager;
- private Map<String, HandlerManager> statePropertyHandlerManagers;
- private Map<String, Collection<ClientRpc>> rpcImplementations;
+ private FastStringMap<HandlerManager> statePropertyHandlerManagers;
+ private FastStringMap<Collection<ClientRpc>> rpcImplementations;
private final boolean debugLogging = false;
private SharedState state;
@@ -66,7 +68,7 @@ public abstract class AbstractConnector implements ServerConnector,
* A map from client-to-server RPC interface class to the RPC proxy that
* sends outgoing RPC calls for that interface.
*/
- private Map<Class<?>, ServerRpc> rpcProxyMap = new HashMap<Class<?>, ServerRpc>();
+ private FastStringMap<ServerRpc> rpcProxyMap = FastStringMap.create();
/**
* Temporary storage for last enabled state to be able to see if it has
@@ -143,7 +145,7 @@ public abstract class AbstractConnector implements ServerConnector,
T implementation) {
String rpcInterfaceId = rpcInterface.getName().replaceAll("\\$", ".");
if (null == rpcImplementations) {
- rpcImplementations = new HashMap<String, Collection<ClientRpc>>();
+ rpcImplementations = FastStringMap.create();
}
if (null == rpcImplementations.get(rpcInterfaceId)) {
rpcImplementations.put(rpcInterfaceId, new ArrayList<ClientRpc>());
@@ -180,10 +182,11 @@ public abstract class AbstractConnector implements ServerConnector,
* server.
*/
protected <T extends ServerRpc> T getRpcProxy(Class<T> rpcInterface) {
- if (!rpcProxyMap.containsKey(rpcInterface)) {
- rpcProxyMap.put(rpcInterface, RpcProxy.create(rpcInterface, this));
+ String name = rpcInterface.getName();
+ if (!rpcProxyMap.containsKey(name)) {
+ rpcProxyMap.put(name, RpcProxy.create(rpcInterface, this));
}
- return (T) rpcProxyMap.get(rpcInterface);
+ return (T) rpcProxyMap.get(name);
}
@Override
@@ -202,12 +205,12 @@ public abstract class AbstractConnector implements ServerConnector,
}
if (statePropertyHandlerManagers != null
&& event instanceof StateChangeEvent) {
- for (String property : ((StateChangeEvent) event)
- .getChangedProperties()) {
- HandlerManager manager = statePropertyHandlerManagers
- .get(property);
- if (manager != null) {
- manager.fireEvent(event);
+ StateChangeEvent stateChangeEvent = (StateChangeEvent) event;
+ JsArrayString keys = statePropertyHandlerManagers.getKeys();
+ for (int i = 0; i < keys.length(); i++) {
+ String property = keys.get(i);
+ if (stateChangeEvent.hasPropertyChanged(property)) {
+ statePropertyHandlerManagers.get(property).fireEvent(event);
}
}
}
@@ -248,7 +251,7 @@ public abstract class AbstractConnector implements ServerConnector,
private HandlerManager ensureHandlerManager(String propertyName) {
if (statePropertyHandlerManagers == null) {
- statePropertyHandlerManagers = new HashMap<String, HandlerManager>();
+ statePropertyHandlerManagers = FastStringMap.create();
}
HandlerManager manager = statePropertyHandlerManagers.get(propertyName);
if (manager == null) {
diff --git a/client/src/com/vaadin/client/ui/FocusableScrollPanel.java b/client/src/com/vaadin/client/ui/FocusableScrollPanel.java
index a1d2ad6ccc..01d39392af 100644
--- a/client/src/com/vaadin/client/ui/FocusableScrollPanel.java
+++ b/client/src/com/vaadin/client/ui/FocusableScrollPanel.java
@@ -192,4 +192,12 @@ public class FocusableScrollPanel extends SimpleFocusablePanel implements
});
}
+ public Element getFocusElement() {
+ if (useFakeFocusElement()) {
+ return focusElement.cast();
+ } else {
+ return getElement();
+ }
+ }
+
}
diff --git a/client/src/com/vaadin/client/ui/TouchScrollDelegate.java b/client/src/com/vaadin/client/ui/TouchScrollDelegate.java
index 45bd2616f3..9d7e435339 100644
--- a/client/src/com/vaadin/client/ui/TouchScrollDelegate.java
+++ b/client/src/com/vaadin/client/ui/TouchScrollDelegate.java
@@ -21,6 +21,7 @@ import java.util.HashSet;
import com.google.gwt.animation.client.Animation;
import com.google.gwt.core.client.Duration;
+import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.dom.client.Node;
@@ -111,20 +112,51 @@ public class TouchScrollDelegate implements NativePreviewHandler {
private static final String SCROLLABLE_CLASSNAME = "v-scrollable";
- private final TouchScrollDelegate delegate;
+ private TouchScrollDelegate delegate;
private final boolean requiresDelegate = BrowserInfo.get()
.requiresTouchScrollDelegate();
+ private Widget widget;
+
/**
- * Constructs a scroll handler for the given widget.
+ * Constructs a scroll handler. You must call
+ * {@link #init(Widget, Element...)} before using the scroll handler.
+ */
+ public TouchScrollHandler() {
+
+ }
+
+ /**
+ * Attaches the scroll handler to the widget. This method must be called
+ * before calling any other methods in this class.
*
* @param widget
* The widget that contains scrollable elements
* @param scrollables
* The elements of the widget that should be scrollable.
+ *
+ * @deprecated Use {@link GWT#create(Class)} and
+ * {@link #init(Widget, Element...)} instead of this
+ * constructor to enable overriding.
*/
+ @Deprecated
public TouchScrollHandler(Widget widget, Element... scrollables) {
- if (requiresDelegate) {
+ this();
+ init(widget, scrollables);
+ }
+
+ /**
+ * Attaches the scroll handler to the widget. This method must be called
+ * once before calling any other method in this class.
+ *
+ * @param widget
+ * The widget that contains scrollable elements
+ * @param scrollables
+ * The elements of the widget that should be scrollable.
+ */
+ public void init(Widget widget, Element... scrollables) {
+ this.widget = widget;
+ if (requiresDelegate()) {
delegate = new TouchScrollDelegate();
widget.addDomHandler(this, TouchStartEvent.getType());
} else {
@@ -150,7 +182,7 @@ public class TouchScrollDelegate implements NativePreviewHandler {
*/
public void addElement(Element scrollable) {
scrollable.addClassName(SCROLLABLE_CLASSNAME);
- if (requiresDelegate) {
+ if (requiresDelegate()) {
delegate.scrollableElements.add(scrollable);
}
}
@@ -162,7 +194,7 @@ public class TouchScrollDelegate implements NativePreviewHandler {
*/
public void removeElement(Element scrollable) {
scrollable.removeClassName(SCROLLABLE_CLASSNAME);
- if (requiresDelegate) {
+ if (requiresDelegate()) {
delegate.scrollableElements.remove(scrollable);
}
}
@@ -175,7 +207,7 @@ public class TouchScrollDelegate implements NativePreviewHandler {
* The elements that should be scrollable
*/
public void setElements(Element... scrollables) {
- if (requiresDelegate) {
+ if (requiresDelegate()) {
for (Element e : delegate.scrollableElements) {
e.removeClassName(SCROLLABLE_CLASSNAME);
}
@@ -185,6 +217,26 @@ public class TouchScrollDelegate implements NativePreviewHandler {
addElement(e);
}
}
+
+ /**
+ * Checks if a delegate for scrolling is required or if the native
+ * scrolling of the device should be used. By default, relies on
+ * {@link BrowserInfo#requiresTouchScrollDelegate()}, override to change
+ * the behavior.
+ *
+ * @return true if a Javascript delegate should be used for scrolling,
+ * false to use the native scrolling of the device
+ */
+ protected boolean requiresDelegate() {
+ return requiresDelegate;
+ }
+
+ /**
+ * @return The widget this {@link TouchScrollHandler} is connected to.
+ */
+ protected Widget getWidget() {
+ return widget;
+ }
}
/**
@@ -199,7 +251,9 @@ public class TouchScrollDelegate implements NativePreviewHandler {
*/
public static TouchScrollHandler enableTouchScrolling(Widget widget,
Element... scrollables) {
- return new TouchScrollHandler(widget, scrollables);
+ TouchScrollHandler handler = GWT.create(TouchScrollHandler.class);
+ handler.init(widget, scrollables);
+ return handler;
}
public TouchScrollDelegate(Element... elements) {
diff --git a/client/src/com/vaadin/client/ui/VFilterSelect.java b/client/src/com/vaadin/client/ui/VFilterSelect.java
index d493386beb..cea3489b42 100644
--- a/client/src/com/vaadin/client/ui/VFilterSelect.java
+++ b/client/src/com/vaadin/client/ui/VFilterSelect.java
@@ -1663,8 +1663,10 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
tabPressedWhenPopupOpen = false;
suggestionPopup.menu.doSelectedItemAction();
suggestionPopup.hide();
- } else if (!suggestionPopup.isAttached()
+ } else if ((!suggestionPopup.isAttached() && waitingForFilteringResponse)
|| suggestionPopup.isJustClosed()) {
+ // typing so fast the popup was never opened, or it's just
+ // closed
suggestionPopup.menu.doSelectedItemAction();
}
if (selectedOptionKey == null) {
diff --git a/client/src/com/vaadin/client/ui/VScrollTable.java b/client/src/com/vaadin/client/ui/VScrollTable.java
index 9ac9532ae4..8553398718 100644
--- a/client/src/com/vaadin/client/ui/VScrollTable.java
+++ b/client/src/com/vaadin/client/ui/VScrollTable.java
@@ -2629,7 +2629,11 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
for (int i = start; i <= visibleCellCount; i++) {
if (i > 0) {
final String colKey = getColKeyByIndex(i - 1);
- slotX += getColWidth(colKey);
+ // getColWidth only returns the internal width
+ // without padding, not the offset width of the
+ // whole td (#10890)
+ slotX += getColWidth(colKey)
+ + scrollBody.getCellExtraWidth();
}
final int dist = Math.abs(x - slotX);
if (closestDistance == -1 || dist < closestDistance) {
@@ -6924,11 +6928,19 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
navKeyDown = false;
if (BrowserInfo.get().isIE()) {
- // IE sometimes moves focus to a clicked table cell...
+ /*
+ * IE sometimes moves focus to a clicked table cell... (#7965)
+ * ...and sometimes it sends blur events even though the focus
+ * handler is still active. (#10464)
+ */
Element focusedElement = Util.getIEFocusedElement();
- if (Util.getConnectorForElement(client, getParent(), focusedElement) == this) {
- // ..in that case, steal the focus back to the focus handler
- // but not if focus is in a child component instead (#7965)
+ if (Util.getConnectorForElement(client, getParent(), focusedElement) == this
+ && focusedElement != null
+ && focusedElement != scrollBodyPanel.getFocusElement()) {
+ /*
+ * Steal focus back to the focus handler if it was moved to some
+ * other part of the table. Avoid stealing focus in other cases.
+ */
focus();
return;
}
diff --git a/client/src/com/vaadin/client/ui/VUpload.java b/client/src/com/vaadin/client/ui/VUpload.java
index f639e8f090..866a6ca4cf 100644
--- a/client/src/com/vaadin/client/ui/VUpload.java
+++ b/client/src/com/vaadin/client/ui/VUpload.java
@@ -18,6 +18,7 @@ package com.vaadin.client.ui;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.FormElement;
@@ -257,6 +258,32 @@ public class VUpload extends SimplePanel {
});
}
+ ScheduledCommand startUploadCmd = new ScheduledCommand() {
+
+ @Override
+ public void execute() {
+ element.submit();
+ submitted = true;
+
+ disableUpload();
+
+ /*
+ * Visit server a moment after upload has started to see possible
+ * changes from UploadStarted event. Will be cleared on complete.
+ */
+ t = new Timer() {
+ @Override
+ public void run() {
+ VConsole.log("Visiting server to see if upload started event changed UI.");
+ client.updateVariable(paintableId, "pollForStart",
+ nextUploadId, true);
+ }
+ };
+ t.schedule(800);
+ }
+
+ };
+
/** For internal use only. May be removed or replaced in the future. */
public void submit() {
if (fu.getFilename().length() == 0 || submitted || !enabled) {
@@ -267,25 +294,10 @@ public class VUpload extends SimplePanel {
// before upload
client.sendPendingVariableChanges();
- element.submit();
- submitted = true;
- VConsole.log("Submitted form");
-
- disableUpload();
-
- /*
- * Visit server a moment after upload has started to see possible
- * changes from UploadStarted event. Will be cleared on complete.
- */
- t = new Timer() {
- @Override
- public void run() {
- VConsole.log("Visiting server to see if upload started event changed UI.");
- client.updateVariable(paintableId, "pollForStart",
- nextUploadId, true);
- }
- };
- t.schedule(800);
+ // This is done as deferred because sendPendingVariableChanges is also
+ // deferred and we want to start the upload only after the changes have
+ // been sent to the server
+ Scheduler.get().scheduleDeferred(startUploadCmd);
}
@Override
diff --git a/client/src/com/vaadin/client/ui/VWindow.java b/client/src/com/vaadin/client/ui/VWindow.java
index 56dc22908e..bd9493c761 100644
--- a/client/src/com/vaadin/client/ui/VWindow.java
+++ b/client/src/com/vaadin/client/ui/VWindow.java
@@ -458,6 +458,11 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
private void hideModalityCurtain() {
modalityCurtain.removeFromParent();
+ if (BrowserInfo.get().isIE()) {
+ // IE leaks memory in certain cases unless we release the reference
+ // (#9197)
+ modalityCurtain = null;
+ }
}
/*
diff --git a/client/src/com/vaadin/client/ui/button/ButtonConnector.java b/client/src/com/vaadin/client/ui/button/ButtonConnector.java
index 224da40b5e..0439cd4fdc 100644
--- a/client/src/com/vaadin/client/ui/button/ButtonConnector.java
+++ b/client/src/com/vaadin/client/ui/button/ButtonConnector.java
@@ -16,8 +16,6 @@
package com.vaadin.client.ui.button;
-import java.util.Set;
-
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ClickEvent;
@@ -109,9 +107,8 @@ public class ButtonConnector extends AbstractComponentConnector implements
blurHandlerRegistration = EventHelper.updateBlurHandler(this,
blurHandlerRegistration);
- Set<String> changedProperties = stateChangeEvent.getChangedProperties();
- if (changedProperties.contains("caption")
- || changedProperties.contains("htmlContentAllowed")) {
+ if (stateChangeEvent.hasPropertyChanged("caption")
+ || stateChangeEvent.hasPropertyChanged("htmlContentAllowed")) {
// Set text
if (getState().htmlContentAllowed) {
getWidget().setHtml(getState().caption);
diff --git a/client/src/com/vaadin/client/ui/colorpicker/AbstractColorPickerConnector.java b/client/src/com/vaadin/client/ui/colorpicker/AbstractColorPickerConnector.java
index 777a7eba8f..ba0575d8fe 100644
--- a/client/src/com/vaadin/client/ui/colorpicker/AbstractColorPickerConnector.java
+++ b/client/src/com/vaadin/client/ui/colorpicker/AbstractColorPickerConnector.java
@@ -15,8 +15,6 @@
*/
package com.vaadin.client.ui.colorpicker;
-import java.util.Set;
-
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.vaadin.client.communication.StateChangeEvent;
@@ -46,8 +44,7 @@ public abstract class AbstractColorPickerConnector extends
public void onStateChanged(StateChangeEvent stateChangeEvent) {
// NOTE: this method is called after @DelegateToWidget
super.onStateChanged(stateChangeEvent);
- Set<String> changedProperties = stateChangeEvent.getChangedProperties();
- if (changedProperties.contains("color")) {
+ if (stateChangeEvent.hasPropertyChanged("color")) {
refreshColor();
if (getState().showDefaultCaption
@@ -57,9 +54,9 @@ public abstract class AbstractColorPickerConnector extends
setCaption(getState().color);
}
}
- if (changedProperties.contains("caption")
- || changedProperties.contains("htmlContentAllowed")
- || changedProperties.contains("showDefaultCaption")) {
+ if (stateChangeEvent.hasPropertyChanged("caption")
+ || stateChangeEvent.hasPropertyChanged("htmlContentAllowed")
+ || stateChangeEvent.hasPropertyChanged("showDefaultCaption")) {
setCaption(getCaption());
}
diff --git a/client/src/com/vaadin/client/ui/colorpicker/ColorPickerGradientConnector.java b/client/src/com/vaadin/client/ui/colorpicker/ColorPickerGradientConnector.java
index e381eb0b70..b28831b860 100644
--- a/client/src/com/vaadin/client/ui/colorpicker/ColorPickerGradientConnector.java
+++ b/client/src/com/vaadin/client/ui/colorpicker/ColorPickerGradientConnector.java
@@ -15,8 +15,6 @@
*/
package com.vaadin.client.ui.colorpicker;
-import java.util.Set;
-
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.MouseUpEvent;
import com.google.gwt.event.dom.client.MouseUpHandler;
@@ -68,13 +66,12 @@ public class ColorPickerGradientConnector extends AbstractComponentConnector
@Override
public void onStateChanged(StateChangeEvent stateChangeEvent) {
super.onStateChanged(stateChangeEvent);
- Set<String> changedProperties = stateChangeEvent.getChangedProperties();
- if (changedProperties.contains("cursorX")
- || changedProperties.contains("cursorY")) {
+ if (stateChangeEvent.hasPropertyChanged("cursorX")
+ || stateChangeEvent.hasPropertyChanged("cursorY")) {
getWidget().setCursor(getState().cursorX, getState().cursorY);
}
- if (changedProperties.contains("bgColor")) {
+ if (stateChangeEvent.hasPropertyChanged("bgColor")) {
getWidget().setBGColor(getState().bgColor);
}
}
diff --git a/client/src/com/vaadin/client/ui/colorpicker/ColorPickerGridConnector.java b/client/src/com/vaadin/client/ui/colorpicker/ColorPickerGridConnector.java
index 53abc78b4b..730981d2dd 100644
--- a/client/src/com/vaadin/client/ui/colorpicker/ColorPickerGridConnector.java
+++ b/client/src/com/vaadin/client/ui/colorpicker/ColorPickerGridConnector.java
@@ -15,8 +15,6 @@
*/
package com.vaadin.client.ui.colorpicker;
-import java.util.Set;
-
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
@@ -68,17 +66,16 @@ public class ColorPickerGridConnector extends AbstractComponentConnector
@Override
public void onStateChanged(StateChangeEvent stateChangeEvent) {
super.onStateChanged(stateChangeEvent);
- Set<String> changedProperties = stateChangeEvent.getChangedProperties();
- if (changedProperties.contains("rowCount")
- || changedProperties.contains("columnCount")
- || changedProperties.contains("updateGrid")) {
+ if (stateChangeEvent.hasPropertyChanged("rowCount")
+ || stateChangeEvent.hasPropertyChanged("columnCount")
+ || stateChangeEvent.hasPropertyChanged("updateGrid")) {
getWidget().updateGrid(getState().rowCount, getState().columnCount);
}
- if (changedProperties.contains("changedX")
- || changedProperties.contains("changedY")
- || changedProperties.contains("changedColor")
- || changedProperties.contains("updateColor")) {
+ if (stateChangeEvent.hasPropertyChanged("changedX")
+ || stateChangeEvent.hasPropertyChanged("changedY")
+ || stateChangeEvent.hasPropertyChanged("changedColor")
+ || stateChangeEvent.hasPropertyChanged("updateColor")) {
getWidget().updateColor(getState().changedColor,
getState().changedX, getState().changedY);
diff --git a/client/src/com/vaadin/client/ui/csslayout/CssLayoutConnector.java b/client/src/com/vaadin/client/ui/csslayout/CssLayoutConnector.java
index fc42a5bdbf..4c8d1a3ecc 100644
--- a/client/src/com/vaadin/client/ui/csslayout/CssLayoutConnector.java
+++ b/client/src/com/vaadin/client/ui/csslayout/CssLayoutConnector.java
@@ -15,15 +15,13 @@
*/
package com.vaadin.client.ui.csslayout;
-import java.util.HashMap;
-import java.util.Map;
-
import com.google.gwt.dom.client.Style;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.client.BrowserInfo;
import com.vaadin.client.ComponentConnector;
import com.vaadin.client.ConnectorHierarchyChangeEvent;
+import com.vaadin.client.FastStringMap;
import com.vaadin.client.Util;
import com.vaadin.client.VCaption;
import com.vaadin.client.communication.StateChangeEvent;
@@ -58,7 +56,8 @@ public class CssLayoutConnector extends AbstractLayoutConnector {
};
};
- private Map<ComponentConnector, VCaption> childToCaption = new HashMap<ComponentConnector, VCaption>();
+ private final FastStringMap<VCaption> childIdToCaption = FastStringMap
+ .create();
/*
* (non-Javadoc)
@@ -123,7 +122,8 @@ public class CssLayoutConnector extends AbstractLayoutConnector {
public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent event) {
int index = 0;
for (ComponentConnector child : getChildComponents()) {
- VCaption childCaption = childToCaption.get(child);
+ VCaption childCaption = childIdToCaption
+ .get(child.getConnectorId());
if (childCaption != null) {
getWidget().addOrMove(childCaption, index++);
}
@@ -137,8 +137,9 @@ public class CssLayoutConnector extends AbstractLayoutConnector {
continue;
}
getWidget().remove(child.getWidget());
- VCaption vCaption = childToCaption.remove(child);
+ VCaption vCaption = childIdToCaption.get(child.getConnectorId());
if (vCaption != null) {
+ childIdToCaption.remove(child.getConnectorId());
getWidget().remove(vCaption);
}
}
@@ -182,8 +183,7 @@ public class CssLayoutConnector extends AbstractLayoutConnector {
/*
* (non-Javadoc)
*
- * @see
- * com.vaadin.client.HasComponentsConnector#updateCaption(com.vaadin
+ * @see com.vaadin.client.HasComponentsConnector#updateCaption(com.vaadin
* .client.ComponentConnector)
*/
@Override
@@ -191,11 +191,12 @@ public class CssLayoutConnector extends AbstractLayoutConnector {
Widget childWidget = child.getWidget();
int widgetPosition = getWidget().getWidgetIndex(childWidget);
- VCaption caption = childToCaption.get(child);
+ String childId = child.getConnectorId();
+ VCaption caption = childIdToCaption.get(childId);
if (VCaption.isNeeded(child.getState())) {
if (caption == null) {
caption = new VCaption(child, getConnection());
- childToCaption.put(child, caption);
+ childIdToCaption.put(childId, caption);
}
if (!caption.isAttached()) {
// Insert caption at widget index == before widget
@@ -203,7 +204,7 @@ public class CssLayoutConnector extends AbstractLayoutConnector {
}
caption.updateCaption();
} else if (caption != null) {
- childToCaption.remove(child);
+ childIdToCaption.remove(childId);
getWidget().remove(caption);
}
}
diff --git a/client/src/com/vaadin/client/ui/layout/LayoutDependencyTree.java b/client/src/com/vaadin/client/ui/layout/LayoutDependencyTree.java
index 343791fb72..4c46846d14 100644
--- a/client/src/com/vaadin/client/ui/layout/LayoutDependencyTree.java
+++ b/client/src/com/vaadin/client/ui/layout/LayoutDependencyTree.java
@@ -17,19 +17,28 @@ package com.vaadin.client.ui.layout;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
+import com.google.gwt.core.client.JsArrayString;
+import com.vaadin.client.ApplicationConnection;
import com.vaadin.client.ComponentConnector;
+import com.vaadin.client.ConnectorMap;
+import com.vaadin.client.FastStringMap;
+import com.vaadin.client.FastStringSet;
import com.vaadin.client.HasComponentsConnector;
+import com.vaadin.client.JsArrayObject;
import com.vaadin.client.ServerConnector;
import com.vaadin.client.Util;
import com.vaadin.client.VConsole;
import com.vaadin.client.ui.ManagedLayout;
import com.vaadin.shared.AbstractComponentState;
+/**
+ * Internal class used to keep track of layout dependencies during one layout
+ * run. This class is not intended to be used directly by applications.
+ *
+ * @author Vaadin Ltd
+ * @since 7.0.0
+ */
public class LayoutDependencyTree {
private class LayoutDependency {
private final ComponentConnector connector;
@@ -41,8 +50,8 @@ public class LayoutDependencyTree {
private boolean scrollingParentCached = false;
private ComponentConnector scrollingBoundary = null;
- private Set<ComponentConnector> measureBlockers = new HashSet<ComponentConnector>();
- private Set<ComponentConnector> layoutBlockers = new HashSet<ComponentConnector>();
+ private FastStringSet measureBlockers = FastStringSet.create();
+ private FastStringSet layoutBlockers = FastStringSet.create();
public LayoutDependency(ComponentConnector connector, int direction) {
this.connector = connector;
@@ -50,33 +59,49 @@ public class LayoutDependencyTree {
}
private void addLayoutBlocker(ComponentConnector blocker) {
- boolean blockerAdded = layoutBlockers.add(blocker);
- if (blockerAdded && layoutBlockers.size() == 1) {
- if (needsLayout) {
- getLayoutQueue(direction).remove(connector);
- } else {
- // Propagation already done if needsLayout is set
- propagatePotentialLayout();
+ String blockerId = blocker.getConnectorId();
+ if (!layoutBlockers.contains(blockerId)) {
+ boolean wasEmpty = layoutBlockers.isEmpty();
+ layoutBlockers.add(blockerId);
+ if (wasEmpty) {
+ if (needsLayout) {
+ getLayoutQueue(direction).remove(
+ connector.getConnectorId());
+ } else {
+ // Propagation already done if needsLayout is set
+ propagatePotentialLayout();
+ }
}
}
}
private void removeLayoutBlocker(ComponentConnector blocker) {
- boolean removed = layoutBlockers.remove(blocker);
- if (removed && layoutBlockers.isEmpty()) {
- if (needsLayout) {
- getLayoutQueue(direction).add((ManagedLayout) connector);
- } else {
- propagateNoUpcomingLayout();
+ String blockerId = blocker.getConnectorId();
+ if (layoutBlockers.contains(blockerId)) {
+ layoutBlockers.remove(blockerId);
+ if (layoutBlockers.isEmpty()) {
+ if (needsLayout) {
+ getLayoutQueue(direction).add(
+ connector.getConnectorId());
+ } else {
+ propagateNoUpcomingLayout();
+ }
}
}
}
private void addMeasureBlocker(ComponentConnector blocker) {
- boolean blockerAdded = measureBlockers.add(blocker);
- if (blockerAdded && measureBlockers.size() == 1) {
+ String blockerId = blocker.getConnectorId();
+ boolean alreadyAdded = measureBlockers.contains(blockerId);
+ if (alreadyAdded) {
+ return;
+ }
+ boolean wasEmpty = measureBlockers.isEmpty();
+ measureBlockers.add(blockerId);
+ if (wasEmpty) {
if (needsMeasure) {
- getMeasureQueue(direction).remove(connector);
+ getMeasureQueue(direction).remove(
+ connector.getConnectorId());
} else {
propagatePotentialResize();
}
@@ -84,10 +109,15 @@ public class LayoutDependencyTree {
}
private void removeMeasureBlocker(ComponentConnector blocker) {
- boolean removed = measureBlockers.remove(blocker);
- if (removed && measureBlockers.isEmpty()) {
+ String blockerId = blocker.getConnectorId();
+ boolean alreadyRemoved = !measureBlockers.contains(blockerId);
+ if (alreadyRemoved) {
+ return;
+ }
+ measureBlockers.remove(blockerId);
+ if (measureBlockers.isEmpty()) {
if (needsMeasure) {
- getMeasureQueue(direction).add(connector);
+ getMeasureQueue(direction).add(connector.getConnectorId());
} else {
propagateNoUpcomingResize();
}
@@ -101,7 +131,7 @@ public class LayoutDependencyTree {
if (measureBlockers.isEmpty()) {
// Add to queue if there are no blockers
- getMeasureQueue(direction).add(connector);
+ getMeasureQueue(direction).add(connector.getConnectorId());
// Only need to propagate if not already propagated when
// setting blockers
propagatePotentialResize();
@@ -112,7 +142,7 @@ public class LayoutDependencyTree {
// in both directions even if there is a blocker in one
// direction)
this.needsMeasure = needsMeasure;
- getMeasureQueue(direction).remove(connector);
+ getMeasureQueue(direction).remove(connector.getConnectorId());
propagateNoUpcomingResize();
}
}
@@ -129,7 +159,7 @@ public class LayoutDependencyTree {
if (layoutBlockers.isEmpty()) {
// Add to queue if there are no blockers
- getLayoutQueue(direction).add((ManagedLayout) connector);
+ getLayoutQueue(direction).add(connector.getConnectorId());
// Only need to propagate if not already propagated when
// setting blockers
propagatePotentialLayout();
@@ -140,20 +170,23 @@ public class LayoutDependencyTree {
// (SimpleManagedLayout gets layouted in both directions
// even if there is a blocker in one direction)
this.needsLayout = needsLayout;
- getLayoutQueue(direction).remove(connector);
+ getLayoutQueue(direction).remove(connector.getConnectorId());
propagateNoUpcomingLayout();
}
}
private void propagatePotentialResize() {
- for (ComponentConnector needsSize : getNeedsSizeForLayout()) {
- LayoutDependency layoutDependency = getDependency(needsSize,
+ JsArrayString needsSizeForLayout = getNeedsSizeForLayout();
+ int length = needsSizeForLayout.length();
+ for (int i = 0; i < length; i++) {
+ String needsSizeId = needsSizeForLayout.get(i);
+ LayoutDependency layoutDependency = getDependency(needsSizeId,
direction);
layoutDependency.addLayoutBlocker(connector);
}
}
- private Collection<ComponentConnector> getNeedsSizeForLayout() {
+ private JsArrayString getNeedsSizeForLayout() {
// Find all connectors that need the size of this connector for
// layouting
@@ -161,15 +194,15 @@ public class LayoutDependencyTree {
// Connector itself needs size if it isn't undefined?
// Children doesn't care?
- ArrayList<ComponentConnector> needsSize = new ArrayList<ComponentConnector>();
+ JsArrayString needsSize = JsArrayObject.createArray().cast();
if (!isUndefinedInDirection(connector, direction)) {
- needsSize.add(connector);
+ needsSize.push(connector.getConnectorId());
}
if (!isRelativeInDirection(connector, direction)) {
ServerConnector parent = connector.getParent();
if (parent instanceof ComponentConnector) {
- needsSize.add((ComponentConnector) parent);
+ needsSize.push(parent.getConnectorId());
}
}
@@ -177,38 +210,44 @@ public class LayoutDependencyTree {
}
private void propagateNoUpcomingResize() {
- for (ComponentConnector mightNeedLayout : getNeedsSizeForLayout()) {
+ JsArrayString needsSizeForLayout = getNeedsSizeForLayout();
+ int length = needsSizeForLayout.length();
+ for (int i = 0; i < length; i++) {
+ String mightNeedLayoutId = needsSizeForLayout.get(i);
LayoutDependency layoutDependency = getDependency(
- mightNeedLayout, direction);
+ mightNeedLayoutId, direction);
layoutDependency.removeLayoutBlocker(connector);
}
}
private void propagatePotentialLayout() {
- for (ComponentConnector sizeMightChange : getResizedByLayout()) {
+ JsArrayString resizedByLayout = getResizedByLayout();
+ int length = resizedByLayout.length();
+ for (int i = 0; i < length; i++) {
+ String sizeMightChangeId = resizedByLayout.get(i);
LayoutDependency layoutDependency = getDependency(
- sizeMightChange, direction);
+ sizeMightChangeId, direction);
layoutDependency.addMeasureBlocker(connector);
}
}
- private Collection<ComponentConnector> getResizedByLayout() {
+ private JsArrayString getResizedByLayout() {
// Components that might get resized by a layout of this component
// Parent never resized
// Connector itself resized if undefined
// Children resized if relative
- ArrayList<ComponentConnector> resized = new ArrayList<ComponentConnector>();
+ JsArrayString resized = JsArrayObject.createArray().cast();
if (isUndefinedInDirection(connector, direction)) {
- resized.add(connector);
+ resized.push(connector.getConnectorId());
}
if (connector instanceof HasComponentsConnector) {
HasComponentsConnector container = (HasComponentsConnector) connector;
for (ComponentConnector child : container.getChildComponents()) {
if (isRelativeInDirection(child, direction)) {
- resized.add(child);
+ resized.push(child.getConnectorId());
}
}
}
@@ -217,9 +256,12 @@ public class LayoutDependencyTree {
}
private void propagateNoUpcomingLayout() {
- for (ComponentConnector sizeMightChange : getResizedByLayout()) {
+ JsArrayString resizedByLayout = getResizedByLayout();
+ int length = resizedByLayout.length();
+ for (int i = 0; i < length; i++) {
+ String sizeMightChangeId = resizedByLayout.get(i);
LayoutDependency layoutDependency = getDependency(
- sizeMightChange, direction);
+ sizeMightChangeId, direction);
layoutDependency.removeMeasureBlocker(connector);
}
}
@@ -227,10 +269,13 @@ public class LayoutDependencyTree {
public void markSizeAsChanged() {
// When the size has changed, all that use that size should be
// layouted
- for (ComponentConnector connector : getNeedsSizeForLayout()) {
- LayoutDependency layoutDependency = getDependency(connector,
+ JsArrayString needsSizeForLayout = getNeedsSizeForLayout();
+ int length = needsSizeForLayout.length();
+ for (int i = 0; i < length; i++) {
+ String connectorId = needsSizeForLayout.get(i);
+ LayoutDependency layoutDependency = getDependency(connectorId,
direction);
- if (connector instanceof ManagedLayout) {
+ if (layoutDependency.connector instanceof ManagedLayout) {
layoutDependency.setNeedsLayout(true);
} else {
// Should simulate setNeedsLayout(true) + markAsLayouted ->
@@ -243,8 +288,8 @@ public class LayoutDependencyTree {
// disappeared scrollbars
ComponentConnector scrollingBoundary = getScrollingBoundary(connector);
if (scrollingBoundary != null) {
- getDependency(scrollingBoundary, getOppositeDirection())
- .setNeedsMeasure(true);
+ getDependency(scrollingBoundary.getConnectorId(),
+ getOppositeDirection()).setNeedsMeasure(true);
}
}
@@ -264,7 +309,7 @@ public class LayoutDependencyTree {
return null;
}
if (parent instanceof MayScrollChildren) {
- return getDependency(currentConnector,
+ return getDependency(currentConnector.getConnectorId(),
getOppositeDirection());
}
currentConnector = (ComponentConnector) parent;
@@ -287,8 +332,11 @@ public class LayoutDependencyTree {
}
private void propagatePostLayoutMeasure() {
- for (ComponentConnector resized : getResizedByLayout()) {
- LayoutDependency layoutDependency = getDependency(resized,
+ JsArrayString resizedByLayout = getResizedByLayout();
+ int length = resizedByLayout.length();
+ for (int i = 0; i < length; i++) {
+ String resizedId = resizedByLayout.get(i);
+ LayoutDependency layoutDependency = getDependency(resizedId,
direction);
layoutDependency.setNeedsMeasure(true);
}
@@ -296,7 +344,8 @@ public class LayoutDependencyTree {
// Special case for e.g. wrapping texts
if (direction == HORIZONTAL && !connector.isUndefinedWidth()
&& connector.isUndefinedHeight()) {
- LayoutDependency dependency = getDependency(connector, VERTICAL);
+ LayoutDependency dependency = getDependency(
+ connector.getConnectorId(), VERTICAL);
dependency.setNeedsMeasure(true);
}
}
@@ -317,7 +366,7 @@ public class LayoutDependencyTree {
if (needsLayout) {
s += "Needs layout\n";
}
- if (getLayoutQueue(direction).contains(connector)) {
+ if (getLayoutQueue(direction).contains(connector.getConnectorId())) {
s += "In layout queue\n";
}
s += "Layout blockers: " + blockersToString(layoutBlockers) + "\n";
@@ -325,7 +374,7 @@ public class LayoutDependencyTree {
if (needsMeasure) {
s += "Needs measure\n";
}
- if (getMeasureQueue(direction).contains(connector)) {
+ if (getMeasureQueue(direction).contains(connector.getConnectorId())) {
s += "In measure queue\n";
}
s += "Measure blockers: " + blockersToString(measureBlockers);
@@ -343,86 +392,131 @@ public class LayoutDependencyTree {
private static final int HORIZONTAL = 0;
private static final int VERTICAL = 1;
- private final Map<?, ?>[] dependenciesInDirection = new Map<?, ?>[] {
- new HashMap<ComponentConnector, LayoutDependency>(),
- new HashMap<ComponentConnector, LayoutDependency>() };
+ @SuppressWarnings("unchecked")
+ private final FastStringMap<LayoutDependency>[] dependenciesInDirection = new FastStringMap[] {
+ FastStringMap.create(), FastStringMap.create() };
+
+ private final FastStringSet[] measureQueueInDirection = new FastStringSet[] {
+ FastStringSet.create(), FastStringSet.create() };
+
+ private final FastStringSet[] layoutQueueInDirection = new FastStringSet[] {
+ FastStringSet.create(), FastStringSet.create() };
- private final Collection<?>[] measureQueueInDirection = new HashSet<?>[] {
- new HashSet<ComponentConnector>(),
- new HashSet<ComponentConnector>() };
+ private final ApplicationConnection connection;
- private final Collection<?>[] layoutQueueInDirection = new HashSet<?>[] {
- new HashSet<ComponentConnector>(),
- new HashSet<ComponentConnector>() };
+ public LayoutDependencyTree(ApplicationConnection connection) {
+ this.connection = connection;
+ }
public void setNeedsMeasure(ComponentConnector connector,
boolean needsMeasure) {
- setNeedsHorizontalMeasure(connector, needsMeasure);
- setNeedsVerticalMeasure(connector, needsMeasure);
+ setNeedsMeasure(connector.getConnectorId(), needsMeasure);
+ }
+
+ public void setNeedsMeasure(String connectorId, boolean needsMeasure) {
+ setNeedsHorizontalMeasure(connectorId, needsMeasure);
+ setNeedsVerticalMeasure(connectorId, needsMeasure);
}
public void setNeedsHorizontalMeasure(ComponentConnector connector,
boolean needsMeasure) {
- LayoutDependency dependency = getDependency(connector, HORIZONTAL);
+ setNeedsHorizontalMeasure(connector.getConnectorId(), needsMeasure);
+ }
+
+ public void setNeedsHorizontalMeasure(String connectorId,
+ boolean needsMeasure) {
+ LayoutDependency dependency = getDependency(connectorId, HORIZONTAL);
dependency.setNeedsMeasure(needsMeasure);
}
public void setNeedsVerticalMeasure(ComponentConnector connector,
boolean needsMeasure) {
- LayoutDependency dependency = getDependency(connector, VERTICAL);
+ setNeedsVerticalMeasure(connector.getConnectorId(), needsMeasure);
+ }
+
+ public void setNeedsVerticalMeasure(String connectorId, boolean needsMeasure) {
+ LayoutDependency dependency = getDependency(connectorId, VERTICAL);
dependency.setNeedsMeasure(needsMeasure);
}
- private LayoutDependency getDependency(ComponentConnector connector,
- int direction) {
- @SuppressWarnings("unchecked")
- Map<ComponentConnector, LayoutDependency> dependencies = (Map<ComponentConnector, LayoutDependency>) dependenciesInDirection[direction];
- LayoutDependency dependency = dependencies.get(connector);
+ private LayoutDependency getDependency(String connectorId, int direction) {
+ FastStringMap<LayoutDependency> dependencies = dependenciesInDirection[direction];
+ LayoutDependency dependency = dependencies.get(connectorId);
if (dependency == null) {
+ ComponentConnector connector = (ComponentConnector) ConnectorMap
+ .get(connection).getConnector(connectorId);
dependency = new LayoutDependency(connector, direction);
- dependencies.put(connector, dependency);
+ dependencies.put(connectorId, dependency);
}
return dependency;
}
- @SuppressWarnings("unchecked")
- private Collection<ManagedLayout> getLayoutQueue(int direction) {
- return (Collection<ManagedLayout>) layoutQueueInDirection[direction];
+ private FastStringSet getLayoutQueue(int direction) {
+ return layoutQueueInDirection[direction];
}
- @SuppressWarnings("unchecked")
- private Collection<ComponentConnector> getMeasureQueue(int direction) {
- return (Collection<ComponentConnector>) measureQueueInDirection[direction];
+ private FastStringSet getMeasureQueue(int direction) {
+ return measureQueueInDirection[direction];
}
+ /**
+ * @param layout
+ * @param needsLayout
+ *
+ * @deprecated As of 7.0.1, use
+ * {@link #setNeedsHorizontalLayout(String, boolean)} for
+ * improved performance.
+ */
+ @Deprecated
public void setNeedsHorizontalLayout(ManagedLayout layout,
boolean needsLayout) {
- LayoutDependency dependency = getDependency(layout, HORIZONTAL);
+ setNeedsHorizontalLayout(layout.getConnectorId(), needsLayout);
+ }
+
+ public void setNeedsHorizontalLayout(String connectorId, boolean needsLayout) {
+ LayoutDependency dependency = getDependency(connectorId, HORIZONTAL);
dependency.setNeedsLayout(needsLayout);
}
+ /**
+ * @param layout
+ * @param needsLayout
+ *
+ * @deprecated As of 7.0.1, use
+ * {@link #setNeedsVerticalLayout(String, boolean)} for improved
+ * performance.
+ */
+ @Deprecated
public void setNeedsVerticalLayout(ManagedLayout layout, boolean needsLayout) {
- LayoutDependency dependency = getDependency(layout, VERTICAL);
+ setNeedsVerticalLayout(layout.getConnectorId(), needsLayout);
+ }
+
+ public void setNeedsVerticalLayout(String connectorId, boolean needsLayout) {
+ LayoutDependency dependency = getDependency(connectorId, VERTICAL);
dependency.setNeedsLayout(needsLayout);
}
public void markAsHorizontallyLayouted(ManagedLayout layout) {
- LayoutDependency dependency = getDependency(layout, HORIZONTAL);
+ LayoutDependency dependency = getDependency(layout.getConnectorId(),
+ HORIZONTAL);
dependency.markAsLayouted();
}
public void markAsVerticallyLayouted(ManagedLayout layout) {
- LayoutDependency dependency = getDependency(layout, VERTICAL);
+ LayoutDependency dependency = getDependency(layout.getConnectorId(),
+ VERTICAL);
dependency.markAsLayouted();
}
public void markHeightAsChanged(ComponentConnector connector) {
- LayoutDependency dependency = getDependency(connector, VERTICAL);
+ LayoutDependency dependency = getDependency(connector.getConnectorId(),
+ VERTICAL);
dependency.markSizeAsChanged();
}
public void markWidthAsChanged(ComponentConnector connector) {
- LayoutDependency dependency = getDependency(connector, HORIZONTAL);
+ LayoutDependency dependency = getDependency(connector.getConnectorId(),
+ HORIZONTAL);
dependency.markSizeAsChanged();
}
@@ -444,7 +538,7 @@ public class LayoutDependencyTree {
}
}
- private static String getCompactConnectorString(ComponentConnector connector) {
+ private static String getCompactConnectorString(ServerConnector connector) {
return Util.getSimpleName(connector) + " ("
+ connector.getConnectorId() + ")";
}
@@ -459,10 +553,14 @@ public class LayoutDependencyTree {
}
}
- private static String blockersToString(
- Collection<ComponentConnector> blockers) {
+ private String blockersToString(FastStringSet blockers) {
StringBuilder b = new StringBuilder("[");
- for (ComponentConnector blocker : blockers) {
+
+ ConnectorMap connectorMap = ConnectorMap.get(connection);
+ JsArrayString blockersDump = blockers.dump();
+ for (int i = 0; i < blockersDump.length(); i++) {
+ ServerConnector blocker = connectorMap.getConnector(blockersDump
+ .get(i));
if (b.length() != 1) {
b.append(", ");
}
@@ -485,36 +583,98 @@ public class LayoutDependencyTree {
return !getLayoutQueue(VERTICAL).isEmpty();
}
+ /**
+ * @return
+ * @deprecated As of 7.0.1, use {@link #getHorizontalLayoutTargetsJsArray()}
+ * for improved performance.
+ */
+ @Deprecated
public ManagedLayout[] getHorizontalLayoutTargets() {
- Collection<ManagedLayout> queue = getLayoutQueue(HORIZONTAL);
- return queue.toArray(new ManagedLayout[queue.size()]);
+ return asManagedLayoutArray(getHorizontalLayoutTargetsJsArray());
}
+ /**
+ * @return
+ * @deprecated As of 7.0.1, use {@link #getVerticalLayoutTargetsJsArray()}
+ * for improved performance.
+ */
+ @Deprecated
public ManagedLayout[] getVerticalLayoutTargets() {
- Collection<ManagedLayout> queue = getLayoutQueue(VERTICAL);
- return queue.toArray(new ManagedLayout[queue.size()]);
+ return asManagedLayoutArray(getVerticalLayoutTargetsJsArray());
+ }
+
+ private ManagedLayout[] asManagedLayoutArray(JsArrayString connectorIdArray) {
+ int length = connectorIdArray.length();
+ ConnectorMap connectorMap = ConnectorMap.get(connection);
+ ManagedLayout[] result = new ManagedLayout[length];
+ for (int i = 0; i < length; i++) {
+ result[i] = (ManagedLayout) connectorMap
+ .getConnector(connectorIdArray.get(i));
+ }
+ return result;
}
+ public JsArrayString getHorizontalLayoutTargetsJsArray() {
+ return getLayoutQueue(HORIZONTAL).dump();
+ }
+
+ public JsArrayString getVerticalLayoutTargetsJsArray() {
+ return getLayoutQueue(VERTICAL).dump();
+ }
+
+ /**
+ * @return
+ * @deprecated As of 7.0.1, use {@link #getMeasureTargetsJsArray()} for
+ * improved performance.
+ */
+ @Deprecated
public Collection<ComponentConnector> getMeasureTargets() {
- Collection<ComponentConnector> measureTargets = new HashSet<ComponentConnector>(
- getMeasureQueue(HORIZONTAL));
- measureTargets.addAll(getMeasureQueue(VERTICAL));
+ JsArrayString targetIds = getMeasureTargetsJsArray();
+ int length = targetIds.length();
+ ArrayList<ComponentConnector> targets = new ArrayList<ComponentConnector>(
+ length);
+ ConnectorMap connectorMap = ConnectorMap.get(connection);
+
+ for (int i = 0; i < length; i++) {
+ targets.add((ComponentConnector) connectorMap
+ .getConnector(targetIds.get(i)));
+ }
+ return targets;
+ }
+
+ public JsArrayString getMeasureTargetsJsArray() {
+ FastStringSet horizontalQueue = getMeasureQueue(HORIZONTAL);
+ JsArrayString measureTargets = horizontalQueue.dump();
+
+ JsArrayString verticalDump = getMeasureQueue(VERTICAL).dump();
+ int length = verticalDump.length();
+ for (int i = 0; i < length; i++) {
+ String connectorId = verticalDump.get(i);
+ if (!horizontalQueue.contains(connectorId)) {
+ measureTargets.push(connectorId);
+ }
+ }
+
return measureTargets;
}
public void logDependencyStatus(ComponentConnector connector) {
VConsole.log("====");
- VConsole.log(getDependency(connector, HORIZONTAL).toString());
- VConsole.log(getDependency(connector, VERTICAL).toString());
+ String connectorId = connector.getConnectorId();
+ VConsole.log(getDependency(connectorId, HORIZONTAL).toString());
+ VConsole.log(getDependency(connectorId, VERTICAL).toString());
}
public boolean noMoreChangesExpected(ComponentConnector connector) {
- return getDependency(connector, HORIZONTAL).noMoreChangesExpected()
- && getDependency(connector, VERTICAL).noMoreChangesExpected();
+ return getDependency(connector.getConnectorId(), HORIZONTAL)
+ .noMoreChangesExpected()
+ && getDependency(connector.getConnectorId(), VERTICAL)
+ .noMoreChangesExpected();
}
public ComponentConnector getScrollingBoundary(ComponentConnector connector) {
- LayoutDependency dependency = getDependency(connector, HORIZONTAL);
+ LayoutDependency dependency = getDependency(connector.getConnectorId(),
+ HORIZONTAL);
if (!dependency.scrollingParentCached) {
ServerConnector parent = dependency.connector.getParent();
if (parent instanceof MayScrollChildren) {
diff --git a/client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java b/client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
index afe81c79a0..77def89e9e 100644
--- a/client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
+++ b/client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
@@ -197,6 +197,12 @@ public abstract class AbstractOrderedLayoutConnector extends
private boolean hasChildrenWithRelativeHeight = false;
/**
+ * Keep track of whether any child is middle aligned. Used to determine if
+ * measurements are needed to make middle aligned children work.
+ */
+ private boolean hasChildrenWithMiddleAlignment = false;
+
+ /**
* Keeps track of whether slots should be expanded based on available space.
*/
private boolean needsExpand = false;
@@ -340,6 +346,7 @@ public abstract class AbstractOrderedLayoutConnector extends
processedResponseId = lastResponseId;
hasChildrenWithRelativeHeight = false;
+ hasChildrenWithMiddleAlignment = false;
needsExpand = getWidget().vertical ? !isUndefinedHeight()
: !isUndefinedWidth();
@@ -380,6 +387,10 @@ public abstract class AbstractOrderedLayoutConnector extends
getState().childData.get(child).alignmentBitmask);
slot.setAlignment(alignment);
+ if (alignment.isVerticalCenter()) {
+ hasChildrenWithMiddleAlignment = true;
+ }
+
double expandRatio = onlyZeroExpands ? 1 : getState().childData
.get(child).expandRatio;
@@ -429,8 +440,10 @@ public abstract class AbstractOrderedLayoutConnector extends
return false;
}
- else if (!hasChildrenWithRelativeHeight) {
- // Already works if there are no relative heights
+ else if (!hasChildrenWithRelativeHeight
+ && !hasChildrenWithMiddleAlignment) {
+ // Already works if there are no relative heights or middle aligned
+ // children
return false;
}
diff --git a/client/src/com/vaadin/client/ui/tabsheet/TabsheetBaseConnector.java b/client/src/com/vaadin/client/ui/tabsheet/TabsheetBaseConnector.java
index 29d9e29f2c..9944ec5308 100644
--- a/client/src/com/vaadin/client/ui/tabsheet/TabsheetBaseConnector.java
+++ b/client/src/com/vaadin/client/ui/tabsheet/TabsheetBaseConnector.java
@@ -89,15 +89,6 @@ public abstract class TabsheetBaseConnector extends
}
}
- // Detach any old tab widget, should be max 1
- for (Iterator<Widget> iterator = oldWidgets.iterator(); iterator
- .hasNext();) {
- Widget oldWidget = iterator.next();
- if (oldWidget.isAttached()) {
- oldWidget.removeFromParent();
- }
- }
-
}
@Override
diff --git a/server/src/com/vaadin/data/util/sqlcontainer/SQLContainer.java b/server/src/com/vaadin/data/util/sqlcontainer/SQLContainer.java
index f7f3e73a7f..64c16b2798 100644
--- a/server/src/com/vaadin/data/util/sqlcontainer/SQLContainer.java
+++ b/server/src/com/vaadin/data/util/sqlcontainer/SQLContainer.java
@@ -1116,7 +1116,7 @@ public class SQLContainer implements Container, Container.Filterable,
delegate.setOrderBy(sorters);
} catch (UnsupportedOperationException e) {
getLogger().log(Level.FINE,
- "The query delegate doesn't support filtering", e);
+ "The query delegate doesn't support sorting", e);
}
int newSize = delegate.getCount();
sizeUpdated = new Date();
@@ -1127,7 +1127,7 @@ public class SQLContainer implements Container, Container.Filterable,
refresh(false);
}
getLogger().log(Level.FINER,
- "Updated row count. New count is: " + size);
+ "Updated row count. New count is: {0}", size);
} catch (SQLException e) {
throw new RuntimeException("Failed to update item set size.", e);
}
@@ -1249,7 +1249,8 @@ public class SQLContainer implements Container, Container.Filterable,
"The query delegate doesn't support sorting", e);
}
delegate.beginTransaction();
- rs = delegate.getResults(currentOffset, pageLength * CACHE_RATIO);
+ int fetchedRows = pageLength * CACHE_RATIO;
+ rs = delegate.getResults(currentOffset, fetchedRows);
rsmd = rs.getMetaData();
List<String> pKeys = delegate.getPrimaryKeyColumns();
// }
@@ -1330,10 +1331,8 @@ public class SQLContainer implements Container, Container.Filterable,
rs.getStatement().close();
rs.close();
delegate.commit();
- getLogger().log(
- Level.FINER,
- "Fetched " + pageLength * CACHE_RATIO
- + " rows starting from " + currentOffset);
+ getLogger().log(Level.FINER, "Fetched {0} rows starting from {1}",
+ new Object[] { fetchedRows, currentOffset });
} catch (SQLException e) {
getLogger().log(Level.WARNING,
"Failed to fetch rows, rolling back", e);
diff --git a/server/src/com/vaadin/data/util/sqlcontainer/query/FreeformQuery.java b/server/src/com/vaadin/data/util/sqlcontainer/query/FreeformQuery.java
index 2b539ecf99..299183f5e6 100644
--- a/server/src/com/vaadin/data/util/sqlcontainer/query/FreeformQuery.java
+++ b/server/src/com/vaadin/data/util/sqlcontainer/query/FreeformQuery.java
@@ -117,20 +117,23 @@ public class FreeformQuery implements QueryDelegate {
int count = countByDelegate();
if (count < 0) {
// Couldn't use the delegate, use the bad way.
+ Statement statement = null;
+ ResultSet rs = null;
Connection conn = getConnection();
- Statement statement = conn.createStatement(
- ResultSet.TYPE_SCROLL_INSENSITIVE,
- ResultSet.CONCUR_READ_ONLY);
+ try {
+ statement = conn.createStatement(
+ ResultSet.TYPE_SCROLL_INSENSITIVE,
+ ResultSet.CONCUR_READ_ONLY);
- ResultSet rs = statement.executeQuery(queryString);
- if (rs.last()) {
- count = rs.getRow();
- } else {
- count = 0;
+ rs = statement.executeQuery(queryString);
+ if (rs.last()) {
+ count = rs.getRow();
+ } else {
+ count = 0;
+ }
+ } finally {
+ releaseConnection(conn, statement, rs);
}
- rs.close();
- statement.close();
- releaseConnection(conn);
}
return count;
}
@@ -146,17 +149,18 @@ public class FreeformQuery implements QueryDelegate {
try {
StatementHelper sh = ((FreeformStatementDelegate) delegate)
.getCountStatement();
+ PreparedStatement pstmt = null;
+ ResultSet rs = null;
Connection c = getConnection();
- PreparedStatement pstmt = c.prepareStatement(sh
- .getQueryString());
- sh.setParameterValuesToStatement(pstmt);
- ResultSet rs = pstmt.executeQuery();
- rs.next();
- count = rs.getInt(1);
- rs.close();
- pstmt.clearParameters();
- pstmt.close();
- releaseConnection(c);
+ try {
+ pstmt = c.prepareStatement(sh.getQueryString());
+ sh.setParameterValuesToStatement(pstmt);
+ rs = pstmt.executeQuery();
+ rs.next();
+ count = rs.getInt(1);
+ } finally {
+ releaseConnection(c, pstmt, rs);
+ }
return count;
} catch (UnsupportedOperationException e) {
// Count statement generation not supported
@@ -166,15 +170,18 @@ public class FreeformQuery implements QueryDelegate {
try {
String countQuery = delegate.getCountQuery();
if (countQuery != null) {
+ Statement statement = null;
+ ResultSet rs = null;
Connection conn = getConnection();
- Statement statement = conn.createStatement();
- ResultSet rs = statement.executeQuery(countQuery);
- rs.next();
- count = rs.getInt(1);
- rs.close();
- statement.close();
- releaseConnection(conn);
- return count;
+ try {
+ statement = conn.createStatement();
+ rs = statement.executeQuery(countQuery);
+ rs.next();
+ count = rs.getInt(1);
+ return count;
+ } finally {
+ releaseConnection(conn, statement, rs);
+ }
}
} catch (UnsupportedOperationException e) {
// Count query generation not supported
@@ -201,7 +208,7 @@ public class FreeformQuery implements QueryDelegate {
* @see FreeformQueryDelegate#getQueryString(int, int)
*/
@Override
- @SuppressWarnings("deprecation")
+ @SuppressWarnings({ "deprecation", "finally" })
public ResultSet getResults(int offset, int pagelength) throws SQLException {
if (activeConnection == null) {
throw new SQLException("No active transaction!");
@@ -228,7 +235,18 @@ public class FreeformQuery implements QueryDelegate {
}
}
Statement statement = activeConnection.createStatement();
- ResultSet rs = statement.executeQuery(query);
+ ResultSet rs;
+ try {
+ rs = statement.executeQuery(query);
+ } catch (SQLException e) {
+ try {
+ statement.close();
+ } finally {
+ // throw the original exception even if closing the statement
+ // fails
+ throw e;
+ }
+ }
return rs;
}
@@ -436,17 +454,19 @@ public class FreeformQuery implements QueryDelegate {
try {
StatementHelper sh = ((FreeformStatementDelegate) delegate)
.getContainsRowQueryStatement(keys);
+
+ PreparedStatement pstmt = null;
+ ResultSet rs = null;
Connection c = getConnection();
- PreparedStatement pstmt = c.prepareStatement(sh
- .getQueryString());
- sh.setParameterValuesToStatement(pstmt);
- ResultSet rs = pstmt.executeQuery();
- contains = rs.next();
- rs.close();
- pstmt.clearParameters();
- pstmt.close();
- releaseConnection(c);
- return contains;
+ try {
+ pstmt = c.prepareStatement(sh.getQueryString());
+ sh.setParameterValuesToStatement(pstmt);
+ rs = pstmt.executeQuery();
+ contains = rs.next();
+ return contains;
+ } finally {
+ releaseConnection(c, pstmt, rs);
+ }
} catch (UnsupportedOperationException e) {
// Statement generation not supported, continue...
}
@@ -459,15 +479,15 @@ public class FreeformQuery implements QueryDelegate {
} else {
query = modifyWhereClause(keys);
}
+ Statement statement = null;
+ ResultSet rs = null;
Connection conn = getConnection();
try {
- Statement statement = conn.createStatement();
- ResultSet rs = statement.executeQuery(query);
+ statement = conn.createStatement();
+ rs = statement.executeQuery(query);
contains = rs.next();
- rs.close();
- statement.close();
} finally {
- releaseConnection(conn);
+ releaseConnection(conn, statement, rs);
}
return contains;
}
@@ -484,6 +504,54 @@ public class FreeformQuery implements QueryDelegate {
}
}
+ /**
+ * Closes a statement and a resultset, then releases the connection if it is
+ * not part of an active transaction. A failure in closing one of the
+ * parameters does not prevent closing the rest.
+ *
+ * If the statement is a {@link PreparedStatement}, its parameters are
+ * cleared prior to closing the statement.
+ *
+ * Although JDBC specification does state that closing a statement closes
+ * its result set and closing a connection closes statements and result
+ * sets, this method does try to close the result set and statement
+ * explicitly whenever not null. This can guard against bugs in certain JDBC
+ * drivers and reduce leaks in case e.g. closing the result set succeeds but
+ * closing the statement or connection fails.
+ *
+ * @param conn
+ * the connection to release
+ * @param statement
+ * the statement to close, may be null to skip closing
+ * @param rs
+ * the result set to close, may be null to skip closing
+ * @throws SQLException
+ * if closing the result set or the statement fails
+ */
+ private void releaseConnection(Connection conn, Statement statement,
+ ResultSet rs) throws SQLException {
+ try {
+ try {
+ if (null != rs) {
+ rs.close();
+ }
+ } finally {
+ if (null != statement) {
+ if (statement instanceof PreparedStatement) {
+ try {
+ ((PreparedStatement) statement).clearParameters();
+ } catch (Exception e) {
+ // will be closed below anyway
+ }
+ }
+ statement.close();
+ }
+ }
+ } finally {
+ releaseConnection(conn);
+ }
+ }
+
private String modifyWhereClause(Object... keys) {
// Build the where rules for the provided keys
StringBuffer where = new StringBuffer();
diff --git a/server/src/com/vaadin/data/util/sqlcontainer/query/TableQuery.java b/server/src/com/vaadin/data/util/sqlcontainer/query/TableQuery.java
index 246384ee57..4d60a8cc17 100644
--- a/server/src/com/vaadin/data/util/sqlcontainer/query/TableQuery.java
+++ b/server/src/com/vaadin/data/util/sqlcontainer/query/TableQuery.java
@@ -159,7 +159,9 @@ public class TableQuery implements QueryDelegate,
*/
if (orderBys == null || orderBys.isEmpty()) {
List<OrderBy> ob = new ArrayList<OrderBy>();
- ob.add(new OrderBy(primaryKeyColumns.get(0), true));
+ for (int i = 0; i < primaryKeyColumns.size(); i++) {
+ ob.add(new OrderBy(primaryKeyColumns.get(i), true));
+ }
sh = sqlGenerator.generateSelectQuery(tableName, filters, ob,
offset, pagelength, null);
} else {
@@ -241,7 +243,7 @@ public class TableQuery implements QueryDelegate,
PreparedStatement pstmt = activeConnection.prepareStatement(
sh.getQueryString(), primaryKeyColumns.toArray(new String[0]));
sh.setParameterValuesToStatement(pstmt);
- getLogger().log(Level.FINE, "DB -> " + sh.getQueryString());
+ getLogger().log(Level.FINE, "DB -> {0}", sh.getQueryString());
int result = pstmt.executeUpdate();
if (result > 0) {
/*
@@ -408,7 +410,7 @@ public class TableQuery implements QueryDelegate,
}
PreparedStatement pstmt = c.prepareStatement(sh.getQueryString());
sh.setParameterValuesToStatement(pstmt);
- getLogger().log(Level.FINE, "DB -> " + sh.getQueryString());
+ getLogger().log(Level.FINE, "DB -> {0}", sh.getQueryString());
return pstmt.executeQuery();
}
@@ -434,7 +436,7 @@ public class TableQuery implements QueryDelegate,
}
pstmt = c.prepareStatement(sh.getQueryString());
sh.setParameterValuesToStatement(pstmt);
- getLogger().log(Level.FINE, "DB -> " + sh.getQueryString());
+ getLogger().log(Level.FINE, "DB -> {0}", sh.getQueryString());
int retval = pstmt.executeUpdate();
return retval;
} finally {
@@ -477,7 +479,7 @@ public class TableQuery implements QueryDelegate,
pstmt = c.prepareStatement(sh.getQueryString(),
primaryKeyColumns.toArray(new String[0]));
sh.setParameterValuesToStatement(pstmt);
- getLogger().log(Level.FINE, "DB -> " + sh.getQueryString());
+ getLogger().log(Level.FINE, "DB -> {0}", sh.getQueryString());
int result = pstmt.executeUpdate();
genKeys = pstmt.getGeneratedKeys();
RowId newId = getNewRowId(row, genKeys);
@@ -590,8 +592,10 @@ public class TableQuery implements QueryDelegate,
}
return new RowId(newRowId.toArray());
} catch (Exception e) {
- getLogger().log(Level.FINE,
- "Failed to fetch key values on insert: " + e.getMessage());
+ getLogger()
+ .log(Level.FINE,
+ "Failed to fetch key values on insert: {0}",
+ e.getMessage());
return null;
}
}
@@ -606,8 +610,8 @@ public class TableQuery implements QueryDelegate,
@Override
public boolean removeRow(RowItem row) throws UnsupportedOperationException,
SQLException {
- getLogger().log(Level.FINE,
- "Removing row with id: " + row.getId().getId()[0].toString());
+ getLogger().log(Level.FINE, "Removing row with id: {0}",
+ row.getId().getId()[0].toString());
if (executeUpdate(sqlGenerator.generateDeleteQuery(getTableName(),
primaryKeyColumns, versionColumn, row)) == 1) {
return true;
diff --git a/server/src/com/vaadin/event/ListenerMethod.java b/server/src/com/vaadin/event/ListenerMethod.java
index 16a8121901..a0ecdc4769 100644
--- a/server/src/com/vaadin/event/ListenerMethod.java
+++ b/server/src/com/vaadin/event/ListenerMethod.java
@@ -91,10 +91,10 @@ public class ListenerMethod implements EventListener, Serializable {
out.writeObject(name);
out.writeObject(paramTypes);
} catch (NotSerializableException e) {
- getLogger().warning(
- "Error in serialization of the application: Class "
- + target.getClass().getName()
- + " must implement serialization.");
+ getLogger()
+ .log(Level.WARNING,
+ "Error in serialization of the application: Class {0} must implement serialization.",
+ target.getClass().getName());
throw e;
}
diff --git a/server/src/com/vaadin/server/AbstractCommunicationManager.java b/server/src/com/vaadin/server/AbstractCommunicationManager.java
index c676cb2ce3..c1c18901b4 100644
--- a/server/src/com/vaadin/server/AbstractCommunicationManager.java
+++ b/server/src/com/vaadin/server/AbstractCommunicationManager.java
@@ -186,7 +186,7 @@ public abstract class AbstractCommunicationManager implements Serializable {
private static final String CRLF = "\r\n";
- private static final String UTF8 = "UTF8";
+ private static final String UTF8 = "UTF-8";
private static String readLine(InputStream stream) throws IOException {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
@@ -234,14 +234,14 @@ public abstract class AbstractCommunicationManager implements Serializable {
*/
while (!atStart) {
String readLine = readLine(inputStream);
- contentLength -= (readLine.length() + 2);
+ contentLength -= (readLine.getBytes(UTF8).length + CRLF.length());
if (readLine.startsWith("Content-Disposition:")
&& readLine.indexOf("filename=") > 0) {
rawfilename = readLine.replaceAll(".*filename=", "");
- String parenthesis = rawfilename.substring(0, 1);
+ char quote = rawfilename.charAt(0);
rawfilename = rawfilename.substring(1);
rawfilename = rawfilename.substring(0,
- rawfilename.indexOf(parenthesis));
+ rawfilename.indexOf(quote));
firstFileFieldFound = true;
} else if (firstFileFieldFound && readLine.equals("")) {
atStart = true;
@@ -251,7 +251,7 @@ public abstract class AbstractCommunicationManager implements Serializable {
}
contentLength -= (boundary.length() + CRLF.length() + 2
- * DASHDASH.length() + 2); // 2 == CRLF
+ * DASHDASH.length() + CRLF.length());
/*
* Reads bytes from the underlying stream. Compares the read bytes to
diff --git a/server/src/com/vaadin/server/WebBrowser.java b/server/src/com/vaadin/server/WebBrowser.java
index ca0e4cd6ce..4122f053ae 100644
--- a/server/src/com/vaadin/server/WebBrowser.java
+++ b/server/src/com/vaadin/server/WebBrowser.java
@@ -293,19 +293,19 @@ public class WebBrowser implements Serializable {
}
/**
- * Gets the difference in minutes between the browser's GMT TimeZone and
+ * Returns the offset in milliseconds between the browser's GMT TimeZone and
* DST.
*
- * @return the amount of minutes that the TimeZone shifts when DST is in
- * effect
+ * @return the number of milliseconds that the TimeZone shifts when DST is
+ * in effect
*/
public int getDSTSavings() {
return dstSavings;
}
/**
- * Determines whether daylight savings time (DST) is currently in effect in
- * the region of the browser or not.
+ * Returns whether daylight saving time (DST) is currently in effect in the
+ * region of the browser or not.
*
* @return true if the browser resides at a location that currently is in
* DST
diff --git a/server/src/com/vaadin/ui/AbstractComponent.java b/server/src/com/vaadin/ui/AbstractComponent.java
index 85c40e0d39..06060dbf91 100644
--- a/server/src/com/vaadin/ui/AbstractComponent.java
+++ b/server/src/com/vaadin/ui/AbstractComponent.java
@@ -122,7 +122,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*/
@Override
public String getId() {
- return getState().id;
+ return getState(false).id;
}
/**
@@ -233,7 +233,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*/
@Override
public String getCaption() {
- return getState().caption;
+ return getState(false).caption;
}
/**
@@ -363,7 +363,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
* interface.
*/
public boolean isImmediate() {
- return getState().immediate;
+ return getState(false).immediate;
}
/**
@@ -423,7 +423,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*/
@Override
public String getDescription() {
- return getState().description;
+ return getState(false).description;
}
/**
@@ -532,7 +532,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*/
@Override
public boolean isReadOnly() {
- return getState().readOnly;
+ return getState(false).readOnly;
}
/*
@@ -622,6 +622,11 @@ public abstract class AbstractComponent extends AbstractClientConnector
}
@Override
+ protected AbstractComponentState getState(boolean markAsDirty) {
+ return (AbstractComponentState) super.getState(markAsDirty);
+ }
+
+ @Override
public void beforeClientResponse(boolean initial) {
super.beforeClientResponse(initial);
// TODO This logic should be on the client side and the state should
diff --git a/server/src/com/vaadin/ui/Table.java b/server/src/com/vaadin/ui/Table.java
index e73c6d7188..a9632da038 100644
--- a/server/src/com/vaadin/ui/Table.java
+++ b/server/src/com/vaadin/ui/Table.java
@@ -557,6 +557,8 @@ public class Table extends AbstractSelect implements Action.Container,
*/
private boolean keyMapperReset;
+ private List<Throwable> exceptionsDuringCachePopulation = new ArrayList<Throwable>();
+
/* Table constructors */
/**
@@ -1646,6 +1648,66 @@ public class Table extends AbstractSelect implements Action.Container,
setRowCacheInvalidated(true);
markAsDirty();
+ maybeThrowCacheUpdateExceptions();
+
+ }
+
+ private void maybeThrowCacheUpdateExceptions() {
+ if (!exceptionsDuringCachePopulation.isEmpty()) {
+ Throwable[] causes = new Throwable[exceptionsDuringCachePopulation
+ .size()];
+ exceptionsDuringCachePopulation.toArray(causes);
+
+ exceptionsDuringCachePopulation.clear();
+ throw new CacheUpdateException(this,
+ "Error during Table cache update.", causes);
+ }
+
+ }
+
+ /**
+ * Exception thrown when one or more exceptions occurred during updating of
+ * the Table cache.
+ * <p>
+ * Contains all exceptions which occurred during the cache update. The first
+ * occurred exception is set as the cause of this exception. All occurred
+ * exceptions can be accessed using {@link #getCauses()}.
+ * </p>
+ *
+ */
+ public static class CacheUpdateException extends RuntimeException {
+ private Throwable[] causes;
+ private Table table;
+
+ public CacheUpdateException(Table table, String message,
+ Throwable[] causes) {
+ super(maybeSupplementMessage(message, causes.length), causes[0]);
+ this.table = table;
+ this.causes = causes;
+ }
+
+ private static String maybeSupplementMessage(String message,
+ int causeCount) {
+ if (causeCount > 1) {
+ return message + " Additional causes not shown.";
+ } else {
+ return message;
+ }
+ }
+
+ /**
+ * Returns the cause(s) for this exception
+ *
+ * @return the exception(s) which caused this exception
+ */
+ public Throwable[] getCauses() {
+ return causes;
+ }
+
+ public Table getTable() {
+ return table;
+ }
+
}
/**
@@ -1789,9 +1851,10 @@ public class Table extends AbstractSelect implements Action.Container,
* @return
*/
private Object[][] getVisibleCellsInsertIntoCache(int firstIndex, int rows) {
- getLogger().finest(
- "Insert " + rows + " rows at index " + firstIndex
- + " to existing page buffer requested");
+ getLogger()
+ .log(Level.FINEST,
+ "Insert {0} rows at index {1} to existing page buffer requested",
+ new Object[] { rows, firstIndex });
// Page buffer must not become larger than pageLength*cacheRate before
// or after the current page
@@ -1894,14 +1957,16 @@ public class Table extends AbstractSelect implements Action.Container,
}
}
pageBuffer = newPageBuffer;
- getLogger().finest(
- "Page Buffer now contains "
- + pageBuffer[CELL_ITEMID].length
- + " rows ("
- + pageBufferFirstIndex
- + "-"
- + (pageBufferFirstIndex
- + pageBuffer[CELL_ITEMID].length - 1) + ")");
+ if (getLogger().isLoggable(Level.FINEST)) {
+ getLogger().log(
+ Level.FINEST,
+ "Page Buffer now contains {0} rows ({1}-{2})",
+ new Object[] {
+ pageBuffer[CELL_ITEMID].length,
+ pageBufferFirstIndex,
+ (pageBufferFirstIndex
+ + pageBuffer[CELL_ITEMID].length - 1) });
+ }
return cells;
}
@@ -1918,9 +1983,11 @@ public class Table extends AbstractSelect implements Action.Container,
*/
private Object[][] getVisibleCellsNoCache(int firstIndex, int rows,
boolean replaceListeners) {
- getLogger().finest(
- "Render visible cells for rows " + firstIndex + "-"
- + (firstIndex + rows - 1));
+ if (getLogger().isLoggable(Level.FINEST)) {
+ getLogger().log(Level.FINEST,
+ "Render visible cells for rows {0}-{1}",
+ new Object[] { firstIndex, (firstIndex + rows - 1) });
+ }
final Object[] colids = getVisibleColumns();
final int cols = colids.length;
@@ -2036,9 +2103,19 @@ public class Table extends AbstractSelect implements Action.Container,
cells[CELL_HEADER][i] = String.valueOf(i + firstIndex + 1);
break;
default:
- cells[CELL_HEADER][i] = getItemCaption(id);
+ try {
+ cells[CELL_HEADER][i] = getItemCaption(id);
+ } catch (Exception e) {
+ exceptionsDuringCachePopulation.add(e);
+ cells[CELL_HEADER][i] = "";
+ }
+ }
+ try {
+ cells[CELL_ICON][i] = getItemIcon(id);
+ } catch (Exception e) {
+ exceptionsDuringCachePopulation.add(e);
+ cells[CELL_ICON][i] = null;
}
- cells[CELL_ICON][i] = getItemIcon(id);
}
GeneratedRow generatedRow = rowGenerator != null ? rowGenerator
@@ -2056,7 +2133,12 @@ public class Table extends AbstractSelect implements Action.Container,
boolean isGenerated = isGeneratedRow || isGeneratedColumn;
if (!isGenerated) {
- p = getContainerProperty(id, colids[j]);
+ try {
+ p = getContainerProperty(id, colids[j]);
+ } catch (Exception e) {
+ exceptionsDuringCachePopulation.add(e);
+ value = null;
+ }
}
if (isGeneratedRow) {
@@ -2089,7 +2171,12 @@ public class Table extends AbstractSelect implements Action.Container,
if (isGeneratedColumn) {
ColumnGenerator cg = columnGenerators
.get(colids[j]);
- value = cg.generateCell(this, id, colids[j]);
+ try {
+ value = cg.generateCell(this, id, colids[j]);
+ } catch (Exception e) {
+ exceptionsDuringCachePopulation.add(e);
+ value = null;
+ }
if (value != null && !(value instanceof Component)
&& !(value instanceof String)) {
// Avoid errors if a generator returns
@@ -2098,10 +2185,20 @@ public class Table extends AbstractSelect implements Action.Container,
value = value.toString();
}
} else if (iscomponent[j]) {
- value = p.getValue();
+ try {
+ value = p.getValue();
+ } catch (Exception e) {
+ exceptionsDuringCachePopulation.add(e);
+ value = null;
+ }
listenProperty(p, oldListenedProperties);
} else if (p != null) {
- value = getPropertyValue(id, colids[j], p);
+ try {
+ value = getPropertyValue(id, colids[j], p);
+ } catch (Exception e) {
+ exceptionsDuringCachePopulation.add(e);
+ value = null;
+ }
/*
* If returned value is Component (via fieldfactory
* or overridden getPropertyValue) we expect it to
@@ -2114,7 +2211,12 @@ public class Table extends AbstractSelect implements Action.Container,
listenProperty(p, oldListenedProperties);
}
} else {
- value = getPropertyValue(id, colids[j], null);
+ try {
+ value = getPropertyValue(id, colids[j], null);
+ } catch (Exception e) {
+ exceptionsDuringCachePopulation.add(e);
+ value = null;
+ }
}
}
}
@@ -2128,9 +2230,11 @@ public class Table extends AbstractSelect implements Action.Container,
}
protected void registerComponent(Component component) {
- getLogger().finest(
- "Registered " + component.getClass().getSimpleName() + ": "
- + component.getCaption());
+ getLogger().log(
+ Level.FINEST,
+ "Registered {0}: {1}",
+ new Object[] { component.getClass().getSimpleName(),
+ component.getCaption() });
if (component.getParent() != this) {
component.setParent(this);
}
@@ -2161,9 +2265,11 @@ public class Table extends AbstractSelect implements Action.Container,
* @param count
*/
private void unregisterComponentsAndPropertiesInRows(int firstIx, int count) {
- getLogger().finest(
- "Unregistering components in rows " + firstIx + "-"
- + (firstIx + count - 1));
+ if (getLogger().isLoggable(Level.FINEST)) {
+ getLogger().log(Level.FINEST,
+ "Unregistering components in rows {0}-{1}",
+ new Object[] { firstIx, (firstIx + count - 1) });
+ }
Object[] colids = getVisibleColumns();
if (pageBuffer != null && pageBuffer[CELL_ITEMID].length > 0) {
int bufSize = pageBuffer[CELL_ITEMID].length;
@@ -2243,9 +2349,11 @@ public class Table extends AbstractSelect implements Action.Container,
* a set of components that should be unregistered.
*/
protected void unregisterComponent(Component component) {
- getLogger().finest(
- "Unregistered " + component.getClass().getSimpleName() + ": "
- + component.getCaption());
+ getLogger().log(
+ Level.FINEST,
+ "Unregistered {0}: {1}",
+ new Object[] { component.getClass().getSimpleName(),
+ component.getCaption() });
component.setParent(null);
/*
* Also remove property data sources to unregister listeners keeping the
@@ -2679,9 +2787,13 @@ public class Table extends AbstractSelect implements Action.Container,
}
}
}
- getLogger().finest(
- "Client wants rows " + reqFirstRowToPaint + "-"
- + (reqFirstRowToPaint + reqRowsToPaint - 1));
+ if (getLogger().isLoggable(Level.FINEST)) {
+ getLogger().log(
+ Level.FINEST,
+ "Client wants rows {0}-{1}",
+ new Object[] { reqFirstRowToPaint,
+ (reqFirstRowToPaint + reqRowsToPaint - 1) });
+ }
clientNeedsContentRefresh = true;
}
@@ -3049,6 +3161,7 @@ public class Table extends AbstractSelect implements Action.Container,
indexInRowbuffer, itemId);
}
target.endTag("urows");
+ maybeThrowCacheUpdateExceptions();
}
private void paintPartialRowAdditions(PaintTarget target,
@@ -3061,9 +3174,9 @@ public class Table extends AbstractSelect implements Action.Container,
target.startTag("prows");
if (!shouldHideAddedRows()) {
- getLogger().finest(
- "Paint rows for add. Index: " + firstIx + ", count: "
- + count + ".");
+ getLogger().log(Level.FINEST,
+ "Paint rows for add. Index: {0}, count: {1}.",
+ new Object[] { firstIx, count });
// Partial row additions bypass the normal caching mechanism.
Object[][] cells = getVisibleCellsInsertIntoCache(firstIx, count);
@@ -3086,9 +3199,9 @@ public class Table extends AbstractSelect implements Action.Container,
indexInRowbuffer, itemId);
}
} else {
- getLogger().finest(
- "Paint rows for remove. Index: " + firstIx + ", count: "
- + count + ".");
+ getLogger().log(Level.FINEST,
+ "Paint rows for remove. Index: {0}, count: {1}.",
+ new Object[] { firstIx, count });
removeRowsFromCacheAndFillBottom(firstIx, count);
target.addAttribute("hide", true);
}
@@ -3096,6 +3209,7 @@ public class Table extends AbstractSelect implements Action.Container,
target.addAttribute("firstprowix", firstIx);
target.addAttribute("numprows", count);
target.endTag("prows");
+ maybeThrowCacheUpdateExceptions();
}
/**
diff --git a/server/src/com/vaadin/ui/TreeTable.java b/server/src/com/vaadin/ui/TreeTable.java
index b5c026c9df..e150db9423 100644
--- a/server/src/com/vaadin/ui/TreeTable.java
+++ b/server/src/com/vaadin/ui/TreeTable.java
@@ -23,6 +23,7 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.logging.Level;
import java.util.logging.Logger;
import com.vaadin.data.Collapsible;
@@ -252,9 +253,11 @@ public class TreeTable extends Table implements Hierarchical {
boolean removed = openItems.remove(itemId);
if (!removed) {
openItems.add(itemId);
- getLogger().finest("Item " + itemId + " is now expanded");
+ getLogger().log(Level.FINEST, "Item {0} is now expanded",
+ itemId);
} else {
- getLogger().finest("Item " + itemId + " is now collapsed");
+ getLogger().log(Level.FINEST, "Item {0} is now collapsed",
+ itemId);
}
clearPreorderCache();
}
diff --git a/server/tests/src/com/vaadin/tests/server/component/table/CacheUpdateExceptionCauses.java b/server/tests/src/com/vaadin/tests/server/component/table/CacheUpdateExceptionCauses.java
new file mode 100644
index 0000000000..7a7b488bc0
--- /dev/null
+++ b/server/tests/src/com/vaadin/tests/server/component/table/CacheUpdateExceptionCauses.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2012 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.server.component.table;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.CacheUpdateException;
+
+public class CacheUpdateExceptionCauses {
+ @Test
+ public void testSingleCauseException() {
+ Table table = new Table();
+ Throwable[] causes = new Throwable[] { new RuntimeException(
+ "Broken in one way.") };
+
+ CacheUpdateException exception = new CacheUpdateException(table,
+ "Error during Table cache update.", causes);
+
+ Assert.assertSame(causes[0], exception.getCause());
+ Assert.assertEquals("Error during Table cache update.",
+ exception.getMessage());
+ }
+
+ @Test
+ public void testMultipleCauseException() {
+ Table table = new Table();
+ Throwable[] causes = new Throwable[] {
+ new RuntimeException("Broken in the first way."),
+ new RuntimeException("Broken in the second way.") };
+
+ CacheUpdateException exception = new CacheUpdateException(table,
+ "Error during Table cache update.", causes);
+
+ Assert.assertSame(causes[0], exception.getCause());
+ Assert.assertEquals(
+ "Error during Table cache update. Additional causes not shown.",
+ exception.getMessage());
+ }
+}
diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java b/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java
index 9ae0d0ac8e..8aab06367b 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java
+++ b/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java
@@ -588,64 +588,68 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
Locator l;
label_7: while (true) {
;
- if (jj_2_1(5)) {
- listModifyDirective();
- } else {
- switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
- case VARIABLE:
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case DEBUG_SYM:
+ case WARN_SYM:
+ debuggingDirective();
+ break;
+ case MIXIN_SYM:
+ mixinDirective();
+ break;
+ case EACH_SYM:
+ case IF_SYM:
+ controlDirective();
+ break;
+ case INCLUDE_SYM:
+ includeDirective();
+ break;
+ case LBRACKET:
+ case ANY:
+ case PARENT:
+ case DOT:
+ case COLON:
+ case INTERPOLATION:
+ case IDENT:
+ case HASH:
+ styleRule();
+ break;
+ case MEDIA_SYM:
+ media();
+ break;
+ case PAGE_SYM:
+ page();
+ break;
+ case FONT_FACE_SYM:
+ fontFace();
+ break;
+ case KEY_FRAME_SYM:
+ keyframes();
+ break;
+ default:
+ jj_la1[8] = jj_gen;
+ if (jj_2_1(2147483647)) {
variable();
- break;
- case DEBUG_SYM:
- case WARN_SYM:
- debuggingDirective();
- break;
- case MIXIN_SYM:
- mixinDirective();
- break;
- case EACH_SYM:
- case IF_SYM:
- controlDirective();
- break;
- case INCLUDE_SYM:
- includeDirective();
- break;
- case LBRACKET:
- case ANY:
- case PARENT:
- case DOT:
- case COLON:
- case INTERPOLATION:
- case IDENT:
- case HASH:
- styleRule();
- break;
- case MEDIA_SYM:
- media();
- break;
- case PAGE_SYM:
- page();
- break;
- case FONT_FACE_SYM:
- fontFace();
- break;
- case KEY_FRAME_SYM:
- keyframes();
- break;
- default:
- jj_la1[8] = jj_gen;
- l = getLocator();
- ret = skipStatement();
- if ((ret == null) || (ret.length() == 0)) {
- {
- if (true) {
- return;
+ } else {
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case VARIABLE:
+ listModifyDirective();
+ break;
+ default:
+ jj_la1[9] = jj_gen;
+ l = getLocator();
+ ret = skipStatement();
+ if ((ret == null) || (ret.length() == 0)) {
+ {
+ if (true) {
+ return;
+ }
}
}
- }
- if (ret.charAt(0) == '@') {
- documentHandler.unrecognizedRule(ret);
- } else {
- reportWarningSkipText(l, ret);
+ if (ret.charAt(0) == '@') {
+ documentHandler.unrecognizedRule(ret);
+ } else {
+ reportWarningSkipText(l, ret);
+ }
}
}
}
@@ -657,7 +661,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[9] = jj_gen;
+ jj_la1[10] = jj_gen;
break label_8;
}
ignoreStatement();
@@ -667,7 +671,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[10] = jj_gen;
+ jj_la1[11] = jj_gen;
break label_9;
}
jj_consume_token(S);
@@ -688,7 +692,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
atRuleDeclaration();
break;
default:
- jj_la1[11] = jj_gen;
+ jj_la1[12] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -713,7 +717,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[12] = jj_gen;
+ jj_la1[13] = jj_gen;
break label_10;
}
jj_consume_token(S);
@@ -732,7 +736,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
break;
default:
- jj_la1[13] = jj_gen;
+ jj_la1[14] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -742,7 +746,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[14] = jj_gen;
+ jj_la1[15] = jj_gen;
break label_11;
}
jj_consume_token(S);
@@ -752,7 +756,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
mediaStatement(ml);
break;
default:
- jj_la1[15] = jj_gen;
+ jj_la1[16] = jj_gen;
;
}
jj_consume_token(SEMICOLON);
@@ -762,7 +766,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[16] = jj_gen;
+ jj_la1[17] = jj_gen;
break label_12;
}
jj_consume_token(S);
@@ -797,7 +801,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[17] = jj_gen;
+ jj_la1[18] = jj_gen;
break label_13;
}
jj_consume_token(S);
@@ -814,7 +818,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
animationname += n.image;
break;
default:
- jj_la1[18] = jj_gen;
+ jj_la1[19] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -824,7 +828,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[19] = jj_gen;
+ jj_la1[20] = jj_gen;
break label_14;
}
}
@@ -834,7 +838,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[20] = jj_gen;
+ jj_la1[21] = jj_gen;
break label_15;
}
jj_consume_token(S);
@@ -848,7 +852,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[21] = jj_gen;
+ jj_la1[22] = jj_gen;
break label_16;
}
jj_consume_token(S);
@@ -861,7 +865,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[22] = jj_gen;
+ jj_la1[23] = jj_gen;
break label_17;
}
keyframeSelector();
@@ -873,7 +877,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[23] = jj_gen;
+ jj_la1[24] = jj_gen;
break label_18;
}
jj_consume_token(S);
@@ -903,7 +907,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
n = jj_consume_token(PERCENTAGE);
break;
default:
- jj_la1[24] = jj_gen;
+ jj_la1[25] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -913,7 +917,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[25] = jj_gen;
+ jj_la1[26] = jj_gen;
break label_19;
}
jj_consume_token(S);
@@ -925,7 +929,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[26] = jj_gen;
+ jj_la1[27] = jj_gen;
break label_20;
}
jj_consume_token(S);
@@ -952,29 +956,41 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
case HASH:
case MEDIA_SYM:
case KEY_FRAME_SYM:
- case CONTAINS:
;
break;
default:
- jj_la1[27] = jj_gen;
+ jj_la1[28] = jj_gen;
break label_21;
}
- if (jj_2_2(5)) {
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case LBRACKET:
+ case ANY:
+ case PARENT:
+ case DOT:
+ case COLON:
+ case INTERPOLATION:
+ case INCLUDE_SYM:
+ case DEBUG_SYM:
+ case WARN_SYM:
+ case EXTEND_SYM:
+ case IDENT:
+ case VARIABLE:
+ case HASH:
+ case MEDIA_SYM:
+ case KEY_FRAME_SYM:
ifContentStatement();
- } else {
- switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
- case EACH_SYM:
- case IF_SYM:
- controlDirective();
- break;
- case MICROSOFT_RULE:
- microsoftExtension();
- break;
- default:
- jj_la1[28] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
+ break;
+ case EACH_SYM:
+ case IF_SYM:
+ controlDirective();
+ break;
+ case MICROSOFT_RULE:
+ microsoftExtension();
+ break;
+ default:
+ jj_la1[29] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
}
}
jj_consume_token(RBRACE);
@@ -984,7 +1000,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[29] = jj_gen;
+ jj_la1[30] = jj_gen;
break label_22;
}
jj_consume_token(S);
@@ -1026,7 +1042,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[30] = jj_gen;
+ jj_la1[31] = jj_gen;
break label_23;
}
jj_consume_token(S);
@@ -1041,7 +1057,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[31] = jj_gen;
+ jj_la1[32] = jj_gen;
break label_24;
}
jj_consume_token(S);
@@ -1086,7 +1102,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[32] = jj_gen;
+ jj_la1[33] = jj_gen;
break label_25;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
@@ -1132,7 +1148,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
skipUnknownRule();
break;
default:
- jj_la1[33] = jj_gen;
+ jj_la1[34] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1144,7 +1160,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[34] = jj_gen;
+ jj_la1[35] = jj_gen;
break label_26;
}
jj_consume_token(S);
@@ -1170,7 +1186,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[35] = jj_gen;
+ jj_la1[36] = jj_gen;
break label_27;
}
jj_consume_token(COMMA);
@@ -1180,7 +1196,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[36] = jj_gen;
+ jj_la1[37] = jj_gen;
break label_28;
}
jj_consume_token(S);
@@ -1204,7 +1220,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[37] = jj_gen;
+ jj_la1[38] = jj_gen;
break label_29;
}
jj_consume_token(S);
@@ -1234,7 +1250,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[38] = jj_gen;
+ jj_la1[39] = jj_gen;
break label_30;
}
jj_consume_token(S);
@@ -1248,14 +1264,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[39] = jj_gen;
+ jj_la1[40] = jj_gen;
break label_31;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[40] = jj_gen;
+ jj_la1[41] = jj_gen;
;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
@@ -1263,7 +1279,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
pseudo = pseudo_page();
break;
default:
- jj_la1[41] = jj_gen;
+ jj_la1[42] = jj_gen;
;
}
if (n != null) {
@@ -1276,7 +1292,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[42] = jj_gen;
+ jj_la1[43] = jj_gen;
break label_32;
}
jj_consume_token(S);
@@ -1289,7 +1305,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[43] = jj_gen;
+ jj_la1[44] = jj_gen;
;
}
label_33: while (true) {
@@ -1298,7 +1314,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[44] = jj_gen;
+ jj_la1[45] = jj_gen;
break label_33;
}
jj_consume_token(SEMICOLON);
@@ -1308,7 +1324,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[45] = jj_gen;
+ jj_la1[46] = jj_gen;
break label_34;
}
jj_consume_token(S);
@@ -1319,7 +1335,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[46] = jj_gen;
+ jj_la1[47] = jj_gen;
;
}
}
@@ -1330,7 +1346,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[47] = jj_gen;
+ jj_la1[48] = jj_gen;
break label_35;
}
jj_consume_token(S);
@@ -1363,7 +1379,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[48] = jj_gen;
+ jj_la1[49] = jj_gen;
break label_36;
}
jj_consume_token(S);
@@ -1386,7 +1402,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[49] = jj_gen;
+ jj_la1[50] = jj_gen;
break label_37;
}
jj_consume_token(S);
@@ -1398,7 +1414,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[50] = jj_gen;
+ jj_la1[51] = jj_gen;
break label_38;
}
jj_consume_token(S);
@@ -1411,7 +1427,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[51] = jj_gen;
+ jj_la1[52] = jj_gen;
;
}
label_39: while (true) {
@@ -1420,7 +1436,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[52] = jj_gen;
+ jj_la1[53] = jj_gen;
break label_39;
}
jj_consume_token(SEMICOLON);
@@ -1430,7 +1446,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[53] = jj_gen;
+ jj_la1[54] = jj_gen;
break label_40;
}
jj_consume_token(S);
@@ -1441,7 +1457,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[54] = jj_gen;
+ jj_la1[55] = jj_gen;
;
}
}
@@ -1452,7 +1468,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[55] = jj_gen;
+ jj_la1[56] = jj_gen;
break label_41;
}
jj_consume_token(S);
@@ -1564,7 +1580,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
n = jj_consume_token(UNKNOWN);
break;
default:
- jj_la1[56] = jj_gen;
+ jj_la1[57] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1593,7 +1609,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[57] = jj_gen;
+ jj_la1[58] = jj_gen;
break label_42;
}
jj_consume_token(S);
@@ -1612,7 +1628,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[58] = jj_gen;
+ jj_la1[59] = jj_gen;
break label_43;
}
jj_consume_token(S);
@@ -1631,7 +1647,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[59] = jj_gen;
+ jj_la1[60] = jj_gen;
break label_44;
}
jj_consume_token(S);
@@ -1662,7 +1678,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
connector = '~';
break;
default:
- jj_la1[60] = jj_gen;
+ jj_la1[61] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1672,14 +1688,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[61] = jj_gen;
+ jj_la1[62] = jj_gen;
break label_45;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[62] = jj_gen;
+ jj_la1[63] = jj_gen;
;
}
{
@@ -1689,7 +1705,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
break;
default:
- jj_la1[63] = jj_gen;
+ jj_la1[64] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1708,7 +1724,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[64] = jj_gen;
+ jj_la1[65] = jj_gen;
break label_46;
}
jj_consume_token(S);
@@ -1764,7 +1780,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
break;
default:
- jj_la1[65] = jj_gen;
+ jj_la1[66] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1783,7 +1799,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[66] = jj_gen;
+ jj_la1[67] = jj_gen;
break label_47;
}
}
@@ -1794,7 +1810,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[67] = jj_gen;
+ jj_la1[68] = jj_gen;
break label_48;
}
jj_consume_token(S);
@@ -1820,7 +1836,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
s += t.image;
break;
default:
- jj_la1[68] = jj_gen;
+ jj_la1[69] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1830,7 +1846,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[69] = jj_gen;
+ jj_la1[70] = jj_gen;
break label_49;
}
}
@@ -1840,7 +1856,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[70] = jj_gen;
+ jj_la1[71] = jj_gen;
break label_50;
}
jj_consume_token(S);
@@ -1862,7 +1878,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[71] = jj_gen;
+ jj_la1[72] = jj_gen;
break label_51;
}
jj_consume_token(S);
@@ -1884,7 +1900,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[72] = jj_gen;
+ jj_la1[73] = jj_gen;
break label_52;
}
jj_consume_token(S);
@@ -1916,7 +1932,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[73] = jj_gen;
+ jj_la1[74] = jj_gen;
break label_53;
}
jj_consume_token(S);
@@ -1943,29 +1959,41 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
case HASH:
case MEDIA_SYM:
case KEY_FRAME_SYM:
- case CONTAINS:
;
break;
default:
- jj_la1[74] = jj_gen;
+ jj_la1[75] = jj_gen;
break label_54;
}
- if (jj_2_3(5)) {
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case LBRACKET:
+ case ANY:
+ case PARENT:
+ case DOT:
+ case COLON:
+ case INTERPOLATION:
+ case INCLUDE_SYM:
+ case DEBUG_SYM:
+ case WARN_SYM:
+ case EXTEND_SYM:
+ case IDENT:
+ case VARIABLE:
+ case HASH:
+ case MEDIA_SYM:
+ case KEY_FRAME_SYM:
ifContentStatement();
- } else {
- switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
- case EACH_SYM:
- case IF_SYM:
- controlDirective();
- break;
- case MICROSOFT_RULE:
- microsoftExtension();
- break;
- default:
- jj_la1[75] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
+ break;
+ case EACH_SYM:
+ case IF_SYM:
+ controlDirective();
+ break;
+ case MICROSOFT_RULE:
+ microsoftExtension();
+ break;
+ default:
+ jj_la1[76] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
}
}
jj_consume_token(RBRACE);
@@ -1975,7 +2003,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[76] = jj_gen;
+ jj_la1[77] = jj_gen;
break label_55;
}
jj_consume_token(S);
@@ -2011,7 +2039,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[77] = jj_gen;
+ jj_la1[78] = jj_gen;
break label_56;
}
jj_consume_token(COMMA);
@@ -2021,7 +2049,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[78] = jj_gen;
+ jj_la1[79] = jj_gen;
break label_57;
}
jj_consume_token(S);
@@ -2048,7 +2076,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
try {
selector = simple_selector(null, ' ');
label_58: while (true) {
- if (jj_2_4(2)) {
+ if (jj_2_2(2)) {
;
} else {
break label_58;
@@ -2062,7 +2090,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[79] = jj_gen;
+ jj_la1[80] = jj_gen;
break label_59;
}
jj_consume_token(S);
@@ -2121,7 +2149,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[80] = jj_gen;
+ jj_la1[81] = jj_gen;
break label_60;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
@@ -2138,7 +2166,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
cond = pseudo(cond);
break;
default:
- jj_la1[81] = jj_gen;
+ jj_la1[82] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2154,7 +2182,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[82] = jj_gen;
+ jj_la1[83] = jj_gen;
break label_61;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
@@ -2168,7 +2196,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
cond = pseudo(cond);
break;
default:
- jj_la1[83] = jj_gen;
+ jj_la1[84] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2185,7 +2213,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[84] = jj_gen;
+ jj_la1[85] = jj_gen;
break label_62;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
@@ -2202,7 +2230,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
cond = pseudo(cond);
break;
default:
- jj_la1[85] = jj_gen;
+ jj_la1[86] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2219,7 +2247,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[86] = jj_gen;
+ jj_la1[87] = jj_gen;
break label_63;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
@@ -2236,7 +2264,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
cond = pseudo(cond);
break;
default:
- jj_la1[87] = jj_gen;
+ jj_la1[88] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2253,7 +2281,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[88] = jj_gen;
+ jj_la1[89] = jj_gen;
break label_64;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
@@ -2270,14 +2298,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
cond = pseudo(cond);
break;
default:
- jj_la1[89] = jj_gen;
+ jj_la1[90] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
break;
default:
- jj_la1[90] = jj_gen;
+ jj_la1[91] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2336,7 +2364,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
s += t.image;
break;
default:
- jj_la1[91] = jj_gen;
+ jj_la1[92] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2346,7 +2374,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[92] = jj_gen;
+ jj_la1[93] = jj_gen;
break label_65;
}
}
@@ -2387,7 +2415,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
s += t.image;
break;
default:
- jj_la1[93] = jj_gen;
+ jj_la1[94] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2397,7 +2425,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[94] = jj_gen;
+ jj_la1[95] = jj_gen;
break label_66;
}
}
@@ -2424,7 +2452,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
break;
default:
- jj_la1[95] = jj_gen;
+ jj_la1[96] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2447,7 +2475,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[96] = jj_gen;
+ jj_la1[97] = jj_gen;
break label_67;
}
jj_consume_token(S);
@@ -2459,7 +2487,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[97] = jj_gen;
+ jj_la1[98] = jj_gen;
break label_68;
}
jj_consume_token(S);
@@ -2497,7 +2525,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
cases = 6;
break;
default:
- jj_la1[98] = jj_gen;
+ jj_la1[99] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2507,7 +2535,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[99] = jj_gen;
+ jj_la1[100] = jj_gen;
break label_69;
}
jj_consume_token(S);
@@ -2522,7 +2550,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
attValue = val.image;
break;
default:
- jj_la1[100] = jj_gen;
+ jj_la1[101] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2532,14 +2560,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[101] = jj_gen;
+ jj_la1[102] = jj_gen;
break label_70;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[102] = jj_gen;
+ jj_la1[103] = jj_gen;
;
}
jj_consume_token(RBRACKET);
@@ -2604,7 +2632,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
isPseudoElement = true;
break;
default:
- jj_la1[103] = jj_gen;
+ jj_la1[104] = jj_gen;
;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
@@ -2653,7 +2681,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[104] = jj_gen;
+ jj_la1[105] = jj_gen;
break label_71;
}
jj_consume_token(S);
@@ -2679,7 +2707,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
break;
default:
- jj_la1[105] = jj_gen;
+ jj_la1[106] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2724,7 +2752,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[106] = jj_gen;
+ jj_la1[107] = jj_gen;
break label_72;
}
jj_consume_token(S);
@@ -2735,7 +2763,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
guarded = guarded();
break;
default:
- jj_la1[107] = jj_gen;
+ jj_la1[108] = jj_gen;
;
}
label_73: while (true) {
@@ -2746,7 +2774,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[108] = jj_gen;
+ jj_la1[109] = jj_gen;
break label_74;
}
jj_consume_token(S);
@@ -2756,7 +2784,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[109] = jj_gen;
+ jj_la1[110] = jj_gen;
break label_73;
}
}
@@ -2795,48 +2823,52 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
eachDirective();
break;
default:
- jj_la1[110] = jj_gen;
+ jj_la1[111] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
final public void ifContentStatement() throws ParseException {
- if (jj_2_5(5)) {
- listModifyDirective();
- } else {
- 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:
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case INCLUDE_SYM:
+ includeDirective();
+ break;
+ case MEDIA_SYM:
+ media();
+ break;
+ case EXTEND_SYM:
+ extendDirective();
+ break;
+ case LBRACKET:
+ case ANY:
+ case PARENT:
+ case DOT:
+ case COLON:
+ case INTERPOLATION:
+ case DEBUG_SYM:
+ case WARN_SYM:
+ case IDENT:
+ case HASH:
+ styleRuleOrDeclarationOrNestedProperties();
+ break;
+ case KEY_FRAME_SYM:
+ keyframes();
+ break;
+ default:
+ jj_la1[112] = jj_gen;
+ if (jj_2_3(2147483647)) {
variable();
- break;
- case LBRACKET:
- case ANY:
- case PARENT:
- case DOT:
- case COLON:
- case INTERPOLATION:
- case DEBUG_SYM:
- case WARN_SYM:
- case IDENT:
- case HASH:
- styleRuleOrDeclarationOrNestedProperties();
- break;
- case KEY_FRAME_SYM:
- keyframes();
- break;
- default:
- jj_la1[111] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
+ } else {
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case VARIABLE:
+ listModifyDirective();
+ break;
+ default:
+ jj_la1[113] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
}
}
}
@@ -2871,7 +2903,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[112] = jj_gen;
+ jj_la1[114] = jj_gen;
break label_75;
}
}
@@ -2882,7 +2914,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[113] = jj_gen;
+ jj_la1[115] = jj_gen;
break label_76;
}
jj_consume_token(S);
@@ -2906,11 +2938,10 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
case HASH:
case MEDIA_SYM:
case KEY_FRAME_SYM:
- case CONTAINS:
;
break;
default:
- jj_la1[114] = jj_gen;
+ jj_la1[116] = jj_gen;
break label_77;
}
ifContentStatement();
@@ -2922,7 +2953,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[115] = jj_gen;
+ jj_la1[117] = jj_gen;
break label_78;
}
jj_consume_token(S);
@@ -2933,7 +2964,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[116] = jj_gen;
+ jj_la1[118] = jj_gen;
break label_79;
}
elseDirective();
@@ -2952,7 +2983,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[117] = jj_gen;
+ jj_la1[119] = jj_gen;
break label_80;
}
jj_consume_token(S);
@@ -2985,13 +3016,13 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[118] = jj_gen;
+ jj_la1[120] = jj_gen;
break label_81;
}
}
break;
default:
- jj_la1[119] = jj_gen;
+ jj_la1[121] = jj_gen;
;
}
jj_consume_token(LBRACE);
@@ -3001,7 +3032,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[120] = jj_gen;
+ jj_la1[122] = jj_gen;
break label_82;
}
jj_consume_token(S);
@@ -3028,11 +3059,10 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
case HASH:
case MEDIA_SYM:
case KEY_FRAME_SYM:
- case CONTAINS:
;
break;
default:
- jj_la1[121] = jj_gen;
+ jj_la1[123] = jj_gen;
break label_83;
}
ifContentStatement();
@@ -3044,7 +3074,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[122] = jj_gen;
+ jj_la1[124] = jj_gen;
break label_84;
}
jj_consume_token(S);
@@ -3054,7 +3084,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
final public String booleanExpressionToken() throws ParseException {
Token n = null;
String s = null;
- if (jj_2_6(2)) {
+ if (jj_2_4(2147483647)) {
s = containsDirective();
} else {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
@@ -3110,7 +3140,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
n = jj_consume_token(NOT_EQ);
break;
default:
- jj_la1[123] = jj_gen;
+ jj_la1[125] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -3142,7 +3172,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[124] = jj_gen;
+ jj_la1[126] = jj_gen;
break label_85;
}
jj_consume_token(S);
@@ -3154,7 +3184,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[125] = jj_gen;
+ jj_la1[127] = jj_gen;
break label_86;
}
jj_consume_token(S);
@@ -3166,7 +3196,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[126] = jj_gen;
+ jj_la1[128] = jj_gen;
break label_87;
}
jj_consume_token(S);
@@ -3181,7 +3211,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
documentHandler.startEachDirective(var.image, listVariable);
break;
default:
- jj_la1[127] = jj_gen;
+ jj_la1[129] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -3192,7 +3222,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[128] = jj_gen;
+ jj_la1[130] = jj_gen;
break label_88;
}
jj_consume_token(S);
@@ -3214,11 +3244,10 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
case HASH:
case MEDIA_SYM:
case KEY_FRAME_SYM:
- case CONTAINS:
;
break;
default:
- jj_la1[129] = jj_gen;
+ jj_la1[131] = jj_gen;
break label_89;
}
ifContentStatement();
@@ -3230,7 +3259,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[130] = jj_gen;
+ jj_la1[132] = jj_gen;
break label_90;
}
jj_consume_token(S);
@@ -3248,7 +3277,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[131] = jj_gen;
+ jj_la1[133] = jj_gen;
break label_91;
}
jj_consume_token(S);
@@ -3260,7 +3289,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[132] = jj_gen;
+ jj_la1[134] = jj_gen;
break label_92;
}
jj_consume_token(COMMA);
@@ -3270,7 +3299,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[133] = jj_gen;
+ jj_la1[135] = jj_gen;
break label_93;
}
jj_consume_token(S);
@@ -3283,7 +3312,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[134] = jj_gen;
+ jj_la1[136] = jj_gen;
break label_94;
}
jj_consume_token(S);
@@ -3308,7 +3337,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[135] = jj_gen;
+ jj_la1[137] = jj_gen;
break label_95;
}
jj_consume_token(S);
@@ -3328,14 +3357,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[136] = jj_gen;
+ jj_la1[138] = jj_gen;
break label_96;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[137] = jj_gen;
+ jj_la1[139] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -3346,7 +3375,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[138] = jj_gen;
+ jj_la1[140] = jj_gen;
break label_97;
}
jj_consume_token(S);
@@ -3373,32 +3402,44 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
case PAGE_SYM:
case FONT_FACE_SYM:
case KEY_FRAME_SYM:
- case CONTAINS:
;
break;
default:
- jj_la1[139] = jj_gen;
+ jj_la1[141] = jj_gen;
break label_98;
}
- if (jj_2_7(5)) {
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case LBRACKET:
+ case ANY:
+ case PARENT:
+ case DOT:
+ case COLON:
+ case INTERPOLATION:
+ case INCLUDE_SYM:
+ case DEBUG_SYM:
+ case WARN_SYM:
+ case EXTEND_SYM:
+ case IDENT:
+ case VARIABLE:
+ case HASH:
+ case MEDIA_SYM:
+ case KEY_FRAME_SYM:
ifContentStatement();
- } else {
- switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
- case EACH_SYM:
- case IF_SYM:
- controlDirective();
- break;
- case FONT_FACE_SYM:
- fontFace();
- break;
- case PAGE_SYM:
- page();
- break;
- default:
- jj_la1[140] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
+ break;
+ case EACH_SYM:
+ case IF_SYM:
+ controlDirective();
+ break;
+ case FONT_FACE_SYM:
+ fontFace();
+ break;
+ case PAGE_SYM:
+ page();
+ break;
+ default:
+ jj_la1[142] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
}
}
jj_consume_token(RBRACE);
@@ -3408,7 +3449,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[141] = jj_gen;
+ jj_la1[143] = jj_gen;
break label_99;
}
jj_consume_token(S);
@@ -3427,7 +3468,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[142] = jj_gen;
+ jj_la1[144] = jj_gen;
break label_100;
}
jj_consume_token(COMMA);
@@ -3437,7 +3478,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[143] = jj_gen;
+ jj_la1[145] = jj_gen;
break label_101;
}
jj_consume_token(S);
@@ -3495,7 +3536,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[144] = jj_gen;
+ jj_la1[146] = jj_gen;
break label_102;
}
jj_consume_token(S);
@@ -3503,7 +3544,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
first = nonVariableTerm(null);
prev = first;
label_103: while (true) {
- if (jj_2_8(3)) {
+ if (jj_2_5(3)) {
;
} else {
break label_103;
@@ -3517,14 +3558,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[145] = jj_gen;
+ jj_la1[147] = jj_gen;
break label_104;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[146] = jj_gen;
+ jj_la1[148] = jj_gen;
;
}
prev = nonVariableTerm(prev);
@@ -3536,13 +3577,13 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
token.beginColumn, prev, variable.image);
break;
default:
- jj_la1[147] = jj_gen;
+ jj_la1[149] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
break;
default:
- jj_la1[148] = jj_gen;
+ jj_la1[150] = jj_gen;
;
}
VariableNode arg = new VariableNode(name, first, false);
@@ -3597,7 +3638,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[149] = jj_gen;
+ jj_la1[151] = jj_gen;
break label_105;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
@@ -3609,14 +3650,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[150] = jj_gen;
+ jj_la1[152] = jj_gen;
break label_106;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[151] = jj_gen;
+ jj_la1[153] = jj_gen;
;
}
next = term(prev);
@@ -3629,7 +3670,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[152] = jj_gen;
+ jj_la1[154] = jj_gen;
break label_107;
}
jj_consume_token(COMMA);
@@ -3639,7 +3680,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[153] = jj_gen;
+ jj_la1[155] = jj_gen;
break label_108;
}
jj_consume_token(S);
@@ -3681,7 +3722,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[154] = jj_gen;
+ jj_la1[156] = jj_gen;
break label_109;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
@@ -3693,14 +3734,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[155] = jj_gen;
+ jj_la1[157] = jj_gen;
break label_110;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[156] = jj_gen;
+ jj_la1[158] = jj_gen;
;
}
next = term(prev);
@@ -3726,7 +3767,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[157] = jj_gen;
+ jj_la1[159] = jj_gen;
break label_111;
}
jj_consume_token(S);
@@ -3746,7 +3787,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
jj_consume_token(RPARAN);
break;
default:
- jj_la1[158] = jj_gen;
+ jj_la1[160] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -3758,7 +3799,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[159] = jj_gen;
+ jj_la1[161] = jj_gen;
break label_113;
}
jj_consume_token(S);
@@ -3768,7 +3809,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[160] = jj_gen;
+ jj_la1[162] = jj_gen;
break label_112;
}
}
@@ -3787,39 +3828,159 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
final public void listModifyDirective() throws ParseException {
- if (jj_2_9(5)) {
- removeDirective();
- } else if (jj_2_10(5)) {
- appendDirective();
- } else if (jj_2_11(5)) {
- containsDirective();
- } else {
- jj_consume_token(-1);
- throw new ParseException();
- }
+ String list = null;
+ String remove = null;
+ String separator = null;
+ String variable = null;
+ Token n = null;
+ Token type = null;
+ // refactor, remove those 3 LOOKAHEAD(5).
+ n = jj_consume_token(VARIABLE);
+ variable = n.image;
label_114: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[161] = jj_gen;
+ jj_la1[163] = jj_gen;
break label_114;
}
jj_consume_token(S);
}
- jj_consume_token(SEMICOLON);
+ jj_consume_token(COLON);
label_115: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[162] = jj_gen;
+ jj_la1[164] = jj_gen;
break label_115;
}
jj_consume_token(S);
}
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case APPEND:
+ type = jj_consume_token(APPEND);
+ break;
+ case REMOVE:
+ type = jj_consume_token(REMOVE);
+ break;
+ case CONTAINS:
+ type = jj_consume_token(CONTAINS);
+ break;
+ default:
+ jj_la1[165] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+ label_116: while (true) {
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[166] = jj_gen;
+ break label_116;
+ }
+ jj_consume_token(S);
+ }
+ list = listModifyDirectiveArgs(0);
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case RPARAN:
+ jj_consume_token(RPARAN);
+ break;
+ default:
+ jj_la1[167] = jj_gen;
+ ;
+ }
+ jj_consume_token(COMMA);
+ label_117: while (true) {
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[168] = jj_gen;
+ break label_117;
+ }
+ jj_consume_token(S);
+ }
+ remove = listModifyDirectiveArgs(1);
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case COMMA:
+ jj_consume_token(COMMA);
+ label_118: while (true) {
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[169] = jj_gen;
+ break label_118;
+ }
+ jj_consume_token(S);
+ }
+ n = jj_consume_token(IDENT);
+ separator = n.image;
+ label_119: while (true) {
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[170] = jj_gen;
+ break label_119;
+ }
+ jj_consume_token(S);
+ }
+ break;
+ default:
+ jj_la1[171] = jj_gen;
+ ;
+ }
+ jj_consume_token(RPARAN);
+ switch (type.kind) {
+ case APPEND:
+ documentHandler.appendDirective(variable, list, remove, separator);
+ break;
+ case REMOVE:
+ documentHandler.removeDirective(variable, list, remove, separator);
+ break;
+ case CONTAINS:
+ if (variable == null) {
+ variable = "$var_" + UUID.randomUUID();
+ }
+ documentHandler
+ .containsDirective(variable, list, remove, separator);
+ break;
+ default:
+ break;
+ }
+ label_120: while (true) {
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[172] = jj_gen;
+ break label_120;
+ }
+ jj_consume_token(S);
+ }
+ jj_consume_token(SEMICOLON);
+ label_121: while (true) {
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[173] = jj_gen;
+ break label_121;
+ }
+ jj_consume_token(S);
+ }
}
/**
@@ -3834,38 +3995,38 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
Token n = null;
n = jj_consume_token(VARIABLE);
variable = n.image;
- label_116: while (true) {
+ label_122: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[163] = jj_gen;
- break label_116;
+ jj_la1[174] = jj_gen;
+ break label_122;
}
jj_consume_token(S);
}
jj_consume_token(COLON);
- label_117: while (true) {
+ label_123: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[164] = jj_gen;
- break label_117;
+ jj_la1[175] = jj_gen;
+ break label_123;
}
jj_consume_token(S);
}
jj_consume_token(APPEND);
- label_118: while (true) {
+ label_124: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[165] = jj_gen;
- break label_118;
+ jj_la1[176] = jj_gen;
+ break label_124;
}
jj_consume_token(S);
}
@@ -3875,18 +4036,18 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
jj_consume_token(RPARAN);
break;
default:
- jj_la1[166] = jj_gen;
+ jj_la1[177] = jj_gen;
;
}
jj_consume_token(COMMA);
- label_119: while (true) {
+ label_125: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[167] = jj_gen;
- break label_119;
+ jj_la1[178] = jj_gen;
+ break label_125;
}
jj_consume_token(S);
}
@@ -3894,33 +4055,33 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case COMMA:
jj_consume_token(COMMA);
- label_120: while (true) {
+ label_126: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[168] = jj_gen;
- break label_120;
+ jj_la1[179] = jj_gen;
+ break label_126;
}
jj_consume_token(S);
}
n = jj_consume_token(IDENT);
separator = n.image;
- label_121: while (true) {
+ label_127: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[169] = jj_gen;
- break label_121;
+ jj_la1[180] = jj_gen;
+ break label_127;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[170] = jj_gen;
+ jj_la1[181] = jj_gen;
;
}
jj_consume_token(RPARAN);
@@ -3939,38 +4100,38 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
Token n = null;
n = jj_consume_token(VARIABLE);
variable = n.image;
- label_122: while (true) {
+ label_128: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[171] = jj_gen;
- break label_122;
+ jj_la1[182] = jj_gen;
+ break label_128;
}
jj_consume_token(S);
}
jj_consume_token(COLON);
- label_123: while (true) {
+ label_129: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[172] = jj_gen;
- break label_123;
+ jj_la1[183] = jj_gen;
+ break label_129;
}
jj_consume_token(S);
}
jj_consume_token(REMOVE);
- label_124: while (true) {
+ label_130: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[173] = jj_gen;
- break label_124;
+ jj_la1[184] = jj_gen;
+ break label_130;
}
jj_consume_token(S);
}
@@ -3980,18 +4141,18 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
jj_consume_token(RPARAN);
break;
default:
- jj_la1[174] = jj_gen;
+ jj_la1[185] = jj_gen;
;
}
jj_consume_token(COMMA);
- label_125: while (true) {
+ label_131: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[175] = jj_gen;
- break label_125;
+ jj_la1[186] = jj_gen;
+ break label_131;
}
jj_consume_token(S);
}
@@ -3999,33 +4160,33 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case COMMA:
jj_consume_token(COMMA);
- label_126: while (true) {
+ label_132: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[176] = jj_gen;
- break label_126;
+ jj_la1[187] = jj_gen;
+ break label_132;
}
jj_consume_token(S);
}
n = jj_consume_token(IDENT);
separator = n.image;
- label_127: while (true) {
+ label_133: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[177] = jj_gen;
- break label_127;
+ jj_la1[188] = jj_gen;
+ break label_133;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[178] = jj_gen;
+ jj_la1[189] = jj_gen;
;
}
jj_consume_token(RPARAN);
@@ -4046,43 +4207,43 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
case VARIABLE:
n = jj_consume_token(VARIABLE);
variable = n.image;
- label_128: while (true) {
+ label_134: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[179] = jj_gen;
- break label_128;
+ jj_la1[190] = jj_gen;
+ break label_134;
}
jj_consume_token(S);
}
jj_consume_token(COLON);
- label_129: while (true) {
+ label_135: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[180] = jj_gen;
- break label_129;
+ jj_la1[191] = jj_gen;
+ break label_135;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[181] = jj_gen;
+ jj_la1[192] = jj_gen;
;
}
jj_consume_token(CONTAINS);
- label_130: while (true) {
+ label_136: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[182] = jj_gen;
- break label_130;
+ jj_la1[193] = jj_gen;
+ break label_136;
}
jj_consume_token(S);
}
@@ -4092,18 +4253,18 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
jj_consume_token(RPARAN);
break;
default:
- jj_la1[183] = jj_gen;
+ jj_la1[194] = jj_gen;
;
}
jj_consume_token(COMMA);
- label_131: while (true) {
+ label_137: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[184] = jj_gen;
- break label_131;
+ jj_la1[195] = jj_gen;
+ break label_137;
}
jj_consume_token(S);
}
@@ -4111,33 +4272,33 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case COMMA:
jj_consume_token(COMMA);
- label_132: while (true) {
+ label_138: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[185] = jj_gen;
- break label_132;
+ jj_la1[196] = jj_gen;
+ break label_138;
}
jj_consume_token(S);
}
n = jj_consume_token(IDENT);
separator = n.image;
- label_133: while (true) {
+ label_139: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[186] = jj_gen;
- break label_133;
+ jj_la1[197] = jj_gen;
+ break label_139;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[187] = jj_gen;
+ jj_la1[198] = jj_gen;
;
}
jj_consume_token(RPARAN);
@@ -4239,7 +4400,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
warnDirective();
break;
default:
- jj_la1[188] = jj_gen;
+ jj_la1[199] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -4251,14 +4412,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
// TODO should evaluate the content expression, call
// documentHandler.debugDirective() etc.
System.out.println(content);
- label_134: while (true) {
+ label_140: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[189] = jj_gen;
- break label_134;
+ jj_la1[200] = jj_gen;
+ break label_140;
}
jj_consume_token(S);
}
@@ -4270,14 +4431,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
// TODO should evaluate the content expression, call
// documentHandler.warnDirective() etc.
System.err.println(content);
- label_135: while (true) {
+ label_141: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[190] = jj_gen;
- break label_135;
+ jj_la1[201] = jj_gen;
+ break label_141;
}
jj_consume_token(S);
}
@@ -4303,19 +4464,19 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
exclusive = false;
break;
default:
- jj_la1[191] = jj_gen;
+ jj_la1[202] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
to = skipStatementUntilLeftBrace();
- label_136: while (true) {
+ label_142: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[192] = jj_gen;
- break label_136;
+ jj_la1[203] = jj_gen;
+ break label_142;
}
jj_consume_token(S);
}
@@ -4345,28 +4506,28 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
final public void extendDirective() throws ParseException {
ArrayList<String> list;
jj_consume_token(EXTEND_SYM);
- label_137: while (true) {
+ label_143: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[193] = jj_gen;
- break label_137;
+ jj_la1[204] = jj_gen;
+ break label_143;
}
jj_consume_token(S);
}
list = selectorList();
- label_138: while (true) {
+ label_144: while (true) {
jj_consume_token(SEMICOLON);
- label_139: while (true) {
+ label_145: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[194] = jj_gen;
- break label_139;
+ jj_la1[205] = jj_gen;
+ break label_145;
}
jj_consume_token(S);
}
@@ -4375,8 +4536,8 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[195] = jj_gen;
- break label_138;
+ jj_la1[206] = jj_gen;
+ break label_144;
}
}
documentHandler.extendDirective(list);
@@ -4403,26 +4564,26 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
LexicalUnit exp;
name = property();
jj_consume_token(COLON);
- label_140: while (true) {
+ label_146: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[196] = jj_gen;
- break label_140;
+ jj_la1[207] = jj_gen;
+ break label_146;
}
jj_consume_token(S);
}
jj_consume_token(LBRACE);
- label_141: while (true) {
+ label_147: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[197] = jj_gen;
- break label_141;
+ jj_la1[208] = jj_gen;
+ break label_147;
}
jj_consume_token(S);
}
@@ -4433,27 +4594,27 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[198] = jj_gen;
+ jj_la1[209] = jj_gen;
;
}
- label_142: while (true) {
+ label_148: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case SEMICOLON:
;
break;
default:
- jj_la1[199] = jj_gen;
- break label_142;
+ jj_la1[210] = jj_gen;
+ break label_148;
}
jj_consume_token(SEMICOLON);
- label_143: while (true) {
+ label_149: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[200] = jj_gen;
- break label_143;
+ jj_la1[211] = jj_gen;
+ break label_149;
}
jj_consume_token(S);
}
@@ -4463,20 +4624,20 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[201] = jj_gen;
+ jj_la1[212] = jj_gen;
;
}
}
jj_consume_token(RBRACE);
documentHandler.endNestedProperties(name);
- label_144: while (true) {
+ label_150: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[202] = jj_gen;
- break label_144;
+ jj_la1[213] = jj_gen;
+ break label_150;
}
jj_consume_token(S);
}
@@ -4489,22 +4650,34 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
final public void styleRuleOrDeclarationOrNestedProperties()
throws ParseException {
try {
- if (jj_2_12(5)) {
- styleRule();
- } else {
- switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
- case DEBUG_SYM:
- case WARN_SYM:
- debuggingDirective();
- break;
- case INTERPOLATION:
- case IDENT:
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case DEBUG_SYM:
+ case WARN_SYM:
+ debuggingDirective();
+ break;
+ default:
+ jj_la1[214] = jj_gen;
+ if (jj_2_6(5)) {
+ styleRule();
+ } else if (jj_2_7(2147483647)) {
declarationOrNestedProperties();
- break;
- default:
- jj_la1[203] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
+ } else {
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case LBRACKET:
+ case ANY:
+ case PARENT:
+ case DOT:
+ case COLON:
+ case INTERPOLATION:
+ case IDENT:
+ case HASH:
+ styleRule();
+ break;
+ default:
+ jj_la1[215] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
}
}
} catch (JumpException e) {
@@ -4546,14 +4719,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
name = property();
save = token;
jj_consume_token(COLON);
- label_145: while (true) {
+ label_151: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[204] = jj_gen;
- break label_145;
+ jj_la1[216] = jj_gen;
+ break label_151;
}
jj_consume_token(S);
}
@@ -4592,7 +4765,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
important = prio();
break;
default:
- jj_la1[205] = jj_gen;
+ jj_la1[217] = jj_gen;
;
}
Token next = getToken(1);
@@ -4611,14 +4784,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
case LBRACE:
jj_consume_token(LBRACE);
- label_146: while (true) {
+ label_152: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[206] = jj_gen;
- break label_146;
+ jj_la1[218] = jj_gen;
+ break label_152;
}
jj_consume_token(S);
}
@@ -4629,27 +4802,27 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[207] = jj_gen;
+ jj_la1[219] = jj_gen;
;
}
- label_147: while (true) {
+ label_153: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case SEMICOLON:
;
break;
default:
- jj_la1[208] = jj_gen;
- break label_147;
+ jj_la1[220] = jj_gen;
+ break label_153;
}
jj_consume_token(SEMICOLON);
- label_148: while (true) {
+ label_154: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[209] = jj_gen;
- break label_148;
+ jj_la1[221] = jj_gen;
+ break label_154;
}
jj_consume_token(S);
}
@@ -4659,26 +4832,26 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[210] = jj_gen;
+ jj_la1[222] = jj_gen;
;
}
}
jj_consume_token(RBRACE);
- label_149: while (true) {
+ label_155: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[211] = jj_gen;
- break label_149;
+ jj_la1[223] = jj_gen;
+ break label_155;
}
jj_consume_token(S);
}
documentHandler.endNestedProperties(name);
break;
default:
- jj_la1[212] = jj_gen;
+ jj_la1[224] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -4726,14 +4899,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
name = property();
save = token;
jj_consume_token(COLON);
- label_150: while (true) {
+ label_156: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[213] = jj_gen;
- break label_150;
+ jj_la1[225] = jj_gen;
+ break label_156;
}
jj_consume_token(S);
}
@@ -4743,7 +4916,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
important = prio();
break;
default:
- jj_la1[214] = jj_gen;
+ jj_la1[226] = jj_gen;
;
}
documentHandler.property(name, exp, important);
@@ -4784,14 +4957,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
*/
final public boolean prio() throws ParseException {
jj_consume_token(IMPORTANT_SYM);
- label_151: while (true) {
+ label_157: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[215] = jj_gen;
- break label_151;
+ jj_la1[227] = jj_gen;
+ break label_157;
}
jj_consume_token(S);
}
@@ -4805,14 +4978,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
final public boolean guarded() throws ParseException {
jj_consume_token(GUARDED_SYM);
- label_152: while (true) {
+ label_158: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[216] = jj_gen;
- break label_152;
+ jj_la1[228] = jj_gen;
+ break label_158;
}
jj_consume_token(S);
}
@@ -4834,14 +5007,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case DIV:
n = jj_consume_token(DIV);
- label_153: while (true) {
+ label_159: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[217] = jj_gen;
- break label_153;
+ jj_la1[229] = jj_gen;
+ break label_159;
}
jj_consume_token(S);
}
@@ -4854,14 +5027,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
case COMMA:
n = jj_consume_token(COMMA);
- label_154: while (true) {
+ label_160: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[218] = jj_gen;
- break label_154;
+ jj_la1[230] = jj_gen;
+ break label_160;
}
jj_consume_token(S);
}
@@ -4873,7 +5046,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
break;
default:
- jj_la1[219] = jj_gen;
+ jj_la1[231] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -4889,11 +5062,11 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
char op;
first = term(null);
res = first;
- label_155: while (true) {
- if (jj_2_13(2)) {
+ label_161: while (true) {
+ if (jj_2_8(2)) {
;
} else {
- break label_155;
+ break label_161;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case COMMA:
@@ -4901,7 +5074,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
res = operator(res);
break;
default:
- jj_la1[220] = jj_gen;
+ jj_la1[232] = jj_gen;
;
}
res = term(res);
@@ -4937,7 +5110,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
break;
default:
- jj_la1[221] = jj_gen;
+ jj_la1[233] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -4987,7 +5160,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
result = variableTerm(prev);
break;
default:
- jj_la1[222] = jj_gen;
+ jj_la1[234] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -5049,7 +5222,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
op = unaryOperator();
break;
default:
- jj_la1[223] = jj_gen;
+ jj_la1[235] = jj_gen;
;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
@@ -5154,7 +5327,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
result = function(op, prev);
break;
default:
- jj_la1[224] = jj_gen;
+ jj_la1[236] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -5180,7 +5353,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
s += ".";
break;
default:
- jj_la1[225] = jj_gen;
+ jj_la1[237] = jj_gen;
;
}
n = jj_consume_token(IDENT);
@@ -5218,24 +5391,24 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
result = unicode(prev);
break;
default:
- jj_la1[226] = jj_gen;
+ jj_la1[238] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
break;
default:
- jj_la1[227] = jj_gen;
+ jj_la1[239] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
- label_156: while (true) {
+ label_162: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[228] = jj_gen;
- break label_156;
+ jj_la1[240] = jj_gen;
+ break label_162;
}
jj_consume_token(S);
}
@@ -5258,14 +5431,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
Token n;
LexicalUnit params = null;
n = jj_consume_token(FUNCTION);
- label_157: while (true) {
+ label_163: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[229] = jj_gen;
- break label_157;
+ jj_la1[241] = jj_gen;
+ break label_163;
}
jj_consume_token(S);
}
@@ -5311,7 +5484,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
params = expr();
break;
default:
- jj_la1[230] = jj_gen;
+ jj_la1[242] = jj_gen;
;
}
jj_consume_token(RPARAN);
@@ -5848,14 +6021,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
*/
final public void _parseRule() throws ParseException {
String ret = null;
- label_158: while (true) {
+ label_164: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[231] = jj_gen;
- break label_158;
+ jj_la1[243] = jj_gen;
+ break label_164;
}
jj_consume_token(S);
}
@@ -5887,7 +6060,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
fontFace();
break;
default:
- jj_la1[232] = jj_gen;
+ jj_la1[244] = jj_gen;
ret = skipStatement();
if ((ret == null) || (ret.length() == 0)) {
{
@@ -5910,14 +6083,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
final public void _parseImportRule() throws ParseException {
- label_159: while (true) {
+ label_165: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[233] = jj_gen;
- break label_159;
+ jj_la1[245] = jj_gen;
+ break label_165;
}
jj_consume_token(S);
}
@@ -5925,14 +6098,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
final public void _parseMediaRule() throws ParseException {
- label_160: while (true) {
+ label_166: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[234] = jj_gen;
- break label_160;
+ jj_la1[246] = jj_gen;
+ break label_166;
}
jj_consume_token(S);
}
@@ -5940,14 +6113,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
final public void _parseDeclarationBlock() throws ParseException {
- label_161: while (true) {
+ label_167: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[235] = jj_gen;
- break label_161;
+ jj_la1[247] = jj_gen;
+ break label_167;
}
jj_consume_token(S);
}
@@ -5957,27 +6130,27 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[236] = jj_gen;
+ jj_la1[248] = jj_gen;
;
}
- label_162: while (true) {
+ label_168: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case SEMICOLON:
;
break;
default:
- jj_la1[237] = jj_gen;
- break label_162;
+ jj_la1[249] = jj_gen;
+ break label_168;
}
jj_consume_token(SEMICOLON);
- label_163: while (true) {
+ label_169: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[238] = jj_gen;
- break label_163;
+ jj_la1[250] = jj_gen;
+ break label_169;
}
jj_consume_token(S);
}
@@ -5987,7 +6160,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[239] = jj_gen;
+ jj_la1[251] = jj_gen;
;
}
}
@@ -5996,14 +6169,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
final public ArrayList<String> _parseSelectors() throws ParseException {
ArrayList<String> p = null;
try {
- label_164: while (true) {
+ label_170: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[240] = jj_gen;
- break label_164;
+ jj_la1[252] = jj_gen;
+ break label_170;
}
jj_consume_token(S);
}
@@ -6119,105 +6292,95 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
}
- private boolean jj_2_9(int xla) {
- jj_la = xla;
- jj_lastpos = jj_scanpos = token;
- try {
- return !jj_3_9();
- } catch (LookaheadSuccess ls) {
+ private boolean jj_3_3() {
+ if (jj_3R_171()) {
return true;
- } finally {
- jj_save(8, xla);
}
+ return false;
}
- private boolean jj_2_10(int xla) {
- jj_la = xla;
- jj_lastpos = jj_scanpos = token;
- try {
- return !jj_3_10();
- } catch (LookaheadSuccess ls) {
+ private boolean jj_3R_213() {
+ if (jj_scan_token(NUMBER)) {
return true;
- } finally {
- jj_save(9, xla);
}
+ return false;
}
- private boolean jj_2_11(int xla) {
- jj_la = xla;
- jj_lastpos = jj_scanpos = token;
- try {
- return !jj_3_11();
- } catch (LookaheadSuccess ls) {
+ private boolean jj_3R_355() {
+ if (jj_scan_token(FUNCTION)) {
return true;
- } finally {
- jj_save(10, xla);
}
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) {
+ jj_scanpos = xsp;
+ break;
+ }
+ }
+ return false;
}
- private boolean jj_2_12(int xla) {
- jj_la = xla;
- jj_lastpos = jj_scanpos = token;
- try {
- return !jj_3_12();
- } catch (LookaheadSuccess ls) {
+ private boolean jj_3R_212() {
+ if (jj_3R_255()) {
return true;
- } finally {
- jj_save(11, xla);
}
+ return false;
}
- private boolean jj_2_13(int xla) {
- jj_la = xla;
- jj_lastpos = jj_scanpos = token;
- try {
- return !jj_3_13();
- } catch (LookaheadSuccess ls) {
+ private boolean jj_3R_274() {
+ if (jj_3R_292()) {
return true;
- } finally {
- jj_save(12, xla);
}
+ return false;
}
- private boolean jj_3R_368() {
+ private boolean jj_3R_195() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3_6()) {
+ if (jj_3R_212()) {
jj_scanpos = xsp;
- if (jj_scan_token(76)) {
+ }
+ xsp = jj_scanpos;
+ if (jj_3R_213()) {
+ jj_scanpos = xsp;
+ if (jj_3R_214()) {
jj_scanpos = xsp;
- if (jj_scan_token(72)) {
+ if (jj_3R_215()) {
jj_scanpos = xsp;
- if (jj_scan_token(73)) {
+ if (jj_3R_216()) {
jj_scanpos = xsp;
- if (jj_scan_token(33)) {
+ if (jj_3R_217()) {
jj_scanpos = xsp;
- if (jj_scan_token(34)) {
+ if (jj_3R_218()) {
jj_scanpos = xsp;
- if (jj_scan_token(20)) {
+ if (jj_3R_219()) {
jj_scanpos = xsp;
- if (jj_scan_token(21)) {
+ if (jj_3R_220()) {
jj_scanpos = xsp;
- if (jj_scan_token(27)) {
+ if (jj_3R_221()) {
jj_scanpos = xsp;
- if (jj_scan_token(30)) {
+ if (jj_3R_222()) {
jj_scanpos = xsp;
- if (jj_scan_token(35)) {
+ if (jj_3R_223()) {
jj_scanpos = xsp;
- if (jj_scan_token(19)) {
+ if (jj_3R_224()) {
jj_scanpos = xsp;
- if (jj_scan_token(24)) {
+ if (jj_3R_225()) {
jj_scanpos = xsp;
- if (jj_scan_token(26)) {
+ if (jj_3R_226()) {
jj_scanpos = xsp;
- if (jj_scan_token(36)) {
+ if (jj_3R_227()) {
jj_scanpos = xsp;
- if (jj_scan_token(37)) {
+ if (jj_3R_228()) {
jj_scanpos = xsp;
- if (jj_scan_token(1)) {
+ if (jj_3R_229()) {
jj_scanpos = xsp;
- if (jj_scan_token(38)) {
- return true;
+ if (jj_3R_230()) {
+ jj_scanpos = xsp;
+ if (jj_3R_231()) {
+ return true;
+ }
}
}
}
@@ -6239,121 +6402,8 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_230() {
- if (jj_scan_token(DIMEN)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_323() {
- if (jj_scan_token(INTERPOLATION)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_229() {
- if (jj_scan_token(KHZ)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_174() {
- if (jj_3R_195()) {
- return true;
- }
- if (jj_scan_token(LBRACE)) {
- return true;
- }
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
- }
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_196()) {
- jj_scanpos = xsp;
- break;
- }
- }
- if (jj_scan_token(RBRACE)) {
- return true;
- }
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
- }
- return false;
- }
-
- private boolean jj_3R_228() {
- if (jj_scan_token(HZ)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_177() {
- if (jj_3R_200()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_326() {
- if (jj_scan_token(WARN_SYM)) {
- return true;
- }
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
- }
- return false;
- }
-
- private boolean jj_3R_227() {
- if (jj_scan_token(MS)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_299() {
- if (jj_3R_326()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_226() {
- if (jj_scan_token(SECOND)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_225() {
- if (jj_scan_token(GRAD)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_274() {
- if (jj_scan_token(FUNCTION)) {
+ private boolean jj_3R_181() {
+ if (jj_scan_token(VARIABLE)) {
return true;
}
Token xsp;
@@ -6367,40 +6417,15 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_224() {
- if (jj_scan_token(RAD)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_325() {
- if (jj_scan_token(DEBUG_SYM)) {
- return true;
- }
+ private boolean jj_3R_176() {
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_3R_196()) {
+ return true;
}
}
- return false;
- }
-
- private boolean jj_3R_223() {
- if (jj_scan_token(DEG)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_251() {
- if (jj_scan_token(VARIABLE)) {
- return true;
- }
- Token xsp;
while (true) {
xsp = jj_scanpos;
if (jj_scan_token(1)) {
@@ -6411,7 +6436,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_254() {
+ private boolean jj_3R_184() {
if (jj_scan_token(SEMICOLON)) {
return true;
}
@@ -6426,80 +6451,47 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_222() {
- if (jj_scan_token(EXS)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_221() {
- if (jj_scan_token(EMS)) {
+ private boolean jj_3R_278() {
+ if (jj_3R_171()) {
return true;
}
return false;
}
- private boolean jj_3R_298() {
- if (jj_3R_325()) {
+ private boolean jj_3R_344() {
+ if (jj_3R_362()) {
return true;
}
return false;
}
- private boolean jj_3R_282() {
+ private boolean jj_3R_242() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_298()) {
+ if (jj_3R_264()) {
jj_scanpos = xsp;
- if (jj_3R_299()) {
+ if (jj_3R_265()) {
return true;
}
}
return false;
}
- private boolean jj_3R_322() {
+ private boolean jj_3R_264() {
if (jj_scan_token(IDENT)) {
return true;
}
return false;
}
- private boolean jj_3R_294() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_322()) {
- jj_scanpos = xsp;
- if (jj_3R_323()) {
- return true;
- }
- }
- return false;
- }
-
- private boolean jj_3R_220() {
- if (jj_scan_token(PX)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_354() {
- if (jj_3R_368()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_273() {
+ private boolean jj_3R_199() {
Token xsp;
- if (jj_3R_294()) {
+ if (jj_3R_242()) {
return true;
}
while (true) {
xsp = jj_scanpos;
- if (jj_3R_294()) {
+ if (jj_3R_242()) {
jj_scanpos = xsp;
break;
}
@@ -6514,24 +6506,17 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_219() {
- if (jj_scan_token(IN)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_309() {
+ private boolean jj_3R_297() {
if (jj_scan_token(IF_SYM)) {
return true;
}
Token xsp;
- if (jj_3R_354()) {
+ if (jj_3R_344()) {
return true;
}
while (true) {
xsp = jj_scanpos;
- if (jj_3R_354()) {
+ if (jj_3R_344()) {
jj_scanpos = xsp;
break;
}
@@ -6542,85 +6527,71 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_292() {
- if (jj_3R_310()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_218() {
- if (jj_scan_token(PC)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_217() {
- if (jj_scan_token(MM)) {
+ private boolean jj_3R_281() {
+ if (jj_3R_298()) {
return true;
}
return false;
}
- private boolean jj_3R_321() {
- if (jj_scan_token(S)) {
+ private boolean jj_3R_258() {
+ if (jj_scan_token(HASH)) {
return true;
}
return false;
}
- private boolean jj_3R_320() {
- if (jj_scan_token(DOT)) {
+ private boolean jj_3R_248() {
+ if (jj_3R_181()) {
return true;
}
return false;
}
- private boolean jj_3R_319() {
- if (jj_scan_token(EQ)) {
+ private boolean jj_3R_277() {
+ if (jj_3R_295()) {
return true;
}
return false;
}
- private boolean jj_3R_216() {
- if (jj_scan_token(CM)) {
+ private boolean jj_3R_309() {
+ if (jj_scan_token(S)) {
return true;
}
return false;
}
- private boolean jj_3R_318() {
- if (jj_scan_token(RPARAN)) {
+ private boolean jj_3R_308() {
+ if (jj_scan_token(DOT)) {
return true;
}
return false;
}
- private boolean jj_3R_317() {
- if (jj_scan_token(FUNCTION)) {
+ private boolean jj_3R_307() {
+ if (jj_scan_token(EQ)) {
return true;
}
return false;
}
- private boolean jj_3R_166() {
+ private boolean jj_3R_261() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3_5()) {
+ if (jj_3R_273()) {
jj_scanpos = xsp;
- if (jj_3R_177()) {
+ if (jj_3R_274()) {
jj_scanpos = xsp;
- if (jj_3R_178()) {
+ if (jj_3R_275()) {
jj_scanpos = xsp;
- if (jj_3R_179()) {
+ if (jj_3R_276()) {
jj_scanpos = xsp;
- if (jj_3R_180()) {
+ if (jj_3R_277()) {
jj_scanpos = xsp;
- if (jj_3R_181()) {
+ if (jj_3R_278()) {
jj_scanpos = xsp;
- if (jj_3R_182()) {
+ if (jj_3R_279()) {
return true;
}
}
@@ -6632,208 +6603,139 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3_5() {
- if (jj_3R_165()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_316() {
- if (jj_scan_token(COLON)) {
+ private boolean jj_3R_273() {
+ if (jj_3R_291()) {
return true;
}
return false;
}
- private boolean jj_3R_253() {
- if (jj_3R_281()) {
+ private boolean jj_3R_306() {
+ if (jj_scan_token(RPARAN)) {
return true;
}
return false;
}
- private boolean jj_3R_215() {
- if (jj_scan_token(PT)) {
+ private boolean jj_3R_305() {
+ if (jj_scan_token(FUNCTION)) {
return true;
}
return false;
}
- private boolean jj_3R_315() {
- if (jj_scan_token(INTERPOLATION)) {
+ private boolean jj_3R_304() {
+ if (jj_scan_token(COLON)) {
return true;
}
return false;
}
- private boolean jj_3R_314() {
- if (jj_scan_token(COMMA)) {
+ private boolean jj_3R_183() {
+ if (jj_3R_205()) {
return true;
}
return false;
}
- private boolean jj_3R_313() {
- if (jj_scan_token(STRING)) {
+ private boolean jj_3R_303() {
+ if (jj_scan_token(INTERPOLATION)) {
return true;
}
return false;
}
- private boolean jj_3R_214() {
- if (jj_scan_token(PERCENTAGE)) {
+ private boolean jj_3R_203() {
+ if (jj_3R_176()) {
return true;
}
return false;
}
- private boolean jj_3R_312() {
- if (jj_scan_token(NUMBER)) {
+ private boolean jj_3R_302() {
+ if (jj_scan_token(COMMA)) {
return true;
}
return false;
}
- private boolean jj_3R_271() {
+ private boolean jj_3R_180() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_291()) {
+ if (jj_3R_203()) {
jj_scanpos = xsp;
- if (jj_3R_292()) {
+ if (jj_3R_204()) {
return true;
}
}
return false;
}
- private boolean jj_3R_291() {
- if (jj_3R_309()) {
+ private boolean jj_3R_259() {
+ if (jj_scan_token(URL)) {
return true;
}
return false;
}
- private boolean jj_3R_199() {
- if (jj_3R_243()) {
+ private boolean jj_3R_301() {
+ if (jj_scan_token(STRING)) {
return true;
}
return false;
}
- private boolean jj_3R_311() {
- if (jj_scan_token(IDENT)) {
+ private boolean jj_3R_300() {
+ if (jj_scan_token(NUMBER)) {
return true;
}
return false;
}
- private boolean jj_3R_293() {
+ private boolean jj_3R_262() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_311()) {
+ if (jj_3R_280()) {
jj_scanpos = xsp;
- if (jj_3R_312()) {
- jj_scanpos = xsp;
- if (jj_3R_313()) {
- jj_scanpos = xsp;
- if (jj_3R_314()) {
- jj_scanpos = xsp;
- if (jj_3R_315()) {
- jj_scanpos = xsp;
- if (jj_3R_316()) {
- jj_scanpos = xsp;
- if (jj_3R_317()) {
- jj_scanpos = xsp;
- if (jj_3R_318()) {
- jj_scanpos = xsp;
- if (jj_3R_319()) {
- jj_scanpos = xsp;
- if (jj_3R_320()) {
- jj_scanpos = xsp;
- if (jj_3R_321()) {
- return true;
- }
- }
- }
- }
- }
- }
- }
- }
- }
+ if (jj_3R_281()) {
+ return true;
}
}
return false;
}
- private boolean jj_3R_213() {
- if (jj_scan_token(NUMBER)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_212() {
- if (jj_3R_265()) {
+ private boolean jj_3R_280() {
+ if (jj_3R_297()) {
return true;
}
return false;
}
- private boolean jj_3R_193() {
+ private boolean jj_3R_282() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_212()) {
+ if (jj_3R_299()) {
jj_scanpos = xsp;
- }
- xsp = jj_scanpos;
- if (jj_3R_213()) {
- jj_scanpos = xsp;
- if (jj_3R_214()) {
+ if (jj_3R_300()) {
jj_scanpos = xsp;
- if (jj_3R_215()) {
+ if (jj_3R_301()) {
jj_scanpos = xsp;
- if (jj_3R_216()) {
+ if (jj_3R_302()) {
jj_scanpos = xsp;
- if (jj_3R_217()) {
+ if (jj_3R_303()) {
jj_scanpos = xsp;
- if (jj_3R_218()) {
+ if (jj_3R_304()) {
jj_scanpos = xsp;
- if (jj_3R_219()) {
+ if (jj_3R_305()) {
jj_scanpos = xsp;
- if (jj_3R_220()) {
+ if (jj_3R_306()) {
jj_scanpos = xsp;
- if (jj_3R_221()) {
+ if (jj_3R_307()) {
jj_scanpos = xsp;
- if (jj_3R_222()) {
+ if (jj_3R_308()) {
jj_scanpos = xsp;
- if (jj_3R_223()) {
- jj_scanpos = xsp;
- if (jj_3R_224()) {
- jj_scanpos = xsp;
- if (jj_3R_225()) {
- jj_scanpos = xsp;
- if (jj_3R_226()) {
- jj_scanpos = xsp;
- if (jj_3R_227()) {
- jj_scanpos = xsp;
- if (jj_3R_228()) {
- jj_scanpos = xsp;
- if (jj_3R_229()) {
- jj_scanpos = xsp;
- if (jj_3R_230()) {
- jj_scanpos = xsp;
- if (jj_3R_231()) {
- return true;
- }
- }
- }
- }
- }
- }
- }
- }
+ if (jj_3R_309()) {
+ return true;
}
}
}
@@ -6848,26 +6750,28 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_171() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_193()) {
- jj_scanpos = xsp;
- if (jj_3R_194()) {
- return true;
- }
+ private boolean jj_3R_299() {
+ if (jj_scan_token(IDENT)) {
+ return true;
}
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
+ return false;
+ }
+
+ private boolean jj_3R_179() {
+ if (jj_3R_202()) {
+ return true;
}
return false;
}
- private boolean jj_3R_272() {
+ private boolean jj_3R_271() {
+ if (jj_scan_token(PLUS)) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_263() {
if (jj_scan_token(MICROSOFT_RULE)) {
return true;
}
@@ -6882,12 +6786,12 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
if (jj_scan_token(COLON)) {
return true;
}
- if (jj_3R_293()) {
+ if (jj_3R_282()) {
return true;
}
while (true) {
xsp = jj_scanpos;
- if (jj_3R_293()) {
+ if (jj_3R_282()) {
jj_scanpos = xsp;
break;
}
@@ -6895,35 +6799,66 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_261() {
+ private boolean jj_3R_255() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_270()) {
+ jj_scanpos = xsp;
+ if (jj_3R_271()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private boolean jj_3R_270() {
+ if (jj_scan_token(MINUS)) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_251() {
if (jj_scan_token(SIBLING)) {
return true;
}
return false;
}
- private boolean jj_3R_260() {
+ private boolean jj_3R_250() {
if (jj_scan_token(PRECEDES)) {
return true;
}
return false;
}
- private boolean jj_3R_259() {
+ private boolean jj_3R_249() {
if (jj_scan_token(PLUS)) {
return true;
}
return false;
}
+ private boolean jj_3_8() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_179()) {
+ jj_scanpos = xsp;
+ }
+ if (jj_3R_180()) {
+ return true;
+ }
+ return false;
+ }
+
private boolean jj_3R_206() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_259()) {
+ if (jj_3R_249()) {
jj_scanpos = xsp;
- if (jj_3R_260()) {
+ if (jj_3R_250()) {
jj_scanpos = xsp;
- if (jj_3R_261()) {
+ if (jj_3R_251()) {
return true;
}
}
@@ -6938,21 +6873,22 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_268() {
- if (jj_scan_token(HASH)) {
+ private boolean jj_3R_182() {
+ if (jj_3R_180()) {
return true;
}
- return false;
- }
-
- private boolean jj_3R_243() {
- if (jj_3R_251()) {
- return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3_8()) {
+ jj_scanpos = xsp;
+ break;
+ }
}
return false;
}
- private boolean jj_3R_185() {
+ private boolean jj_3R_187() {
if (jj_scan_token(SIBLING)) {
return true;
}
@@ -6967,7 +6903,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_184() {
+ private boolean jj_3R_186() {
if (jj_scan_token(PRECEDES)) {
return true;
}
@@ -6982,7 +6918,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_186() {
+ private boolean jj_3R_260() {
+ if (jj_scan_token(UNICODERANGE)) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_188() {
if (jj_scan_token(S)) {
return true;
}
@@ -6994,16 +6937,16 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_167() {
+ private boolean jj_3R_172() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_183()) {
+ if (jj_3R_185()) {
jj_scanpos = xsp;
- if (jj_3R_184()) {
+ if (jj_3R_186()) {
jj_scanpos = xsp;
- if (jj_3R_185()) {
+ if (jj_3R_187()) {
jj_scanpos = xsp;
- if (jj_3R_186()) {
+ if (jj_3R_188()) {
return true;
}
}
@@ -7012,7 +6955,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_183() {
+ private boolean jj_3R_185() {
if (jj_scan_token(PLUS)) {
return true;
}
@@ -7027,8 +6970,8 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_203() {
- if (jj_3R_251()) {
+ private boolean jj_3R_171() {
+ if (jj_3R_181()) {
return true;
}
if (jj_scan_token(COLON)) {
@@ -7042,154 +6985,27 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
}
}
- if (jj_3R_252()) {
- return true;
- }
- xsp = jj_scanpos;
- if (jj_3R_253()) {
- jj_scanpos = xsp;
- }
- if (jj_3R_254()) {
- return true;
- }
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_254()) {
- jj_scanpos = xsp;
- break;
- }
- }
- return false;
- }
-
- private boolean jj_3R_198() {
- if (jj_3R_171()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_176() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_198()) {
- jj_scanpos = xsp;
- if (jj_3R_199()) {
- return true;
- }
- }
- return false;
- }
-
- private boolean jj_3R_269() {
- if (jj_scan_token(URL)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_175() {
- if (jj_3R_197()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_289() {
- if (jj_scan_token(PLUS)) {
+ if (jj_3R_182()) {
return true;
}
- return false;
- }
-
- private boolean jj_3R_265() {
- Token xsp;
xsp = jj_scanpos;
- if (jj_3R_288()) {
- jj_scanpos = xsp;
- if (jj_3R_289()) {
- return true;
- }
- }
- return false;
- }
-
- private boolean jj_3R_288() {
- if (jj_scan_token(MINUS)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3_13() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_175()) {
+ if (jj_3R_183()) {
jj_scanpos = xsp;
}
- if (jj_3R_176()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_252() {
- if (jj_3R_176()) {
+ if (jj_3R_184()) {
return true;
}
- Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3_13()) {
- jj_scanpos = xsp;
- break;
- }
- }
- return false;
- }
-
- private boolean jj_3R_208() {
- if (jj_scan_token(HASH)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_270() {
- if (jj_scan_token(UNICODERANGE)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_343() {
- if (jj_scan_token(IDENT)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_344() {
- if (jj_scan_token(FUNCTION)) {
- return true;
- }
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
+ if (jj_3R_184()) {
jj_scanpos = xsp;
break;
}
}
- if (true) {
- jj_la = 0;
- jj_scanpos = jj_lastpos;
- return false;
- }
return false;
}
- private boolean jj_3R_242() {
+ private boolean jj_3R_247() {
if (jj_scan_token(COMMA)) {
return true;
}
@@ -7204,100 +7020,19 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_297() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_scan_token(101)) {
- jj_scanpos = xsp;
- if (jj_scan_token(10)) {
- jj_scanpos = xsp;
- if (jj_scan_token(97)) {
- jj_scanpos = xsp;
- if (jj_scan_token(22)) {
- jj_scanpos = xsp;
- if (jj_scan_token(14)) {
- jj_scanpos = xsp;
- if (jj_scan_token(99)) {
- jj_scanpos = xsp;
- if (jj_scan_token(116)) {
- jj_scanpos = xsp;
- if (jj_scan_token(102)) {
- jj_scanpos = xsp;
- if (jj_scan_token(95)) {
- jj_scanpos = xsp;
- if (jj_scan_token(18)) {
- jj_scanpos = xsp;
- if (jj_scan_token(12)) {
- jj_scanpos = xsp;
- if (jj_scan_token(96)) {
- jj_scanpos = xsp;
- if (jj_scan_token(41)) {
- jj_scanpos = xsp;
- if (jj_scan_token(73)) {
- jj_scanpos = xsp;
- if (jj_scan_token(98)) {
- jj_scanpos = xsp;
- if (jj_scan_token(77)) {
- jj_scanpos = xsp;
- if (jj_scan_token(71)) {
- jj_scanpos = xsp;
- if (jj_scan_token(112)) {
- jj_scanpos = xsp;
- if (jj_scan_token(75)) {
- jj_scanpos = xsp;
- if (jj_scan_token(23)) {
- jj_scanpos = xsp;
- if (jj_scan_token(20)) {
- jj_scanpos = xsp;
- if (jj_scan_token(24)) {
- jj_scanpos = xsp;
- if (jj_scan_token(25)) {
- jj_scanpos = xsp;
- if (jj_scan_token(21)) {
- jj_scanpos = xsp;
- if (jj_scan_token(117)) {
- return true;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- return false;
- }
-
- private boolean jj_3R_197() {
+ private boolean jj_3R_202() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_241()) {
+ if (jj_3R_246()) {
jj_scanpos = xsp;
- if (jj_3R_242()) {
+ if (jj_3R_247()) {
return true;
}
}
return false;
}
- private boolean jj_3R_241() {
+ private boolean jj_3R_246() {
if (jj_scan_token(DIV)) {
return true;
}
@@ -7312,7 +7047,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_281() {
+ private boolean jj_3R_205() {
if (jj_scan_token(GUARDED_SYM)) {
return true;
}
@@ -7327,7 +7062,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_192() {
+ private boolean jj_3R_194() {
if (jj_scan_token(VARIABLE)) {
return true;
}
@@ -7352,10 +7087,10 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_169() {
+ private boolean jj_3R_174() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_192()) {
+ if (jj_3R_194()) {
jj_scanpos = xsp;
}
if (jj_scan_token(CONTAINS)) {
@@ -7376,7 +7111,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_355() {
+ private boolean jj_3R_266() {
if (jj_scan_token(IMPORTANT_SYM)) {
return true;
}
@@ -7391,14 +7126,55 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3_11() {
- if (jj_3R_169()) {
+ private boolean jj_3R_208() {
+ if (jj_scan_token(HASH)) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_323() {
+ if (jj_scan_token(IDENT)) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_283() {
+ if (jj_3R_266()) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_324() {
+ if (jj_scan_token(FUNCTION)) {
return true;
}
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) {
+ jj_scanpos = xsp;
+ break;
+ }
+ }
+ if (true) {
+ jj_la = 0;
+ jj_scanpos = jj_lastpos;
+ return false;
+ }
return false;
}
private boolean jj_3R_342() {
+ if (jj_3R_177()) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_322() {
if (jj_scan_token(COLON)) {
return true;
}
@@ -7411,34 +7187,27 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_342()) {
+ if (jj_3R_322()) {
jj_scanpos = xsp;
}
xsp = jj_scanpos;
- if (jj_3R_343()) {
+ if (jj_3R_323()) {
jj_scanpos = xsp;
- if (jj_3R_344()) {
+ if (jj_3R_324()) {
return true;
}
}
return false;
}
- private boolean jj_3R_172() {
- if (jj_scan_token(VARIABLE)) {
+ private boolean jj_3R_267() {
+ if (jj_3R_199()) {
return true;
}
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
- }
if (jj_scan_token(COLON)) {
return true;
}
+ Token xsp;
while (true) {
xsp = jj_scanpos;
if (jj_scan_token(1)) {
@@ -7446,48 +7215,32 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
}
}
- if (jj_scan_token(REMOVE)) {
+ if (jj_3R_182()) {
return true;
}
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
- }
- if (true) {
- jj_la = 0;
- jj_scanpos = jj_lastpos;
- return false;
+ xsp = jj_scanpos;
+ if (jj_3R_283()) {
+ jj_scanpos = xsp;
}
return false;
}
- private boolean jj_3_10() {
- if (jj_3R_173()) {
+ private boolean jj_3R_268() {
+ if (jj_3R_267()) {
return true;
}
return false;
}
- private boolean jj_3R_247() {
+ private boolean jj_3R_337() {
if (jj_scan_token(SEMICOLON)) {
return true;
}
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
- }
return false;
}
- private boolean jj_3R_324() {
- if (jj_scan_token(COLON)) {
+ private boolean jj_3R_245() {
+ if (jj_scan_token(SEMICOLON)) {
return true;
}
Token xsp;
@@ -7498,22 +7251,21 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
}
}
- return false;
- }
-
- private boolean jj_3R_295() {
- Token xsp;
xsp = jj_scanpos;
- if (jj_3R_324()) {
+ if (jj_3R_268()) {
jj_scanpos = xsp;
}
- if (jj_3R_176()) {
+ return false;
+ }
+
+ private boolean jj_3R_354() {
+ if (jj_scan_token(STRING)) {
return true;
}
return false;
}
- private boolean jj_3R_173() {
+ private boolean jj_3R_296() {
if (jj_scan_token(VARIABLE)) {
return true;
}
@@ -7535,154 +7287,146 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
}
}
- if (jj_scan_token(APPEND)) {
- return true;
- }
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(114)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(113)) {
jj_scanpos = xsp;
- break;
+ if (jj_scan_token(115)) {
+ return true;
+ }
}
}
- if (true) {
- jj_la = 0;
- jj_scanpos = jj_lastpos;
- return false;
- }
return false;
}
- private boolean jj_3R_356() {
- if (jj_3R_273()) {
- return true;
- }
- if (jj_scan_token(COLON)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_280() {
- if (jj_3R_297()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_367() {
- if (jj_scan_token(STRING)) {
+ private boolean jj_3R_352() {
+ if (jj_scan_token(STARMATCH)) {
return true;
}
return false;
}
- private boolean jj_3R_365() {
- if (jj_scan_token(STARMATCH)) {
+ private boolean jj_3_7() {
+ if (jj_3R_178()) {
return true;
}
return false;
}
- private boolean jj_3R_366() {
+ private boolean jj_3R_353() {
if (jj_scan_token(IDENT)) {
return true;
}
return false;
}
- private boolean jj_3R_364() {
+ private boolean jj_3R_351() {
if (jj_scan_token(DOLLARMATCH)) {
return true;
}
return false;
}
- private boolean jj_3R_363() {
+ private boolean jj_3R_350() {
if (jj_scan_token(CARETMATCH)) {
return true;
}
return false;
}
- private boolean jj_3R_362() {
- if (jj_scan_token(DASHMATCH)) {
+ private boolean jj_3R_244() {
+ if (jj_3R_267()) {
return true;
}
return false;
}
- private boolean jj_3R_361() {
- if (jj_scan_token(INCLUDES)) {
+ private boolean jj_3R_349() {
+ if (jj_scan_token(DASHMATCH)) {
return true;
}
return false;
}
- private boolean jj_3R_357() {
- if (jj_3R_356()) {
+ private boolean jj_3R_348() {
+ if (jj_scan_token(INCLUDES)) {
return true;
}
return false;
}
- private boolean jj_3R_303() {
- if (jj_scan_token(INTERPOLATION)) {
+ private boolean jj_3R_335() {
+ if (jj_3R_181()) {
return true;
}
return false;
}
- private boolean jj_3R_245() {
- if (jj_3R_251()) {
+ private boolean jj_3R_285() {
+ if (jj_scan_token(INTERPOLATION)) {
return true;
}
return false;
}
- private boolean jj_3R_360() {
+ private boolean jj_3R_347() {
if (jj_scan_token(EQ)) {
return true;
}
return false;
}
- private boolean jj_3_9() {
- if (jj_3R_172()) {
+ private boolean jj_3R_201() {
+ if (jj_scan_token(LBRACE)) {
return true;
}
- return false;
- }
-
- private boolean jj_3R_165() {
Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) {
+ jj_scanpos = xsp;
+ break;
+ }
+ }
xsp = jj_scanpos;
- if (jj_3_9()) {
+ if (jj_3R_244()) {
jj_scanpos = xsp;
- if (jj_3_10()) {
+ }
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_245()) {
jj_scanpos = xsp;
- if (jj_3_11()) {
- return true;
- }
+ break;
+ }
+ }
+ if (jj_scan_token(RBRACE)) {
+ return true;
+ }
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) {
+ jj_scanpos = xsp;
+ break;
}
}
return false;
}
- private boolean jj_3R_349() {
+ private boolean jj_3R_329() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_360()) {
+ if (jj_3R_347()) {
jj_scanpos = xsp;
- if (jj_3R_361()) {
+ if (jj_3R_348()) {
jj_scanpos = xsp;
- if (jj_3R_362()) {
+ if (jj_3R_349()) {
jj_scanpos = xsp;
- if (jj_3R_363()) {
+ if (jj_3R_350()) {
jj_scanpos = xsp;
- if (jj_3R_364()) {
+ if (jj_3R_351()) {
jj_scanpos = xsp;
- if (jj_3R_365()) {
+ if (jj_3R_352()) {
return true;
}
}
@@ -7698,9 +7442,9 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
}
xsp = jj_scanpos;
- if (jj_3R_366()) {
+ if (jj_3R_353()) {
jj_scanpos = xsp;
- if (jj_3R_367()) {
+ if (jj_3R_354()) {
return true;
}
}
@@ -7714,8 +7458,15 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_279() {
- if (jj_3R_174()) {
+ private boolean jj_3R_243() {
+ if (jj_3R_266()) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_341() {
+ if (jj_3R_178()) {
return true;
}
return false;
@@ -7744,7 +7495,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
}
xsp = jj_scanpos;
- if (jj_3R_349()) {
+ if (jj_3R_329()) {
jj_scanpos = xsp;
}
if (jj_scan_token(RBRACKET)) {
@@ -7753,78 +7504,57 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_246() {
- if (jj_3R_274()) {
+ private boolean jj_3R_336() {
+ if (jj_3R_355()) {
return true;
}
- if (jj_3R_275()) {
+ if (jj_3R_356()) {
return true;
}
- if (jj_scan_token(RPARAN)) {
+ return false;
+ }
+
+ private boolean jj_3R_346() {
+ if (jj_scan_token(INTERPOLATION)) {
return true;
}
return false;
}
- private boolean jj_3R_329() {
- if (jj_scan_token(SEMICOLON)) {
+ private boolean jj_3R_200() {
+ if (jj_3R_182()) {
return true;
}
Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
- }
xsp = jj_scanpos;
- if (jj_3R_357()) {
+ if (jj_3R_243()) {
jj_scanpos = xsp;
}
return false;
}
- private boolean jj_3R_359() {
- if (jj_scan_token(INTERPOLATION)) {
+ private boolean jj_3R_334() {
+ if (jj_3R_199()) {
return true;
}
return false;
}
- private boolean jj_3R_277() {
+ private boolean jj_3R_358() {
if (jj_scan_token(COMMA)) {
return true;
}
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
- }
- if (jj_3R_276()) {
- return true;
- }
return false;
}
- private boolean jj_3R_244() {
- if (jj_3R_273()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_264() {
+ private boolean jj_3R_254() {
if (jj_scan_token(PARENT)) {
return true;
}
return false;
}
- private boolean jj_3R_276() {
+ private boolean jj_3R_357() {
if (jj_scan_token(IDENT)) {
return true;
}
@@ -7839,14 +7569,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_263() {
- if (jj_scan_token(ANY)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_200() {
+ private boolean jj_3R_291() {
if (jj_scan_token(INCLUDE_SYM)) {
return true;
}
@@ -7859,21 +7582,21 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
}
xsp = jj_scanpos;
- if (jj_3R_244()) {
+ if (jj_3R_334()) {
jj_scanpos = xsp;
- if (jj_3R_245()) {
+ if (jj_3R_335()) {
jj_scanpos = xsp;
- if (jj_3R_246()) {
+ if (jj_3R_336()) {
return true;
}
}
}
- if (jj_3R_247()) {
+ if (jj_3R_337()) {
return true;
}
while (true) {
xsp = jj_scanpos;
- if (jj_3R_247()) {
+ if (jj_3R_337()) {
jj_scanpos = xsp;
break;
}
@@ -7881,55 +7604,65 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_302() {
- if (jj_scan_token(IDENT)) {
+ private boolean jj_3R_253() {
+ if (jj_scan_token(ANY)) {
return true;
}
return false;
}
- private boolean jj_3R_249() {
+ private boolean jj_3R_178() {
+ if (jj_3R_199()) {
+ return true;
+ }
+ if (jj_scan_token(COLON)) {
+ return true;
+ }
Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_278()) {
- jj_scanpos = xsp;
- if (jj_3R_279()) {
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) {
jj_scanpos = xsp;
- if (jj_3R_280()) {
- return true;
- }
+ break;
}
}
- return false;
- }
-
- private boolean jj_3R_278() {
- if (jj_3R_282()) {
- return true;
+ xsp = jj_scanpos;
+ if (jj_3R_200()) {
+ jj_scanpos = xsp;
+ if (jj_3R_201()) {
+ return true;
+ }
}
return false;
}
- private boolean jj_3R_287() {
+ private boolean jj_3R_269() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_302()) {
+ if (jj_3R_284()) {
jj_scanpos = xsp;
- if (jj_3R_303()) {
+ if (jj_3R_285()) {
return true;
}
}
return false;
}
+ private boolean jj_3R_284() {
+ if (jj_scan_token(IDENT)) {
+ return true;
+ }
+ return false;
+ }
+
private boolean jj_3R_207() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_262()) {
+ if (jj_3R_252()) {
jj_scanpos = xsp;
- if (jj_3R_263()) {
+ if (jj_3R_253()) {
jj_scanpos = xsp;
- if (jj_3R_264()) {
+ if (jj_3R_254()) {
return true;
}
}
@@ -7937,47 +7670,29 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_262() {
+ private boolean jj_3R_252() {
Token xsp;
- if (jj_3R_287()) {
- return true;
- }
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_287()) {
- jj_scanpos = xsp;
- break;
- }
- }
- return false;
- }
-
- private boolean jj_3R_296() {
- if (jj_scan_token(COMMA)) {
+ if (jj_3R_269()) {
return true;
}
- Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_scan_token(1)) {
+ if (jj_3R_269()) {
jj_scanpos = xsp;
break;
}
}
- if (jj_3R_176()) {
- return true;
- }
return false;
}
- private boolean jj_3R_248() {
- if (jj_3R_276()) {
+ private boolean jj_3R_338() {
+ if (jj_3R_357()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_277()) {
+ if (jj_3R_358()) {
jj_scanpos = xsp;
break;
}
@@ -7985,36 +7700,21 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_328() {
- if (jj_3R_356()) {
+ private boolean jj_3_6() {
+ if (jj_3R_177()) {
return true;
}
return false;
}
- private boolean jj_3R_275() {
- if (jj_3R_176()) {
+ private boolean jj_3R_356() {
+ if (jj_3R_180()) {
return true;
}
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_295()) {
- jj_scanpos = xsp;
- break;
- }
- }
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_296()) {
- jj_scanpos = xsp;
- break;
- }
- }
return false;
}
- private boolean jj_3R_170() {
+ private boolean jj_3R_175() {
if (jj_scan_token(COMMA)) {
return true;
}
@@ -8029,104 +7729,66 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_301() {
- if (jj_scan_token(LBRACE)) {
- return true;
- }
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
- }
- xsp = jj_scanpos;
- if (jj_3R_328()) {
- jj_scanpos = xsp;
- }
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_329()) {
- jj_scanpos = xsp;
- break;
- }
- }
- if (jj_scan_token(RBRACE)) {
- return true;
- }
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
- }
- return false;
- }
-
- private boolean jj_3R_327() {
- if (jj_3R_355()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_353() {
+ private boolean jj_3R_333() {
if (jj_3R_210()) {
return true;
}
return false;
}
- private boolean jj_3R_358() {
+ private boolean jj_3R_345() {
if (jj_scan_token(IDENT)) {
return true;
}
return false;
}
- private boolean jj_3R_337() {
+ private boolean jj_3R_317() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_358()) {
+ if (jj_3R_345()) {
jj_scanpos = xsp;
- if (jj_3R_359()) {
+ if (jj_3R_346()) {
return true;
}
}
return false;
}
- private boolean jj_3R_256() {
- if (jj_3R_283()) {
+ private boolean jj_3R_331() {
+ if (jj_3R_209()) {
return true;
}
return false;
}
- private boolean jj_3R_351() {
- if (jj_3R_209()) {
+ private boolean jj_3R_328() {
+ if (jj_3R_210()) {
return true;
}
return false;
}
- private boolean jj_3R_348() {
- if (jj_3R_210()) {
+ private boolean jj_3R_326() {
+ if (jj_3R_209()) {
return true;
}
return false;
}
- private boolean jj_3R_346() {
- if (jj_3R_209()) {
+ private boolean jj_3_5() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_175()) {
+ jj_scanpos = xsp;
+ }
+ if (jj_3R_176()) {
return true;
}
return false;
}
- private boolean jj_3R_336() {
+ private boolean jj_3R_316() {
if (jj_3R_210()) {
return true;
}
@@ -8138,12 +7800,12 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return true;
}
Token xsp;
- if (jj_3R_337()) {
+ if (jj_3R_317()) {
return true;
}
while (true) {
xsp = jj_scanpos;
- if (jj_3R_337()) {
+ if (jj_3R_317()) {
jj_scanpos = xsp;
break;
}
@@ -8151,45 +7813,28 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3_8() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_170()) {
- jj_scanpos = xsp;
- }
- if (jj_3R_171()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_341() {
+ private boolean jj_3R_321() {
if (jj_3R_210()) {
return true;
}
return false;
}
- private boolean jj_3R_339() {
+ private boolean jj_3R_319() {
if (jj_3R_209()) {
return true;
}
return false;
}
- private boolean jj_3R_300() {
- if (jj_3R_252()) {
+ private boolean jj_3R_340() {
+ if (jj_3R_359()) {
return true;
}
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_327()) {
- jj_scanpos = xsp;
- }
return false;
}
- private boolean jj_3R_201() {
+ private boolean jj_3R_292() {
if (jj_scan_token(MEDIA_SYM)) {
return true;
}
@@ -8201,88 +7846,64 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
}
}
- if (jj_3R_248()) {
+ if (jj_3R_338()) {
return true;
}
if (jj_scan_token(LBRACE)) {
return true;
}
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
- }
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_249()) {
- jj_scanpos = xsp;
- break;
- }
- }
- if (jj_scan_token(RBRACE)) {
- return true;
- }
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
- }
return false;
}
- private boolean jj_3R_352() {
+ private boolean jj_3R_332() {
if (jj_3R_211()) {
return true;
}
return false;
}
- private boolean jj_3R_283() {
- if (jj_3R_273()) {
- return true;
- }
- if (jj_scan_token(COLON)) {
+ private boolean jj_3R_330() {
+ if (jj_3R_208()) {
return true;
}
+ return false;
+ }
+
+ private boolean jj_3R_290() {
Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
- }
xsp = jj_scanpos;
- if (jj_3R_300()) {
+ if (jj_3R_330()) {
jj_scanpos = xsp;
- if (jj_3R_301()) {
- return true;
+ if (jj_3R_331()) {
+ jj_scanpos = xsp;
+ if (jj_3R_332()) {
+ jj_scanpos = xsp;
+ if (jj_3R_333()) {
+ return true;
+ }
+ }
}
}
return false;
}
- private boolean jj_3R_350() {
+ private boolean jj_3R_325() {
if (jj_3R_208()) {
return true;
}
return false;
}
- private boolean jj_3R_308() {
+ private boolean jj_3R_289() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_350()) {
+ if (jj_3R_325()) {
jj_scanpos = xsp;
- if (jj_3R_351()) {
+ if (jj_3R_326()) {
jj_scanpos = xsp;
- if (jj_3R_352()) {
+ if (jj_3R_327()) {
jj_scanpos = xsp;
- if (jj_3R_353()) {
+ if (jj_3R_328()) {
return true;
}
}
@@ -8291,23 +7912,16 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_345() {
- if (jj_3R_208()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_307() {
+ private boolean jj_3R_294() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_345()) {
+ if (jj_3R_340()) {
jj_scanpos = xsp;
- if (jj_3R_346()) {
+ if (jj_3_6()) {
jj_scanpos = xsp;
- if (jj_3R_347()) {
+ if (jj_3R_341()) {
jj_scanpos = xsp;
- if (jj_3R_348()) {
+ if (jj_3R_342()) {
return true;
}
}
@@ -8316,44 +7930,37 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_333() {
+ private boolean jj_3R_313() {
if (jj_3R_210()) {
return true;
}
return false;
}
- private boolean jj_3R_255() {
- if (jj_3R_282()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_347() {
+ private boolean jj_3R_327() {
if (jj_3R_211()) {
return true;
}
return false;
}
- private boolean jj_3R_338() {
+ private boolean jj_3R_318() {
if (jj_3R_208()) {
return true;
}
return false;
}
- private boolean jj_3R_306() {
+ private boolean jj_3R_288() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_338()) {
+ if (jj_3R_318()) {
jj_scanpos = xsp;
- if (jj_3R_339()) {
+ if (jj_3R_319()) {
jj_scanpos = xsp;
- if (jj_3R_340()) {
+ if (jj_3R_320()) {
jj_scanpos = xsp;
- if (jj_3R_341()) {
+ if (jj_3R_321()) {
return true;
}
}
@@ -8362,49 +7969,49 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_335() {
+ private boolean jj_3R_315() {
if (jj_3R_211()) {
return true;
}
return false;
}
- private boolean jj_3R_340() {
+ private boolean jj_3R_320() {
if (jj_3R_211()) {
return true;
}
return false;
}
- private boolean jj_3R_285() {
+ private boolean jj_3R_361() {
if (jj_scan_token(INTERPOLATION)) {
return true;
}
return false;
}
- private boolean jj_3R_334() {
+ private boolean jj_3R_314() {
if (jj_3R_209()) {
return true;
}
return false;
}
- private boolean jj_3R_331() {
+ private boolean jj_3R_311() {
if (jj_3R_209()) {
return true;
}
return false;
}
- private boolean jj_3R_305() {
+ private boolean jj_3R_287() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_334()) {
+ if (jj_3R_314()) {
jj_scanpos = xsp;
- if (jj_3R_335()) {
+ if (jj_3R_315()) {
jj_scanpos = xsp;
- if (jj_3R_336()) {
+ if (jj_3R_316()) {
return true;
}
}
@@ -8412,43 +8019,58 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3_2() {
- if (jj_3R_166()) {
+ private boolean jj_3R_272() {
+ if (jj_3R_182()) {
return true;
}
return false;
}
- private boolean jj_3R_191() {
- if (jj_3R_211()) {
+ private boolean jj_3R_256() {
+ if (jj_scan_token(FUNCTION)) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_308()) {
+ if (jj_scan_token(1)) {
jj_scanpos = xsp;
break;
}
}
+ xsp = jj_scanpos;
+ if (jj_3R_272()) {
+ jj_scanpos = xsp;
+ }
+ if (jj_scan_token(RPARAN)) {
+ return true;
+ }
return false;
}
- private boolean jj_3R_182() {
- if (jj_3R_205()) {
+ private boolean jj_3R_193() {
+ if (jj_3R_211()) {
return true;
}
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_290()) {
+ jj_scanpos = xsp;
+ break;
+ }
+ }
return false;
}
- private boolean jj_3R_190() {
+ private boolean jj_3R_192() {
if (jj_3R_210()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_307()) {
+ if (jj_3R_289()) {
jj_scanpos = xsp;
break;
}
@@ -8456,21 +8078,21 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_332() {
+ private boolean jj_3R_312() {
if (jj_3R_211()) {
return true;
}
return false;
}
- private boolean jj_3R_189() {
+ private boolean jj_3R_191() {
if (jj_3R_209()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_306()) {
+ if (jj_3R_288()) {
jj_scanpos = xsp;
break;
}
@@ -8478,46 +8100,21 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_258() {
- if (jj_3R_286()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_330() {
+ private boolean jj_3R_310() {
if (jj_3R_208()) {
return true;
}
return false;
}
- private boolean jj_3R_304() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_330()) {
- jj_scanpos = xsp;
- if (jj_3R_331()) {
- jj_scanpos = xsp;
- if (jj_3R_332()) {
- jj_scanpos = xsp;
- if (jj_3R_333()) {
- return true;
- }
- }
- }
- }
- return false;
- }
-
- private boolean jj_3R_188() {
+ private boolean jj_3R_190() {
if (jj_3R_208()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_305()) {
+ if (jj_3R_287()) {
jj_scanpos = xsp;
break;
}
@@ -8528,43 +8125,43 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
private boolean jj_3R_286() {
Token xsp;
xsp = jj_scanpos;
- if (jj_scan_token(53)) {
+ if (jj_3R_310()) {
jj_scanpos = xsp;
- if (jj_scan_token(50)) {
+ if (jj_3R_311()) {
jj_scanpos = xsp;
- if (jj_scan_token(77)) {
- return true;
+ if (jj_3R_312()) {
+ jj_scanpos = xsp;
+ if (jj_3R_313()) {
+ return true;
+ }
}
}
}
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
- }
- if (jj_scan_token(LBRACE)) {
+ return false;
+ }
+
+ private boolean jj_3R_236() {
+ if (jj_3R_260()) {
return true;
}
return false;
}
- private boolean jj_3_12() {
- if (jj_3R_174()) {
+ private boolean jj_3R_235() {
+ if (jj_3R_259()) {
return true;
}
return false;
}
- private boolean jj_3R_187() {
+ private boolean jj_3R_189() {
if (jj_3R_207()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_304()) {
+ if (jj_3R_286()) {
jj_scanpos = xsp;
break;
}
@@ -8572,18 +8169,25 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_168() {
+ private boolean jj_3R_234() {
+ if (jj_3R_258()) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_173() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_187()) {
+ if (jj_3R_189()) {
jj_scanpos = xsp;
- if (jj_3R_188()) {
+ if (jj_3R_190()) {
jj_scanpos = xsp;
- if (jj_3R_189()) {
+ if (jj_3R_191()) {
jj_scanpos = xsp;
- if (jj_3R_190()) {
+ if (jj_3R_192()) {
jj_scanpos = xsp;
- if (jj_3R_191()) {
+ if (jj_3R_193()) {
return true;
}
}
@@ -8593,55 +8197,33 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_204() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3_12()) {
- jj_scanpos = xsp;
- if (jj_3R_255()) {
- jj_scanpos = xsp;
- if (jj_3R_256()) {
- return true;
- }
- }
- }
- return false;
- }
-
- private boolean jj_3_7() {
- if (jj_3R_166()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_290() {
- if (jj_3R_252()) {
+ private boolean jj_3R_360() {
+ if (jj_scan_token(IDENT)) {
return true;
}
return false;
}
- private boolean jj_3R_257() {
+ private boolean jj_3R_343() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_284()) {
+ if (jj_3R_360()) {
jj_scanpos = xsp;
- if (jj_3R_285()) {
+ if (jj_3R_361()) {
return true;
}
}
return false;
}
- private boolean jj_3R_284() {
- if (jj_scan_token(IDENT)) {
+ private boolean jj_3R_339() {
+ if (jj_scan_token(SEMICOLON)) {
return true;
}
return false;
}
- private boolean jj_3R_205() {
+ private boolean jj_3R_295() {
if (jj_scan_token(KEY_FRAME_SYM)) {
return true;
}
@@ -8653,12 +8235,12 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
}
}
- if (jj_3R_257()) {
+ if (jj_3R_343()) {
return true;
}
while (true) {
xsp = jj_scanpos;
- if (jj_3R_257()) {
+ if (jj_3R_343()) {
jj_scanpos = xsp;
break;
}
@@ -8673,6 +8255,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
if (jj_scan_token(LBRACE)) {
return true;
}
+ return false;
+ }
+
+ private boolean jj_3R_293() {
+ if (jj_scan_token(EXTEND_SYM)) {
+ return true;
+ }
+ Token xsp;
while (true) {
xsp = jj_scanpos;
if (jj_scan_token(1)) {
@@ -8680,19 +8270,15 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
}
}
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_258()) {
- jj_scanpos = xsp;
- break;
- }
+ if (jj_3R_197()) {
+ return true;
}
- if (jj_scan_token(RBRACE)) {
+ if (jj_3R_339()) {
return true;
}
while (true) {
xsp = jj_scanpos;
- if (jj_scan_token(1)) {
+ if (jj_3R_339()) {
jj_scanpos = xsp;
break;
}
@@ -8700,103 +8286,146 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_266() {
- if (jj_scan_token(FUNCTION)) {
+ private boolean jj_3R_257() {
+ if (jj_scan_token(DOT)) {
return true;
}
+ return false;
+ }
+
+ private boolean jj_3R_233() {
Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
- }
xsp = jj_scanpos;
- if (jj_3R_290()) {
+ if (jj_3R_257()) {
jj_scanpos = xsp;
}
- if (jj_scan_token(RPARAN)) {
+ if (jj_scan_token(IDENT)) {
return true;
}
return false;
}
- private boolean jj_3R_240() {
- if (jj_3R_272()) {
+ private boolean jj_3_1() {
+ if (jj_3R_171()) {
return true;
}
return false;
}
- private boolean jj_3R_236() {
- if (jj_3R_270()) {
+ private boolean jj_3_2() {
+ if (jj_3R_172()) {
+ return true;
+ }
+ if (jj_3R_173()) {
return true;
}
return false;
}
- private boolean jj_3R_181() {
- if (jj_3R_204()) {
+ private boolean jj_3R_238() {
+ if (jj_scan_token(COMMA)) {
+ return true;
+ }
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) {
+ jj_scanpos = xsp;
+ break;
+ }
+ }
+ if (jj_3R_237()) {
return true;
}
return false;
}
- private boolean jj_3R_235() {
- if (jj_3R_269()) {
+ private boolean jj_3R_241() {
+ if (jj_3R_263()) {
return true;
}
return false;
}
- private boolean jj_3R_234() {
- if (jj_3R_268()) {
+ private boolean jj_3R_232() {
+ if (jj_scan_token(STRING)) {
return true;
}
return false;
}
- private boolean jj_3_4() {
- if (jj_3R_167()) {
+ private boolean jj_3R_231() {
+ if (jj_3R_256()) {
return true;
}
- if (jj_3R_168()) {
- return true;
+ return false;
+ }
+
+ private boolean jj_3R_196() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_232()) {
+ jj_scanpos = xsp;
+ if (jj_3R_233()) {
+ jj_scanpos = xsp;
+ if (jj_3R_234()) {
+ jj_scanpos = xsp;
+ if (jj_3R_235()) {
+ jj_scanpos = xsp;
+ if (jj_3R_236()) {
+ return true;
+ }
+ }
+ }
+ }
}
return false;
}
- private boolean jj_3R_238() {
- if (jj_scan_token(COMMA)) {
+ private boolean jj_3R_237() {
+ if (jj_3R_173()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
+ if (jj_3_2()) {
+ jj_scanpos = xsp;
+ break;
+ }
+ }
+ while (true) {
+ xsp = jj_scanpos;
if (jj_scan_token(1)) {
jj_scanpos = xsp;
break;
}
}
- if (jj_3R_237()) {
+ return false;
+ }
+
+ private boolean jj_3R_230() {
+ if (jj_scan_token(DIMEN)) {
return true;
}
return false;
}
- private boolean jj_3R_237() {
- if (jj_3R_168()) {
+ private boolean jj_3R_298() {
+ if (jj_scan_token(EACH_SYM)) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3_4()) {
+ if (jj_scan_token(1)) {
jj_scanpos = xsp;
break;
}
}
+ if (jj_scan_token(VARIABLE)) {
+ return true;
+ }
while (true) {
xsp = jj_scanpos;
if (jj_scan_token(1)) {
@@ -8804,31 +8433,41 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
}
}
+ if (jj_scan_token(EACH_IN)) {
+ return true;
+ }
return false;
}
- private boolean jj_3R_180() {
- if (jj_3R_203()) {
+ private boolean jj_3R_229() {
+ if (jj_scan_token(KHZ)) {
return true;
}
return false;
}
- private boolean jj_3R_239() {
- if (jj_3R_271()) {
+ private boolean jj_3R_228() {
+ if (jj_scan_token(HZ)) {
return true;
}
return false;
}
- private boolean jj_3R_250() {
- if (jj_scan_token(SEMICOLON)) {
+ private boolean jj_3R_240() {
+ if (jj_3R_262()) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_197() {
+ if (jj_3R_237()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_scan_token(1)) {
+ if (jj_3R_238()) {
jj_scanpos = xsp;
break;
}
@@ -8836,8 +8475,15 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_202() {
- if (jj_scan_token(EXTEND_SYM)) {
+ private boolean jj_3R_227() {
+ if (jj_scan_token(MS)) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_367() {
+ if (jj_scan_token(WARN_SYM)) {
return true;
}
Token xsp;
@@ -8848,37 +8494,56 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
}
}
- if (jj_3R_195()) {
+ return false;
+ }
+
+ private boolean jj_3R_226() {
+ if (jj_scan_token(SECOND)) {
return true;
}
- if (jj_3R_250()) {
+ return false;
+ }
+
+ private boolean jj_3R_364() {
+ if (jj_3R_367()) {
return true;
}
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_250()) {
- jj_scanpos = xsp;
- break;
- }
+ return false;
+ }
+
+ private boolean jj_3R_225() {
+ if (jj_scan_token(GRAD)) {
+ return true;
}
return false;
}
- private boolean jj_3R_310() {
- if (jj_scan_token(EACH_SYM)) {
+ private boolean jj_3R_224() {
+ if (jj_scan_token(RAD)) {
return true;
}
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
+ return false;
+ }
+
+ private boolean jj_3R_223() {
+ if (jj_scan_token(DEG)) {
+ return true;
}
- if (jj_scan_token(VARIABLE)) {
+ return false;
+ }
+
+ private boolean jj_3_4() {
+ if (jj_3R_174()) {
return true;
}
+ return false;
+ }
+
+ private boolean jj_3R_366() {
+ if (jj_scan_token(DEBUG_SYM)) {
+ return true;
+ }
+ Token xsp;
while (true) {
xsp = jj_scanpos;
if (jj_scan_token(1)) {
@@ -8886,87 +8551,151 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
}
}
- if (jj_scan_token(EACH_IN)) {
+ return false;
+ }
+
+ private boolean jj_3R_222() {
+ if (jj_scan_token(EXS)) {
return true;
}
return false;
}
- private boolean jj_3R_195() {
- if (jj_3R_237()) {
+ private boolean jj_3R_279() {
+ if (jj_3R_296()) {
return true;
}
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_238()) {
- jj_scanpos = xsp;
- break;
- }
- }
return false;
}
- private boolean jj_3R_179() {
- if (jj_3R_202()) {
+ private boolean jj_3R_276() {
+ if (jj_3R_294()) {
return true;
}
return false;
}
- private boolean jj_3R_267() {
- if (jj_scan_token(DOT)) {
+ private boolean jj_3R_221() {
+ if (jj_scan_token(EMS)) {
return true;
}
return false;
}
- private boolean jj_3R_233() {
+ private boolean jj_3R_198() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_267()) {
+ if (jj_3R_239()) {
jj_scanpos = xsp;
+ if (jj_3R_240()) {
+ jj_scanpos = xsp;
+ if (jj_3R_241()) {
+ return true;
+ }
+ }
}
- if (jj_scan_token(IDENT)) {
+ return false;
+ }
+
+ private boolean jj_3R_239() {
+ if (jj_3R_261()) {
return true;
}
return false;
}
- private boolean jj_3R_178() {
- if (jj_3R_201()) {
+ private boolean jj_3R_220() {
+ if (jj_scan_token(PX)) {
return true;
}
return false;
}
- private boolean jj_3R_232() {
- if (jj_scan_token(STRING)) {
+ private boolean jj_3R_365() {
+ if (jj_3R_174()) {
return true;
}
return false;
}
- private boolean jj_3R_231() {
- if (jj_3R_266()) {
+ private boolean jj_3R_363() {
+ if (jj_3R_366()) {
return true;
}
return false;
}
- private boolean jj_3R_194() {
+ private boolean jj_3R_359() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_232()) {
+ if (jj_3R_363()) {
jj_scanpos = xsp;
- if (jj_3R_233()) {
+ if (jj_3R_364()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private boolean jj_3R_219() {
+ if (jj_scan_token(IN)) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_362() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_365()) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(76)) {
jj_scanpos = xsp;
- if (jj_3R_234()) {
+ if (jj_scan_token(72)) {
jj_scanpos = xsp;
- if (jj_3R_235()) {
+ if (jj_scan_token(73)) {
jj_scanpos = xsp;
- if (jj_3R_236()) {
- return true;
+ if (jj_scan_token(33)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(34)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(20)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(21)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(27)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(30)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(35)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(19)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(24)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(26)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(36)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(37)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(1)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(38)) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
}
}
}
@@ -8975,37 +8704,92 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_196() {
+ private boolean jj_3R_218() {
+ if (jj_scan_token(PC)) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_265() {
+ if (jj_scan_token(INTERPOLATION)) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_217() {
+ if (jj_scan_token(MM)) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_177() {
+ if (jj_3R_197()) {
+ return true;
+ }
+ if (jj_scan_token(LBRACE)) {
+ return true;
+ }
Token xsp;
- xsp = jj_scanpos;
- if (jj_3_3()) {
- jj_scanpos = xsp;
- if (jj_3R_239()) {
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) {
jj_scanpos = xsp;
- if (jj_3R_240()) {
- return true;
- }
+ break;
+ }
+ }
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_198()) {
+ jj_scanpos = xsp;
+ break;
+ }
+ }
+ if (jj_scan_token(RBRACE)) {
+ return true;
+ }
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) {
+ jj_scanpos = xsp;
+ break;
}
}
return false;
}
- private boolean jj_3_3() {
- if (jj_3R_166()) {
+ private boolean jj_3R_216() {
+ if (jj_scan_token(CM)) {
return true;
}
return false;
}
- private boolean jj_3_6() {
- if (jj_3R_169()) {
+ private boolean jj_3R_215() {
+ if (jj_scan_token(PT)) {
return true;
}
return false;
}
- private boolean jj_3_1() {
- if (jj_3R_165()) {
+ private boolean jj_3R_275() {
+ if (jj_3R_293()) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_214() {
+ if (jj_scan_token(PERCENTAGE)) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_204() {
+ if (jj_3R_248()) {
return true;
}
return false;
@@ -9021,7 +8805,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
private Token jj_scanpos, jj_lastpos;
private int jj_la;
private int jj_gen;
- final private int[] jj_la1 = new int[241];
+ final private int[] jj_la1 = new int[253];
static private int[] jj_la1_0;
static private int[] jj_la1_1;
static private int[] jj_la1_2;
@@ -9035,55 +8819,57 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
private static void jj_la1_init_0() {
jj_la1_0 = new int[] { 0x0, 0xc02, 0xc02, 0x0, 0xc00, 0x2, 0x2, 0x2,
- 0xd0000000, 0xc00, 0x2, 0xc00, 0x2, 0x0, 0x2, 0x0, 0x2, 0x2,
- 0x0, 0x0, 0x2, 0x2, 0x0, 0x2, 0x0, 0x2, 0x2, 0xd0000000, 0x0,
- 0x2, 0x2, 0x2, 0xd3f45400, 0xd3f45400, 0x2, 0x400000, 0x2, 0x2,
- 0x2, 0x2, 0x0, 0x0, 0x2, 0x0, 0x800000, 0x2, 0x0, 0x2, 0x2,
- 0x2, 0x2, 0x0, 0x800000, 0x2, 0x0, 0x2, 0x3f45400, 0x2, 0x2,
- 0x2, 0x3100000, 0x2, 0x3100000, 0x3100002, 0x2, 0x480002,
- 0x480002, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0xd0000000, 0x0,
- 0x2, 0x400000, 0x2, 0x2, 0x10000000, 0x10000000, 0x10000000,
+ 0xd0000000, 0x0, 0xc00, 0x2, 0xc00, 0x2, 0x0, 0x2, 0x0, 0x2,
+ 0x2, 0x0, 0x0, 0x2, 0x2, 0x0, 0x2, 0x0, 0x2, 0x2, 0xd0000000,
+ 0xd0000000, 0x2, 0x2, 0x2, 0xd3f45400, 0xd3f45400, 0x2,
+ 0x400000, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x2, 0x0, 0x800000,
+ 0x2, 0x0, 0x2, 0x2, 0x2, 0x2, 0x0, 0x800000, 0x2, 0x0, 0x2,
+ 0x3f45400, 0x2, 0x2, 0x2, 0x3100000, 0x2, 0x3100000, 0x3100002,
+ 0x2, 0x480002, 0x480002, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2,
+ 0xd0000000, 0xd0000000, 0x2, 0x400000, 0x2, 0x2, 0x10000000,
0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000,
- 0x10000000, 0x10000000, 0xd0000000, 0x0, 0x0, 0x0, 0x0,
- 0xc0000000, 0x2, 0x2, 0xfc000, 0x2, 0x0, 0x2, 0xfc000, 0x0,
- 0x2, 0x0, 0x2, 0x0, 0x2, 0x800000, 0x0, 0xd0000000, 0x4d380002,
- 0x2, 0xd0000000, 0x2, 0x0, 0x2, 0x4d380002, 0x0, 0x2,
- 0xd0000000, 0x2, 0x4d380002, 0x2, 0x2, 0x2, 0x0, 0x2,
- 0xd0000000, 0x2, 0x2, 0x400000, 0x2, 0x2, 0x2, 0x2, 0x0, 0x2,
- 0xd0000000, 0x0, 0x2, 0x400000, 0x2, 0x2, 0x2, 0x400000, 0x0,
- 0x0, 0x300000, 0x2, 0x0, 0x400000, 0x2, 0x300000, 0x2, 0x0,
- 0x2, 0x0, 0x2, 0x800000, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x2,
- 0x2, 0x2, 0x400000, 0x2, 0x2, 0x2, 0x0, 0x2, 0x2, 0x2,
- 0x400000, 0x2, 0x2, 0x0, 0x2, 0x0, 0x2, 0x2, 0x2, 0x400000,
- 0x0, 0x2, 0x2, 0x0, 0x2, 0x2, 0x2, 0x800000, 0x2, 0x2, 0x0,
- 0x800000, 0x2, 0x0, 0x2, 0x0, 0x2, 0x0, 0x2, 0x0, 0x800000,
- 0x2, 0x0, 0x2, 0x301000, 0x2, 0x0, 0x2, 0x2, 0x2, 0x2,
- 0x8400000, 0x8400000, 0x300000, 0x300000, 0x300000, 0x0, 0x0,
- 0x0, 0x300000, 0x2, 0x2, 0x300000, 0x2, 0xd0000000, 0x2, 0x2,
- 0x2, 0x0, 0x800000, 0x2, 0x0, 0x2, };
+ 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0xd0000000,
+ 0x0, 0x0, 0x0, 0x0, 0xc0000000, 0x2, 0x2, 0xfc000, 0x2, 0x0,
+ 0x2, 0xfc000, 0x0, 0x2, 0x0, 0x2, 0x0, 0x2, 0x800000, 0x0,
+ 0xd0000000, 0x0, 0x4d380002, 0x2, 0xd0000000, 0x2, 0x0, 0x2,
+ 0x4d380002, 0x0, 0x2, 0xd0000000, 0x2, 0x4d380002, 0x2, 0x2,
+ 0x2, 0x0, 0x2, 0xd0000000, 0x2, 0x2, 0x400000, 0x2, 0x2, 0x2,
+ 0x2, 0x0, 0x2, 0xd0000000, 0xd0000000, 0x2, 0x400000, 0x2, 0x2,
+ 0x2, 0x400000, 0x0, 0x0, 0x300000, 0x2, 0x0, 0x400000, 0x2,
+ 0x300000, 0x2, 0x0, 0x2, 0x0, 0x2, 0x800000, 0x2, 0x2, 0x0,
+ 0x2, 0x0, 0x2, 0x2, 0x2, 0x400000, 0x2, 0x2, 0x2, 0x2, 0x2,
+ 0x0, 0x2, 0x2, 0x2, 0x400000, 0x2, 0x2, 0x2, 0x0, 0x2, 0x2,
+ 0x2, 0x400000, 0x2, 0x2, 0x0, 0x2, 0x0, 0x2, 0x2, 0x2,
+ 0x400000, 0x0, 0x2, 0x2, 0x0, 0x2, 0x2, 0x2, 0x800000, 0x2,
+ 0x2, 0x0, 0x800000, 0x2, 0x0, 0x2, 0x0, 0xd0000000, 0x2, 0x0,
+ 0x2, 0x0, 0x800000, 0x2, 0x0, 0x2, 0x301000, 0x2, 0x0, 0x2,
+ 0x2, 0x2, 0x2, 0x8400000, 0x8400000, 0x300000, 0x300000,
+ 0x300000, 0x0, 0x0, 0x0, 0x300000, 0x2, 0x2, 0x300000, 0x2,
+ 0xd0000000, 0x2, 0x2, 0x2, 0x0, 0x800000, 0x2, 0x0, 0x2, };
}
private static void jj_la1_init_1() {
jj_la1_1 = new int[] { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xacc00181, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100,
- 0x100, 0x0, 0x0, 0x240000, 0x0, 0x240000, 0x0, 0x0, 0xac800181,
- 0xa0000000, 0x0, 0x0, 0x0, 0xc000381, 0xc000381, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0,
- 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, 0x200, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x185, 0x185, 0x0, 0x100, 0x100,
- 0x0, 0x0, 0x0, 0x0, 0xac800181, 0xa0000000, 0x0, 0x0, 0x0, 0x0,
- 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
- 0x181, 0x100, 0x100, 0x100, 0x100, 0x100, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa0000000,
- 0xc800181, 0x7e, 0x0, 0xc800181, 0x0, 0x0, 0x0, 0x7e, 0x0, 0x0,
- 0xc800181, 0x0, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc800181, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100, 0x0, 0xac800181,
- 0xa0000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x80, 0x81,
- 0x0, 0x80, 0x0, 0x0, 0x81, 0x0, 0x80, 0x0, 0x100, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0,
- 0x0, 0x0, 0x0, 0xc000000, 0x0, 0x0, 0xc0000, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, 0xc000100, 0x0,
+ 0xacc00181, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x100, 0x100, 0x0, 0x0, 0x240000, 0x0, 0x240000, 0x0, 0x0,
+ 0xac800181, 0xac800181, 0x0, 0x0, 0x0, 0xc000381, 0xc000381,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x100, 0x0, 0x0,
+ 0x100, 0x0, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, 0x200,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x185, 0x185, 0x0,
+ 0x100, 0x100, 0x0, 0x0, 0x0, 0x0, 0xac800181, 0xac800181, 0x0,
+ 0x0, 0x0, 0x0, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x181, 0x100, 0x100, 0x100, 0x100, 0x100, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xa0000000, 0xc800181, 0x0, 0x7e, 0x0, 0xc800181, 0x0, 0x0,
+ 0x0, 0x7e, 0x0, 0x0, 0xc800181, 0x0, 0x7e, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xc800181, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100, 0x0,
+ 0xac800181, 0xac800181, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80,
+ 0x80, 0x81, 0x0, 0x80, 0x0, 0x0, 0x81, 0x0, 0x80, 0x0, 0x100,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0,
+ 0x0, 0x0, 0xc000000, 0x0, 0x0, 0xc0000, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, 0xc000000, 0x181, 0x0,
0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x0,
0x0, 0x1, 0x0, 0xc000181, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0,
@@ -9092,58 +8878,61 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
private static void jj_la1_init_2() {
jj_la1_2 = new int[] { 0x0, 0x0, 0x0, 0x80000000, 0x0, 0x0, 0x0, 0x0,
- 0x40001100, 0x0, 0x0, 0x0, 0x0, 0x880, 0x0, 0x100, 0x0, 0x0,
- 0x100, 0x100, 0x0, 0x0, 0x2000, 0x0, 0x2000, 0x0, 0x0,
- 0x40001112, 0x10, 0x0, 0x0, 0x0, 0xc0002b80, 0xc0002b80, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, 0x0,
+ 0x40000100, 0x1000, 0x0, 0x0, 0x0, 0x0, 0x880, 0x0, 0x100, 0x0,
+ 0x0, 0x100, 0x100, 0x0, 0x0, 0x2000, 0x0, 0x2000, 0x0, 0x0,
+ 0x40001112, 0x40001112, 0x0, 0x0, 0x0, 0xc0002b80, 0xc0002b80,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, 0x0,
0x100, 0x0, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0,
0x80002a80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x380,
- 0x380, 0x0, 0x100, 0x100, 0x0, 0x0, 0x0, 0x0, 0x40001112, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x40000000, 0x40000000, 0x0, 0x0,
- 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000,
- 0x40000000, 0x40000100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x0,
- 0x0, 0x0, 0x0, 0x180, 0x0, 0x0, 0x0, 0x0, 0x100, 0x0, 0x40,
- 0x0, 0x0, 0x0, 0x40001102, 0x1300, 0x0, 0x40001102, 0x0, 0x1,
- 0x0, 0x1300, 0x20, 0x0, 0x40001102, 0x0, 0x1300, 0x0, 0x0, 0x0,
- 0x1100, 0x0, 0x40001102, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x100, 0x0, 0x40001102, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1000, 0x1000, 0x7ffffb80, 0x0, 0x0, 0x0, 0x0, 0x7ffffb80,
- 0x0, 0x0, 0x0, 0x1100, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x380, 0x0, 0x100, 0x100, 0x0, 0x0, 0x0, 0x0, 0x40001112,
+ 0x40001112, 0x0, 0x0, 0x0, 0x0, 0x40000000, 0x40000000, 0x0,
+ 0x0, 0x40000000, 0x40000000, 0x40000000, 0x40000000,
+ 0x40000000, 0x40000000, 0x40000100, 0x100, 0x100, 0x100, 0x100,
+ 0x100, 0x0, 0x0, 0x0, 0x0, 0x180, 0x0, 0x0, 0x0, 0x0, 0x100,
+ 0x0, 0x40, 0x0, 0x0, 0x0, 0x40000102, 0x1000, 0x1300, 0x0,
+ 0x40001102, 0x0, 0x1, 0x0, 0x1300, 0x20, 0x0, 0x40001102, 0x0,
+ 0x1300, 0x0, 0x0, 0x0, 0x1100, 0x0, 0x40001102, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x100, 0x0, 0x40001102, 0x40001102, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000, 0x1000, 0x7ffffb80, 0x0, 0x0,
+ 0x0, 0x0, 0x7ffffb80, 0x0, 0x0, 0x0, 0x1100, 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, 0x1000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0,
- 0x100, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, 0x7ffffb80,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7ffffb80, 0x0,
- 0x3fffe200, 0x0, 0x40000980, 0x7fffeb80, 0x0, 0x0, 0x7ffffb80,
- 0x0, 0xc0000100, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, };
+ 0x0, 0x0, 0x0, 0x0, 0x1000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0,
+ 0x100, 0x0, 0x0, 0x40000100, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0,
+ 0x100, 0x0, 0x7ffffb80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x7ffffb80, 0x0, 0x3fffe200, 0x0, 0x40000980, 0x7fffeb80,
+ 0x0, 0x0, 0x7ffffb80, 0x0, 0xc0000100, 0x0, 0x0, 0x0, 0x100,
+ 0x0, 0x0, 0x100, 0x0, };
}
private static void jj_la1_init_3() {
jj_la1_3 = new int[] { 0x2, 0x20, 0x20, 0x0, 0x20, 0x0, 0x0, 0x0, 0x1d,
- 0x20, 0x0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80011, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x20, 0x0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x11, 0x11, 0x0, 0x0, 0x0,
0x31006f, 0x31006f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x31006f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x100000, 0x100000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80011,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x100000, 0x100000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x11,
+ 0x11, 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, 0x100000, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x11, 0x80000, 0x0, 0x80011, 0x0, 0x0, 0x0, 0x80000, 0x0,
- 0x0, 0x80011, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80011, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100000, 0x0, 0x8001d, 0xc, 0x0,
+ 0x0, 0x11, 0x0, 0x80000, 0x0, 0x11, 0x0, 0x0, 0x0, 0x80000,
+ 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x11, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100000, 0x0, 0x1d, 0x1d, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x110000, 0x0, 0x0, 0x0,
0x0, 0x110000, 0x0, 0x0, 0x0, 0x100000, 0x0, 0x0, 0x0, 0x0,
+ 0xe0000, 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, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x110000, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x110000, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x110000, 0x0, 0x100000, 0x0, 0x10000, 0x110000, 0x0, 0x0,
0x110000, 0x0, 0xd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, };
}
- final private JJCalls[] jj_2_rtns = new JJCalls[13];
+ final private JJCalls[] jj_2_rtns = new JJCalls[8];
private boolean jj_rescan = false;
private int jj_gc = 0;
@@ -9153,7 +8942,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 241; i++) {
+ for (int i = 0; i < 253; i++) {
jj_la1[i] = -1;
}
for (int i = 0; i < jj_2_rtns.length; i++) {
@@ -9167,7 +8956,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 241; i++) {
+ for (int i = 0; i < 253; i++) {
jj_la1[i] = -1;
}
for (int i = 0; i < jj_2_rtns.length; i++) {
@@ -9181,7 +8970,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 241; i++) {
+ for (int i = 0; i < 253; i++) {
jj_la1[i] = -1;
}
for (int i = 0; i < jj_2_rtns.length; i++) {
@@ -9195,7 +8984,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 241; i++) {
+ for (int i = 0; i < 253; i++) {
jj_la1[i] = -1;
}
for (int i = 0; i < jj_2_rtns.length; i++) {
@@ -9346,7 +9135,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
la1tokens[jj_kind] = true;
jj_kind = -1;
}
- for (int i = 0; i < 241; i++) {
+ for (int i = 0; i < 253; i++) {
if (jj_la1[i] == jj_gen) {
for (int j = 0; j < 32; j++) {
if ((jj_la1_0[i] & (1 << j)) != 0) {
@@ -9391,7 +9180,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
private void jj_rescan_token() {
jj_rescan = true;
- for (int i = 0; i < 13; i++) {
+ for (int i = 0; i < 8; i++) {
try {
JJCalls p = jj_2_rtns[i];
do {
@@ -9423,21 +9212,6 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
case 7:
jj_3_8();
break;
- case 8:
- jj_3_9();
- break;
- case 9:
- jj_3_10();
- break;
- case 10:
- jj_3_11();
- break;
- case 11:
- jj_3_12();
- break;
- case 12:
- jj_3_13();
- break;
}
}
p = p.next;
diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj b/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj
index 1d689dec2c..7ade6518b1 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj
+++ b/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj
@@ -770,7 +770,8 @@ void afterImportDeclaration() :
}
{
(
- ( LOOKAHEAD(5)listModifyDirective() | variable() | debuggingDirective() | mixinDirective() | controlDirective() | includeDirective() | styleRule() | media() | page() | fontFace() | keyframes()
+ ( debuggingDirective() | mixinDirective() | controlDirective() | includeDirective() | styleRule() | media()
+ | page() | fontFace() | keyframes() | LOOKAHEAD(variable()) variable() | listModifyDirective()
| { l = getLocator(); } ret=skipStatement()
{
if ((ret == null) || (ret.length() == 0)) {
@@ -872,7 +873,7 @@ void keyframeSelector():
start = true;
documentHandler.startKeyframeSelector(n.image);
}
- ( LOOKAHEAD(5)ifContentStatement() | controlDirective() | microsoftExtension() )*
+ (ifContentStatement() | controlDirective() | microsoftExtension() )*
<RBRACE> (<S>)*
}
catch (ThrowedParseException e) {
@@ -1157,7 +1158,7 @@ void styleRule() :
start = true;
documentHandler.startSelector(l);
}
- ( LOOKAHEAD(5)ifContentStatement() | controlDirective() | microsoftExtension() )*
+ ( ifContentStatement() | controlDirective() | microsoftExtension() )*
<RBRACE> (<S>)*
} catch (ThrowedParseException e) {
if (errorHandler != null) {
@@ -1495,7 +1496,8 @@ void controlDirective() :
void ifContentStatement() :
{}
{
- LOOKAHEAD(5)listModifyDirective() | includeDirective() | media() | extendDirective() | variable() | styleRuleOrDeclarationOrNestedProperties() | keyframes()
+ includeDirective() | media() | extendDirective() | styleRuleOrDeclarationOrNestedProperties()
+ | keyframes() | LOOKAHEAD(variable()) variable() | listModifyDirective()
}
void ifDirective() :
@@ -1541,7 +1543,7 @@ String booleanExpressionToken() :
}
{
(
- LOOKAHEAD(2)
+ LOOKAHEAD(containsDirective())
s = containsDirective()
|n = < VARIABLE >
|n = < IDENT >
@@ -1614,7 +1616,7 @@ void mixinDirective() :
|(name = functionName()
args = arglist()) <RPARAN> (<S>)*) <LBRACE> (<S>)*
{documentHandler.startMixinDirective(name, args);}
- ( LOOKAHEAD(5)ifContentStatement() | controlDirective() | fontFace() | page())*
+ ( ifContentStatement() | controlDirective() | fontFace() | page())*
<RBRACE>(<S>)*
{documentHandler.endMixinDirective(name, args);}
}
@@ -1711,9 +1713,41 @@ String interpolation() :
void listModifyDirective() :
{
+ String list = null;
+ String remove = null;
+ String separator = null;
+ String variable = null;
+ Token n = null;
+ Token type = null;
}
{
-(LOOKAHEAD(5)removeDirective()|LOOKAHEAD(5)appendDirective()|LOOKAHEAD(5)containsDirective())(< S >)*< SEMICOLON >(<S>)*
+ //refactor, remove those 3 LOOKAHEAD(5).
+ n = < VARIABLE >{ variable = n.image; }(< S >)* ":" (< S >)*
+ (type = < APPEND> | type = <REMOVE> | type=<CONTAINS> )(< S >)*
+ (list = listModifyDirectiveArgs(0))
+ (< RPARAN >)? < COMMA >(< S >)*
+ (remove = listModifyDirectiveArgs(1))
+ ( < COMMA >(< S >)* n = < IDENT >{ separator = n.image; } (< S >)*)?
+ < RPARAN >
+ {
+ switch (type.kind) {
+ case APPEND:
+ documentHandler.appendDirective(variable,list,remove,separator);
+ break;
+ case REMOVE:
+ documentHandler.removeDirective(variable,list,remove,separator);
+ break;
+ case CONTAINS:
+ if(variable == null){
+ variable = "$var_"+UUID.randomUUID();
+ }
+ documentHandler.containsDirective(variable,list,remove,separator);
+ break;
+ default:
+ break;
+ }
+ }
+ (< S >)*< SEMICOLON >(<S>)*
}
@@ -1972,8 +2006,11 @@ void styleRuleOrDeclarationOrNestedProperties() :
}
{
try {
- // differentiate between the colon of a pseudo and the colon of nested properties and the colon of a simple property
- (LOOKAHEAD(5) styleRule() | debuggingDirective() | declarationOrNestedProperties())
+ // differentiate between the colon of a pseudo and the colon of nested properties and the colon of a simple property
+ // the first LOOKAHEAD(5) styleRule() tries to find the pseudo selector, then the parser tries to find declarationOrNestedProperties,
+ // if failed , came to styleRule() again. It handles in this way, because the pseudo selector, declartion and nested properties
+ // are quite tricky to be distinguished.
+ ( debuggingDirective() | LOOKAHEAD(5) styleRule() | LOOKAHEAD(declarationOrNestedProperties()) declarationOrNestedProperties() | styleRule())
} catch (JumpException e) {
skipAfterExpression();
// reportWarningSkipText(getLocator(), skipAfterExpression());
diff --git a/theme-compiler/tests/resources/automatic/css/selector-with-parenthesis.css b/theme-compiler/tests/resources/automatic/css/selector-with-parenthesis.css
new file mode 100644
index 0000000000..5b9066b7f0
--- /dev/null
+++ b/theme-compiler/tests/resources/automatic/css/selector-with-parenthesis.css
@@ -0,0 +1,5 @@
+@charset "UTF-8";
+
+.foo .v-button:not(.link) {
+ color: #323232;
+} \ No newline at end of file
diff --git a/theme-compiler/tests/resources/automatic/scss/selector-with-parenthesis.scss b/theme-compiler/tests/resources/automatic/scss/selector-with-parenthesis.scss
new file mode 100644
index 0000000000..8bc6271e29
--- /dev/null
+++ b/theme-compiler/tests/resources/automatic/scss/selector-with-parenthesis.scss
@@ -0,0 +1,11 @@
+@charset "UTF-8";
+
+@mixin buttons {
+ .v-button:not(.link) {
+ color: #323232;
+ }
+}
+
+.foo {
+ @include buttons;
+} \ No newline at end of file
diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxDuplicateCaption.java b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxDuplicateCaption.java
new file mode 100644
index 0000000000..3c1e8a27d6
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxDuplicateCaption.java
@@ -0,0 +1,66 @@
+package com.vaadin.tests.components.combobox;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.tests.util.Person;
+import com.vaadin.ui.AbstractSelect.ItemCaptionMode;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.ComboBox;
+
+public class ComboBoxDuplicateCaption extends TestBase {
+
+ private Log log = new Log(5);
+
+ @Override
+ protected void setup() {
+ List<Person> list = new ArrayList<Person>();
+ Person p1 = new Person();
+ p1.setFirstName("John");
+ p1.setLastName("Doe");
+ list.add(p1);
+
+ Person p2 = new Person();
+ p2.setFirstName("Jane");
+ p2.setLastName("Doe");
+ list.add(p2);
+
+ BeanItemContainer<Person> container = new BeanItemContainer<Person>(
+ Person.class);
+ container.addAll(list);
+
+ ComboBox box = new ComboBox("Duplicate captions test Box");
+ box.setId("ComboBox");
+ box.setImmediate(true);
+ box.addValueChangeListener(new ValueChangeListener() {
+
+ public void valueChange(
+ com.vaadin.data.Property.ValueChangeEvent event) {
+ Person p = (Person) event.getProperty().getValue();
+ log.log("Person = " + p.getFirstName() + " " + p.getLastName());
+ }
+ });
+ box.setContainerDataSource(container);
+ box.setItemCaptionMode(ItemCaptionMode.PROPERTY);
+ box.setItemCaptionPropertyId("lastName");
+
+ addComponent(log);
+
+ addComponent(box);
+ addComponent(new Button("Focus this"));
+ }
+
+ @Override
+ protected String getDescription() {
+ return "VFilterSelects with duplicate item captions should not try to do a select (exact match search) for onBlur if not waitingForFilteringResponse";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 10766;
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/embedded/FlashIsVisible.html b/uitest/src/com/vaadin/tests/components/embedded/FlashIsVisible.html
index d3debf3417..ffa2ac11ec 100644
--- a/uitest/src/com/vaadin/tests/components/embedded/FlashIsVisible.html
+++ b/uitest/src/com/vaadin/tests/components/embedded/FlashIsVisible.html
@@ -25,7 +25,7 @@
<tr>
<td>screenCapture</td>
<td></td>
- <td></td>
+ <td>blue-circle</td>
</tr>
</tbody></table>
diff --git a/uitest/src/com/vaadin/tests/components/embedded/FlashIsVisible.java b/uitest/src/com/vaadin/tests/components/embedded/FlashIsVisible.java
index 1724fc11b7..5aec7f07c6 100644
--- a/uitest/src/com/vaadin/tests/components/embedded/FlashIsVisible.java
+++ b/uitest/src/com/vaadin/tests/components/embedded/FlashIsVisible.java
@@ -1,9 +1,13 @@
package com.vaadin.tests.components.embedded;
-import com.vaadin.server.ExternalResource;
+import com.vaadin.server.ClassResource;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.Embedded;
+/**
+ * Tests the legacy flash support in Embedded
+ */
+@Deprecated
public class FlashIsVisible extends TestBase {
@Override
@@ -13,8 +17,9 @@ public class FlashIsVisible extends TestBase {
player.setMimeType("application/x-shockwave-flash");
player.setWidth("400px");
player.setHeight("300px");
- String url = "http://www.youtube.com/v/qQ9N742QB4g&autoplay=0";
- player.setSource(new ExternalResource(url));
+ player.setSource(new ClassResource(
+ com.vaadin.tests.components.flash.FlashIsVisible.class,
+ "simple.swf"));
addComponent(player);
}
diff --git a/uitest/src/com/vaadin/tests/components/flash/FlashIsVisible.html b/uitest/src/com/vaadin/tests/components/flash/FlashIsVisible.html
index 82834cf405..f3f8f50526 100644
--- a/uitest/src/com/vaadin/tests/components/flash/FlashIsVisible.html
+++ b/uitest/src/com/vaadin/tests/components/flash/FlashIsVisible.html
@@ -25,7 +25,7 @@
<tr>
<td>screenCapture</td>
<td></td>
- <td></td>
+ <td>blue-circle</td>
</tr>
</tbody></table>
diff --git a/uitest/src/com/vaadin/tests/components/flash/FlashIsVisible.java b/uitest/src/com/vaadin/tests/components/flash/FlashIsVisible.java
index 23a4322fb7..53de949176 100644
--- a/uitest/src/com/vaadin/tests/components/flash/FlashIsVisible.java
+++ b/uitest/src/com/vaadin/tests/components/flash/FlashIsVisible.java
@@ -1,6 +1,6 @@
package com.vaadin.tests.components.flash;
-import com.vaadin.server.ExternalResource;
+import com.vaadin.server.ClassResource;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.Flash;
@@ -11,8 +11,7 @@ public class FlashIsVisible extends TestBase {
Flash player = new Flash();
player.setWidth("400px");
player.setHeight("300px");
- String url = "http://www.youtube.com/v/qQ9N742QB4g&autoplay=0";
- player.setSource(new ExternalResource(url));
+ player.setSource(new ClassResource("simple.swf"));
addComponent(player);
}
diff --git a/uitest/src/com/vaadin/tests/components/flash/simple.swf b/uitest/src/com/vaadin/tests/components/flash/simple.swf
new file mode 100644
index 0000000000..ea404f307f
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/flash/simple.swf
Binary files differ
diff --git a/uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalLayoutVerticalAlign.html b/uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalLayoutVerticalAlign.html
new file mode 100644
index 0000000000..d16e4a3354
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalLayoutVerticalAlign.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="http://localhost: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.components.orderedlayout.HorizontalLayoutVerticalAlign?restartApplication</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>alignments</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalLayoutVerticalAlign.java b/uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalLayoutVerticalAlign.java
new file mode 100644
index 0000000000..4dc9d8129e
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalLayoutVerticalAlign.java
@@ -0,0 +1,44 @@
+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.Label;
+import com.vaadin.ui.TextArea;
+
+public class HorizontalLayoutVerticalAlign extends TestBase {
+
+ @Override
+ protected void setup() {
+ HorizontalLayout p = new HorizontalLayout();
+
+ p.addComponent(new TextArea());
+
+ Label top = new Label("top");
+ p.addComponent(top);
+ p.setComponentAlignment(top, Alignment.TOP_CENTER);
+
+ Label middle = new Label("middle");
+ p.addComponent(middle);
+ p.setComponentAlignment(middle, Alignment.MIDDLE_CENTER);
+
+ Label bottom = new Label("bottom");
+ p.addComponent(bottom);
+ p.setComponentAlignment(bottom, Alignment.BOTTOM_CENTER);
+
+ p.addComponent(new TextArea());
+
+ addComponent(p);
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Vertical alignments should be top-middle-bottom";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 10852;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/richtextarea/RichTextAreaPreventsTextFieldAccess.html b/uitest/src/com/vaadin/tests/components/richtextarea/RichTextAreaPreventsTextFieldAccess.html
new file mode 100644
index 0000000000..6601bf9d88
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/richtextarea/RichTextAreaPreventsTextFieldAccess.html
@@ -0,0 +1,62 @@
+<?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://localhost:8888/" />
+<title>RichTextAreaPreventsTextFieldAccess</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">RichTextAreaPreventsTextFieldAccess</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.richtextarea.RichTextAreaPreventsTextFieldAccess</td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentsrichtextareaRichTextAreaPreventsTextFieldAccess::PID_Sfield</td>
+ <td>127,13</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>vaadin=runcomvaadintestscomponentsrichtextareaRichTextAreaPreventsTextFieldAccess::PID_Sfield</td>
+ <td>aaa</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentsrichtextareaRichTextAreaPreventsTextFieldAccess::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentsrichtextareaRichTextAreaPreventsTextFieldAccess::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentsrichtextareaRichTextAreaPreventsTextFieldAccess::PID_Sfield</td>
+ <td>99,9</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>vaadin=runcomvaadintestscomponentsrichtextareaRichTextAreaPreventsTextFieldAccess::PID_Sfield</td>
+ <td>aaabbb</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentsrichtextareaRichTextAreaPreventsTextFieldAccess::/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/domChild[2]</td>
+ <td>284,6</td>
+</tr>
+<tr>
+ <td>verifyValue</td>
+ <td>vaadin=runcomvaadintestscomponentsrichtextareaRichTextAreaPreventsTextFieldAccess::PID_Sfield</td>
+ <td>aaabbb</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/richtextarea/RichTextAreaPreventsTextFieldAccess.java b/uitest/src/com/vaadin/tests/components/richtextarea/RichTextAreaPreventsTextFieldAccess.java
new file mode 100644
index 0000000000..f4ad149dd1
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/richtextarea/RichTextAreaPreventsTextFieldAccess.java
@@ -0,0 +1,113 @@
+package com.vaadin.tests.components.richtextarea;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.shared.ui.label.ContentMode;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.RichTextArea;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class RichTextAreaPreventsTextFieldAccess extends TestBase {
+
+ @Override
+ protected void setup() {
+ Label label = new Label(
+ "Steps to reproduce problem with IE8. "
+ + "<br> Step 1: Click on the 'Open RichTextArea-Dialog' button "
+ + "<br> Step 2: Write something in the RichTextArea. "
+ + "Do not press outside the textfield for the "
+ + "richTextArea. <br> Step 3: Press the 'removeWindowButton' "
+ + "<br> Now you cannot write in the TextField on this page "
+ + "<br> Resetting the focus to textfield explicitly, works around the issue");
+ label.setContentMode(ContentMode.HTML);
+ addComponent(label);
+
+ final TextField testField = new TextField("");
+ testField.setId("field");
+ addComponent(testField);
+
+ final RichTextArea rText = new RichTextArea();
+ rText.setWidth("300px");
+ rText.setHeight("300px");
+
+ final Window subWindow = new Window("SubWindow");
+ subWindow.setWidth("500px");
+ subWindow.setHeight("500px");
+ subWindow.setModal(true);
+
+ final VerticalLayout wLayout = new VerticalLayout();
+ subWindow.setContent(wLayout);
+
+ wLayout.addComponent(rText);
+ wLayout.addComponent(new TextField());
+
+ Button addWindowButton = new Button("Open RichTextArea-Dialog");
+ addWindowButton.addClickListener(new Button.ClickListener() {
+
+ public void buttonClick(ClickEvent event) {
+ getMainWindow().addWindow(subWindow);
+
+ }
+ });
+ addComponent(addWindowButton);
+
+ Button removeWindowButton = new Button("removeWindowButton");
+ removeWindowButton.addClickListener(new Button.ClickListener() {
+
+ public void buttonClick(ClickEvent event) {
+ getMainWindow().removeWindow(subWindow);
+
+ }
+ });
+ wLayout.addComponent(removeWindowButton);
+
+ Button focusButton = new Button("Set focus on TextField");
+ focusButton.addClickListener(new Button.ClickListener() {
+
+ public void buttonClick(ClickEvent event) {
+ testField.focus();
+
+ }
+ });
+ addComponent(focusButton);
+
+ Button removeRTA = new Button("Remove RTA");
+ removeRTA.addClickListener(new Button.ClickListener() {
+
+ public void buttonClick(ClickEvent event) {
+ wLayout.removeComponent(rText);
+
+ }
+ });
+ wLayout.addComponent(removeRTA);
+
+ CheckBox cb = new CheckBox("close");
+ cb.setImmediate(true);
+ cb.addValueChangeListener(new ValueChangeListener() {
+
+ @Override
+ public void valueChange(ValueChangeEvent event) {
+ getMainWindow().removeWindow(subWindow);
+ }
+ });
+ wLayout.addComponent(cb);
+
+ }
+
+ @Override
+ protected String getDescription() {
+ return "RichtextArea prevents TextField access in IE8";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 10776;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/table/ColumnReorderingWithManyColumns.html b/uitest/src/com/vaadin/tests/components/table/ColumnReorderingWithManyColumns.html
new file mode 100644
index 0000000000..5b5c83e629
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/table/ColumnReorderingWithManyColumns.html
@@ -0,0 +1,42 @@
+<?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://localhost:8068/" />
+<title>ColumnReorderingWithManyColumns</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ColumnReorderingWithManyColumns</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/ColumnReorderingWithManyColumns?restartApplication</td>
+ <td></td>
+</tr>
+<tr>
+ <td>drag</td>
+ <td>vaadin=runColumnReorderingWithManyColumns::/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/Slot[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/</td>
+ <td>10,10</td>
+</tr>
+<tr>
+ <td>mouseMoveAt</td>
+ <td>vaadin=runColumnReorderingWithManyColumns::/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/Slot[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[10]/domChild[2]</td>
+ <td>10,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>drop</td>
+ <td>vaadin=runColumnReorderingWithManyColumns::/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/Slot[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[10]/domChild[2]</td>
+ <td>10,10</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/table/ColumnReorderingWithManyColumns.java b/uitest/src/com/vaadin/tests/components/table/ColumnReorderingWithManyColumns.java
new file mode 100644
index 0000000000..aeebd299ff
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/table/ColumnReorderingWithManyColumns.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2012 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.components.table;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+
+public class ColumnReorderingWithManyColumns extends TestBase {
+
+ private static final int NUM_COLS = 16;
+
+ @Override
+ protected void setup() {
+ Table table = new Table();
+ table.setSizeFull();
+ table.setColumnReorderingAllowed(true);
+
+ for (int i = 0; i < NUM_COLS; ++i) {
+ table.addContainerProperty("col-" + i, String.class, null);
+ }
+
+ addComponent(table);
+ }
+
+ @Override
+ protected String getDescription() {
+ return "When reordering columns via drag'n'drop, the drop marker is drawn too far to the right.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 10890;
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/table/SetDataSourceWithPropertyIds.java b/uitest/src/com/vaadin/tests/components/table/SetDataSourceWithPropertyIds.java
index f6eb893528..5749912f43 100644
--- a/uitest/src/com/vaadin/tests/components/table/SetDataSourceWithPropertyIds.java
+++ b/uitest/src/com/vaadin/tests/components/table/SetDataSourceWithPropertyIds.java
@@ -4,7 +4,6 @@ import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
-import com.vaadin.data.Buffered.SourceException;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.server.VaadinRequest;
import com.vaadin.shared.ui.MarginInfo;
@@ -12,6 +11,7 @@ import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.ui.Button;
import com.vaadin.ui.Label;
import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.CacheUpdateException;
public class SetDataSourceWithPropertyIds extends AbstractTestUI {
@@ -71,7 +71,7 @@ public class SetDataSourceWithPropertyIds extends AbstractTestUI {
table.setContainerDataSource(jobContainer);
table.setVisibleColumns(new String[] { "jobId" });
label.setValue("no Exception");
- } catch (SourceException e) {
+ } catch (CacheUpdateException e) {
ArrayList<String> propertyIds = new ArrayList<String>();
propertyIds.add("jobId");
table.setContainerDataSource(jobContainer, propertyIds);
diff --git a/uitest/src/com/vaadin/tests/components/table/TableDragColumn.html b/uitest/src/com/vaadin/tests/components/table/TableDragColumn.html
index 7c2dc2813c..14f2781f38 100644
--- a/uitest/src/com/vaadin/tests/components/table/TableDragColumn.html
+++ b/uitest/src/com/vaadin/tests/components/table/TableDragColumn.html
@@ -53,7 +53,7 @@
<td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item1</td>
<td>37,8</td>
</tr>
-<!-- Drag column to a new location -->
+<!-- Drag and drop column 1 to the left of column 4 -->
<tr>
<td>drag</td>
<td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
diff --git a/uitest/src/com/vaadin/tests/components/table/TableInSubWindowMemoryLeak.java b/uitest/src/com/vaadin/tests/components/table/TableInSubWindowMemoryLeak.java
new file mode 100644
index 0000000000..dcaabf98d6
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/table/TableInSubWindowMemoryLeak.java
@@ -0,0 +1,68 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Window.CloseEvent;
+import com.vaadin.ui.Window.CloseListener;
+
+public class TableInSubWindowMemoryLeak extends TestBase {
+
+ @Override
+ public void setup() {
+ final Label label = new Label("Hello Vaadin user");
+ addComponent(label);
+ final Button openButton = new Button("open me");
+ openButton.addClickListener(new ClickListener() {
+
+ public void buttonClick(final ClickEvent event) {
+ final Window window = new Window("Simple Window");
+ window.setModal(true);
+ window.setHeight("200px");
+ window.setWidth("200px");
+ final Table table = new Table();
+ window.setContent(table);
+ UI.getCurrent().addWindow(window);
+ window.addCloseListener(new CloseListener() {
+ public void windowClose(final CloseEvent e) {
+ window.setContent(new Label());
+ UI.getCurrent().removeWindow(window);
+ }
+ });
+ }
+ });
+ addComponent(openButton);
+
+ final Button openButton2 = new Button("open me without Table");
+ openButton2.addClickListener(new ClickListener() {
+ public void buttonClick(final ClickEvent event) {
+ final Window window = new Window("Simple Window");
+ window.setModal(true);
+ window.setHeight("200px");
+ window.setWidth("200px");
+ UI.getCurrent().addWindow(window);
+ window.addCloseListener(new CloseListener() {
+ public void windowClose(final CloseEvent e) {
+ UI.getCurrent().removeWindow(window);
+ }
+ });
+ }
+ });
+ addComponent(openButton2);
+ }
+
+ @Override
+ protected String getDescription() {
+ return "IE 8 leaks memory with a subwindow containing a Table";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 9197;
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/table/TableWithBrokenGeneratorAndContainer.html b/uitest/src/com/vaadin/tests/components/table/TableWithBrokenGeneratorAndContainer.html
new file mode 100644
index 0000000000..c2481e6be6
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/table/TableWithBrokenGeneratorAndContainer.html
@@ -0,0 +1,178 @@
+<?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://localhost:9999/" />
+<title>TableWithBrokenGeneratorAndContainer</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TableWithBrokenGeneratorAndContainer</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.table.TableWithBrokenGeneratorAndContainer?restartApplication</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+ <td>item1/prop1</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+ <td>item2/prop1</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+ <td>item3/prop1</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[4]/domChild[0]</td>
+ <td>Generated item1/Gen</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[4]/domChild[0]</td>
+ <td>Generated item2/Gen</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[4]/domChild[0]</td>
+ <td>Generated item3/Gen</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VCheckBox[0]/domChild[0]</td>
+ <td>12,6</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<!--error indicator should be present-->
+<tr>
+ <td>assertCSSClass</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>v-errorindicator</td>
+</tr>
+<!--error notification should not be present-->
+<tr>
+ <td>assertElementNotPresent</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::Root/VNotification[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+ <td>item2/prop1</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+ <td>item3/prop1</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[4]/domChild[0]</td>
+ <td>Generated item1/Gen</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[4]/domChild[0]</td>
+ <td>Generated item2/Gen</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[4]/domChild[0]</td>
+ <td>Generated item3/Gen</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VCheckBox[0]/domChild[0]</td>
+ <td>9,6</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[1]</td>
+ <td></td>
+</tr>
+<!--error indicator should be present-->
+<tr>
+ <td>assertCSSClass</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>v-errorindicator</td>
+</tr>
+<!--error notification should not be present-->
+<tr>
+ <td>assertElementNotPresent</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::Root/VNotification[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+ <td>item2/prop1</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+ <td>item3/prop1</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[4]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[4]/domChild[0]</td>
+ <td>Generated item2/Gen</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[4]/domChild[0]</td>
+ <td>Generated item3/Gen</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VCheckBox[0]/domChild[0]</td>
+ <td>9,8</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[1]</td>
+ <td></td>
+</tr>
+<!--error notification-->
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::Root/VNotification[0]/HTML[0]/domChild[0]</td>
+ <td>Problem updating table. Please try again later</td>
+</tr>
+<!--table should be empty-->
+<tr>
+ <td>assertElementNotPresent</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableWithBrokenGeneratorAndContainer::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[4]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/table/TableWithBrokenGeneratorAndContainer.java b/uitest/src/com/vaadin/tests/components/table/TableWithBrokenGeneratorAndContainer.java
new file mode 100644
index 0000000000..9c5ce9dc0c
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/table/TableWithBrokenGeneratorAndContainer.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2000-2013 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.components.table;
+
+import java.lang.reflect.InvocationTargetException;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.event.ListenerMethod.MethodException;
+import com.vaadin.server.ErrorEvent;
+import com.vaadin.server.ErrorHandler;
+import com.vaadin.server.ServerRpcManager.RpcInvocationException;
+import com.vaadin.server.VaadinSession;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Notification;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.CacheUpdateException;
+import com.vaadin.ui.Table.ColumnGenerator;
+
+public class TableWithBrokenGeneratorAndContainer extends TestBase {
+
+ private CheckBox brokenContainer = new CheckBox("Broken container");
+ private CheckBox brokenGenerator = new CheckBox("Broken generator");
+ private CheckBox clearTableOnError = new CheckBox("Clear Table on Error");
+
+ /**
+ * Container which throws an exception on every fifth call to
+ * {@link #getContainerProperty(Object, Object)}.
+ *
+ * @author Vaadin Ltd
+ * @version @VERSION@
+ * @since 7.0
+ *
+ */
+ public class BrokenContainer extends IndexedContainer {
+ private int counter = 0;
+
+ public BrokenContainer() {
+ super();
+ }
+
+ @Override
+ public Property getContainerProperty(Object itemId, Object propertyId) {
+ if (counter++ % 5 == 0
+ && Boolean.TRUE.equals(brokenContainer.getValue())) {
+ throw new RuntimeException(getClass().getSimpleName()
+ + " cannot fetch the property for " + itemId + "/"
+ + propertyId + " right now");
+ }
+ return super.getContainerProperty(itemId, propertyId);
+ }
+ }
+
+ public class BrokenColumnGenerator implements ColumnGenerator {
+ private int brokenInterval;
+ private int counter = 0;
+
+ public BrokenColumnGenerator(int brokenInterval) {
+ this.brokenInterval = brokenInterval;
+ }
+
+ public Object generateCell(Table source, Object itemId, Object columnId) {
+ if (counter++ % brokenInterval == 0
+ && Boolean.TRUE.equals(brokenGenerator.getValue())) {
+ throw new IllegalArgumentException("Broken generator for "
+ + itemId + "/" + columnId);
+ } else {
+ return "Generated " + itemId + "/" + columnId;
+ }
+ }
+
+ }
+
+ @Override
+ protected void setup() {
+ brokenContainer.setImmediate(true);
+ brokenGenerator.setImmediate(true);
+ clearTableOnError.setImmediate(true);
+ clearTableOnError.addValueChangeListener(new ValueChangeListener() {
+
+ public void valueChange(ValueChangeEvent event) {
+ Boolean value = clearTableOnError.getValue();
+ setErrorHandler(value != null ? value : false);
+ }
+ });
+ final Table table = new Table("Semi-broken table");
+ table.setContainerDataSource(createBrokenContainer(10, 4));
+ table.addGeneratedColumn("Gen", new BrokenColumnGenerator(4));
+ table.setPageLength(20);
+
+ Button refreshTableCache = new Button("Refresh table cache",
+ new Button.ClickListener() {
+
+ public void buttonClick(ClickEvent event) {
+ table.markAsDirty();
+ table.refreshRowCache();
+ }
+ });
+ addComponent(refreshTableCache);
+ addComponent(brokenContainer);
+ addComponent(brokenGenerator);
+ addComponent(clearTableOnError);
+ addComponent(table);
+ }
+
+ protected void setErrorHandler(boolean enabled) {
+ if (enabled) {
+ VaadinSession.getCurrent().setErrorHandler(new ErrorHandler() {
+
+ @Override
+ public void error(ErrorEvent event) {
+ Throwable t = event.getThrowable();
+ if (t instanceof RpcInvocationException) {
+ t = t.getCause();
+ if (t instanceof InvocationTargetException) {
+ t = t.getCause();
+ if (t instanceof MethodException) {
+ t = t.getCause();
+ if (t instanceof CacheUpdateException) {
+ Table table = ((CacheUpdateException) t)
+ .getTable();
+ table.removeAllItems();
+ Notification
+ .show("Problem updating table. Please try again later",
+ Notification.Type.ERROR_MESSAGE);
+ }
+ }
+ }
+ }
+ }
+ });
+ } else {
+ VaadinSession.getCurrent().setErrorHandler(this);
+ }
+ }
+
+ private BrokenContainer createBrokenContainer(int rows, int cols) {
+ BrokenContainer container = new BrokenContainer();
+ for (int j = 1; j <= cols; j++) {
+ container.addContainerProperty("prop" + j, String.class, null);
+ }
+ for (int i = 1; i <= rows; i++) {
+ Item item = container.addItem("item" + i);
+ for (int j = 1; j <= cols; j++) {
+ item.getItemProperty("prop" + j).setValue(
+ "item" + i + "/prop" + j);
+ }
+ }
+ return container;
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 10312;
+ }
+
+ @Override
+ protected String getDescription() {
+ return "A Table should not show 'Internal Error' just because a column generator or container throws an exception during filling of the cache";
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/table/ValueAfterClearingContainer.html b/uitest/src/com/vaadin/tests/components/table/ValueAfterClearingContainer.html
new file mode 100644
index 0000000000..3aecf8bf97
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/table/ValueAfterClearingContainer.html
@@ -0,0 +1,179 @@
+<?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>ValueAfterClearingContainer</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ValueAfterClearingContainer</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.table.ValueAfterClearingContainer?restartApplication</td>
+ <td></td>
+</tr>
+<!-- add items and select one of them -->
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SaddItemsButton/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+ <td>40,13</td>
+</tr>
+<!-- verify selection -->
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SLog_row_0</td>
+ <td>1. Value changed to 2</td>
+</tr>
+<!-- remove items from table -->
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SremoveItemsFromTableButton/domChild[0]</td>
+ <td></td>
+</tr>
+<!-- verify that removal cleared the selection -->
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SLog_row_0</td>
+ <td>2. Value changed to null</td>
+</tr>
+<!-- replace the items and select one of them -->
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SaddItemsButton/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+ <td>40,13</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SLog_row_0</td>
+ <td>3. Value changed to 2</td>
+</tr>
+<!-- remove items from container -->
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SremoveItemsFromContainerButton/domChild[0]</td>
+ <td></td>
+</tr>
+<!-- verify that removal failed to clear the value -->
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SshowValueButton/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SLog_row_0</td>
+ <td>4. Table selection: 2</td>
+</tr>
+<!-- replace the items -->
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SaddItemsButton/domChild[0]</td>
+ <td></td>
+</tr>
+<!-- verify that selection still exists -->
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SshowValueButton/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SLog_row_0</td>
+ <td>5. Table selection: 2</td>
+</tr>
+<!-- remove items from container and sanitize the table -->
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SremoveItemsFromContainerAndSanitizeButton/domChild[0]</td>
+ <td></td>
+</tr>
+<!-- verify that sanitizing cleared the value -->
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SLog_row_0</td>
+ <td>6. Value changed to null</td>
+</tr>
+<!-- replace the items and select one of them -->
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SaddItemsButton/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+ <td>40,13</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SLog_row_0</td>
+ <td>7. Value changed to 2</td>
+</tr>
+<!-- remove selected item from the table -->
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SremoveSelectedFromTableButton/domChild[0]</td>
+ <td></td>
+</tr>
+<!-- verify that removal cleared the selection -->
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SLog_row_0</td>
+ <td>8. Value changed to null</td>
+</tr>
+<!-- select new item and remove it from the container -->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+ <td>40,13</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SLog_row_0</td>
+ <td>9. Value changed to 3</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SremoveSelectedFromContainer/domChild[0]</td>
+ <td></td>
+</tr>
+<!-- verify that removal failed to clear the value -->
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SshowValueButton/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SLog_row_0</td>
+ <td>10. Table selection: 3</td>
+</tr>
+<!-- verify the item has been removed -->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_Stable/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+ <td>40,13</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableValueAfterClearingContainer::PID_SLog_row_0</td>
+ <td>11. Value changed to 4</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/table/ValueAfterClearingContainer.java b/uitest/src/com/vaadin/tests/components/table/ValueAfterClearingContainer.java
index 93e7cafa99..f378c146ea 100644
--- a/uitest/src/com/vaadin/tests/components/table/ValueAfterClearingContainer.java
+++ b/uitest/src/com/vaadin/tests/components/table/ValueAfterClearingContainer.java
@@ -19,6 +19,8 @@ public class ValueAfterClearingContainer extends TestBase {
@Override
protected void setup() {
+ log.setId("log");
+ table.setId("table");
table.setSelectable(true);
table.addContainerProperty(PROPERTY_ID, Integer.class, null);
table.setImmediate(true);
@@ -33,6 +35,7 @@ public class ValueAfterClearingContainer extends TestBase {
addComponent(table);
final CheckBox multiselect = new CheckBox("Multiselect");
multiselect.setImmediate(true);
+ multiselect.setId("multiselect");
multiselect.addValueChangeListener(new ValueChangeListener() {
public void valueChange(ValueChangeEvent event) {
@@ -41,48 +44,64 @@ public class ValueAfterClearingContainer extends TestBase {
}
});
addComponent(multiselect);
- addComponent(new Button("Add table items", new Button.ClickListener() {
- public void buttonClick(ClickEvent event) {
- if (!table.getItemIds().isEmpty()) {
- Notification.show("Only possible when the table is empty");
- return;
- } else {
- for (int i = 0; i < 5; i++) {
- table.addItem(new Object[] { Integer.valueOf(i) },
- Integer.valueOf(i));
+ Button addItemsButton = new Button("Add table items",
+ new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ if (!table.getItemIds().isEmpty()) {
+ Notification
+ .show("Only possible when the table is empty");
+ return;
+ } else {
+ for (int i = 0; i < 5; i++) {
+ table.addItem(
+ new Object[] { Integer.valueOf(i) },
+ Integer.valueOf(i));
+ }
+ }
}
- }
- }
- }));
+ });
+ addItemsButton.setId("addItemsButton");
+ addComponent(addItemsButton);
- addComponent(new Button("Show value", new Button.ClickListener() {
- public void buttonClick(ClickEvent event) {
- log.log("Table selection: " + table.getValue());
- }
- }));
-
- addComponent(new Button("Remove items from table",
+ Button showValueButton = new Button("Show value",
new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
+ log.log("Table selection: " + table.getValue());
+ }
+ });
+ showValueButton.setId("showValueButton");
+ addComponent(showValueButton);
+
+ Button removeItemsFromTableButton = new Button(
+ "Remove items from table", new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
table.removeAllItems();
}
- }));
+ });
+ removeItemsFromTableButton.setId("removeItemsFromTableButton");
+ addComponent(removeItemsFromTableButton);
- addComponent(new Button("Remove items from container",
- new Button.ClickListener() {
+ Button removeItemsFromContainerButton = new Button(
+ "Remove items from container", new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
table.getContainerDataSource().removeAllItems();
}
- }));
- addComponent(new Button("Remove items from container and sanitize",
+ });
+ removeItemsFromContainerButton.setId("removeItemsFromContainerButton");
+ addComponent(removeItemsFromContainerButton);
+ Button removeItemsFromContainerAndSanitizeButton = new Button(
+ "Remove items from container and sanitize",
new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
table.getContainerDataSource().removeAllItems();
table.sanitizeSelection();
}
- }));
- addComponent(new Button("Remove selected item from table",
- new Button.ClickListener() {
+ });
+ removeItemsFromContainerAndSanitizeButton
+ .setId("removeItemsFromContainerAndSanitizeButton");
+ addComponent(removeItemsFromContainerAndSanitizeButton);
+ Button removeSelectedFromTableButton = new Button(
+ "Remove selected item from table", new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
Object selection = table.getValue();
if (selection == null) {
@@ -92,8 +111,11 @@ public class ValueAfterClearingContainer extends TestBase {
table.removeItem(selection);
}
}
- }));
- addComponent(new Button("Remove selected item from container",
+ });
+ removeSelectedFromTableButton.setId("removeSelectedFromTableButton");
+ addComponent(removeSelectedFromTableButton);
+ Button removeSelectedFromContainer = new Button(
+ "Remove selected item from container",
new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
Object selection = table.getValue();
@@ -105,7 +127,9 @@ public class ValueAfterClearingContainer extends TestBase {
.removeItem(selection);
}
}
- }));
+ });
+ removeSelectedFromContainer.setId("removeSelectedFromContainer");
+ addComponent(removeSelectedFromContainer);
}
@Override
diff --git a/uitest/src/com/vaadin/tests/components/tabsheet/WrapTabSheetInTabSheet.html b/uitest/src/com/vaadin/tests/components/tabsheet/WrapTabSheetInTabSheet.html
new file mode 100644
index 0000000000..f1a54df714
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/tabsheet/WrapTabSheetInTabSheet.html
@@ -0,0 +1,57 @@
+<?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://localhost:8888/" />
+<title>WrapTabSheetInTabSheet</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">WrapTabSheetInTabSheet</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.tabsheet.WrapTabSheetInTabSheet?restartApplication</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstabsheetWrapTabSheetInTabSheet::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyElementPresent</td>
+ <td>vaadin=runcomvaadintestscomponentstabsheetWrapTabSheetInTabSheet::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstabsheetWrapTabSheetInTabSheet::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyElementPresent</td>
+ <td>vaadin=runcomvaadintestscomponentstabsheetWrapTabSheetInTabSheet::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VTabsheet[0]/VTabsheetPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstabsheetWrapTabSheetInTabSheet::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VTabsheet[0]/VTabsheetPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyElementPresent</td>
+ <td>vaadin=runcomvaadintestscomponentstabsheetWrapTabSheetInTabSheet::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VTabsheet[0]/VTabsheetPanel[0]/VTabsheet[0]/VTabsheetPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstabsheetWrapTabSheetInTabSheet::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTabsheet[0]/VTabsheetPanel[0]/VTabsheet[0]/VTabsheetPanel[0]/VTabsheet[0]/VTabsheetPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html> \ No newline at end of file
diff --git a/uitest/src/com/vaadin/tests/components/tabsheet/WrapTabSheetInTabSheet.java b/uitest/src/com/vaadin/tests/components/tabsheet/WrapTabSheetInTabSheet.java
index 7a676c63fb..1e56aa49a7 100644
--- a/uitest/src/com/vaadin/tests/components/tabsheet/WrapTabSheetInTabSheet.java
+++ b/uitest/src/com/vaadin/tests/components/tabsheet/WrapTabSheetInTabSheet.java
@@ -16,7 +16,7 @@ public class WrapTabSheetInTabSheet extends TestBase {
addComponent(mainLayout);
Button b = new Button("Wrap main layout in a TabSheet");
- b.addListener(new Button.ClickListener() {
+ b.addClickListener(new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
TabSheet tabsheet = new TabSheet();
diff --git a/uitest/src/com/vaadin/tests/components/upload/TestFileUpload.java b/uitest/src/com/vaadin/tests/components/upload/TestFileUpload.java
index ad86d0f593..b57c236b20 100644
--- a/uitest/src/com/vaadin/tests/components/upload/TestFileUpload.java
+++ b/uitest/src/com/vaadin/tests/components/upload/TestFileUpload.java
@@ -8,8 +8,11 @@ import org.apache.commons.codec.digest.DigestUtils;
import com.vaadin.tests.components.TestBase;
import com.vaadin.tests.util.Log;
import com.vaadin.ui.Upload;
-import com.vaadin.ui.Upload.FinishedEvent;
+import com.vaadin.ui.Upload.FailedEvent;
+import com.vaadin.ui.Upload.FailedListener;
import com.vaadin.ui.Upload.Receiver;
+import com.vaadin.ui.Upload.SucceededEvent;
+import com.vaadin.ui.Upload.SucceededListener;
public class TestFileUpload extends TestBase implements Receiver {
@@ -27,10 +30,22 @@ public class TestFileUpload extends TestBase implements Receiver {
}
});
u.setId("UPL");
- u.addListener(new Upload.FinishedListener() {
+ u.addFailedListener(new FailedListener() {
@Override
- public void uploadFinished(FinishedEvent event) {
+ public void uploadFailed(FailedEvent event) {
+ String hash = DigestUtils.md5Hex(baos.toByteArray());
+
+ log.log("<span style=\"color: red;\">Upload failed. Name: "
+ + event.getFilename() + ", Size: " + baos.size()
+ + ", md5: " + hash + "</span>");
+ baos.reset();
+ }
+ });
+ u.addSucceededListener(new SucceededListener() {
+
+ @Override
+ public void uploadSucceeded(SucceededEvent event) {
String hash = DigestUtils.md5Hex(baos.toByteArray());
log.log("Upload finished. Name: " + event.getFilename()
+ ", Size: " + baos.size() + ", md5: " + hash);
diff --git a/uitest/src/com/vaadin/tests/components/upload/TestFileUploadSize.java b/uitest/src/com/vaadin/tests/components/upload/TestFileUploadSize.java
new file mode 100644
index 0000000000..32f5c93bfd
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/upload/TestFileUploadSize.java
@@ -0,0 +1,80 @@
+package com.vaadin.tests.components.upload;
+
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+
+import com.vaadin.shared.ui.MarginInfo;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Notification;
+import com.vaadin.ui.Upload;
+import com.vaadin.ui.Upload.FinishedEvent;
+import com.vaadin.ui.Upload.Receiver;
+import com.vaadin.ui.Upload.StartedEvent;
+
+public class TestFileUploadSize extends TestBase implements Receiver {
+
+ private Label label = new Label("No finished uploads.");
+ private Label receivedSize = new Label("-");
+ private Label expectedSize = new Label("-");
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ @Override
+ protected void setup() {
+ getLayout().setMargin(new MarginInfo(true, false, false, false));
+ getLayout().setSpacing(true);
+
+ Upload u = new Upload("Upload", new Upload.Receiver() {
+
+ public OutputStream receiveUpload(String filename, String mimeType) {
+ return baos;
+ }
+ });
+ u.setId("UPL");
+ u.addStartedListener(new Upload.StartedListener() {
+
+ public void uploadStarted(StartedEvent event) {
+ expectedSize.setValue(String.valueOf(event.getContentLength()));
+ }
+ });
+ u.addFinishedListener(new Upload.FinishedListener() {
+
+ public void uploadFinished(FinishedEvent event) {
+ label.setValue("Upload finished. Name: " + event.getFilename());
+ receivedSize.setValue(String.valueOf(baos.size()));
+ baos.reset();
+ }
+ });
+
+ expectedSize.setId("expected");
+ receivedSize.setId("received");
+
+ GridLayout grid = new GridLayout(2, 2);
+ grid.addComponent(new Label("Expected size:"), 0, 0);
+ grid.addComponent(new Label("Received size:"), 0, 1);
+ grid.addComponent(expectedSize, 1, 0);
+ grid.addComponent(receivedSize, 1, 1);
+
+ addComponent(label);
+ addComponent(grid);
+ addComponent(u);
+ }
+
+ public OutputStream receiveUpload(String filename, String MIMEType) {
+ Notification.show("Receiving upload");
+ return new ByteArrayOutputStream();
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 9548;
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Multibyte characters in filenames should not cause the upload size to be computed incorrectly";
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/containers/sqlcontainer/TableQueryWithNonUniqueFirstPrimaryKey.html b/uitest/src/com/vaadin/tests/containers/sqlcontainer/TableQueryWithNonUniqueFirstPrimaryKey.html
new file mode 100644
index 0000000000..8b955ce17d
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/containers/sqlcontainer/TableQueryWithNonUniqueFirstPrimaryKey.html
@@ -0,0 +1,67 @@
+<?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://localhost:9999/" />
+<title>TableQueryWithNonUniqueFirstPrimaryKey</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TableQueryWithNonUniqueFirstPrimaryKey</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.containers.sqlcontainer.TableQueryWithNonUniqueFirstPrimaryKey?restartApplication</td>
+ <td></td>
+</tr>
+<tr>
+ <td>enterCharacter</td>
+ <td>vaadin=runcomvaadintestscontainerssqlcontainerTableQueryWithNonUniqueFirstPrimaryKey::/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]#textbox</td>
+ <td>rus</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscontainerssqlcontainerTableQueryWithNonUniqueFirstPrimaryKey::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]/#item0</td>
+ <td>TARUSCIO GIOVANNI</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscontainerssqlcontainerTableQueryWithNonUniqueFirstPrimaryKey::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item1</td>
+ <td>RUSSO GAETANO AUTORICAMBI</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscontainerssqlcontainerTableQueryWithNonUniqueFirstPrimaryKey::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item2</td>
+ <td>AMORUSO LUIGI SRL</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscontainerssqlcontainerTableQueryWithNonUniqueFirstPrimaryKey::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item3</td>
+ <td>CARUSO ROCCO</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscontainerssqlcontainerTableQueryWithNonUniqueFirstPrimaryKey::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item4</td>
+ <td>F.LLI RUSSO DI GAETANO RUSSO &amp; C</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscontainerssqlcontainerTableQueryWithNonUniqueFirstPrimaryKey::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item5</td>
+ <td>RUSSO GIUSEPPE</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscontainerssqlcontainerTableQueryWithNonUniqueFirstPrimaryKey::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item6</td>
+ <td>TRUSCELLI ANTONIO</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscontainerssqlcontainerTableQueryWithNonUniqueFirstPrimaryKey::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item7</td>
+ <td>CARUSO CALOGERO</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/containers/sqlcontainer/TableQueryWithNonUniqueFirstPrimaryKey.java b/uitest/src/com/vaadin/tests/containers/sqlcontainer/TableQueryWithNonUniqueFirstPrimaryKey.java
new file mode 100644
index 0000000000..fa84c7cbb8
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/containers/sqlcontainer/TableQueryWithNonUniqueFirstPrimaryKey.java
@@ -0,0 +1,124 @@
+package com.vaadin.tests.containers.sqlcontainer;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.filter.Compare.Equal;
+import com.vaadin.data.util.sqlcontainer.SQLContainer;
+import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
+import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool;
+import com.vaadin.data.util.sqlcontainer.query.TableQuery;
+import com.vaadin.server.LegacyApplication;
+import com.vaadin.shared.ui.combobox.FilteringMode;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.LegacyWindow;
+import com.vaadin.ui.VerticalLayout;
+
+public class TableQueryWithNonUniqueFirstPrimaryKey extends LegacyApplication {
+ @Override
+ public void init() {
+ LegacyWindow mainWindow = new LegacyWindow("Test Application");
+ setMainWindow(mainWindow);
+
+ try {
+ JDBCConnectionPool connectionPool = new SimpleJDBCConnectionPool(
+ "org.hsqldb.jdbc.JDBCDriver",
+ "jdbc:hsqldb:mem:sqlcontainer", "SA", "", 2, 20);
+
+ createTestTable(connectionPool);
+ insertTestData(connectionPool);
+
+ TableQuery q = new TableQuery("MYTABLE2", connectionPool);
+ q.setVersionColumn("VERSION");
+ SQLContainer myContainer = new SQLContainer(q);
+ // Uncommenting these works around the issue
+ // myContainer.addOrderBy(new OrderBy("PFX", true));
+ // myContainer.addOrderBy(new OrderBy("NUMERO", true));
+ myContainer.removeAllContainerFilters();
+ myContainer.addContainerFilter(new Equal("PFX", "C"));
+
+ VerticalLayout layout = new VerticalLayout();
+ mainWindow.setContent(layout);
+
+ final ComboBox myCombo = new ComboBox("MyCaption");
+ myCombo.setDescription("Description");
+ myCombo.setContainerDataSource(myContainer);
+ myCombo.setItemCaptionPropertyId("MYFIELD");
+ myCombo.setFilteringMode(FilteringMode.CONTAINS);
+ myCombo.setImmediate(true);
+ myCombo.setWidth("100.0%");
+ myCombo.setHeight("-1px");
+ myCombo.addValueChangeListener(new Property.ValueChangeListener() {
+ public void valueChange(ValueChangeEvent event) {
+ if (myCombo.getValue() != null) {
+ Item item = myCombo.getItem(event.getProperty()
+ .getValue());
+ String selected = item.getItemProperty("MYFIELD")
+ .getValue().toString();
+ System.out.println("Selected " + selected);
+ }
+ }
+ });
+ layout.addComponent(myCombo);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ /**
+ * (Re)creates the test table
+ *
+ * @param connectionPool
+ */
+ private void createTestTable(JDBCConnectionPool connectionPool) {
+ Connection conn = null;
+ try {
+ conn = connectionPool.reserveConnection();
+ Statement statement = conn.createStatement();
+ try {
+ statement.executeUpdate("DROP TABLE mytable2");
+ } catch (SQLException e) {
+ }
+ String q = "CREATE TABLE mytable2 (id INTEGER GENERATED BY DEFAULT AS IDENTITY,"
+ + " MYFIELD varchar(60),"
+ + " PFX varchar(1),"
+ + " numero integer" + ", PRIMARY KEY (pfx,numero));";
+ statement.execute(q);
+ statement.close();
+ conn.commit();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ } finally {
+ connectionPool.releaseConnection(conn);
+ }
+ }
+
+ /**
+ * Adds test data to the test table
+ *
+ * @param connectionPool
+ * @throws SQLException
+ */
+ private void insertTestData(JDBCConnectionPool connectionPool)
+ throws SQLException {
+ Connection conn = null;
+ try {
+ conn = connectionPool.reserveConnection();
+ Statement statement = conn.createStatement();
+
+ statement
+ .executeUpdate("insert into mytable2(myfield,pfx,numero) values ('COSTRUEDIL DI GAGLIOSTRO & C.SNC','C',6),('AUTOBUDA SRL','C',7),('CAFARELLI TINDARO AUTORICAMBI','C',8),('LARTE DEL MOBILE DI QUINTO CUTRI','C',9),('GRAPHIC DESIGN','C',10),('FOTI CARMELO','C',11),('MALAGRECA MICHELE OFF.ELETTR.','C',12),('CLIENTE NUOVO FRANCESCO','C',13),('LAROCCA ETTORE','C',14),('ALCAM SNC DI MARAFIOTI ALESSANDRO E','C',15),('EUROPA TYRES S.R.L.','C',16),('CROCE ROSSA ITALIANA COM.LOCALE','C',17),('RUGNETTA BRUNO','C',18),('BOSA VINCENZO TUTTO PER LA PESCA','C',19),('C.P.R.CENTRO POSE ROMEO','C',20),('VIOLI ORESTE OFF.AUTOCARROZ.','C',21),('LIGATO SALVATORE','C',22),('DECORFORM DI IANNINO DARIO','C',23),('BEVI SUD DI DAGOSTINO GIUSEPPE','C',24),('BUSTE E CARTA DI GALLICO DARIO','C',25),('CELESTINO CRISAFULLI','C',26),('IMPRESA EDILE IS.AS.DI SALVATORE','C',27),('RASO GIUSEPPE','C',28),('EUROTECNICA 3A SAS DI ANELLO FRANC.','C',29),('EXO AUTOMOTIVE S.P.A.','C',30),('GHEA SISTEM S.R.L.','C',31),('AUTOTECNICA DI IANNELLI GIUSEPPE','C',32),('NATURAL SALUMI DI ARENA GIANCARLO','C',33),('LOIACONO PASQUALE & C. S.a.s.','C',34),('LONGO CLAUDIO','C',35),('CLASS SERVICING S.R.L.','C',36),('CADI SNC F.LLI MILASI','C',37),('MARTURANO FRANCESCO','C',38),('ARICOASSICUR.DI ARICOMARIATERESA','C',39),('','C',40),('SICILIANO FRANCESCO','C',41),('PREVITERA CATERINA ALIMENTARI','C',42),('AUTOFFICINA LUCAGIOVANNI','C',43),('NON UTILIZZARE','C',44),('','C',45),('SAFFIOTI MELO MACELLERIA GASTRON.','C',46),('MANGERUGA SERAFINO','C',47),('S.D.A. s.a.s.di Palmitessa Carlo','C',48),('IPER SCAVI S.R.L.','C',49),('','C',50),('FABBRICA ARTIGIANA LUIGI COLOMBO','C',51),('ELETTRO GLOBAL SERVICE DI ELIA','C',52),('FORTUNATO','C',53),('STEFANO BAJLO','C',54),('.','C',55),('FORTUGNO S.R.L.','C',56),('PARRELLO GIUSEPPE','C',57),('GAS E CUCINE DI SANTORO GIOVANNI','C',58),('LUPPINO MAURIZIO','C',59),('','C',60),('CHARTER LINE SAS','C',61),('CAMPAGNA GIUSEPPE EREDE DI CAMPAGNA','C',62),('TREBI DI BARBARO FRANCESCO','C',63),('COOPERATIVA SOCIALE ONLUS','C',64),('','C',65),('SASOL ITALY S.P.A.','C',66),('AVATI ROCCO','C',67),('DOLCE FREDDO DI DAGOSTINO G.PPE','C',68),('GUERRERA FRANCESCO','C',69),('','C',70),('AGRICOLA PALMESE DI ARICO EMAN.&C.','C',71),('BORRELLO COSIMO TENDAGGI TAPPEZZ.','C',72),('DAMIANO PUTRINO OFF.MECC.','C',73),('CENTRO FORNITURE S.R.L.','C',74),('','C',75),('CLIENTE NUOVO FORTUNATO','C',76),('AVV.FERDINANDO DE LEONARDIS','C',77),('INSTALLAZIONE DI IMPINATI ELETTR.','C',78),('VIOLI PIETRO','C',79),('','C',80),('BASILE VINCENZO','C',81),('SAFFIOTI APPALTI & COSTRUZIONI','C',82),('SOC.COOP.MULTISERVICE MAMMOLA','C',83),('ARCH.TIZIANA GAGLIOTI','C',84),('','C',85),('GAGLIOTI SRL','C',86),('PINO MICHELE IMPRESA COSTRUZ.','C',87),('','C',88),('BORGESE GIUSEPPE','C',89),('','C',90),('PREVITERA SALVATORE','C',91),('PASTORE SRL','C',92),('OFF.LUCI CARMELO','C',93),('GIOFFRE CARMELO','C',94),('','C',95),('COGIMI S.R.L.','C',96),('CANTINE ZAGARI SNC','C',97),('ALBEDA IMPIANTI DI LOPRETE ANTONIO','C',98),('VETRARIA BRUTIA S.R.L. UNIPERSONALE','C',99),('COSTANZO TOTI','C',100),('GRASSO DAVIDE','C',101),('SGROMO BERNARDO','C',102),('PANIFICIO CIAPPINA','C',103),('ARCA INDUSTRIAL SUPPLIES S.R.L.','C',104),('','C',105),('ZUMBO DR.TOMMASO','C',106),('PUNTO SIDIS DI SACCA PASQUALE','C',107),('BARRARA SALVATORE','C',108),('IMEX P-TRADE S.R.L.','C',109),('','C',110),('DOTT.AGR.VINCENZO CILONA','C',111),('PIANEGONDA DARIO S.A.S.','C',112),('DALOI GIUSEPPE AUTOFFICINA','C',113),('BARBARO MOTO SAS','C',114),('','C',115),('DE FRANCESCO VINCENZO','C',116),('RICAUTO SPA','C',117),('GERICO SAS','C',118),('GISMONDO VINCENZO','C',119),('','C',120),('IMPRESA COSTR.EUROEDIL DI MOIO F.SC','C',121),('SUD.INFORMATICA S.R.L.','C',122),('CRAZY MOBIL SNC DI GAGLIOTI G.PPE','C',123),('A.D.S.S.E. SRL DI RUGGIERO PACIFICO','C',124),('','C',125),('GRAMUGLIA VINCENZO','C',126),('LUIGI NIZZARI SUBAGENTE ALLIANZ SPA','C',127),('BRUZZESE ANNUNZIATA','C',128),('HOTEL STELLA MARIS SRL','C',129),('','C',130),('ATRE EXPRESS SRL','C',131),('GATTO ANTONINO','C',132),('BO.GE.CO. S.R.L.','C',133),('VALENTINO TECNICA SNC','C',134),('','C',135),('NASO GIUSEPPE','C',136),('GALIBERTI LUCIANO STEFANO','C',137),('MURACE FRANCESCO','C',138),('GEOM.GIOFFRE SAVERIO','C',139),('','C',140),('PIANA PALMI MULTISERVIZI S.P.A.','C',141),('GOLDEN GROUP SNC','C',142),('DE CREA FORTUNATO','C',143),('LUPPINO MICHELE','C',144),('','C',145),('STILLITANO SRL','C',146),('FERREDIL DI MANUCRA GEOM.MARIO','C',147),('L & R LABORATORI E RICERCHE SRL','C',148),('EDIL SUD DI MALACRINOALESSIO G.','C',149),('','C',150),('FRESH BLU DI MELISSARI CETTINA','C',151),('BAGALA ROBERTO','C',152),('SERGI ROSALBA','C',153),('CO.MEC. DI VIOLI DOMENICO','C',154),('','C',155),('RADIO FRECCIA NET WORK','C',156),('GIOVINAZZO IPPOLITO','C',157),('ELECTRONIC CENTER DI ZAGARI ROSARIO','C',158),('EMPORIO ROGGIO GIUSEPPE','C',159),('','C',160),('CALAFIORE ANTONIO','C',161),('PARRELLO GIUSEPPE','C',162),('RUGGERI & PIAZZA SNC','C',163),('FRESCHEZZA IN TAVOLA DI FOTI ROSA','C',164),('','C',165),('AUGIMERI CARMINE AUTOFFICINA','C',166),('MATTIANI DOMENICO','C',167),('CALDERAZZO GIANCARLO','C',168),('ROMANIN ELVIO STUDIO COMMERCIALE','C',169),('','C',170),('G.TRIPODI SRL','C',171),('DEDMONDO FRANCESCO','C',172),('IDROCAR DI IANTORNO MARIO','C',173),('ZAGARI PAOLO IMP.ELETTRICI','C',174),('','C',175),('SELF AREA AGIP \"LA SOSTA S.A.S.\"DI','C',176),('MARKET MIMMO DI MAMMONE ANNA MARIA','C',177),('OSRAV ALFEO MORET S.P.A.','C',178),('A.S.PALLAVOLO PALMI','C',179),('','C',180),('GN.RISTRUTTUR.DI GANGEMI NICOLA','C',181),('ANNULLATO PRESO PER TRADE EVOLUT','C',182),('PULEIO PASQUALE','C',183),('ROTONDO S.R.L.','C',184),('','C',185),('DOMENICO ORTUSO & C. S.a.s','C',186),('FABIO PIERANGELI','C',187),('EDIL PALMI SAS di CRUCITTI F.SCO &C','C',188),('MLD LOGISTICA E DISTRIBUZIONE SRL','C',189),('','C',190),('HOTEL SANTA CROCE','C',191),('CUBA MOTOR','C',192),('CENTRO SERVIZI AUTO DI FURFARO','C',193),('TRAS PUGLIA DI SPINA GIUSEPPE','C',194),('','C',195),('LAMINAZIONE SOTTILE SPA','C',196),('FULCO DOMENICO OFFICINA','C',197),('DAMICO MICHELE AUTOFFICINA','C',198),('CAPRARI ADRIANO','C',199),('','C',200),('FARINA ANTONIO','C',201),('CALABROROSARIO DOMENICO','C',202),('NUOVA CASALAUTO DI CREPALDI GIAN','C',203),('AS TAUREANA CARS DI PALMA FEBBO','C',204),('REPACI TEODORO TRASPORTO MERCI','C',205),('GIEMME IMPIANTI DI IANNELLO MICHELE','C',206),('MUSICO S.R.L.','C',207),('GULLI CARMELO','C',208),('CASCIANO GIACOMO','C',209),('MARKET MARTURANO LETTERIO','C',210),('FOGLIARO FORTUNATO & C. SNC','C',211),('RAVAGLI VITTORIO FERRAMENTA UTENS.','C',212),('GRIMI AUTO DI GRIMI DOMENICO SNC','C',213),('BARONE DOMENICO','C',214),('RANUCCIO SONIA AZIENDA AGRICOLA','C',215),('A.B.COMPUTING DI BAGALAANTONIO','C',216),('GIOIA CAR SRL','C',217),('TOTO MONTAGGI DI MARINO ANTONIO G.','C',218),('GEOM.GIUSEPPE OLIVERI','C',219),('IMPRESA COSTR.EDILI CILONA G.PPE','C',220),('TERMOIDRAULICA DI TALLARIDA G.PPE','C',221),('RIGHETTINI EMANUELE','C',222),('CM INDUSTRIE SRL','C',223),('AUTOGOLD DI DE SANCTIS G.','C',224),('RIGON GIAN CARLO AUTOTRASPORTI','C',225),('IMPIOMBATO ANTONINO','C',226),('I.F.E.S.DI CUTRI GIUSEPPE','C',227),('COMPANIE DHOTELLERIE SUISSE SRL','C',228),('LARTE DEL FALEGNAME SNC','C',230),('AUTOSERVICE 2000 SAS','C',231),('SERVICE RICAMBI E ACCESSORI DI','C',232),('CAPPONE MICHELE LAV.VETRI','C',250),('COLELLA FRANCECSO','C',251),('LA PIANA SNC DI BARBARO ANGELINA','C',252),('SURACE GIANFRANCO','C',253),('EDIL CERAMICHE PALMI DI SCHIPILLITI','C',254),('AGOSTINO ROMEO SRL','C',260),('SGROFRANCESCO','C',261),('IMPRESA EDILE DI CERAVOLO GIUSEPPE','C',262),('FICARRA ROBERTO IMPRESA EDILE MOV.','C',263),('CAR SERVICE DI GALLO DANIELE','C',264),('LAGRICOLA DI BALDO FRANCESCO & C.','C',265),('ARENA VINCENZO','C',266),('ROMEO MARIA','C',267),('BERTIM EDILIZIA E COSTA SRL','C',268),('ITALIA TRASPORTI E LOGISTICA SRL','C',269),('STUDIO DI PROGETTAZIONE ARCHITETTO','C',270),('CALOGERO SALVATORE','C',271),('CANANZI AUTO','C',272),('OLEIFICIO BORGESE FILOMENA','C',273),('ASSOCIAZ.DI VOLONTARIATO PRESENZA','C',274),('IPO S.R.L.','C',275),('SMAC SNC & C. DI MERCURI SALVATORE','C',276),('MODAFFERI MICHELE ELETTRAUTO','C',277),('ROMEO FORTUNATO','C',278),('BAR BRUZZESE FRANCESCO','C',279),('AUTOFFICINA MARCELLO GULLI','C',280),('SCAVA ROSARIO','C',281),('CASELLA DOTT.MARIO DOMENICO','C',290),('SAFFIOTI ROCCO','C',999),('POINT CAR SERVICE SAS','C',1000),('AUTORICAMBI PRAIA SAS DI UGO','C',3001),('AUTOF.CATANANTI DI DIBIANCO GIOV.NI','C',3002),('AUTOPIU DI GRIFFO V.&.C. sas','C',3003),('ARMENI AUTO DI ARMENI ANDREA & C.','C',3004),('LA BELLA ROBERTO','C',3005),('TERMOIDRAULICA DI IANNINO SOCCORSA','C',3006),('AUTOBUDA DI ZAPPIA ANTONELLA','C',3007),('BELCASTRO ROSARIO R.B.AUTOR.','C',3008),('PNEUSERVICE SRL','C',3009),('AUTOFORNITURE MILANESI SPA','C',3010),('ORTOLANI CARLUMBERTO','C',3011),('AZZARA CARMELO','C',3012),('AUTOSILA S.R.L.','C',3013),('ATTISANO MICHELE','C',3014),('AMMENDOLA GIUSEPPE','C',3023),('ANNULLATO AUTOPARTS DI FIEROMONTE T','C',3026),('CENT.TELEFONIA DE PASCALE DANIELA','C',3027),('TYRE HUNTER DI CANTISANI CARMINE','C',3028),('AUTOFFICINA AMMENDOLA DEMETRIO','C',3029),('CENTER CAR S.R.L.','C',3032),('MACELLERIA DI BARBERA FRANCESCO','C',3101),('BLEVIO PIETRO','C',3103),('AZIENDA AGRICOLA SURACE GIUSEPPINA','C',3104),('C.F.S.CARRELL FULL SERVICE DUE sas','C',3106),('IMPRESA COSTRUZ.GEOM.CIAPPINA F.SCO','C',3107),('BELLISSIMO ANTONIO','C',3108),('BARBARO GIUSEPPE DITTA','C',3111),('BARILLARI GABRIELE AUTORICAMBI','C',3112),('BORGESE GIUSEPPE','C',3113),('BARA GIUSEPPE OFF.& RICAMBI','C',3114),('AUTO IARIA S.R.L.','C',3115),('TRIPODI GEOM.ANTONINO IMPRESA EDILE','C',3120),('BARRECA DEMETRIO','C',3129),('BOVA VINCENZO','C',3139),('BRUNO AUTORICAMBI S.a.s.','C',3145),('CILIONE & C. SRL','C',3200),('CANDIDO GIULIO','C',3202),('LUDDENI MARIO MARKET DEL RIC.','C',3205),('RIOTTO SAVERIO','C',3207),('MOTORSPORT DI CIRICOSTA G.PPE','C',3209),('CE.D.R.A. DI CUCUNATO NATALE','C',3211),('S.D.S. CARBURANTI S.A.S.','C',3215),('TURANO G.PPE & C.snc AUTORICAMBI','C',3216),('CILIONE CONSOLATO !! SOSPESO !!','C',3217),('PUGLIESE ERNESTO','C',3219),('CALABRO LORENZO','C',3220),('LAGANADOMENICO','C',3222),('ANNULLATO INVIATO A TETI A.','C',3224),('AUTO SERVICE DI IOPPOLO G.GIULINO','C',3226),('TRIPODI FORTUNATO','C',3228),('COMEDIL DI P.SGRO & C. sas','C',3232),('SGROORLANDO AUTORICAMBI','C',3234),('DOTT.PALMIRO ZAPPONE','C',3236),('POLIRICAMBI SRLS','C',3240),('ROCCHETTO RENATO','C',3241),('CURRA ANTONINO','C',3242),('COLOSI FRANCESCO INFISSI IN','C',3244),('CUORE ANTONIO','C',3245),('GRAMUGLIA DOMENICO OFF.MECC.','C',3246),('CALIO srl RICAMBI AUTO','C',3248),('COZZA ELIO','C',3252),('OERRE PARTS S.R.L.','C',3257),('EURODIESEL DI CASSALIA MAURIZIO','C',3262),('@ 2X INSTALLAZIONI DI PUGLIESE A.','C',3263),('TECNO TRADE SRL','C',3265),('CROCCO FRANCO','C',3267),('CARTELLA MASSIMO','C',3269),('SCARMATO FORTUNATO','C',3275),('C.M.G. BRAM SRL','C',3278),('CARONZOLO ROSARIO','C',3279),('CALIPARI SERAFINO','C',3286),('EDIL DORA DI BRUNO ROMEO','C',3294),('EXIDE TECHNOLOGIES SRL','C',3295),('IL TEMPIO DEL RIC.DI GIORDANO LUIGI','C',3301),('OFFICINA DE GRAZIA SAS','C',3302),('REGALI E SORRISI DI GUERRERA D.CO','C',3304),('UNIFLUID SUD SRL','C',3305),('CONSORZIO PDA','C',3307),('SURACE ROCCO','C',3308),('DITTA CILONA VINCENZO','C',3309),('DAGOSTINO AUTORICAMBI','C',3310),('DATTOLA AUTO & C. snc','C',3312),('DE NISI DOMENICO','C',3315),('IMPRESA COSTRUZ.SIMONETTA VINCENZO','C',3316),('AUTORICAMBI E ACCESSORI DI MARZIA','C',3317),('CHIAPPALONE ANNUNZIATO','C',3319),('EUROPA RICAMBI DI DE MARIA CARLO &','C',3320),('BRUZZESE FRANCESCO','C',3323),('DE GREGORIO SRL','C',3325),('LOGATTO VINCENZO V.L AUTORICAMBI','C',3326),('TARUSCIO GIOVANNI','C',3331),('TODARO SAVERIO','C',3334),('FERRARO LUIGI','C',3403),('AUTORICAMBI ERRIGO C.& C. S.A.S','C',3404),('PISANO GAETANO','C',3409),('AGRINOVA DI CORRADO NICOLA','C',3501),('FE e SA & C. DI SANTORO B. sas','C',3502),('CAR SHOP AUTORICAMBI','C',3503),('BRIGA LUCIANO','C',3504),('FIDALE GIACOMO & C.sas CAR SERVICES','C',3505),('FERRERO MASSIMILIANO IF.AUTORIC.','C',3506),('ASSOCIAZIONE RADIOAMATORI ITALIANI','C',3507),('FALBO ANTONIO','C',3508),('DAGOSTINO BIRRE DI GINO','C',3510),('FULLONE MARIO','C',3512),('EMMEDUE COSTRUZIONI','C',3514),('PALMCART OLIVERIO GIUSEPPE','C',3516),('BORGESE RANIERI & CLAUDIO SNC','C',3519),('FUTIA SALVATORE','C',3522),('FRANCHINA MASSIMILIANO Autoricambi','C',3523),('FUTIA DOMENICO Ricambi Auto','C',3525),('IMPRESA EDILE SCHIPILLITI V.ZO','C',3526),('MEDITERRANEA TRASPORTI SOC.COOP','C',3527),('AGENZIA LOGISTICA MERIDIONALE','C',3528),('RAGO UMILE RICAMBI-OFFICINA','C',3531),('SE.MA.C. SRL','C',3534),('IMPRESA EDILE GAGLIOSTRO V.ZO','C',3541),('FIGLIUZZI SALVATORE','C',3544),('FRAGOMENI DOMENICO','C',3548),('FIEROMONTE & CHIAPPALONE sas','C',3551),('F.T.R. F.LLI TRIULCIO SRL','C',3553),('GIORDANELLI SERGIO','C',3602),('F.LLI GUIDA sas','C',3603),('GRILLO GIUSEPPE','C',3604),('GALLO STANISLAO MANGIMI CONCIMI','C',3605),('COARSA SOC.CONS.IMP.SANLURESI SRL','C',3606),('PASCHOU MARIA','C',3607),('PELLEGRINO PIETRO ROCCO AZIENDA','C',3608),('ROSANNA EX GRM RICAMBI','C',3609),('INDUSTRIA BOSCHIVA DICH.STEL.','C',3610),('GILBERTO DROGHETTI DOTT.','C',3611),('GALLE NICOLA','C',3615),('EUROELETTRA S.N.C.DI NICOLOSI &','C',3616),('PALETTA ALBERTO AUTORIC.','C',3617),('GIOFFRE GIUSEPPE','C',3620),('PRINTING CENTER S.A.S.','C',3621),('SUD CARNI DI LEONELLO PASQUALE','C',3622),('GIOVINAZZO AUTORICAMBI','C',3623),('GENCARELLI GIUSEPPE','C',3627),('GRASSO FRANCESCO','C',3631),('GALLO GIOVANBATTISTA','C',3632),('CIESSEGI SNC DI CATOZZA MARIO & C.','C',3639),('AUTOMARKET DI PAPALIA ROBERTO','C',3646),('CENTRO RICAMBI DI MARINO & C.SNC','C',3700),('IMPRESA EDILE RECHICHI GIANCARLO','C',3701),('G.R.RICAMBI SRL','C',3704),('BRUZIA RICAMBI DI HRISCU CARMEN','C',3705),('AUTORIC.IANNI DI IANNI FRANCESCO','C',3706),('ITAL RICAMBI DI IAROPOLI V.& C.sas','C',3708),('INFORTUNA SANTO','C',3710),('IOVINE NICOLA','C',3711),('FILIPPONE ANTONINO','C',3712),('INFANTINO GIUSEPPE ELETTRAUTO','C',3717),('IDA RAG.ENZO','C',3719),('DE MASI PASQUALE DE.CA AUTORICAMBI','C',3800),('CANTIERI NAUTICI COSTA VIOLA','C',3803),('BG.CAFFE DI GIUSEPPE BALO','C',3805),('GUARASCIO LUIGI AUTORICAMBI','C',3806),('GIOFFREGAETANO','C',3807),('CENTRO AUTO MOTO DI LAGANA sas','C',3810),('LONGO CLAUDIO','C',3811),('LAGANA GIOVANNI','C',3814),('EDILDECORO DI FORTUGNO & SAFFIOTI','C',3815),('ATC DI PUGLIESE ALBERTO & C.SAS','C',3818),('LONDINO SERGIO','C',3822),('ANANIA ROCCO & GRILLO F.SCO SNC','C',3825),('FARMACIA FORGIONE DANIELA','C',3827),('AUTORICAMBI RAG.SAVERIO LAGAZZO','C',3828),('SERVICE AUTO SAS CENTRO REVISIONI','C',3829),('MASSARA NICOLA ACCESSORI PER AUTO','C',3832),('FANELLI GIOVANNI','C',3833),('LOIACONO GIUSEPPE','C',3835),('ANNULLATO UTILIZZATO PER IL WEB','C',3843),('ANNULLATO','C',3844),('AUTORICAMBI LAGANAROBERTO DI','C',3845),('ANNULLATO UTILIZZATO PER IL WEB','C',3846),('MELITO GIAMPIERO','C',3901),('MRC RICAMBI S.R.L.','C',3903),('MARONGELLI ANTONIO','C',3908),('MORELLO ANTONIO','C',3911),('M.A.I.R.S.AGATA DI DE BENEDETTO N.A','C',3912),('MONTELEONE MICHELE Autoricambi','C',3913),('FOTI PASQUALE','C',3914),('METALLURGICA RIVORALESE SPA','C',3915),('MARTINO DOMENICO','C',3917),('MALIZIA PASQUALE','C',3918),('DE SIBIO MECCANICA sas DI DESIBIO D','C',3924),('PUBBLIWORLD DI GULLO ANTONINO','C',3926),('MAZZITELLI & TASSONE S.N.C.','C',3927),('LANDRO AUTOMOBILI','C',3928),('MEZZATESTA ANTONIO','C',3931),('MOTOR SHOP Autoricambi sas','C',3932),('REPACI GIOVANNI','C',3933),('MERLINO CARMELO','C',3934),('ONESHOT S.A.S.','C',3935),('MANARITI GIUSEPPE','C',3936),('FESTA LEONA','C',3937),('CB SPECIAL COMPONENTS DI BERTOT','C',3939),('EDICOLA ARCURI LUCIA','C',3942),('LANDRO LEONE','C',3943),('COOPERATIVA REGGINA 08','C',3944),('MUZZI BRUNO','C',3952),('CAMERA ANTONIO','C',3957),('MAMONE GERARDO CENTRO RICAMBI AUTO','C',3961),('MALARA GIUSEPPE','C',3962),('R.C. TUNING DI LORENZO ANTIMO','C',3963),('MAIO CESARE','C',3966),('MACELLERIA LEONELLO SALVATORE','C',3967),('CAMERA DOMENICO','C',3972),('COZZOLINO SAVERIO AUTOPARTS','C',3976),('MARINO GABRIELE & F. sas','C',3978),('SYSTEM SUD SNC','C',3981),('MSC AUTOVEICOLI DI MUSICOARNALDO','C',4001),('GALATI ANTONIO AUTOTRASPORTI','C',4003),('NILAUTO srl','C',4004),('NUCERA FILOMENO','C',4007),('NUCERA MAURIZIO','C',4008),('OTTOBRE TRADE SRL','C',4205),('CONDOLUCI MARIA GIUSEPPA','C',4207),('PUGLIESE SALVATORE RICAMBI AUTO','C',4208),('NOVEMBRE ROSANNA MINUT.E MECC.','C',4210),('CABBOI GRAZIELLA','C',4212),('PETRONAS LUBRICANTS ITALY SPA','C',4213),('PERRI MIMMO','C',4215),('D.SSA ZAPPONE LILIANA','C',4222),('PUPO GIUSEPPE AUTORICAMBI','C',4226),('OFF.MECC.FRATELLI PIRILLI','C',4229),('RACO ELISABETTA RIF.TAMOIL','C',4230),('PICCOLO MARIO AUTORICAMBI','C',4232),('AUTORICAMBI VENTURA VINCENZO','C',4236),('TECNO EDIL DI VIOLA SANTO','C',4242),('PALMA AUTORICAMBI S.R.L.','C',4243),('PULIMENI ANTONIO & C. sas','C',4244),('PALERMO OLIVA Autoricambi','C',4246),('MAX MOTO DI PELLEGRINO M.A.','C',4249),('POLIMENI FRANCO','C',4256),('PEZZANO PIETRO','C',4261),('POLITI FRANCESCO Elettrauto','C',4263),('TROPEANO STEFANO RICAMBI AUTO','C',4303),('ROPERTO ALDO CENTRO COMMERC.RICAMBI','C',4304),('TENUTA GIANFRANCO AUTORICAMBI','C',4305),('F.LLI ROSE Snc di UMILE & FRANCO R','C',4308),('AUTORICAMBI RUGGIERO sas','C',4310),('VIOLA ERMANNO STAZ.SERV.ERG','C',4312),('R.AUTO IN snc','C',4313),('GOMMAUTO DI RODA & C. snc','C',4314),('DECA S.a.s. DI G.PPE DE PASCALI &C.','C',4318),('A.G.C.SRL','C',4320),('NUOVA RIMA DI CAPULA RAFFAELE','C',4324),('CRUCITTI GROUP SRL','C',4325),('INFORAMA DI DENISI V.ZO E C.SAS','C',4328),('EVALTO FRANCESCO & FIGLI','C',4401),('SCHIPANI RICAMBI','C',4404),('SPINA ALEXANDRO','C',4405),('SCUOLA CALCIO VIGOR PALMI 2004','C',4406),('SURIANO ALV SAS','C',4407),('AUDINO SAVERIO','C',4408),('SOBER RICAMBI AUTO sas','C',4409),('ROMEO VINCENZO & C. SNC','C',4411),('SAIM snc DI TAVELLA ANTONIA','C',4414),('SAINATO PASQUALE','C',4415),('SMEC SRL','C',4416),('F.LLI SINOPOLI snc Ric.Auto-Moto','C',4417),('F.LLI SPINELLI snc','C',4418),('AZ.AGR SORGES DI ROSA SORLETI','C',4420),('DUEMME S.A.S.','C',4421),('SPOLETO NUOVA AUTOACCESSORI','C',4422),('LOMBARDO DOMENICO FU GREGORIO','C',4423),('MULTISERVIZI M.G.D. DI PARRELLO','C',4427),('SCIARRONE SPA','C',4429),('SCRIVO ANTONIO','C',4432),('SERRATORE FRANCESCO','C',4440),('ANNULLATO UTILIZZATO PER IL WEB','C',4441),('LA BOTTEGA DEL RESTAURO DI FOTI R.','C',4442),('EREDI SURACE LORENZO di SURACE','C',4443),('S.D.R. sas','C',4446),('SAMA & CODISPOTI SAS','C',4451),('SCIONTI ROCCO Jr.','C',4452),('SOFI PAOLO','C',4454),('SISCA ANTONIO MECCANICO ARTIGIANO','C',4460),('ITALCOGE SPA','C',4463),('ANNULLATO TASSO SAL','C',4466),('BISCARDI LUIGI TUTTO PER LAUTO','C',4501),('B.P.SOLLEVAMENTI di ETTORE BELLINI','C',4502),('TROVATO AUTORIPARAZIONE','C',4506),('TASSONE PASQUALE','C',4514),('LA TIRRENICA DI CAPUA GIUSEPPE','C',4517),('TASSONE sas DI TASSONE GUERINO & C.','C',4521),('TASSO ANTONIO LEONE AUTORICAMBI','C',4522),('MAZZA ANDREA','C',4523),('TORCHIA ANGELO','C',4525),('TAVELLA ANTONIO','C',4533),('ANNULATO','C',4600),('VENTRA SAS di VENTRA VINCENZO & C.','C',4601),('VALOTTA FRANCESCO','C',4606),('VONO S.A.S. DI VONO G.& CO.','C',4607),('MEG DI ROMEO CARMELO','C',4611),('VENTRE AUTORICAMBI DI VENTRE G.PPE','C',4612),('TECHNO BUS SRL','C',4613),('LA FLAVIA DI FILIPPO SPINELLI','C',4614),('VRENNA LUCA MECC.& SICUREZZA','C',4615),('DELIZIE DI CALABRIA S.A.S DI ARENA','C',4621),('GENTILE FRANCESCO','C',4702),('ZICARELLI SALVATORE','C',4704),('ZAPPIA CARMELO','C',4705),('ATTENZIONE ! LA MECCANICA 2','C',5000),('EVA TECH S.A.S.DI DANIELE MEGALIZZI','C',5002),('RESTUCCIA ROSA RITA BOSCH CAR SERV.','C',5003),('PIMEC SRL','C',5004),('DAVIGIUSEPPE','C',5007),('VITETTA ANTONINO','C',5009),('STIL GOMMA DI NINO IANNELLI','C',5011),('ANNULLATO UTILIZZATO PER IL WEB','C',5017),('OFF.MECCANICA ROTONDO ANTONIO','C',5019),('COMBUSTION AND ENERGEY SRL','C',5020),('HOTEL RESIDENCE \"ARCOBALENO\"','C',5022),('BRANDO CARMELO','C',5024),('CASILE ROBERTO','C',5029),('AVVENTURA SOC.COOPERATIVA ARL','C',5035),('RA.DI SRL','C',5036),('CENTRO GOMME DI CONDINA GIOVANNI','C',5040),('JOLLY FRUTTA DI PAPASERGIO ANGELA','C',5043),('SURACE ANTONINO','C',5055),('FORTEBUONO METALLINFISSI S.r.l.','C',5056),('BAGALAGIUSEPPE','C',5057),('CASEIFICIO IL GRANATORE DI ZAGARI','C',5060),('RUSSO GAETANO AUTORICAMBI','C',5062),('RAFFAELI SRL','C',5073),('ALESSI PINA IMPRESA EDILE','C',5075),('ERREBI SRL','C',5076),('LA CORTE DELLA CARNE DI PEPPINO','C',5078),('MANOCCIO GENNARO','C',5084),('DE CARIA MOTORS SRL','C',5085),('DOTT.MARCELLO MELARA','C',5087),('F.LLI ATTISANO SRL ORTOFRUTTA','C',5088),('GIOFFRE PASQUALE','C',5089),('M.G. LOGISTIES SERVICES SRL','C',5091),('CONSORZIO ACQUEDOTTO VINA','C',5094),('MD COLLECTION DI MARRA DOMENICO','C',5100),('CRUCITTI SRL','C',5101),('VITALONE ROCCO OFF.MECC.','C',5102),('MOTORCYCLE & AUTO REPAIRS','C',5107),('QUASED SRL','C',5108),('CADI SERVICE S.A.S.','C',5110),('CO.DI.M. SRL','C',5114),('LEUZZI GIANCARLO','C',5115),('SCUTERI FRANCESCO','C',5116),('DI PINO TINDARO AUTORICAMBI','C',5117),('COMUNE DI SEMINARA','C',5123),('MATINA DOMENICO','C',5125),('ACCARDO ANNUNZIATO FILIPPO','C',5127),('BOLIGNANO ROBERTA DONATELLA','C',5131),('EVENTI FIORITI DI ROBERTA ANGALO','C',5132),('RAZIONALE ROSARIO HIPPONIO AUTO EL.','C',5133),('ERREMME di ROMEO DOMENICO MASSIMO','C',5134),('MAXICAR DI A.TRICOMI','C',5136),('MONTELEONE MARIA MADDALENA','C',5141),('REGGIORICAMBI DI MICHELANGELO','C',5142),('IL GENIO DEL PANE DI GARZO GREGORIO','C',5143),('ANNULLATO UTILIZZATO PER IL WEB','C',5144),('DAL MASO GIADOMENICO','C',5146),('RIZZITANO ANTONINO','C',5147),('MAURO AUTORICAMBI DI BADAMI MARIA','C',5150),('EDIL QUATTRO DI SAPONE G.& C. SNC','C',5151),('MARIA MADDALENA SICA','C',5163),('CILONA ANTONINO','C',5164),('MAGAZZU ARREDAMENTI','C',5165),('BORGESE VINCENZO','C',5166),('ARCHIMEDE DI MATTIANI PASQUALE','C',5169),('BAR RISTORANTE ULIVARELLA','C',5174),('CENTRO RICAMBI CALABRESI SNC CRC','C',5178),('PINNERI ANTONINO','C',5179),('F.LLI SCORDAMAGLIA S.N.C DI F.SCO','C',5182),('PANUCCIO ING.DOMENICO IMPR.COSTRUZ.','C',5183),('LOMBARDO ALLESTIMENTI','C',5195),('BOSCHETTO FRANCESCO ELETTRAUTO','C',5198),('PONTECOPROGES SRL','C',5199),('G.C.SERVICE DI GAGLIOSTRO CARMELO','C',5203),('PELLICANO S.R.L.','C',5208),('MACELLERIA DA ROCCO DI PRONESTI','C',5209),('MAGNETI MARELLI AFTER MARKET PARTS','C',5210),('IL POLLICE VERDE DI FARFAGLIA','C',5212),('COMUNE DI PALMI','C',5215),('BARA MOTO DI BARA FABIO','C',5225),('SAFFIOTI MASSIMO EMILIANO','C',5226),('LOIACONO GIULIO','C',5231),('SETTECERZE VINCENZO','C',5232),('BAGNOLI ROBERTO ELETTRAUTO','C',5234),('ALAMPI SALAVATORE IMPRESA EDILE','C',5236),('PANETTA CARLO','C',5239),('MYPLANET SRL','C',5240),('AUTO 3 snc F.LLI ARTESI','C',5241),('MATTIANI GIUSEPPE','C',5243),('ASP N.5 DI REGGIO CALABRIA','C',5244),('CANNIZZARO GIUSEPPE','C',5246),('SORICAL SPA','C',5248),('ROSACE GIUSEPPE','C',5249),('MOTORSPORT SNC DI SALVATI G.PPE & C','C',5250),('SLESC-SCHITRY DI SCHIPILLITI C.LO','C',5251),('LAURENDI GIOVANNA','C',5252),('OFF.MECC.GANGEMI DOMENICO','C',5253),('CUSAN di SANTORO & C. snc','C',5256),('MAISANO MARIANNA EURORICAMBI','C',5259),('NICOLI SANTINO ASS.PIAGGIO','C',5260),('ELETTROSISTEM DI LAFACE GIUSEPPE','C',5261),('F.LLI CAPOGRECO snc','C',5263),('COSENTINO FRANCESCA','C',5264),('TERMINE CLAUDIO AUTORICAMBI','C',5266),('CHIRICO PAOLO','C',5267),('MERCURI VINCENZA','C',5268),('AZIENDA AGRICOLA BIVONE MARIA','C',5269),('ANDREARCHIO ALESSANDRO','C',5271),('SICILIANO PASQUALE','C',5272),('APEIRON S.A.S DI F.SCO BARONE & C.','C',5273),('STAR SERVICE PICCOLA SOC.COOP.ARL','C',5274),('ZOCCALI ANTONIO','C',5276),('CONDELLO MARCO ALIMENTARI','C',5278),('MARTINO PAOLO PIETRO','C',5279),('PRELIBATEZZE DI RITA ARICO','C',5280),('AMORUSO LUIGI SRL','C',5281),('MAZZULLO LUCIANO','C',5282),('POLIAUTO DI POLIZZO UMILE','C',5286),('RIGANOFRANCESCO','C',5289),('AMBROGIO GIUSEPPE','C',5290),('ISOTERM DI VIGLIANTE GEOM.D.CO','C',5296),('MACELLERIA MICHELE LUPPINO','C',5297),('MARTORANO PASQUALE','C',5299),('TECNOVIDEO DI LAGANA','C',5301),('ASSIST.RENAULT ARCISIACONO ORAZIO','C',5302),('AUTOSERVICE MINNITI S.A.S.','C',5305),('CRO.MAR TRONIC DI G.MARZULLO','C',5308),('CRD SRL','C',5310),('VALENTE PNEUMATICI srl','C',5312),('SPADA AGOSTINO','C',5316),('RAMONDINO MARCO','C',5317),('SHOPSTORE SRL','C',5319),('LOIACONO ANNALISA','C',5321),('COLLURA ALESSANDRO','C',5324),('AP.RICAMBI DI PLUMARI ANTONINO','C',5325),('CENTRO DIAGNOSI DI GRAZIANO','C',5326),('MILITANO FRANCESCANTONIO','C',5327),('EUROSERVICE 2000 DI GIANLUCA CIMINO','C',5329),('CELESTI PIETRO ELETTRAUTO','C',5336),('AUTORICAMBI GABRIELE DI GABRIELE','C',5337),('JONICA RICAMBI SNC DI MUSCOLINO E','C',5338),('THE BEST AUTORIC.S.A.S.DI GALLO','C',5339),('VOLPE CARMELA OFF.RICAMBI AUTO','C',5341),('LOCCASIONE snc di PELLICANO P & C.','C',5342),('AZ.AGR.CARMELITANO MATTEO','C',5343),('PRISCOGLIO GIUSEPPE FRANCESCO','C',5344),('ANNULLATO INVIATO A motorline','C',5347),('PUTRINO DOMENICO STUDIO DI GEOLOGIA','C',5348),('CAPUTO NATALE AUTORIC.','C',5350),('SPORTAUTO di GAGLIOSTRO VINCENZO','C',5355),('ZERBI FABIO','C',5357),('ARICONATALE','C',5358),('VALOTTA LEOLUCA OFF.ELETTROMEC.','C',5360),('BARBARO CONCETTA LUCIA','C',5361),('PENNESTRILUIGI OFF.MECC.','C',5364),('RETTIFICHE MANNINO SRL','C',5366),('SPAGNOLO DOMENICO','C',5373),('AUTORICAMBI DLC DI ABOSSIDA G&C sas','C',5375),('AMBROGIO DOMENICO','C',5376),('BENEDETTO STEFANO','C',5377),('NICOLETTA GIUSEPPE','C',5378),('ESSERICAMBI DI ANNA MARIA SCHIRRIPA','C',5379),('DOTT.DOMENICO FARERI','C',5383),('V.I.M.A.R. SAS','C',5384),('AUTORICAMBI \"RUGGERI\" DI C.&D.CAR','C',5385),('ICOREL DI IERACE ROBERTO','C',5386),('S.G.AVIATION SRL','C',5387),('SUPERMERCATO PRINCI SAS','C',5388),('CALABRIA LUCIANO AUTORICAMBI C.D.R','C',5389),('MISALE GIUSEPPE','C',5390),('LASCALA DOMENICO','C',5393),('DELIVERY EXPRESS DI NUCARA A.','C',5394),('CUCCI FERDINANDO AUTORICAMBI','C',5402),('LENTINI MONTEDORO AUTORICAMBI','C',5407),('BORGESE CARMELO','C',5408),('TECNOSTUDIO DI ZACCURI GIOVANNI','C',5409),('SOC.COOP.ARCOBALENO A.R.L.','C',5411),('DE.SAL.CAR. DI DE SALVO ROBERTO','C',5412),('PM 2 DI MILITANO NATALE','C',5416),('EURO CAR DI BARONE ANTONINO','C',5417),('ROSINA ANTONINO','C',5418),('PALMERI MICHELE','C',5419),('S.D.CAR DI SALVATORE DOMENICO','C',5421),('CENTRO RICAMBI MINNITI','C',5422),('A.B.S. AQUILA BROADCASTING SETS','C',5424),('EDIL CASA DI DANDREA DOMENICA','C',5427),('RICAMBI 2000 S.N.C. DI LAGONIA &','C',5428),('KRIOS AC S.R.L.','C',5429),('MUSICO ANTONINO','C',5430),('NSA NUOVI SERVIZI AUTO S.P.A','C',5432),('FRAMEL SRL','C',5433),('ANNUL.LA BELLA FRANCESCO','C',5434),('IMPIOMBATO ANTONIO','C',5435),('ALFIERI SALVATORE','C',5436),('PASTIFICIO LANTICO MULINO','C',5437),('RICAMBI INDUSTRIALI S.R.L.','C',5438),('ANNULLATO INVIATO A CARPOINT','C',5439),('BARBIERI AUTORICAMBI di COSMA','C',5440),('SGRO GIUSEPPE','C',5441),('GIOIA HOSPITAL','C',5442),('AUTORICAMBI MAMONE PEPPINO','C',5444),('LA SOSPENS LIDO DI GABRIELE PIETRO','C',5445),('MICHELE SURACE DOTT.COMMERCIALISTA','C',5446),('CERENZIA GAETANO','C',5447),('BARBARO CARMINE','C',5448),('CALANNI RINDINA SPRINT AUTORICAMBI','C',5449),('ALAMPI SANTO','C',5450),('GIDAR srl','C',5451),('MARTELLI GIUSEPPE','C',5452),('OFF.MECC.BARBERA MATTEO','C',5453),('MARIANO GAETANO RIC.OFF.GOMME','C',5454),('CANNISTRA FRANCESCO','C',5455),('PIZZINO GIUSEPPE','C',5456),('GRIPPAUDO VINCENZO','C',5457),('SCANDURRA TIZIANA DIMENSIONE AUTO','C',5458),('AUTOSHOP S.R.L.','C',5459),('AUTORICAMBI DIANA ROBERTO & C.SAS','C',5460),('OLIVERI FRANCESCO','C',5461),('COSENTINO VITTORIO','C',5462),('C&P CERTIFICAZIONI S.R.L..','C',5463),('AR.RICAMBI SNC ARUTA SALV.& SANDRO','C',5464),('MAZZA ANTONIO','C',5466),('GANGEMI GIUSEPPE','C',5467),('STUDIO LEG.AVV.PELLEGRINO PASQUALE','C',5468),('OLIVERIO GIOVANNI','C',5469),('CASTAGNA PASQUALE AUTORICAMBI GOMME','C',5470),('GRAFIA PUBLICITA DI CIPRI GIUSEPPE','C',5471),('SAIJA ANGELO','C',5472),('CILIBERTO RENATO','C',5473),('CATANZARO SALVATORE','C',5474),('EUROAUTO srl','C',5475),('AGENZ.VIAGGI E TURISMO DE NICOLA','C',5476),('LA CONCORDIA SNC','C',5477),('MACOS srl','C',5478),('SIC.COM. S.A.S.','C',5479),('DONATO DANIELE AUTOR.','C',5480),('TROPICAL FRUIT DI LUPPINO FRANCESCO','C',5481),('SCIARRONE VINCENZO RICAMBI','C',5482),('CLIMAUTO DI TRAPASSO GIUSEPPE SNC','C',5483),('DABATE ORAZIO C.R. CENTRO RICAMBI','C',5484),('LB RICAMBI AUTO SAS','C',5485),('FAR.O.L.RICAMBI srl FAROL','C',5486),('CAPRINO ANTONIO AUTORICAMBI','C',5487),('MEGNA ANTONIO','C',5488),('MARINCOLO SERAFINO ELETTRAUTO','C',5489),('TECNORICAMBI SNC','C',5490),('PRESTIPINO SALVATORE','C',5491),('COSENTINO GIUSEPPE','C',5492),('SANTORO ANTONINO','C',5493),('R.S.STORE SRL','C',5494),('DE LUCA SERVICE DI DELUCA F.SCO SAS','C',5495),('AUTORICAMBI BRUNO SERGIO','C',5496),('INDUSTRIAL POINT S.R.L.','C',5497),('ANNULLATO PRESO PER IL WEB','C',5498),('MORABITO LEONARDO ITALRICAMBI','C',5499),('PENNA ANTONINO IMP.AGIP 8898','C',5500),('CARUSO ROCCO','C',5501),('COMPUTER & INTERNET DI FORTUNATO','C',5502),('IGRO SUD DI MERCURI GIANCARLO','C',5503),('PISANELLI SANTO','C',5504),('PISANO ANTONIO','C',5505),('RUFFO GELSOMINA GFC AUTORICAMBI','C',5506),('SUORE SALESIANE DEI SACRI CUORI','C',5507),('ALPA AUTO S.R.L.','C',5508),('ESPOSITO LORENZO','C',5509),('GAGLIOSTRO STEFANO','C',5510),('SIRIO AUTORICAMBI DI UFRASCATI G.','C',5511),('ELETTRAUTO AMATO FAUSTO','C',5512),('ALBANESE GIUSEPPE','C',5513),('ANNULLATO PRESO PER IL WEB','C',5514),('RI.A S.R.L.','C',5515),('AUTOFORNITURE TINO DAGATE','C',5516),('GLORIOSO ADRIANO','C',5517),('AUTORICAMBI ITALIANO di CURCURUTO','C',5518),('AUTOFORNITURE GULLOTTA','C',5519),('MANGIARRATTI EMANUELE IDROTEC','C',5520),('DOMINICI SRL','C',5521),('C.R.A.E.di DI BENEDETTO PROVVIDENZA','C',5522),('SPADA CARMELA SRL','C',5523),('LOMBARDO GIUSEPPE','C',5524),('MANOLA SALVATORE SA.MA','C',5525),('FARACI RAFFAELE TUTTAUTO','C',5526),('AUTORICAMBI CIARCIA CARMELO','C',5527),('MESSINA GIUSEPPE','C',5528),('AUTORICAMBI MEGARA SNC','C',5529),('MOTORPOINT SRL','C',5530),('ANASTASI GIOVANNI','C',5531),('AUTORICAMBI G.S.di SCOZZARICARLO','C',5532),('MA.DI.DI snc AUTOMARKET 2000','C',5533),('R.A.V. DI SORRENTINO LUIGI S.A.S','C',5534),('SA.MA RICAMBI DI SALAFIA MAURO','C',5535),('O.R.A. SPALLITTA & C. snc','C',5536),('TUTTAUTO ALBERGHINA GIANFRANCO','C',5537),('VINCI CONCETTO AUTOTECNICA AUTOR.','C',5538),('ANULLATO UTILIZZATO PER IL WEB','C',5539),('GIANNUSO GIOVANNI','C',5540),('CE.RI. DI CATANIA BIAGIO & C. SAS','C',5541),('ILARDI MARGHERITA & C. SNC','C',5542),('PUNTO RICAMBI SRL','C',5543),('NIGRELLI LUIGI','C',5544),('A.R.A.T. DI MARIO DI GIOVANNI','C',5545),('DILIBERTO AUTORICAMBI','C',5546),('DI COSTA S.R.L.','C',5547),('C.R.SERVICE SRL','C',5548),('ALOISI ANTONIO','C',5549),('PAONE RICAMBI DI PAONE G. SAS','C',5550),('FERICAM DI PISU FEDERICO','C',5551),('SANTOCONO & C. R.A.I.E.snc','C',5552),('VESPO SALVATORE','C',5553),('AUTORICAMBI MOTTA srl','C',5554),('GRASSO & FIGLI sas DI GRASSO D.e C.','C',5555),('VECCHI SNC','C',5556),('F.LLI CHIARAMIDA AUTORICAMBI sas','C',5557),('FUTURA RICAMBI DI SCACCIAFERRO','C',5558),('COSENTINO F.e G. snc','C',5559),('FENECH AUTORICAMBI srl','C',5560),('SAMMITO ANGELA','C',5561),('CENTRO RICAMBI SRL','C',5562),('AUTORICAMBI STRANO SRL','C',5563),('SURIANO PAOLO','C',5564),('AUTORICAMBI GLORIOSO srl','C',5565),('VECAM DI OLIVELLI VENERANDO E C.snc','C',5566),('MEC.CARS RICAMBI DI SCIALFA G.PPE','C',5567),('PENNISI AUTO DI G.PENNISI','C',5568),('AUTORICAMBI MAGGIO GIUSEPPE','C',5569),('GRILLO NICOLA AUTOFORN.','C',5570),('AUTORICAMBI TROGYLOS SRL','C',5571),('PRIVITERA STEFANO','C',5572),('AUTOFFICINA M.A.&.V S.a.s di OSCAR','C',5573),('IEMMOLO VINCENZO','C',5574),('GENNUSA GIUSEPPE AUTORICAMBI','C',5575),('C.R.A. Snc di Salvatore Tanasi & C.','C',5576),('F.LLI MUSARRA sas','C',5577),('S.G.R. DI ROSANO V.ZO & C. sas','C',5578),('ADAMO ROBERTO','C',5579),('ELIOS AUTORICAMBI SRL','C',5580),('DIEMME SRL','C',5581),('NUZZO FILIPPO','C',5582),('AUTOR.FISICARO DI FISICARO FILIPPO','C',5583),('CENTRO RICAMBI DESARI GIUSEPPE','C',5584),('AUTORIC.PROFETA DI PROFETA ONOFRIO','C',5585),('MARTUCCI REMO AUTORICAMBI','C',5586),('CHECKS SRL','C',5587),('AUTOETNA DI INTRESSALVI M.& C. snc','C',5588),('FRICANO ROBERTO & C.RI.AS.sas','C',5589),('GAGLIARDI VALENTINO','C',5590),('MICIELI SALVATORE SNC','C',5591),('GIARDINA GIOVANNI','C',5592),('BOCCHIARO GIUSTO & C. snc','C',5593),('R.D.C. DI VALERIA FILI','C',5594),('PALAZZOLO GIUSEPPE','C',5595),('CARILLO MARTINO AUTORICAMBI','C',5596),('AUTORIC.FAVUZZA SOC.COOP.','C',5597),('F.LLI RUSSO DI GAETANO RUSSO & C','C',5598),('DI.R.MEC SRL','C',5599),('AUTOCOMPONENTI COSENTINO','C',5600),('OLIVERI FRANCESCO AUTORICAMBI','C',5601),('PULIZZI GIOACCHINO','C',5602),('AUTORICAMBI RIITANO DOMENICO','C',5603),('FARRUGGIO BIAGIO','C',5604),('DISTEFANO M.& PELLEGRINO A. S.N.C.','C',5605),('SORTINO S.r.l.','C',5606),('B.R.M. di MARINELLI G.PPE & C. snc','C',5607),('C.A.R. DI CAMPISI ISABELLA','C',5608),('ARENA SRL','C',5609),('AUTOMECHANIKA SRL','C',5610),('PRECAV S.N.C. DI CAVALLARO ROSARIO','C',5611),('COIR srl','C',5612),('DI BELLA SERVICE','C',5613),('GARDEN BAR RACITI PAOLA & C. SNC','C',5614),('TUTTORICAMBI snc DI MUSCIA V.& G.','C',5615),('RICAS RICAMBI E ACCESSORI DI','C',5616),('DI PIETRO AUTOSERVICE DI PIETRO C.','C',5617),('EUROPARTIAUTO DI COCO CARMELO','C',5618),('AUTORICAMBI ODDO CARMELO','C',5619),('LAUTORICAMBI SRL','C',5620),('CUNSOLO MARIO AUTORICAMBI','C',5621),('AUTORICAMBI GRECO FINA','C',5622),('CORRADO CASALE SNC','C',5623),('R.A.I.A.R. srl','C',5624),('CASA DEL RADIATORE','C',5625),('CENTRO CLIMA SNC','C',5626),('SCARLATO SALVATORE ELETTROCAR','C',5627),('VIOLA FRANCESCO','C',5628),('CENTRORICAMBI NIGRO srl','C',5629),('MASTROGIOVANNI SRL','C',5630),('F.LLI PIZZA SNC','C',5631),('VIOLI CARLO','C',5632),('AVV.CARMELA CLEMENTE','C',5633),('DE CARIA ROCCO AUTORICAMBI','C',5634),('DIESEL TRUCKS DI SCADUTO ANGELO','C',5635),('MESSINA FILIPPO AUTORICAMBI','C',5636),('ERRECI DI RAFFAELE CANTAFIO','C',5637),('DOTT.GIUSEPPE FAVIA GUARNIERI SRL','C',5638),('ROSSETTI ALESSANDRO','C',5639),('STAZIONE DI SERVIZIO MANGANI','C',5640),('RONDINELLI GIOVANNI BATTISTA','C',5641),('DALTORICAMBI SRL','C',5642),('CORDIANO MARCELLO','C',5643),('EURORICAMBI DI TUSCIANO GIUSEPPE','C',5644),('AUTORIPARAZIONI IORI SNC.DI GRASSI','C',5645),('RI.CAR. srl','C',5646),('CAPPARELLI FRANCESCO','C',5647),('TUTTO MARMITTE DI BORSELLINO TANINA','C',5648),('PUGLIESE ANTONINO','C',5649),('AUTOFFICINA FUDA DI','C',5650),('TUTTO RICAMBI DI PRIOLO MARCO','C',5651),('LUCKY BAR RUGARI & GALLETTA S.A.S','C',5652),('ROCCAFORTE EURORICAMBI','C',5653),('CENTRO MIDAS REGGIO CALABRIA','C',5654),('BELLANTONI VINCENZO','C',5655),('AUTOFFICINA MISIANO SALVATORE','C',5656),('DEMASI GIUSEPPE','C',5657),('DIESELTRUCK DI ALFANO FABIO','C',5658),('ARIGANELLO MASSIMO AUTORICAMBI','C',5659),('MI.RA. RICAMBI SAS MIRA','C',5660),('AGF SICILIA srl','C',5661),('MOLISE RICAMBI di A.Tamburri SNC','C',5662),('GARANZIA EUROPA GROUP SPA','C',5663),('FORESTIERI BRUNO ITALTRONYC','C',5664),('MORABITO VITO','C',5666),('MORABITO SALVATORE','C',5667),('LA MECCANICA SRL','C',5668),('GENNARO CACCIAPUOTI','C',5669),('PALAMARA GIUSEPPE PIT STOP','C',5670),('POLITO CARBURANTI DI ROCCO POLITO','C',5671),('STAZ.SERV.AGIP DI FRUCI GIUSEPPE','C',5672),('MARTINO SRL','C',5673),('SCHIPANI MARIANGELA AUTORICAMBI','C',5674),('AUTO VIP SRL','C',5675),('VECCHI GIUSEPPE RICAMBI','C',5676),('FARNO FULVIO & S. snc','C',5677),('CIRIMELLI AUTORICAMBI DI SAVERIO P.','C',5678),('IL CANNETO TAMOIL DI POLITO A. SAS','C',5679),('CARDINALE AUTOMOBILI SRL','C',5680),('D.R.A.M. snc','C',5681),('MANCUSO ILARIA AUTORICAMBI','C',5682),('COTRONEO DOMENICO','C',5683),('GRANATA F.CO F.G. AUTORICAMBI','C',5684),('RE.MA.DI ESPOSITO R.& BELSITO M.SRL','C',5685),('STAZ.SERV.AGIP DI BAGNATO SALVATORE','C',5686),('CAMMILLERI GAETANO AUTO GT','C',5687),('AGRILU DI MALVASI LUCIA','C',5688),('R.G. di ROSARIO GAROFOLO','C',5689),('AUTOELETTRONICA F.LLI DOMINICI snc','C',5690),('MELI CAR RENTALS LTD','C',5691),('RF srl','C',5692),('RUSSO GIUSEPPE','C',5693),('FALCONE FRANCESCO','C',5694),('STEFANELLI DOMENICO','C',5695),('GR srl','C',5696),('DIMENSIONE AUTO SRL','C',5697),('LATTANZIO DONATELLA','C',5698),('AUTOCOM SRL','C',5699),('GIORDANO SALVATORE OFF.CHEVROLET','C',5700),('CO.R.A.R.09 SRL','C',5701),('TRIMARCAR AUTORIC.DI MACRI PALMA','C',5702),('VIOLAUTO SRL','C',5703),('G.& V.POLICASTRI SNC','C',5704),('A.G.S.RICAMBI SRL','C',5705),('FLORI MOTORI SRL unipersonale','C',5706),('CUCINOTTA ANGELO AUTORICAMBI','C',5707),('ARCURI MARCELLO AUTORICAMBI','C',5708),('GAMMA RICAMBI SRL','C',5709),('VIOLA VINCENZO AUTORICAMBI','C',5710),('BELLOCCO RAFFAELE','C',5711),('BELCASTRO ANGELO ACCESSORI','C',5712),('SAFFIOTI CARMELO IMPRESA EDILE','C',5713),('A.M.RICAMBI DI ESPOSITO S.','C',5714),('3C RICAMBI DI COLAPRISTI VINCENZO','C',5715),('SURACE AUTO DI SURACE ROCCO','C',5716),('DIEMME SRL','C',5717),('F.LLI SCANGA SRL','C',5718),('ARTE FERRO DI ROSARIO BAGNATO','C',5719),('AUTORIC.CHIURCO DI LORICCHIO V.ZO','C',5720),('TIRRENO SNC.DI LUCCHESE V.ZO','C',5721),('CO.GE.TECH SRL','C',5722),('SALADINI SRL','C',5723),('TURANO ARMANDO','C',5724),('G.E.S.T. AUTORICAMBI SRL','C',5725),('CONDO ANTONIO','C',5726),('PUNTO MARMITTE DI FERRARA DOMENICO','C',5727),('INTERNAZIONALE RICAMBI SRL','C',5728),('A.A.R. DI CURCIO VINCENZO','C',5729),('RIC.PIAGGIO F.LLI SERGI DI SERGI G.','C',5730),('LAURITO GIUSEPPE AUTORICAMBI','C',5731),('AUTORICAMBI TRE A DI A.LUZZI','C',5732),('VISCOMI AGOSTINO','C',5733),('GROUP ECO ITALIA SRL','C',5734),('MESITI LUCA','C',5735),('AUTORICAMBI SCHIRRIPA SAS','C',5736),('TRUSCELLI ANTONIO','C',5737),('AUTORIC.GODINO DI MENDICINO LORETTA','C',5739),('MICHELE CAROLI SRL','C',5741),('CIRIA ALESSIO AUTORICAMBI','C',5742),('F.LLI LORENTI RICAMBI AUTO SRL','C',5743),('R.S.RICAMBI DI ROBERTO SGAMBELLURI','C',5744),('ARCURI SISTINO AUTORICAMBI','C',5745),('2V CAR PARTS DI VALERIO MACRI','C',5746),('BARILLARI GIUSEPPE AUTORICAMBI','C',5747),('AUTORICAMBI COSENTINO SRL uniperson','C',5748),('EURORICAMBI SRLS','C',5749),('AUTORICAMBI 2G DI GIANFRANCO GARUFI','C',9002),('A.R.A. RICAMBI VENETICO srl','C',9005),('BELLANTONI DOMENICO','C',9034),('BASILE SANTO','C',9036),('AUTORICAMBIFOX DI FOSSATI MATTEO','C',9062),('GRANDI RICAMBI DI GRANDI SIMONE','C',9070),('CARUSO CALOGERO','C',9071),('CALDERONE PAOLO FRANCESCO','C',9074),('GAGLIO GIUSEPPE Ricambi Auto e Acc.','C',9185),('GIORGIANNI AUTORICAMBI S.N.C.','C',9190),('SAPORITO MASSIMO LAUTORICAMBIO','C',9284),('LOMBARDO SANTO','C',9285),('MICALI GIOVANNI','C',9324),('MERLINO ANTONINO','C',9331),('MILONE GIUSEPPE','C',9352),('CENTRO AUTO DI TRAMONTANO','C',9380),('PINTAUDI ROCCO','C',9422),('AUTORICAMBI DI PINO SRL','C',9475),('SETTIMO GIOVANNI','C',9502),('SANFILIPPO GIUSEPPE','C',9505),('STURNIOLO ANTONINO Elettrauto','C',9507),('SUD RICAMBI snc DI GUGLIOTTA C.& C.','C',9508),('SPRINT CAR AUTORICAMBI DI GRECO A.','C',9511),('GIORGIO FRANCESCO','C',9534),('TRIFILO FILIPPO TUTTO AUTORICAMBI','C',9537),('RIGGIO GIUSEPPE & C. SNC','C',9620),('CORRISPETTIVI','C',999999),('','F',0),('SAFFIOTI CARMELO SNC','F',1),('TRENTINELLA FRANCESCO','F',2),('PRINTING.CENTER','F',3),('MAZZULLO FORTUNATO','F',4),('MGG ITALIA S.R.L. GRUPPO IMCO','F',5),('GLS GENERAL LOGISTICS SYSTEMS','F',6),('CIFANI SRL','F',7),('BARTOLINI spa','F',8),('ITALIA RECAPITI S.R.L','F',9),('UNI EURO S.P.A','F',10),('FORMAT S.A.S. DI PISCOPO ANTONIO &C','F',11),('GIAMMARRESI NICOLO','F',12),('CANNATA VINCENZO srl','F',13),('GRIMAS srl Etichette','F',14),('CONSORZIO ASSORICAMBI','F',15),('B.C.R. srl','F',16),('CADI snc F.LLI MILASI','F',17),('JET EXPRESS srl CORRIERE ESPRESSO','F',18),('PAPERNET SPA','F',19),('FIAMMA DI A.SEMINARA','F',20),('COSTANZO SALVATORE','F',21),('MONDOFFICE SRL','F',22),('SOF.INN. INFORMATICA srl','F',23),('G.TRIPODI SRL','F',24),('ARMES SPA','F',25),('J-SOFTWARE SRL','F',26),('SARITEL','F',27),('SDA EXPRESS COURIER','F',28),('TRASPORTI PE.CAM','F',29),('CONSOZIO PDA','F',30),('OPITERGINA MARMITTE DI NESPOLO','F',31),('SCATOLIFICIO VENETO S.R.L.','F',32),('AUTOCOM SRL','F',33),('LT SRL LOGISTICA E TRASPORTI','F',34),('FUTIA DOMENICO','F',35),('SETEFI SPA GRUPPO INTESABCI','F',36),('ELPIDA D.O.O.','F',37),('I.F.R. DI MAURIZIO ROMANO','F',38),('CRUCITTI SRL','F',39),('GRAFICAJONICA SNC','F',40),('PANALPINA TRASP.MOND.SPA','F',41),('ARUBA SPA','F',42),('ENGINET SRL','F',43),('POLIGRAFICO SRL','F',44),('SERIBAG DI ZAGARI DANIELA','F',46),('PISANI FRANCESCO & FIGLI SPA','F',50),('INGROSUD DI PRATICO ANTONIO','F',51),('MEDIA WORLD COMPRA ON-LINE','F',53),('PM2 DI MILITANO NATALE','F',58),('RAG.PARISI GIUSEPPE','F',60),('REDOIL ITALIA spa','F',64),('BARBARO SPORT S.A.S.','F',75),('KRIOS A.C. srl','F',83),('SERFEM DI SERGIO FEMIA','F',86),('SOVEB AUTO SRL','F',90),('SUSA TRASPORTI SPA','F',93),('SDA sas DI PALMITESSA (UNIGOM)','F',94),('NOTAIO MARCELLA CLARA RENI','F',96),('AB ELETTROSISTEMI','F',97),('SOCET srl (TOTAL)','F',100),('DELIVERY EXPRESS','F',101),('TAZZETTI GUIDO & C. SPA Div.ACR','F',102),('COMPUTER ASSIST S.A.S. DI RUFFOLO','F',103),('ALDASA DI FRANCO SILENO','F',104),('STUDIO LEGALE AVV.GIULIANA METE','F',105),('TRIONE RICAMBI S.P.A','F',107),('RICAMBIFLEX GM srl','F',110),('CASA DEL RICAMBIO SRL','F',111),('LEONARDO SNC DIGITAL STUDIO','F',112),('MUSICO MACCHINE AGRICOLE','F',115),('ROBERT BOSCH spa','F',116),('C.B.F. BALDUCCI SPA','F',117),('ENGINE COMPONENTS srl GLASER','F',118),('SEAL-TECH SRL','F',119),('SMAT NORD srl','F',120),('RIVOIRA S.P.A','F',121),('BRENTA SRL','F',122),('RAPISARDA CARLO CARMELO','F',123),('CIEFFEBI TRASPORTI','F',124),('CAST BOLZONELLA S.A.S.','F',125),('EURODECOS S.R.L.','F',126),('DALTORICAMBI SRL','F',127),('LUBEX S.P.A.','F',128),('ITALTRADE SRL','F',129),('SAMAUTO SPA','F',130),('FRAP srl','F',135),('SOGEFI FILTRATION SPA','F',140),('UNIPART NV INTERNATIONAL RADIATOR','F',145),('EXIDE ITALIA SRL','F',150),('IBS SRL','F',155),('ASSOMARMITTE SRL','F',160),('IPS PARTS SRL','F',165),('OSRAV ALFEO MORET SPA DAMPO','F',170),('EXO AUTOMOTIVE SPA REMSA-OPENPARTS','F',175),('KAYABA ITALY GmbH','F',180),('SALADINI SRL','F',185),('CARTIERA LUCCHESE SPA (LUCART)','F',190),('TIRRENA IMPEX SRL','F',195),('FAAL BATTERIE SRL','F',200),('NRF ITALIA SRL','F',205),('DICRA SPA','F',210),('MECARM srl','F',215),('LEART-DIVISIONE EUROLITES SPA','F',1202),('EUROLITES S.P.A ARIC','F',1203),('MORONI CESARE & C. snc','F',1307),('M.T.S. spa','F',1310),('MAGNETI MARELLI AFTERMARKET AND SER','F',1323),('MALO spa','F',1329),('NEWFREN SPA','F',1401),('OLYMPIA srl','F',1501),('F.LLI TRIPODI SNC','F',1502),('FL.ITALIA srl OLEOBLITZ','F',1505),('OSRAM spa','F',1507),('PHILIPS SPA','F',1602),('DAYCO EUROPE SRL','F',1605),('RICAUTO SPA','F',1804),('R.M.S. S.P.A.','F',1817),('COMMERCIALE LUCANA snc','F',1901),('ENZO PARISI S.R.L.','F',1902),('SIOM S.R.L.','F',1908),('SIA INDUSTRIA ACCUMULATORI spa','F',1914),('SIMAKA','F',1923),('SITO GRUPPO INDISTRIALE spa','F',1935),('TOMAS RENATO & BRUNO sas','F',2001),('UMMAC srl','F',2201),('VEMA srl','F',2306),('VALEO SERVICE ITALIA S.P.A.','F',2308),('WD-40 COMPANY LTD','F',2309),('A.C.S. DI CORDOVANA SALVATORE','F',3101),('DELTA SERVICE snc','F',3103),('AUTOFORNITURE MILANESI spa','F',3104),('AGIP PETROLI ( Agenzia RC )','F',3105),('ARSAUTO SRL','F',3110),('AREXONS DIVISIONE DI FL SELENIA SPA','F',3116),('BOSATTA F.LLI \"F.B.\"srl','F',3201),('BIFFI & PREMOLI srl','F',3205),('BERGAMASCHI & F. spa','F',3213),('F.G.WOLF SRL','F',3302),('C.D.A. spa','F',3303),('CENTAURO srl','F',3307),('CASA DEL BULLONE sas','F',3311),('ORIGINAL BIRTH spa','F',3314),('FORTEBUONO METALLINFISSI SRL','F',3321),('C.C.R. srl CENTRO CUSCINETTI','F',3325),('CRAMER SRL','F',3328),('TOMMASELLI srl','F',3401),('DELLORTO spa','F',3403),('FEDERAL MOGUL ITALY SRL','F',3408),('F.A. ITALIA snc','F',3620),('FODONE sas','F',3621),('GUARNITAUTO spa','F',3707),('G.V.S. DI SALA RINALDO','F',3718),('PRES-SING S.A.S.','F',3906),('CODICI ANNULLATI','F',9999),('','F',999999);");
+
+ statement.close();
+ conn.commit();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ } finally {
+ connectionPool.releaseConnection(conn);
+ }
+ }
+}
diff --git a/uitest/vaadin-server.xml b/uitest/vaadin-server.xml
index 3628483436..e02fab8564 100644
--- a/uitest/vaadin-server.xml
+++ b/uitest/vaadin-server.xml
@@ -11,6 +11,10 @@
<java classname="org.mortbay.jetty.runner.Runner" fork="yes">
<arg value="--port" />
<arg value="8888" />
+ <arg value="--out" />
+ <arg value="${vaadin.basedir}/result/jetty.out" />
+ <arg value="--log" />
+ <arg value="${vaadin.basedir}/result/jetty.log" />
<arg value="${war.file}" />
<classpath refid="classpath.jetty" />
<jvmarg value="-ea" />